数据集准备
MMAction2支持许多现有的数据集。在本章中,我们将引导您为 MMAction2准备数据集。
视频数据格式注释
MMAction2支持两种类型的数据格式: 原始帧和视频。前者广泛应用于以前的项目,如 TSN。当 SSD 可用但无法扩展到快速增长的数据集时,这是很快的。(例如,最新版本的动力学有650K 的视频和总帧将占用几个 TB。)后者节省了大量的空间,但在执行时需要进行计算密集型的视频解码。为了使视频解码速度更快,我们支持几个有效的视频加载库,如decord、 PyAV 等。
使用内置数据集
MMAction2已经支持许多数据集,我们在路径 $MMCTION2/tools/data/下提供用于数据准备的 shell 脚本,有关准备特定数据集的详细信息,请参阅受支持的数据集。
使用自定义数据集
最简单的方法是将数据集转换为现有的数据集格式:
用于动作识别的 RawFrameDataset 和 VideoDataset
基于骨架的动作识别的 PoseDataset
用于时空动作检测的 AVADataset
用于时态动作本地化的 ActivityNetDataset
数据预处理之后,用户需要进一步修改配置文件来使用数据集。下面是以原始格式使用自定义数据集的示例。
在 configs/task/method/my _ custom_ config. py 中:
...
# dataset settings
dataset_type = 'RawframeDataset'
data_root = 'path/to/your/root'
data_root_val = 'path/to/your/root_val'
ann_file_train = 'data/custom/custom_train_list.txt'
ann_file_val = 'data/custom/custom_val_list.txt'
ann_file_test = 'data/custom/custom_val_list.txt'
...
data = dict(videos_per_gpu=32,workers_per_gpu=2,train=dict(type=dataset_type,ann_file=ann_file_train,...),val=dict(type=dataset_type,ann_file=ann_file_val,...),test=dict(type=dataset_type,ann_file=ann_file_test,...))
...
Action Recognition动作识别数据集
用于动作识别的注释文件有两种。
用于 RawFrameDataset 的 rawframe 注释
原始帧数据集的注释是一个包含多行的文本文件,每行表示一个视频的 frame _ directory (相对路径)、一个视频的 total _ frame 和一个视频的标签,它们被一个空格分开。
这里有一个例子。文件路径 帧数量 视频标签
some/directory-1 163 1
some/directory-2 122 1
some/directory-3 258 2
some/directory-4 234 2
some/directory-5 295 3
some/directory-6 121 3
视频数据集的视频注释
视频数据集的注释是一个具有多行的文本文件,每行表示一个具有文件路径(相对路径)和标签的示例视频,这些文件路径和标签被一个空格分开。
这里有一个例子。
some/path/000.mp4 1
some/path/001.mp4 1
some/path/002.mp4 2
some/path/003.mp4 2
some/path/004.mp4 3
some/path/005.mp4 3
Skeleton-based Action Recognition
任务根据骨架序列(关键点的时间序列)识别操作类。我们提供了一些方法来构建您的自定义骨架数据集。
从 RGB 视频数据构建
您需要从视频中提取关键点数据,并将其转换为受支持的格式,我们提供了详细的说明教程。
从现有的关键点数据构建
假设您已经有 coco 格式的关键点数据,您可以将它们收集到 pickle 文件中。
每个 pickle 文件对应于一个动作识别数据集。Pickle 文件的内容是一个字典,其中包含两个字段: split和注释
Split: 分割字段的值是字典: 键是分割名称,而值是属于特定剪辑的视频标识符列表。
注释: 注释字段的值是一个框架注释列表,每个框架注释都是一个字典,包含以下字段:
- Frame _ dir (str) : 相应视频的标识符。
- Total _ frame (int) : 此视频中的帧数。
- Img _ form (tuple [ int ]) : 视频帧的形状,包含两个元素的元组,格式为(高度,宽度)。只需要2D 骨架。
- 原始形状(tuple [ int ]) : 与 img _ form 相同。
- Label (int) : 操作标签。
Keypoint (np.ndarray,带有形状[ M x T x V x C ]) : 关键点注释。
- M: 人数;
- T: 帧数(与 total _ frame 相同) ;
- 关键点数量(NTURGB + D3D 骨架25个,CoCo 17个,OpenPose 18个,等等) ;
- C: 关键点坐标的维数(2D 关键点为 C = 2,3D 关键点为 C = 3)。
Keypoint _ score (np.ndarray,带有形状[ M x T x V ]) : 关键点的置信度得分。只需要2D 骨架。
{"split":{'xsub_train':['S001C001P001R001A001', ...],'xsub_val':['S001C001P003R001A001', ...],...}"annotations:[{{'frame_dir': 'S001C001P001R001A001','label': 0,'img_shape': (1080, 1920),'original_shape': (1080, 1920),'total_frames': 103,'keypoint': array([[[[1032. , 334.8], ...]]])'keypoint_score': array([[[0.934 , 0.9766, ...]]])},{'frame_dir': 'S001C001P003R001A001',...},...}]
}
支持其他关键点格式需要进一步修改,请参考自定义数据集