飞桨Paddlepaddle复现顶会论文心得

       Paddle相对于Tensorflow和Pytorch而言是一个较新的,还需要成长和积累用户的深度学习框架,需要我们这些国人多多支持,一起发展它。这次百度给予了一个了解Paddle的机会,提供了大量AIStudio的算力来支持我们复现顶会论文的工作。因为我想着后续研究视频识别,因此选择了TPN进行复现。

任务:TPN

        TPN是视频识别方向的任务,在数据训练方面比较苛刻,官方要求Kinetics400数据集的复现精度能达到77%,但是由于数据集比较大,我在复现时只能以UCF101为复现DEMO,慢慢复现个中的原理。但TPN的源码比较模块化,使用了mmaction来进行复现,因此比较难。我只能依靠原有的视频分类作业进行复现。总的而言是进行了以下的步骤:

1. 实现数据的读取

        原有作业是将单个视频数据分成n份,然后每一份都取一张图像作为该部分的代表,以此进行深度网络的输入。但是TPN是使用NxS的形式,N指代的是取N张图,S指代的是间隔,这意味着网络的输入是取一个NxS的连续区间,然后拿出间隔S的N张图像作为网络输入,TPN论文有试过8x8、16x4、32x2,发现32x2的结果是最好的,因此我也根据这个来实现了一个简约版的。但是它代码里面有一个random shift的模块,没读懂它的原文,还在慢慢想着怎么做。

2. 实现半模块化设计

        TPN的代码是构建了模块化的方式进行调试网络结构实现视频识别,其中将网络结构分为了多个模块:骨架模块backbone,脖子模块neck,时间空间融合模块Spatial_Temporal_Method,一致性组合模块segmental_consensuses和分类模块cls_head。如何设定是通过mmcv的config模块读取configs中的设定构建网络结构。为了实现相似的结果,我改动了作业的代码实现了相近的config读取模块,读取设定。然后构建了一个build_model.py,用于构建TPN的网络结构。

飞桨Paddlepaddle复现顶会论文心得

3. 实现Paddlepaddle AIStudio的多GPU训练

https://paddlepaddle.org.cn/documentation/docs/zh/beginners_guide/basic_concept/dygraph/DyGraph.html#id10

AIStudio提供了脚本任务,可用来实现多GPU训练。但Paddle的多GPU训练比Pytorch的要难用啊。Pytorch如果是单机多卡,可以使用data_parallel就实现简单的多GPU训练了,但Paddle的多GPU训练,必须构建多个进程进行啊。

由于AIStudio多GPU的训练很耗费算力,还在弄着。。