读书笔记29:A Closer Look at Spatiotemporal Convolutions for Action Recognition(CVPR2018)

http://openaccess.thecvf.com/content_cvpr_2018/papers/Tran_A_Closer_Look_CVPR_2018_paper.pdf

本文的摘要开门见山介绍自己的工作,没有背景介绍等铺垫,这和本文的动作内容也有关,本文不是对比前人工作,针对某些不足提出新模型,而是讨论了几种不同形式的spatial temporal convolution模型,探讨了其在动作识别中的效力,从实验的角度证明了3D CNN的效果比2D的好,并且将3D CNN分解成分离的空间卷积和时间卷积可明显提升准确率。经过种种分析,最后作者提出了一个新的spatiotemporal convolutional block叫做R(2+1)D,这个block加持下的CNN可以达到state-of-the-art的水准。

在introduction中,作者介绍了本文的背景,那就是目前CNN在视频中进行动作识别的能力远不如在图片中进行物体识别的效果好,并且有人设计的用2D CNN只分析video中一帧一帧的image的信息,完全不管spatial的信息,达到的效果都很接近state-of-the-art,这就让很多人怀疑,是不是temporal信息根本就不是动作识别的关键呢?基于这种论调,本文探讨了temporal维度分析起到的作用,本文的分析都是基于resnet框架的。

本文提出了两个模型,都是介于完全2D的卷积和完全3D的卷积之间的模型。第一种模型是mixed convolution(MC,这个和之前的一篇读书笔记的内容几乎一致),在网络的前几层使用3D卷积,在高层使用2D卷积,这种设计背后的理念是认为motion的模拟是一种层次较低的操作,可以在浅层网络中用3D卷积来处理,抓取出motion feature之后,就可以继续使用2D卷积来进行高层次的特征提取了。这种混合卷积在实验中比单独的2D resnet提升了3-4%的准确率。第二种模型是(2+1)D convolutional block,这个是将3D卷积分解成两个连续的操作,一个是2D的空间操作,另一个是1D的temporal操作,这种操作方式使得每一层网络都多了一个非线性函数,让模型的表达能力得到提升,同时还可能有利于优化。

本文涉及到了几种spatial temporal convolutional network,都是在resnet框架下

也就是每一层网络的输出都是两份,一份是未经卷积的上一层网络的输出,另一份是这层网络卷积得到的结果。几种模型示意图如下

读书笔记29:A Closer Look at Spatiotemporal Convolutions for Action Recognition(CVPR2018)_第1张图片

首先是R2D模型,这种模型忽视temporal顺序,在整个video clip上进行2D卷积,将帧数L(就是说整个video有L帧image)视作和channel差不多的东西,这样的话,就可以理解为将整个videoreshape成的一个tensor,这里面的3指的是RGB三个channel,H、W是高度和宽度,L就是video包含的帧数,由于3和L都视作channel了, 我的理解就是说,在一张RGBimage上,空间每一个位置对应一个长度为3的vector,而现在,空间每一个位置对应一个3×L的矩阵,也就是每一个像素由vector变成了matrix,进行卷积的时候,不再是vector的加权求和,而是矩阵的加权求和,这也就是将L视作channel的意思。因此将每一个3×L的元素reshape成3L长的vector其实是一样的, 因为加权求和的时候始终都是不同元素同一个channel的加权求和,这些元素是排列成2维的矩阵还是1维的向量都是无所谓的。第i个residual block的输出的也是一个3D的tensor,尺寸是,Ni表示有多少个filter在这层使用了,Hi和Wi是spatial维度的尺寸,这个尺寸可能由于pooling和striding比上一层的输出尺寸有所变化。每一个filter也是3D的,并且尺寸是,d标记的是spatial维度的尺寸,尽管这个filter是3D的,但是只进行2D的卷积,每一个filter的输出都是1-channel的(这就有点疑惑,不同的channel是如何合并成一个channel的?如果是加权求和且权重可训练,岂不也是3D卷积),因此网络最前面的一层就将video的所有temporal信息都压缩到一个channel了,temporal上的reasoning在接下来的几层就完全没有了(这个也有点疑惑,比如第一层卷积的每一个卷积核都按照顺序关注temporal上的某一些frame,那么输出的还是有temporal信息的,极端一点,假设第一层卷积的输入channel是T,输出也是T,且T个卷积核分别只关注一个channel,那么输出的和输入的一样,temporal信息一点没丢)。

第二个是f-R2D模型,这个模型也不考虑任何temporal信息,对L个frame相互独立的使用一串2D convolutional residual block,对所有的frame都使用同样的filter,最后搞一层spatiotemporal pooling layer将L个frame的信息简单的聚合起来,得到最终的结果,这个称之为frame-based R2D,也就是f-R2D。

第三个模型是3D的模型,是R3D,第i层的输出尺寸是是第i个block中的filter数量,每一个filter的尺寸是,t是在temporal方向上的尺寸,本文中采取t=3,不知道这种选择是不是因为CNN中一般选取3×3的卷积核。

第四个是模型,是2D和3D混合卷积(mixed 3D-2D convolution),设计这个模型的出发点是有人猜测,motion modeling(3D convolution)在前几层中起到的作用比较大,一旦抓取出一些特征之后,到后层进行的就是semantic abstraction,这个阶段3D的模拟可能就不重要了。基于这种观点,可以设计前几层是3D卷积,后几层用2D卷积的网络。本文中的MCx模型都是基于R3D模型修改的,R3D模型用的是5group的卷积,对此修改就是将最后几层改为2D卷积,用MCx的x标记是哪一层开始使用2D卷积,例如MC4代表从第四层开始,第4、5层都使用2D卷积,本文除了MC1没考虑,MC2、MC3、MC4、MC5都考虑了。本段开头提到说一种假设是3D卷积在前几层比较重要,一种与之相对应的假设就是3D卷积在后几层比较重要,因此每一个MCx都有一个reversed版本,即rMCx,此时下标x标记的是从哪一个block开始使用3D卷积。

第五个模型是R(2+1)D模型,采取的是(2+1)D卷积,这个卷积方式是将sptio-temporal convolution分解成spatial和temporal两个纬度上的卷积,示意图如下

读书笔记29:A Closer Look at Spatiotemporal Convolutions for Action Recognition(CVPR2018)_第2张图片

在这个模型中第i层的Ni个尺寸为的3D卷积核被替代为一个(2+1)D block,包含Mi个尺寸为的2D卷积核和Ni个尺寸为的1D(temporal维度的)卷积核,也就是说先用Mi个2D卷积核用输入数据生成channel数为Mi的tensor,之后再用temporal维度上的卷积将channel数变为Ni,也即是第i层输出channel数,这里超参数Mi是连接时间和空间卷积的intermediate subspace的维度(也就是channel数),这个参数的数量由下式确定

使用这个式子是想让R(2+1)D block的参数数量大致和完整的3D卷积block参数数量相等。

本文的实验部分就是对这些网络结构进行了试验,实验的结果是R(2+1)D网络在数据集Sports-1M、Kinetics、UCF101和HMDB51上达到或者是超越了state-of-the-art的水准,除此之外,实验结果还表明,在本文所用的数据集上,本文所使用的3D模型比2D模型效果要好,作者借此说明motion modeling的重要性,但是我觉得,在特定的数据集上,基于特定的网络结构,对比3D和2D卷积,而且只能从实验结果来分析,其实不一定能说明太多问题,没准不在resnet的框架下,或者换个数据集,整个实验结果就会改变。

你可能感兴趣的:(读书笔记29:A Closer Look at Spatiotemporal Convolutions for Action Recognition(CVPR2018))