2
本文作者: 叢末 | 2018-11-28 14:21 |
隊(duì)名:CASIA-AIRIA。
隊(duì)員:史磊(博士在讀),程科(博士在讀)。
指導(dǎo)教師:張一帆副研究員。
單位:中國(guó)科學(xué)院自動(dòng)化研究所,中國(guó)科學(xué)院自動(dòng)化研究所南京人工智能芯片創(chuàng)新研究院。
今年 5 月,美圖公司聯(lián)合中國(guó)模式識(shí)別與計(jì)算機(jī)視覺學(xué)術(shù)會(huì)議(PRCV2018)共同舉辦的 PRCV2018「美圖短視頻實(shí)時(shí)分類挑戰(zhàn)賽」正式開賽。來自中科院自動(dòng)化所、中科院自動(dòng)化所南京人工智能芯片創(chuàng)研院的史磊、程科在張一帆副研究員的指導(dǎo)下獲得了 PRCV2018「美圖短視頻實(shí)時(shí)分類挑戰(zhàn)賽」冠軍。不同于以往只關(guān)注分類精度的比賽,本競(jìng)賽綜合考察「算法準(zhǔn)確率」和「實(shí)時(shí)分類」兩個(gè)方面,將運(yùn)行時(shí)間作為重要指標(biāo)參與評(píng)估,將促進(jìn)視頻分類算法在工業(yè)界的應(yīng)用。以下是冠軍團(tuán)隊(duì)對(duì)本次挑戰(zhàn)賽的技術(shù)分享總結(jié):
數(shù)據(jù)集介紹
本次競(jìng)賽使用的短視頻數(shù)據(jù)集(MTSVRC 數(shù)據(jù)集)一共有 100,000 個(gè)視頻,其中訓(xùn)練集有 50,000 個(gè)視頻,驗(yàn)證集和測(cè)試集分別有 25,000 個(gè)視頻。視頻主要以短視頻為主,長(zhǎng)度約為 5 - 15s。數(shù)據(jù)集包含 50 個(gè)分類,視頻類別包括舞蹈、唱歌、手工、健身等熱門短視頻類型,除了包含與人相關(guān)的一些行為類別,還有一些風(fēng)景,寵物等類別。圖片 1 展示了一些數(shù)據(jù)樣例:
圖片 1 數(shù)據(jù)樣例
由于這些數(shù)據(jù)的主要來源為手機(jī)拍攝的日常視頻,視頻的大小,形狀以及拍攝條件(例如光照,景深)等都不統(tǒng)一,造成了很大的類間差異與類內(nèi)差異。同時(shí),由于后期處理,視頻經(jīng)常會(huì)有一些特效和與類別無關(guān)的文字,也增加了視頻識(shí)別的難度。圖片 2 展示了一些困難樣例,這些樣例對(duì)模型的設(shè)計(jì)帶來了很大的挑戰(zhàn)。
圖片 2 困難樣例
評(píng)測(cè)方法
由于競(jìng)賽同時(shí)考慮時(shí)間和精度,所以以往的分類誤差不足以評(píng)測(cè)模型性能。圖片 3 展示了此次競(jìng)賽所用的評(píng)測(cè)方法。
圖片 3 評(píng)測(cè)方法
其中橙色的三角形是官方提供的基準(zhǔn)時(shí)間和誤差,只有優(yōu)于基準(zhǔn)方法的成績(jī)才被視為有效成績(jī),而其他成績(jī)(黑色三角)則被視為無效成績(jī)。時(shí)間和誤差會(huì)根據(jù)基準(zhǔn)成績(jī)歸一化到 0-1 之間。在有效成績(jī)中,會(huì)找出最小誤差和最短時(shí)間的兩個(gè)成績(jī)(綠色三角形和紅色三角形),然后最小誤差和最短時(shí)間會(huì)組成一個(gè)參考點(diǎn)(藍(lán)色圓圈)。最終所有的有效成績(jī)都會(huì)和參考點(diǎn)計(jì)算距離,距離最短的方法視為優(yōu)勝。從評(píng)測(cè)方法分析,時(shí)間和精度都是很重要的因素。而時(shí)間和精度往往是矛盾的,所以必須進(jìn)行一定的取舍。
因?yàn)闀r(shí)間是一個(gè)很重要的因素,而視頻解碼又是一個(gè)很費(fèi)時(shí)間的過程,所以如何設(shè)計(jì)解碼模塊是本次競(jìng)賽中的一個(gè)關(guān)鍵。我們采用了多線程軟解提取關(guān)鍵幀的方法。
主流的視頻編碼方式中,每個(gè)視頻主要包含三種圖片幀,分別叫做:Intra-coded frame(I 幀),Predictive frame(P 幀)和 Bi-Predictive frame(B 幀)。其中 I 幀是一張完整的圖片。P 幀記錄了與之前的幀的差別,所以在解碼 P 幀時(shí)必須要參考之前的圖片幀。而 B 幀不僅需要參考之前的圖片幀,還需要參考之后的圖片幀才能完整解碼。圖片 4 闡明了這三個(gè)概念 [2]。
圖片 4 I 幀,P 幀與 B 幀
顯而易見,P 幀和 B 幀的解碼是相對(duì)較慢的,而直接解碼 I 幀則可以獲得更快的速度。同時(shí),由于我們需要解碼不止一幀,所以我們采用了多線程的方式,每一個(gè)線程負(fù)責(zé)解碼一個(gè)關(guān)鍵幀。整個(gè)解碼過程使用 FFmpeg 實(shí)現(xiàn)。
解決了解碼問題后,接下來的問題在于如何用所得的多幀來進(jìn)行分類。
主流方法
目前主流的視頻分類的方法有三大類:基于 LSTM 的方法,基于 3D 卷積的方法和基于雙流的方法。圖片 5 展示了這三種框架的大體結(jié)構(gòu) [3]。
基于 LSTM 的方法將視頻的每一幀用卷積網(wǎng)絡(luò)提取出每一幀的特征,然后將每一個(gè)特征作為一個(gè)時(shí)間點(diǎn),依次輸入到 LSTM 中。由于 LSTM 并不限制序列的長(zhǎng)度,所以這種方法可以處理任意長(zhǎng)度的視頻。但同時(shí),因?yàn)?LSTM 本身有梯度消失和爆炸的問題,往往難以訓(xùn)練出令人滿意的效果。而且,由于 LSTM 需要一幀一幀得進(jìn)行輸入,所以速度也比不上其他的方法。
基于 3D 卷積的方法將原始的 2D 卷積核擴(kuò)展到 3D。類似于 2D 卷積在空間維度的作用方式,它可以在時(shí)間維度自底向上地提取特征?;?3D 卷積的方法往往能得到不錯(cuò)的分類精度。但是,由于卷積核由 2D 擴(kuò)展到了 3D,其參數(shù)量也成倍得增加了,所以網(wǎng)絡(luò)的速度也會(huì)相應(yīng)下降。
基于雙流網(wǎng)絡(luò)的方法會(huì)將網(wǎng)絡(luò)分成兩支。其中一支使用 2D 卷積網(wǎng)絡(luò)來對(duì)稀疏采樣的圖片幀進(jìn)行分類,另一支會(huì)提取采樣點(diǎn)周圍幀的光流場(chǎng)信息,然后使用一個(gè)光流網(wǎng)絡(luò)來對(duì)其進(jìn)行分類。兩支網(wǎng)絡(luò)的結(jié)果會(huì)進(jìn)行融合從而得到最終的類標(biāo)。基于雙流的方法可以很好地利用已有的 2D 卷積網(wǎng)絡(luò)來進(jìn)行預(yù)訓(xùn)練,同時(shí)光流又可以建模運(yùn)動(dòng)信息,所以精度往往也很高。但是由于光流的提取過程很慢,所以整體上制約了這一方法的速度。
圖片 5 主流的視頻分類的方法
綜上所述,主流的方法都不太適用于短視頻實(shí)時(shí)分類的任務(wù),所以我們特別設(shè)計(jì)了一個(gè)適用于短視頻實(shí)時(shí)分類的框架。
我們的方法
圖片 4 展示了我們的解決方案的整體框架:給定一個(gè)視頻,我們首先會(huì)從中稀疏采樣固定數(shù)量的圖片幀,然后將這些幀組成一個(gè) batch,送入到一個(gè) BaseNet 中。這個(gè) BaseNet 是在已有的 2D 卷積網(wǎng)絡(luò)基礎(chǔ)上優(yōu)化改進(jìn)得到的,具有較強(qiáng)的特征提取能力。BaseNet 輸出的高層的特征往往具有很強(qiáng)的語義信息,但是卻沒有時(shí)間上的融合。所以我們特別設(shè)計(jì)了一個(gè)基于幀間注意力機(jī)制的融合模型,將 BaseNet 提取的不同幀的特征作為一個(gè)輸入送入融合模型中,最終由融合模型得到預(yù)測(cè)的結(jié)果。由于融合模型比較小,推理速度很快,而且參數(shù)量較少,也比較容易訓(xùn)練。整個(gè)模型在 mxnet 上進(jìn)行構(gòu)建和訓(xùn)練?;谶@樣的設(shè)計(jì),我們的模型可以得到很快的推理速度,同時(shí)又不會(huì)損失太多精度。
圖片 6 整體框架
當(dāng)有了訓(xùn)練好的模型后,為了進(jìn)一步提高速度,模型壓縮是必不可少的。因?yàn)橛?jì)算平臺(tái)是 GPU,所以我們使用了兩種比較適用于 GPU 的方法:剪枝和量化。
模型剪枝
由于需要在 GPU 上運(yùn)算,這里我們主要考慮在通道維度的剪枝。假設(shè)卷積的參數(shù)是具有稀疏性的,我們剪掉其中一些不重要的參數(shù),網(wǎng)絡(luò)仍然可以達(dá)到之前的精度。
圖片 7 剪枝
剪枝過程分為兩步:首先,我們會(huì)基于 LASSO 回歸來找到每一層中最具代表性的通道,然后將沒用的通道去掉,再使用平方差損失微調(diào)剪枝后的網(wǎng)絡(luò)來最小化重構(gòu)誤差。這樣的操作會(huì)對(duì)每一層分別進(jìn)行,經(jīng)過幾輪迭代后便可以達(dá)到不錯(cuò)的壓縮效果,同時(shí)還可以保證精度不會(huì)損失太多。
模型量化
由于比賽提供的 GPU 是支持 int8 計(jì)算的,所以我們考慮將原來的基于 float32 數(shù)據(jù)類型訓(xùn)練的模型轉(zhuǎn)換為 int8 的數(shù)據(jù)形式進(jìn)行推斷,也就是量化操作。這里我們采用的比較簡(jiǎn)單的線性量化,也是 TensorRt 中使用的方法 [4]。
圖片 8 線性量化
假設(shè)每個(gè)張量的數(shù)據(jù)符合均勻分布,那么其中的每一個(gè)元素就可以表示為一個(gè) int8 數(shù)和一個(gè) float32 的比例因子相乘的結(jié)果。比例因子是對(duì)于整個(gè)數(shù)組共享的。這樣在張量間進(jìn)行相乘運(yùn)算時(shí)就可以先進(jìn)行 int8 的計(jì)算,最后再統(tǒng)一乘上比例因子,從而加快運(yùn)算。那么接下來的問題在于如何確定比例因子,比例因子的作用是將原始張量的數(shù)值范圍映射到-127 到 127(int8 的數(shù)值范圍)。由于大多數(shù)情況數(shù)據(jù)并不是完全的均勻分布,所以直接映射會(huì)造成精度損失。
圖片 9 基于閾值的線性映射
為了解決這個(gè)問題,TensorRt 中會(huì)對(duì)每一層的數(shù)據(jù)分布進(jìn)行統(tǒng)計(jì),然后根據(jù)得到的分布確定一個(gè)閾值(如圖片 9)。在映射的過程中,閾值之外的數(shù)會(huì)被統(tǒng)一映射到-127 和 127 之 間,閾值之內(nèi)的數(shù)據(jù)會(huì)假設(shè)為一個(gè)均勻分布然后進(jìn)行映射。這樣就可以保證在加快速度的同時(shí)也不至于有較大的精度損失。
我們的解決方案可以歸納為三個(gè)部分:視頻解碼部分,我們采用了多線程提取 I 幀的方式。模型設(shè)計(jì)部分,我們采用了稀疏采樣與幀間注意力融合的方法。模型壓縮部分,我們采用了通道剪枝和量化的方法。最終我們的解決方案在測(cè)試集上的速度為平均每個(gè)視頻 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.雷鋒網(wǎng)雷鋒網(wǎng)雷鋒網(wǎng)
雷峰網(wǎng)版權(quán)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。