S3D论文详解
论文地址:Rethinking Spatiotemporal Feature Learning: Speed-Accuracy Trade-offs in Video Classification
代码地址(pytorch非官方):https://github.com/kylemin/S3D
文章是谷歌发表于ECCV2018,为了平衡视频理解算法精度和速度,提出了S3D这个视频理解网络。
文章首先提出了下列问题:
-
是否需要3D卷积?如果是,哪些层需要是3D卷积哪些可以是2D卷积?这些操作会和测试的数据有关吗?
-
是否需要将时空信息同时进行卷积操作,或者说是否可以时间信息和空间信息分别提取?
-
如果在之前的工作上,增加模型的准确率和速度,同时减小显存占用?
对应上述问题,文章给出的做法:
-
文章在I3D模型的基础上,提出了两种I3D的变式。一种是Bottom-Heavy-I3D,这种模型就是保持低层卷积(靠近图片输入的层)为3D卷积,高层卷积为2D卷积。还有一种称为Top-Heavy-I3D,这种模型就是保持高层卷积(靠近模型输出的层)为3D卷积,低层卷积为3D卷积。如下图1所示。通过实验文章发现,虽然Top-Heavy-I3D模型忽略了低层运动信息但它却有更高的准确率,并且因为3D卷积是在高层,处理的feature相比于低层要小,所以速度也要快。至于是否需要3D卷积下面会进行说明。
-
为了回答上述第二个问题,文章将网络中的3D卷积使用时间和空间两种卷积来替换,例如将大小的3D卷积核采用一个空间卷积紧跟一个时间卷积来取代,其中表示时间维度的核大小,为空间维度的核大小。文章实验发现这种模型修改方法在效率和准确率上都优于原始的I3D。本文的模型称为S3D,其实是的缩写。
-
第三问的答案其实前两问已经解决了差不多了,文章另外利用了时空门机制(spatio-temporal gating mechanism)设计了一个新的模型结构称为S3D-G网络提高了最终的模型识别率。
下面来看一下文章的实验来对上述问题给出答案。
一、网络结构
为了方便解释先将几种结构示意图如下图展示出来。
2.png1.1 将网络中所有的3D用2D卷积来替换
将I3D网络(上图中的a)所有的3D卷积采用2D卷积来代替,如上面上图中的b。为了减小显存和计算量,在12D中保留两个时序stride为2的max pooling 层。I3D和I2D在数据库Kinetics-Full和Something-Something数据库上的实验如下:
3.png上面可以很明显的看出I3D的效果在两个数据库上都优于I2D(所有3D卷积是需要的)。还有一个需要注意的是上述实验中有normal和reversed两种实验,normal表示输入的帧是正常的视频顺序,reversed则表示输入的帧是翻转的顺序。可以看出在Kinetics数据集上两种顺序对网络的影响不大,所以这个数据库对于时间顺序这种信息要求不高。但是something-something数据库在I3D网络下性能急剧下降,说明该数据库对于时间顺序信息要求比较高。(比如拿东西和放东西这种情况)。这也进一步能说明I3D能很好的提取出时序特征。
1.2 将网络中的部分3D卷积用2D卷积来替换
将I3D网络中的部分3D卷积用2D卷积来替换,文章给出两种结构一个是上图中c所示的Bottom-Heavy-I3D,一个是上图d所示的Top-Heavy-I3D。
从下图的实验结果可以看出,在相同的FLOPS的情况下Top-Heavy-I3D的效果会比Bottom-Heavy-I3D好。而且很明显的Top-Heavy-I3D会速度更快,因为Top-Heavy-I3D中3D卷积输入的特征图会小。这说明3D卷积更适合放在处理高层次的语义特征。
4.png到这里已经回答了开篇的问题一,下面来回答问题二。
1.3 将网络中的时空卷积进行时间和空间的拆分(其实就是R(2+1)D的结构)
文章将3D卷积用一个维度为[1,k,k]的2D空间卷积跟上一个维度为[k,1,1]的1D时间卷积来代替。将这种拆分后的结构应用到I3D中,我们称为S3D(separate 3D CNN)。结构如下图所示(在下文中除非有特殊说明,否则S3D都指的是下图的结构)。
5.png上图中粉色的sep-conv有具体示意图,红色为含有sep-conv的Inception blocks。原始的2D Inception block、3D Inception block和含有sep-conv的Inception block的结构分别如下图所示。
6.png从下表中的实验结果可以看出S3D不仅效果好,参数量和计算量都比I3D小。
7.png8.png
并且从上述1.2部分给出的实验结果折线图可以看出,带有separable 3D卷积的Top-Heavy模型(Top-Heavy-S3D)无论是速度还是效果都是最佳的。从图中还可以看到Top-Heavy-S3D线上有一个拐点,我们称为"Fast-S3D",它的结构是top 2的两层为separable 3D,其余层为2D。
到这里已经回答了问题二。文章在S3D的基础上增加了一个门操作进一步提高的网络的精度。
1.4 时空特征门(Spatio-temporal feature gating)
为了进一步提高网络的精度,文章提出了一个Spatio-temporal feature gating的操作。该操作其实很简单,就是对于输入x,输出y通过下式得到:
其中表示元素乘,分别表示输入输出, 表示权重,表示bias。这个机制就是想将中预测为重要的x增加一部分权重,不重要的x则减少权重。
这个门操作可以放在网络的任何地方,经过文章实验,文章发现将这个操作放在S3D网络中的每一个[k,1,1]时间卷积后面效果最好,文章称这个网络为S3D-G。
文章的网络结构构建就完成了,具体的实验细节请查询文章。
网友评论