摘要
现存的动作分类数据集(UCF-101和HMPD-51)数据量小,囿于这种限制,不同的模型的性能都差不多。为此,我们提出了一个更大更好的数据集Kinetics,共有400个动作类别,每个类别有400个视频片段,均采自YouTube上,保证了数据的真实性和困难性。我们测试了现存方法在Kinetics数据集上的性能,并且展示了在Kinetics上预训练后性能的提升。
此外,我们还基2D ConvNet inflation于提出了一个新的动作分类方法,Two-Stream Inflated 3D ConvNet (I3D)。在I3D中,卷积核池化层都由2D扩展到了3D,以便于抓取视频任务中的时空特征。在经过Kinetics上的预训练后,I3D在UCF-101和HMPD-51取得了最优的结果,分别为98.0%和80.9%
一、.介绍
ImageNet竞赛揭示了一个秘密:在大数据集上训练过的深度模型可以用于其他任务和领域。但在视频领域里,这个结论是否仍然生效还有待验证。基于这个出发点,作者提出了视频动作分类领域的大数据集Kinetics Human Action Video Dataset,远远大于现在的视频动作分类数据集UCF-101和HMPD-51。验证思路是这样的:用同样的模型,先在Kinetics做预训练,再在UCF-101和HMPD-51上finetune。结果证明经过Kinetics上的预训练,模型性能得到了很大的提升,结论仍然适用。
此外,我们还基于图像分类模型构建了I3D用于视频动作分类,在I3D中,池化和卷积层都扁平化了,可以抓取时空间信息。在方法对比中,并没有和传统方法做对比。
接下来,第二节会介绍视频动作分类的各种模型和I3D,第三节是Kinetics数据集简介,第四节介绍不同模型的对比,第五节和第六节分别是实验结果和讨论。
二、模型介绍
2.1 卷积网+LSTM
2.1.1 CNN
CNN作为一种深度学习中最常使用的网络之一,已经不仅仅大量使用于视觉领域,且在计算生物学、医学等领域得到使用。CNN的起源在于试图减少全连接神经网络的参数数量,提出了两种创新的思想:局部连接与权值共享。同时为了对图像进行维度以得到最终的低维输出,CNN中引入了pooling的概念,以期望在保存主要特征的原则下,通过对图像进行下采样进而达到降维的目的。
因此,常见的CNN中除了传统神经网络中的输入层和(全连接的)输出层外,还有卷积层和池化层。其中卷积层计算与输入层局部连接区域的神经元,计算与这些神经元对应的权重的内积,其是由局部连接和权值共享提出的,在操作上非常像卷积,因此才有卷积神经网络的概念。池化层则是对于每一层的feature map在空间维度下采样(长和宽的维度),常见的pooling有max pooling和average pooling。(值得一提的是,在最近的胶囊网络中,Hinton又一次提出了自己对于池化无用的观点,其也不止一次在公开场合发表看法‘池化的良好表现可能是深度学习的一场灾难’。但是由于动态路由仅在MNIST简单小型数据集上取得良好的效果,Hinton对于池化的观点仍未得到广泛的认同)。
其中,诸如感受野、feature map、步长、滤波器、padding等概念在此不再赘述。
2.1.2 LSTM
LSTM作为一种带有门限的循环神经网络,全称是长短时记忆神经网络。其与传统神经网络的不同在于在空间维度的基础上加入了时间维度,前一刻的网络状态对当前时刻仍能造成影响,进而模拟人类的记忆和遗忘特性。其按照时间展开如图(网络每一时刻的参数是不相同的):
而RNN会遇到叫做 The vanishing gradient problem for RNNs(梯度消失)的问题,也就是后面时间的节点对于前面时间的节点感知力下降。这导致了RNN无法做的很深,也是其在很长一段时间内不得志的原因。LSTM引入Cell,并通过forget门限决定在该时刻是记住state还是遗忘,使得网络可以达到较深的深度且BP依然有效。
其中,前传和BP过程在此不再赘述,具体参见论文。
2.1.3 卷积网+LSTM
以上所示是本文用于视频行为分类的第一个模型。首先使用某个已经在ImageNet上训练好的卷积网络(如Inception-v1)独立的提取每一帧图片的特征,接下来对整个视频中每一帧的特征整合进行预测。为了不忽略视频的时间结构(如时间的先后顺序,把开门和关门视为两种类别),我们把每一帧的特征输出输入到一个RNN中(本文是LSTM)捕捉整个视频的时间特征。
具体细节:每秒提取原视频的五帧,对所有提取出的帧进行Inception-v1的特征提取,在对最后一个max pooling层的512个隐层unit进行批归一化后作为LSTM一个时刻的输入。训练时使用与所有时间时刻的交叉熵作为损失函数,测试时仅适用最后时刻的输出作为预测类别。
2.2 C3D
3D卷积网与CNN非常类似:也是由卷积层、池化层、输入输出层构成,也有步长、感受野等概念。唯一的区别是CNN将2D滤波器作用于2D图像(可能是多通道的,但通道不作为一个维度)进行卷积,而C3D将3D滤波器作用于3D的视频(同样也不把通道作为维度),具体参见下图:
比如一部(3*)l*w*t的视频(共t帧RGB图像,括弧内是通道但不是维度),在经过padding以及K分(3*)3*3*3的滤波器后,将得到K*l*w*t的视频,但每一帧此时仅有一个通道。经过试验验证,3*3*3的3D滤波器往往效果最好。
而基于3D卷积的C3D结构与CNN非常相似:
以上便是本文所用的第二个进行对比的网络。虽然C3D可以直接通过时间空间滤波器对视频数据进行特征提取,但是由于额外添加的时间维度带来的剧烈增长的参数数目使得网络非常难以训练,且无法使用以及在ImageNet上训练好的网络。
具体细节:本文使用的C3D由8个卷积层和5个池化层和2个全连接层构成。输入是从视频中提取的16帧112x112的图像 。但由于使用的批归一化,所以在第一层卷积层中设置滤波步长为2.
2.3 Two-Stream NN
2.3.1 光流
在三维空间中我们用运动场描述物体的运动状态。但是计算机读入的是二维图片,便用光流场描述每个像素点的运动信息,正如人眼可以通过不同目标的运动速度判断目标距离我们的距离。光流是空间运动物体在观察成像平面上的像素运动的瞬时速度,是利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。
当人的眼睛观察运动物体时,物体的景象在人眼的视网膜上形成一系列连续变化的图像,这一系列连续变化的信息不断“流过”视网膜(即图像平面),好像一种光的“流”,故称之为光流。光流表达了图像的变化,由于它包含了目标运动的信息,因此可被观察者用来确定目标的运动情况。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上(人的眼睛或者摄像头)的投影。那通俗的讲就是通过一个图片序列,把每张图像中每个像素的运动速度和运动方向找出来就是光流场。
2.3.2 Two-Stream
本质上是由两个(时间和空间维度的)CNN构成的。一个CNN的输入是某幅单张图片,仅对该幅图片的空间信息进行建模;另一个CNN则使用多帧的稠密光流作为输入,建模视频中的运动信息,最后的输出可以通过对两个softmax层的输出进行平均或者用SVM进行分类得到。本文中使用的两个CNN是用在ImageNet上训练好的网络照搬来的,最后的输出是两个softmax层输出的平均,输入分别是单幅图片和10个预先计算好的稠密光流框架。光流的卷积网(因为分为水平方向和垂直方向)其输入是光流图的光流叠加。在测试时对于一个输入视频,随机抽样固定数的帧,它们的时间维度间隔是一样的。对于每帧,又计算它的光流场叠加。而每一帧又会在不同的位置采样,对于一个视频的误差,就是总的误差的平均。
3.3D-Fused Two-Stream
网络的输入是5张连续的图片和对应的光流,其通过2中的Two-Stream网络但在最后的average pooling层前进入一个有512个输出单元的C3D,最后通过一个max pooling层和全连接层得到类别输出。C3D和全连接层的初始权值通过高斯噪声决定。
2和3中的网络通过end to end的方式训练。
2.4 Two-Stream Inflated 3D ConvNets
借鉴之前的2D ConvNet的设计,并且使用Two-Stream的方式,本文使用了一种Two-Stream Inflated 3D ConvNets的结构。
2.4.1 Inflating 2D ConvNets into 3D.
方法是将填充2D ConvNets的滤波器和pooling核,使原本N ×N的滤波器变为N ×N ×N.
2.4.2 Bootstrapping 3Dfilters from 2D Filters
通过将图像重复复制到视频序列中,可以将图像转换为无聊的视频。 然后,通过满足我们所说的无聊视频固定点,3D模型可以在ImageNet上隐式预训练:所谓固定点,就是无聊视频上的合并激活应该与原始单个图像输入上的相同。由于线性,沿时间维度重复2D滤波器的权重N次,并通过除以N重新缩放它们,可以实现这一点。
2.4.3 Pacing receptive field growth in space, timeand net- work depth.
所有图像模型均对待两个空间维度(水平和垂直。 这是非常自然的,并且意味着网络中更深的特征同样受到两个维度中越来越远的图像位置的影响。然而,当考虑时间时,对称接受场不一定是最佳的 - 这应该取决于帧速率和图像尺寸。 如果它相对于空间的增长过快,它可能会混淆不同对象的边缘,从而影响早期特征检测,而如果增长太慢,它可能无法很好地捕捉场景动态。
具体的模型如下图所示
2.4.4 Two 3D Streams.
尽管3D ConvNet应该能够直接从RGB输入中学习运动特征,但它仍然执行纯前馈计算,而光流算法在某种意义上缺乏反复性。也许由于这种复发的缺乏,在实验上我们仍然发现它具有双流配置的价值 - 如图所示- 一个I3D网络接受RGB输入的训练,另一个接收流量输入,这些输入带有优化的平滑流量信息。 我们分别训练了两个网络,并在测试时间对他们的预测进行了平均。
三、 Kinetics人类动作数据集
Kinetics是人类动作的数据集,包括单人动作如绘画、笑、拳击等等,人人交互动作如拥抱、亲吻、握手等等,还包括人物交互动作如割草、打开礼物、刷碗等等。其中,一些动作类别是细粒度的,依赖于短时的推理,例如不同类别游泳姿势的分类。还有一些动作类别强调物体的识别,例如不同类型的管乐器演奏。
Kinetics共有400个动作类别,每个类别有至少400个视频片段,每个视频片段都采自于独一的视频,约持续10秒,共有24万个视频训练数据。测试集中,每个类别有100个视频片段。
四、实验
4.1 与其他模型的性能对比
下表是在UCF-101, HMDB-51和Kinetics上的实验结果。可以看到I3D在各个数据集上都达到了最优,不管是RGB图像,光流或者RGB流+光流。
此外,在UCF-101上,I3D的性能要比在HMDB-51和Kinetics上的好,这是由不同数据集的难度所决定的。HMDB-51数据量很少,且刻意增加了分类难度,例如在相同的场景中“拔剑”被标记为“击剑”和“练剑”两种不同的动作。
之后我们又测试了在ImageNet上预训练的作用,左边是没有进行预训练,右边是在ImageNet上进行了预训练,可以看到在ImageNet上训练是有助于性能提升的。
4.2 Kinetics泛化能力的测试
我们考虑了两种实验设置:1.固定网络参数来产生用于UCF-101/HMDB-51数据集的特征,然后训练分类器,在测试集上做测试;2.进行了finetune再进行测试。实验也证明了在ImageNet和Kinetics上预训练的作用。
先看个可视化的例子,第一行是I3D在Kinetics上训练后,第一层卷积层的可视化结果,第二层是RGB I3D 的,第三层是原始的inception的卷积核,可以看到I3D的卷积核处理了丰富的时空间结构,flow I3D的结果与RGB I3D很相似。
下图显示了这两种实验设置下的结果,可以看到所有模型都能从预训练中收益,但I3D和3D模型从中收益最大。甚至只训练最后的分类网络也能为I3D模型带来显著提升。作者还进行了原因分析:对于I3D模型更好的特征迁移性,一个原因在于它的高时间分辨率,训练时每秒使用25帧,而测试时使用全部的帧,这就使得它可能捕捉到动作在时间上的精细结构。对于类似C3D的模型相比I3D有着巨大差异,原因在于I3D模型更深、参数更少、利用ImageNet热启动、在4倍长的视频数据上进行训练、在2倍的高空间分辨率的视频上运行。
双流的模型不依赖ImageNet和Kinetics数据集进行训练也能表现很好,主要是由于流的精确性,似乎很少导致过拟合。Kinetics预训练比ImageNet效果更好。
下图是与其他方法的对比,I3D的性能依然是最好的,但和其他模型差距不是特别大,这也印证了开头所说的受到了数据集的限制。无论是RGB-I3D还是RGB流模型,在Kinetics上训练以后,表现都很突出,要优于其它模型和任意组合模型。而双流结合的结构更是优势巨大。在Kinetics上预训练的I3D模型要比C3D模型好得多,即便C3D使用更多的视频进行训练以及组合上IDT。原因可能是Kinetics质量更好以及I3D是一个更好的结构。
五、讨论
回到文章开始所提出的问题,数据库上的迁移(从Kinetics预训练再从UCF-101和HMPD-51上finetune)会带来性能的提升吗?实验证明是有作用的。但这还仅限于动作的分类,在其他任务上如视频分割,视频物体检测或者光流计算是否有效仍然需要验证。
总结的讲,这篇paper提出了比原来大得多的一个数据库,有约30万视频片段。然后在这个数据库做了个benchmark叫做I3D,把二维卷积扁平化,多了一个维度用于抓取是空间的信息。