不嚴肅的開場白
視頻社交已經成爲了時下最in的社交方式,相較於傳統的文字、語音聊天,使用親身錄製的短視頻、幽默搞笑的圖片、表情包與好友進行交流,不僅更加風趣且更具人情味。
而隨着視頻社交的流行,每天產生的視頻數據能夠達到數千萬小時,這些數據的質量參差不齊,其中有大量的不良視頻,如涉暴、涉黃、涉政等。在海量數據面前,完全依靠人工審覈無法解決內容審覈的難題。因此也催生了智能內容審覈的誕生。智能內容審覈是指藉助於人工智能技術,對海量視頻進行自動分類,鑑別出其中涉及敏感內容的視頻並予以禁播。
智能內容審覈的第一步,是進行視頻分類。今天,我們要聊的就是視頻分類背後的算法。
嚴肅的開場白
故事要從深度學習說起。(因爲從深度學習說起,可以顯出本文是一篇有逼格的算法總結。)深度學習是一個近幾年來火遍各個領域的詞彙,在語音識別、圖像分類、視頻理解等領域,深度學習的相關算法在特定任務上已經能夠達到甚至超過人類水平。本文從視頻分類的角度,對深度學習在該方向上的算法進行總結。
視頻分類是指給定一個視頻片段,對其中包含的內容進行分類。類別通常是動作(如做蛋糕),場景(如海灘),物體(如桌子)等。其中又以視頻動作分類最爲熱門,畢竟動作本身就包含“動”態的因素,不是“靜“態的圖像所能描述的,因此也是最體現視頻分類功底的。
數據集
熟悉深度學習的朋友們應該清楚,深度學習是一門數據驅動的技術,因此數據集對於算法的研究起着非常重要的作用。網絡上雖然有大量用戶上傳的視頻數據,但這些數據大多數缺少類目標籤,直接用於算法的訓練會導致效果欠佳。在學術界,通常有一些公開的、已經經過完整標註的數據集,是算法訓練的好幫手。具體到視頻分類領域,主要有兩種數據集,trimmed和untrimmed。Trimmed是指視頻經過剪輯,使其只包含待識別類別的內容;untrimmed是指視頻未經過剪輯,包含了動作/場景/物體之外的很多信息。Untrimmed通常在視頻分類的算法之外,還要加上動作檢測算法。這不在今天的話題當中,有空我們可以再聊聊這一塊的算法。
那麼trimmed video的數據集比較常見的有UCF101,HMDB51,Kinetics,Moments in time。Untrimmed video的數據集比較常見的有ActivityNet,Charades,SLAC。部分數據集的比較見下表:
視頻分類常用數據集
數據集名稱 | 數據集規模 | 類別概覽 |
---|---|---|
HMDB51 | 51類動作,6849段trimmed視頻 | 常見的面部表情動作:如微笑,咀嚼,說話等;2. 和物體交互有關的面部動作:如吃東西,喝飲料,抽菸等;3. 常見的肢體動作:如鼓掌,爬樓梯,跑步,潛水,坐下等;4. 和物體交互有關的肢體動作:如洗頭,打高爾夫,騎自行車,射擊,打籃球等;5. 和人交互有關的肢體動作:如擁抱,親吻,擊劍,拳擊等。 |
UCF101 | 101類動作,13320段trimmed視頻 | 人與物體交互相關的動作:如畫眼線,呼啦圈,拖地,打字等;2. 肢體動作:如打太極,引體向上,俯臥撐等;3. 人與人交互相關的動作,如剪頭髮,閱兵, 薩爾薩舞等;4. 演奏樂器:如打鼓,彈吉他,演奏鋼琴等;5. 運動:如潛水,跳高,舉重等。 |
Moments in Time | 1000000段trimmed視頻,每個視頻長度相同(3s) | 這個數據集比較有意思的是動作主體不僅可以是人,還可以是動物,物體乃至自然現象。想看小狗跳舞嗎? |
ActivityNet | 200類動作,20000段untrimmed視頻 | 和吃喝有關的動作:如喝咖啡,製作三明治,洗碗等;2. 和運動有關的動作:如打曲棍球,擲鐵餅等; 3.和社交/休閒/娛樂有關的動作:如跳舞,演奏樂器,跳房子游戲等;4. 和個人護理有關的動作:如化妝,刮鬍子,紋身等;5. 和家庭日常活動有關的動作:如包裝禮物,和寵物玩耍,修剪草坪等。 |
需要指出的是,從上表中我們可以看出視頻分類的數據集實際上比圖像分類的數據集的規模小得多。這是因爲在視頻上進行標註遠比對圖像進行標註要費時費力。trimmed視頻還好些,基本標註時間等於視頻時長。如果是untrimmed視頻,需要在視頻中手工標註動作的起始和結束時間,根據測試,需要花費視頻長度的 4 倍時間。
因此ladies and 鄉親們,這些數據集,且用且珍惜吧。
研究進展
在視頻分類中,有兩種非常重要的特徵:表觀特徵(appearance)和時序特徵(dynamics)。一個視頻分類系統的性能很大程度上取決於它是否提取並利用好了這兩種特徵。但是提取這兩種特徵並不那麼容易,會遇到諸如形變/視角轉換/運動模糊等因素的影響。因此,設計對噪聲魯棒性強且能保留視頻類別信息的有效特徵至關重要。
根據ConvNets(深度卷積神經網絡)在圖像分類上取得的成功,很自然地,我們會想到把ConvNets用到視頻分類中。但是,ConvNets本身是對二維圖像的表觀特徵的建模,而對於視頻來說,除了表觀特徵,時序特徵也很重要。那麼如果把時序特徵用起來呢?通常有三種思路:LSTM,3D-ConvNet和Two-Stream。
1. LSTM系列
LRCNs[1]是LSTM和ConvNet結合進行視頻分類的方法。這種結合很自然,已經在圖像分類任務上訓練好的ConvNet分類器,可以很好地提取視頻幀的表觀特徵;而對於時序特徵的提取,則可以通過直接增加LSTM層來實現,因爲LSTM能夠將多個時刻的狀態作爲當前時刻的輸入,從而允許時間維度上的信息得以保留。
視頻分類任務是變長輸入定長輸出的。文章另外還介紹了LRCNs用於圖像描述(定長輸入變長輸出)和視頻描述(變長輸入變長輸出)的方案,感興趣的同學可以自行查看。
2. 3D-ConvNet及其衍生系列
C3D[2]是Facebook的一個工作,它主要是把2D Convolution擴展到3D。其原理如下圖,我們知道2D的卷積操作是將卷積核在輸入圖像或特徵圖(feature map)上進行滑窗,得到下一層的特徵圖。例如,圖(a)是在一個單通道的圖像上做卷積,圖(b)是在一個多通道的圖像上做卷積(這裏的多通道圖像可以指同一張圖片的3個顏色通道,也指多張堆疊在一起的幀,即一小段視頻),最終的輸出都是一張二維的特徵圖,也就是說,多通道的信息被完全壓縮了。而在3D卷積中,爲了保留時序的信息,對卷積核進行了調整,增加了一維時域深度。如圖(c)所示,3D卷積的輸出仍是一個三維的特徵圖。因此通過3D卷積,C3D可以直接處理視頻,同時利用表觀特徵和時序特徵。
關於實驗效果,C3D在UCF101上的精度爲82.3%,並不高,其原因在於C3D的網絡結果是自己設計的簡單結構(只有11層),而沒有借鑑或預訓練於其他成熟的ConvNets結構。
因此針對這一點,有很多學者提出了改進。
I3D[3] 是 DeepMind 基於 C3D 作出的改進,值得一提的是 I3D 這篇文章也是發佈 Kinetics數據集的文章。其創新點在於模型的權重初始化,如何將預訓練好的2D ConvNets的權重賦值給3D ConvNets。具體地,將一張圖像在時間維度上重複T次可以看作是一個(非常無聊的)T幀的視頻,那麼爲了使該視頻在3D結構上的輸出和單幀圖像在2D結構的輸出相等,可以使3D卷積的權重等於2D卷積的權重重複T次,再將權重縮小T倍以保證輸出一致。I3D在Kinetics數據集上進行預訓練然後用於UCF101,其精度可達到98.0%。
P3D[4]是MSRA基於C3D作出的改進,基本結構是把ResNet擴展爲“僞”3D卷積,“僞”3D卷積的意思是利用一個1*3*3的2D空間卷積和3*1*1的1D時域卷積來模擬常用的3*3*3的3D卷積,如下圖所示。P3D在參數數量、運行速度等方面對C3D作出了優化。
3. Two-Stream Network及其衍生系列
Two Stream[5]是VGG組的工作(不是UGG哦),其基本原理是訓練兩個ConvNets,分別對視頻幀圖像(spatial)和密集光流(temporal)進行建模,兩個網絡的結構是一樣的,都是2D ConvNets,見下圖。兩個stream的網絡分別對視頻的類別進行判斷,得到class score,然後進行分數的融合,得到最終的分類結果。
可以看出Two-Stream和C3D是不同的思路,它所用的ConvNets都是2D ConvNets,對時序特徵的建模體現在兩個分支網絡的其中一支上。Two-Stream的實驗結果,在UCF101上達到88.0%的準確率。
在spatial stream和temporal stream如何融合的問題上,有很多學者作出了改進。
[6]在two stream network的基礎上,利用3D Conv和3D Pooling進行spatial和temporal的融合,有點two stream + C3D的意思。另外,文章將兩個分支的網絡結構都換成了VGG-16。在UCF101的精度爲92.5%。
TSN[7]是CUHK的工作,對進一步提高two stream network的性能進行了詳盡的討論。two stream在這裏被用在視頻片段(snippets)的分類上。關於two stream的輸入數據類型,除去原有的視頻幀圖像和密集光流這兩種輸入外,文章發現加入warped optical flow也能對性能有所提高。在分支網絡結構上嘗試了GoogLeNet,VGG-16及BN-Inception三種網絡結構,其中BN-Inception的效果最好。在訓練策略上採用了跨模態預訓練,正則化,數據增強等方法。在UCF101上達到94.2%的精度。
4. 其他
除了以上兩種常見的思路以外,也有學者另闢蹊徑,嘗試與衆不同的方法。
TDD[8]是對傳統的iDT[9]算法的改進(iDT算法是深度學習以前最好的行爲識別算法)**,它將軌跡特徵和two-stream network結合使用,以two-stream network作爲特徵提取器,同時利用軌跡對特徵進行選擇,獲得軌跡的深度卷積描述符,最後使用線性SVM進行視頻分類。TDD是一個比較成功的傳統方法與深度學習算法相結合的例子,在UCF上達到90.3%的精度。
ActionVLAD[10]是一種特徵融合的方式,它可以融合two stream的特徵,C3D的特徵以及其他網絡結構的特徵。**其思想是對原有的特徵計算殘差並聚類,對不同時刻的幀進行融合,得到新的特徵。ActionVLAD是對視頻空間維度和時間維度的特徵融合,使得特徵的表達更全面。
Non-local Network[11]是Facebook何愷明和RBG兩位大神近期的工作,非局部操作(non-local operations)爲解決視頻處理中時空域的長距離依賴打開了新的方向。我們知道,卷積結構只能捕捉數據的局部信息,它對於非局部特徵的信息傳遞不夠靈活。Non-local Network則根據所有幀所有位置的信息對某個位置進行調整。文章把這個block加在I3D上做了實驗,在Charades上精度提升2%。
總結
以上所有的視頻分類算法都是在近幾年提出的,可以看出這一領域的發展之快。從學術角度,視頻分類是開啓視頻理解這個領域的金鑰匙,對它的研究可以爲相關領域的研究打下堅實的基礎,包括視頻動作檢測,視頻結構化分析等,都用到了視頻分類的技術。從我們實際生活的角度,視頻分類已經在默默地做着很多事情,例如在文章一開始提到的智能內容審覈,再例如視頻檢索、視頻監控、視頻廣告投放、自動駕駛、體育賽事分析等。在不久的將來,相信視頻分類以及其他的AI算法將爲我們帶來更多驚喜的變革。AI讓生活更美好。
牛人說
牛人說專欄致力於技術人思想的發現,其中包括技術實踐、技術乾貨、技術見解、成長心得,還有一切值得被發現的技術內容。我們希望集合最優秀的技術人,挖掘獨到、犀利、具有時代感的聲音。
參考文獻
[1] J. Donahue, et al. Long-term recurrent convolutional networks for visual recognition and description. CVPR, 2015.
[2] D. Tran, et al. Learning Spatiotemporal Features with 3D Convolutional Networks. ICCV, 2015.
[3] J. Carreira, et al. Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset. CVPR, 2017.
[4] Z. Qiu, et al. Learning Spatio-Temporal Representation with Pseudo-3D Residual Networks. ICCV, 2017.
[5] K. Simonyan, et al. Two-Stream Convolutional Networks for Action Recognition in Videos. NIPS, 2014.
[6] C. Feichtenhofer, et al. Convolutional Two-Stream Network Fusion for Video Action Recognition. CVPR, 2016.
[7] L. Wang, et al. Temporal Segment Networks: Towards Good Practices for Deep Action Recognition. ECCV, 2016.
[8] L. Wang, et al. Action Recognition with Trajectory-Pooled Deep-Convolutional Descriptors. CVPR, 2015.
[9] H. Wang, et al. Action Recognition with Improved Trajectories. ICCV, 2013.
[10] R. Girdhar, et al. ActionVLAD: Learning spatio-temporal aggregation for action classification. CVPR, 2017.
[11] X. Wang, et al. Non-local Neural Networks. arxiv 1711, 2017.