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)代表在特徵圖中的位置, 表示卷積操作的參數。
- 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,需要自己再嘗試一下。