您的位置:首页 > 大数据 > 人工智能

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

2017-10-19 12:03 309 查看

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光流图


通过对比,可以看出Tvl1光流图的噪声少,受相机运动影响小,因而准确率高

经过训练后,在UCF101测试,得到的准确率如下表所示

Networkstraining Val Accuracytest
spatial77%80.12%
temporal(farn optical flow)72%82.5%
temporal(tvl1 optical flow)74.17%86.07%
temporal(farn)+spatial86.28%
temporal(tvl1)+spatial89.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%准确率
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐