1. 程式人生 > >【論文閱讀】Rethinking Spatiotemporal Feature Learning For Video Understanding

【論文閱讀】Rethinking Spatiotemporal Feature Learning For Video Understanding

【論文閱讀】Rethinking Spatiotemporal Feature Learning For Video Understanding

這是一篇google的論文,它和之前介紹的一篇facebook的論文的研究內容非常相似連結地址,兩篇論文放到ArXiv上只相差了一個月,但是個人感覺還是google的這篇寫得好一些。(這篇部落格解讀的是早期版本的論文,後來新的版本的論文又在Something-something資料集上做了實驗,所以一些圖表和本文有些出入,舊版的論文10頁,新版的論文17頁。。
論文地址:下載地址
S3D-G程式碼(pytorch):下載地址

正文

3D卷積網路與2D卷積網路相比,始終存在著網路引數量太大而且計算效率不高的問題,但是3D卷積網路的準確率又明顯好於2D卷積網路,所以為了解決這個問題,我們需要思考以下幾個點:

  1. 3D卷積網路中是否需要全部都是3D卷積核?是否可以設計一個網路同時包含 2D卷積核和3D卷積核 來達到準確率與計算效率的 trade-off 呢?
  2. 是否可以通過分解3D卷積核為 2D+1D 卷積核的形式 來解決這個問題呢(雖然之前的P3D已經提出了(2D+1D)的方法,但是沒有在kinetics資料集上做實驗,不夠完整)
  3. 我們如何使用上面思考的這些點來提升目前網路的效能?

對於第一個思考點

,本文基於I3D來構建網路,在I3D網路中混合2D和3D卷積核,一種是Bottom-heavy-I3D-K,即前K個底層的卷積核為3D卷積核,其餘為2D核,但是這種 bottom-heavy的結構可能計算效率也不是很高。另一種是 Top-heavy-I3D-K,即I3D網路的前K個頂層為3D核,其餘為2D核。
對於第二個思考點,使用(2D+1D)卷積核來代替3D卷積核,這樣的網路稱為S3D網路,S3D網路引數少而且計算效率高,實驗結果表明S3D網路的結果也要好於I3D網路。

各種網路結構

基本的I3D網路

本文的基礎網路為I3D網路,之前也詳細地介紹過連結地址,其基本的結構如下圖所示:
在這裡插入圖片描述


I3D是基於3D Inception block的,3D Inception block 與 2D Inception block 的對比如下圖所示:
在這裡插入圖片描述

Bottom-heavy-I3D-K網路和Top-heavy-I3D-K 網路

和之前介紹facebook那篇論文一樣,對於同時包含3D卷積核與2D卷積核的網路,可以分為Bottom-heavy-I3D-K網路和Top-heavy-I3D-K 網路,其中Bottom-heavy-I3D-K表示把I3D網路中的前K個底層的3D卷積核保持,而其餘的卷積核為2D卷積核。Top-heavy-I3D-K網路表示保持I3D網路中前K個頂層的3D卷積核不變,其餘的卷積核為2D卷積核。其中Bottom-heavy網路與Top-heavy網路的結構如下圖所示:
在這裡插入圖片描述

S3D網路

文章將因式分解3D卷積核為 2D+1D 卷積核的I3D網路稱為S3D網路,其中分解的Inception block如下圖所示:
在這裡插入圖片描述
使用分解的Inception block組成的I3D網路稱為S3D網路,其結構如下圖所示:
在這裡插入圖片描述

S3D-G網路

最後文章參考了17年ImageNet冠軍提出的S-E block方案,提出了S3D-G block,並以此搭建了S3D-G網路,文章中說得gating其實相當於一種attention map,或者說是一種加權的方式,我們使用squeeze-excitation的方式來講解gating的過程更容易理解。如下圖所示:
在這裡插入圖片描述

根據上圖就很容易理解論文中的gating操作了,首先對於尺寸為 CxTxHxW 的 feature map 進行 squeeze操作,也就是文章中的pooling操作,文章分別使用了 空間-時間池化、空間池化、時間池化、不做池化等方法,然後對squeeze的結果進行excitation操作,使用一個變換矩陣將上一步池化的結果變換為尺寸為 C 的加權向量或者說是注意力向量。變換矩陣的尺寸和池化的結果尺寸有關。最後使用該加權向量對原特徵圖中的channel維度進行加權。得到最終的 S3D-G模組。

各種網路的實驗結果

3D卷積網路與2D網路的比較

首先我們看一下3D卷積核到底帶來了多少價值,將I3D中的3D卷積核全部替換為2D卷積核,稱該網路為I2D,理論上I2D不會捕獲視訊的時間動態,所以其應該對視訊的順序不敏感,於是作者在正常的順序中分別訓練I3D和I2D,然後測試的時候分別測試輸入為正常順序、隨機打亂的順序和倒序的情況,實驗對比結果如下:
在這裡插入圖片描述
可以看到I2D完全不會捕獲時間動態序列,打亂視訊的幀順序準確率也不會降低,有意思的是3DCNN 正向順序資料訓練後,測試反向順序視訊,其準確率差不多。文章認為是因為kinetics資料集並不需要因果推理。

Bottom-heavy-I3D-K網路和Top-heavy-I3D-K 網路的結果

文章實驗了Bottom-heavy-I3D-K網路與Top-heavy-I3D-K的網路實驗結果,如下圖所示:
在這裡插入圖片描述
上圖中藍色的實線和藍色的虛線分別表示Top-heavy與Bottom-heavy網路,可以看到很明顯Top-heavy的效能要遠遠地好於Bottom-heavy,說明在視訊的語義抽象層捕獲視訊的時間動態資訊要好於在視訊的畫素級捕獲視訊的時間動態資訊(與之前的facebook的論文的結論剛好相反,不知道是不是因為那一篇是Res3D,而這一篇是I3D,但是這篇論文的觀點很讓人信服)。為了進一步瞭解3D卷積網路不同層對於時間動態資訊的學習,文章對從底層到頂層的卷積核進行了視覺化,如下圖所示:
在這裡插入圖片描述
在訓練之前,同一個3D卷積核的不同時間的權值都是按照同一套方法初始化的(如圖每一個小方格中的彩色塊,可以看到不同時間的寬度值一樣),然後訓練之後的的權值使用兩端封閉的線表示,可以看到在底層的卷積核中,卷積核中間時刻的權值很突出,所以其對時間不敏感,頂層的卷積核中,不同時刻的卷積核值的分佈相似,所以學習到了時間動態特徵。
所以在目前的3D卷積網路中,網路頂層的3D卷積核更容易學習到視訊中的時間動態,我在想會不會是因為目前的視訊包含大量的相機抖動,所以卷積核底層畫素級的時間動態很混亂。

S3D的實驗結果

文章同樣實驗了S3D網路的結果,如下表所示:
在這裡插入圖片描述
可以看到S3D網路無論是準確率、模型容量、還是計算效率都比原始的I3D要好。同時也可以根據之前介紹的2D+3D網路來構建Bottom-heavy-S3D-K網路和Top-heavy-S3D-K 網路,其結果如下圖中的橙色線段,可以看到以S3D為基礎的網路整體上優於以I3D為基礎的網路,其中標記的 Fast-S3D網路是準確率與計算效率 trade-off最優的結果。
在這裡插入圖片描述

gating中最優的池化方法

之前介紹gating時講到本文不同gating之間的區別就是池化方法的不同,文章當然也做了不同的池化方法的對比實驗,實驗結果如下表所示:
在這裡插入圖片描述
可以看到最優的池化方法還是空間和時間同時池化。

S3D-G的最終結果

最後的S3D-G 在kinetics上與之前的I3D相比,計算效率更高,準確率更高。
RGB輸入的結果如下表所示:
在這裡插入圖片描述
光流輸入的結果如下表所示:
在這裡插入圖片描述