Action Recognition(行為識別)
隨著深度學習技術的發展,以及計算能力的進步(GPU等),現在基於視訊的研究領域越來越受到重視。視訊與圖片最大的不同在於視訊還包含了時序上的資訊,此外需要的計算量通常也大很多。目前主要在做視訊中動作定位相關的工作,為了開拓思路,讀了不少視訊分析相關領域的文章,所以打算寫幾篇部落格,對視訊分析相關的幾個領域做一個簡要的介紹。
這篇主要介紹Action Recognition(行為識別)這個方向。這個方向的主要目標是判斷一段視訊中人的行為的類別,所以也可以叫做Human Action Recognition。雖然這個問題是針對視訊中人的動作,但基於這個問題發展出來的演算法,大都不特定針對人,也可以用於其他型別視訊的分類。
任務特點及分析
目的
給一個視訊片段進行分類,類別通常是各類人的動作
特點
簡化了問題,一般使用的資料庫都先將動作分割好了,一個視訊片斷中包含一段明確的動作,時間較短(幾秒鐘)且有唯一確定的label。所以也可以看作是輸入為視訊,輸出為動作標籤的多分類問題。此外,動作識別資料庫中的動作一般都比較明確,周圍的干擾也相對較少(不那麼real-world)。有點像影象分析中的ImageClassification任務。
難點/關鍵點
強有力的特徵:即如何在視訊中提取出能更好的描述視訊判斷的特徵。特徵越強,模型的效果通常較好。
特徵的編碼(encode)/融合(fusion):這一部分包括兩個方面,第一個方面是非時序的,在使用多種特徵的時候如何編碼/融合這些特徵以獲得更好的效果;另外一個方面是時序上的,由於視訊很重要的一個特性就是其時序資訊,一些動作看單幀的影象是無法判斷的,只能通過時序上的變化判斷,所以需要將時序上的特徵進行編碼或者融合,獲得對於視訊整體的描述。
演算法速度:雖然在發論文刷資料庫的時候演算法的速度並不是第一位的。但高效的演算法更有可能應用到實際場景中去。
常用資料庫
行為識別的資料庫比較多,這裡主要介紹兩個最常用的資料庫,也是近年這個方向的論文必做的資料庫。
UCF101:來源為YouTube視訊,共計101類動作,13320段視訊。共有5個大類的動作:1)人-物互動;2)肢體運動;3)人-人互動;4)彈奏樂器;5)運動。資料庫主頁為:http://crcv.ucf.edu/data/UCF101.php
HMDB51:來源為YouTube視訊,共計51類動作,約7000段視訊。資料庫主頁為:http://serre-lab.clps.brown.edu/resource/hmdb-a-large-human-motion-database/#Downloads
在Actioin Recognition中,實際上還有一類骨架資料庫,比如MSR Action 3D,HDM05,SBU KinectInteraction Dataset等。這些資料庫已經提取了每幀視訊中人的骨架資訊,基於骨架資訊判斷運動型別,不做詳細介紹。
研究進展
傳統方法
iDT(improveddense trajectories)特徵:“Action recognition with improved trajectories”
iDT方法(13年)是深度學習進入該領域前效果最好,穩定性最好,可靠性最高的方法,不過演算法速度很慢。這個方法是該實驗室之前工作(Dense Trajectories and Motion Boundary Descriptors forAction Recognition)的改進。此前寫的筆記見http://blog.csdn.net/wzmsltw/article/details/53023363,演算法程式碼分析見:http://blog.csdn.net/wzmsltw/article/details/53221179
基本思路:DT演算法的基本思路為利用光流場來獲得視訊序列中的一些軌跡,再沿著軌跡提取HOF,HOG,MBH,trajectory4種特徵,其中HOF基於灰度圖計算,另外幾個均基於dense optical flow計算。最後利用FV(FisherVector)方法對特徵進行編碼,再基於編碼結果訓練SVM分類器。而iDT改進的地方在於它利用前後兩幀視訊之間的光流以及SURF關鍵點進行匹配,從而消除/減弱相機運動帶來的影響,改進後的光流影象被成為warp optical flow
基於iDT方法的改進效果最好的是“Action Recognition with Stacked Fisher Vectors”這篇文章。使用了兩層的fv編碼,筆記見http://blog.csdn.net/wzmsltw/article/details/52050112
深度學習方法
由於這個方向這幾年的論文實在太多,所以這部分挑選了一些近年比較有代表性的論文進行簡要介紹。更多的論文可以上谷歌學術通過搜尋Action Recognition找到。
(1) Two Stream Network及衍生方法
“Two-StreamConvolutional Networks for Action Recognition in Videos”(2014NIPS)
Two Stream方法最初在這篇文章中被提出,基本原理為對視訊序列中每兩幀計算密集光流,得到密集光流的序列(即temporal資訊)。然後對於視訊影象(spatial)和密集光流(temporal)分別訓練CNN模型,兩個分支的網路分別對動作的類別進行判斷,最後直接對兩個網路的class score進行fusion(包括直接平均和svm兩種方法),得到最終的分類結果。注意,對與兩個分支使用了相同的2D CNN網路結構,其網路結構見下圖。
實驗效果:UCF101-88.0%,HMDB51-59.4%
”ConvolutionalTwo-Stream Network Fusion for Video Action Recognition“(2016CVPR)
這篇論文的主要工作為在two stream network的基礎上,利用CNN網路進行了spatial以及temporal的融合,從而進一步提高了效果。此外,該文章還將基礎的spatial和temporal網路都換成了VGG-16 network。
實驗效果:UCF101-92.5%,HMDB51-65.4%
”TemporalSegment Networks: Towards Good Practices for Deep Action Recognition”
這篇文章是港中文Limin Wang大神的工作,他在這方面做了很多很棒的工作,可以followt他的主頁:http://wanglimin.github.io/ 。
這篇文章提出的TSN網路也算是spaital+temporal fusion,結構圖見下圖。這篇文章對如何進一步提高two stream方法進行了詳盡的討論,主要包括幾個方面(完整內容請看原文):
1. 輸入資料的型別:除去two stream原本的RGB image和 opticalflow field這兩種輸入外,這篇文章中還嘗試了RGB difference及 warpedoptical flow field兩種輸入。最終結果是 RGB+optical flow+warped optical flow的組合效果最好。
2. 網路結構:嘗試了GoogLeNet,VGGNet-16及BN-Inception三種網路結構,其中BN-Inception的效果最好。
3. 訓練策略:包括跨模態預訓練,正則化,資料增強等。
實驗效果:UCF101-94.2%,HMDB51-69.4%
“BeyondShort Snippets: Deep Networks for Video Classification Joe"
這篇文章主要是用LSTM來做two-stream network的temporal融合。效果一般。
實驗效果:UCF101-88.6%
(2) C3D Network
"Learningspatiotemporal features with 3d convolutional networks"
C3D是facebook的一個工作,採用3D卷積和3D Pooling構建了網路。論文筆記見:http://blog.csdn.net/wzmsltw/article/details/61192243 。通過3D卷積,C3D可以直接處理視訊(或者說是視訊幀的volume)
實驗效果:UCF101-85.2% 可以看出其在UCF101上的效果距離two stream方法還有不小差距。我認為這主要是網路結構造成的,C3D中的網路結構為自己設計的簡單結構,如下圖所示。
速度:C3D的最大優勢在於其速度,在文章中其速度為314fps。而實際上這是基於兩年前的顯示卡了。用Nvidia 1080顯示卡可以達到600fps以上。所以C3D的效率是要遠遠高於其他方法的,個人認為這使得C3D有著很好的應用前景。
作者在其專案主頁:http://vlg.cs.dartmouth.edu/c3d/ 放出了新版本的Res-C3D網路的caffe模型,但論文還沒放出,估計是ICCV2017的投稿文章。新版本的模型大小是之前的一半,速度比C3D快了很多,效果也比之前提高了幾個百分點(UCF上)。非常期待看到這個論文,等放出後也會好好討論一下的。
(3) 其他方法
“A KeyVolume Mining Deep Framework for Action Recognition”
本文主要做的是key volume的自動識別。通常都是將一整段動作視訊進行學習,而事實上這段視訊中有一些幀與動作的關係並不大。因此進行關鍵幀的學習,再在關鍵幀上進行CNN模型的建立有助於提高模型效果。本文達到了93%的正確率嗎,為目前最高。
實驗效果:UCF101-93.1%,HMDB51-63.3%
”DeepTemporal Linear Encoding Networks”
本文主要提出了“Temporal Linear Encoding Layer” 時序線性編碼層,主要對視訊中不同位置的特徵進行融合編碼。至於特徵提取則可以使用各種方法,文中實驗了two stream以及C3D兩種網路來提取特徵。
實驗效果:UCF101-95.6%,HMDB51-71.1%(特徵用two stream提取)。應該是目前為止看到效果最好的方法了(CVPR2017裡可能會有更好的效果)
小結
可以看出,這幾年action recognition領域發展的非常快,有各種各樣的方法被提出。但要注意,action recognition一般是對預先分割過的短視訊進行分類,而真實環境中的視訊一般都是沒有預先切分過的,而且會包含大量無關資訊。所以我認為這個領域的研究很像對Image Classification的研究,比較基礎,可以為相關領域的研究提供有力的工具。下一篇文章將討論視訊中的動作定位問題:Temporal Action Detection.