可以访问C3D network的项目主页或是github获得其项目代码及模型,项目基于caffe实现。
项目主页(http://vlg.cs.dartmouth.edu/c3d/)
代码: (https://github.com/facebook/C3D)
1. Introduction
以往人们采用特定的方法来解决计算机视觉中的动作识别、异常事件检测和活动理解等不同的问题。本文需要有一种通用视频描述符,以均匀的方式解决大规模视频任务。
本文认为一个有效的video descriptor应该如下四种特性:(1)generic:具有强大的区分能力,能够很好地表示不同类型的视频。(2)compact:在处理数百万个视频,一个紧致的video descriptor有助于快速处理、存储和检索大规模的的任务(3)efficient:处理速度要达到实时性(4)simple:简单且容易实施。
本篇文章提出的C3D network是作为一个通用的网络提出的,该网络能够更好的在时域空域上进行特征学习,文章中将其用于行为识别,场景识别,视频相似度分析等领域。
2. main contributions
1):通过实验表明,3DConvNet是一个很好的特征提取器,不管是在表层还是在运动 信息上。
2):通过实验表明,所有层采用大小为3×3×3卷积核能够获得更好的表现
3):提取的特征通过简单的线性模型在4个不同任务,6个不同benchmarks上 超出或接近目前最好的方法(如下图)。他们 足够紧致,并且能够高效计算。
3. Learning Features with 3D ConvNets
我们认为,3D ConvNet非常适合于时空特征学习。与2D ConvNet相比,3D ConvNet能够通过3D卷积和3D池化操作更好地建模时间信息。在3D ConvNets中,卷积和池化操作在时空上执行,而在2D ConvNets中,它们仅在空间上完成。
图1中的a)和b)分别为2D卷积用于单通道图像和多通道图像的情况(此处多通道图像可以指同一张图片的3个颜色通道,也指多张堆叠在一起的图片,即一小段视频),对于一个2D CNN 滤波器,输出为一张二维的特征图,多通道的信息被完全压缩了。而c)中的3D卷积的输出仍然为3D的特征图, 这保留输入信号的时间信息,相同的现象适用于2D和3D池化。
该文章首先尝试使用UCF101(一种中等数据集)来搜索最佳体系结构,并认可了Simonyan et al.的研究发现,采用小尺度的卷积核。这个部分,网络将UCF101视频片段作为输入,然后预测视频片段的类别。
网络细节
1.所有的视频帧下采样到128×171,大概是原始视频分辨率的一半。
2.视频分割为不重叠的16帧视频片段,作为网络的输入。
3.输入维度为3×16×128×171,训练阶段再对图像进行随机裁剪,得到尺寸为 3×16×112×112的数据输入。
4.网络有5层卷积层,5层下采样层(连接在5层卷层),2层全连接层,1层softmax层。卷积层的卷积核数量依次分别为:64/128/256/256/256。
5.每一个卷积核d*k*k,d表示核的时域深度,通过改变d的取值,设计一个好的3D网络结构。卷积核的步长设置为1,所有的下采样层尺寸为2×2×2(第一层pooling除外),第一层为1×2×2.
6.所有的全连接层有2048个单元,mini-batch为30,初始化 的学习率为0.003;每4个epoch过后,学习速率除以10,迭代16个epoch后结束。(一个epoch是指把所有训练数据完整的过一遍)
该文章就如何通过深度网络来聚合时间信息,在保持网络的其他相同设置的前提下,只改变卷积层的时域深度d,设置了两种不同的方案:
1.每一卷积层有相同的时域网络深度。测试深度分别为 1,3,5,7四种情况
2.随着网络,时域的深度发生改变。测试两种情况下的网络结构,分别为一种是时域深度随着网络向前传播增加(3-3-5-5-7),另一种随着网络的向前传播深度减小(7-5-5-3-3)。
在UCF101分支1上训练这个网络,图2展示了不同网络的视频片段取得的准确度。可以发现,不管是相同的网络深度还是不同的网络深度之间的比较,当时域深度为3的时候效果最好,而且是全部卷积层的深度均为3×3×3。
4. C3D network 结构
利用前面实验得出的结论,利用3D卷积以及全部卷积层的深度均为3×3×3,设计C3D网络结结构。
C3D共有8次卷积操作,4次池化操作。其中卷积核的大小均为3∗3∗3,步长为1∗1∗1。池化核的大小为2∗2∗2,步长为2∗2∗2,但第一层池化除外,其大小和步长均为1∗2∗2。这是为了不过早缩减时序上的长度。最终网络在经过两次全连接层和softmax层后就得到了最终的输出结果。网络的输入尺寸为3∗16∗112∗112,即一次输入16帧图像。
网络训练细节:
1.Dataset:在Sports-1M上训练网络,该数据集有1.1million 运动视频,共487类。
2.提取片段:对于每一个训练视频,我们随机提取5个时长为2s的视频片段,并将其调整大小为128×171
3.裁切(crop):将输入视频片段随机剪切为16×112×112
4.数据扩充:以50%的概率进行水平反转
5.SGD with mini-batch size:30
6.初始学习速率为0.003,每150K次迭代除以2.
7.最优化过程在1.9M次 (13个epoch)
结果分析:
1.DeepVideo每一个视频提取片段上采用了4个裁切,每个视频预测总共采用了80个裁切;而C3D分别是1和10.
2.C3D的效果仍然比DeepVideo准确度更高。
3.C3D的方法效果比Convolution pooling效果差,主要在于Convolution pooling每个片段使用了120帧,因此它的精度无法直接于C3D和Convolution pooling做对比。
接下来介绍一下C3D的实验结果,作者将C3D在行为识别、动作相似度标注、场景与物体识别这三个方向的数据库上进行了测试,均取得了不错的效果。
5. Action recognition
行为识别用的数据库是UCF101,C3D+SVM的结果达到了85.2%。C3D+iDT+SVM的结果达到了90.4%,Table3 所示
为了评估C3D特征的紧凑性,使用了PCA将特征投影到较低维度,并使用线性SVM分类。对对iDT [44]和Imagenet features [7]进行了相同的处理。
Fig 5.这表明C3D的提取的特征既紧凑又有具体区别度。在低维度下与iDT和imagenet 相比, C3D的性能高出两者10-20%。
6. Action Similarity Labeling
动作相似度标注问题的任务是判断给出的两段视频是否属于相同的动作。文章中使用的数据库为ASLAN。通过表4 和图7 可以看出C3D的效果超过了当时的比较好的方法不少。
7. Scene and Object Recognition
场景识别问题主要使用了Maryland(420个视频,14类)和YUPENN(130个视频,共130类)两个数据库,C3D+SVM也都达到了不错的效果。
8. Runtime Analysis
我们比较了C3D的运行时间以及与iDT [44]和光流法[36]的运行时间。请注意,这里对iDT是不公平的,因为它只使用CPU。但仍能发现C3D的实时更快,以313 fps处理,而另外两种方法的处理速度低于4 fps。
9. Conclusions
在这项工作中,本文试图解决使用在大规模视频数据集上训练的3D ConvNets来学习视频的时空特征的问题。该论文进行了系统研究,以找到3D ConvNets的最佳时间深度上核尺度。展示了C3D可以同时对外观和运动信息进行建模,并胜过各种视频分析任务中的2D ConvNet功能。证明了使用线性分类器的C3D特性可以在不同的视频分析基准上超越或接近当前最好的方法。最重要的一点,所提出的C3D特征是高效,紧凑和极易使用的。