動作識別

1.推薦閱讀

[動作識別綜述](本文主要翻譯自該綜述)
[動作識別開源集錦]
[競賽]

2.Action Recognition 的難點

Action Recognition 需要對視頻幀中的每一個動作進行識別,這些動作可能是貫穿於整個視頻流,也可能是僅在某一時段出現一下,我們不僅要知道這個動作是什麼,還需要清楚它的起始時間段。我們的終極目標是:知道一段視頻中,誰(who)在什麼時間段(when)在哪兒(where)幹了什麼(what)?簡稱“4w”。這有點像圖像分類任務的拓展,我們需要根據每一幀的動作分類來預測整段視頻包含什麼內容。
事實上,圖像分類已經取得了比較喜人的成績,但是對於視頻分類(video classification)、表徵學習(representation learning)來說,深度學習的進展還顯得比較緩慢。之所以會如此艱難,主要源於以下幾方面的原因:

  1. 巨大的計算成本:傳統的2D卷積在面對101分類任務時,通常只需要~5M參數;然後,將其擴展到3D空間之後,參數量將劇增至~33M。在UCF101數據集上進行3D卷積操作通常需要花費3~4天的時間,在Sports-1M數據集上則要花費大概兩個月;不僅結構搜索空間很龐大,而且還容易產生過擬合。
  2. 需要捕捉上下文信息:動作識別需要在圖像幀之間獲取時空領域的上下文信息,與此同時空間信息還需要對相機移動進行補償。即便是我們能夠實現空間目標的檢測,也很難去獲取它的細節動作。例如:同樣是檢測到人和水,但是我們很難去區分出自由泳和蛙泳。
  3. 分類結構的設計:設計一個可以用來捕獲時空信息的分類網絡有很多種不同的策略,並且很難去評價這些策略孰優孰略。例如:(1)可以設計一個網絡一次性獲取時空信息,也可以設計兩個網絡分別獲取時間、空間信息;(2)單幀預測或者是融合預測;(3)端到端的訓練,或者是將特徵提取和分類兩過程分開。
  4. 無統一標準:目前最被公認的數據集就是UCF101和Sports-1M:在Sports-1M上搜索合理的網絡結構代價是很昂貴的,而UCF101雖然和ImageNet擁有相同數量級的數據,但是由於圖像在空間上的高度相關性,導致樣本的真實多樣性大打折扣。除此之外,這兩個數據集都有相同的具體領域—運動,在將其推廣到其他場景時適用性較弱,所以最近又出現了新的數據集Kinetics

3.Action Recognition 的傳統方法

在深度學習出現之前,CV領域的動作識別技術可以歸結爲以下三步:

  • 提取描述視頻的局部高維視覺特徵,要麼是密集的,要麼是稀疏的興趣點集;
  • 將提取的特徵融合到一個固定大小的視頻級別描述中(?),常見的做法是使用詞袋;
  • 最後使用SVM或者RF在視覺詞袋上進行訓練,用來預測最終的結果。

這些算法在第一步特區特徵的時候使用了hand-crafted-feature,目前該方向的SOTA是iDT(improve Densely Trajectories,使用密集採樣的軌跡特徵,代碼與解析)。與此同時,3D卷積也被用在動作識別領域(2013年);之後出現了兩片篇有突破性進展的文章(2014年),這形成了之後動作識別算法的backbone,它們之間的主要區別是:對於時空信息結合的設計方式有所不同。這兩篇文章雖然是里程碑之作,但是年代久遠、性能還是比較差,所以我們一般只關注它們的思想。

3.1Single Stream Network

論文:《Large-scale Video Classification with Convolutional Neural Networks
在這篇文章中,作者使用2D卷積進行預訓練,探索了多種從連續幀中融合時間信息的方法:
在這裏插入圖片描述
Single Frame 方法使用單線提取每一幀的特徵,然後在最後將這些特徵融合在一起;Late Fusion 方法使用雙線,雙線之間共享參數,以15幀爲間隔分別提取特徵,最後再進行融合;Early Fusion 則是對相鄰的10幀進行特徵提取,這相當於在卷積的第一層就進行了融合;Slow Fusion 尋求Late Fusion 和Early Fusion 之間的平衡,它開啓多線模式,然後在後期慢慢的將多線合併達到逐步融合時空特徵的目的。模型從整個視頻中抽取多個片段,對每個片段的分類進行打分,然後取平均值作爲最後的分類結果。
作者做了大量的實驗,最終發現這種方法與當前的SOTA方法(hand-crafted-feature)相比效果差很多,分析可能的原因:(1)網絡提取到的時空特徵可能並沒有抓取運動特徵;(2)數據集的多樣性較差,很難提取得到完備的動作庫。

3.2Two Stream Networks

論文:《Two-Stream Convolutional Networks for Action Recognition in Videos
吸取了Single Stream的失敗教訓,作者特別關注了深度網絡對運動特徵的學習:以疊加光流矢量的形式對運動特徵進行顯式建模。和之前的單個網絡network不同,這裏作者使用兩個單獨的網絡,一個用來提取空間上下文(預訓練完成),一個用來提取運動上下文。
在這裏插入圖片描述
Spatial Net的輸入是視頻的每一幀,Temporal Net的輸入是光流,作者通過實驗發現連續10幀疊加的雙向光流效果最好。這兩個網絡分開訓練,然後最後用SVM融合,最終的結果和之前一樣:採樣平均。這種方法雖然相比於Single Stream來說效果要好(因爲它結合了時間光流信息),但是仍存在一些缺陷:(1)整段視頻的預測採取的是採樣平均的方式完成的,所以還是會丟失部分長時特徵信息;(2)採樣的時候可能會出現“虛假標籤”的情況,因爲採樣的視頻默認是跟整段視頻的ground truth一致的,但實際上可能採樣的那一小片段並非標註的動作;(3)該算法設計到光流的預計算和分開存儲,並且兩個網絡是分別訓練的,無法實現訓練上的端到端。

4.深度學習中的 Action Recognition

受到上述兩種思路的啓發,後續產生了各種各樣的動作識別算法可以一一來看一下。

4.1 LRCN

論文:《Long-term Recurrent Convolutional Networks for Visual Recognition and Description》2014
代碼[caffe] [pytorch]
貢獻:(1)不再使用傳統的光流方法,而是引入RNN結構;(2)將編碼解碼結構拓展到視頻表徵領域;(3)爲動作識別提出了一個端到端的訓練結構。
簡介:在此文之前有學者探索了在特徵圖上使用LSTM的想法,嘗試從中捕獲時間信息;遺憾的是,最終的結論證明卷積特徵的時間池化比對特徵圖使用LSTM更有效。LRCN的作者基於此結論,設計了一種“編碼-解碼”網絡,編碼部分使用卷積塊,解碼部分使用LSTM單元,並對整個網絡使用端到端的訓練。他們還比較了以RGB圖像和光流分別作爲輸入的效果,最終發現取二者的加權平均作爲網絡輸入纔是最優選擇。
在這裏插入圖片描述
上圖左邊給出了用於Action Recognition的LRCN網絡,右邊則是通用類型的LRCN(可用於其他分類任務)。LRCN能夠處理可變長視頻序列,首先是每一幀送入CNN,這是一個編碼過程;它的輸出送入LSTM,一併送入LSTM的還有上一幀經過LSTM的輸出(也就是說,對於每一幀的LSTM而言,它要接受當前幀的編碼結果以及上一幀的解碼結果)。不同長度的視頻輸入,一般會得到不同的動作分類結果,對於LRCN來說它可以接受任意長度的序列幀。
算法:實際訓練時,作者將視頻分割爲一個個16幀的片段,每一個片段的分類結果是在時間步長上的輸出(y1y16y_1\backsim{y_{16}})平均值,視頻的分類結果則是所有片段預測值取平均。網絡採取端到端的訓練,輸入爲RGB或者光流。
效果(基於UCF101):

score comments
82.92 輸入爲RGB與光流的加權平均
71.1 輸入爲RGB

評論:LRCN仍然避免不了“虛假標籤”的問題,因爲它還是要將視頻分割成片段;其次使用光流意味着單獨計算流特性(?);對於長範圍的時間信息還是無能爲力。後來有學者嘗試彌補長時信息的缺陷,通過降低空間分辨率、增加剪輯片段的幀數(60幀),獲得了更好的結果。

4.2 C3D

論文:《Learning Spatiotemporal Features with 3D Convolutional Networks》2014
代碼[caffe] [tensorflow]
貢獻:(1)利用3D卷積網絡作爲特徵提取器;(2)廣泛搜索最佳的3D卷積核、3D卷積網絡;(3)使用反捲積層來解釋模型決策(?)。
簡介:之前處理圖像的卷積都是2D的,這裏作者使用3D卷積構建了一個龐大的模型,用Sports-1M數據集來完成訓練,然後以此作爲其他數據集的特徵提取器。最終,作者實現了一個類似於SVM的簡單線性分類器,該分類器的效果可以達到當時的SOTA。同時,如果再附帶使用 hand-crafted-feature 例如iDT,效果會進一步提升。
在這裏插入圖片描述
上圖上半部分給出了2D卷積和3D卷積的對比,下半部分給出了C3D的網絡結構:8個卷積、5個池化、2個全連接,最後是一個softmax輸出。所有3D卷積的尺寸都是3*3*3、步長爲1,圖中框內的數字表示卷積核的數量;池化層的位置如圖中所示,處理pool1是1*2*2之外,其他池化層都是2*2*2。文章的另一個有趣的部分是使用反捲層來解釋決策;作者在最初的幾幀中關注空間外觀,在隨後的幾幀中跟蹤運動(?)。
在訓練時,作者爲每個視頻隨機抽取兩個時長爲2s的片段,連帶着groundtruth一起作爲動作;在test過程,隨機抽取10個片段,取這10個片段的預測結果的平均值作爲最終的結果。

上面Figure3的註解說3D卷積的尺寸在spatial和temporal空間中都相同,如何理解?C3D屬於 two stream 嗎?這裏使用的是單網絡啊?

效果(基於UCF101):

score comments
83.2 C3D(1net)+ linear SVM
85.2 C3D(3nets)+ linear SVM
90.4 C3D(3nets)+ iDT + linear SVM

評論:首先,長時信息(long range temporal information)的問題仍然沒有解決;其次,這種自然圖像下的預訓練對於某些領域來說作用並不大,例如醫學。和C3D同一時期,有學者提出了分離三維卷積(factorized 3D conv networksFSTCN{F_{ST}CN}),該網絡將3D卷積分解爲空間上的2D卷積和時間上的1D卷積,1D卷積跟在2D卷積的後面,以這種方式在UCF101上得到的結果也能夠與其他模型一較高下。
在這裏插入圖片描述

4.3 Conv3D & Attention

論文:《Describing Videos by Exploiting Temporal Structure》,2015
代碼[tensorflow] [Theano]
貢獻:(1)建立一個3D CNN-RNN的“編碼-解碼”器,以此提取來提取局部時空信息;(2)在“編碼-解碼”框架中加入Attention機制,以此獲取全局上下文信息。
簡介:該文章並不是直接與動作識別相關的,但是它是視頻表徵(video representation)領域的里程碑之作。作者首先使用3D CNN來做預訓練,然後用3D CNN加上LSTM作爲基礎框架來完成視頻描述任務。網絡的整體框架與LRCN基本一致,區別在於:

  1. 不再是簡單的將3D CNN特徵直接送入LSTM,而是需要將3D CNN特徵圖與2D CNN特徵圖進行融合,要注意的是這二者處理的幀是完全相同的,並且它們的參數是在預訓練時確定的,這與LRCN的端到端訓練不一樣。
  2. 在LSTM中加入Attention機制,這就表明時序向量不再是以均值的方式來處理,而是加權平均;每一部分的權重大小取決於各時間段LSTM的輸出值。
    在這裏插入圖片描述

效果:(該網絡基於Youtube2Text數據庫完成視頻描述任務,並沒有做動作識別!)
評論:該論文第一次將注意力機制引入到視頻表徵任務中,是一個里程碑之作。

4.4 TwoStreamFusion

論文:《Convolutional Two-Stream Network Fusion for Video Action Recognition》,2016
代碼[Matlab]
貢獻:(1)通過加入長時損失函數來實現長時信息建模;(2)提出了一個多級融合結構。
簡介:該網絡基於Two Stream結構提出兩點創新,在不大量增加參數的情況下取得了較好的性能提升:

  1. 融合空間和時間流(這就相當於解決了how和when的問題),空間網絡提取視頻中的空間依賴性,時間網絡提取空間中各位置的週期性運動。因此,將一個特定區域的空間特徵圖映射到相關的時間特徵圖就顯得非常重要,需要在網絡的早期階段就對二者進行融合,以便將相同像素位置的響應對應起來。
  2. 對時間網絡進行跨時序幀融合,這樣長時依賴關係就能夠被建模。
    在這裏插入圖片描述

論文中作者介紹了幾種不同的方式來對spatial和temporal進行融合,在conv5_layer位置進行一次融合,之後分開,在網絡的最後再次進行融合,這種方式的效果是比較好的。對於時間融合(temporal fusion)來說,時間網絡輸出、跨時疊加、卷積池化融合都將被納入最終的損失函數計算中。
效果(基於UCF101):

score comments
92.5 TwoStreamFusion
94.2 TwoStreamFusion + iDT

評論:在TwoStream方向中優勢很大,它在不增加C3D參數的情況下很好的提高了動作識別的性能(?有3D卷積嗎?)。

4.5 TSN

論文:《Temporal Segment Networks: Towards Good Practices for Deep Action Recognition》,2016
代碼[Caffe] [Pytorch] [MMAction]
貢獻:(1)提出了一種長時建模的高效解決方案;(2)實踐性地使用了BN、dropout、pre-training。
簡介:TSN還是一種TwoStream的方法,並且實現了當時的SOTA,主要的創新在於兩點:

  1. 作者提出,在整個視頻中稀疏地採樣片段以更好地對長時信號建模,而不是對整個視頻進行隨機採樣。
  2. 對於最終視頻級別的預測結果,作者嘗試了多種不同的策略,最終發現,在每一個片段上分別對時間流、空間流的得分進行平均,然後對時間流、空間流得分使用加權平均,最後以softmax分類結果作爲最終預測值,這種策略的效果是最優的。

除此之外,作者還探討了在小規模數據集上的過擬合問題,並給出了BN、dropout、pre-training的解決辦法;對於網絡輸入,作者提出兩種有別於光流的可選方案——翹曲光流(warped optical flow)和RGB差分(RGB difference)。
在這裏插入圖片描述
在實際訓練中,每個視頻按照時長被均分爲 K 個部分,然後從每個部分中隨機抽取一幀組合成一個片段(clip);之後的操作就和TwoStream相類似。
效果(基於UCF101):

score comments
94.0 TSN(input:RGB + flow)
94.2 TSN(input:RGB + flow + warped flow)

評論:作者嘗試解決Action Recognition領域的兩個大的問題:過擬合和長時信號建模,並且還取得了很好的效果,但是依然存在預計算光流和輸入模態的問題。

4.6 ActionVLAD

論文:《ActionVLAD: Learning spatio-temporal aggregation for action classification》,2017
代碼[tensorflow]
貢獻:(1)可學習的視頻級(時空)融合特徵;(2)利用視頻級(時空)融合特徵來完成端到端的模型訓練,以此獲取長時依賴性。
簡介:本文最重要的創新點在於提出了一種可學習的融合特徵——VLAD,和之前利用池化融合特徵的方法相比是完全不同的。類似於視覺詞袋(bag of visual words),VLAD基於詞彙表用多個學好的錨點(anchor-point,{c1,c2,...,ck}\{c_1,c_2,...,c_k\})來表徵 k 個與時空特徵相關的典型動作。兩個分支流的輸出用“k維空間的動作詞袋特徵”進行編碼,每一個特徵都和其他的錨點相區分,如下圖的上半部分所示。
在這裏插入圖片描述
平均池化或者是最大池化都是對一張圖像的像素空間做出一個整體的描述,對於視頻空間來說,它的描述可能不是由一個單獨的維度空間來表徵,那麼pooling的方式就可能不是最佳的。於是作者將描述符空間劃分爲 k 個子單元格,然後在每個單元格內部進行池化,由多個sub-action來生成最後的表徵,上圖的下半部分給出了示意。

效果(基於UCF101):

score comments
92.7 ActionVLAD
93.6 ActionVLAD + iDT

評論:使用VLAD作爲高效池化的方式已經不再流行了,雖然該方式很魯棒並且在2017年的時候取得了動作識別領域的SOTA。

4.7 HiddenTwoStream

論文:《Hidden Two-Stream Convolutional Networks for Action Recognition》,2017
代碼[Caffe]
貢獻:使用一個單獨的網絡來實時產生光流作爲輸入。
簡介:對於每一個採樣幀來說,TwoStream方法中的光流必須提前計算,這樣纔可以保證不影響處理時的存儲和計算速度,針對這個問題本文提出了一種無監督結構來生成一組幀的光流。光流可以看成是一個圖像重構問題,對於給定的相鄰幀 I1I2I_1、I_2,CNN需要產生一個流場 VV;利用預測的流場 VV 和相鄰幀 I2I_2,通過反向翹曲將 I1I_1 重構爲 I1I_1^{\prime},使 I1I_1 與重構值 I1I_1^{\prime} 的差值最小化。
在這裏插入圖片描述
作者在保證不損失精度的情況下,堅持使用最大幀率和最小參數量,探索了多種網絡結構來生成光流,最終得到的網絡結構如上圖所示:時間流分支多了一個光流生成網絡MotionNet,該分支的輸入也不再是預處理計算得到的光流了,而是順序幀。要注意的是,非監督網絡MotionNet將擁有額外的損失函數。作者還實驗了用TSN來代替傳統的TwoStream結構,這對於性能有一定的提升。
效果(基於UCF101):

score comments
89.8 HiddenTwoStream
92.5 HiddenTwoStream + TSN

評論:本文主要的貢獻在於提升了預測的速度,降低了預測的成本,和傳統算法相比減少了對於光流計算網絡的依賴。

4.8 I3D

論文:《Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset》,2017
代碼[tensorflow] [Pytorch]
貢獻:(1)利用預訓練將3D卷積模型和TwoStream結構相結合;(2)生成了Kinetics數據集,提高了動作識別數據集的多樣性。
簡介:該文章以C3D作爲出發點,在TwoStream的兩個分支結構中使用不同的3D卷積,在3D模型中使用了2D預訓練模型的權重,空間分支的輸入不再是單張圖像而是帶有時間維度的時序幀。
在這裏插入圖片描述
從上圖上半部分的對比可以大致看出 I3D 的形成過程,下半部分則給出了單個分支中基於Inception V1的3D卷積實現。圖中未標明步長的卷積和池化層默認stride爲1,prediction之前的BN、ReLU以及softmax部分在圖中省略了;與此同時,該圖還給出了不同階段模型的感受野,左邊“Inc”指的就是Inception塊,其具體實現在右邊。
效果(基於UCF101):

score comments
93.4 TwoStream I3D
98.0 ImageNet + Kinetics pre-training

評論:該論文證明了使用預訓練2D卷積模型的益處,Kinetics開源數據集則是該文章的另一個突出貢獻。

4.9 T3D

論文:《Temporal 3D ConvNets: New Architecture and Transfer Learning for Video》,2017
代碼[Pytorch]
貢獻:(1)提出了一種在可變深度(?)中結合時間信號(temporal information)的網絡結構;(2)提出了一種全新的訓練模型和技術,可以監督從2D預訓練到3D網絡之間的切換過程。
簡介:該文章延續了I3D的工作,不同的是作者主張使用基於3D DenseNet的SingleStream(而不是TwoStream),在dense塊的後面接上不同深度的時序池化層(Temporal Transition Layer),以此來獲取不同的時序深度信息;不同深度的池化層擁有不同時序大小的池化核,如下圖的上半部分所示。
在這裏插入圖片描述
上圖的下半部分展示了基於2D卷積的預訓練網絡向基於3D卷積的DenseNet的轉換過程,2D卷積處理的是單幀RGB,3D卷積則處理同一時間戳下的視頻塊,2D卷積通過這種“圖像-視頻協作”任務“教會”3D卷積學習中間層的特徵表徵。在訓練過程中,爲了使得模型高效習得3D卷積的參數,2D卷積的預訓練參數將被凍結。
效果(基於UCF101):

score comments
90.3 T3D
91.7 T3D + Trsanfer
93.2 T3D + TSN

評論:雖然T3D相比於I3D而言並沒有多大的性能改善,但是佔用的內存空間卻要小很多;同時它還提出了一種2D向3D學習轉換的監督技術。

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