0. 前言
1. 要解决什么问题
- 直接使用
3x3x3
的3D卷积可能会导致参数过多、运算量较大、难以训练等诸多问题,所以一般会分解为1x3x3
的 spatial convolution 以及3x1x1
的 temporal convolution。 - 使用3D卷积提取视频特征的时候,spatio-temporal contexts 很可能处于一个Limitted view(受限的范围)内。
- 下图(High jump动作)就是 temporal convolution 常见的一种 Limited view 情况。
- 大概意思是在t-1或t+1时同一个位置的信息可能会妨碍对t时刻本身动作的分类。
2. 用了什么方法
- 提出了SmallBig Unit
- 基本思想就是在SmallBig Unit中分类Small/Big两路,结构如下图所示。
- Small:普通的
1x1x1
卷积 - Big:
3x3x3
max pooling +1x1x1
卷积。- 3D max pooling 可以用来选择最合适的上下文信息,从而解决开头提到的问题……
- 上面两条分支的
1x1x1
卷积是共享参数的。
- 从公式角度理解SmallBig Unit。
- 普通的Temporal Convolution的形式:
- x代表输入,y代表输出,t代表时刻,(h, w)代表在特征图中的位置, Θ \Theta Θ 表示卷积操作的参数。
- SmallBig Unit
- small view 就是普通的
1x1x1
卷积,big view是先3x3x3
max pooling +1x1x1
卷积。 - 两个
1x1x1
卷积是共享参数的。
- small view 就是普通的
- 普通的Temporal Convolution的形式:
- SmallBig Block
- a是普通2D block,即在temporal dimension上没有做什么操作,对应卷积核都是1。
- b是普通3D block,在non-local中使用,将
3x3x3
转换为3x1x1
+1x3x3
,其他就是普通resnet block。 - c-e是带有 SmallBig Unit 的Block。
- e中的T一般就是输入的帧的数量。
- e中要这么做的原因是,在通过 前几部卷积后,空间(spatial)上的感受野很大,所以时间上(temporal)也要同样增加,就通过e中
Tx1x1
的结构来增加。 - f在e的基础上增加了一个small big block,说是把新增的这个当做是attention。
- SmallBig-ResNet
- SmallBig的功能与Non-local类似。
3. 效果如何
- 在Kinetics-400上做了一大堆实验:
- 说明了smallbig提高了多少点,在那些stage上使用smallbig,smallbig中max pooling的尺寸,是否共享参数,在backbone为resnet-23的时候甚至超过普通的backbone为resnet-50的情况
4. 还存在什么问题
-
代码尚未开源,等待大佬。
-
看起来是用来提到Non-local的,对比了GFlops,但没提inference time,需要自己再尝试一下。