3D ResNet用于动作识别
更新 (2020/4/13)
我们在arXiv上发表了一篇论文。
我们上传了该论文中描述的预训练模型,包括在Kinetics-700和Moments in Time组合数据集上预训练的ResNet-50。
更新 (2020/4/10)
我们对脚本进行了重大更新。如果你想使用旧版本来重现我们的CVPR2018论文,请使用CVPR2018分支中的脚本。
此次更新包括如下内容:
- 重构整个项目
- 支持较新的PyTorch版本
- 支持分布式训练
- 支持在Moments in Time数据集上进行训练和测试
- 添加了R(2+1)D模型
- 上传了在Kinetics-700、Moments in Time和STAIR-Actions数据集上训练的3D ResNet模型
摘要
这是以下论文的PyTorch代码:
Kensho Hara, Hirokatsu Kataoka, 和 Yutaka Satoh,
"使用3D残差网络学习时空特征用于动作识别",
ICCV动作、手势和情感识别研讨会论文集, 2017.
该代码包括在Kinetics, Moments in Time, ActivityNet, UCF-101和HMDB-51上的训练、微调和测试。
引用
如果你使用了此代码或预训练模型,请引用以下文献:
@inproceedings{hara3dcnns,
author={Kensho Hara and Hirokatsu Kataoka and Yutaka Satoh},
title={时空3D CNN是否能重现2D CNN和ImageNet的历史?},
booktitle={IEEE计算机视觉与模式识别会议论文集(CVPR)},
pages={6546--6555},
year={2018},
}
预训练模型
预训练模型可以在这里下载。
所有模型均在Kinetics-700 (K), Moments in Time (M), STAIR-Actions (S)或它们的合并数据集(KM, KS, MS, KMS)上训练。
如果你想在自己的数据集上微调这些模型,应该指定以下选项。
r3d18_K_200ep.pth: --model resnet --model_depth 18 --n_pretrain_classes 700
r3d18_KM_200ep.pth: --model resnet --model_depth 18 --n_pretrain_classes 1039
r3d34_K_200ep.pth: --model resnet --model_depth 34 --n_pretrain_classes 700
r3d34_KM_200ep.pth: --model resnet --model_depth 34 --n_pretrain_classes 1039
r3d50_K_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 700
r3d50_KM_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 1039
r3d50_KMS_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 1139
r3d50_KS_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 800
r3d50_M_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 339
r3d50_MS_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 439
r3d50_S_200ep.pth: --model resnet --model_depth 50 --n_pretrain_classes 100
r3d101_K_200ep.pth: --model resnet --model_depth 101 --n_pretrain_classes 700
r3d101_KM_200ep.pth: --model resnet --model_depth 101 --n_pretrain_classes 1039
r3d152_K_200ep.pth: --model resnet --model_depth 152 --n_pretrain_classes 700
r3d152_KM_200ep.pth: --model resnet --model_depth 152 --n_pretrain_classes 1039
r3d200_K_200ep.pth: --model resnet --model_depth 200 --n_pretrain_classes 700
r3d200_KM_200ep.pth: --model resnet --model_depth 200 --n_pretrain_classes 1039
旧的预训练模型仍然可以在这里下载。
不过,使用当前脚本时需要对旧的预训练模型进行一些修改。
要求
- PyTorch (需要0.4+版本)
conda install pytorch torchvision cudatoolkit=10.1 -c soumith
-
FFmpeg, FFprobe
-
Python 3
准备
ActivityNet
- 使用官方爬虫下载视频。
- 使用
util_scripts/generate_video_jpgs.py
将avi文件转换为jpg文件
python -m util_scripts.generate_video_jpgs mp4_video_dir_path jpg_video_dir_path activitynet
- 将fps信息添加到json文件
util_scripts/add_fps_into_activitynet_json.py
python -m util_scripts.add_fps_into_activitynet_json mp4_video_dir_path json_file_path
Kinetics
- 使用官方爬虫下载视频。
- 将测试集放在
video_directory/test
目录下。
- 将测试集放在
- 使用
util_scripts/generate_video_jpgs.py
将avi文件转换为jpg文件
python -m util_scripts.generate_video_jpgs mp4_video_dir_path jpg_video_dir_path kinetics
- 使用
util_scripts/kinetics_json.py
生成类似ActivityNet的json格式注释文件- 爬虫中包含CSV文件(kinetics_{train, val, test}.csv)。
python -m util_scripts.kinetics_json csv_dir_path 700 jpg_video_dir_path jpg dst_json_path
UCF-101
- 在这里下载视频和训练/测试划分文件。
- 使用
util_scripts/generate_video_jpgs.py
将avi文件转换为jpg文件
python -m util_scripts.generate_video_jpgs avi_video_dir_path jpg_video_dir_path ucf101
- 使用
util_scripts/ucf101_json.py
生成类似ActivityNet的json格式注释文件annotation_dir_path
包含classInd.txt, trainlist0{1, 2, 3}.txt, testlist0{1, 2, 3}.txt
python -m util_scripts.ucf101_json annotation_dir_path jpg_video_dir_path dst_json_path
HMDB-51
- 在这里下载视频和训练/测试划分文件。
- 使用```util_scripts/g