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


最近看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卷積神經網絡

1、3D卷積

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

 

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

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

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

2、3D CNN架構

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

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

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

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

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

      C4是在5個通道中分別采用7x6x3的3D卷積核。為了增加特征maps個數,我們在每個位置都采用3個不同的卷積核,這樣就可以得到6組不同的特征maps,每組有13個特征maps。13是((7-3+1)-3+1)x3+((6-3+1)-3+1)x2前面那個是:七個連續幀,其灰度、x和y方向的梯度這三個通道都分別有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,每個特征map與S5層中所有78(13x6)個特征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特征作為輔助特征。

 

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

4、模型組合

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

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

5、模型的實現

       本文的3D CNN模型用C++實現,它是屬於NEC’s行為識別系統的一部分(具體見參考文獻[2])。關於CNN具體的實現細節是基於原始CNN的(具體見參考文獻[3][4])。所有的子采樣層都是最大子采樣。用於訓練規則化模型的整體代價函數是由真實的行為類的誤差和高層特征的輔助輸入的代價項的線性加權得到。權值分別是1和0.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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM