文章目录

  • 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

2.1 Norm 与其他

  • 在数据预处理的过程中,传输数据是通过字典进行的。所以,有几个字典相关的操作

    • ApplyTransformToKey:只对指定的 key 进行 transform 操作
    • RemoveKey:在字典中删除指定的 key
  • 普通数据预处理
    • ConvertUint8ToFloat:只能操作 torch.tensor 对象,将 [0, 255] 转换到 [0, 1] 之间。
    • Permute:改变一个tensor的shape,就是 transpose 操作
    • OpSampler:从一组 transforms 中选择若干个,指定每个 transform 的选择概率
  • 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就通过插值法来获取
  • UniformTemporalSubsampleRepeated
    • 输入数据 shape 为 C, T, H, W
    • 固定参数是 frame_ratios,表示每次采样的 down_sample_rate,换句话说,每次采样帧数量为 temporal_length / ratio
    • 这个操作是进行多次采样,采样次数就是 len(frame_ratios)
    • 结果是一个list,每个元素表示依次采样的结果
    • 能想到的一个应用场景就是 SlowFast,分别对 Slow 和 Fast 分支进行采样

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 详解相关推荐

  1. Pytorch基础(二)—— Transforms详解

    一.概念 Transforms是pytorch的图像处理工具包,是torchvision模块下的一个一个类的集合,可以对图像或数据进行格式变换,裁剪,缩放,旋转等,在进行深度学习项目时用途很广泛.下面 ...

  2. 【深度之眼】【Pytorch打卡第4天】:各种transforms详解

    图像增强 裁剪 transforms.CenterCrop transforms.RandomCrop 功能:从图片中随机裁剪出尺寸为size的图片 • size:所需裁剪图片尺寸 • padding ...

  3. (!详解 Pytorch实战:①)kaggle猫狗数据集二分类:加载(集成/自定义)数据集

    这系列的文章是我对Pytorch入门之后的一个总结,特别是对数据集生成加载这一块加强学习 另外,这里有一些比较常用的数据集,大家可以进行下载: 需要注意的是,本篇文章使用的PyTorch的版本是v0. ...

  4. 【CV】Pytorch一小时入门教程-代码详解

    目录 一.关键部分代码分解 1.定义网络 2.损失函数(代价函数) 3.更新权值 二.训练完整的分类器 1.数据处理 2. 训练模型(代码详解) CPU训练 GPU训练 CPU版本与GPU版本代码区别 ...

  5. fullPage教程 -- 整屏滚动效果插件 fullpage详解

    为什么80%的码农都做不了架构师?>>>    本文为 H5EDU 机构官方 HTML5培训 教程,主要介绍:fullPage教程 -- 整屏滚动效果插件 fullpage详解 1. ...

  6. matplotlib.pyplot.plot 用法详解

    python matplotlib演示官网 https://matplotlib.org/xkcd/users/pyplot_tutorial.html https://matplotlib.org/ ...

  7. python从date目录导入数据集_PyTorch加载自己的数据集实例详解

    数据预处理在解决深度学习问题的过程中,往往需要花费大量的时间和精力. 数据处理的质量对训练神经网络来说十分重要,良好的数据处理不仅会加速模型训练, 更会提高模型性能.为解决这一问题,PyTorch提供 ...

  8. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(下)池化、Normalization

    <<小白学PyTorch>> 扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积.激活.初始化.正则 扩展之Tensorflow2.0 | 20 TF ...

  9. 【小白学PyTorch】扩展之Tensorflow2.0 | 21 Keras的API详解(上)卷积、激活、初始化、正则...

    [机器学习炼丹术]的学习笔记分享 <<小白学PyTorch>> 扩展之Tensorflow2.0 | 20 TF2的eager模式与求导 扩展之Tensorflow2.0 | ...

  10. 【小白学PyTorch】13.EfficientNet详解及PyTorch实现

    <<小白学PyTorch>> 小白学PyTorch | 12 SENet详解及PyTorch实现 小白学PyTorch | 11 MobileNet详解及PyTorch实现 小 ...

最新文章

  1. IKAnalyzer使用停用词词典进行分词
  2. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
  3. 强大js web甘特图制作之甘特图的日历
  4. wifi漫游测试过程
  5. 转:Hibernate中Criteria和DetachedCriteria的完整用法
  6. Ⅲ:zookeeper之查看节点的状态及其监听器的使用
  7. 大学生如何转专业(自学/培训)到互联网行业
  8. wincc历史数据库_WinCC系统的基本功能介绍——自动化工程师必备
  9. 【异常(待解决)】org.apache.http.NoHttpResponseException: api.weixin.qq.com:443 failed to respond...
  10. 1.4_10 有一门不及格的学生
  11. varnish工作原理详细讲解
  12. hashset去重原理_9道Java集合面试题,搞定了再去投简历吧!
  13. linux下rocksdb的编译安装
  14. sap 归档(ARCHIVE)
  15. 小甲鱼C++笔记(上)1-24
  16. cad10版计算机快键在哪,CAD快捷键大全在哪里看?CAD快捷键大全与CAD技巧汇总
  17. 揭秘小红书的种草套路
  18. ubuntu20.04系统安装谷歌浏览器
  19. GitHub项目之12306抢票软件
  20. iOS 单例模式详解/避免滥用单例

热门文章

  1. 软件生命周期是什么?
  2. Java Swing制作古老的打砖块游戏
  3. 萝卜青菜各有所爱------TypeScript VS JavaScript
  4. C语言将图片转化成Base64码
  5. 函数的支集、支撑集、support、supp
  6. w10桌面计算机图标箭头去除,win10专业版电脑桌面图标箭头快速去掉技巧
  7. 关于请求_小七_新浪博客
  8. 无心剑中译奥登《用情更深者》
  9. Python基础知识:切片
  10. 中国Linux杰出人物