[論文筆記] two-stream和two-stream fusion

[論文筆記] two-stream和two-stream fusion

論文概述

純屬個人理解,梳理自己思路用,僅供參考(可能會有標點錯誤或語句不通順 +_+)

這裡討論最原始的two-stream,一篇是2014年的Two-Stream Convolutional Networks for Action Recognition in Videos,另一篇是2016年的Convolutional Two-Stream Network Fusion for Video Action Recognition

Two-Stream

本文的貢獻點:1.提出two-stream ConvNet來對時空特徵進行建模表示。2.提出了多幀光流作為輸入,對性能提升作用很大。

  • 光流

    圖像中物體的運動可以用密集光流場來可視化描述,為了是cnn網路對motion建模,堆疊多幀光流作為輸入,訓練網路是一種可行的方法。光流描述了運動的矢量,因此在可視化時,可以分別可視化x和y兩個方向,如下圖所示:

  • Temporal ConvNet的輸入

    運動特徵作為網路的輸入,有以下幾種方式:

  1. Optical flow stacking: 輸入的大小為w×h×2L,L表示堆疊的幀數。可以描述輸入map某個位置的光流變化。
  2. Trajectory stacking: 輸入大小為w×h×2L,L表示堆疊的幀數。用來描述一個對應特徵點連續的光溜變化。兩者區別如下圖所示:

    1. Bi-directional optical flow: 輸入大小為w×h×2L,由於是雙向的,L/2表示堆疊的幀數。
    2. Mean flow subtracion: 用來去除部分相機運動對光流的影響。

      以上集中方式的實驗結果如下:

  • Two-Stream 網路結構

    雙流網路的結構,由兩個獨立的網路構成,Spatial stream ConvNet的輸入是單張圖像,用來對目標和場景的appearance提取特徵(有些action的識別依賴單張圖像就夠,有些則必須依賴運動和時間特徵)。Temporal stream ConvNet的輸入是多張相鄰幀的光流,對motion特徵進行表示。通過兩個網路的softmax輸出向量進行融合,來最終確定分類,如下圖所示:

由於當時的video數據集較少,數據集間有存在不小的差異,以此為了利用多個數據集,論文提出Multi-task learning的方法,通過在對應數據集上設置最後分類層,其他層保持不變,進行fine-tuning模型。

通過對光流輸入的可視化可以看出,Temporal stream ConvNet能夠學到部分運動變化,和部分外觀變化,如下圖所示。

Two-Stream Fusion

本文的貢獻點:1.特徵融合 詳細討論了不同的fusion方法,同時指出不在最後softmax層融合,而是增加conv layer進行融合。2.spatial network在最後一層conv再添加一次融合,效果好。3.在spatio-temproal的特徵上pooling效果會更好。

相對上一篇在softmax上進行fusion,這樣的不能提取有效時空特徵。

  • Spatial fusion

    既然主觀上指導有效合理的特徵融合有助於最後的分類,那麼如何進行fusion?對於空間像素級的對應關係,在特徵融合中起重要作用,只要確保兩個網路特徵圖的尺寸大小相同就可以融合。那麼問題又來了,channel上怎麼辦?下面就介紹集中channel融合的方法。通道融合需要確定fusion函數,這裡假設兩個網路的通道數也是想等的。

  1. Sum fusion: 按對應channel進行矩陣對應位置元素加和,通道數為D。
  2. Max fusion: 按對應channel進行矩陣對應位置元素取最大值,通道數為D。
  3. Concatenation fusion: 將channel堆疊起來,通道數為2D。
  4. Conv fusion: 先將channel堆疊起來,在用1×1的卷積做通道壓縮,通道數為D。
  5. Bilinear fusion: 遍歷channel計算矩陣乘法,會導致通道數驟增,通道數為D×D。說好點是對所有信息融合,說壞點就是分不清主次。

    網路結構如下圖所示,左圖由於融合,上層只能有一個網路keep,另一個網路則被截斷。下表顯示各種fusion方法達到的效果。

  • 在哪裡進行fusion

    根據上面的論述,應該在哪裡融合,又要保證輸入的H、W、D都一致?如上面的圖中右邊結構所示。先在conv5處進行融合,然後又在fc8進行融合。

    下表比較了Conv fusion在不同位置處效果。過早融合不好,過晚也不好。
  • Temporal fusion

    作者思考如何將特徵在空間和時間上更好的融合,想到了3D pooling3D conv兩個操作。如下圖所示。3D pooling利用3×3×3的max pooling來實現。3D卷積的尺寸大小為3×3×3,即W×H×T×D×D。

  • 模型結構

    網路結構基本上面圖中右邊的一致,只不過左邊的spatail-temporal network最後融合之前用了3D conv和3D pooling。右邊的temporal network也不用截斷了,最後一層用了3D pooling。網路的輸入,每次輸入為時間精細fine temporal,輸入間隔用了大的時間間隔coarse temporal。訓練時通過spatail-temporal loss和temporal loss分別訓練。

實驗結果如下表所示,詳細實驗結果與對比請參考文論。


推薦閱讀:

TAG:深度學習DeepLearning | 計算機視覺 |