PyTorch生态
torchvision
torchvision包含了在计算机视觉中常常用到的数据集,模型和图像处理的方式,我们经常会用到torchvision来调用预训练模型,加载数据集,对图片进行数据增强的操作。
具体来说,torchvision包括了以下这几部分(*表示经常会使用到)
torchvision.datasets*
torchvision.datasets
主要包含了一些我们在计算机视觉中常见的数据集,torchvision==0.10.0
中包括了UCF101数据集,这里是官方文档。
orchvision.datasets.UCF101(root: str,
annotation_path: str,
frames_per_clip: int,
step_between_clips: int = 1,
frame_rate: Optional[int] = None,
fold: int = 1,
train: bool = True,
transform: Optional[Callable] = None,
_precomputed_metadata: Optional[Dict[str, Any]] = None,
num_workers: int = 1,
_video_width: int = 0,
_video_height: int = 0,
_video_min_dimension: int = 0,
_audio_samples: int = 0)
其中root
为根目录,annotation_path
是划分的文件的路径,frames_per_clip
是每个样本含有的帧数,step_between_clips
是隔几帧取一帧
这些操作使用VideoClips
对象来完成
torchvision.transforms*
transforms主要是对图片类型的数据进行一些预处理的操作,如归一化、大小缩放、数据增强等,具体操作可以参考这个和这里
torchvision.models
PyTorch官方提供了一些预训练好的模型,具体来说,涉及到视频的模型还可以在Video Model Zoo和PySlowFast中看看
目前视频分类模型有三个:ResNet 3D 18, ResNet MC 18, ResNet (2+1) D,他们均是在Kinetics-400数据集上进行训练的,准确率都不太高的亚子(Kinetics-400 acc@1-54%; acc@5-76%)
torchvision.io
torchvision.io
提供了视频、图片和文件的 IO 操作的功能,它们包括读取、写入、编解码处理操作,但是在使用的过程中,我们要注意以下几点:
- 不同版本之间,
torchvision.io
有着较大变化,使用时,需要查看当前版本是否有想要的方法 - 除了
read_video()
等方法,torchvision.io为我们提供了一个细粒度的视频APItorchvision.io.VideoReader()
,它具有更高的效率并且更加接近底层处理。但是需要先安装ffmpeg然后从源码重新编译torchvision才能使用这些方法 - 在使用Video相关API时,最好提前安装好PyAV这个库
torchvision.ops
orchvision.ops 为我们提供了许多计算机视觉的特定操作,包括但不仅限于NMS,RoIAlign(MASK R-CNN中应用的一种方法),RoIPool(Fast R-CNN中用到的一种方法),更多的函数介绍点击这里
torchvision.utils
torchvision.utils 为我们提供了一些可视化的方法,可以帮助我们将若干张图片拼接在一起、可视化检测和分割的效果。具体方法可以点击这里进行查看
PyTorchVideo
有关视频的深度学习模型仍然有着许多缺点:
- 计算资源耗费更多,并且没有高质量的
model zoo
,不能像图片一样进行迁移学习和论文复现 - 数据集处理较麻烦,但没有一个很好的视频处理工具
- 随着多模态越来越流行,亟需一个工具来处理其他模态
为了解决这些问题,Meta推出了PyTorchVideo
深度学习库,这是一个专注于视频理解工作的深度学习库,提供了加速视频理解研究所需的可重用、模块化和高效的API,支持不同的深度学习视频组件,如视频模型、视频数据集和视频特定转换,最重要的是,PytorchVideo也提供了model zoo,使得人们可以使用各种先进的预训练视频模型及其评判基准。
亮点如下:
- 基于PyTorch
- PyTorchVideo的model zoo调用与PyTorch Hub做了整合,大大简化模型调用
- 支持UCF101等主流数据集和相应的数据预处理,支持randaug, augmix等数据增强trick
- 提供许多模块方便用户调用修改,在PyTorchVideo中具体来说包括data, transforms, layer, model, accelerator等模块,方便用户进行调用和读取
- 现在对多模态的支持包括了visual和audio
- 支持针对移动端模型的部署优化
使用
使用pip install pytorchvideo
来安装,但是要注意:
Model zoo和benchmark
PyTorchVideo提供了三种使用Model zoo的方法, 并且给每一种都配备了tutorial
- TorchHub,这些模型都已经在TorchHub存在。我们可以根据实际情况来选择需不需要使用预训练模型。除此之外,官方也给出了TorchHub使用的 tutorial
- PySlowFast,使用 PySlowFast workflow 去训练或测试PyTorchVideo models/datasets
- PyTorch Lightning建立一个工作流进行处理,点击查看官方 tutorial
总的来说,PyTorchVideo的使用与torchvision的使用方法类似,具体的我们可以通过查看官方文档和一些例程来了解使用方法
问题:
- PyTorchVideo中没有基于UCF101训练的数据集,只有Kinetics 400等
- PyTorchVideo可以导入UCF101进行训练,目前的想法是把之前的视频分类模型弄懂,然后想办法加到ART攻击框架里去