IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> PytorchVideo Transforms 详解 -> 正文阅读

[Python知识库]PytorchVideo Transforms 详解

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

image-20210710165017815

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:36:07  更:2021-07-11 16:37:15 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/7 19:23:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码