百度開源AI視頻大賽奪冠模型,手把手教你用PaddlePaddle實(shí)戰(zhàn)

AI看視頻識(shí)別人類行為有多準(zhǔn)?目前最好的成績是錯(cuò)誤率10%左右。

計(jì)算機(jī)視覺頂會(huì)CVPR上,有一項(xiàng)名叫ActivityNet Kinetics Challenge的比賽,就是這類算法的競(jìng)技場(chǎng)。2018年的冠軍,正來自百度視覺組。

現(xiàn)在,他們的奪冠模型StNet開源了。百度工程師們還寫了一篇文章,從架構(gòu)到用法詳細(xì)介紹了這個(gè)模型。

百度視覺技術(shù)部聯(lián)合PaddlePaddle團(tuán)隊(duì)近期開源了用于視頻分類的StNet框架。StNet框架為ActivityNet Kinetics Challenge 2018中奪冠的網(wǎng)絡(luò)框架。本次開源了基于ResNet50實(shí)現(xiàn)的StNet模型。

該模型提出“super-image”的概念,在super-image上進(jìn)行2D卷積,建模視頻中局部時(shí)空相關(guān)性。另外通過temporal modeling block建模視頻的全局時(shí)空依賴,最后用一個(gè)temporal Xception block對(duì)抽取的特征序列進(jìn)行長時(shí)序建模。

該框架在動(dòng)作識(shí)別方面優(yōu)于一些最先進(jìn)的方法,可以在識(shí)別精度和模型復(fù)雜性之間取得令人滿意的平衡。

應(yīng)用背景

視頻當(dāng)中的動(dòng)作識(shí)別任務(wù)已經(jīng)獲得了許多從事計(jì)算機(jī)視覺與機(jī)器學(xué)習(xí)研究人員的重點(diǎn)關(guān)注。越來越多的視頻錄像設(shè)備的普及,讓更多好玩有趣的視頻豐富了人們的業(yè)余生活。但是過多的視頻已經(jīng)遠(yuǎn)遠(yuǎn)超過人工能夠處理的范圍,因此發(fā)展針對(duì)各種應(yīng)用場(chǎng)景的自動(dòng)視頻理解算法變得尤為重要,比如:視頻推薦、人類行為分析、視頻監(jiān)控等等。

深度學(xué)習(xí)在靜態(tài)圖像理解上取得了巨大成功,但是針對(duì)視頻時(shí)空建模中最有效的網(wǎng)絡(luò)架構(gòu)是什么還尚不清楚,因此我們將新探索的用于視頻中局部和全局時(shí)空建模的時(shí)空網(wǎng)絡(luò)(StNet)架構(gòu)與現(xiàn)有的CNN+RNN模型或是基于純3D卷積的方法進(jìn)行比對(duì)分析,來尋求更有效的網(wǎng)絡(luò)架構(gòu)。

現(xiàn)有方法分析

由于深度學(xué)習(xí)在圖片識(shí)別中的卓越表現(xiàn),該技術(shù)也被應(yīng)用到了解決視頻分類的場(chǎng)景當(dāng)中。這其中就有兩個(gè)主要的研究方向,一個(gè)是應(yīng)用CNN+RNN框架結(jié)構(gòu)來對(duì)視頻序列建模,還有一個(gè)是單純的利用卷積網(wǎng)絡(luò)結(jié)構(gòu)來識(shí)別視頻當(dāng)中的行為。但是在動(dòng)作識(shí)別準(zhǔn)確性方面,目前的行動(dòng)識(shí)別方法仍然遠(yuǎn)遠(yuǎn)落后于人類表現(xiàn)。現(xiàn)有方法存在如下待改進(jìn)之處。

CNN+RNN模型

對(duì)于CNN+RNN的方法,CNN前饋網(wǎng)絡(luò)部分用來空間建模(spatial modeling),LSTM或者GRU用來時(shí)域建模(temporal modeling),由于該模型自身的循環(huán)結(jié)構(gòu),這導(dǎo)致了端到端的優(yōu)化困難。單獨(dú)訓(xùn)練的CNN和RNN部分對(duì)于聯(lián)合的時(shí)空特征表示學(xué)習(xí)(representation learning)不是最佳的。
純卷積網(wǎng)絡(luò)結(jié)構(gòu)

2D卷積網(wǎng)絡(luò)結(jié)構(gòu)在抽取外觀特征(appearance features)的時(shí)候,只利用了局部的空間信息而忽略了局部的時(shí)域信息;此外,對(duì)于時(shí)域動(dòng)態(tài),2D卷積網(wǎng)絡(luò)僅融合了幾個(gè)局部片段的分類得分并計(jì)算平均值,這種取平均的方法在捕捉時(shí)空信息方面的性能有待提高。3D卷積網(wǎng)絡(luò)結(jié)構(gòu)可以同時(shí)在空間和時(shí)間上建模進(jìn)而得到令人滿意的識(shí)別任務(wù)結(jié)果。眾所周知,淺層的神經(jīng)網(wǎng)絡(luò)與深層神經(jīng)網(wǎng)絡(luò)相比,淺層網(wǎng)絡(luò)在大數(shù)據(jù)集中,表現(xiàn)出較差的表示學(xué)習(xí)能力。當(dāng)進(jìn)行大規(guī)模數(shù)據(jù)集中的人類行為識(shí)別任務(wù)時(shí),一方面淺層的3D卷積網(wǎng)絡(luò)得到的視頻特征的可辨別性相對(duì)深層網(wǎng)絡(luò)較弱,另一方面,深層的3D卷積網(wǎng)絡(luò)會(huì)導(dǎo)致過大的模型以及在訓(xùn)練中和推理階段中過高的計(jì)算成本。
StNet模型

局部信息和全局信息對(duì)識(shí)別視頻中的行為都起著非常重要的作用。

例如,在圖1(a)中,我們可以通過局部的空間信息來識(shí)別搬磚和搬石頭,換而言之,在該圖中,局部的空間信息(local spatial information)是我們識(shí)別行為至關(guān)重要的因素。而在圖1(b)中,全局時(shí)空(global spatial-temporal)線索是用來區(qū)分”摞卡片”和”飛卡片”這兩個(gè)場(chǎng)景行為的關(guān)鍵證據(jù)。

圖1局部信息足以區(qū)分”搬磚”和”搬石頭”;全局時(shí)空信息可以分別”摞卡片”和”飛卡牌”

StNet可以由先進(jìn)的2D卷積網(wǎng)絡(luò)改造可得,比如:ResNet、InceptionResnet等等。圖2展示了如何從Resnet構(gòu)建StNet。


圖2:基于ResNet骨架構(gòu)建的StNet。

StNet的輸入是T ×3N ×H ×W張量。通過2D卷積對(duì)局部時(shí)空模型進(jìn)行模型。在Res3和Res4塊之后插入時(shí)序卷積模塊進(jìn)行全局時(shí)空特征建模。最后,用時(shí)序Xception模塊進(jìn)一步建模時(shí)序動(dòng)態(tài)信息。3D卷積的設(shè)置是(# Output Channel, (temporal kernel size, height kernel size, width kernel size), # groups) -(Ci, (3,1,1), 1)

超圖像(Super-Image):

StNet的輸入為均勻采樣的T個(gè)局部連續(xù)N幀的視頻幀。局部的連續(xù)N幀組合成一個(gè)”超圖”,這使得”超圖”保留原始視頻各個(gè)局部的時(shí)空信息。所以網(wǎng)絡(luò)的輸入是一個(gè)尺寸為T*3N*H*W的張量。

時(shí)域建模塊(Temporal Modeling Block):

采用2D卷積對(duì)T個(gè)”超圖”進(jìn)行局部時(shí)空關(guān)系的建模,可以避免 3D 卷積網(wǎng)絡(luò)參數(shù)量和計(jì)算量大的問題,進(jìn)而生成T個(gè)局部時(shí)空特征圖。通過堆疊3D卷積/2D卷積模塊,對(duì)T個(gè)局部時(shí)空特征圖進(jìn)行全局時(shí)空信息的建模,這對(duì)理解整個(gè)視頻起到至關(guān)重要的作用。

具體而言,我們選擇插入2個(gè)時(shí)域建模塊在Res3和Res4塊之后。時(shí)域建模塊是為了捕捉視頻序列內(nèi)的長期時(shí)域動(dòng)態(tài),可以利用Conv_3d-BN3d-RELU架構(gòu)實(shí)現(xiàn)。將3D卷積空間維度的kernel size設(shè)置成1以節(jié)省模型的參數(shù)量與計(jì)算量。

時(shí)域Xception模塊(Temporal Xception Block):

時(shí)域Xception模塊是為了在特征序列之間進(jìn)行有效的時(shí)域建模,并能輕松地進(jìn)行端到端優(yōu)化。Xception模塊的設(shè)計(jì)主要基于時(shí)序1維卷積,采用了channel-wise和temporal-wise分離的策略進(jìn)一步減少計(jì)算量與模型參數(shù)量。

時(shí)域Xception塊結(jié)構(gòu)如下:

圖3:時(shí)域 Xception 塊(TXB)。

時(shí)域Xception 塊的詳細(xì)配置如(a)所示:括號(hào)中的參數(shù)表示 1D卷積的(#kernel,kernel size,padding,#groups)配置。綠色的塊表示 channel-wise 的 1D 卷積,藍(lán)色的塊表示 temporal-wise 的 1D 卷積。

(b)描繪了 channel-wise 和 temporal-wise 的 1D 卷積。TXB 的輸入是視頻的特征序列,表示為 T×C_in 張量。Channel-wise 1D 卷積的每個(gè)卷積核僅在一個(gè)通道內(nèi)沿時(shí)間維度應(yīng)用。Temporal-wise 的 1D 卷積核在每個(gè)時(shí)序特征中跨所有通道進(jìn)行卷積

基于PaddlePaddle 實(shí)戰(zhàn)

環(huán)境準(zhǔn)備:

PaddlePaddle Fluid 1.3 + cudnn5.1 。使用cudnn7.0以上版本時(shí)batchnorm計(jì)算moving mean和moving average會(huì)出現(xiàn)異常,此問題還在修復(fù)中。建議用戶安裝PaddlePaddle時(shí)指定cudnn版本。

數(shù)據(jù)準(zhǔn)備:

Kinetics數(shù)據(jù)集是DeepMind公開的大規(guī)模視頻動(dòng)作識(shí)別數(shù)據(jù)集,有Kinetics400與Kinetics600兩個(gè)版本。這里使用Kinetics400數(shù)據(jù)集。

ActivityNet官方提供了Kinetics的下載工具,具體參考其官方repo 即可下載Kinetics400的mp4視頻集合。

將kinetics400的訓(xùn)練與驗(yàn)證集合分別下載到dataset/kinetics/data_k400/train_mp4dataset/kinetics/data_k400/val_mp4。

模型訓(xùn)練:

數(shù)據(jù)準(zhǔn)備完畢后,通過以下方式啟動(dòng)訓(xùn)練(方法1),同時(shí)我們也提供快速啟動(dòng)腳本 (方法2)

方法1

python train.py –model-name=STNET–config=./configs/stnet.txt –save-dir=checkpoints –log-interval=10 –valid-interval=1

方法2

bash scripts/train/train_stnet.sh

用戶也可下載Paddle Github上已發(fā)布模型通過—resume指定權(quán)重存放路徑進(jìn)行finetune等開發(fā)。

數(shù)據(jù)預(yù)處理說明:

模型讀取Kinetics-400數(shù)據(jù)集中的mp4數(shù)據(jù),每條數(shù)據(jù)抽取seg_num段,每段抽取seg_len幀圖像,對(duì)每幀圖像做隨機(jī)增強(qiáng)后,縮放至target_size。

訓(xùn)練策略:

采用Momentum優(yōu)化算法訓(xùn)練,momentum=0.9權(quán)重衰減系數(shù)為1e-4學(xué)習(xí)率在訓(xùn)練的總epoch數(shù)的1/3和2/3時(shí)分別做0.1的衰減
模型評(píng)估:

通過以下方式(方法 1)進(jìn)行模型評(píng)估,同樣我們也提供了快速啟動(dòng)的腳本(方法 2):

方法1

python test.py –model-name=STNET–config=configs/stnet.txt –log-interval=1 –weights=$PATH_TO_WEIGHTS

方法2

bash scripts/test/test__stnet.sh

使用scripts/test/test_stnet.sh進(jìn)行評(píng)估時(shí),需要修改腳本中的—weights參數(shù)指定需要評(píng)估的權(quán)重。若未指定—weights參數(shù),腳本會(huì)下載已發(fā)布模型進(jìn)行評(píng)估。
模型推斷:

可通過如下命令進(jìn)行模型推斷:

python infer.py –model-name=stnet–config=configs/stnet.txt –log-interval=1 –weights=$PATH_TO_WEIGHTS –filelist=$FILELIST

模型推斷結(jié)果存儲(chǔ)于STNET_infer_result中,通過pickle格式存儲(chǔ)。若未指定—weights參數(shù),腳本會(huì)下載已發(fā)布模型進(jìn)行推斷。模型精度:

當(dāng)模型取如下參數(shù)時(shí),在 Kinetics400數(shù)據(jù)集上的指標(biāo)為:

參數(shù)取值

評(píng)估精度

來源:量子位

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp

More articles