0. MMAction2 介绍
MMAction2 是一款基于 PyTorch 框架的视频理解开源工具箱,是由商汤科技和港中文大学联合提出的 OpenMMLab 项目的成员之一。
视频理解是计算机视觉中重要的研究方向,近年来逐渐成为业界和学术界的研究热点,同时也被广泛应用在智能监控/视频推荐等领域中。OpenMMLab 项目开源了 MMAction2,这是一套基于 PyTorch 实现的视频理解工具箱和 benchmark,目前包含了视频理解领域常见的任务,比如动作识别,时序动作检测,时空动作检测等。
- 模块化设计: MMAction2 将统一的视频理解框架解耦成不同的模块组件,通过组合不同的模块组件,用户可以便捷地构建自定义的视频理解模型。
- 支持多种任务和数据集: MMAction2 支持多种视频理解任务,包括动作识别,时序动作检测,时空动作检测以及基于人体姿态的动作识别,总共支持 27 种算法和 20 种数据集
- 详尽的单元测试和文档: MMAction2 提供了详尽的说明文档,API 接口说明,全面的单元测试,以供社区参考
1. Over View of Pipeline
类似于其他OpenMMLab项目,MMAction2 使用 Dataset 和 DataLoader 实现训练/测试阶段的数据加载。 由Dataset 返回一个字典Dict作为模型的输入。 而数据准备阶段pipeline和dataset类是相互解耦的,dataset类一般用于定义数据标注annotations,而数据pipeline用于加载数据(对于视频格式重点在于帧的采样)、预处理及格式化。一个完整的数据pipeline结果如下图所示。
图中下侧IDE中显示的变量transform(list)读取了由config文件设置好的pipeline流程,同时也包含了实例化所需类的具体参数设置。图上侧是一个经典的pipeline结构。蓝色块是pipeline操作。随着其的深入,每个操作都向结果字典添加新键(标记为绿色)或更新现有键(标记为橙色)。而对于其三个主要部分:
- 在加载数据部分,以裁片完成的数据集格式为例,对应数据集格式是rawframes。具体是基于
SampleFrames
类和RawFrameDecoder
类实现的,其功能分别是获取需要的采样帧索引index和根据传递的索引来加载数据。代码位置为mmaction/datasets/pipelines/loading.py
- 在数据预处理部分,mmaction2内置多种数据增强的方法,以图中为例。具体是基于
RandomRescale
、RandomCrop
、Flip
和Normalize
类实现的。其作用分别是对裁剪后的图像序列进行随机尺寸变换、随机裁剪、随机翻转以及根据均值和方差对数据进行标准化。代码位置为mmaction/datasets/pipelines/augmentations.py
- 在数据格式化部分,需要对图像数据按照config当中的设定进行格式上的变换并最终作为后续网络模型的输入。具体是基于
FormatShape
类、Collect
类和ToTensor
类实现的。其作用分别是将时序图像序列按照规定要求划分维度、将数据信息整合生成meta键(包含原始数据的各类信息)和将图像序列转化为torch框架训练所需的tensor格式。代码的位置为mmaction/datasets/pipelines/formatting.py
config配置文件及注释如下:
dataset_type = 'RawframeDataset' # 数据集类型,RawframeDataset对应已完成视频切片的数据集
data_root