action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结

基于2D图像和视频的行为识别

1. two-stream related(双流方法)

1)Two-stream convolutional networks for action recognition in videos

论文:https://arxiv.org/abs/1406.2199
未公开代码
年份:2014

这篇论文是双流方法的开山之作。
论文所提出的网络使用以单帧RGB作为输入的CNN来处理空间维度的信息,使用以多帧密度光流场作为输入的CNN来处理时间维度的信息。并通过多任务训练的方法将两个行为分类的数据集(UCF101与HMDB)联合起来,去除过拟合进而获得更好效果。

贡献有三点:
1)提出结合时间和空间网络的双流ConvNet网络结构;
2)证明在缺少训练集的情况下,ConvNet在多帧密集光流中依然能取得非常好的训练效果;
3)实验表明,应用于两个不同的识别训练集,这种多任务学习方法不仅可以用于增加训练数据,还可以提升两者的性能。

视频能分成空间域和时间域,空间域以单帧的形式携带有关视频中描绘的场景和对象的信息,时间域以多帧之间的动作变化,传达观察者(相机)和物体的运动。

具体的双流结构如下图所示。将视频识别架构分为两个流,每一个流(时间流,空间流)使用deep ConvNet,softmax函数后紧跟late fusion。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Spatial stream ConvNet:
空间流ConvNet对单个视频帧进行操作。因为一些行为与特定的场景和物体有很强的关联,所以可以有效地从静止图像中进行行为识别。 由于CNN网络已经是一个强大的图像识别算法,所以可以基于大规模图片的识别算法构建视频识别网络,还可以利用现有的图像分类数据集上预训练网络。

Optical flow ConvNets:
不同于普通的CNN网络,时间流ConvNet的输入需要是通过在几个连续帧之间堆叠光流位移场而形成的。这种输入带有视频帧之间的动作特征,使得识别过程变得更加容易(不需要网络再隐式估计动作)

论文在介绍光流位移场时,引入了光流叠加和轨迹叠加的两种表示方式的比较。下左图是Optical flow stacking;下右图是Trajectory stacking。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Optical flow stacking:
光流信息可以被看作是连续帧之间的位移矢量场,用????_???? (????,????)表示某帧t上的一点(u,v)变化到下一帧t+1相应的位置时的位移矢量的变化。????_????^???? 和????_????^???? 分别表示位移矢量的水平和垂直分量,如下图所示
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
为了显示一系列帧之间的动作变化,堆叠L个连续帧,计算得到相应的光流矢量场的水平和垂直两个分量的光流信息。这样对于视频数据输入到时间流的每一帧来说,就会产生2L个输入通道输入网络。每个通道的表示形式如下公式所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Trajectory stacking:
光流矢量场,是在不同几帧的相同位置进行采样;而轨迹堆叠是沿着动作的轨迹进行采样。如左上图的右图所示。也将轨迹矢量分成水平和垂直两个分量,并堆叠L个连续帧,则时间流网络的输入可以表示为下式:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
考虑到光流的时序有可能是正向,也有可能是反向。所以这里设置为双向光流,即对于某一帧,堆叠前L/2帧和后L/2帧光流信息,总共仍保持2L个输入通道。
并且在这里不考虑相机移动带来的影响。

Multi-task learning:
由于temporal ConvNet需要在视频数据集上训练,但现有的数据集UCF-101 和 HMDB-51上的视频很少。为了减少过拟合,考虑将这两个数据集组合成一个。一种更加可靠的方法是基于多任务学习的方式进行数据集的合并。

文中的temporal ConvNet网络结构是,在最后全连接层前有两个softmax层,两个softmax分别计算在UCF-101 和 HMDB-51学习的分数,各自有自己的损失函数,整个网络总的损失函数就是两个不同损失函数的和。网络的权值由反向传播计算得到。

Implementation details:
1)ConvNets configuration
网络结构类似于CNN-M-2048;全部的隐藏层**函数使用ReLU;时间流ConvNet和空间流ConvNet唯一不同的配置是去除了空间流ConvNet的第二正则化层,来减少内存开销。

2)Training
网络的权重通过学习率为0.9的mini-batch stochastic gradient descent方法进行学习。在每次迭代中,通过对256个训练视频(均匀地跨越类)进行采样来构建小批量的256个样本,从每个训练视频中随机选择单个帧。在两个网络学习的过程会根据迭代次数的增加,减小学习率。

3)这里是基于Caffe toolbox开发;光流数据是使用现有的GPU实现的opencv工具箱计算得到;在训练前预先计算好光流数据;将光流的水平和垂直分量线性标准化到[0,255]范围内,并使用jpeg进行压缩,这使得UCF-101数据集的光流数据大小从1.5TB减少到27GB。

Evaluation:
1)Spatial ConvNets
这里考虑通过三种方法得到性能指标来评价空间流CNN的表现和选择训练方案:i) 在UCF-101上从头开始完整训练;i) 空间流CNN先在ILSVRC-2012上进行预培训,然后在UCF-101数据集上进行微调;iii) 保留在ILSVRC-2012上预训练的网络参数,仅仅训练最后一层(分类层)。同时这里考虑两个不同的dropout regularisation ratio:0.5和0.9。实验结果如下表所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
分析得:单独在UCF-101数据集上训练,得到的网络存在过拟合现象;经过预训练的网络有效抑制了过拟合;经过预训练后,只在分类层进行训练的训练方法,比起预训练后微调整个网络参数的训练方法得到的结果更加优异。所以接下来的实验都采用第(iii)方法训练Spatial ConvNets。

2)Temporal ConvNets
在这里,暂时还不考虑多数据集学习带来的影响。主要是在UCF-101数据集上单独学习,来考虑了以下几点的选择:i)测试了两种堆叠的帧数量5和10,来选择最优;ii)比较光流场堆叠和轨迹堆叠的效果,来选择最优;iii)mean displacement subtraction的影响;iv)使用双向(正负)光流信息的效果。这里设置dropout ratio为0.9来提高网络的学习效率。实验结果如下表所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
分析得:多帧堆叠光流信息比堆叠一帧的光流信息的效果有明显提高;将堆叠帧数从5提高到10,效果的提升较少,所以在接下来的实验中固定堆叠10帧;mean subtraction对结果提升很大,它能减少两帧之间全局动作的影响,在接下来的实验中,默认设置mean subtraction;光流堆叠和轨迹堆叠的效果差不多,光流堆叠稍微更好一点;利用了双向光流的结果比非双向光流的结果有小的提升;对比spatial ConvNet和temporal ConvNet训练的情况,空间流的识别准确率远远比不上时间流,由此得出多帧信息对于行为识别的重要性。

3)Multi-task learning of temporal ConvNets
在这里评估了以下几种不同提升HMDB-51训练集大小的方法,以及训练方案:i)在UCF-101上预训练后,在HMDB-51上对网络参数进行微调;ii)人工从UCF-101数据集中选取与HMDB-51中没有交叉的78个类出来;iii)基于UCF-101和HMDB-51两个数据集,利用多任务学习,学习整个网络参数。实验结果如下表所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
分析得:基于两个数据集得多任务学习得到得效果最好,这种训练方案可以让训练过程更加有效得挖掘可以利用的所有训练数据。
这里考虑的是在HMDB-51数据集的基础上利用多任务学习联合UCF-101数据集训练。作者还在UCF-101数据集基础上利用多任务学习联合HMDB-51数据集训练,得到的准确度为81.5%。

4)Two-stream ConvNets
在这里评估如何将双流结构模型组合起来。采用两种方法来融合两个流最后的softmax层输出的分数:平均值和线性SVM。实验结果如下表所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
分析得:时间流和空间流两个网络是有互补的效果,融合以后相较于原先独立的两个网络在识别准确率上都有很大的提升;利用SVM来融合softmax的分数要比用平均的方法得到的效果更好;利用双向光流信息在网络融合时效果较差;利用多任务学习得到的时间流,要比单独一个数据集训练并融合了空间流的网络,表现得更好。

5)Comparison with the state of the art
这里整体的网络结构:
i)空间流网络:先在ILSVRC数据集上预训练,在UCF或HDMB数据集上对最后一个分类层进行训练;
ii)时间流网络:利用多任务学习在UCF和HMDB两个数据集上训练,输入是利用有mean subtraction操作的单向光流信息堆叠得到的10通道光流数据;
iii)两个网络最后的softmax分数采用平均或SVM融合。比较如下表所示。
可以看出这篇文章中提出的双流结构的行为识别网络在当时是state of the art。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
可以提升的地方:
i)将网络在更大的数据集上进行训练,由于数据量巨大,有一定的挑战;
ii)有些先进的好方法没有在这个双流网络中使用,例如 local feature pooling over spatio-temporal tubes
Iii)另一个可以的改进的地方是对相机运动的明确处理,在本文中,通过平均位移减法来补偿,简化了这个问题的处理。

2)Convolutional Two-Stream Network Fusion for Video Action Recognition

论文:https://arxiv.org/abs/1604.06573
代码:https://github.com/feichtenhofer/twostreamfusion
年份:2016

这一篇论文所论述的是在上一篇论文提出的双流方法的基础上,对相应存在的问题进行的改进。

通过实验,得出以下三个结论:
1)相比在最后的Softmax层融合,在之前的卷积层融合既能够提升性能,又能节省大量参数数目;
2)在最后一个卷积层融合(relu5)的性能是最好的,如果再配合最后一个全连接层融合,性能还能再提升一点;
3)在融合后使用pool 3d代替代替pool 2d能更进一步地提高性能。

当时最好的双流网络,也存在2个待解决的问题:
1)双流网络无法学习到时间特征和空间特征的像素间的关系。可以理解为,空间特征可以学习到物体是什么,例如手臂、躯干、腿等,时间特征可以学习到物体在做什么运动,例如挥动、平移、旋转等。而手臂挥动和腿挥动明显是不同的动作,躯干平移和躯干旋转也是不同的动作。换言之,对应特定的区域,将空间特征和时间特征结合起来考虑,能为动作识别提供更多线索,也就有希望提升网络的表现;
2) 双流网络对时间维度的利用很有限,空间网络只用了一帧,时间网络只用了10帧

针对左边叙述的两个问题,文中对应地提出两种解决方法:
1)空间融合:在隐藏层中的某个层对两个网络进行融合(如下Figure 2),并且提出了多种融合方式;
2)时间融合:提出用Conv3D和Pool3D提取时间维度的特征,并在时间维度上进行“融合”(如下Figure 3)。

action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Spatial fusion:
(1)融合方式讨论
融合层有两个输入,一个输出。????_????????∈????(????×????×????),代表空间网络的输入, ????_????????∈????(????×????×????),代表时间网络的输入,y代表融合层的输出。讨论的融合方式的汇总如由下图所示。其中,cat用来拼接矩阵,*代表卷积操作,⊗代表矩阵的外积。
下表显示的是,在以每个包含五个卷积层和三个全连接层的两个vgg-m-2048结构(上一篇论文一样的结构)的情况下,用不同的融合方法,对与网络结构的层数和参数的影响。
简单分析得:比起上一篇论文提及的对于Softmax层后融合,在两个流的最后卷积层之后进行融合,Max-,Sum和Conv-融合方法都可以减少将近一半的参数数量。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(2)融合位置讨论
如下表所示,分析得:1)早融合:在relu5卷积层之前融合,准确度不高;2)早融合加多融合:准确度不高;3)晚融合(relu5)和多融合(relu5+fc8)效果最好,但是后者多融合训练参数大致多一倍。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Temporal fusion:
融合方法讨论
通过将2D卷积和2D池化拓展到3D卷积和3D池化,可以提取到时间维度的特征。
实验结果如下表所示,在concat融合层之后利用3D Conv和3D Pooling代替2D卷积与池化,性能有所提升。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
网络深度的讨论:
如下表所示,将时间和空间流上的CNN网络,用更深的VGG-16结构代替上一篇论文中用到的VGG-M-2048结构,在空间流和时间流上,都有相应的性能提升。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Proposed architecture:
本文中所提出的网络结构如下图所示(更加具体的可见 http://dgschwend.github.io/netscope/#/gist/9b544da58def3b9611c4d333418f4e80 )。主要是在最后一个卷积层的ReLU之后添加一个concat融合层,一个Conv3D层,并且用两个pool3D层替换原先的2D的pool5。将两个网络融合至空域流,并通过3D Conv+3D Pooling转化成时空流。同时不截断时域流,在时域网络上执行3D Pooling。最终两个Loss都用于训练并进行预测。整个网络输入是上下文较长的时间尺度(t + Tτ),但每次处理的只是上下文较短的时间尺度(t±L/2)。
相比原先的双流架构,增加的参数只有conv3D中的少量参数,但通过融合的方式大大提升了整个网络的性能。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Comparison with the state-of-the-art:
与先前工作的性能比较如下表所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结

3)Temporal Segment Networks: Towards Good Practices for Deep Action Recognition

论文:https://arxiv.org/abs/1608.00859v1
代码:https://github.com/yjxiong/temporal-segment-networks
年份:2016

这一篇论文同样也是在第一篇论文提出的双流方法的基础上,对相应存在的问题进行改进,并提升性能。总结名为TSN的视频行为识别的网络框架。

问题:
1)如何设计一种有效的基于视频的网络结构能够学习捕捉视频的 长范围时间特征(整个视频的特征)的信息;
2)如何在有限的训练样本下使得卷积神经网络训练效果最优。
对策:
设计了一个Temporal Segment Network(TSN)网络结构,基于长范围时间结构。结合稀疏时间采样策略和视频等级监督方法,可以有效利用完整的动作视频来学习训练,并提升视频行为识别的性能。

(1)TSN基本信息:
之前提出的双流法网络结构主要是对于单帧信息或是堆叠了相邻几帧的信息的处理。但对于一些复杂的行为,是由一段较长时间内几个不同的阶段组成的。如果在网络训练过程中,不去尝试利用视频长范围的特征信息,会使得行为识别的准确有所损失。为了有效的利用整个完整视频来训练网络,本文提出的TSN网络结构。具体的框架如下图所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
TSN网络也是由空间流和时间流两个CNN网络结合而成的双流法结构。与先前不同的是,TSN从整个视频中稀疏采样出一系列小片段。先对小片段进行行为的初步预测,然后整合每个小片段的预测结果为最终的行为识别结果。
这里结合分段一致函数和交叉熵,得到目标函数为以下公式:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
实验中,每个视频分割为小片段的数量都是3段;利用标准反向传播算法进行参数的更新;利用随机梯度下降法(SGD)进行最优化求解。

(2)聚合函数G讨论
对于目标函数中包含的G函数,本文中评估了几种不同的聚合函数G,包括evenly averaging,maximum和weighted averaging。这里讨论了最大池化、平均池化和权平均三种g的表达形式,结果如下表。平均池化效果最好,所以最终选择此来作为聚合函数。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(3)CNN网络结构讨论
这里比较了三种深度神经网络结构:BN-Inception,GoogLeNet和VGGNet-16。实验结果如下表所示,其中以BN-Inception为基础的双流网络得到的实验准确率最高,并且这个网络可以很好的平衡准确率与计算效率,所以选择这个网络来设计TSN网络的基础网络结构。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(4)输入模态讨论
先前的双流网络结构基本都是,输入单帧RGB图像到空间流,堆叠的光流域输入到时间流中。这里除这两种输入模态外,又考虑了RGB difference和warped optical flow fields两种模态。四种输入模态的表现形式如下图所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
两个连续帧之间的RGB difference描述了两帧图像之间的外观变化,这对应于运动突出区域。warped optical flo抑制了相机或的背景运动,使运动集中在视频人物身上。
对于输入模态讨论的实验结果如下表所示。可以看出时间流网络输入Optical Flow 和Warped Flow两个模态,空间流只输入RGB图像结果最佳。作者给出的原因猜测是,RGB difference模态的输入不能很稳定的描述运动。所以TSN网络选择Optical Flow + Warped Flow + RGB的三模态输入。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(5)训练策略讨论
由于当时视频行为识别的训练数据集较小,所以深度网络训练过程中会存在容易过拟合问题。为了有效抑制过拟合,这里提出了三种方法:Cross Modality预训练,正则化和数据扩充。正则化技术中应用了partial BN操作,并且加入了额外的dropout层。数据扩增利用了四种方法:random cropping,horizontal flipping,corner cropping和scale jittering。实验结果如下表所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(6)与先前工作的性能比较,如下表所示
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结

2. 3D卷积

1)C3D: Learning Spatiotemporal Features with 3D Convolutional Networks

论文:https://arxiv.org/abs/1412.0767
代码:https://github.com/facebookarchive/C3D
年份:2015

这篇文章是3D卷积网络的开篇之作。 在这里提出的C3D卷积网络,使得以3D卷积核为基础的3D卷积网络发展起来。

3D卷积比2D卷积多了时间维度的学习,对视频描述分类效果较好。作者提出一个有效的视频描述子需要具有:
1)良好的泛化性(generic);
2)压缩性好(compact);
3)计算效率高(efficient);
4)计算方法简单(simple),
四个特点。无疑,这些就是C3D网络的优点所在。

而本文正是用实验验证了3D卷积深度网络正是这样的描述子。此外,
1)3D卷积网络在视频的时空特征提取方面是有效,适合的;
2)卷积核是3x3x3,特征提取效果最好;
3)结合使用简单的线性模型的C3D网络,就可以在6个不同的benchmarks上取得较好的成绩。
所以,C3D网络不仅适用于基于视频的行为识别领域,还可以用于另外几个方向,体现出了这个网络对于视频文件处理的多功能的突出特点。

(1)卷积核尺寸讨论
这里实验了两种不同的关于卷积核深度的网络结构:1)所有卷积层的卷积核都是一样的深度;2)卷积核深度在每个卷积层都是不同的。对于相同深度卷积核的网络,一共实验了四种不同的核深度,分别是1,3,5和7。对于变化深度卷积核的网络,实验了两种方案,一是深度以3-3-5-5-7递增,另一是以7-5-5-3-3递减。在这里的实验比较中,参数数量的影响较少,所以不作考虑。在UCF101数据集上的实验比较结果如下图所示。
可以看出,卷积核深度为3(即为333)的卷积核尺寸得到的性能最佳。所以将此卷积核尺寸作为默认设置。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(2)网络结构
卷积核尺寸为333,卷积步长为111。如下图所示,C3D的整个网络有8个卷积层,5个池化层,之后有两个全连接层和softmax输出层。第一个池化层的尺寸是122,步长为122,之后的池化层的尺寸都为222,步长为222。因为作者认为不过早地池化时间信息,可以在早期阶段保留更多的时间信息。每个全连接层都有4096个节点。利用随机梯度下降法(SGD)求解最优解。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(3)C3D在行为识别的应用
Dataset: UCF101
Classification model: 利用C3D提取出视频中的特征,并将特征输入到一个多分类线性SVM中,训练整个模型。C3D描述子的产生这里结合了三个不同的网络:在I380K上训练的C3D,在Sports-1M上训练的C3D和在I380K上预训练并在Sports-1M上微调的C3D。将这些网络的L2标准化C3D描述子串联起来。
Results: 实验结果如下表所示。可以看出在这里C3D配合SVM等技术,在不同输入模态下都可以达到最优异的性能。但是,C3D需要与iDT结合使用,才能在性能上优于双流结构网络,和其他基于iDT的方法等。所以这是C3D在行为识别领域的局限性。

C3D在非行为识别方面的性能表现这里不作讨论
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结

2)I3D: Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset

论文:https://arxiv.org/abs/1705.07750
代码:https://github.com/deepmind/kinetics-i3d
年份:2017

这篇论文主要工作有三点:
1)提出了kinetics大数据集,及其在行为识别中的应用;
2)在这个大数据集上,对先前代表性的行为识别框架进行重新评估,并实验观察在kinetics数据集上进行预训练后对于网络性能的提升;
3)在重新评估的过程中,汲取几个框架中的优点,拼起来实现了一个新的行为识别框架(I3D)。I3D就是由2DCNN Inception-V1扩张(Inflated)而来。

(1)Kinetics数据集
Kinetics数据集主要关注人体的行为,而不是人的活动或事件。数据集中的行为类别主要包括三类:单一的人体动作、人与人的交互、人与物的交互。这些行为都被分的非常细,有些需要通过时间推理来区分(例如不同类型的游泳),还有一些动作需要通过物体的视觉特征来区分(例如弹奏不同的乐器)。
数据集包含400个人体行为类别,每一类都有400多个视频,这些视频全都来源于YouTube。每个视频时长大约为10s,总共有30多万个视频。

(2)讨论的几个经典模型
目前针对于video的网络模型架构的讨论,主要集中于几个方面:
1)卷积核是2D还是3D;
2)输入网络的是原始RGB视频还是包含了预计算得到光流的组合信息;
3)对于2D的ConvNets来说,不同帧之间的信息是使用LSTM还是feature aggregation。
这里主要复现讨论的几个经典模型有,CNN+LSTM的网络、3D卷积网络、基础双流网络,双流卷积融合网络。结构如下图所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
上图(a)中 为CNN+LSTM的模型结构,其中的2DCNN模型为Inception-V1,CNN最后一层的全局平均池化结果作为LSTM网络的输入,该LSTM网络中包含有batch normalization。最后LSTM的输出连接一个全连接层用来分类。该模型在训练的时候使用交叉熵作为损失函数。但是测试的时候只看最后一个时刻的输出的结果。该网络的输入从25FPS的视频中采集的视频段,每隔5帧采样一帧作为输入。训练的时候输入的视频时长为25帧,测试的时候一个视频截取2个视频段,预测结果取平均。
上图(b)中 为C3D的模型结构。这里使用的C3D在原来的基础上做了一些变动。在每一个卷积层与全连接层后面加上了batch normalization。第一个池化层的时间步长从1改为2。训练时输入的视频段长度为16,测试的时候一个视频分为25段,预测结果为所有视频段的平均。
上图(c)中 为基础双流网络,这里双流网络每一个流中的CNN都改为使用的Inception-V1结构。训练的时候空间流的输入为随机采样的一帧,时间流为堆叠10帧的光流。测试的时候一个视频分为25段,预测结果为所有视频段结果的平均。
上图(d)中 为融合双流网络,在前文中介绍的,该网络原理上相当于对一个视频分成多段,在每一段上都使用基础双流网络计算结果,最后对所有视频段上双流网络的结果进行卷积融合。这里双流网络中的CNN也是改为Inception-V1,卷积融合层的结构为:(3DCNN(3x3x3)-3D池化层(3x3x3)-全连接层),卷积融合层的所有参数使用高斯噪声初始化。训练阶段,网络的输入为5帧RGB连续视频帧,50帧光流帧,测试阶段,一个视频被分成5段,预测结果为所有视频段结果的平均。

(3)I3D网络结构
I是Inflated的缩写,就是表示将2D CNN网络扩充为3D CNN的网络,其中3D CNN网络也使用Inception-V1网络框架。扩充以后具体的单个支流的框架结构如下图所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
Inflate主要的方法: 将尺寸为 N * N的所有2D卷积核和池化核,扩充为N * N * N的3D形式。
使用ImageNet预训练参数: 因为这里由2D网络扩充成3D网络,为了将2D网络ImageNet预训练的参数应用于3D网络。将ImageNet数据集中的一张图片沿着时间复制,得到一段”boring video“,即”boring video“每个时刻的视频帧都是原始图片。所以3D卷积核在这段”boring video“上的响应应该和2D卷积核在这张图片上的响应是数值相同的。所以3D卷积核使用ImageNet预训练参数的方法是对2D卷积核的参数沿着时间复制,最后除以3D卷积核的时间维度的大小即可。
3D卷积核的时间维度讨论: 将所有的NN的2D核扩充为NN*N的3D核可能并不合适,因为时间维度的最优值可能受到帧率等因素的影响,所以这里通过实验来确定最优的3D核时间维度的尺寸大小。
借鉴双流法的I3D: 为了提升网络的性能,这里考虑到光流信息在行为识别中的重要作用,所以借鉴经典的双流结构,在网络中加入了光流的输入。RGB视频和堆叠的光流分别输入到3D卷积网络中得到输出结果,最终的结果为这两个流的结果的融合。

整体的I3D网络结构如下图所示。各个讨论到的模型的参数数目和时间输入大小如下表所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(4)实验细节
训练阶段:
1)除C3D之外的所有网络都使用了ImageNet预训练后的Inception-v1作为基础网络结构。
2)在Inception-v1网络每一个卷积层后边都添加了batch normalization层和Relu**函数。
3)优化方法选用动量SGD,动量值设为0.9。
4)使用空间随机裁剪,水平翻转等数据增强的方法。
5)若视频的时长比要求的输入长度短,则对视频进行循环。
测试阶段:
1)输入的视频帧裁剪成224x224。
2)视频预测结果是各个视频段预测结果的平均。
3)使用水平翻转的数据增强的方法,增强的数据的结果与原始结果的平均作为最终的结果。

(5)实验结果分析
1)所有的模型在UCF-101, HMDB-51和Kinetics三个数据集上分别训练测试的实验结果如下表所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
分析得:在所有的数据集,甚至更小的数据集(如hmdb-51)上,I3D都取得了最好的效果,作者认为这是I3D使用了ImageNet预训练的原因。不考虑hmdb51,所有的模型在mini-kinetics数据集上的结果都很低,说明该数据集还是有一定的挑战性的。此外,在所有的数据集上模型的表现性能顺序大致相同,可以以此得出,除了数据,好的模型也是关键。其他数据集光流的准确率都高于RGB,但是mini-kinetics不是,这里分析原因是这个数据集中包含有大量的相机运动,所以光流的质量不行。

2)为验证使用kinetics预训练网络参数是否对性能有帮助,这里对3种不同的训练方案进行实验比较:直接在数据集上训练,不使用预训练参数;使用mini-kinetics预训练的参数,仅训练最后的全连接层;使用mini-kinetics预训练的参数,微调网络的全部参数。实验结果如下表所示。
分析得:在Kinetics上的预训练对于提升各个网络的性能的确实是存在的,提升的效果主要有异于不同的网络。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
(6)与state-of-the-art性能比较如下图所示
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结

3. CNN-LSTM

1)LRCN:Long-term Recurrent Convolutional Networks for Visual Recognition and Description

论文:https://arxiv.org/abs/1411.4389
主页:http://jeffdonahue.com/lrcn
年份:2014

这篇论文是在双流法提出后,并与下面No.2论文属于同一时期的工作。
主要是利用CNN网络提取单独视频帧的特征,再将其输入至对应的LSTM网络中,提取视频的时序信息。本文主要叙述了CNN+LSTM网络结构在视频的 行为识别、图像标注与视频文字描述 三个方面的应用、方法及其性能。这里只对行为识别上的应用进行总结。
官方展示的代码主要是在Caffe框架下实现的,github已有在pytorch上实现的版本。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
网络结构:
提出的通用网络结构如上图所示。根据三种不同的视频处理任务,会有相应的调整。行为识别应用的具体网络结构如下图所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
其中,假设视频序列长度为T帧,把每一帧输入到单独的一个CNN网络(每个CNN共享网络参数)。这里考虑了两种输入模态:单独RGB帧和光流信息图像。其中,光流图像的x与y两方向通道的光流值阈值范围标准化为-128至+128;光流图像的第三个通道表示光流值得大小。

训练细则:
这里只考虑网络结构在UCF-101数据集上的训练及表现。输入视频帧的大小规范到240320,并采用227227 crops和镜像翻转进行数据增强操作。从各视频中裁剪出16帧小片段,作为输入。也就是把所有视频按16帧一个小片段切割,以此实现进一步的数据增强。
网络会对输入的每一个帧进行一次行为识别的预测,最后将各个帧预测的结果进行平均,得到概率最大的行为类别,输出得到识别结果。
这里的CNN是以CaffeNet为基础的网络框架。并在ImageNet数据集的一个子集ILSVRC-2012上进行预训练。

性能评估:
文中提到,当利用光流图像作为输入时,更多的LSTM隐藏单元的结构会得到更好的识别精度。相反,如果是RGB帧图像作为输入,结构中LSTM隐藏单元的数量对性能的影响较小。因此,这里设置若是光流图像作为输入,隐藏单元设为1024,若是RGB输入,隐藏单元设为256。
此外,光流图像作为输入时,利用fc6特征更好;RGB图像作为输入时,fc6和fc7特征对于性能的影响差距不大。所以,最后两种输入都选用fc6特征,表示为LRCN-fc6。

实验表明在网络中加入0.9的dropout操作,可以有效避免过拟合。
实验结果如下表所示,右列表示的是模仿双流法的结构,将RGB单帧图像和光流图像两种输入模态得到的结果,乘以相应的权值,所得到简单融合后的行为识别的准确率。可以看到是有一定的提升。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
但是,在本文之前提出的双流法结构在UCF-101数据集上得到性能还是要优于本文中的LRCN。所以可以看出,本文中LRCN网络结构的优势不在于行为识别这个任务上,但也验证了CNN-LSTM相结合的方法对于行为识别处理方面的可行性。
下一篇No.2论文是此文同时期的工作,主要专注于将CNN-LSTM应用于行为识别,从网络深度与数据集的应用等方面更深入具体的讨论了这一类方法的优势。

2)Beyond Short Snippets: Deep Networks for Video Classification

论文:https://arxiv.org/abs/1503.08909
未公开代码
年份:2015
参考****博文(已经总结的很好):https://blog.****.net/bpp94_github/article/details/82347362

方法概况:
使用在imageNet上预训练过的CNN(AlexNet或者GoogleLeNet)提取帧级特征,再将帧级特征和提取到的光流特征输入到池化框架或者LSTM进行训练,得到分类结果。

主要贡献:
1.提出采用CNN来得到视频级的全局描述,并且证明增大帧数能够显著提高分类性能。
2.通过在时序上共享参数,参数的数量在特征聚合和LSTM架构中都作为视频长度的函数保持不变。
3.证明了光流图像能够提升分类性能并用实验结果说明即使在光流图像本身存在大量噪声的情况下(如在Sports-1M数据集中),与LSTM结合后仍然对分类有很大帮助。

1.模型结构介绍:
1)特征提取CNN
使用两个CNN的原因:对比哪个框架提取特征效果好。
AlexNet: 输入:220X220;卷积层:每个卷积层由size为11X9X5的卷积核组成,每个卷积层后进行最大池化(max-pooling)和归一化(local contrast normalization),最后通过两个size为4096的全连接层(采用ReLu为**函数)每个全连接层的dropout比率都为0.6;输出:4096X1。
GoogleLeNet: 输入:220X220;框架:多个Inception modules,多种卷积核大小,最大池化和平均池化均采用;输出:1000X1。

2)聚合帧级特征以得到视频级描述(与视频帧时序无关)
采用两种方式,最后将下面两种方式和上述两种CNN分别组合进行效果对比。优化方式:随机梯度下降(SGD)参数:学习率10^-5,momentum系数0.9,衰减率0.0005
特征池化: 共提出了五种池化结构,如下图所示。其中,紫色是max-pooling层,C是CNN特征提取输出层,黄色是全连接层,橘色是softmax层,绿色是时域卷积层。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
a)Conv Pooling: 在视频帧的最终卷积层后使用max_ pooling。这种模型的最主要优点是能够通过时域上的最大池化操作来保留卷积层的输出信息。
b)Late Pooling: 先将卷积后的特征先后输入到两个全连接层,再对输出进行池化。所有的卷积层和全连接层的参数是共享的。不同于Conv Pooling,这种方法直接池化了更高级别的帧间特征。
c)Slow Pooling: 通过较小的时间窗来分层池化帧级的特征,采用两步池化策略:先用max_pooling对10帧特征进行池化,步幅为5(这里的池化也可以看作size为10的卷积
核以步幅5对输入的一维特征进行卷积),每个最大池化层后是共享参数的全连接层。第二步是在对所有全连接层的输出进行最大池化。这种方法的特点是在池化帧间高级特征之前对局部时间特征进行组合。
d)Local Pooling: 与Slow Pooling相似,这种方法是在最后的卷积层之后对帧级特征分段池化,不同的是只有一个池化阶段。池化后连接两个全连接层,参数共享。最后是将所有输出输入到一个大的softmax层。减少一个池化层,能够避免时序特征的潜在丢失。
e)Time-Domain Convolution: 该方法在池化层前增加了一个时域卷积层,该卷积层是由256个3X3的卷积核组成,步幅为5。这种方法通过一个小的时间窗能够捕捉到帧间的局部关系。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
如上表的实验结果表示,第一种池化方式效果最好,第二种最差,指出在池化操作前保留原来的时空信息很重要,第二种方法直接将帧特征输入到全连接层,损失了时空信息,得到高层特征。最后一种方法效果也差,说明时域卷积层的效果不如max-pooling。

3)使用LSTM以得到视频级描述(与视频帧时序相关)
构架:如下图所示,每帧特征后连接五个LSTM层(five layers of stacked LSTMs),后一帧的LSTM输出将输入到下一帧的LSTM,最后使用softmax分类器(橙色)。优化方法:随机梯度下降(SGD)。参数:学习率为N(输入视频帧数)X10^-5,并随时间衰减。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
4)流特征提取
每秒随机抽取连续的15帧,并从中随机抽取两帧进行特征提取,以图的方式存储光流特征,阈值为[-40,40],并将光流的水平(第一维)和垂直(第二维)的部分重新缩放到[0,255]的范围,增加第三维并且将数值设置为0。提取完光流图之后采取和帧图像一样的特征提取方法(CNN)。

2.训练方法:
1)特征池化
多帧模型准确率高,但同时也需要大量的训练时间。由于提取每帧特征的CNN是一样的,所以单帧和多帧的最大池化网络也是相似的,所以可以采用由单帧模型扩展到多帧模型的方式。max-pooling先被初始化为单帧网络,,然后再扩展到30帧、120帧。虽然在扩展过程中池化层的特征分布会动态改变,然而实验证明传递参数仍然是有作用的。通过这种扩展方法能提高训练速度。

2)LSTM
遵循上述池化方式,并做一些修改。首先,每帧都将使用视频标签做反向传播,而不是每个clip做反向传播。该网络在不同时间上的同一层网络参数是共享参数的。其次,在反向传播中使用到参数g,代表增益,g是0…1的线性插值帧t=0…T。g强调了最后一帧预测正确的重要性。对时序中的所有帧设置g=1,或者对最后一帧设置g=1,其它为0,预测效果和训练速度都不如线性插值g。

为了聚合帧级预测得到视频级预测结果,提出四种方式:使用最后一个时间帧的预测结果为最终视频预测结果;对所有时序帧的预测结果进行最大池化得到最终结果;加和所有帧预测结果,并取最大值;结合g对每帧预测结果进行线性加权,求和并返回最大值。这四种方法的效果只有少于1%的区别,其中加权预测往往会带来最优结果。

最终整个网络结构如下图所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
3.实验结果:
1)Sports-1M

取帧方式: 再视频前5分钟抽取300帧(每秒抽取1帧)进行特征提取,若视频不足5分钟就重复视频。在本文的实验中只取120帧(2分钟)对模型进行训练来作为一个简单的例子。
数据增强: 将视频帧大小重设置为256X256,然后随机抽取一个220X220的区域,并以50%的概率对帧图像进行水平翻转。虽然数据增强并不是一定要的步骤,但是在条件允许的情况下还是推荐这样做,因为能够提高模型的性能,例如在Sports-1M的[email protected]能够提高3%到5%。
实验结果: CNN对随机抽取的单帧视频预测结果如下表。不同的特征提取方法和特征聚合方法组合的效果也如下表。GoogleLeNet从[email protected][email protected]的提升不显著,是因为该数据集相比于预训练使用的ImageNet数据集噪声大。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
微调: 对预训练过的CNN进行微调无法确定是否能使效果变好,通过实验,微调能够提升模型效果。如下表:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
增加光流特征的效果如下表,可以看见在特征池化模型加入光流特征中没有太大提高,而LSTM加入光流特征后有较大提高,是因为LSTM能将光流特征用于后期特征融合,而特征池化模型却无法做到这样。所以使用光流并不总是有用的,特别是如果视频是从野外拍摄的,就像在 Sports-1M数据集里的情况一样。为了在这种情况下利用光流,有必要使用更复杂的序列处理体系结构,比如LSTM。如下表所示。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
2)UCF-101
该数据集视频较短,所以可以用更高的帧率抽取视频。如下表,是以不同帧率抽取视频的对比。由第一行结果推测,相同帧数下,帧率小,意味着送入更长视频,所以准确率会提高,但是再继续降低帧率到1秒1帧,效果就不会提升了。因此,当帧率下降到足以看到整个视频的上下文内容,再降低帧率也不会对结果有提升。
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结
在UCF-101数据集上,与之前的网络框架性能对比,如下表所示:
action recognition/activity recognition/行为识别/动作识别+经典论文/网络框架+阅读小总结

参考博文

1.视频的行为识别
2.笔记【Two-Stream Convolutional Networks for Action Recognition in Videos】
3.【论文】Convolutional Two-Stream Network Fusion for Video Action Recognition
4.【论文阅读】Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset
5.【论文阅读笔记】Beyond Short Snippets: Deep Networks for Video Classification

接下来打算阅读一批姿态识别/人体骨骼点检测的论文,并总结。
共勉!