Skip to content

Latest commit

 

History

History
120 lines (76 loc) · 4.12 KB

File metadata and controls

120 lines (76 loc) · 4.12 KB

English | 简体中文

TSM视频分类模型

内容

模型介绍

Temporal Shift Module (TSM) 是当前比较受关注的模型,通过通道移动的方法在不增加任何额外参数量和计算量的情况下极大的提升了模型对于视频时间信息的利用能力,并且由于其具有轻量高效的特点,十分适合工业落地。


本代码实现的模型为基于单路RGB图像的TSM网络结构,Backbone采用ResNet-50结构。

详细内容请参考ICCV 2019年论文 TSM: Temporal Shift Module for Efficient Video Understanding

数据准备

Kinetics400数据下载及准备请参考k400数据准备

UCF101数据下载及准备请参考ucf101数据准备

模型训练

预训练模型下载

  • 加载在ImageNet1000上训练好的ResNet50权重作为Backbone初始化参数,请下载此ResNet50_pretrain.pdparams, 或是通过命令行下载
wget https://videotag.bj.bcebos.com/PaddleVideo/PretrainModel/ResNet50_pretrain.pdparams

并将路径添加到configs中backbone字段下

MODEL:
    framework: "Recognizer2D"
    backbone:
        name: "ResNet"
        pretrained: 将路径填写到此处

开始训练

通过指定不同的配置文件,可以使用不同的数据格式/数据集进行训练,UCF-101数据集使用4卡训练,frames格式数据的训练启动命令如下:

python -B -m paddle.distributed.launch --gpus="0,1,2,3"  --log_dir=log_tsm  main.py  --validate -c configs/recognition/tsm/tsm.yaml
  • 如若进行finetune,请下载PaddleVideo的已发布模型TSM.pdparams,通过--weights指定权重存放路径。

  • 您可以自定义修改参数配置,参数用法请参考config

实现细节

数据处理: 模型读取Kinetics-400数据集中的mp4数据,每条数据抽取seg_num段,每段抽取1帧图像,对每帧图像做随机增强后,缩放至target_size

训练策略:

  • 采用Momentum优化算法训练,momentum=0.9
  • l2_decay权重衰减系数为1e-4
  • 学习率在训练的总epoch数的1/3和2/3时分别做0.1倍的衰减

参数初始化coming soon

模型测试

python3 main.py --test -c configs/recognition/tsm/tsm.yaml -w output/TSM/TSM_best.pdparams
  • 指定--weights参数,下载已发布模型TSM.pdparams进行模型测试

当取如下参数时,在Kinetics400的validation数据集下评估精度如下:

seg_num target_size Top-1
8 224 0.7086

模型推理

导出inference模型

python3 tools/export_model.py -c configs/recognition/tsm/tsm.yaml \
                              -p output/TSM/TSM_best.pdparams \
                              -o inference/TSM

上述命令将生成预测所需的模型结构文件TSM.pdmodel和模型权重文件TSM.pdiparams

使用预测引擎推理

python3 tools/predict.py --video_file data/example.avi \
                         --model_file inference/TSM/TSM.pdmodel \
                         --params_file inference/TSM/TSM.pdiparams \
                         --use_gpu=True \
                         --use_tensorrt=False

参考论文