基於3D卷積神經網絡的人體行爲理解(論文筆記)

基於3D卷積神經網絡的人體行爲理解(論文筆記)

[email protected]

http://blog.csdn.net/zouxy09

 

       最近看Deep Learning的論文,看到這篇論文:3D Convolutional Neural Networks for Human Action Recognition。比較感興趣是CNN是怎麼應用於行爲理解的,所以就看看。這篇論文發表在TPAMI2013。它基本上沒有公式的,論文傾於從論述角度描述它的基本方法和實現效果。另外,對於怎麼去訓練也沒有具體的介紹,不知道和普通的用於二維圖像的卷積神經網絡有什麼差別。另外,下面的總結是翻譯加自己的理解組成的,學識有限,如有錯誤,還望大家不吝指導。

       該文關注的是在監控中人類行爲的自動識別問題。這點還是挺有應用價值空間的,它可以自動的理解識別監控中人的異常行爲,例如打架啊,偷東西啊,老人摔倒啊,聚衆事件啊,入侵啊等等。這些行爲如果可以檢測出來,在安防等領域還是有很大價值的。還記得電影上面那些保安每天都坐在無數的監控屏幕前,永不停息的睜開着疲乏的雙眼……

 

一、概述

       上面說到,人類行爲識別很重要。在現實的環境中,不同的場景存在雜亂背景、阻擋和視角變化等等情況,對於人來說,很容易就可以辨識出來,但對於計算機,就不是一件簡單的事了。而以前的Human Action Recognition方法都是基於一些對應用場景苛刻的假設上的,例如目標小的尺度變化和小的視覺改變等。但這在現實世界中是很難滿足的。

        目前,在這方面,大部分當前的打法都是遵循兩個步驟:

1)在原始的輸入中提取複雜的人工特徵;

2)在獲取的特徵上學習分類器。

       但在現實世界的場景中,我們幾乎很難知道對於一個具體的任務什麼樣的特徵纔是重要的,因爲特徵的選擇與具體的問題高度依賴。特別是行爲識別上,不同的運動類型在外觀和運動模型上都呈現出非常大的不同。

        CNN卷積神經網絡是一種深度模型。它其實老早就已經可以成功訓練並且應用了(最近可能deep learning太火了,CNNs也往這裏面靠。雖然CNNs也屬於多層神經網絡架構,但把它置身於DL家族,還是有不少人保留自己的理解的)。它在原始的輸入中應用可訓練的濾波器trainable filters和局部鄰域池化操作local neighborhood pooling operations,得到一個分級的且逐漸複雜的特徵表示。有實踐表示,如果採用合適的規則化項來訓練,它可以達到非常好的效果。CNN還讓人青睞的一點就是它會對例如姿勢、光照和複雜背景存在不變性。

        CNN牛逼就在於它是一種可以直接在原始輸入就大展拳腳的深度模型。然而,讓人心淡的一點是,它雖然具有強大的功力,但目前它宏大的夢想只受限在2D輸入的舞臺。但對於有夢想的人,這也是讓人心動的一點,因爲還有改進和上升的空間。這篇文章提出了一個新的3D CNN模型,用於運動識別。該模型可以從空間和時間的維度提取特徵,然後進行3D卷積,以捕捉從多個連續幀得到的運動信息。

      該論文的貢獻,其自組織爲:

1)提出通過3D卷積操作核去提取視頻數據的時間和空間特徵。這些3D特徵提取器在空間和時間維度上操作,因此可以捕捉視頻流的運動信息。

2)基於3D卷積特徵提取器構造了一個3D卷積神經網絡。這個架構可以從連續視頻幀中產生多通道的信息,然後在每一個通道都分離地進行卷積和下采樣操作。最後將所有通道的信息組合起來得到最終的特徵描述。

3)提出通過計算高層運動特徵得到的輔助輸出來增強模型。爲了應對不同環境的使用,還綜合多個不同的CNN架構去綜合判斷識別結果。

4)在TRECVID數據集中測試,並和一些基準方法進行比較。其實驗證明文中方法outperforms二維CNNs方法和其他的基準方法。

      那下面我們就依次來看看這些貢獻的細節。

 

二、3D卷積神經網絡

13D卷積

       在video中應用CNN一個簡單的方法就是對每一幀運用CNN來識別,但是這種方法並沒有考慮到連續幀間的運動信息。爲了有效的綜合運動信息,文中提出了一種3D卷積的方法。通過在CNNs的卷積層進行3D卷積,以捕捉在時間和空間維度都具有區分性的特徵。

 

        3D卷積是通過堆疊多個連續的幀組成一個立方體,然後在立方體中運用3D卷積核。在這個結構中,卷積層中每一個特徵map都會與上一層中多個鄰近的連續幀相連,因此捕捉運動信息。例如上面左圖,一個卷積map的某一位置的值是通過卷積上一層的三個連續的幀的同一個位置的局部感受野得到的。

       需要注意的是:3D卷積核只能從cube中提取一種類型的特徵,因爲在整個cube中卷積核的權值都是一樣的,也就是共享權值,都是同一個卷積核(圖中同一個顏色的連接線表示相同的權值)。我們可以採用多種卷積核,以提取多種特徵。

       對於CNNs,有一個通用的設計規則就是:在後面的層(離輸出層近的)特徵map的個數應該增加,這樣就可以從低級的特徵maps組合產生更多類型的特徵。

23D CNN架構

      文中的3D CNN架構包含一個硬連線hardwired層、3個卷積層、2個下采樣層和一個全連接層。每個3D卷積核卷積的立方體是連續7幀,每幀patch大小是60x40

       在第一層,我們應用了一個固定的hardwired的核去對原始的幀進行處理,產生多個通道的信息,然後對多個通道分別處理。最後再將所有通道的信息組合起來得到最終的特徵描述。這個實線層實際上是編碼了我們對特徵的先驗知識,這比隨機初始化性能要好。

       每幀提取五個通道的信息,分別是:灰度、xy方向的梯度,xy方向的光流。其中,前面三個都可以每幀都計算。然後水平和垂直方向的光流場需要兩個連續幀才確定。所以是7x3 + (7-1)x2=33個特徵maps

       然後我們用一個7x7x33D卷積核(7x7在空間,3是時間維)在五個通道的每一個通道分別進行卷積。爲了增加特徵map的個數(實際上就是提取不同的特徵),我們在每一個位置都採用兩個不同的卷積核,這樣在C2層的兩個特徵maps組中,每組都包含23個特徵maps23(7-3+1)x3+(6-3+1)x2前面那個是:七個連續幀,其灰度、xy方向的梯度這三個通道都分別有7幀,然後水平和垂直方向的光流場都只有6幀。54x34(60-7+1)x(40-7+1)

       在緊接着的下采樣層S3max pooling,我們在C2層的特徵maps中用2x2窗口進行下采樣,這樣就會得到相同數目但是空間分辨率降低的特徵maps。下采樣後,就是27x17=(52/2)*(34/2)

      C4是在5個通道中分別採用7x6x33D卷積核。爲了增加特徵maps個數,我們在每個位置都採用3個不同的卷積核,這樣就可以得到6組不同的特徵maps,每組有13個特徵maps13((7-3+1)-3+1)x3+((6-3+1)-3+1)x2前面那個是:七個連續幀,其灰度、xy方向的梯度這三個通道都分別有7幀,然後水平和垂直方向的光流場都只有6幀。21x12(27-7+1)x(17-6+1)

       S5層用的是3x3的下采樣窗口,所以得到7x4

       到這個階段,時間維上幀的個數已經很小了, (3 for gray, gradient-x, gradient-y, and 2 for optflow-x and optflow-y)。在這一層,我們只在空間維度上面卷積,這時候我們使用的核是7x4,然後輸出的特徵maps就被減小到1x1的大小。而C6層就包含有128個特徵map,每個特徵mapS5層中所有7813x6)個特徵maps全連接,這樣每個特徵map就是1x1,也就是一個值了,而這個就是最終的特徵向量了。共128維。

       經過多層的卷積和下采樣後,每連續7幀的輸入圖像都被轉化爲一個128維的特徵向量,這個特徵向量捕捉了輸入幀的運動信息。輸出層的節點數與行爲的類型數目一致,而且每個節點與C6中這128個節點是全連接的。

      在這裏,我們採用一個線性分類器來對這128維的特徵向量進行分類,實現行爲識別。

模型中所有可訓練的參數都是隨機初始化的,然後通過在線BP算法進行訓練。

3、模型規則化Model Regularization

        3D CNN模型的輸入被限制爲一個少的連續視頻幀(這裏我們取的是7幀),因爲隨着輸入窗口大小的增加,模型需要訓練的參數也會增加。但是呢,很多人的行爲是跨越很多幀的。例如下面這個小夥子擺個手,跨越的幀數就有10幀以上了。

        因此,在3D CNN模型中,有必要捕捉這種高層的運動信息。爲了達到這個目的,我們用大量的幀來計算運動特徵,然後把這些運動特徵作爲輔助輸出去規則化3D CNN模型。

       對於每一個需要訓練的行爲,我們提取其長時間的行爲信息,作爲其高級行爲特徵。這個運動信息因爲時間夠長,所以要比CNN的輸入幀的立方體包含的信息要豐富很多。然後我們就迫使CNN學習一個非常接近這個特徵的特徵向量。這可以通過在CNN的最後一個隱層再連接一系列的輔助輸出節點,然後訓練過程中,使提取的特徵更好的逼近這個計算好的高層的行爲運動特徵向量。

      試驗中,我們在原始的灰度圖像中計算稠密sift描述子,然後通過這些sift描述子和運動邊緣歷史圖像(MEHI)組合構造bag-of-words特徵作爲輔助特徵。

 

     因爲灰度圖保留了外觀信息,運動邊緣歷史圖像只關心形狀和運動模式,所以可以提取這兩個互補的信息作爲兩個連續幀的局部特徵bagMEHI 的計算見上圖右,先簡單的計算兩幀間的差分,這樣就可以保留運動信息,然後對其執行一次Canny邊緣檢測,這樣可以使得觀測圖像更加清楚簡潔。最總的運動邊緣圖像就是將歷史的這些圖像乘以一個遺忘因子再累加起來得到。具體的構造需要參考更多的論文了。

4、模型組合

       不同的3D CNN模型在不同的應用環境下性能不一樣。一種自適應的方法就是構造多個不同的模型,然後對一個特定的輸入,每個模型都做出預測,然後組合這些模型的預測得到最後的決策。

       本文中,我們構造多個不同的3D CNN模型,因此它可以從輸入捕捉潛在的互補信息,然後在預測階段,每個模型都針對一個輸入得到對應的輸出,然後再組合這些輸出得到最終的結果。

5、模型的實現

       本文的3D CNN模型用C++實現,它是屬於NEC’s行爲識別系統的一部分(具體見參考文獻[2])。關於CNN具體的實現細節是基於原始CNN的(具體見參考文獻[3][4])。所有的子採樣層都是最大子採樣。用於訓練規則化模型的整體代價函數是由真實的行爲類的誤差和高層特徵的輔助輸入的代價項的線性加權得到。權值分別是10.005(經驗值)。模型的所有參數都是隨機初始化,然後通過隨機diagonal Levenberg-Marquardt方法來優化訓練。在這個方法中,先通過1千個隨機採樣的樣本來得到一個近似Hessian矩陣的Gauss-Newton近似,然後使用它的對角項來決定每個參數的學習速率。

 

三、參考文獻

       實驗結果就不說了,大家可以直接看論文。下面是一些參考文獻:

[1] Shuiwang Ji, Wei Xu, Ming Yang and Kai Yu, D convolutional neural networks for human action recognition, Pattern Analysis and Machine Intelligence, IEEE Transactions on  (Volume:35 ,  Issue: 1 ), 2013

[2]M. Yang, S. Ji, W. Xu, J. Wang, F. Lv, K. Yu, Y. Gong, M. Dikmen, D.J. Lin, and T.S. Huang, “Detecting Human Actions in Surveillance Videos,”Proc. TREC Video Retrieval Evaluation Work-shop,2009

[3]Y. LeCun, L. Bottou, Y. Bengio, and P. Haffner, “Gradient-Based Learning Applied to Document Recognition,”Proc. IEEE,vol. 86, no. 11, pp. 2278-2324, Nov. 1998

[4]Y. LeCun, L. Bottou, G. Orr, and K. Muller, “Efficient Backprop,” Neural Networks: Tricks of the Trade,G. Orr and M. Klaus-Robert, eds., Springer, 1998.

      關於CNN的具體BP的細節(但不是實現細節)還可以參考下面的筆記:(具體哪裏下載的忘了,找不到的可以發郵件給我)

Jake Bouvrie, Notes on Convolutional Neural Networks

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章