Shortcuts

支持的数据集

MMAction2 目前支持的数据集如上所列。 MMAction2 在 $MMACTION2/tools/data/ 路径下提供数据集准备脚本。 每个数据集的详细准备教程也在 Readthedocs 中给出。

ActivityNet

简介

@article{Heilbron2015ActivityNetAL,
  title={ActivityNet: A large-scale video benchmark for human activity understanding},
  author={Fabian Caba Heilbron and Victor Escorcia and Bernard Ghanem and Juan Carlos Niebles},
  journal={2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)},
  year={2015},
  pages={961-970}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 对于时序动作检测任务,用户可以使用这个 代码库 提供的缩放过(rescaled)的 ActivityNet 特征, 或者使用 MMAction2 进行特征提取(这将具有更高的精度)。MMAction2 同时提供了以上所述的两种数据使用流程。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/activitynet/

选项 1:用户可以使用这个 代码库 提供的特征

步骤 1. 下载标注文件

首先,用户可以使用以下命令下载标注文件。

bash download_feature_annotations.sh

步骤 2. 准备视频特征

之后,用户可以使用以下命令下载 ActivityNet 特征。

bash download_features.sh

步骤 3. 处理标注文件

之后,用户可以使用以下命令处理下载的标注文件,以便于训练和测试。 该脚本会首先合并两个标注文件,然后再将其分为 train, valtest 三个部分。

python process_annotations.py

选项 2:使用 MMAction2 对 官网 提供的视频进行特征抽取

步骤 1. 下载标注文件

首先,用户可以使用以下命令下载标注文件。

bash download_annotations.sh

步骤 2. 准备视频

之后,用户可以使用以下脚本准备视频数据。 该代码参考自 官方爬虫,该过程将会耗费较多时间。

bash download_videos.sh

由于 ActivityNet 数据集中的一些视频已经在 YouTube 失效,官网 在谷歌网盘和百度网盘提供了完整的数据集数据。 如果用户想要获取失效的数据集,则需要填写 下载页面 中提供的 需求表格 以获取 7 天的下载权限。

MMAction2 同时也提供了 BSN 代码库 的标注文件的下载步骤。

bash download_bsn_videos.sh

对于这种情况,该下载脚本将在下载后更新此标注文件,以确保每个视频都存在。

步骤 3. 抽取 RGB 帧和光流

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

可使用以下命令抽取视频帧和光流。

bash extract_frames.sh

以上脚本将会生成短边 256 分辨率的视频。如果用户想生成短边 320 分辨率的视频(即 320p),或者 340x256 的固定分辨率,用户可以通过改变参数由 --new-short 256--new-short 320,或者 --new-width 340 --new-height 256 进行设置 更多细节可参考 数据准备指南

步骤 4. 生成用于 ActivityNet 微调的文件列表

根据抽取的帧,用户可以生成视频级别(video-level)或者片段级别(clip-level)的文件列表,其可用于微调 ActivityNet。

python generate_rawframes_filelist.py

步骤 5. 在 ActivityNet 上微调 TSN 模型

用户可使用 configs/recognition/tsn 目录中的 ActivityNet 配置文件进行 TSN 模型微调。 用户需要使用 Kinetics 相关模型(同时支持 RGB 模型与光流模型)进行预训练。

步骤 6. 使用预训练模型进行 ActivityNet 特征抽取

在 ActivityNet 上微调 TSN 模型之后,用户可以使用该模型进行 RGB 特征和光流特征的提取。

python tsn_feature_extraction.py --data-prefix ../../../data/ActivityNet/rawframes --data-list ../../../data/ActivityNet/anet_train_video.txt --output-prefix ../../../data/ActivityNet/rgb_feat --modality RGB --ckpt /path/to/rgb_checkpoint.pth

python tsn_feature_extraction.py --data-prefix ../../../data/ActivityNet/rawframes --data-list ../../../data/ActivityNet/anet_val_video.txt --output-prefix ../../../data/ActivityNet/rgb_feat --modality RGB --ckpt /path/to/rgb_checkpoint.pth

python tsn_feature_extraction.py --data-prefix ../../../data/ActivityNet/rawframes --data-list ../../../data/ActivityNet/anet_train_video.txt --output-prefix ../../../data/ActivityNet/flow_feat --modality Flow --ckpt /path/to/flow_checkpoint.pth

python tsn_feature_extraction.py --data-prefix ../../../data/ActivityNet/rawframes --data-list ../../../data/ActivityNet/anet_val_video.txt --output-prefix ../../../data/ActivityNet/flow_feat --modality Flow --ckpt /path/to/flow_checkpoint.pth

在提取完特征后,用户可以使用后处理脚本整合 RGB 特征和光流特征,生成 100-t X 400-d 维度的特征用于时序动作检测。

python activitynet_feature_postprocessing.py --rgb ../../../data/ActivityNet/rgb_feat --flow ../../../data/ActivityNet/flow_feat --dest ../../../data/ActivityNet/mmaction_feat

最后一步:检查文件夹结构

在完成所有 ActivityNet 数据集准备流程后,用户可以获得对应的特征文件,RGB + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,ActivityNet 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── ActivityNet

(若根据选项 1 进行数据处理)
│   │   ├── anet_anno_{train,val,test,full}.json
│   │   ├── anet_anno_action.json
│   │   ├── video_info_new.csv
│   │   ├── activitynet_feature_cuhk
│   │   │   ├── csv_mean_100
│   │   │   │   ├── v___c8enCfzqw.csv
│   │   │   │   ├── v___dXUJsj3yo.csv
│   │   │   |   ├── ..

(若根据选项 2 进行数据处理)
│   │   ├── anet_train_video.txt
│   │   ├── anet_val_video.txt
│   │   ├── anet_train_clip.txt
│   │   ├── anet_val_clip.txt
│   │   ├── activity_net.v1-3.min.json
│   │   ├── mmaction_feat
│   │   │   ├── v___c8enCfzqw.csv
│   │   │   ├── v___dXUJsj3yo.csv
│   │   │   ├── ..
│   │   ├── rawframes
│   │   │   ├── v___c8enCfzqw
│   │   │   │   ├── img_00000.jpg
│   │   │   │   ├── flow_x_00000.jpg
│   │   │   │   ├── flow_y_00000.jpg
│   │   │   │   ├── ..
│   │   │   ├── ..

关于对 ActivityNet 进行训练和验证,可以参考 基础教程.

AVA

简介

@inproceedings{gu2018ava,
  title={Ava: A video dataset of spatio-temporally localized atomic visual actions},
  author={Gu, Chunhui and Sun, Chen and Ross, David A and Vondrick, Carl and Pantofaru, Caroline and Li, Yeqing and Vijayanarasimhan, Sudheendra and Toderici, George and Ricco, Susanna and Sukthankar, Rahul and others},
  booktitle={Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition},
  pages={6047--6056},
  year={2018}
}

请参照 官方网站 以获取数据集基本信息。 在开始之前,用户需确保当前目录为 $MMACTION2/tools/data/ava/

1. 准备标注文件

首先,用户可以使用如下脚本下载标注文件并进行预处理:

bash download_annotations.sh

这一命令将下载 ava_v2.1.zip 以得到 AVA v2.1 标注文件。如用户需要 AVA v2.2 标注文件,可使用以下脚本:

VERSION=2.2 bash download_annotations.sh

2. 下载视频

用户可以使用以下脚本准备视频,视频准备代码修改自 官方爬虫。 注意这一步骤将花费较长时间。

bash download_videos.sh

亦可使用以下脚本,使用 python 并行下载 AVA 数据集视频:

bash download_videos_parallel.sh

3. 截取视频

截取每个视频中的 15 到 30 分钟,设定帧率为 30。

bash cut_videos.sh

4. 提取 RGB 帧和光流

在提取之前,请参考 安装教程 安装 denseflow

如果用户有足够的 SSD 空间,那么建议将视频抽取为 RGB 帧以提升 I/O 性能。用户可以使用以下脚本为抽取得到的帧文件夹建立软连接:

## 执行以下脚本 (假设 SSD 被挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/ava_extracted/
ln -s /mnt/SSD/ava_extracted/ ../data/ava/rawframes/

如果用户只使用 RGB 帧(由于光流提取非常耗时),可执行以下脚本使用 denseflow 提取 RGB 帧:

bash extract_rgb_frames.sh

如果用户未安装 denseflow,可执行以下脚本使用 ffmpeg 提取 RGB 帧:

bash extract_rgb_frames_ffmpeg.sh

如果同时需要 RGB 帧和光流,可使用如下脚本抽帧:

bash extract_frames.sh

5. 下载 AVA 上人体检测结果

以下脚本修改自 Long-Term Feature Banks

可使用以下脚本下载 AVA 上预先计算的人体检测结果:

bash fetch_ava_proposals.sh

6. 目录结构

在完整完成 AVA 的数据处理后,将得到帧文件夹(RGB 帧和光流帧),视频以及标注文件。

在整个项目目录下(仅针对 AVA),最简 目录结构如下所示:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── ava
│   │   ├── annotations
│   │   |   ├── ava_dense_proposals_train.FAIR.recall_93.9.pkl
│   │   |   ├── ava_dense_proposals_val.FAIR.recall_93.9.pkl
│   │   |   ├── ava_dense_proposals_test.FAIR.recall_93.9.pkl
│   │   |   ├── ava_train_v2.1.csv
│   │   |   ├── ava_val_v2.1.csv
│   │   |   ├── ava_train_excluded_timestamps_v2.1.csv
│   │   |   ├── ava_val_excluded_timestamps_v2.1.csv
│   │   |   ├── ava_action_list_v2.1_for_activitynet_2018.pbtxt
│   │   ├── videos
│   │   │   ├── 053oq2xB3oU.mkv
│   │   │   ├── 0f39OWEqJ24.mp4
│   │   │   ├── ...
│   │   ├── videos_15min
│   │   │   ├── 053oq2xB3oU.mkv
│   │   │   ├── 0f39OWEqJ24.mp4
│   │   │   ├── ...
│   │   ├── rawframes
│   │   │   ├── 053oq2xB3oU
|   │   │   │   ├── img_00001.jpg
|   │   │   │   ├── img_00002.jpg
|   │   │   │   ├── ...

关于 AVA 数据集上的训练与测试,请参照 基础教程

Diving48

简介

@inproceedings{li2018resound,
  title={Resound: Towards action recognition without representation bias},
  author={Li, Yingwei and Li, Yi and Vasconcelos, Nuno},
  booktitle={Proceedings of the European Conference on Computer Vision (ECCV)},
  pages={513--528},
  year={2018}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/diving48/

步骤 1. 下载标注文件

用户可以使用以下命令下载标注文件(考虑到标注的准确性,这里仅下载 V2 版本)。

bash download_annotations.sh

步骤 2. 准备视频

用户可以使用以下命令下载视频。

bash download_videos.sh

Step 3. 抽取 RGB 帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

官网提供的帧压缩包并不完整。若想获取完整的数据,可以使用以下步骤解帧。

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果拥有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 中。

可以运行以下命令为 SSD 建立软链接。

## 执行这两行进行抽取(假设 SSD 挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/diving48_extracted/
ln -s /mnt/SSD/diving48_extracted/ ../../../data/diving48/rawframes

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

cd $MMACTION2/tools/data/diving48/
bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

cd $MMACTION2/tools/data/diving48/
bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本进行抽取。

cd $MMACTION2/tools/data/diving48/
bash extract_frames.sh

步骤 4. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

bash generate_videos_filelist.sh
bash generate_rawframes_filelist.sh

步骤 5. 检查文件夹结构

在完成所有 Diving48 数据集准备流程后, 用户可以获得对应的 RGB + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,Diving48 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── diving48
│   │   ├── diving48_{train,val}_list_rawframes.txt
│   │   ├── diving48_{train,val}_list_videos.txt
│   │   ├── annotations
│   |   |   ├── Diving48_V2_train.json
│   |   |   ├── Diving48_V2_test.json
│   |   |   ├── Diving48_vocab.json
│   |   ├── videos
│   |   |   ├── _8Vy3dlHg2w_00000.mp4
│   |   |   ├── _8Vy3dlHg2w_00001.mp4
│   |   |   ├── ...
│   |   ├── rawframes
│   |   |   ├── 2x00lRzlTVQ_00000
│   |   |   |   ├── img_00001.jpg
│   |   |   |   ├── img_00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_x_00001.jpg
│   |   |   |   ├── flow_x_00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_y_00001.jpg
│   |   |   |   ├── flow_y_00002.jpg
│   |   |   |   ├── ...
│   |   |   ├── 2x00lRzlTVQ_00001
│   |   |   ├── ...

关于对 Diving48 进行训练和验证,可以参考 基础教程

GYM

简介

@inproceedings{shao2020finegym,
  title={Finegym: A hierarchical video dataset for fine-grained action understanding},
  author={Shao, Dian and Zhao, Yue and Dai, Bo and Lin, Dahua},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  pages={2616--2625},
  year={2020}
}

请参照 项目主页原论文 以获取数据集基本信息。 MMAction2 当前支持 GYM99 的数据集预处理。 在开始之前,用户需确保当前目录为 $MMACTION2/tools/data/gym/

1. 准备标注文件

首先,用户可以使用如下脚本下载标注文件并进行预处理:

bash download_annotations.sh

2. 准备视频

用户可以使用以下脚本准备视频,视频准备代码修改自 ActivityNet 爬虫。 注意这一步骤将花费较长时间。

bash download_videos.sh

3. 裁剪长视频至动作级别

用户首先需要使用以下脚本将 GYM 中的长视频依据标注文件裁剪至动作级别。

python trim_event.py

4. 裁剪动作视频至分动作级别

随后,用户需要使用以下脚本将 GYM 中的动作视频依据标注文件裁剪至分动作级别。将视频的裁剪分成两个级别可以带来更高的效率(在长视频中裁剪多个极短片段异常耗时)。

python trim_subaction.py

5. 提取 RGB 帧和光流

如果用户仅使用 video loader,则可以跳过本步。

在提取之前,请参考 安装教程 安装 denseflow

用户可使用如下脚本同时抽取 RGB 帧和光流(提取光流时使用 tvl1 算法):

bash extract_frames.sh

6. 基于提取出的分动作生成文件列表

用户可使用以下脚本为 GYM99 生成训练及测试的文件列表:

python generate_file_list.py

7. 目录结构

在完整完成 GYM 的数据处理后,将得到帧文件夹(RGB 帧和光流帧),动作视频片段,分动作视频片段以及训练测试所用标注文件。

在整个项目目录下(仅针对 GYM),完整目录结构如下所示:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── gym
|   |   ├── annotations
|   |   |   ├── gym99_train_org.txt
|   |   |   ├── gym99_val_org.txt
|   |   |   ├── gym99_train.txt
|   |   |   ├── gym99_val.txt
|   |   |   ├── annotation.json
|   |   |   └── event_annotation.json
│   │   ├── videos
|   |   |   ├── 0LtLS9wROrk.mp4
|   |   |   ├── ...
|   |   |   └── zfqS-wCJSsw.mp4
│   │   ├── events
|   |   |   ├── 0LtLS9wROrk_E_002407_002435.mp4
|   |   |   ├── ...
|   |   |   └── zfqS-wCJSsw_E_006732_006824.mp4
│   │   ├── subactions
|   |   |   ├── 0LtLS9wROrk_E_002407_002435_A_0003_0005.mp4
|   |   |   ├── ...
|   |   |   └── zfqS-wCJSsw_E_006244_006252_A_0000_0007.mp4
|   |   └── subaction_frames

关于 GYM 数据集上的训练与测试,请参照 基础教程

HMDB51

简介

@article{Kuehne2011HMDBAL,
  title={HMDB: A large video database for human motion recognition},
  author={Hilde Kuehne and Hueihan Jhuang and E. Garrote and T. Poggio and Thomas Serre},
  journal={2011 International Conference on Computer Vision},
  year={2011},
  pages={2556-2563}
}

用户可以参照数据集 官网,获取数据集相关的基本信息。 在准备数据集前,请确保命令行当前路径为 $MMACTION2/tools/data/hmdb51/

为运行下面的 bash 脚本,需要安装 unrar。用户可运行 sudo apt-get install unrar 安装,或参照 setup,运行 zzunrar.sh 脚本实现无管理员权限下的简易安装。

步骤 1. 下载标注文件

首先,用户可使用以下命令下载标注文件。

bash download_annotations.sh

步骤 2. 下载视频

之后,用户可使用以下指令下载视频

bash download_videos.sh

步骤 3. 抽取帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果用户有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 上。 用户可使用以下命令为 SSD 建立软链接。

## 执行这两行指令进行抽取(假设 SSD 挂载在 "/mnt/SSD/"上)
mkdir /mnt/SSD/hmdb51_extracted/
ln -s /mnt/SSD/hmdb51_extracted/ ../../../data/hmdb51/rawframes

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本,使用 “tvl1” 算法进行抽取。

bash extract_frames.sh

步骤 4. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

bash generate_rawframes_filelist.sh
bash generate_videos_filelist.sh

步骤 5. 检查目录结构

在完成 HMDB51 数据集准备流程后,用户可以得到 HMDB51 的 RGB 帧 + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,HMDB51 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── hmdb51
│   │   ├── hmdb51_{train,val}_split_{1,2,3}_rawframes.txt
│   │   ├── hmdb51_{train,val}_split_{1,2,3}_videos.txt
│   │   ├── annotations
│   │   ├── videos
│   │   │   ├── brush_hair
│   │   │   │   ├── April_09_brush_hair_u_nm_np1_ba_goo_0.avi

│   │   │   ├── wave
│   │   │   │   ├── 20060723sfjffbartsinger_wave_f_cm_np1_ba_med_0.avi
│   │   ├── rawframes
│   │   │   ├── brush_hair
│   │   │   │   ├── April_09_brush_hair_u_nm_np1_ba_goo_0
│   │   │   │   │   ├── img_00001.jpg
│   │   │   │   │   ├── img_00002.jpg
│   │   │   │   │   ├── ...
│   │   │   │   │   ├── flow_x_00001.jpg
│   │   │   │   │   ├── flow_x_00002.jpg
│   │   │   │   │   ├── ...
│   │   │   │   │   ├── flow_y_00001.jpg
│   │   │   │   │   ├── flow_y_00002.jpg
│   │   │   ├── ...
│   │   │   ├── wave
│   │   │   │   ├── 20060723sfjffbartsinger_wave_f_cm_np1_ba_med_0
│   │   │   │   ├── ...
│   │   │   │   ├── winKen_wave_u_cm_np1_ri_bad_1

关于对 HMDB51 进行训练和验证,可以参照 基础教程

HVU

简介

@article{Diba2019LargeSH,
  title={Large Scale Holistic Video Understanding},
  author={Ali Diba and M. Fayyaz and Vivek Sharma and Manohar Paluri and Jurgen Gall and R. Stiefelhagen and L. Gool},
  journal={arXiv: Computer Vision and Pattern Recognition},
  year={2019}
}

请参照 官方项目原论文 以获取数据集基本信息。 在开始之前,用户需确保当前目录为 $MMACTION2/tools/data/hvu/

1. 准备标注文件

首先,用户可以使用如下脚本下载标注文件并进行预处理:

bash download_annotations.sh

此外,用户可使用如下命令解析 HVU 的标签列表:

python parse_tag_list.py

2. 准备视频

用户可以使用以下脚本准备视频,视频准备代码修改自 ActivityNet 爬虫。 注意这一步骤将花费较长时间。

bash download_videos.sh

3. 提取 RGB 帧和光流

如果用户仅使用 video loader,则可以跳过本步。

在提取之前,请参考 安装教程 安装 denseflow

用户可使用如下脚本同时抽取 RGB 帧和光流:

bash extract_frames.sh

该脚本默认生成短边长度为 256 的帧,可参考 数据准备 获得更多细节。

4. 生成文件列表

用户可以使用以下两个脚本分别为视频和帧文件夹生成文件列表:

bash generate_videos_filelist.sh
## 为帧文件夹生成文件列表
bash generate_rawframes_filelist.sh

5. 为每个 tag 种类生成文件列表

若用户需要为 HVU 数据集的每个 tag 种类训练识别模型,则需要进行此步骤。

步骤 4 中生成的文件列表包含不同类型的标签,仅支持使用 HVUDataset 进行涉及多个标签种类的多任务学习。加载数据的过程中需要使用 LoadHVULabel 类进行多类别标签的加载,训练过程中使用 HVULoss 作为损失函数。

如果用户仅需训练某一特定类别的标签,例如训练一识别模型用于识别 HVU 中 action 类别的标签,则建议使用如下脚本为特定标签种类生成文件列表。新生成的列表将只含有特定类别的标签,因此可使用 VideoDatasetRawframeDataset 进行加载。训训练过程中使用 BCELossWithLogits 作为损失函数。

以下脚本为类别为 ${category} 的标签生成文件列表,注意仅支持 HVU 数据集包含的 6 种标签类别: action, attribute, concept, event, object, scene。

python generate_sub_file_list.py path/to/filelist.json ${category}

对于类别 ${category},生成的标签列表文件名中将使用 hvu_${category} 替代 hvu。例如,若原指定文件名为 hvu_train.json,则对于类别 action,生成的文件列表名为 hvu_action_train.json

6. 目录结构

在完整完成 HVU 的数据处理后,将得到帧文件夹(RGB 帧和光流帧),视频以及标注文件。

在整个项目目录下(仅针对 HVU),完整目录结构如下所示:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── hvu
│   │   ├── hvu_train_video.json
│   │   ├── hvu_val_video.json
│   │   ├── hvu_train.json
│   │   ├── hvu_val.json
│   │   ├── annotations
│   │   ├── videos_train
│   │   │   ├── OLpWTpTC4P8_000570_000670.mp4
│   │   │   ├── xsPKW4tZZBc_002330_002430.mp4
│   │   │   ├── ...
│   │   ├── videos_val
│   │   ├── rawframes_train
│   │   ├── rawframes_val

关于 HVU 数据集上的训练与测试,请参照 基础教程

Jester

简介

@InProceedings{Materzynska_2019_ICCV,
  author = {Materzynska, Joanna and Berger, Guillaume and Bax, Ingo and Memisevic, Roland},
  title = {The Jester Dataset: A Large-Scale Video Dataset of Human Gestures},
  booktitle = {Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV) Workshops},
  month = {Oct},
  year = {2019}
}

用户可以参照数据集 官网,获取数据集相关的基本信息。 在准备数据集前,请确保命令行当前路径为 $MMACTION2/tools/data/jester/

步骤 1. 下载标注文件

首先,用户需要在 官网 完成注册,才能下载标注文件。下载好的标注文件需要放在 $MMACTION2/data/jester/annotations 文件夹下。

步骤 2. 准备 RGB 帧

jester 官网 并未提供原始视频文件,只提供了对原视频文件进行抽取得到的 RGB 帧,用户可在 jester 官网 直接下载。

将下载好的压缩文件放在 $MMACTION2/data/jester/ 文件夹下,并使用以下脚本进行解压。

cd $MMACTION2/data/jester/
cat 20bn-jester-v1-?? | tar zx
cd $MMACTION2/tools/data/jester/

如果用户只想使用 RGB 帧,则可以跳过中间步骤至步骤 5 以直接生成视频帧的文件列表。 由于官网的 JPG 文件名形如 “%05d.jpg” (比如,”00001.jpg”),需要在配置文件的 data.train, data.valdata.test 处添加 "filename_tmpl='{:05}.jpg'" 代码,以修改文件名模板。

data = dict(
    videos_per_gpu=16,
    workers_per_gpu=2,
    train=dict(
        type=dataset_type,
        ann_file=ann_file_train,
        data_prefix=data_root,
        filename_tmpl='{:05}.jpg',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        ann_file=ann_file_val,
        data_prefix=data_root_val,
        filename_tmpl='{:05}.jpg',
        pipeline=val_pipeline),
    test=dict(
        type=dataset_type,
        ann_file=ann_file_test,
        data_prefix=data_root_val,
        filename_tmpl='{:05}.jpg',
        pipeline=test_pipeline))

步骤 3. 抽取光流

如果用户只想使用 RGB 帧训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果拥有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 中。

可以运行以下命令为 SSD 建立软链接。

## 执行这两行进行抽取(假设 SSD 挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/jester_extracted/
ln -s /mnt/SSD/jester_extracted/ ../../../data/jester/rawframes

如果想抽取光流,则可以运行以下脚本从 RGB 帧中抽取出光流。

cd $MMACTION2/tools/data/jester/
bash extract_flow.sh

步骤 4: 编码视频

如果用户只想使用 RGB 帧训练,则该部分是 可选项

用户可以运行以下命令进行视频编码。

cd $MMACTION2/tools/data/jester/
bash encode_videos.sh

步骤 5. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

cd $MMACTION2/tools/data/jester/
bash generate_{rawframes, videos}_filelist.sh

步骤 6. 检查文件夹结构

在完成所有 Jester 数据集准备流程后, 用户可以获得对应的 RGB + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,Jester 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── jester
│   │   ├── jester_{train,val}_list_rawframes.txt
│   │   ├── jester_{train,val}_list_videos.txt
│   │   ├── annotations
│   |   ├── videos
│   |   |   ├── 1.mp4
│   |   |   ├── 2.mp4
│   |   |   ├──...
│   |   ├── rawframes
│   |   |   ├── 1
│   |   |   |   ├── 00001.jpg
│   |   |   |   ├── 00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_x_00001.jpg
│   |   |   |   ├── flow_x_00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_y_00001.jpg
│   |   |   |   ├── flow_y_00002.jpg
│   |   |   |   ├── ...
│   |   |   ├── 2
│   |   |   ├── ...

关于对 jester 进行训练和验证,可以参考 基础教程

JHMDB

简介

@inproceedings{Jhuang:ICCV:2013,
    title = {Towards understanding action recognition},
    author = {H. Jhuang and J. Gall and S. Zuffi and C. Schmid and M. J. Black},
    booktitle = {International Conf. on Computer Vision (ICCV)},
    month = Dec,
    pages = {3192-3199},
    year = {2013}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/jhmdb/

下载和解压

用户可以从 这里 下载 RGB 帧,光流和真实标签文件。 该数据由 MOC 代码库提供,参考自 act-detector

用户在下载 JHMDB.tar.gz 文件后,需将其放置在 $MMACTION2/tools/data/jhmdb/ 目录下,并使用以下指令进行解压:

tar -zxvf JHMDB.tar.gz

如果拥有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 中。

可以运行以下命令为 SSD 建立软链接。

## 执行这两行进行抽取(假设 SSD 挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/JHMDB/
ln -s /mnt/SSD/JHMDB/ ../../../data/jhmdb

检查文件夹结构

完成解压后,用户将得到 FlowBrox04 文件夹,Frames 文件夹和 JHMDB-GT.pkl 文件。

在整个 MMAction2 文件夹下,JHMDB 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── jhmdb
│   |   ├── FlowBrox04
│   |   |   ├── brush_hair
│   |   |   |   ├── April_09_brush_hair_u_nm_np1_ba_goo_0
│   |   |   |   |   ├── 00001.jpg
│   |   |   |   |   ├── 00002.jpg
│   |   |   |   |   ├── ...
│   |   |   |   |   ├── 00039.jpg
│   |   |   |   |   ├── 00040.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── Trannydude___Brushing_SyntheticHair___OhNOES!__those_fukin_knots!_brush_hair_u_nm_np1_fr_goo_2
│   |   |   ├── ...
│   |   |   ├── wave
│   |   |   |   ├── 21_wave_u_nm_np1_fr_goo_5
│   |   |   |   ├── ...
│   |   |   |   ├── Wie_man_winkt!!_wave_u_cm_np1_fr_med_0
│   |   ├── Frames
│   |   |   ├── brush_hair
│   |   |   |   ├── April_09_brush_hair_u_nm_np1_ba_goo_0
│   |   |   |   |   ├── 00001.png
│   |   |   |   |   ├── 00002.png
│   |   |   |   |   ├── ...
│   |   |   |   |   ├── 00039.png
│   |   |   |   |   ├── 00040.png
│   |   |   |   ├── ...
│   |   |   |   ├── Trannydude___Brushing_SyntheticHair___OhNOES!__those_fukin_knots!_brush_hair_u_nm_np1_fr_goo_2
│   |   |   ├── ...
│   |   |   ├── wave
│   |   |   |   ├── 21_wave_u_nm_np1_fr_goo_5
│   |   |   |   ├── ...
│   |   |   |   ├── Wie_man_winkt!!_wave_u_cm_np1_fr_med_0
│   |   ├── JHMDB-GT.pkl

注意JHMDB-GT.pkl 作为一个缓存文件,它包含 6 个项目:

  1. labels (list):21 个行为类别名称组成的列表

  2. gttubes (dict):每个视频对应的基准 tubes 组成的字典 gttube 是由标签索引和 tube 列表组成的字典 tube 是一个 nframes 行和 5 列的 numpy array,每一列的形式如 <frame index> <x1> <y1> <x2> <y2>

  3. nframes (dict):用以表示每个视频对应的帧数,如 'walk/Panic_in_the_Streets_walk_u_cm_np1_ba_med_5': 16

  4. train_videos (list):包含 nsplits=1 的元素,每一项都包含了训练视频的列表

  5. test_videos (list):包含 nsplits=1 的元素,每一项都包含了测试视频的列表

  6. resolution (dict):每个视频对应的分辨率(形如 (h,w)),如 'pour/Bartender_School_Students_Practice_pour_u_cm_np1_fr_med_1': (240, 320)

Kinetics-[400/600/700]

简介

@inproceedings{inproceedings,
  author = {Carreira, J. and Zisserman, Andrew},
  year = {2017},
  month = {07},
  pages = {4724-4733},
  title = {Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset},
  doi = {10.1109/CVPR.2017.502}
}

请参照 官方网站 以获取数据集基本信息。此脚本用于准备数据集 kinetics400,kinetics600,kinetics700。为准备 kinetics 数据集的不同版本,用户需将脚本中的 ${DATASET} 赋值为数据集对应版本名称,可选项为 kinetics400kinetics600kinetics700。 在开始之前,用户需确保当前目录为 $MMACTION2/tools/data/${DATASET}/

:由于部分 YouTube 链接失效,爬取的 Kinetics 数据集大小可能与原版不同。以下是我们所使用 Kinetics 数据集的大小:

数据集 训练视频 验证集视频
kinetics400 240436 19796

1. 准备标注文件

首先,用户可以使用如下脚本从 Kinetics 数据集官网下载标注文件并进行预处理:

bash download_annotations.sh ${DATASET}

由于部分视频的 URL 不可用,当前官方标注中所含视频数量可能小于初始版本。所以 MMAction2 提供了另一种方式以获取初始版本标注作为参考。 在这其中,Kinetics400 和 Kinetics600 的标注文件来自 官方爬虫, Kinetics700 的标注文件于 05/02/2021 下载自 网站

bash download_backup_annotations.sh ${DATASET}

2. 准备视频

用户可以使用以下脚本准备视频,视频准备代码修改自 官方爬虫。注意这一步骤将花费较长时间。

bash download_videos.sh ${DATASET}

重要提示:如果在此之前已下载好 Kinetics 数据集的视频,还需使用重命名脚本来替换掉类名中的空格:

bash rename_classnames.sh ${DATASET}

为提升解码速度,用户可以使用以下脚本将原始视频缩放至更小的分辨率(利用稠密编码):

python ../resize_videos.py ../../../data/${DATASET}/videos_train/ ../../../data/${DATASET}/videos_train_256p_dense_cache --dense --level 2

也可以从 Academic Torrents 中下载短边长度为 256 的 kinetics400kinetics700,或从 Common Visual Data Foundation 维护的 cvdfoundation/kinetics-dataset 中下载 Kinetics400/Kinetics600/Kinetics-700-2020。

3. 提取 RGB 帧和光流

如果用户仅使用 video loader,则可以跳过本步。

在提取之前,请参考 安装教程 安装 denseflow

如果用户有足够的 SSD 空间,那么建议将视频抽取为 RGB 帧以提升 I/O 性能。用户可以使用以下脚本为抽取得到的帧文件夹建立软连接:

## 执行以下脚本 (假设 SSD 被挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/${DATASET}_extracted_train/
ln -s /mnt/SSD/${DATASET}_extracted_train/ ../../../data/${DATASET}/rawframes_train/
mkdir /mnt/SSD/${DATASET}_extracted_val/
ln -s /mnt/SSD/${DATASET}_extracted_val/ ../../../data/${DATASET}/rawframes_val/

如果用户只使用 RGB 帧(由于光流提取非常耗时),可以考虑执行以下脚本,仅用 denseflow 提取 RGB 帧:

bash extract_rgb_frames.sh ${DATASET}

如果用户未安装 denseflow,以下脚本可以使用 OpenCV 进行 RGB 帧的提取,但视频原分辨率大小会被保留:

bash extract_rgb_frames_opencv.sh ${DATASET}

如果同时需要 RGB 帧和光流,可使用如下脚本抽帧:

bash extract_frames.sh ${DATASET}

以上的命令生成短边长度为 256 的 RGB 帧和光流帧。如果用户需要生成短边长度为 320 的帧 (320p),或是固定分辨率为 340 x 256 的帧,可改变参数 --new-short 256--new-short 320--new-width 340 --new-height 256。 更多细节可以参考 数据准备

4. 生成文件列表

用户可以使用以下两个脚本分别为视频和帧文件夹生成文件列表:

bash generate_videos_filelist.sh ${DATASET}
## 为帧文件夹生成文件列表
bash generate_rawframes_filelist.sh ${DATASET}

5. 目录结构

在完整完成 Kinetics 的数据处理后,将得到帧文件夹(RGB 帧和光流帧),视频以及标注文件。

在整个项目目录下(仅针对 Kinetics),最简 目录结构如下所示:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── ${DATASET}
│   │   ├── ${DATASET}_train_list_videos.txt
│   │   ├── ${DATASET}_val_list_videos.txt
│   │   ├── annotations
│   │   ├── videos_train
│   │   ├── videos_val
│   │   │   ├── abseiling
│   │   │   │   ├── 0wR5jVB-WPk_000417_000427.mp4
│   │   │   │   ├── ...
│   │   │   ├── ...
│   │   │   ├── wrapping_present
│   │   │   ├── ...
│   │   │   ├── zumba
│   │   ├── rawframes_train
│   │   ├── rawframes_val

关于 Kinetics 数据集上的训练与测试,请参照 基础教程

Moments in Time

简介

@article{monfortmoments,
    title={Moments in Time Dataset: one million videos for event understanding},
    author={Monfort, Mathew and Andonian, Alex and Zhou, Bolei and Ramakrishnan, Kandan and Bargal, Sarah Adel and Yan, Tom and Brown, Lisa and Fan, Quanfu and Gutfruend, Dan and Vondrick, Carl and others},
    journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
    year={2019},
    issn={0162-8828},
    pages={1--8},
    numpages={8},
    doi={10.1109/TPAMI.2019.2901464},
}

用户可以参照数据集 官网,获取数据集相关的基本信息。 在准备数据集前,请确保命令行当前路径为 $MMACTION2/tools/data/mit/

步骤 1. 准备标注文件和视频文件

首先,用户需要访问官网,填写申请表来下载数据集。 在得到下载链接后,用户可以使用 bash preprocess_data.sh 来准备标注文件和视频。 请注意此脚本并没有下载标注和视频文件,用户需要根据脚本文件中的注释,提前下载好数据集,并放/软链接到合适的位置。

为加快视频解码速度,用户需要缩小原视频的尺寸,可使用以下命令获取密集编码版视频:

python ../resize_videos.py ../../../data/mit/videos/ ../../../data/mit/videos_256p_dense_cache --dense --level 2

Step 2. 抽取帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果用户有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 上。 用户可使用以下命令为 SSD 建立软链接。

## 执行这两行指令进行抽取(假设 SSD 挂载在 "/mnt/SSD/"上)
mkdir /mnt/SSD/mit_extracted/
ln -s /mnt/SSD/mit_extracted/ ../../../data/mit/rawframes

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本进行抽取。

bash extract_frames.sh

步骤 3. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

bash generate_{rawframes, videos}_filelist.sh

步骤 4. 检查目录结构

在完成 Moments in Time 数据集准备流程后,用户可以得到 Moments in Time 的 RGB 帧 + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,Moments in Time 的文件结构如下:

mmaction2
├── data
│   └── mit
│       ├── annotations
│       │   ├── license.txt
│       │   ├── moments_categories.txt
│       │   ├── README.txt
│       │   ├── trainingSet.csv
│       │   └── validationSet.csv
│       ├── mit_train_rawframe_anno.txt
│       ├── mit_train_video_anno.txt
│       ├── mit_val_rawframe_anno.txt
│       ├── mit_val_video_anno.txt
│       ├── rawframes
│       │   ├── training
│       │   │   ├── adult+female+singing
│       │   │   │   ├── 0P3XG_vf91c_35
│       │   │   │   │   ├── flow_x_00001.jpg
│       │   │   │   │   ├── flow_x_00002.jpg
│       │   │   │   │   ├── ...
│       │   │   │   │   ├── flow_y_00001.jpg
│       │   │   │   │   ├── flow_y_00002.jpg
│       │   │   │   │   ├── ...
│       │   │   │   │   ├── img_00001.jpg
│       │   │   │   │   └── img_00002.jpg
│       │   │   │   └── yt-zxQfALnTdfc_56
│       │   │   │   │   ├── ...
│       │   │   └── yawning
│       │   │       ├── _8zmP1e-EjU_2
│       │   │       │   ├── ...
│       │   └── validation
│       │   │       ├── ...
│       └── videos
│           ├── training
│           │   ├── adult+female+singing
│           │   │   ├── 0P3XG_vf91c_35.mp4
│           │   │   ├── ...
│           │   │   └── yt-zxQfALnTdfc_56.mp4
│           │   └── yawning
│           │       ├── ...
│           └── validation
│           │   ├── ...
└── mmaction
└── ...

关于对 Moments in Times 进行训练和验证,可以参照 基础教程

Multi-Moments in Time

简介

@misc{monfort2019multimoments,
    title={Multi-Moments in Time: Learning and Interpreting Models for Multi-Action Video Understanding},
    author={Mathew Monfort and Kandan Ramakrishnan and Alex Andonian and Barry A McNamara and Alex Lascelles, Bowen Pan, Quanfu Fan, Dan Gutfreund, Rogerio Feris, Aude Oliva},
    year={2019},
    eprint={1911.00232},
    archivePrefix={arXiv},
    primaryClass={cs.CV}
}

用户可以参照数据集 官网,获取数据集相关的基本信息。 在准备数据集前,请确保命令行当前路径为 $MMACTION2/tools/data/mmit/

步骤 1. Prepare Annotations and Videos

首先,用户需要访问官网,填写申请表来下载数据集。 在得到下载链接后,用户可以使用 bash preprocess_data.sh 来准备标注文件和视频。 请注意此脚本并没有下载标注和视频文件,用户需要根据脚本文件中的注释,提前下载好数据集,并放/软链接到合适的位置。

为加快视频解码速度,用户需要缩小原视频的尺寸,可使用以下命令获取密集编码版视频:

python ../resize_videos.py ../../../data/mmit/videos/ ../../../data/mmit/videos_256p_dense_cache --dense --level 2

Step 2. 抽取帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果用户有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 上。 用户可使用以下命令为 SSD 建立软链接。

## 执行这两行指令进行抽取(假设 SSD 挂载在 "/mnt/SSD/"上)
mkdir /mnt/SSD/mmit_extracted/
ln -s /mnt/SSD/mmit_extracted/ ../../../data/mmit/rawframes

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本进行抽取。

bash extract_frames.sh

步骤 3. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

bash generate_rawframes_filelist.sh
bash generate_videos_filelist.sh

步骤 4. 检查目录结构

在完成 Multi-Moments in Time 数据集准备流程后,用户可以得到 Multi-Moments in Time 的 RGB 帧 + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,Multi-Moments in Time 的文件结构如下:

mmaction2/
└── data
    └── mmit
        ├── annotations
        │   ├── moments_categories.txt
        │   ├── trainingSet.txt
        │   └── validationSet.txt
        ├── mmit_train_rawframes.txt
        ├── mmit_train_videos.txt
        ├── mmit_val_rawframes.txt
        ├── mmit_val_videos.txt
        ├── rawframes
        │   ├── 0-3-6-2-9-1-2-6-14603629126_5
        │   │   ├── flow_x_00001.jpg
        │   │   ├── flow_x_00002.jpg
        │   │   ├── ...
        │   │   ├── flow_y_00001.jpg
        │   │   ├── flow_y_00002.jpg
        │   │   ├── ...
        │   │   ├── img_00001.jpg
        │   │   └── img_00002.jpg
        │   │   ├── ...
        │   └── yt-zxQfALnTdfc_56
        │   │   ├── ...
        │   └── ...

        └── videos
            └── adult+female+singing
                ├── 0-3-6-2-9-1-2-6-14603629126_5.mp4
                └── yt-zxQfALnTdfc_56.mp4
            └── ...

关于对 Multi-Moments in Time 进行训练和验证,可以参照 基础教程

OmniSource

简介

@article{duan2020omni,
  title={Omni-sourced Webly-supervised Learning for Video Recognition},
  author={Duan, Haodong and Zhao, Yue and Xiong, Yuanjun and Liu, Wentao and Lin, Dahua},
  journal={arXiv preprint arXiv:2003.13042},
  year={2020}
}

MMAction2 中发布了 OmniSource 网络数据集的一个子集 (来自论文 Omni-sourced Webly-supervised Learning for Video Recognition)。 OmniSource 数据集中所有类别均来自 Kinetics-400。MMAction2 所提供的子集包含属于 Mini-Kinetics 数据集 200 类动作的网络数据 (Mini-inetics 数据集由论文 Rethinking Spatiotemporal Feature Learning: Speed-Accuracy Trade-offs in Video Classification 提出)。

MMAction2 提供所有数据源中属于 Mini-Kinetics 200 类动作的数据,这些数据源包含:Kinetics 数据集,Kinetics 原始数据集(未经裁剪的长视频),来自 Google 和 Instagram 的网络图片,来自 Instagram 的网络视频。为获取这一数据集,用户需先填写 数据申请表。在接收到申请后,下载链接将被发送至用户邮箱。由于发布的数据集均为爬取所得的原始数据,数据集较大,下载需要一定时间。下表中提供了 OmniSource 数据集各个分量的统计信息。

数据集名称 样本个数 所占空间 过滤使用的 Teacher 模型 过滤后的样本个数 与 k200_val 中样本相似(疑似重复)的样本个数
k200_train 76030 45.6G N/A N/A N/A
k200_val 4838 2.9G N/A N/A N/A
googleimage_200 3050880 265.5G TSN-R50-8seg 1188695 967
insimage_200 3654650 224.4G TSN-R50-8seg 879726 116
insvideo_200 732855 1487.6G SlowOnly-8x8-R50 330680 956
k200_raw_train 76027 963.5G SlowOnly-8x8-R50 N/A N/A

MMAction2 所发布的 OmniSource 数据集目录结构如下所示:

OmniSource/
├── annotations
│   ├── googleimage_200
│   │   ├── googleimage_200.txt                       从 Google 爬取到的所有图片列表
│   │   ├── tsn_8seg_googleimage_200_duplicate.txt    从 Google 爬取到的,疑似与 k200-val 中样本重复的正样本列表
│   │   ├── tsn_8seg_googleimage_200.txt              从 Google 爬取到的,经过 teacher 模型过滤的正样本列表
│   │   └── tsn_8seg_googleimage_200_wodup.txt        从 Google 爬取到的,经过 teacher 模型过滤及去重的正样本列表
│   ├── insimage_200
│   │   ├── insimage_200.txt
│   │   ├── tsn_8seg_insimage_200_duplicate.txt
│   │   ├── tsn_8seg_insimage_200.txt
│   │   └── tsn_8seg_insimage_200_wodup.txt
│   ├── insvideo_200
│   │   ├── insvideo_200.txt
│   │   ├── slowonly_8x8_insvideo_200_duplicate.txt
│   │   ├── slowonly_8x8_insvideo_200.txt
│   │   └── slowonly_8x8_insvideo_200_wodup.txt
│   ├── k200_actions.txt                              MiniKinetics 中 200 类动作的名称
│   ├── K400_to_MiniKinetics_classidx_mapping.json    Kinetics 中的类索引至 MiniKinetics 中的类索引的映射
│   ├── kinetics_200
│   │   ├── k200_train.txt
│   │   └── k200_val.txt
│   └── kinetics_raw_200
│       └── slowonly_8x8_kinetics_raw_200.json        经 teacher 模型过滤后的 Kinetics 原始视频片段
├── googleimage_200                                   共 10 卷
│   ├── vol_0.tar
│   ├── ...
│   └── vol_9.tar
├── insimage_200                                      共 10 卷
│   ├── vol_0.tar
│   ├── ...
│   └── vol_9.tar
├── insvideo_200                                      共 20 卷
│   ├── vol_00.tar
│   ├── ...
│   └── vol_19.tar
├── kinetics_200_train
│   └── kinetics_200_train.tar
├── kinetics_200_val
│   └── kinetics_200_val.tar
└── kinetics_raw_200_train                            共 16 卷
    ├── vol_0.tar
    ├── ...
    └── vol_15.tar

数据准备

用户需要首先完成数据下载,对于 kinetics_200 和三个网络数据集 googleimage_200, insimage_200, insvideo_200,用户仅需解压各压缩卷并将其合并至一处。

对于 Kinetics 原始视频,由于直接读取长视频非常耗时,用户需要先将其分割为小段。MMAction2 提供了名为 trim_raw_video.py 的脚本,用于将长视频分割至 10 秒的小段(分割完成后删除长视频)。用户可利用这一脚本分割长视频。

所有数据应位于 data/OmniSource/ 目录下。完成数据准备后,data/OmniSource/ 目录的结构应如下所示(为简洁,省去了训练及测试时未使用的文件):

data/OmniSource/
├── annotations
│   ├── googleimage_200
│   │   └── tsn_8seg_googleimage_200_wodup.txt    Positive file list of images crawled from Google, filtered by the teacher model, after de-duplication.
│   ├── insimage_200
│   │   └── tsn_8seg_insimage_200_wodup.txt
│   ├── insvideo_200
│   │   └── slowonly_8x8_insvideo_200_wodup.txt
│   ├── kinetics_200
│   │   ├── k200_train.txt
│   │   └── k200_val.txt
│   ├── kinetics_raw_200
│   │   └── slowonly_8x8_kinetics_raw_200.json    Kinetics Raw Clips filtered by the teacher model.
│   └── webimage_200
│       └── tsn_8seg_webimage_200_wodup.txt       The union of `tsn_8seg_googleimage_200_wodup.txt` and `tsn_8seg_insimage_200_wodup.txt`
├── googleimage_200
│   ├── 000
|   │   ├── 00
|   │   │   ├── 000001.jpg
|   │   │   ├── ...
|   │   │   └── 000901.jpg
|   │   ├── ...
|   │   ├── 19
│   ├── ...
│   └── 199
├── insimage_200
│   ├── 000
|   │   ├── abseil
|   │   │   ├── 1J9tKWCNgV_0.jpg
|   │   │   ├── ...
|   │   │   └── 1J9tKWCNgV_0.jpg
|   │   ├── abseiling
│   ├── ...
│   └── 199
├── insvideo_200
│   ├── 000
|   │   ├── abseil
|   │   │   ├── B00arxogubl.mp4
|   │   │   ├── ...
|   │   │   └── BzYsP0HIvbt.mp4
|   │   ├── abseiling
│   ├── ...
│   └── 199
├── kinetics_200_train
│   ├── 0074cdXclLU.mp4
|   ├── ...
|   ├── zzzlyL61Fyo.mp4
├── kinetics_200_val
│   ├── 01fAWEHzudA.mp4
|   ├── ...
|   ├── zymA_6jZIz4.mp4
└── kinetics_raw_200_train
│   ├── pref_
│   |   ├── ___dTOdxzXY
|   │   │   ├── part_0.mp4
|   │   │   ├── ...
|   │   │   ├── part_6.mp4
│   |   ├── ...
│   |   └── _zygwGDE2EM
│   ├── ...
│   └── prefZ

骨架数据集

@misc{duan2021revisiting,
      title={Revisiting Skeleton-based Action Recognition},
      author={Haodong Duan and Yue Zhao and Kai Chen and Dian Shao and Dahua Lin and Bo Dai},
      year={2021},
      eprint={2104.13586},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

简介

MMAction2 发布 Revisiting Skeleton-based Action Recognition 论文中所使用的骨架标注。 默认使用 Faster-RCNN 作为人体检测器, 使用 HRNet-w32 作为单人姿态估计模型。 对于 FineGYM 数据集,MMAction2 使用的是运动员的真实框标注,而非检测器所出的框。目前,MMAction2 已发布 FineGYM 和 NTURGB-D Xsub 部分的骨架标注,其他数据集的标注也将很快发布。

标注文件

目前,MMAction2 支持 HMDB51, UCF101, FineGYM 和 NTURGB+D 数据集。对于 FineGYM 数据集,用户可以使用以下脚本下载标注文件。

bash download_annotations.sh ${DATASET}

由于 NTURGB+D 数据集的 使用条例,MMAction2 并未直接发布实验中所使用的标注文件。 因此,这里提供生成 NTURGB+D 数据集中视频的姿态标注文件,这将生成一个 dict 数据并将其保存为一个 pickle 文件。 用户可以生成一个 list 用以包含对应视频的 dict 数据,并将其保存为一个 pickle 文件。 之后,用户可以获得 ntu60_xsub_train.pkl, ntu60_xsub_val.pkl, ntu120_xsub_train.pkl, ntu120_xsub_val.pkl 文件用于训练。

对于无法进行姿态提取的用户,这里提供了上述流程的输出结果,分别对应 NTURGB-D 数据集的 4 个部分:

  • ntu60_xsub_train: https://download.openmmlab.com/mmaction/posec3d/ntu60_xsub_train.pkl

  • ntu60_xsub_val: https://download.openmmlab.com/mmaction/posec3d/ntu60_xsub_val.pkl

  • ntu120_xsub_train: https://download.openmmlab.com/mmaction/posec3d/ntu120_xsub_train.pkl

  • ntu120_xsub_val: https://download.openmmlab.com/mmaction/posec3d/ntu120_xsub_val.pkl

  • hmdb51: https://download.openmmlab.com/mmaction/posec3d/hmdb51.pkl

  • ucf101: https://download.openmmlab.com/mmaction/posec3d/ucf101.pkl

若想生成单个视频的 2D 姿态标注文件,首先,用户需要由源码安装 mmdetection 和 mmpose。之后,用户需要在 ntu_pose_extraction.py 中指定 mmdet_rootmmpose_root 变量。 最后,用户可使用以下脚本进行 NTURGB+D 视频的姿态提取:

python ntu_pose_extraction.py S001C001P001R001A001_rgb.avi S001C001P001R001A001.pkl

在用户获得数据集某部分所有视频的姿态标注文件(如 ntu60_xsub_val)后,可以将其集合成一个 list 数据并保存为 ntu60_xsub_val.pkl。用户可用这些大型 pickle 文件进行训练和测试。

PoseC3D 的标注文件格式

这里简单介绍 PoseC3D 的标注文件格式。以 gym_train.pkl 为例:gym_train.pkl 存储一个长度为 20484 的 list,list 的每一项为单个视频的骨架标注 dict。每个 dict 的内容如下:

  • keypoint:关键点坐标,大小为 N(##人数)x T(时序长度)x K(#关键点, 这里为17)x 2 (x,y 坐标)的 numpy array 数据类型

  • keypoint_score:关键点的置信分数,大小为 N(##人数)x T(时序长度)x K(#关键点, 这里为17)的 numpy array 数据类型

  • frame_dir: 对应视频名

  • label: 动作类别

  • img_shape: 每一帧图像的大小

  • original_shape: 同 img_shape

  • total_frames: 视频时序长度

如用户想使用自己的数据集训练 PoseC3D,可以参考 Custom Dataset Training

可视化

为了可视化骨架数据,用户需要准备 RGB 的视频。详情可参考 visualize_heatmap_volume。这里提供一些 NTU-60 和 FineGYM 上的例子

姿态估计结果


关键点热力图三维可视化


肢体热力图三维可视化


如何将 NTU RGB+D 原始数据转化为 MMAction2 格式 (转换好的标注文件目前仅适用于 GCN 模型)

这里介绍如何将 NTU RGB+D 原始数据转化为 MMAction2 格式。首先,需要从 https://github.com/shahroudy/NTURGB-D 下载原始 NTU-RGBD 60 和 NTU-RGBD 120 数据集的原始骨架数据。

对于 NTU-RGBD 60 数据集,可使用以下脚本

python gen_ntu_rgbd_raw.py --data-path your_raw_nturgbd60_skeleton_path --ignored-sample-path NTU_RGBD_samples_with_missing_skeletons.txt --out-folder your_nturgbd60_output_path --task ntu60

对于 NTU-RGBD 120 数据集,可使用以下脚本

python gen_ntu_rgbd_raw.py --data-path your_raw_nturgbd120_skeleton_path --ignored-sample-path NTU_RGBD120_samples_with_missing_skeletons.txt --out-folder your_nturgbd120_output_path --task ntu120

转换其他第三方项目的骨骼标注

MMAction2 提供脚本以将其他第三方项目的骨骼标注转至 MMAction2 格式,如:

  • BABEL: babel2mma2.py

待办项

  • [x] FineGYM

  • [x] NTU60_XSub

  • [x] NTU120_XSub

  • [x] NTU60_XView

  • [x] NTU120_XSet

  • [x] UCF101

  • [x] HMDB51

  • [ ] Kinetics

Something-Something V1

简介

@misc{goyal2017something,
      title={The "something something" video database for learning and evaluating visual common sense},
      author={Raghav Goyal and Samira Ebrahimi Kahou and Vincent Michalski and Joanna Materzyńska and Susanne Westphal and Heuna Kim and Valentin Haenel and Ingo Fruend and Peter Yianilos and Moritz Mueller-Freitag and Florian Hoppe and Christian Thurau and Ingo Bax and Roland Memisevic},
      year={2017},
      eprint={1706.04261},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/sthv1/

步骤 1. 下载标注文件

首先,用户需要在 官网 进行注册,才能下载标注文件。下载好的标注文件需要放在 $MMACTION2/data/sthv1/annotations 文件夹下。

步骤 2. 准备 RGB 帧

官网 并未提供原始视频文件,只提供了对原视频文件进行抽取得到的 RGB 帧,用户可在 官网 直接下载。

将下载好的压缩文件放在 $MMACTION2/data/sthv1/ 文件夹下,并使用以下脚本进行解压。

cd $MMACTION2/data/sthv1/
cat 20bn-something-something-v1-?? | tar zx
cd $MMACTION2/tools/data/sthv1/

如果用户只想使用 RGB 帧,则可以跳过中间步骤至步骤 5 以直接生成视频帧的文件列表。 由于官网的 JPG 文件名形如 “%05d.jpg” (比如,”00001.jpg”),需要在配置文件的 data.train, data.valdata.test 处添加 "filename_tmpl='{:05}.jpg'" 代码,以修改文件名模板。

data = dict(
    videos_per_gpu=16,
    workers_per_gpu=2,
    train=dict(
        type=dataset_type,
        ann_file=ann_file_train,
        data_prefix=data_root,
        filename_tmpl='{:05}.jpg',
        pipeline=train_pipeline),
    val=dict(
        type=dataset_type,
        ann_file=ann_file_val,
        data_prefix=data_root_val,
        filename_tmpl='{:05}.jpg',
        pipeline=val_pipeline),
    test=dict(
        type=dataset_type,
        ann_file=ann_file_test,
        data_prefix=data_root_val,
        filename_tmpl='{:05}.jpg',
        pipeline=test_pipeline))

步骤 3. 抽取光流

如果用户只想使用原 RGB 帧加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果拥有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 中。

可以运行以下命令为 SSD 建立软链接。

## 执行这两行进行抽取(假设 SSD 挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/sthv1_extracted/
ln -s /mnt/SSD/sthv1_extracted/ ../../../data/sthv1/rawframes

如果想抽取光流,则可以运行以下脚本从 RGB 帧中抽取出光流。

cd $MMACTION2/tools/data/sthv1/
bash extract_flow.sh

步骤 4: 编码视频

如果用户只想使用 RGB 帧加载训练,则该部分是 可选项

用户可以运行以下命令进行视频编码。

cd $MMACTION2/tools/data/sthv1/
bash encode_videos.sh

步骤 5. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

cd $MMACTION2/tools/data/sthv1/
bash generate_{rawframes, videos}_filelist.sh

步骤 6. 检查文件夹结构

在完成所有 Something-Something V1 数据集准备流程后, 用户可以获得对应的 RGB + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,Something-Something V1 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── sthv1
│   │   ├── sthv1_{train,val}_list_rawframes.txt
│   │   ├── sthv1_{train,val}_list_videos.txt
│   │   ├── annotations
│   |   ├── videos
│   |   |   ├── 1.mp4
│   |   |   ├── 2.mp4
│   |   |   ├──...
│   |   ├── rawframes
│   |   |   ├── 1
│   |   |   |   ├── 00001.jpg
│   |   |   |   ├── 00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_x_00001.jpg
│   |   |   |   ├── flow_x_00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_y_00001.jpg
│   |   |   |   ├── flow_y_00002.jpg
│   |   |   |   ├── ...
│   |   |   ├── 2
│   |   |   ├── ...

关于对 Something-Something V1 进行训练和验证,可以参考 基础教程

Something-Something V2

简介

@misc{goyal2017something,
      title={The "something something" video database for learning and evaluating visual common sense},
      author={Raghav Goyal and Samira Ebrahimi Kahou and Vincent Michalski and Joanna Materzyńska and Susanne Westphal and Heuna Kim and Valentin Haenel and Ingo Fruend and Peter Yianilos and Moritz Mueller-Freitag and Florian Hoppe and Christian Thurau and Ingo Bax and Roland Memisevic},
      year={2017},
      eprint={1706.04261},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/sthv2/

步骤 1. 下载标注文件

首先,用户需要在 官网 完成注册,才能下载标注文件。下载好的标注文件需要放在 $MMACTION2/data/sthv2/annotations 文件夹下。

步骤 2. 准备视频

之后,用户可将下载好的压缩文件放在 $MMACTION2/data/sthv2/ 文件夹下,并且使用以下指令进行解压。

cd $MMACTION2/data/sthv2/
cat 20bn-something-something-v2-?? | tar zx
cd $MMACTION2/tools/data/sthv2/

步骤 3. 抽取 RGB 帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果拥有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 中。

可以运行以下命令为 SSD 建立软链接。

## 执行这两行进行抽取(假设 SSD 挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/sthv2_extracted/
ln -s /mnt/SSD/sthv2_extracted/ ../../../data/sthv2/rawframes

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

cd $MMACTION2/tools/data/sthv2/
bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

cd $MMACTION2/tools/data/sthv2/
bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本进行抽取。

cd $MMACTION2/tools/data/sthv2/
bash extract_frames.sh

步骤 4. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

cd $MMACTION2/tools/data/sthv2/
bash generate_{rawframes, videos}_filelist.sh

步骤 5. 检查文件夹结构

在完成所有 Something-Something V2 数据集准备流程后, 用户可以获得对应的 RGB + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,Something-Something V2 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── sthv2
│   │   ├── sthv2_{train,val}_list_rawframes.txt
│   │   ├── sthv2_{train,val}_list_videos.txt
│   │   ├── annotations
│   |   ├── videos
│   |   |   ├── 1.mp4
│   |   |   ├── 2.mp4
│   |   |   ├──...
│   |   ├── rawframes
│   |   |   ├── 1
│   |   |   |   ├── img_00001.jpg
│   |   |   |   ├── img_00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_x_00001.jpg
│   |   |   |   ├── flow_x_00002.jpg
│   |   |   |   ├── ...
│   |   |   |   ├── flow_y_00001.jpg
│   |   |   |   ├── flow_y_00002.jpg
│   |   |   |   ├── ...
│   |   |   ├── 2
│   |   |   ├── ...

关于对 Something-Something V2 进行训练和验证,可以参考 基础教程

THUMOS’14

简介

@misc{THUMOS14,
    author = {Jiang, Y.-G. and Liu, J. and Roshan Zamir, A. and Toderici, G. and Laptev,
    I. and Shah, M. and Sukthankar, R.},
    title = {{THUMOS} Challenge: Action Recognition with a Large
    Number of Classes},
    howpublished = "\url{http://crcv.ucf.edu/THUMOS14/}",
    Year = {2014}
}

用户可以参照数据集 官网,获取数据集相关的基本信息。 在准备数据集前,请确保命令行当前路径为 $MMACTION2/tools/data/thumos14/

步骤 1. 下载标注文件

首先,用户可使用以下命令下载标注文件。

cd $MMACTION2/tools/data/thumos14/
bash download_annotations.sh

步骤 2. 下载视频

之后,用户可使用以下指令下载视频

cd $MMACTION2/tools/data/thumos14/
bash download_videos.sh

步骤 3. 抽取帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果用户有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 上。 用户可使用以下命令为 SSD 建立软链接。

## 执行这两行指令进行抽取(假设 SSD 挂载在 "/mnt/SSD/"上)
mkdir /mnt/SSD/thumos14_extracted/
ln -s /mnt/SSD/thumos14_extracted/ ../data/thumos14/rawframes/

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

cd $MMACTION2/tools/data/thumos14/
bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

cd $MMACTION2/tools/data/thumos14/
bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本进行抽取。

cd $MMACTION2/tools/data/thumos14/
bash extract_frames.sh tvl1

步骤 4. 生成文件列表

如果用户不使用 SSN 模型,则该部分是 可选项

可使用运行以下脚本下载预先计算的候选标签。

cd $MMACTION2/tools/data/thumos14/
bash fetch_tag_proposals.sh

步骤 5. 去规范化候选文件

如果用户不使用 SSN 模型,则该部分是 可选项

可运行以下脚本,来根据本地原始帧的实际数量,去规范化预先计算的候选标签。

cd $MMACTION2/tools/data/thumos14/
bash denormalize_proposal_file.sh

步骤 6. 检查目录结构

在完成 THUMOS’14 数据集准备流程后,用户可以得到 THUMOS’14 的 RGB 帧 + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,THUMOS’14 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── thumos14
│   │   ├── proposals
│   │   |   ├── thumos14_tag_val_normalized_proposal_list.txt
│   │   |   ├── thumos14_tag_test_normalized_proposal_list.txt
│   │   ├── annotations_val
│   │   ├── annotations_test
│   │   ├── videos
│   │   │   ├── val
│   │   │   |   ├── video_validation_0000001.mp4
│   │   │   |   ├── ...
│   │   |   ├── test
│   │   │   |   ├── video_test_0000001.mp4
│   │   │   |   ├── ...
│   │   ├── rawframes
│   │   │   ├── val
│   │   │   |   ├── video_validation_0000001
|   │   │   |   │   ├── img_00001.jpg
|   │   │   |   │   ├── img_00002.jpg
|   │   │   |   │   ├── ...
|   │   │   |   │   ├── flow_x_00001.jpg
|   │   │   |   │   ├── flow_x_00002.jpg
|   │   │   |   │   ├── ...
|   │   │   |   │   ├── flow_y_00001.jpg
|   │   │   |   │   ├── flow_y_00002.jpg
|   │   │   |   │   ├── ...
│   │   │   |   ├── ...
│   │   |   ├── test
│   │   │   |   ├── video_test_0000001

关于对 THUMOS’14 进行训练和验证,可以参照 基础教程

UCF-101

简介

@article{Soomro2012UCF101AD,
  title={UCF101: A Dataset of 101 Human Actions Classes From Videos in The Wild},
  author={K. Soomro and A. Zamir and M. Shah},
  journal={ArXiv},
  year={2012},
  volume={abs/1212.0402}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/ucf101/

步骤 1. 下载标注文件

首先,用户可运行以下脚本下载标注文件。

bash download_annotations.sh

步骤 2. 准备视频文件

之后,用户可运行以下脚本准备视频文件。

bash download_videos.sh

用户可使用以下脚本,对原视频进行裁剪,得到密集编码且更小尺寸的视频。

python ../resize_videos.py ../../../data/ucf101/videos/ ../../../data/ucf101/videos_256p_dense_cache --dense --level 2 --ext avi

步骤 3. 抽取视频帧和光流

如果用户只想使用视频加载训练,则该部分是 可选项

在抽取视频帧和光流之前,请参考 安装指南 安装 denseflow

如果拥有大量的 SSD 存储空间,则推荐将抽取的帧存储至 I/O 性能更优秀的 SSD 中。所抽取的视频帧和光流约占据 100 GB 的存储空间。

可以运行以下命令为 SSD 建立软链接。

## 执行这两行进行抽取(假设 SSD 挂载在 "/mnt/SSD/")
mkdir /mnt/SSD/ucf101_extracted/
ln -s /mnt/SSD/ucf101_extracted/ ../../../data/ucf101/rawframes

如果用户需要抽取 RGB 帧(因为抽取光流的过程十分耗时),可以考虑运行以下命令使用 denseflow 只抽取 RGB 帧

bash extract_rgb_frames.sh

如果用户没有安装 denseflow,则可以运行以下命令使用 OpenCV 抽取 RGB 帧。然而,该方法只能抽取与原始视频分辨率相同的帧。

bash extract_rgb_frames_opencv.sh

如果用户想抽取 RGB 帧和光流,则可以运行以下脚本使用 “tvl1” 算法进行抽取。

bash extract_frames.sh

步骤 4. 生成文件列表

用户可以通过运行以下命令生成帧和视频格式的文件列表。

bash generate_videos_filelist.sh
bash generate_rawframes_filelist.sh

步骤 5. 检查文件夹结构

在完成所有 UCF-101 数据集准备流程后, 用户可以获得对应的 RGB + 光流文件,视频文件以及标注文件。

在整个 MMAction2 文件夹下,UCF-101 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── ucf101
│   │   ├── ucf101_{train,val}_split_{1,2,3}_rawframes.txt
│   │   ├── ucf101_{train,val}_split_{1,2,3}_videos.txt
│   │   ├── annotations
│   │   ├── videos
│   │   │   ├── ApplyEyeMakeup
│   │   │   │   ├── v_ApplyEyeMakeup_g01_c01.avi

│   │   │   ├── YoYo
│   │   │   │   ├── v_YoYo_g25_c05.avi
│   │   ├── rawframes
│   │   │   ├── ApplyEyeMakeup
│   │   │   │   ├── v_ApplyEyeMakeup_g01_c01
│   │   │   │   │   ├── img_00001.jpg
│   │   │   │   │   ├── img_00002.jpg
│   │   │   │   │   ├── ...
│   │   │   │   │   ├── flow_x_00001.jpg
│   │   │   │   │   ├── flow_x_00002.jpg
│   │   │   │   │   ├── ...
│   │   │   │   │   ├── flow_y_00001.jpg
│   │   │   │   │   ├── flow_y_00002.jpg
│   │   │   ├── ...
│   │   │   ├── YoYo
│   │   │   │   ├── v_YoYo_g01_c01
│   │   │   │   ├── ...
│   │   │   │   ├── v_YoYo_g25_c05

关于对 UCF-101 进行训练和验证,可以参考 基础教程

UCF101-24

简介

@article{Soomro2012UCF101AD,
  title={UCF101: A Dataset of 101 Human Actions Classes From Videos in The Wild},
  author={K. Soomro and A. Zamir and M. Shah},
  journal={ArXiv},
  year={2012},
  volume={abs/1212.0402}
}

用户可参考该数据集的 官网,以获取数据集相关的基本信息。 在数据集准备前,请确保命令行当前路径为 $MMACTION2/tools/data/ucf101_24/

下载和解压

用户可以从 这里 下载 RGB 帧,光流和标注文件。 该数据由 MOC 代码库提供, 参考自 act-detectorcorrected-UCF101-Annots

注意:UCF101-24 的标注文件来自于 这里,该标注文件相对于其他标注文件更加准确。

用户在下载 UCF101_v2.tar.gz 文件后,需将其放置在 $MMACTION2/tools/data/ucf101_24/ 目录下,并使用以下指令进行解压:

tar -zxvf UCF101_v2.tar.gz

检查文件夹结构

经过解压后,用户将得到 rgb-images 文件夹,brox-images 文件夹和 UCF101v2-GT.pkl 文件。

在整个 MMAction2 文件夹下,UCF101_24 的文件结构如下:

mmaction2
├── mmaction
├── tools
├── configs
├── data
│   ├── ucf101_24
│   |   ├── brox-images
│   |   |   ├── Basketball
│   |   |   |   ├── v_Basketball_g01_c01
│   |   |   |   |   ├── 00001.jpg
│   |   |   |   |   ├── 00002.jpg
│   |   |   |   |   ├── ...
│   |   |   |   |   ├── 00140.jpg
│   |   |   |   |   ├── 00141.jpg
│   |   |   ├── ...
│   |   |   ├── WalkingWithDog
│   |   |   |   ├── v_WalkingWithDog_g01_c01
│   |   |   |   ├── ...
│   |   |   |   ├── v_WalkingWithDog_g25_c04
│   |   ├── rgb-images
│   |   |   ├── Basketball
│   |   |   |   ├── v_Basketball_g01_c01
│   |   |   |   |   ├── 00001.jpg
│   |   |   |   |   ├── 00002.jpg
│   |   |   |   |   ├── ...
│   |   |   |   |   ├── 00140.jpg
│   |   |   |   |   ├── 00141.jpg
│   |   |   ├── ...
│   |   |   ├── WalkingWithDog
│   |   |   |   ├── v_WalkingWithDog_g01_c01
│   |   |   |   ├── ...
│   |   |   |   ├── v_WalkingWithDog_g25_c04
│   |   ├── UCF101v2-GT.pkl

注意UCF101v2-GT.pkl 作为一个缓存文件,它包含 6 个项目:

  1. labels (list):24 个行为类别名称组成的列表

  2. gttubes (dict):每个视频对应的基准 tubes 组成的字典 gttube 是由标签索引和 tube 列表组成的字典 tube 是一个 nframes 行和 5 列的 numpy array,每一列的形式如 <frame index> <x1> <y1> <x2> <y2>

  3. nframes (dict):用以表示每个视频对应的帧数,如 'HorseRiding/v_HorseRiding_g05_c02': 151

  4. train_videos (list):包含 nsplits=1 的元素,每一项都包含了训练视频的列表

  5. test_videos (list):包含 nsplits=1 的元素,每一项都包含了测试视频的列表

  6. resolution (dict):每个视频对应的分辨率(形如 (h,w)),如 'FloorGymnastics/v_FloorGymnastics_g09_c03': (240, 320)

Read the Docs v: latest
Versions
latest
stable
1.x
v1.0.0rc1
dev-1.x
Downloads
pdf
html
epub
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.