1. 程式人生 > >【論文閱讀】Beyond Short Snippets: Deep Networks for Video Classification

【論文閱讀】Beyond Short Snippets: Deep Networks for Video Classification

【論文閱讀】Beyond Short Snippets: Deep Networks for Video Classification

之前3DCNN網路的論文算是記錄完了,雖然最近又出了幾篇,但是時間有限,很快要去實習去了,剩下的以後有時間再講吧。
本篇論文算是CNN+LSTM網路結構的開山之作,其實對於視訊分析和行為識別這個任務目標,我們自然而然地想到的就是CNN+LSTM這種網路結構,簡潔優雅,至於為什麼這種方法沒有達到理想中的結果,我們會根據之後的改進論文去進一步分析
論文地址:下載地址
程式碼地址(pytorch):下載地址

正文

這篇論文是15年的論文,很早了,當時3DCNN方法還是受限於資料集太小,所以主流的方法還是CNN+時間建模的方法,所以本文的作者實驗了 CNN+時間池化 和CNN+LSTM兩種方法,因為這篇部落格主要是記錄CNN+LSTM方法的,所以本文中的CNN+時間池化的方法就順便一提。

CNN+時間池化的方法

當時時間池化的方法一般包含平均池化、加權平均池化、最大池化。但是本文通過實驗發現還是最大池化的效果比較好,所以本文中所有池化的方法都是最大池化。本文設計了五種CNN+池化的網路結構,每一種都有不同的特點,通過分析不同的網路結構也可以瞭解作者的思考方式,也是有益處的。五種網路結構如下所示:(下圖中磚色是卷積層,藍色是最大池化層,綠色是時域卷積層,黃色全連線層,橘色softmax層)

  1. Conv Pooling:第一種結構稱為卷積-池化結構,其在卷積層的輸出增加一個最大池化層,然後再連線兩個全連線層,這種網路結構的特點是 因為卷積網路輸出的卷積特徵圖都會保持其輸入的空間結構,即卷積特徵圖的響應值與其感受野是相互對應的。所以通過最大池化可以沿著時間保留其空間資訊

    在這裡插入圖片描述
  2. Late Pooling:第二種結構稱為滯後池化結構,這種結構首先將每一幀計算的卷積特徵圖通過兩個全連線層,然後對全連線層的輸出沿著時間最大池化,這種網路結構與Conv Pooling結構相比,不會保留池化前特徵的空間結構,而是直接組合高維抽象特徵的時間動態
    在這裡插入圖片描述
  3. Slow Pooling:第三種結構稱為慢速池化結構,這種結構使用一個時間視窗分級地組合輸入中的時間資訊,對於卷積網路的輸出,首先使用滑動視窗最大池化組合輸入的區域性時間資訊,然後對每個區域性時間組合連線全連線層,再對全連線層的輸出結果通過最大池化組合全部的區域性運動資訊,最後通過全連線層獲得最終的結果。這種網路結構的特點是在組合高維抽象的特徵之前,可以先組合區域性的時間運動資訊

    在這裡插入圖片描述
  4. Local Pooling:第四種結構稱為區域性池化結構,這種結構和Slow Pooling很像,對於卷積網路的輸出,首先使用滑動視窗最大池化組合輸入的區域性時間資訊,然後對每個區域性運動特徵連線兩個全連線層直接獲得抽象區域性運動特徵。這種網路結構與Slow Pooling的不同點在於該網路結構不會組合輸入的全域性運動資訊,從而減少了時間資訊的丟失(因為每一次時間池化都會丟失一定的時間資訊)。
    在這裡插入圖片描述
  5. Time-Domain Convolution:第五種結構稱為時域卷積結構,這種結構與前邊的四種結構相比多了一層時間卷積層,相當於在Conv Pooling結構的最大池化層之前增加一層時間卷積層。這種結構的特點是因為增加了時間卷積層,所以可以在最大池化層之前組合更短時區域性的時間資訊。
    在這裡插入圖片描述

CNN+LSTM的方法

總算要介紹CNN+LSTM的方法了,因為是第一次介紹CNN+LSTM的論文,所以我就先詳細地介紹一下RNN和LSTM的基礎(大神請跳過),然後再詳細地介紹本文中的CNN+LSTM的網路結構。

RNN和LSTM的基礎講解

迴圈神經網路RNN是用來對時間序列資料進行建模的,該網路結構會對前面的輸入資訊進行記憶,並結合當前的輸入,計算出當前的輸出。其非展開結構與展開後的結構如下圖所示:
在這裡插入圖片描述
根據上圖可以得到如下公式:
{ o t = σ ( v . s t ) s t = σ ( u . x t + w . s t 1 ) \begin{cases} o_{t}=\sigma (v.s_{t})\\ &&&&\vdots\\ s_{t}=\sigma (u.x_{t}+w.s_{t-1}) \end{cases}
上式展開之後如下式所示,就能看到為什麼說當前的輸出會受到前面時刻輸入的影響了。
o t = σ ( v . σ ( u . x t + w σ ( u . x t 1 + . . . ) ) ) ) ) ) o_{t}=\sigma (v.\sigma (u.x_{t}+w\sigma (u.x_{t-1}+...))))))

LSTM 網路結構要比RNN複雜一些,但是萬變不離其中,結構圖太難畫了,latex公式也太難打了,我直接把結構圖和公式圖片貼上了。LSTM的結構圖如下圖所示:
在這裡插入圖片描述
LSTM主要通過3個門來控制資訊流,(3)是輸入門,(4)是遺忘門,(6)是輸出門,(5)是用來儲存歷史資訊的cell,還是挺好理解的。
在這裡插入圖片描述

CNN+LSTM網路結構

文章中的CNN+LSTM結構中使用的是5層的LSTM網路,每一層包含512個記憶單元,最頂層連線softmax層用於分類,其結構如下圖所示,也是很好理解的:
在這裡插入圖片描述

訓練細節

CNN為AlexNet和GoogLeNet,在ImageNet上提前預訓練。CNN和池化或者LSTM的訓練是分開的,先使用單幀訓練CNN,LSTM的每一個時刻的輸出都計算損失,同時也加入光流作為輸入,光流在15fps的視訊中計算,首先篩選出數值在[-40,40]的光流,然後將其歸一化到[0,255],第三個通道全部設定為0。

實驗結果

挑選了一些有意思的實驗。

五種卷積+池化網路結構的實驗結果對比

文章首先實驗了5種卷積+池化的網路結構,實驗結果如下圖所示:
在這裡插入圖片描述
由上圖可以看到實驗效果最好的還是Conv Pooling。

輸入視訊幀長對實驗結果的影響

文章同時實驗了輸入幀長變化對實驗結果的影響,如下圖所示:
在這裡插入圖片描述
文章只在 conv pooling 網路結構上做了對比實驗,可以看到隨著輸入幀長的增加,clip 和 video 的準確率都是提高的,這和3D卷積網路中的 LTC的結論差不多:輸入較長時間的視訊訓練可以得到更好的效果。
其他的實驗就不說了。