基于temporal segment networks的行为识别

来源:互联网 发布:warframe淘宝白金 编辑:程序博客网 时间:2024/06/08 11:26

引言:根据ActionRecognize发展路线,最初是VGG组提出的Two-Stream Network实现,再他们之后,Limin Wang提出了VGGNet完成,加深了网络的深度,并提出防止过拟合的方法。得到了较好的效果。在ECCV2016,Limin Wang 提出了一种新的网络结构,即对双流网络的改进,称之为Temporal Segment Networks。 这篇博客主要讲述两个方面:1,介绍BatchNormalization。2,介绍TSN网络以及训练方法。

Batch Normalization:

  • 起因
    网络在训练的过程,由于输入数据分布不一致,学习过程中网络参数会由于输入数据分布而变动,训练变得较为困难,这种现象也称之为 internal covariate shift。

  • 解决方案
    由于起因在于输入数据分布不一致,因此,需要对输入数据进行处理。对mini-batch进行归一化。 归一化公式(1.1)

x^=x(k)E[x(k)]Var(x(k)) (1.1)

BN层输出结果如式(1.2)

y(k)=γ(k)x^(k)+β(k)

其中γβ均属于可学习的参数,使bn层得到的输出更适用于网络。
BN用于卷积神经网络时,将BN层放置于卷积层之后,RELU/Sigmoid之前。因为如果放置于卷积层之前,也就是非线性单元输出之后,导致训练过程中,非线性单元的分布变化大,卷积层之后更稳定。
减少了internal covariate shift,网络训练速度加快。

  • BN的训练特性
    1. 加入BN层可以使用更高的学习率,一定程度上减少了反向梯度过大的问题。
    2. Regularize the model,可以在一定程度上替代Dropout层,提升模型的泛化能力。

TSN网络

  • 起因:先前的two-stream network对于视频的信息利用率低。original two-stream network 在train spatial network 使用一张RGB图,以及L=10的stacked optical flow。这明显是不足以代表整段视频,因此,TSN提出了一种新的方法使用该网络结构,通过temporal segment实现对video分段,增加video利用率

  • 方法:将一段video分割成等间隔的3段(segments),每一段中随机取一张RGB图和L=5的optical flow image。、

对于RGB图,三张RGB图stack成一张9通道的图片,经过图像预处理及图像扩增之后,再reshape成连续的三通道图片输入至网络中,相当于增加了网络的batchsize,但三张图片是连续的,在FC层输出之后,再将loss 的形状reshape为3个一组的形式。reshape_param { shape { dim: [-1, 1, 3, 101] } },此三个loss便是三张rgb图经过网络分别得到的loss,再对loss经过Average Pooling,得到最终的spatial loss。
光流图同上。

网络图如下
这里写图片描述
三个spatial/temporal convnet共享权重,实质上是三张rgb/optical flow输入的是同一个网络,类似于batchsize扩大了3倍,输入到网络中,再最终的FC层之后,分离各个图片的输出,并将三个图片的loss融合在一起。
最终将temporal 和 spatial融合在一起,得到最终的loss,经过softmax归一化,判断出video所属的label。

为了进一步提升准确率,作者不惜代价,居然加入了warped optical flow,虽然有了很小的提升,但是,俗话说,这种方法只能说是:伤敌一千自损八百。只有百分之0.2左右的提升,却需要重新训练warped optical flow网络。
关于warped optical flow,是来处理相机位移带来的水平方向位移的影响。
因此,最终的准确率是rgb+optical flow + warped optical flow的结合。

实际上,只有训练时采用TSN。训练是单独对spatial 和 temporal训练,两者的结合存在于测试之中。因此,该方法还有巨大的提升空间,也就是在训练中对spatial 和 temporal结合(貌似这种方法在CVPR2017中已经使用了)。

测试中,为了保持与其他方法一致的评判标准,并未使用TSN,而是取25帧图像进行评估。最终对Temporal和spatial进行结合,达到了较高的准确率。

该实现采用的网络是bn-inception,该网络是对Googlenet的改进,在BN的论文中提出。
由于数据集不够,网络还挺深,于是防止过拟合就成了当务之急。提出的三个过拟合方法:
1. Cross Modality Pre-training:很老套,用原始的ImageNet训练的bn-inception模型初始化(包含optical flow)
2. 数据扩增:与VGG一模一样,在上一篇论文有提及。但是实际代码中,crop了更多的图片,不只是四个角和中心,还有中上,中下,中左,中右。一共九块来随机采样。
3. BN层的修改:BN层将batch数据转换成符合标准的高斯分布,加速收敛,但是会有过拟合的风险。因此,论文中选择不更新mean和variable。这种修改叫做Partial BN。并且在fc层前额外增加了dropout层防止过拟合。
另外,论文中再融合了RGB-difference发现并不好,因此RGB-difference不稳定。

阅读全文
0 0