写在前面
未经允许,不得转载,谢谢~~~
这篇文章是出自ICCV2017的一篇文章,在视频识别领域中属于用3D ConvNets来提取视频特征的方法,其提出的P3D伪3D残差网络是一个比较经典的网络结构,还是非常有学习意义的。
- 全文链接:https://arxiv.org/abs/1711.10305
- 可参考github链接:https://github.com/ZhaofanQiu/pseudo-3d-residual-networks
一 文章主要内容介绍
1. 研究背景介绍
每分钟都有大量的图像和视频数据正在被产生,这也促使了搜索、推荐等多媒体内容理解应用的发展,而如何很好地提取视频特征对于视频的内容分析及理解具有重要的意义。在图像领域,残差网络模型的集成已经可以在ImageNet数据集上达到3.57%的top-5 error,这已经优于出错率为5.1%的人类水平。相比于图像而言,视频除了作为图像帧的集合还蕴含了复杂的时序信息,这也使得学习一个强大而通用的视频空间时序特征变得很困难。
一个比较自然的处理方法是将用3D conv来提取视频的空间时序信息,因为3D本身的结构决定了它能学习每帧空间信息的同时学习到帧与帧之间的时序信息。现有的一些3D Conv网络也展示了较好的性能,但是相比于普通2D卷积来说,3D卷积的模型参数是原来2D卷积的立方级,例如一个11层的C3D网络的模型大小(321MB),比152层的2D残差网络ResNet-152(235MB)还要大一些,这会使得网络的训练变得非常的困难。而且直接2D网络可以用在ImageNet上预训练过的参数做模型的初始化,这会比直接从头开始训练一个模型的效果更好。
还有一些方法是在2D卷积网络的最后一个pooling层或者全连接层后面再添加一个pooling或者RNN,但是这样的方式也只能学习到高层信息之间的联系,会丢失更加低层信息之间的联系。
2. 为什么要提出这个网络结构?
基于以上的研究背景,总结来说主要有以下几点原因:
- 如何更好地提取视频的空间时序特征信息对于视频内容的分析具有重要的意义;
- 2D卷积神经网络不能很好的学习到视频的时序信息,而看起来更加合理的3D卷积神经网络却需要大量的计算量,而且需要在没有预训练参数的情况下从头开始训练;
- 在2D Conv网络结构基础上增加pooling或者RNN的方法不能很好地提取视频的低层信息间的联系。
3. 本文所做的事情
- 提出了用(1,3,3)的空间卷积和(3,1,1)的时间卷积来近似代替(3,3,3)的3D卷积的思想;
- 将现有的2D Conv扩展成3D Conv,并用以上伪3D的思想实现了一个新的Pseudo-3D ResNet(P3D);
- 这样既能够利用3D结构来提取视频的空间时序信息,又能利用原来在Imagenet上预训练的参数做模型初始化;
文章的P3D网络结构最后在Sports-1M视频分类数据集上达到的精度分别比原来的3D CNN和基于帧的2D CNN网络结构高出5.3%和1.8%。除此文章还选用在5个不同的数据集上进行了3个不同的任务来验证模型的泛化能力,并且都达到了不错的结果。
二 相关工作
文章粗略地将视频特征学习的方法分成手工特征和基于深度学习这两大类方法。手工特征主要是指检测空间时序特征点然后用局部表示描述这些特征点,而目前绝大多数的方法都是基于深度学习的。
Karparthy等人用CNN网络提取固定大小的图像帧特征,然后将他们简单叠加的结果作为整个视频的特征;著名的two-stream结构是对CNN网络分别在视频帧和光学流上进行卷积操作,后来的很多方法都在这个的基础上做了改进,例如用卷积的方式来做两个stream的特征融合,再例如时序分割网络(TSN)也是基于two-stream的结构做出的改进。除此,基于LSTM-RNN的网络结构也被成功应用到视频的时序建模问题上,通常的做法是用pooling层和LSTM层来学习视频帧与帧之间的时序信息,从而得到一个鲁棒性更好的视频特征表示,当然也有直接用两个叠加的LSTM来作为视频的编码与解码器。
我们可以观察到这里提到的方法大多是都是将视频作为图像帧的序列来看待的,很多的时序信息并没有被挖掘出来。在这个问题上Ji等人最先提出的3D卷积神经网络就可以比较好且比较自然地学习到视频的时序信息,紧接着Tran等人提出的C3D模型就能直接学习16帧的视频片段,现在已经出现了能在更长的视频片段(100帧)上进行时序卷积操作的模型。可是3D CNN网络所需要的昂贵计算量和内存需求导致目前很难训练好一个非常深得3D卷积神经网络。
因此本文不仅提出了用2维空间卷积和1维时间卷积来近似代替3D卷积的计算经济型想法,更是将这个想法融入到了现有的较深的残差网络中来提取视频特征信息。
三 P3D ResNet网络结构
1. 3D卷积
给定一个c*l*h*w
大小的视频片段,其中c,l,h,w分别表示通道数,帧数,帧的高度以及宽度,提取视频特征最自然的方式就是利用3D卷积,它能在对空间信息建模的同时提取帧与帧之间的时序信息。 简单起见,我们可以将3D卷积核描述成d* k *k
, 这里的d表示卷积核的时序长度,而k表示卷积核的空间大小。因此,假设我们有一个3*3*3
的卷积核,它可以很自然地被分解成空间域1*3*3
的2维卷积核以及时间域上3*1*1
的1维卷积核。 这样将三维卷积分解的方式可以在很大程度上降低模型的大小,同时可以利用在ImageNet上预训练过的模型参数做初始化。
2. Pseudo-3D块结构
残差单元:残差网络由大量的残差单元构成,而残差单元通常可以用以下的方式表示:
- 其中Xt表示残差单元的输入,Xt+1表示残差单元的输出;
- h(Xt)=Xt表示恒等映射关系;
- F是非线性残差函数;
-
ResNet相当于将学习目标改变了,不再是学习直接从输入到输出的非线性函数,而是目标值与输入值之间的差值。
这个式子也可以写成以下的形式:
P3D块结构设计:具体做法是将原本2维的残差单元中的卷积核全部扩充成3维的,然后再将3*3*3
的卷积核分解成1*3*3
的二维空间卷积和3*1*1
的一维时间卷积。至于具体怎么将这两个卷积操作结合在一起需要考虑的第一个问题是空间维度S的2D卷积核与时间维度T的1D卷积核之间应该是直接的影响还是间接的影响,这里的直接影响指的是空间卷积结果直接作为时间卷积的输入,而间接影响则指空间卷积操作和时间卷积操作是没有先后顺序,平行进行的。另外还需要考虑的第一点是这两种卷积核的结果是不是应该直接作用在残差单元的输出结果上。
基于以上两点设计思路,文章设计如下图所示的三种块结构,分别成为P3D-A, P3D-B,P3D-C,接下来将对这三种结构进行详细的说明。
(1) P3D-A:这是一种S与T直接影响的方式,先对feature map做空间的2D卷积然后再做时间1D卷积,最后时间卷积的结果与shorcut一起构成残差块的输出结果。
(2)P3D-B:这种方式与P3D-A的不同之处在于空间卷积与时间卷积之间并没有直接的联系,两者是以并行的方式对feature map进行卷积操作,最终两个的结果直接累加到shortcut中构成残差块的输出结果。
(3)P3D-C:这种方式是前面两种方式的一种结合,除此还建立了S到最终结果的shortcut,最终可以表示为以下公式:
Bottleneck结构设计:在基础的2D残差块的基础上增加了bottleneck结构来减少计算复杂度。具体表现在在3*3
卷积层的前面和后面都增加了一层1*1
的卷积层分别用于降低和恢复feature map的维度。在将2D网络扩充成3D网络的过程中也同样保留了这个想法,结合前文中的P3D-A,P3D-B以及P3D-C结构,最后可以得到残差网络的Bottlneck结构如下图所示:
3. Pseudo-3D ResNet
为了验证三种P3D块各自的优势,文章先用特定的一种块结构代替ResNet50中的残差单元,得到P3D-A ResNet,P3D-B ResNet, P3D-C ResNet。另外又从结构多样性的角度考虑将P3D-A,P3D-B,P3D-C三种结构块按序排列混合起来构成P3D ResNet。具体结构图如下所示:
实验用了UCF101视频动作识别数据集来比较4个ResNet-50与P3D各个变种网络的性能好坏。对于ResNet50网络结构,对于输入的每个视频帧都能得到一个结果,最后将这些视频帧的结果做一个平均之后作为整个视频的预测结果。而对于其他的P3D变种网络,除了时间卷积层外都用ResNet50的模型参数做参数的初始化。在训练阶段,设置每隔mini-batch的大小为128帧,用标准的梯度下降法SGD来进行参数的优化工作,初始学习率设置为0.001,每经过3k次迭代后减少10倍。模型共进行7.5K次迭代过程。
四个模型结构的表现如下表所示:
由实验数据可知所有的P3D变种网络都在模型大小只比原来的ResNet增加了一点的基础上提高了模型精度,这可以表明用P3D块结构在探索空间时序特征上的优势,且实验证明结构更加多样化的P3D ResNet比单一block块结构的三个变种网络的性能都要好。
四 空间时序特征学习
在以上实验的基础上,文章选用了更深的ResNet152网络来构建自己的P3D ResNet。然后再Sports-1M这个最大的视频分类数据集上进行模型参数的学习。Sport-1M数据集包含487中运动视频,共计113万个视频。实验将数据集按70%训练集,20%验证集以及10%测试集的方式进行划分。
网络结构训练:对于训练集中每个视频随机选择一个5秒的短视频片段,minibatch的大小依旧为128,用标准梯度下降法进行分类任务的训练。初始学习率设置为0.1,每经过60K迭代之后学习率减少10倍。整个训练过程共需要150K次迭代。
网络结构测试:在测试阶段随机选择每个视频中的20个片段,然后分别输入网络得到20个结果,将最后的平均值作为整个视频类别的分类结果。
将本文提出的模型与其他现有算法在Sports1M数据集上的分类结果比较统计如下表所示:
- Deep Video (Single Frame) :只用了单帧图像的结果;
- Deep Video (Slow Fusion) :用多帧的结果预测得到视频的结果;
- Convolutional Pooling :在GoogleNet的最后一层卷积层后加上一个最大池化层;
- C3D:C3D模型在从头开始训练和有初始训练参数的两种情况下;
可以看到P3D ResNet的表现比ResNet152(2D CNN)以及C3D(3D CNN)都要更好一些,实验基本验证将3D卷积拆分成2D空间卷积和1D时间卷积的优势。
另外Deep Video(Slow Fusion)的表现也如期地比只用了单帧图像的Deep Video方法更好。
比起Convolutional Pooling的结果,P3D ResNet的结果会更差一些是因为前者是基于120帧图像的,而P3D ResNet只用了16帧的连续图像作为基本单元。
P3D ResNet 特征表示:在Sports-1M数据集上训练后的P3D ResNet网络模型就可以作为一个通用的视频特征提取器。对于任何一个视频,取其中的20个视频片段,每个视频片段由16帧连续帧组成。每个视频片段输入P3D网络后提取网络pool5层的输出即能得到2048维的视频特征。最后将这个20个视频片段的特征取平均作为整个视频的特征表示。
五 视频表示能力评价
实验部分文章采用了在UCF101,ActivityNet,ASLAN,YUPENN,Dynamic Scene这5个不同的数据集上进行3个不同的任务来验证P3D ResNet的视频特征表示能力。其中UCF101和ActivityNet是两个最常用的视频动作识别数据集;ASLAN是用于判别视频动作相似性判别的数据集;YUPENN以及Dynamic Sence是两个用于场景识别的数据集。
1. 与现有算法比较
实验首先在UCF101与ActivityNet数据集上进行了视频分类任务的实验,实验结果如下表3,表4所示:
我们简单地将在UCF101上的识别方法分成三类:1)端到端的CNN卷积神经网络;2)基于CNN卷积神经网络的特征提取器+线性SVM;3) 融合了IDT手工特征的方法。可以看到P3D ResNet比目前结果最优的TSN神经网络要更好一些。同样的P3D ResNet由于在整个网络过程中都有在提取时间空间特征而不是只有提取最高层的时间信息,因此会比用LSTM的方法要好很多。除此将3D分解后的效果在减少模型参数的同时也达到了比C3D更好的效果,而融合IDT后的模型表示可以达到93.7%的性能。
本文的模型在ActivityNet上的top1指标上的表现也比IDT,C3D,VGG_19以及ResNet-152比如高出10.4%,9.3%,8.5%以及3.7%的性能提升。
文章进行的第二项任务是动作相似度检测,即两个视频是不是呈现一样的动作。对于每个输入的视频片段,文章获取模型prob,pool5,res5c以及res4b35层的输出作为视频特征,对于每对视频都用12种不同的相似度度量算法进行计算从而得到48维的相似度矩阵, 再对这48维的相似度矩阵运用L2正则化和二分类器得到最终两个视频是否相似的判断结果。实验结果如下表5所示,可以看到整体上P3D ResNet的结果比基于手工特征和CNN特征提取器的都要好,且基于CNN特征提取器的模型表现会普遍优于手工特征。
文章进行的第三项任务是视频场景识别,实验结果如下表6所示。可以看到本文的模型表现比基于手工特征的表现在Dynamic Sence和YUPENN数据集上分别高出16.9%和3.3%,相较于C3D与ResNet-152也有少量的性能提升。
2. 特征表示维度的影响
图6展示了各个网络模型在UCF101上的识别精度随着提取出来的特征维度降低的变化趋势。可以看到整体上P3D的表现比其他的模型表现更好,且随着视频特征维度的降低,模型识别准确度也会随之下降。另外,有实验结果可以观察到ResNet-152的曲线下降更加陡峭,这也在一定程度上反应了只在图像域学习到的特征用于视频表示是存在一定缺陷的,相比较而言P3D和C3D的下降就会平缓很多。
3. 视频表示可视化
图7展示了文章用t-SNE算法对UCF101数据集上的10K个视频特征进行可视化的结果,其中每个点都表示一个视频,而每个颜色表示视频的分类。可以看到P3D学习到的视频特征比ResNet学习到的视频特征的分布在语义上更加分散清晰。
六 总结
文章提出了将3D卷积简化成2D空间卷积和1D时间卷积的想法,并用实验尝试了不同的组合方式嵌入到残差网络中的性能表现。基于以上的实验实现了最终的P3D残差网络结构,并在Sport-1M视频运动数据集上进行模型的训练,从而得到一个通用有效的视频特征提取器。文章对最终训练好的特征提取器分别进行了视频动作识别、行为相似度检测与场景识别任务的实验验证,并在各个实验数据集上都取得了较好的结果。
关于未来可以继续扩展延续的工作有以下几点:1)加入注意力机制来增强特征学习的能力;2)增加网络训练时输入视频帧的数目;3)在目前只使用RGB帧的基础上增加光学流、语音信息等多种输入信息。
写在最后
出了之前本科毕设那篇论文做了全文翻译外,很少会把整篇文章的所有内容都做一个整理和记录,这次主要是作为一个机器学习的课程作业,平时还是只需要掌握整篇文章的精髓以及主要的创新点及实现思路就可以了,这样的方式有点太过低效了。
anyway,每个字都是敲出来的,文章不想被各大网站直接转载,谢谢o( ̄▽ ̄)d
有什么问题或者理解不到位的欢迎简信交流,感谢~~~