锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

task06 PyTorch生态

时间:2023-04-28 17:37:01 4x1变送器

task06 PyTorch生态

1. PyTorchVideo简介

在这里插入图片描述

近年来,随着传播媒体和视频平台的发展,视频正在取代图片,成为下一代的主流媒体,这也使得视频的深度学习模型越来越受到关注。然而,视频的深度学习模型仍有许多缺点:

  • 计算资源消耗更多,没有高质量model zoo,迁移学习和论文复制不能像图片一样进行。
  • 数据集处理比较麻烦,但是没有好的视频处理工具。
  • 随着多模态越来越流行,需要一个工具来处理其他模态。

为了解决这些问题,还有部署优化等问题,Meta推出了PyTorchVideo深度学习库(包括组件)Figure 1所示)。PyTorchVideo 是一个专注于视频理解工作的深度学习库。PytorchVideo 提供可重用、模块化、高效的组件,加快视频理解研究。PyTorchVideo 是使用PyTorch支持视频模型、视频数据集、视频特定转换等不同深度学习的视频组件。

1.1 PyTorchVideo主要部件和亮点

PytorchVideo 模块化和高效地提供了加速视频理解研究所需的研究API。它还支持视频模型、视频数据集、视频特定转换等不同的深度学习视频组件,最重要的是,PytorchVideo也提供了model zoo,使人们能够使用各种先进的预训练视频模型及其判断基准。PyTorchVideo亮点如下:

1.2 PyTorchVideo的安装

可直接使用pip来安装PyTorchVideo:

pip install pytorchvideo 

注:

  • 虚拟环境的安装python版本 >= 3.7
  • PyTorch >= 1.8.0,安装的torchvision也需要匹配
  • CUDA >= 10.2
  • ioPath:具体情况
  • fvcore版本 >= 0.1.4:具体情况

1.3 Model zoo 和 benchmark

在以下部分,我将简要介绍一些PyTorchVideo所提供的Model zoo和benchmark

  • Kinetics-400
arch depth pretrain frame length x sample rate top 1 top 5 Flops (G) x views Params (M) Model
C2D R50 - 8x8 71.46 89.68 25.89 x 3 x 10 24.33 link
I3D R50 - 8x8 73.27 90.70 37.53 x 3 x 10 28.04 link
Slow R50 - 4x16 72.40 90.18 27.55 x 3 x 10 32.45 link
Slow R50 - 8x8 74.58 91.63 54.52 x 3 x 10 32.45 link
SlowFast R50 - 4x16 75.34 91.89 36.69 x 3 x 10 34.48 link
SlowFast R50 - 8x8 76.94 92.69 65.71 x 3 x 10 34.57 link
SlowFast R101 - 8x8 77.90 93.27 127.20 x 3 x 10 62.83 link
SlowFast R101 - 16x8 78.70 93.61 215.61 x 3 x 10 53.77 link
CSN R101 - 32x2 77.00 92.90 75.62 x 3 x 10 22.21 link
R(2 1)D R50 - 16x4 76.1 92.23 76.45 x 3 x 10 28.11 link
X3D XS - 4x12 69.12 88.63 0.91 x 3 x 10 3.79 link
X3D S - 13x6 73.33 91.27 2.96 x 3 x 10 3.79 link
X3D M - 16x5 75.94 92.72 6.72 x 3 x 10 3.79 link
X3D L - 16x5 77.44 93.31 26.64 x 3 x 10 6.15 link
MViT B - 16x4 78.85 93.85 70.80 x 1 x 5 36.61 link
MViT B - 32x3 80.30 94.69 170.37 x 1 x 5 36.61 link
  • Something-Something V2
arch depth pretrain frame length x sample rate top 1 top 5 Flops (G) x views Params (M) Model
Slow R50 Kinetics 400 8x8 60.04 85.19 55.10 x 3 x 1 31.96 link
SlowFast R50 Kinetics 400 8x8 61.68 86.92 66.60 x 3 x 1 34.04 link
  • Charades
arch depth pretrain frame length x sample rate MAP Flops (G) x views Params (M) Model
Slow R50 Kinetics 400 8x8 34.72 55.10 x 3 x 10 31.96 link
SlowFast R50 Kinetics 400 8x8 37.24 66.60 x 3 x 10 34.00 link
  • AVA (V2.2)
arch depth pretrain frame length x sample rate MAP Params (M) Model
Slow R50 Kinetics 400 4x16 19.5 31.78 link
SlowFast R50 Kinetics 400 8x8 24.67 33.82 link

1.4 使用 PyTorchVideo model zoo

PyTorchVideo提供了三种使用方法,并且给每一种都配备了tutorial

  • TorchHub,这些模型都已经在TorchHub存在。我们可以根据实际情况来选择需不需要使用预训练模型。除此之外,官方也给出了TorchHub使用的 tutorial 。

  • PySlowFast,使用 PySlowFast workflow 去训练或测试PyTorchVideo models/datasets.

  • PyTorch Lightning建立一个工作流进行处理,点击查看官方 tutorial。

  • 如果想查看更多的使用教程,可以点击 这里 进行尝试

总的来说,PyTorchVideo的使用与torchvision的使用方法类似,在有了前面的学习基础上,我们可以很快上手PyTorchVideo,具体的我们可以通过查看官方提供的文档和一些例程来了解使用方法:官方网址

2. torchtext简介

本节我们来介绍PyTorch官方用于自然语言处理(NLP)的工具包torchtext。自然语言处理也是深度学习的一大应用场景,近年来随着大规模预训练模型的应用,深度学习在人机对话、机器翻译等领域的取得了非常好的效果,也使得NLP相关的深度学习模型获得了越来越多的关注。

由于NLP和CV在数据预处理中的不同,因此NLP的工具包torchtext和torchvision等CV相关工具包也有一些功能上的差异,如:

  • 数据集(dataset)定义方式不同
  • 数据预处理工具
  • 没有琳琅满目的model zoo

本节介绍参考了atnlp的Github,在此致谢!

2.1 torchtext的主要组成部分

torchtext可以方便的对文本进行预处理,例如截断补长、构建词表等。torchtext主要包含了以下的主要组成部分:

  • 数据处理工具 torchtext.data.functional、torchtext.data.utils
  • 数据集 torchtext.data.datasets
  • 词表工具 torchtext.vocab
  • 评测指标 torchtext.metrics

2.2 torchtext的安装

torchtext可以直接使用pip进行安装:

pip install torchtext

2.3 构建数据集

  • Field及其使用

Field是torchtext中定义数据类型以及转换为张量的指令。torchtext 认为一个样本是由多个字段(文本字段,标签字段)组成,不同的字段可能会有不同的处理方式,所以才会有 Field 抽象。定义Field对象是为了明确如何处理不同类型的数据,但具体的处理则是在Dataset中完成的。下面我们通过一个例子来简要说明一下Field的使用:

tokenize = lambda x: x.split()
TEXT = data.Field(sequential=True, tokenize=tokenize, lower=True, fix_length=200)
LABEL = data.Field(sequential=False, use_vocab=False)

其中:

sequential设置数据是否是顺序表示的;

tokenize用于设置将字符串标记为顺序实例的函数

lower设置是否将字符串全部转为小写;

fix_length设置此字段所有实例都将填充到一个固定的长度,方便后续处理;

use_vocab设置是否引入Vocab object,如果为False,则需要保证之后输入field中的data都是numerical的

构建Field完成后就可以进一步构建dataset了:

from torchtext import data
def get_dataset(csv_data, text_field, label_field, test=False):
    fields = [("id", None), # we won't be needing the id, so we pass in None as the field
                 ("comment_text", text_field), ("toxic", label_field)]       
    examples = []

    if test:
        # 如果为测试集,则不加载label
        for text in tqdm(csv_data['comment_text']):
            examples.append(data.Example.fromlist([None, text, None], fields))
    else:
        for text, label in tqdm(zip(csv_data['comment_text'], csv_data['toxic'])):
            examples.append(data.Example.fromlist([None, text, label], fields))
    return examples, fields

这里使用数据csv_data中有"comment_text"和"toxic"两列,分别对应text和label。

train_data = pd.read_csv('train_toxic_comments.csv')
valid_data = pd.read_csv('valid_toxic_comments.csv')
test_data = pd.read_csv("test_toxic_comments.csv")
TEXT = data.Field(sequential=True, tokenize=tokenize, lower=True)
LABEL = data.Field(sequential=False, use_vocab=False)

# 得到构建Dataset所需的examples和fields
train_examples, train_fields = get_dataset(train_data, TEXT, LABEL)
valid_examples, valid_fields = get_dataset(valid_data, TEXT, LABEL)
test_examples, test_fields = get_dataset(test_data, TEXT, None, test=True)
# 构建Dataset数据集
train = data.Dataset(train_examples, train_fields)
valid = data.Dataset(valid_examples, valid_fields)
test = data.Dataset(test_examples, test_fields)

可以看到,定义Field对象完成后,通过get_dataset函数可以读入数据的文本和标签,将二者(examples)连同field一起送到torchtext.data.Dataset类中,即可完成数据集的构建。使用以下命令可以看下读入的数据情况:

# 检查keys是否正确
print(train[0].__dict__.keys())
print(test[0].__dict__.keys())
# 抽查内容是否正确
print(train[0].comment_text)
  • 词汇表(vocab)

在NLP中,将字符串形式的词语(word)转变为数字形式的向量表示(embedding)是非常重要的一步,被称为Word Embedding。这一步的基本思想是收集一个比较大的语料库(尽量与所做的任务相关),在语料库中使用word2vec之类的方法构建词语到向量(或数字)的映射关系,之后将这一映射关系应用于当前的任务,将句子中的词语转为向量表示。

在torchtext中可以使用Field自带的build_vocab函数完成词汇表构建。

TEXT.build_vocab(train)
  • 数据迭代器

其实就是torchtext中的DataLoader,看下代码就明白了:

from torchtext.data import Iterator, BucketIterator
# 若只针对训练集构造迭代器
# train_iter = data.BucketIterator(dataset=train, batch_size=8, shuffle=True, sort_within_batch=False, repeat=False)

# 同时对训练集和验证集进行迭代器的构建
train_iter, val_iter = BucketIterator.splits(
        (train, valid), # 构建数据集所需的数据集
        batch_sizes=(8, 8),
        device=-1, # 如果使用gpu,此处将-1更换为GPU的编号
        sort_key=lambda x: len(x.comment_text), # the BucketIterator needs to be told what function it should use to group the data.
        sort_within_batch=False
)

test_iter = Iterator(test, batch_size=8, device=-1, sort=False, sort_within_batch=False)

torchtext支持只对一个dataset和同时对多个dataset构建数据迭代器。

  • 使用自带数据集

与torchvision类似,torchtext也提供若干常用的数据集方便快速进行算法测试。可以查看官方文档寻找想要使用的数据集。

2.4 评测指标(metric)

NLP中部分任务的评测不是通过准确率等指标完成的,比如机器翻译任务常用BLEU (bilingual evaluation understudy) score来评价预测文本和标签文本之间的相似程度。torchtext中可以直接调用torchtext.data.metrics.bleu_score来快速实现BLEU,下面是一个官方文档中的一个例子:

from torchtext.data.metrics import bleu_score
candidate_corpus = [['My', 'full', 'pytorch', 'test'], ['Another', 'Sentence']]
references_corpus = [[['My', 'full', 'pytorch', 'test'], ['Completely', 'Different']], [['No', 'Match']]]
bleu_score(candidate_corpus, references_corpus)
0.8408964276313782

2.5 其他

值得注意的是,由于NLP常用的网络结构比较固定,torchtext并不像torchvision那样提供一系列常用的网络结构。模型主要通过torch.nn中的模块来实现,比如torch.nn.LSTM、torch.nn.RNN等。

备注:

y’, ‘Different’]], [[‘No’, ‘Match’]]]
bleu_score(candidate_corpus, references_corpus)
0.8408964276313782


### 2.5 其他

值得注意的是,由于NLP常用的网络结构比较固定,torchtext并不像torchvision那样提供一系列常用的网络结构。模型主要通过torch.nn中的模块来实现,比如torch.nn.LSTM、torch.nn.RNN等。

**备注:**

对于文本研究而言,当下Transformer已经成为了绝对的主流,因此PyTorch生态中的[HuggingFace](https://huggingface.co/)等工具包也受到了越来越广泛的关注。这里强烈建议读者自行探索相关内容,可以写下自己对于HuggingFace的笔记,如果总结全面的话欢迎pull request,充实我们的课程内容。
锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章