PytorchVideo Transforms 详解
文章目录
- 0. 前言
- 1. Mix 操作
- 2. 普通操作
- 2.1 Norm 与其他
- 2.2 Sample Strategy
- 2.3 Resize & Crop
- 3. “高端”数据增强
- 4. create_video_transform
0. 前言
- 看到 PytorchVideo 中有 RandAugment 以及 AugMix,我有心把这些引入 MMAction2。
- 在写代码之前,先详细了解下 PyTorchVideo Transforms 的细节。
- PytorchVideo Transforms 主要可分为
- Mix操作,即多个 clips 之间的操作,如 Cumix、Mixup
- 普通操作,如切片、resize 等
- RandAument、AugMix 等
create_video_transform
,也就是整合整体数据预处理pipeline
1. Mix 操作
- 源码:mix.py
- 目前实现有 Cutmix 和 Mixup,主要功能是:对同一个batch中的不同sample进行融合
- Mixup 和 Cutmix 的原理不介绍了,以前写过笔记,主要关注接口形式
- 两个对象的构造都是集成了
torch.nn.Module
- 初始化方法参数一致,都是
alpha/label_smoothing/num_classes
,第一个参数是 beta 分布的参数,后面是是否进行 label_smoothing。 - 除了构造函数,都覆盖了
forward
方法,形参是两个torch.Tensor
,分别表示输入数据以及GT标签。- 输入数据的形式是
(B, C, T, H, W)
,对应的GT形如(B,)
(换句话说,是label id而不是 one-hot label)
- 输入数据的形式是
- 初始化方法参数一致,都是
- 请注意,要使用 Mix 必须是数据已经 batch 了
2. 普通操作
- 源码:transforms
- 注意,普通是因为我想不出别的词来描述这一系列的操作。
- 这里的视频数据预处理方法,按类别分可分为:
- resize & crop:
- ShortSideScale
- RandomShortSideScale.
- UniformCropVideo
- RandomResizedCrop
- norm:
- Normalize
- Sample Strategy:
- UniformTemporalSubsample
- UniformTemporalSubsampleRepeated
- 其他:不是直接的数据预处理,而是工程相关操作
- ApplyTransformToKey
- RemoveKey
- ConvertUint8ToFloat
- Permute
- OpSampler
- resize & crop:
2.1 Norm 与其他
- 在数据预处理的过程中,传输数据是通过字典进行的。所以,有几个字典相关的操作
- ApplyTransformToKey:只对指定的 key 进行 transform 操作
- RemoveKey:在字典中删除指定的 key
- 普通数据预处理
- ConvertUint8ToFloat:只能操作
torch.tensor
对象,将[0, 255]
转换到[0, 1]
之间。 - Permute:改变一个tensor的shape,就是 transpose 操作
- OpSampler:从一组 transforms 中选择若干个,指定每个 transform 的选择概率
- ConvertUint8ToFloat:只能操作
- Normalize:指定 mean std 实现 norm 操作,输入数据shape是
C, T, H, W
2.2 Sample Strategy
UniformTemporalSubsample
- 输入数据 shape 为
C, T, H, W
- 固定参数是
num_samples
,表示采样的图片数量 - 换句话说,就是从 T 帧中提取
num_samples
个样本,按均匀分布来获取 - 如果
T < num_samples
,index就通过插值法来获取
- 输入数据 shape 为
UniformTemporalSubsampleRepeated
- 输入数据 shape 为
C, T, H, W
- 固定参数是
frame_ratios
,表示每次采样的down_sample_rate
,换句话说,每次采样帧数量为temporal_length / ratio
- 这个操作是进行多次采样,采样次数就是
len(frame_ratios)
- 结果是一个list,每个元素表示依次采样的结果
- 能想到的一个应用场景就是 SlowFast,分别对 Slow 和 Fast 分支进行采样
- 输入数据 shape 为
2.3 Resize & Crop
- ShortSideScale
- 顾名思义,就是固定短边长度,按比例缩放
- 输入数据shape为
C, T, H, W
- RandomShortSideScale
- 在指定的
[min_size, max_size]
范围内随机取值,作为短边的长度,然后按比例缩放 - 输入数据shape为
C, T, H, W
- 在指定的
- UniformCropVideo
- 就是从图像中获取固定尺寸的,上/中/下 或者 左/中/右 。
- 输入参数主要有:
- 获取的区域必定是正方形区域,所以只需要指定一个 int 就可以
- 要获取 上/中/下 (或者 左/中/右)中的哪个
- RandomResizedCrop
- 先根据条件crop一块区域(也就是获取一个bbox然后crop),然后reisze到目标尺寸
- crop的条件是指定ratio范围和scale范围
- resize的参数就是直接指定的 target height/width
- 实现了 shift 模式,即获取两个 bbox,通过插值法,获取从 bbox1 到 bbox2 的变化得到一组 box list,然后在T纬度上对每一帧分别根据 box list 分别获取数据。
3. “高端”数据增强
- RandAugment
- 源码:rand_augment.py
- 实现了 RandAugment,简单说,就是定义了一组 transforms,每次都从其中随机选择两个,对输入图像进行操作。
- 原始论文有 16 个 transforms,我在 MMAction2 中用 Imgaug 实现的版本有 15 个 transform,PyTorchVideo 中有14个 transforms
- 有一点与我实现的不同(不知道是不是我没注意看论文,需要再看下其他源码),这里的 magnitude 不是固定的,而是根据一定的参数进行随机获取,每次变换都需要随机获取。
- 输入图像的shape为
T, C, H, W
- AugMix
- 源码:augmix.py
- 实现了 AugMix,感觉类似于Mixup,只不过Mixup的两个部分分别是原始图像以及另一个经过类似 RandAugment 操作后的图像。
- 输入图像的shape为
T, C, H, W
4. create_video_transform
- 源码:transforms_factory.py
- 定义了视频数据预处理的完整 pipeline,定义如下
PytorchVideo Transforms 详解相关推荐
- Pytorch基础(二)—— Transforms详解
一.概念 Transforms是pytorch的图像处理工具包,是torchvision模块下的一个一个类的集合,可以对图像或数据进行格式变换,裁剪,缩放,旋转等,在进行深度学习项目时用途很广泛.下面 ...
- 【深度之眼】【Pytorch打卡第4天】:各种transforms详解
图像增强 裁剪 transforms.CenterCrop transforms.RandomCrop 功能:从图片中随机裁剪出尺寸为size的图片 • size:所需裁剪图片尺寸 • padding ...
- (!详解 Pytorch实战:①)kaggle猫狗数据集二分类:加载(集成/自定义)数据集
这系列的文章是我对Pytorch入门之后的一个总结,特别是对数据集生成加载这一块加强学习 另外,这里有一些比较常用的数据集,大家可以进行下载: 需要注意的是,本篇文章使用的PyTorch的版本是v0. ...
- 【CV】Pytorch一小时入门教程-代码详解
目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...
- fullPage教程 -- 整屏滚动效果插件 fullpage详解
为什么80%的码农都做不了架构师?>>> 本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:fullPage教程 -- 整屏滚动效果插件 fullpage详解 1. ...
- matplotlib.pyplot.plot 用法详解
python matplotlib演示官网 https://matplotlib.org/xkcd/users/pyplot_tutorial.html https://matplotlib.org/ ...
- python从date目录导入数据集_PyTorch加载自己的数据集实例详解
数据预处理在解决深度学习问题的过程中,往往需要花费大量的时间和精力. 数据处理的质量对训练神经网络来说十分重要,良好的数据处理不仅会加速模型训练, 更会提高模型性能.为解决这一问题,PyTorch提供 ...
- 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization
<<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...
- 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积、激活、初始化、正则...
[机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 20 TF2的eager模式与求导 扩展之Tensorflow2.0 | ...
- 【小白学PyTorch】13.EfficientNet详解及PyTorch实现
<<小白学PyTorch>> 小白学PyTorch | 12 SENet详解及PyTorch实现 小白学PyTorch | 11 MobileNet详解及PyTorch实现 小 ...
最新文章
- IKAnalyzer使用停用词词典进行分词
- Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
- 强大js web甘特图制作之甘特图的日历
- wifi漫游测试过程
- 转:Hibernate中Criteria和DetachedCriteria的完整用法
- Ⅲ:zookeeper之查看节点的状态及其监听器的使用
- 大学生如何转专业(自学/培训)到互联网行业
- wincc历史数据库_WinCC系统的基本功能介绍——自动化工程师必备
- 【异常(待解决)】org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond...
- 1.4_10 有一门不及格的学生
- varnish工作原理详细讲解
- hashset去重原理_9道Java集合面试题,搞定了再去投简历吧!
- linux下rocksdb的编译安装
- sap 归档(ARCHIVE)
- 小甲鱼C++笔记(上)1-24
- cad10版计算机快键在哪,CAD快捷键大全在哪里看?CAD快捷键大全与CAD技巧汇总
- 揭秘小红书的种草套路
- ubuntu20.04系统安装谷歌浏览器
- GitHub项目之12306抢票软件
- iOS 单例模式详解/避免滥用单例