English | 简体中文
我们对TSM模型进行了改进,提出了高精度2D实用视频分类模型PP-TSM。在不增加参数量和计算量的情况下,在UCF-101、Kinetics-400等数据集上精度显著超过原文,在Kinetics-400数据集上的精度如下表所示。模型优化解析请参考PP-TSM模型精度优化Tricks详解。
Version | Sampling method | Top1 |
---|---|---|
Ours (distill) | Dense | 76.16 |
Ours | Dense | 75.69 |
mmaction2 | Dense | 74.55 |
mit-han-lab | Dense | 74.1 |
Version | Sampling method | Top1 |
---|---|---|
Ours (distill) | Uniform | 75.11 |
Ours | Uniform | 74.54 |
mmaction2 | Uniform | 71.90 |
mit-han-lab | Uniform | 71.16 |
K400数据下载及准备请参考Kinetics-400数据准备
UCF101数据下载及准备请参考UCF-101数据准备
下载图像蒸馏预训练模型ResNet50_vd_ssld_v2.pdparams作为Backbone初始化参数,或是通过命令行下载
wget https://videotag.bj.bcebos.com/PaddleVideo/PretrainModel/ResNet50_vd_ssld_v2_pretrained.pdparams
并将文件路径添加到配置文件中的MODEL.framework.backbone.pretrained
字段,如下:
MODEL:
framework: "Recognizer2D"
backbone:
name: "ResNetTweaksTSM"
pretrained: 将路径填写到此处
- 如果使用ResNet101作为Backbone进行训练,请下载预训练模型ResNet101_vd_ssld_pretrained.pdparams.
- Kinetics400数据集使用8卡训练,frames格式数据,uniform训练方式的启动命令如下:
python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7" --log_dir=log_pptsm main.py --validate -c configs/recognition/pptsm/pptsm_k400_frames_uniform.yaml
- Kinetics400数据集使用8卡训练,videos格式数据,uniform训练方式的启动命令如下:
python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7" --log_dir=log_pptsm main.py --validate -c configs/recognition/pptsm/pptsm_k400_videos_uniform.yaml
- 开启amp混合精度训练,可加速训练过程,其训练启动命令如下:
export FLAGS_conv_workspace_size_limit=800 #MB
export FLAGS_cudnn_exhaustive_search=1
export FLAGS_cudnn_batchnorm_spatial_persistent=1
python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7" --log_dir=log_pptsm main.py --amp --validate -c configs/recognition/pptsm/pptsm_k400_frames_uniform.yaml
- Kinetics400数据集frames格式数据,dense训练方式的启动命令如下:
python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7" --log_dir=log_pptsm main.py --validate -c configs/recognition/pptsm/pptsm_k400_frames_dense.yaml
- Kinetics400数据集frames格式数据,dense训练方式,ResNet101作为Backbone的启动命令如下:
python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7" --log_dir=log_pptsm main.py --validate -c configs/recognition/pptsm/pptsm_k400_frames_dense_r101.yaml
- 另外您可以自定义修改参数配置,以达到在不同的数据集上进行训练/测试的目的,配置文件命名方式为
模型_数据集_文件格式_数据格式_采样方式.yaml
,参数用法请参考config。
- 对Uniform采样方式,PP-TSM模型在训练时同步进行测试,您可以通过在训练日志中查找关键字
best
获取模型测试精度,日志示例如下:
Already save the best model (top1 acc)0.7454
- 对dense采样方式,需单独运行测试代码,其启动命令如下:
python3 main.py --test -c configs/recognition/pptsm/pptsm_k400_frames_dense.yaml -w output/ppTSM/ppTSM_best.pdparams
- 通过
-c
参数指定配置文件,通过-w
指定权重存放路径进行模型测试。
Kinetics400数据集测试精度:
backbone | distill | Sampling method | num_seg | target_size | Top-1 | checkpoints |
---|---|---|---|---|---|---|
ResNet50 | False | Uniform | 8 | 224 | 74.54 | ppTSM_k400_uniform.pdparams |
ResNet50 | False | Dense | 8 | 224 | 75.69 | ppTSM_k400_dense.pdparams |
ResNet50 | True | Uniform | 8 | 224 | 75.11 | ppTSM_k400_uniform_distill.pdparams |
ResNet50 | True | Dense | 8 | 224 | 76.16 | ppTSM_k400_dense_distill.pdparams |
ResNet101 | True | Uniform | 8 | 224 | 76.35 | ppTSM_k400_uniform_distill_r101.pdparams |
ResNet101 | False | Dense | 8 | 224 | 77.15 | ppTSM_k400_dense_r101.pdparams |
-
Uniform采样: 时序上,等分成
num_seg
段,每段中间位置采样1帧;空间上,中心位置采样。1个视频共采样1个clips。 -
Dense采样:时序上,先等分成10个片段,每段从起始位置开始,以
64//num_seg
为间隔连续采样num_seg
帧;空间上,左中,中心,右中3个位置采样。1个视频共采样10*3=30
个clips。 -
distill为
True
表示使用了蒸馏所得的预训练模型。
python3.7 tools/export_model.py -c configs/recognition/pptsm/pptsm_k400_frames_uniform.yaml \
-p data/ppTSM_k400_uniform.pdparams \
-o inference/ppTSM
上述命令将生成预测所需的模型结构文件ppTSM.pdmodel
和模型权重文件ppTSM.pdiparams
。
- 各参数含义可参考模型推理方法
python3.7 tools/predict.py --input_file data/example.avi \
--config configs/recognition/pptsm/pptsm_k400_frames_uniform.yaml \
--model_file inference/ppTSM/ppTSM.pdmodel \
--params_file inference/ppTSM/ppTSM.pdiparams \
--use_gpu=True \
--use_tensorrt=False
输出示例如下:
Current video file: data/example.avi
top-1 class: 5
top-1 score: 0.9907386302947998
可以看到,使用在Kinetics-400上训练好的PP-TSM模型对data/example.avi
进行预测,输出的top1类别id为5
,置信度为0.99。通过查阅类别id与名称对应表data/k400/Kinetics-400_label_list.txt
,可知预测类别名称为archery
。
- TSM: Temporal Shift Module for Efficient Video Understanding, Ji Lin, Chuang Gan, Song Han
- Distilling the Knowledge in a Neural Network, Geoffrey Hinton, Oriol Vinyals, Jeff Dean