1 Star 0 Fork 11

TYLove516 / PaddleVideo

forked from PaddlePaddle / PaddleVideo 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
pp-tsn.md 6.58 KB
一键复制 编辑 原始数据 按行查看 历史
huangjun12 提交于 2022-05-25 07:18 . init commit

English | 简体中文

PP-TSN视频分类模型

内容

模型简介

我们对TSN模型进行了改进,得到了更高精度的2D实用视频分类模型PP-TSN。在不增加参数量和计算量的情况下,在UCF-101、Kinetics-400等数据集上精度显著超过原版,在Kinetics-400数据集上的精度如下表所示。

Version Top1
Ours (distill) 75.06
Ours 73.68
mmaction2 71.80

数据准备

K400数据下载及准备请参考Kinetics-400数据准备

UCF101数据下载及准备请参考UCF-101数据准备

模型训练

Kinetics-400数据集训练

下载并添加预训练模型

  1. 下载图像蒸馏预训练模型ResNet50_vd_ssld_v2.pdparams作为Backbone初始化参数,或通过wget命令下载

    wget https://videotag.bj.bcebos.com/PaddleVideo/PretrainModel/ResNet50_vd_ssld_v2_pretrained.pdparams
  2. 打开PaddleVideo/configs/recognition/pptsn/pptsn_k400_frames.yaml,将下载好的权重存放路径填写到下方pretrained:之后

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

开始训练

  • Kinetics400数据集使用8卡训练,训练方式的启动命令如下:

    # frames数据格式
    python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7"  --log_dir=log_pptsn  main.py  --validate -c configs/recognition/pptsn/pptsn_k400_frames.yaml
    
    # videos数据格式
    python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7"  --log_dir=log_pptsn  main.py  --validate -c configs/recognition/pptsn/pptsn_k400_videos.yaml
  • 开启amp混合精度训练,可加速训练过程,其训练启动命令如下:

    export FLAGS_conv_workspace_size_limit=800 # MB
    export FLAGS_cudnn_exhaustive_search=1
    export FLAGS_cudnn_batchnorm_spatial_persistent=1
    
    # frames数据格式
    python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7"  --log_dir=log_pptsn  main.py --amp --validate -c configs/recognition/pptsn/pptsn_k400_frames.yaml
    
    # videos数据格式
    python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7"  --log_dir=log_pptsn  main.py --amp --validate -c configs/recognition/pptsn/pptsn_k400_videos.yaml
  • 另外您可以自定义修改参数配置,以达到在不同的数据集上进行训练/测试的目的,建议配置文件的命名方式为模型_数据集名称_文件格式_数据格式_采样方式.yaml,参数用法请参考config

模型测试

  • PP-TSN模型在训练时同步进行验证,您可以通过在训练日志中查找关键字best获取模型测试精度,日志示例如下:

    Already save the best model (top1 acc)0.7004
  • 由于PP-TSN模型测试模式的采样方式是速度稍慢但精度高一些的TenCrop,与训练过程中验证模式采用的CenterCrop不同,所以训练日志中记录的验证指标topk Acc不代表最终的测试分数,因此在训练完成之后可以用测试模式对最好的模型进行测试获取最终的指标,命令如下:

    python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3,4,5,6,7" --log_dir=log_pptsn main.py  --test -c configs/recognition/pptsn/pptsn_k400_frames.yaml -w "output/ppTSN/ppTSN_best.pdparams"

    当测试配置采用如下参数时,在Kinetics-400的validation数据集上的测试指标如下:

    backbone Sampling method distill num_seg target_size Top-1 checkpoints
    ResNet50 TenCrop False 3 224 73.68 ppTSN_k400.pdparams
    ResNet50 TenCrop True 8 224 75.06 ppTSN_k400_8.pdparams
  • PP-TSN视频采样策略为TenCrop采样:时序上,将待输入视频均匀分成num_seg段区间,每段的中间位置采样1帧;空间上,从左上角、右上角、中心点、左下角、右下角5个子区域各采样224x224的区域,并加上水平翻转,一共得到10个采样结果。1个视频共采样1个clip。

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

模型推理

导出inference模型

python3.7 tools/export_model.py -c configs/recognition/pptsn/pptsn_k400_frames.yaml -p data/ppTSN_k400.pdparams -o inference/ppTSN

上述命令将生成预测所需的模型结构文件ppTSN.pdmodel和模型权重文件ppTSN.pdiparams以及ppTSN.pdiparams.info文件,均存放在inference/ppTSN/目录下

上述bash命令中各个参数含义可参考模型推理方法

使用预测引擎推理

python3.7 tools/predict.py --input_file data/example.avi \
                           --config configs/recognition/pptsn/pptsn_k400_frames.yaml \
                           --model_file inference/ppTSN/ppTSN.pdmodel \
                           --params_file inference/ppTSN/ppTSN.pdiparams \
                           --use_gpu=True \
                           --use_tensorrt=False

输出示例如下:

Current video file: data/example.avi
        top-1 class: 5
        top-1 score: 0.998979389667511

可以看到,使用在Kinetics-400上训练好的PP-TSN模型对data/example.avi进行预测,输出的top1类别id为5,置信度为0.99。通过查阅类别id与名称对应表data/k400/Kinetics-400_label_list.txt,可知预测类别名称为archery

参考论文

Python
1
https://gitee.com/xhd0115/PaddleVideo.git
git@gitee.com:xhd0115/PaddleVideo.git
xhd0115
PaddleVideo
PaddleVideo
master

搜索帮助