Video Modeling (2014-2020)

Original article was published by Shin Lee on Artificial Intelligence on Medium


Single-Stream Networks

在 2015 年前,只有少數研究用 deep learning 來實現 action recognition 的研究,因為當時有許多 handcrafted feature (例如 iDT[1])準確度更高,更 robust。不過 handcrafted feature 的計算成本較高,比較難處理大量資料,又因為 CNN 在 image classification 和 object detection 非常成功,越來越多研究者投入這個領域,而以下這篇可以說是一篇開山之作。

Large-scale Video Classification with Convolutional Neural Networks (DeepVideo, CVPR 2014)

DeepVideo 用了兩個分支的 2D CNN 以不同「解析度」 encode 個別的 frames,fovea stream 只關注中心位置,而 context stream 處理整個 frames。不過它不算是之後會講到的 two-stream networks,因為它只是處理不同解析度但同類型的 feature,沒有特別處理其他 modeling 動態資訊的 feature。另外它的表現其實沒有比 handcrafted feature (iDT) 好,一個可能的原因就是因為他沒有處理動態資訊,或是 frames 之間的關聯,因此接下來的方法就會用不同設計來 modeling motion。

Two-Stream Networks

Two-Stream Convolutional Networks for Action Recognition in Videos (NeurIPS 2014)

這篇的兩個分支就處理了不同 feature。Spatial stream 以 2D CNN encode 單張 frame,temporal stream 則 encode stacked optical flow displacement。這是 CNN 首次超越 handcrafted feature。

Action Recognition with Trajectory-Pooled Deep-Convolutional Descriptors (TDD, CVPR 2015)

TDD 也是兩個分支,將 handcrafted 的 improved trajectories 和 CNN features 結合,設計了 trajectory-constrained pooling 將 CNN features aggregate 成一個向量,再用 linear SVM 分類。

Beyond Short Snippets: Deep Networks for Video Classification (CVPR 2015)

如果我們把影片看作 frames 的序列,那我們就可以用 RNN 來處理。這篇可以說是第一篇 CNN+LSTM 的嘗試。作者試了兩種方法對 CNN feature 做時間維度上的處理,五種 pooling 和五層 LSTM。不過 LSTM 相比 max-pooling 沒有進步太多。

Convolutional Two-Stream Network Fusion for Video Action Recognition (CVPR 2016)

這篇關注的問題是如何結合兩個分支的資訊。之前的研究通常是做 late fusion,也就是各自預測結果後再將兩者做 weighted average,但這可能不是最好的方式。因此作者嘗試了非常多方法,例如在 FC 層做 sum、取 max、bilinear、加一層 Conv 或 直接 concatenate;或在 Conv 層做 3D pooling 甚至加一層 3D Conv 等等。

Temporal Segment Networks: Towards Good Practices for Deep Action Recognition (TSN, ECCV 2016)

針對過去 two-stream 方法無法很好的處理長影片的問題,這篇提出一個簡單有效的策略,就是將影片切割成片段分開處理,再將資訊集合起來。

Deep Temporal Linear Encoding Networks (TLE, CVPR 2017)

TLE 改善上一篇在融合不同片段(segmental consensus)時過於簡化的只取 max 或 average 的問題,實驗後改成所有片段的 feature maps 做 element-wise 相乘,再和自己做 bilinear pooling。

3D CNN

而 two-stream networks 發展到一個程度後,因為其中一個 stream 的輸入來自 pre-computed optical flow,人們覺得計算成本和儲存空間還是太大,因此提出許多不需要 optical flow 的方法。3D CNN 就是其中一個蓬勃發展的領域。

Learning Spatiotemporal Features with 3D Convolutional Networks (C3D, ICCV 2015)

C3D 是一篇使用 3D CNN 的早期嘗試,將 VGG 16 中的 2D Conv 都換成 3D。不過效果並不好,比不上 handcrafted feature 和 two-stream networks。

Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset (I3D, CVPR 2017)

I3D 提出了兩個方法大幅提升 3D CNN 的表現,並收集了一個更大的動作分類 dataset Kinetics

  1. Inflating:直接使用在 2D Conv 表現很好的模型架構,而非重新設計。
  2. Bootstrapping:用 ImageNet pre-trained weights initialize 3D Conv weight,做法就是將 2D weight 在時間的維度上重複。

Learning Spatio-Temporal Representation with Pseudo-3D Residual Networks (P3D, ICCV 2017)

為了減少 3D Conv 計算量,P3D 將 3×3×3 的 kernel factorize 成 1×3×3 的 2D spatial kernel 和 3×1×1 的 1D temporal kernel,前者 model 空間維度,後者 model 時間維度。並搭配不同的排列方式和 residual connection 的位置可以設計出多種變形。例如用上圖的 P3D-A / B / C 就能將 ResNet 的 residual units 全部換成 P3D units。

ECO: Efficient Convolutional Network for Online Video Understanding (ECCV 2018)

另一個減少計算量的方式是在網路淺層用 2D Conv encode frames,深層再用 3D Conv encode 疊起來的 feature maps。

Non-local Neural Networks (CVPR 2018)

CNN 和 RNN 的設計都是在處理 local 資訊,要捕捉 long range dependency 就只能疊很多層(CNN)或做很多次(RNN),而在個過程中可能會損失不少資訊。這篇提出的方法是讓所有位置(時間或空間都可)的資訊都加入其他位置的資訊,類似 self-attention。至於如何 encode 位置之間的關係則有非常多種方法;具體而言,可以加入位置之間的 dot product,或先做 linear transform 再 dot product,或做完後取 exponential,甚至直接 concatenate。而這個新的 feature 就可以接入其他 networks 繼續處理。

SlowFast Networks for Video Recognition (ICCV 2019)

而 SlowFast 的點子受到視網膜兩種視覺細胞的啟發,分別處理快速的運動變化和精細的空間和顏色資訊,因此設計了兩個分支。Low pathway 以較大 channel size 的 kernel 接受較不連續的畫面輸入,fast pathway 以較小 channel size 的 kernel 接受連續畫面的輸入。若以圖中的代號描述,fast pathway 的 frame rate 是 slow 的 𝛼 倍,而 channel size 是 𝛽 倍(𝛽 < 1)。

X3D: Expanding Architectures for Efficient Video Recognition (CVPR 2020)

X3D 也是從 2D Conv 的架構延伸,擴大 2D kernel 的不同維度變成 3D kernel,而且 stepwise 的選擇要擴張的維度,也就是固定其他維度,用座標下降法訓練一個模型。加上使用 channel-wise separable convolution,最後得到一個十分輕量的模型。

Tutorial 的 speaker 認為這是一篇關於 3D CNN 非常好的 summary,十分推薦讀一讀這一篇。

Other Methods

Modeling Video Evolution For Action Recognition (CVPR 2015)

影片可以看作是 frames 的序列,所以我們可以讓模型學習為每部影片建構一個 ranking machine (function) 預測 frames 的順序,這個 ranking machine 的參數就可以當作這部影片的 representation 用在其他 downstream tasks。這一系列的研究也間接展示的時序的重要性,啟發了之後的 self-supervised 方法,例如 Shuffle-and-Learn[2]。

Compressed Video Action Recognition (CVPR 2018)

多數研究直接使用影片做為模型輸入有資料量過大的缺點,而且很多資訊其實都是重複的,因為兩個連續 frames 之間的差異其實不大。這篇參考了影片壓縮的技術,將輸入分成 I-frame:原本正常的 RGB frames 和 P-frame:與 I-frame 的差異,包含 motion vector (frames 之間粗略的色塊差異)和 residual(frames 之間的真實差異),並且用三個 CNN 分支個別 encode 再結合成最後的預測。另外因為 I-frame 包含最大量的資訊,用來 encode 的 CNN 也比另外兩個複雜。

Hidden Two-Stream Convolutional Networks for Action Recognition (ACCV 2018)

這篇為了避免 optical flow 的計算和儲存,讓模型(MotionNet)先產生類似 optical flow 的 features,再像 two-stream networks 那樣分開處理時間和空間的資訊後形成預測結果。這個想法也在其他研究中出現,像是 Optical flow guided feature[3] 和 Representation Flow[4]。

Trajectory Convolution for Action Recognition (NeurIPS 2018)

在 deep learning 之前,trajectory-based 的 feature iDT 是表現最好的方法,因此這篇結合 trajectory,將 temporal convolution 換成 trajectory convolution。具體而言,就像 Deformable Convolution Network (DFN)[5] 一樣透過學習卷積的偏移實現不規則形狀的卷積。作者讓卷積在時間軸上變形,就變成 trajectory convolution。

Temporal Relational Reasoning in Videos (ECCV 2018)

這篇透過讓模型學習影片前後時間點的畫面之間的關係,進而讓模型有時間順序的推理能力。做法是對於 k-frame relation, 隨機抽取 k 個 frames 的 CNN features 用 𝑔(兩層 MLP)encode 。2-frame relation 就是 𝑔(𝑓_𝑖, 𝑓_𝑗),3-frame relation 就是 𝑔(𝑓_𝑖, 𝑓_𝑗, 𝑓_𝑘)。抽取好幾組後相加再用 ℎ(一層 MLP)融合成預測結果。也可以堆疊不同的 k,讓模型能看到更多時間區段的資訊。CVPR 2020 的 Temporal Pyramid Network[6] 也是採用類似的想法並進一步提升分數。

TSM: Temporal Shift Module for Efficient Video Understanding (ICCV 2019)

TSM 想解決 3D CNN 計算量高的問題,並保留時間軸的連續訊息,因此提出在 2D CNN 中將 feature tensor 沿時間軸交替拼接 channel。這個操作不需要任何計算和參數,就可以融合不同時間的資訊。不過因為移動太多可能傷害到原本的空間資訊,因此 TSM 只移動部分 channels 並加上 residual connection。另外文中還分別討論 online 和 offline 的差異,因為 offline 有完整的影片,可以前後移動,online 就只能往前移動。

TEA: Temporal Excitation and Aggregation for Action Recognition (CVPR 2020)

TEA 想提出新的 motion feature 取代 optical flow,並認為之前的 motion feature 都在 frame-level 產生,更好的應該從 feature-level 製作,因此在 2D CNN 的架構中加入 motion excitation (ME) 和 multiple temporal aggregation (MTA) 兩個模組。

ME 的目標是根據 motion 對 feature channel 做 attention。在 ME 中,時間 t+1 的 feature 先做一個 2D Conv,再和時間 t 的 feature 相減變成 motion feature。對 t+1 做額外的 2D Conv 是因為 t 和 t+1 可能有空間上的 mismatch。接著相減後的 feature 再經過 2D Conv 後變成 channel attention weight,乘上原本的 feature 再加回原本的 feature,可以視為 residual,避免流失重要資訊。

MTA 的目標則是要解決過去依靠堆疊深層的 3D CNN 增加 receptive field 來處理 long-range 的 temporal 資訊,卻因此讓參數最佳化參數變得困難的問題。做法是不要堆疊太深的網路,改成將 feature 沿 channel 拆開,分開做 Conv,並加到下一個 channel 和下一個 channel 的 feature 一起做 Conv,最後再接起來,就能集合不同 receptive filed 能看到的資訊。