3D卷积

3D卷积方法是把视频划分成很多固定长度的片段(clip),相比2D卷积,3D卷积可以提取连续帧之间的运动信息

即,3D卷积将视频多帧进行融合

 

 

1. C3D

paper: D. Tran, et al. Learning spatio-temporal features with 3D convolutional networks. ICCV'15.

Tran等人提出C3D,其将3×3卷积扩展到3×3×3卷积,2×2汇合扩展到2×2×2汇合。输入片段16帧。实验中发现,时域方向卷积核大小为3效果最好。相比2D CNN,3D CNN的参数量很大,训练变得更困难,且需要更多的训练数据。相比其他类型的方法,C3D一次处理多帧,所以计算效率很高

想到卷积,两大特性,局部连接和权重共享,那么3D卷积的构造也要遵循这两大特点。2D卷积作于单张image,可以很好符合两大特点,但是不能提取时间特征,如果是作用于multi-image上,虽然能融合所有图片特征,但是没有符合时间轴上局部链接的特点,因此对时间特征提取不是那么有效。很自然就能想到3D卷积的形式,如下图所示。那么对于pooling操作,2D卷积可以通过stride来控制空间上的池化,对于时间上的池化,需要3D卷积在时间维度上设定stride。

*3D卷积:

对于用3D卷积构建的网络,要避免在前几层用2D卷积和2D池化的方式构建,应该选用3D卷积搭建。网络的输入c×l×h×w(通道×帧数×高×宽),视频序列被压缩到128×171,帧数设为16,因为是从头训练,数据增强很重要。利用2D识别的经验,大多数卷积大小为3×3,因此需要确定时间维度的大小,作者做了两种实验,一个是所有卷积都是一样的,有相同的temporal depth。二个是变化temporal depth。通过对比实验,得出3×3×3卷积核效果最好。

*网络结构:

网络有8个卷积层(filter:3×3×3,stride: 1×1×1),5个池化层(filter:2×2×2,stride: 2×2×2,除了第一个filter:1×2×2,stride: 1×2×2),2个全链接层(4096),和1个softmax分类层,最终的网络结构如上上图所示。

*时空特征解释:

作者通过deconvolution网络的feature map,发现刚开始几帧3d卷积捕捉appearance,后续帧更多关注motion的显著性特征。

3D卷积_第1张图片

 

2. C3D的分解

paper: L. Sun, et al. Human action recognition using factorized spatio-temporal convolutional networks. ICCV'15.

Sun等人把3D卷积分解为空间方向2D卷积和时间方向1D卷积。

 

3. I3D

paper: J. Carreira and A. Zisserman. Quo vadis, action recognition? A new model and the Kinetics dataset. CVPR'17.

 

论文主要贡献是提出了Inflated 3D conv,为了应对视频分类领域数据集缺乏,避免之前只能从头在小数据上训练的囧境,文章利用I3D将在Imagenet上训练成功的经典模型迁移学习到video数据集上,并借助two-stream结构实现了目前最好的效果,80.9%(HMDB)和98.0%(UCF-101)。

 

*行为分类的结构:

 

基于静态图片的cnn已经有很多有效的网络结构,而基于视频的cnn目前处于发展阶段。视频相关的网络结构区分,可以根据是使用2D conv还是3D conv?是使用RGB输入还是RGB+optical flow?是使用LSTM做时间建模还是通过其他方式融合temporal特征?简要的可以分为以下四种结构,除了C3D的网络,其他都或多或少利用Imagenet的训练模型。

 

 

方法1:ConvNet+LSTM
该方案主要考虑到cnn在图像分类领域的成功以及LSTM对于序列建模的能力,很自然提出将两者结合起来的方案。如果只是用cnn的话,需要对每一帧都提取特征,然后将视频的所有帧特征进行总汇,以此来表达对视频的表示,显然这样做忽略的时间结构特征。而LSTM可以处理长时间依赖的问题,可以对视频从第一帧开始建模直到最后一帧,使用cnn网络对每帧提取特征,然后将特征送入LSTM来捕捉时间特征,最后一帧的输出用来对视频特征表示。
LSTM往往依赖cnn的最后一层特征最为输入,因此不能够捕捉到low-level motion的特征,而且对于遍历整个视频也很难去训练。

 

方法2:3D ConvNets3D ConvNets是对视频建模最自然的方式,和标准cnn区别在于由2d conv变为3d conv,来捕捉spatio-temporal feature。想法很好,但目前遇到一些问题,问题一:3D ConvNets3d conv多了一个维度,参数量有较大增加,这将会很难去训练。问题二:没有利用那些Imagenet上成功的预训练模型来迁移学习,往往使用层数少的cnn在小数据集上从头训练。简要说就是要利用已有预训练模型,要减少参数或增大数据集。(论文中实现了C3D(与原版略有差异)有8 conv layer、5 pooling layer 和 2 fc layer,并在所有圈卷积层和fc层加bn。输入是16×112×112(通过crop方法),将第一个pooling layer对时间的stride由1变成2,为了可以减少memory和允许更大batch。)

 

方法3:Two-Stream Networks
该方案利用短的视频段来建模,用每个clip的预测分数平均的方式(其实C3D也是类似),但不同的是输入,包括一张RGB和10张optical flow(其实是5张,x/y两个方向,运动特征)。模型能使用two-branch方式,利用预训练的imagenet模型,最后将预测结果平均下(最原始的,或者在最后softmax做融合),这样建模的模型比较好训练,同时也能获得更高的分数。
模型的两个输入流也可以在后面的cnn层来进行融合,以提升相同,同时可以end-to-end训练。论文实现一个类似的two-stream方案,在最后一层用3d conv将spatial和flow特征进行融合。

 

方法4:Two-Stream Inflated 3D ConvNets
该方案是论文提出的,出发点是要利用imagenet的预训练模型,同时利用3d conv来提取RGB streamtemporal feature,最后再利用optical-flow stream提升网络性能,也就大融合的方案(把有效的技巧都用上)。
通过对预训练的2D conv增加temporal维度,把N×N的filter变为N×N×N。简单的办法就是对N×N的filter重复复制N遍,并归一化,这样多的出发点是短期内时间不变性的假设,姑且把这当成3D filter初始化的一种策略吧。
池化操作怎么膨胀?stride怎么选?主要依赖感受野尺寸,如果图像水平方向和竖直方向相等,那么stride也相等,而且越深的特征感受野越大。但是考虑到时间因素,对称感受野不是必须的,这主要还是依赖帧率和图片大小。时间相对于空间变化过快,将合并不同object的边信息,过慢将不能捕捉场景变化。
虽然3D conv能够捕捉motion信息,但是与光流优化的方式和效果还是不一样,因此使用two-stream的方式构建,并分开训练两个网络。

 

 

 

4. P3D

 

Qiu等人提出P3D,用一个1×3×3的空间方向卷积和一个3×1×1的时间方向卷积近似原3×3×3卷积。通过组合三种不同的模块结构,进而得到P3D ResNet。P3D ResNet在参数数量、运行速度等方面对C3D作出了优化。

 

 

* P3D conv
3d卷积被解耦为2d空间卷积和1d时间卷积,得益于分解,可以将其放置在resnet的残差block中,设计多种P3D模块。
这样做的话,2d空间卷积可以利用imagenet上预训练模型做迁移学习。作者依据空间卷积与时间卷积操作先后和如何对output的影响这两点,主要设计P3D-A,P3D-B,P3D-C三种block。
P3D-A:采用级联的方式,时间卷积作用于空间卷积之后。时间卷积的输出作为最终输出。
P3D-B:采用并联的方式,时间卷积和空间卷积分别对输入操作,然后加和作为最终输出。
P3D-C:采用混合的方式,融合上述两种模块。

 

* P3D ResNet
分别对三个模块组成的ResNet-50做实验,有四组,最后一组是三种模块的混合,混合的顺序是P3D-A->P3D-B->P3D-C,结果如下表所示

 

 

5. R(2+1)D

Tran等人提出ResNet (2+1)D,把一个3D卷积分解成为一个2D卷积空间卷积和一个1D时间卷积,注意这里的参数量和原3D卷积相同。相比P3D有三种形式,(2+1)D和P3D-A最接近。

本文和上篇差不多,不过主要贡献在于使用一种最基础的block的ResNet网络取得了比较好的结果,在block设计上保持分解后的参数量和3D卷积参数量一致,以此来增强模型表达能力。作者通过对比几种video分类架构,表明R(2+1)D效果出众。

以下对比实验中,base network选用ResNet,使用原始不带bottlenecks的残差模块。

 

  • R2D
    R2D模块就是传统的2d卷积,将输入c×l×h×w看作是cl×h×w(把多张当作一整张),只是将2d卷积作用于multi-frames上。将整个输入的clip的时间维度压缩到了一个通道上,不能有效提取时间信息。还有一种是f-R2D,采取相反的方式,分别对每帧做操作,在最后全局池化层在做所有帧的信息融合。
  • R3D
    R3D模块就是前面讲的C3D模块,只不过是放到ResNet网络中。不能利用预训练模型,只能从头开始训练。
  • MCx and rMCx
    这种方案是混合上述两种模块在一个网络中,MCx是认为时间信息依赖前几层,rMCx是认为时间信息依赖后几层。这里x表示从第几层开始2d卷积和3d卷积切换。实验认为MCx要比rMCx合理些。
  • R(2+1)D
    该模块认为3D卷积可以利用2D卷积和1D卷积来逼近,但要保证参数相同,因此作者设计了2d卷积和1d卷积filter个数的匹配公式。相比于R3D,虽然参数没变,但由于R(2+1)D添加更多Relu激活层,模型的表达能力应该更强,同时也更容易训练优化。相比于P3D,R(2+1)D更接近P3D-A,把R(2+1)D都设计为相同的block,但P3D的第一层使用的是2d卷积。

 

 

6. Non-local neural networks

 

可以看作是3D卷积的一个扩展。3D卷积的感受野是有限区域,而non-local旨在解决长距离依赖问题。

 

Non-local的响应是所有空间和时间位置特征的加权平均:

 

 

用于度量相似性,计算响应, 用于归一化。

 

你可能感兴趣的:(3D卷积)