English | 简体中文
训练速度慢是视频模型训练常见的问题,PaddleVideo使用飞桨2.0的dataloader接口进行数据读取,凭借其优异的多进程加速能力,模型的训练速度可以显著增加。TSN是视频领域常用的2D模型,我们对其训练速度进行了进一步优化。基于nvidia DALI的GPU解码能力,我们对nvidia DALI进行了二次开发,实现了其均匀分段的帧采样方式,进一步提升了TSN模型的训练速度。
测试环境:
机器: Tesla v100
显存: 4卡16G
Cuda: 9.0
单卡batch_size: 32
训练速度对比如下:
加速方式 | batch耗时/s | reader耗时/s | ips:instance/sec | 加速比 |
---|---|---|---|---|
DALI | 2.083 | 1.804 | 15.36597 | 1.41x |
Dataloader: 单卡num_workers=4 | 2.943 | 2.649 | 10.87460 | base |
pytorch实现 | TODO | TODO | TODO | TODO |
我们提供docker运行环境方便您使用,基础镜像为:
huangjun12/paddlevideo:tsn_dali_cuda9_0
基于以上docker镜像创建docker容器,运行命令为:
nvidia-docker run --name tsn-DALI -v /home:/workspace --network=host -it --shm-size 64g -e NVIDIA_DRIVER_CAPABILITIES=compute,utility,video huangjun12/paddlevideo:tsn_dali_cuda9_0 /bin/bash
- docker中安装好了飞桨2.0.0-rc1版本和我们二次开发后的DALI,创建容器后您可以在docker环境中直接开始tsn模型训练,无需额外配置环境。
PaddleVide提供了在K400和UCF101两种数据集上训练TSN的训练脚本。
-
K400数据下载及准备请参考K400数据准备
-
UCF101数据下载及准备请参考UCF101数据准备
加载在ImageNet1000上训练好的ResNet50权重作为Backbone初始化参数,请下载此模型参数, 或是通过命令行下载
wget https://videotag.bj.bcebos.com/PaddleVideo/PretrainModel/ResNet50_pretrain.pdparams
并将路径添加到configs中backbone字段下
MODEL:
framework: "Recognizer2D"
backbone:
name: "ResNet"
pretrained: 将路径填写到此处
模型训练的启动命令为:
python3.7 -B -m paddle.distributed.launch --gpus="0,1,2,3" --log_dir=log_tsn main.py --train_dali -c configs/recognition/tsn/tsn_dali.yaml -o log_level="INFO"
-
通过
-c
指定模型训练参数配置文件,模型及训练参数配置请参考配置文件configs/recognition/tsn/tsn_dali.yaml
。 -
如若进行finetune,请下载PaddleVideo的已发布模型comming soon, 通过
--weights
指定权重存放路径可进行模型finetune。 -
您可以自定义修改参数配置,参数用法请参考config。
模型测试方法请参考TSN模型使用文档模型测试部分
模型推理方法请参考TSN模型使用文档模型推理部分
- Temporal Segment Networks: Towards Good Practices for Deep Action Recognition, Limin Wang, Yuanjun Xiong, Zhe Wang, Yu Qiao, Dahua Lin, Xiaoou Tang, Luc Van Gool