基于VGG-Net的人体行为识别(Action Recognition)

Abstract:

本文对论文’Towards Good Practices for Very Deep Two-Stream ConvNets’的复现。该论文采用了two-stream的卷积方法,该方法的鼻祖是VGG团队,该团队的论文是14年的’Two-Stream Convolutional Networks for Action Recognition in Videos’ ,从此开创了新的一派,可以战胜C3D一派。Yuanjun Xiong的VGG未防止数据量太小导致过拟合,实现two-stream的创新点如下:

  • 采用了ImageNet预训练的模型进行fine-tune。

  • 更小的学习率

  • 新的数据增广的方式。

  • 使用了多GPU并行训练的策略。

网络特点

  • 该网络首先将视频转换成rgb和灰度的光流图存储起,因此,输入网络的不是视频,而是视频提前转好的图片。
  • 采用ImageNet的model进行finetune。当在spatial Stream时,输入RGB图,RGB图的选取方法是:在视频中随机抽取一帧作为RGB图。因此,ImageNet训练的model可以直接在spatial stream使用。而temporal stream,由于输入的是光流图,而输入的光流图在视频中得到的光流图集合中,随机选取某一帧光流图作为第一张图,而训练的图是10帧光流图的堆叠,(有x方向和y方向,通道数为1*2*10=20),temporal stream第一层卷积的参数量与spatial stream不同(20 vs 3)。因此,对caffemodel进行修改:将第一层卷积各通道的参数取平均,并复制20channel。
    补充:得到的光流图的取值范围较小,因此,将取值范围其拓展至【0,255】,即灰度图。
    在14年的论文中,仅仅spatial network采用了pre_caffemodel,temporal network是随机初始化。
  • 更小的学习率:较’Two-Stream Convolutional Networks for Action Recognition in
    Videos’ ,学习率小得多。原因在于均在fine-tune,而不是随机初始化。

  • 数据增广:由于video转换的rgb和optical flow图相似度高,若不数据增广,容易导致数据量在迭代次数增多时,相似的数据集再被输入进去训练,从而导致过拟合

    • 图片不再随机crop,该方法crop四个角落和一个中心。原因在于:若random crop,crop的图片更趋向于中心,loss降低迅速,容易过拟合。
    • 多尺度crop,固定图片输入为250*340,长和宽随机crop为{256,224,192,168},再resize成224*224。这种方法不仅仅是multi-scale的数据增广,同样也是aspect ratio的数据增广。
    • 结合上述两种方式,其实是先进行scale jittering,再resize成224*224,再进行fix_crop,在resize成224*224
    • drop out数字增大,有利于避免过拟合。
  • 多GPU训练:
    • 使用4块GPU,运用了onpenmpi,实现了运行加速。在全连接之前,分别在四块GPU卡运行,当到达全连接层时,将数据整合在一起再输入至全连接层。
  • 网络测试时,选用的数据集时UCF101,使用UCF101 split1进行训练和测试,train.txt来训练,val用来验证和test。选取视频中等间隔的25帧图像。测试图片进一步进行数据扩增,获得了分割的四张角落和一个中心的图片以及镜像图,故每一帧图片均扩增了10张图。光流图同理。最终测试则是对这扩增图的概率取平均。单独训练temporal networks和spatial networks,最终在最后一层全连接层使用加权和,spatial的权重为1,temporal的权重为2。
    补充:test的数据扩充跟train的数据扩充不同,train仅仅从训练图中选取一定数量的图,扩增图片只是增加了选择的多样性,而不是将所有扩增的图片均输入到网络中
  • 光流法的选择:在移植网络的过程中,出现了一种bug: spatial network的准确率与论文一致,而temporal network的准确率一直较低,经过排查,发现是光流图的原因。不同的算法产生的光流图的效果不同。本论文采用TVL1光流算法,而我错误的使用了farn光流算法。farn的光流算法产生的光流图中噪声多,而TVL1的光流图噪声则很少。
    两者的光流图对比如下所示:
Farn 光流图 Tvl1光流图
基于VGG-Net的人体行为识别(Action Recognition)_第1张图片 基于VGG-Net的人体行为识别(Action Recognition)_第2张图片

通过对比,可以看出Tvl1光流图的噪声少,受相机运动影响小,因而准确率高
经过训练后,在UCF101测试,得到的准确率如下表所示

Networks training Val Accuracy test
spatial 77% 80.12%
temporal(farn optical flow) 72% 82.5%
temporal(tvl1 optical flow) 74.17% 86.07%
temporal(farn)+spatial 86.28%
temporal(tvl1)+spatial 89.5%

最终:

该论文作者已经将代码已经开源,代码网址为(https://github.com/yjxiong/caffe)
该代码中在复现的过程中,存在许多细节上的错误,也有不完整的地方。我亲自在ubuntu16.04LTS+cuda8.0+caffe实验通过,使用了四块1080Ti的显卡,github源码:https://github.com/KaiJin1995/VGG-ActionRecognition

仍存在的问题:
准确率依旧不达标,跟论文中的90.9%相比,少了1.4个百分点,正在思考可能存在的问题,若解决,会回来更新。

————————————————————————————————————————————
最近的进展:已经将准确率提升到了90%:主要进行了如下两个操作:第一个操作:修改测试代码,其频域测试代码有微小的漏洞,当修改后,综合测试可以提升近0.15%。第二个操作:重新训练spatial nets,重新训练后,测试spatial net 的代码可以达到80.4%,综合temporal 和spatial,可以得到90%准确率

你可能感兴趣的:(行为识别,深度学习)