Publicamos un artículo sobre arXiv.
Hirokatsu Kataoka, Tenga Wakamiya, Kensho Hara y Yutaka Satoh,
"¿Los conjuntos de datos a megaescala mejorarían aún más las CNN 3D espaciotemporales?"
Preimpresión de arXiv, arXiv:2004.04968, 2020.
Cargamos los modelos previamente entrenados descritos en este artículo, incluido ResNet-50 previamente entrenado en el conjunto de datos combinado con Kinetics-700 y Moments in Time.
Actualizamos significativamente nuestros scripts. Si desea utilizar versiones anteriores para reproducir nuestro documento CVPR2018, debe utilizar los scripts de la rama CVPR2018.
Esta actualización incluye lo siguiente:
Este es el código PyTorch para los siguientes artículos:
Hirokatsu Kataoka, Tenga Wakamiya, Kensho Hara y Yutaka Satoh,
"¿Los conjuntos de datos a megaescala mejorarían aún más las CNN 3D espaciotemporales?"
Preimpresión de arXiv, arXiv:2004.04968, 2020.
Kensho Hara, Hirokatsu Kataoka y Yutaka Satoh,
"Hacia buenas prácticas para el reconocimiento de acciones con convoluciones 3D espaciotemporales",
Actas de la Conferencia Internacional sobre Reconocimiento de Patrones, págs. 2516-2521, 2018.
Kensho Hara, Hirokatsu Kataoka y Yutaka Satoh,
"¿Pueden las CNN 3D espaciotemporales rastrear la historia de las CNN 2D e ImageNet?",
Actas de la Conferencia IEEE sobre visión por computadora y reconocimiento de patrones, págs. 6546-6555, 2018.
Kensho Hara, Hirokatsu Kataoka y Yutaka Satoh,
"Aprendizaje de características espacio-temporales con redes residuales 3D para el reconocimiento de acciones",
Actas del taller de ICCV sobre acción, gestos y reconocimiento de emociones, 2017.
Este código incluye capacitación, ajuste y pruebas en Kinetics, Moments in Time, ActivityNet, UCF-101 y HMDB-51.
Si utiliza este código o modelos previamente entrenados, cite lo siguiente:
@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 } ,
}
Los modelos previamente entrenados están disponibles aquí.
Todos los modelos están entrenados en Kinetics-700 ( K ), Moments in Time ( M ), STAIR-Actions ( S ) o conjuntos de datos combinados de ellos ( KM , KS , MS , KMS ).
Si desea ajustar los modelos en su conjunto de datos, debe especificar las siguientes opciones.
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
Los modelos antiguos previamente entrenados todavía están disponibles aquí.
Sin embargo, se requieren algunas modificaciones para utilizar los modelos antiguos previamente entrenados en los scripts actuales.
conda install pytorch torchvision cudatoolkit=10.1 -c soumith
FFmpeg, sonda FF
Pitón 3
util_scripts/generate_video_jpgs.py
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
python -m util_scripts.generate_video_jpgs mp4_video_dir_path jpg_video_dir_path kinetics
util_scripts/kinetics_json.py
python -m util_scripts.kinetics_json csv_dir_path 700 jpg_video_dir_path jpg dst_json_path
util_scripts/generate_video_jpgs.py
python -m util_scripts.generate_video_jpgs avi_video_dir_path jpg_video_dir_path ucf101
util_scripts/ucf101_json.py
annotation_dir_path
incluye 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
python -m util_scripts.generate_video_jpgs avi_video_dir_path jpg_video_dir_path hmdb51
util_scripts/hmdb51_json.py
annotation_dir_path
incluye brush_hair_test_split1.txt, ... python -m util_scripts.hmdb51_json annotation_dir_path jpg_video_dir_path dst_json_path
Supongamos que la estructura de los directorios de datos es la siguiente:
~/
data/
kinetics_videos/
jpg/
.../ (directories of class names)
.../ (directories of video names)
... (jpg files)
results/
save_100.pth
kinetics.json
Confirma todas las opciones.
python main.py -h
Entrene ResNets-50 en el conjunto de datos Kinetics-700 (700 clases) con 4 subprocesos de CPU (para carga de datos).
El tamaño del lote es 128.
Guarde modelos cada 5 épocas. Todas las GPU se utilizan para el entrenamiento. Si desea una parte de las GPU, use 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
Continuar entrenando desde la época 101. (~/data/results/save_100.pth está cargado).
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
Calcule las 5 probabilidades de clase principales de cada video usando un modelo entrenado (~/data/results/save_200.pth.)
Tenga en cuenta que inference_batch_size
debe ser pequeño porque el tamaño del lote real se calcula mediante 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
Evalúe la precisión de video principal de un resultado de reconocimiento (~/data/results/val.json).
python -m util_scripts.eval_accuracy ~ /data/kinetics.json ~ /data/results/val.json --subset val -k 1 --ignore
Ajuste las capas fc de un modelo previamente entrenado (~/data/models/resnet-50-kinetics.pth) en UCF-101.
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