Skip to content

Latest commit

 

History

History
168 lines (111 loc) · 7.23 KB

File metadata and controls

168 lines (111 loc) · 7.23 KB

English | 简体中文

PP-TSM视频分类模型


内容

模型简介

我们对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数据准备

模型训练

Kinetics-400数据集训练

下载并添加预训练模型

下载图像蒸馏预训练模型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: 将路径填写到此处

开始训练

  • 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
  • 另外您可以自定义修改参数配置,以达到在不同的数据集上进行训练/测试的目的,配置文件命名方式为模型_数据集_文件格式_数据格式_采样方式.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
  • Uniform采样: 时序上,等分成num_seg段,每段中间位置采样1帧;空间上,中心位置采样。1个视频共采样1个clips。

  • Dense采样:时序上,先等分成10个片段,每段从起始位置开始,以64//num_seg为间隔连续采样num_seg帧;空间上,左中,中心,右中3个位置采样。1个视频共采样10*3=30个clips。

  • distill为True表示使用了蒸馏所得的预训练模型,具体蒸馏方案参考ppTSM蒸馏方案

模型推理

导出inference模型

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

参考论文