【PyTorch】7-生态简介

PyTorch:7-生态简介

注:所有资料来源且归属于thorough-pytorch(https://datawhalechina.github.io/thorough-pytorch/),下文仅为学习记录

7.1:torchvision

7.1.1:简介

The torchvision package consists of popular datasets, model architectures, and common image transformations for computer vision.

常用库:

  • torchvision.datasets
  • torchvision.models
  • torchvision.tramsforms
  • torchvision.io
  • torchvision.ops
  • torchvision.utils

7.1.2:torchvision.datasets

包含在计算机视觉中常见的数据集

例如:

  • CIFAR
  • ImageNet
  • VOC
  • MNIST

7.1.3:torchvision.transforms

包含数据预处理方法和数据增强方法

Transforming and augmenting images — Torchvision 0.18 documentation (pytorch.org)

案例:

from torchvision import transforms
data_transform = transforms.Compose([
    transforms.ToPILImage(),   # 这一步取决于后续的数据读取方式,如果使用内置数据集则不需要
    transforms.Resize(image_size),
    transforms.ToTensor()
])

7.1.4:torchvision.models

包含常用模型及其预训练模型

**图像分类:**例如AlexNet、VGG等;其预训练模型使用的数据集是ImageNet-1K

**语义分割:**例如FCN ResNet50、DeepLabV3 ResNet50等;其预训练模型使用的数据集是COCO train2017

**目标检测/实例分割/关键点检测:**例如Faster R-CNN、RetinaNet等;其预训练模型使用的数据集是COCO train2017

**视频分类:**例如ResNet 3D 18等;其预训练模型使用的数据集是COCO train2017

7.1.5:torchvision.io

提供视频、图片和文件的 IO 操作的功能,包括读取、写入、编解码处理操作

注意事项:

  • 不同版本之间,torchvision.io有着较大变化。在使用时,需要查看下当前的torchvision版本是否存在想使用的方法。
  • 除了read_video()等方法,torchvision.io提供了一个细粒度的视频API torchvision.io.VideoReader() ,它具有更高的效率并且更加接近底层处理。在使用时,需要先安装ffmpeg然后从源码重新编译torchvision我们才能我们能使用这些方法。
  • 在使用Video相关API时,最好提前安装好PyAV这个库。

7.1.6:torchvision.ops

提供许多计算机视觉的特定操作,包括但不仅限于NMS,RoIAlign(MASK R-CNN中应用的一种方法),RoIPool(Fast R-CNN中用到的一种方法)

Operators — Torchvision 0.18 documentation (pytorch.org)

7.1.7:torchvision.utils

提供一些可视化的方法,帮助将若干张图片拼接在一起、可视化检测和分割的效果

7.2:PyTorchVideo

Meta推出了PyTorchVideo深度学习库,专注于视频理解工作

PytorchVideo 提供了加速视频理解研究所需的可重用、模块化和高效的组件。

支持不同的深度学习视频组件,如视频模型、视频数据集和视频特定转换。

7.2.1:主要部件和亮点

  • 基于 PyTorch
  • **Model Zoo:**提供包含I3D、R(2+1)D、SlowFast、X3D、MViT等SOTA模型的高质量model zoo,并且PyTorchVideo的model zoo调用与PyTorch Hub | PyTorch做了整合,大大简化模型调用。
  • **数据预处理和常见数据:**支持Kinetics-400, Something-Something V2, Charades, Ava (v2.2), Epic Kitchen, HMDB51, UCF101, Domsev等主流数据集和相应的数据预处理,同时还支持randaug, augmix等数据增强trick。
  • **模块化设计:**包括data, transforms, layer, model, accelerator等模块,方便用户进行调用和读取。
  • 支持多模态
  • 移动端部署优化

7.2.2:安装

使用pip:

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

7.2.3:model zoo和benchmark

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

  • TorchHub,模型已在TorchHub存在,可以根据实际情况来选择需不需要使用预训练模型。官方教程 tutorial 。
  • PySlowFast,使用 PySlowFast workflow 去训练或测试PyTorchVideo models/datasets.
  • PyTorch Lightning建立一个工作流进行处理,官方教程 tutorial。

7.3:torchtext

用于自然语言处理(NLP)的工具包

和CV工具包的功能差异:

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

torchtext可以方便的对文本进行预处理,例如截断补长、构建词表等。

7.3.1:主要组成部分

torchtext主要包含了以下的主要组成部分:

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

7.3.2:安装

使用pip安装:

pip install torchtext

7.3.3:构建数据集

【1】Field

Field是torchtext中定义数据类型以及转换为张量的指令。

torchtext 认为一个样本是由多个字段(文本字段,标签字段)组成,不同的字段可能会有不同的处理方式。

定义Field对象是为了明确如何处理不同类型的数据,但具体的处理则是在Dataset中完成的。

案例:

(1)构建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的

(2)进一步构建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)

(3)检查读入的数据情况

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

总结

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

【2】词汇表vocab

Word Embedding:将字符串形式的词语(word)转变为数字形式的向量表示(embedding)

基本思想:收集一个比较大的语料库(尽量与所做的任务相关),在语料库中使用word2vec之类的方法构建词语到向量(或数字)的映射关系,之后将这一映射关系应用于当前的任务,将句子中的词语转为向量表示。

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

TEXT.build_vocab(train)

【3】数据迭代器

本质:torchtext中的DataLoader

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

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)

【4】使用自带数据集

torchtext提供若干常用的数据集方便快速进行算法测试。

7.3.4:评测指标metric

机器翻译任务常用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)

7.3.5:其他

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

7.4:torchaudio

用于语音处理的工具包

应用场景包括说话人识别(Speaker Identification),说话人分离(Speaker Diarization),音素识别(Phoneme Recognition),语音识别(Automatic Speech Recognition),语音分离(Speech Separation),文本转语音(TTS)等任务。

CV有torchvision,NLP有torchtext,Audio有torchaudio。

7.4.1:主要组成部分

torchaduio主要包括以下几个部分:

  • torchaudio.io:有关音频的I/O
  • torchaudio.backend:提供了音频处理的后端,包括:sox,soundfile等
  • torchaudio.functional:包含了常用的语音数据处理方法,如:spectrogram,create_fb_matrix等
  • torchaudio.transforms:包含了常用的语音数据预处理方法,如:MFCC,MelScale,AmplitudeToDB等
  • torchaudio.datasets:包含了常用的语音数据集,如:VCTK,LibriSpeech,yesno等
  • torchaudio.models:包含了常用的语音模型,如:Wav2Letter,DeepSpeech等
  • torchaudio.models.decoder:包含了常用的语音解码器,如:GreedyDecoder,BeamSearchDecoder等
  • torchaudio.pipelines:包含了常用的语音处理流水线,如:SpeechRecognitionPipeline,SpeakerRecognitionPipeline等
  • torchaudio.sox_effects:包含了常用的语音处理方法,如:apply_effects_tensor,apply_effects_file等
  • torchaudio.compliance.kaldi:包含了与Kaldi工具兼容的方法,如:load_kaldi_fst,load_kaldi_ark等
  • torchaudio.kalid_io:包含了与Kaldi工具兼容的方法,如:read_vec_flt_scp,read_vec_int_scp等
  • torchaudio.utils:包含了常用的语音工具方法,如:get_audio_backend,set_audio_backend等

7.4.2:安装

pip install torchaudio

conda install torchaudio

7.4.3:datasets的构建

对于一些公共数据集,可以主要通过torchaudio.datasets来实现。

对于私有数据集,可以通过继承torch.utils.data.Dataset来构建自己的数据集。

数据集的读取和处理,可以通过torch.utils.data.DataLoader来实现。

案例:

import torchaudio
import torch

# 公共数据集的构建
yesno_data = torchaudio.datasets.YESNO('.', download=True)
data_loader = torch.utils.data.DataLoader(
    yesno_data,
    batch_size=1,
    shuffle=True,
    num_workers=4)

通过命令查看语音数据集

import torchaudio
dir(torchaudio.datasets)
"""
['CMUARCTIC','CMUDict','COMMONVOICE','DR_VCTK','FluentSpeechCommands',
'GTZAN','IEMOCAP','LIBRISPEECH','LIBRITTS','LJSPEECH','LibriLightLimited',
'LibriMix','MUSDB_HQ','QUESST14','SPEECHCOMMANDS','Snips','TEDLIUM',
'VCTK_092','VoxCeleb1Identification','VoxCeleb1Verification','YESNO']
"""

7.4.4:model和pipeline构建

torchaudio.models包含了常见语音任务的模型的定义,包括:Wav2Letter,DeepSpeech,HuBERTPretrainModel等。

torchaudio.pipelines则是将预训练模型和其对应的任务组合在一起,构成了一个完整的语音处理流水线。

7.4.5:transforms和functional的使用

torchaudio.transform包含常见的音频处理和特征提取。torchaudio.functional包括了一些常见的音频操作的函数。

torchaudio.transforms继承于torch.nn.Module,但是不同于torchvision.transforms,torchaudio没有compose方法将多个transform组合起来。

因此,torchaudio构建transform pipeline的常见方法是自定义模块类或使用torch.nn.Sequential将他们在一起,然后将其移动到目标设备和数据类型。

# Define custom feature extraction pipeline.
#
# 1. Resample audio
# 2. Convert to power spectrogram
# 3. Apply augmentations
# 4. Convert to mel-scale
#
class MyPipeline(torch.nn.Module):
    def __init__(
        self,
        input_freq=16000,
        resample_freq=8000,
        n_fft=1024,
        n_mel=256,
        stretch_factor=0.8,
    ):
        super().__init__()
        self.resample = Resample(orig_freq=input_freq, new_freq=resample_freq)
        self.spec = Spectrogram(n_fft=n_fft, power=2)
        self.spec_aug = torch.nn.Sequential(
            TimeStretch(stretch_factor, fixed_rate=True),
            FrequencyMasking(freq_mask_param=80),
            TimeMasking(time_mask_param=80),
        )
        self.mel_scale = MelScale(
            n_mels=n_mel, sample_rate=resample_freq, n_stft=n_fft // 2 + 1)

    def forward(self, waveform: torch.Tensor) -> torch.Tensor:
        # Resample the input
        resampled = self.resample(waveform)
        # Convert to power spectrogram
        spec = self.spec(resampled)
        # Apply SpecAugment
        spec = self.spec_aug(spec)
        # Convert to mel-scale
        mel = self.mel_scale(spec)
        return mel

7.4.6:compliance和kaldi_io的使用

Kaldi是一个用于语音识别研究的工具箱

在torchaudio.compliance.kaldi中,torchaudio提供了以下三种方法:

  • torchaudio.compliance.kaldi.spectrogram:从语音信号中提取Spectrogram特征
  • torchaudio.compliance.kaldi.fbank:从语音信号中提取FBank特征
  • torchaduio.compliance.kaldi.mfcc:从语音信号中提取MFCC特征

torchaudio.kaldi_io的主要接口包括:

  • torchaudio.kaldi_io.read_vec_int_ark:从Kaldi的scp文件中读取float类型的数据
  • torchaudio.kaldi_io.read_vec_flt_scp
  • torchaudio.kaldi_io.read_vec_flt_ark
  • torchaudio.kaldi_io.read_mat_scp
  • torchaudio.kaldi_io.read_mat_ark

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/595068.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript继承的方法和优缺点

原型链继承 让一个构造函数的原型是另一个类型的实例,那么这个构造函数new出来的实例就具有该实例的属性。 优点: 写法方便简洁,容易理解。 缺点: 在父类型构造函数中定义的引用类型值的实例属性,会在子类型原型上…

华中科技大学雷达站部署

一:项目地址 GitHub - HUSTLYRM/HUST_Radar_2023: 华中科技大学狼牙战队 RoboMaster 2023赛季 雷达站 二:安装依赖 2.1创建虚拟环境 首先是程序是基于python3.8完成,所以创建虚拟环境的时候,选择3.8的虚拟环境 conda create -…

【算法刷题日志】吸氧羊的StarryCoding之旅 - 贡献法计算

题目链接:https://www.starrycoding.com/problem/3 题目描述 吸氧羊终于注册了一个StarryCoding账号!(她很开心) 但是吸氧羊忘记了它的密码,她想起你是计算机大师,于是就来请教你。 她虽然不记得密码了…

nacos开启登录开关启动报错“Unable to start embedded Tomcat”

nacos 版本:2.3.2 2.2.2版本之前的Nacos默认控制台,无论服务端是否开启鉴权,都会存在一个登录页;在之后的版本关闭了默认登录页面,无需登录直接进入控制台操作。在这里我们可以在官网可以看到相关介绍 而我现在所用的…

中国各地级市城投债详细数据(2006年-2023年2月)

01、数据简介 城投债又称为准市政债,发行主体是地方ZF投资平台,公开发行企业债和中期票据,其业主一般是地方基础设施建设,或者公益性项目主体,参与债券发行环节的当地ZF发债。 数据整理中国各地级市的城投债详细数据…

opencv图片的旋转-------c++

图片的旋转 /// <summary> /// 图片的旋转 /// </summary> /// <param name"img"></param> /// <param name"angle">旋转角度:正数&#xff0c;则表示逆时针旋转;负数&#xff0c;则表示顺时针旋转</param> /// <…

【intro】图卷积神经网络(GCN)

本文为Graph Neural Networks(GNN)学习笔记-CSDN博客后续&#xff0c;内容为GCN论文阅读&#xff0c;相关博客阅读&#xff0c;kaggle上相关的数据集/文章/代码的阅读三部分&#xff0c;考虑到本人是GNN新手&#xff0c;会先从相关博客开始&#xff0c;进一步看kaggle&#xff…

考虑极端天气线路脆弱性的配电网分布式电源和储能优化配置模型

1 主要内容 程序主要参考《考虑极端天气线路脆弱性的配电网分布式电源配置优化模型-马宇帆》&#xff0c;针对极端天气严重威胁配电网安全稳定运行的问题。基于微气象、微地形对配电网的线路脆弱性进行分析&#xff0c;然后进行分布式电源接入位置与极端天气的关联性分析&…

优优嗨聚集团:法律明灯,个债处理中的法律咨询力量

在现代社会&#xff0c;个人债务问题日益突出&#xff0c;无论是因生活消费、投资失利还是其他原因&#xff0c;债务问题都可能成为个人财务的一大负担。面对复杂的债务困境&#xff0c;许多人感到迷茫和无助。此时&#xff0c;法律咨询如同一盏明灯&#xff0c;能够为个人债务…

Docker 安装部署 postgres

Docker 安装部署 postgres 1、拉取 postgres 镜像文件 [rootiZbp19a67kznq0h0rgosuxZ ~]# docker pull postgres:latest latest: Pulling from library/postgres b0a0cf830b12: Pull complete dda3d8fbd5ed: Pull complete 283a477db7bb: Pull complete 91d2729fa4d5: Pul…

自动化测试 selenium基础

前言 我们都知道测试开发工程师的任务是根据用户需求测试用例的同时,害的开发自动化工具来减轻测试压力且提高测试的效率以及质量,这一节我们就来简单谈谈开发简单的自动化工具基础 什么是自动化测试呢?就是将我们需要做的测试交给机器去做,也就是使用代码来模拟人对于机器的行…

openKylin 2.0 Alpha2 X86 安装教程

原文链接&#xff1a;openKylin 2.0 Alpha2 X86 安装教程 Hello&#xff0c;大家好啊&#xff01;今天我们将讨论如何在VMware Workstation上安装openKylin 2.0 Alpha2 X86版。openKylin是一个基于Linux的操作系统&#xff0c;旨在提供高性能、可靠性强的系统体验。在虚拟化软件…

docker Harbor私有仓库部署管理

搭建本地私有仓库&#xff0c;但是本地私有仓库的管理和使用比较麻烦&#xff0c;这个原生的私有仓库并不好用&#xff0c;所以我们采用harbor私有仓库&#xff0c;也叫私服&#xff0c;更加人性化。 一、什么是Harbor Harbor是VWware 公司开源的企业级Docker Registry项…

【前端热门框架【vue框架】】——事件处理与表单输入绑定以及学习技巧,让学习如此简单

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;程序员-曼亿点 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 曼亿点 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a…

Linux IP Forwarding路由转发实验

linux 路由转发功能 Linux 操作系统具备路由转发功能&#xff0c;路由功能是指 Linux 操作系统提供的路由管理和转发功能&#xff0c;它允许 Linux 主机在网络中正确地转发数据包&#xff0c;并确保数据包能够达到其目的地。 出于安全考虑&#xff0c;Linux系统默认是禁止数据…

主生产计划有多重要,看完这篇就懂了

导 读 我们是否也经常遇到&#xff1a; 有时工厂加班加点也不能完成任务&#xff0c; 有时设备闲置&#xff0c;很多工人没有活干&#xff0c; 我们是不是还没运行主生产计划管理&#xff1f; 什么是主生产计划 在制造业中&#xff0c;主生产计划(MPS&#xff09;是根据销售…

泛型通配符

泛型&通配符 文章目录 泛型&通配符一、泛型介绍&理解1.1 泛型概述&使用(集合/比较器)1.2 自定义范型结构(类/接口/方法) 二、通配符&读写特点三、企业真题 一、泛型介绍&理解 1.1 泛型概述&使用(集合/比较器) 泛型&#xff1a;类似于场景中的标签…

Android getevent命令详细分析

在调试Android 的输入事件时&#xff0c;经常使用 “getevent -lrt” 命令&#xff0c;来确认驱动上报数据是否正常。从源码的角度来详细的分析一下getevent 这个程序。 首先用ls命令来看一下getevent lrwxr-xr-x 1 root shell 7 2023-11-20 10:08 system/bin/getevent -> …

学习java中的interface接口

1.了解接口 java提供了一个关键字interface&#xff0c;用这个关键字我们可以定义出一个特殊的结构&#xff1a;接口 格式&#xff1a; public interface 接口名{ //成员变量&#xff08;常量&#xff09; //成员方法&#xff08;抽象方法&#xff09; } 注意&#xff1a;接…

cmake进阶:宏定义

一. 简介 前面学习了 CMakeLists.txt语法中是如何定义函数&#xff0c;本文继续学习 cmake中的宏定义。 二. cmake进阶&#xff1a;宏定义 cmake 提供了定义宏的方法&#xff0c;cmake 中函数 function 和宏定义 macro 在某种程度上来说是一样的&#xff0c;都是创建一段有…