Publicamos um artigo no arXiv.
Hirokatsu Kataoka, Tenga Wakamiya, Kensho Hara e Yutaka Satoh,
"Os conjuntos de dados em megaescala melhorariam ainda mais as CNNs 3D espaço-temporais",
Pré-impressão do arXiv, arXiv:2004.04968, 2020.
Carregamos os modelos pré-treinados descritos neste artigo, incluindo ResNet-50 pré-treinado no conjunto de dados combinado com Kinetics-700 e Moments in Time.
Atualizamos significativamente nossos scripts. Se você quiser usar versões mais antigas para reproduzir nosso artigo CVPR2018, você deve usar os scripts do branch CVPR2018.
Esta atualização inclui o seguinte:
Este é o código PyTorch para os seguintes artigos:
Hirokatsu Kataoka, Tenga Wakamiya, Kensho Hara e Yutaka Satoh,
"Os conjuntos de dados em megaescala melhorariam ainda mais as CNNs 3D espaço-temporais",
Pré-impressão do arXiv, arXiv:2004.04968, 2020.
Kensho Hara, Hirokatsu Kataoka e Yutaka Satoh,
"Rumo a boas práticas para reconhecimento de ações com convoluções 3D espaçotemporais",
Anais da Conferência Internacional sobre Reconhecimento de Padrões, pp. 2516-2521, 2018.
Kensho Hara, Hirokatsu Kataoka e Yutaka Satoh,
"As CNNs 3D espaçotemporais podem reconstituir a história das CNNs 2D e do ImageNet?",
Anais da Conferência IEEE sobre Visão Computacional e Reconhecimento de Padrões, pp.
Kensho Hara, Hirokatsu Kataoka e Yutaka Satoh,
"Aprendendo recursos espaço-temporais com redes residuais 3D para reconhecimento de ações",
Anais do Workshop ICCV sobre Reconhecimento de Ação, Gestos e Emoções, 2017.
Este código inclui treinamento, ajuste fino e testes em Kinetics, Moments in Time, ActivityNet, UCF-101 e HMDB-51.
Se você usar este código ou modelos pré-treinados, cite o seguinte:
@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 } ,
}
Modelos pré-treinados estão disponíveis aqui.
Todos os modelos são treinados em Kinetics-700 ( K ), Moments in Time ( M ), STAIR-Actions ( S ) ou conjuntos de dados mesclados deles ( KM , KS , MS , KMS ).
Se quiser ajustar os modelos em seu conjunto de dados, você deverá especificar as opções a seguir.
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
Modelos pré-treinados antigos ainda estão disponíveis aqui.
No entanto, algumas modificações são necessárias para usar os antigos modelos pré-treinados nos scripts atuais.
conda install pytorch torchvision cudatoolkit=10.1 -c soumith
FFmpeg, FFprobe
Pitão 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
inclui 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
inclui brush_hair_test_split1.txt, ... python -m util_scripts.hmdb51_json annotation_dir_path jpg_video_dir_path dst_json_path
Suponha que a estrutura dos diretórios de dados seja a seguinte:
~/
data/
kinetics_videos/
jpg/
.../ (directories of class names)
.../ (directories of video names)
... (jpg files)
results/
save_100.pth
kinetics.json
Confirme todas as opções.
python main.py -h
Treine ResNets-50 no conjunto de dados Kinetics-700 (700 classes) com 4 threads de CPU (para carregamento de dados).
O tamanho do lote é 128.
Salve modelos a cada 5 épocas. Todas as GPUs são usadas para o treinamento. Se você quiser fazer parte das GPUs, 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
Continue o treinamento da época 101. (~/data/results/save_100.pth está carregado.)
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 as 5 principais probabilidades de classe de cada vídeo usando um modelo treinado (~/data/results/save_200.pth.)
Observe que inference_batch_size
deve ser pequeno porque o tamanho real do lote é calculado por 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
Avalie a precisão de vídeo principal de um resultado de reconhecimento (~/data/results/val.json).
python -m util_scripts.eval_accuracy ~ /data/kinetics.json ~ /data/results/val.json --subset val -k 1 --ignore
Ajuste as camadas fc de um modelo pré-treinado (~/data/models/resnet-50-kinetics.pth) no 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