PRCV2018美圖短視頻實時分類挑戰賽落幕,第一名解決方案技術解讀

https://www.jiqizhixin.com/articles/112802

https://www.jiqizhixin.com/articles/112802

今年5月,美圖公司聯合中國模式識別與計算機視覺學術會議(PRCV2018)共同舉辦的PRCV2018“美圖短視頻實時分類挑戰賽”正式開賽。來自中科院自動化所、中科院自動化所南京人工智能芯片創研院的史磊、程科在張一帆副研究員的指導下獲得了PRCV2018「美圖短視頻實時分類挑戰賽」冠軍。不同於以往只關注分類精度的比賽,本競賽綜合考察“算法準確率”和“實時分類”兩個方面,將運行時間作爲重要指標參與評估,將促進視頻分類算法在工業界的應用。

以下是冠軍團隊對本次挑戰賽的技術分享總結:

數據集介紹

本次競賽使用的短視頻數據集(MTSVRC數據集)一共有100,000個視頻,其中訓練集有50,000個視頻,驗證集和測試集分別有25,000個視頻。視頻主要以短視頻爲主,長度約爲5 - 15s。數據集包含50個分類,視頻類別包括舞蹈、唱歌、手工、健身等熱門短視頻類型,除了包含與人相關的一些行爲類別,還有一些風景,寵物等類別。圖片 1展示了一些數據樣例: 數據樣例

由於這些數據的主要來源爲手機拍攝的日常視頻,視頻的大小,形狀以及拍攝條件(例如光照,景深)等都不統一,造成了很大的類間差異與類內差異。同時,由於後期處理,視頻經常會有一些特效和與類別無關的文字,也增加了視頻識別的難度。圖片 2展示了一些困難樣例,這些樣例對模型的設計帶來了很大的挑戰。

困難樣例

 

評測方法

由於競賽同時考慮時間和精度,所以以往的分類誤差不足以評測模型性能。圖片 3展示了此次競賽所用的評測方法。

評測方法

其中橙色的三角形是官方提供的基準時間和誤差,只有優於基準方法的成績才被視爲有效成績,而其他成績(黑色三角)則被視爲無效成績。時間和誤差會根據基準成績歸一化到0-1之間。在有效成績中,會找出最小誤差和最短時間的兩個成績(綠色三角形和紅色三角形),然後最小誤差和最短時間會組成一個參考點(藍色圓圈)。最終所有的有效成績都會和參考點計算距離,距離最短的方法視爲優勝。從評測方法分析,時間和精度都是很重要的因素。而時間和精度往往是矛盾的,所以必須進行一定的取捨。

視頻解碼

因爲時間是一個很重要的因素,而視頻解碼又是一個很費時間的過程,所以如何設計解碼模塊是本次競賽中的一個關鍵。我們採用了多線程軟解提取關鍵幀的方法。

主流的視頻編碼方式中,每個視頻主要包含三種圖片幀,分別叫做:Intra-coded frame(I幀),Predictive frame(P幀)和Bi-Predictive frame(B幀)。其中I幀是一張完整的圖片。P幀記錄了與之前的幀的差別,所以在解碼P幀時必須要參考之前的圖片幀。而B幀不僅需要參考之前的圖片幀,還需要參考之後的圖片幀才能完整解碼。圖片 4闡明瞭這三個概念[2]。

I幀,P幀與B幀

顯而易見,P幀和B幀的解碼是相對較慢的,而直接解碼I幀則可以獲得更快的速度。同時,由於我們需要解碼不止一幀,所以我們採用了多線程的方式,每一個線程負責解碼一個關鍵幀。整個解碼過程使用FFmpeg實現。

模型設計

解決了解碼問題後,接下來的問題在於如何用所得的多幀來進行分類。

主流方法

目前主流的視頻分類的方法有三大類:基於LSTM的方法,基於3D卷積的方法和基於雙流的方法。圖片 5展示了這三種框架的大體結構[3]。

  • 基於LSTM的方法將視頻的每一幀用卷積網絡提取出每一幀的特徵,然後將每一個特徵作爲一個時間點,依次輸入到LSTM中。由於LSTM並不限制序列的長度,所以這種方法可以處理任意長度的視頻。但同時,因爲LSTM本身有梯度消失和爆炸的問題,往往難以訓練出令人滿意的效果。而且,由於LSTM需要一幀一幀得進行輸入,所以速度也比不上其他的方法。
  • 基於3D卷積的方法將原始的2D卷積核擴展到3D。類似於2D卷積在空間維度的作用方式,它可以在時間維度自底向上地提取特徵。基於3D卷積的方法往往能得到不錯的分類精度。但是,由於卷積核由2D擴展到了3D,其參數量也成倍得增加了,所以網絡的速度也會相應下降。
  • 基於雙流網絡的方法會將網絡分成兩支。其中一支使用2D卷積網絡來對稀疏採樣的圖片幀進行分類,另一支會提取採樣點周圍幀的光流場信息,然後使用一個光流網絡來對其進行分類。兩支網絡的結果會進行融合從而得到最終的類標。基於雙流的方法可以很好地利用已有的2D卷積網絡來進行預訓練,同時光流又可以建模運動信息,所以精度往往也很高。但是由於光流的提取過程很慢,所以整體上制約了這一方法的速度。

主流的視頻分類的方法

綜上所述,主流的方法都不太適用於短視頻實時分類的任務,所以我們特別設計了一個適用於短視頻實時分類的框架。

我們的方法

圖片 4展示了我們的解決方案的整體框架:給定一個視頻,我們首先會從中稀疏採樣固定數量的圖片幀,然後將這些幀組成一個batch,送入到一個BaseNet中。這個BaseNet是在已有的2D卷積網絡基礎上優化改進得到的,具有較強的特徵提取能力。BaseNet輸出的高層的特徵往往具有很強的語義信息,但是卻沒有時間上的融合。所以我們特別設計了一個基於幀間注意力機制的融合模型,將BaseNet提取的不同幀的特徵作爲一個輸入送入融合模型中,最終由融合模型得到預測的結果。由於融合模型比較小,推理速度很快,而且參數量較少,也比較容易訓練。整個模型在mxnet上進行構建和訓練。基於這樣的設計,我們的模型可以得到很快的推理速度,同時又不會損失太多精度。

整體框架

模型壓縮

當有了訓練好的模型後,爲了進一步提高速度,模型壓縮是必不可少的。因爲計算平臺是GPU,所以我們使用了兩種比較適用於GPU的方法:剪枝和量化。

模型剪枝

由於需要在GPU上運算,這裏我們主要考慮在通道維度的剪枝。假設卷積的參數是具有稀疏性的,我們剪掉其中一些不重要的參數,網絡仍然可以達到之前的精度。 剪枝

剪枝過程分爲兩步:首先,我們會基於LASSO迴歸來找到每一層中最具代表性的通道,然後將沒用的通道去掉,再使用平方差損失微調剪枝後的網絡來最小化重構誤差。這樣的操作會對每一層分別進行,經過幾輪迭代後便可以達到不錯的壓縮效果,同時還可以保證精度不會損失太多。

模型量化

由於比賽提供的GPU是支持int8計算的,所以我們考慮將原來的基於float32數據類型訓練的模型轉換爲int8的數據形式進行推斷,也就是量化操作。這裏我們採用的比較簡單的線性量化,也是TensorRt中使用的方法[4]。

線性量化

假設每個張量的數據符合均勻分佈,那麼其中的每一個元素就可以表示爲一個int8數和一個float32的比例因子相乘的結果。比例因子是對於整個數組共享的。這樣在張量間進行相乘運算時就可以先進行int8的計算,最後再統一乘上比例因子,從而加快運算。那麼接下來的問題在於如何確定比例因子,比例因子的作用是將原始張量的數值範圍映射到-127到127(int8的數值範圍)。由於大多數情況數據並不是完全的均勻分佈,所以直接映射會造成精度損失。

基於閾值的線性映射

爲了解決這個問題,TensorRt中會對每一層的數據分佈進行統計,然後根據得到的分佈確定一個閾值(如圖片 9)。在映射的過程中,閾值之外的數會被統一映射到-127和127之 間,閾值之內的數據會假設爲一個均勻分佈然後進行映射。這樣就可以保證在加快速度的同時也不至於有較大的精度損失。

總結

我們的解決方案可以歸納爲三個部分:視頻解碼部分,我們採用了多線程提取I幀的方式。模型設計部分,我們採用了稀疏採樣與幀間注意力融合的方法。模型壓縮部分,我們採用了通道剪枝和量化的方法。最終我們的解決方案在測試集上的速度爲平均每個視頻58.9ms,精度爲87.9%。

參考文獻

[1]   “AI Challenge | Introduction.” [Online]. Available: https://challenge.ai.meitu.com/mtsvrc2018/introduction.html. [Accessed: 21-Nov-2018].

[2]   “視訊壓縮圖像類型,” 維基百科,自由的百科全書. 08-Jul-2018.

[3]   J. Carreira and A. Zisserman, “Quo Vadis, Action Recognition? A New Model and the Kinetics Dataset,” in The IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2017.

[4]   S. Migacz, “8-bit Inference with TensorRT.” [Online]. Available: http://on-demand.gputechconf.com/gtc/2017/presentation/s7310-8-bit-inference-with-tensorrt.pdf.

 

 

 

 

 

 

 

 

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