我們在 arXiv 發表了一篇論文。
片岡弘勝、若宮天吾、原賢章、佐藤裕、
“超大規模資料集是否會進一步增強時空 3D CNN”,
arXiv 預印本,arXiv:2004.04968,2020。
我們上傳了本文中描述的預訓練模型,包括在具有 Kinetics-700 和 Moments in Time 的組合資料集上進行預先訓練的 ResNet-50。
我們顯著更新了我們的腳本。如果您想使用舊版本來重現我們的 CVPR2018 論文,您應該使用 CVPR2018 分支中的腳本。
本次更新內容如下:
這是以下論文的 PyTorch 程式碼:
片岡弘勝、若宮天吾、原賢章、佐藤裕、
“超大規模資料集是否會進一步增強時空 3D CNN”,
arXiv 預印本,arXiv:2004.04968,2020。
原賢章、片岡弘勝、佐藤豐、
“利用時空 3D 卷積實現動作識別的良好實踐”,
國際模式識別會議論文集,第 2516-2521 頁,2018 年。
原賢章、片岡弘勝、佐藤豐、
“時空 3D CNN 能否追溯 2D CNN 和 ImageNet 的歷史?”,
IEEE 電腦視覺與模式辨識會議論文集,第 6546-6555 頁,2018 年。
原賢章、片岡弘勝、佐藤豐、
“利用 3D 殘差網路學習時空特徵以進行動作識別”,
ICCV 動作、手勢和情緒辨識研討會論文集,2017 年。
程式碼包括對 Kinetics、Moments in Time、ActivityNet、UCF-101 和 HMDB-51 的訓練、微調和測試。
如果您使用此程式碼或預訓練模型,請引用以下內容:
@inproceedings { hara3dcnns ,
author = { Kensho Hara and Hirokatsu Kataoka and Yutaka Satoh } ,
title = { Can Spatiotemporal 3D CNNs Retrace the History of 2D CNNs and ImageNet? } ,
booktitle = { Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (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
舊的預訓練模型仍然可以在這裡使用。
但是,需要進行一些修改才能在目前腳本中使用舊的預訓練模型。
conda install pytorch torchvision cudatoolkit=10.1 -c soumith
FFmpeg、FFprobe
蟒蛇3
util_scripts/generate_video_jpgs.py
將 avi 轉換為 jpg 文件python -m util_scripts.generate_video_jpgs mp4_video_dir_path jpg_video_dir_path activitynet
util_scripts/add_fps_into_activitynet_json.py
python -m util_scripts.add_fps_into_activitynet_json mp4_video_dir_path json_file_path
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 格式的註解文件python -m util_scripts.kinetics_json csv_dir_path 700 jpg_video_dir_path jpg dst_json_path
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
util_scripts/generate_video_jpgs.py
將 avi 轉換為 jpg 文件python -m util_scripts.generate_video_jpgs avi_video_dir_path jpg_video_dir_path hmdb51
util_scripts/hmdb51_json.py
產生類似 ActivityNet 的 json 格式的註解文件annotation_dir_path
包含brush_hair_test_split1.txt,... python -m util_scripts.hmdb51_json annotation_dir_path jpg_video_dir_path dst_json_path
假設資料目錄的結構如下:
~/
data/
kinetics_videos/
jpg/
.../ (directories of class names)
.../ (directories of video names)
... (jpg files)
results/
save_100.pth
kinetics.json
確認所有選項。
python main.py -h
使用 4 個 CPU 執行緒(用於資料載入)在 Kinetics-700 資料集(700 個類別)上訓練 ResNets-50。
批量大小為 128。
每 5 個時期保存一次模型。所有 GPU 均用於訓練。如果您想要 GPU 的一部分,請使用CUDA_VISIBLE_DEVICES=...
。
python main.py --root_path ~ /data --video_path kinetics_videos/jpg --annotation_path kinetics.json
--result_path results --dataset kinetics --model resnet
--model_depth 50 --n_classes 700 --batch_size 128 --n_threads 4 --checkpoint 5
從 epoch 101 開始繼續訓練。
python main.py --root_path ~ /data --video_path kinetics_videos/jpg --annotation_path kinetics.json
--result_path results --dataset kinetics --resume_path results/save_100.pth
--model_depth 50 --n_classes 700 --batch_size 128 --n_threads 4 --checkpoint 5
使用經過訓練的模型計算每個影片的前 5 類機率 (~/data/results/save_200.pth.)
請注意, inference_batch_size
應該很小,因為實際批次大小是透過inference_batch_size * (n_video_frames / inference_stride)
計算的。
python main.py --root_path ~ /data --video_path kinetics_videos/jpg --annotation_path kinetics.json
--result_path results --dataset kinetics --resume_path results/save_200.pth
--model_depth 50 --n_classes 700 --n_threads 4 --no_train --no_val --inference --output_topk 5 --inference_batch_size 1
評估辨識結果的 top-1 影片準確性 (~/data/results/val.json)。
python -m util_scripts.eval_accuracy ~ /data/kinetics.json ~ /data/results/val.json --subset val -k 1 --ignore
在 UCF-101 上微調預訓練模型 (~/data/models/resnet-50-kinetics.pth) 的 fc 層。
python main.py --root_path ~ /data --video_path ucf101_videos/jpg --annotation_path ucf101_01.json
--result_path results --dataset ucf101 --n_classes 101 --n_pretrain_classes 700
--pretrain_path models/resnet-50-kinetics.pth --ft_begin_module fc
--model resnet --model_depth 50 --batch_size 128 --n_threads 4 --checkpoint 5