05組——Non-local Neural Networks

Non-local Neural Networks

Non-local Neural Networks是何凱明大佬組最近發(fā)表的一篇文章。一作Xiaolong Wang,本科畢業(yè)于華南農(nóng)業(yè)大學(xué),研究生是中山大學(xué),博士去了CMU,然后做出了這么好的工作,可以說(shuō)非常勵(lì)志了。

類(lèi)似于Batch Normalization,這篇文章也提出了一種不改變輸入輸出大小的層,可以直接集成到現(xiàn)有的網(wǎng)絡(luò)結(jié)構(gòu)中。思想非常簡(jiǎn)單,卻在各大數(shù)據(jù)集上都取得了良好的效果。

簡(jiǎn)介

捕捉大范圍內(nèi)數(shù)據(jù)相互之間的依賴(lài)關(guān)系是一個(gè)很重要的問(wèn)題。對(duì)于序列化的數(shù)據(jù),比如語(yǔ)音、視頻等等,使用循環(huán)神經(jīng)網(wǎng)絡(luò)一直是比較主流的做法。對(duì)于圖片來(lái)說(shuō),我們通常使用較大的卷積核來(lái)捕捉較遠(yuǎn)距離的像素之間的關(guān)系。

然而,循環(huán)神經(jīng)網(wǎng)絡(luò)或者傳統(tǒng)的卷積神經(jīng)網(wǎng)絡(luò)都只是在其時(shí)間或空間的很小的鄰域內(nèi)進(jìn)行捕捉,卻很難捕獲到更遠(yuǎn)的位置的數(shù)據(jù)的依賴(lài)關(guān)系。

這篇論文中,作者提出了一種Non-local層,可以很好地捕捉到較遠(yuǎn)位置的像素點(diǎn)之間的依賴(lài)關(guān)系。Non-local mean其實(shí)是一種傳統(tǒng)計(jì)算機(jī)視覺(jué)方法。作者將其擴(kuò)展到了神經(jīng)網(wǎng)絡(luò)中。


這里寫(xiě)圖片描述

上圖是該層訓(xùn)練后的一個(gè)效果圖。箭頭指向的點(diǎn)就是算法認(rèn)為和箭尾的點(diǎn)關(guān)聯(lián)度最高的一些點(diǎn)??梢钥闯?,對(duì)于視頻分類(lèi)任務(wù),人物的動(dòng)作、球的位置等點(diǎn)的信息之間是有依賴(lài)關(guān)系的,而這種依賴(lài)關(guān)系被Non-local層很好的捕捉到了。

算法簡(jiǎn)介

Non-local的思想十分簡(jiǎn)單。以一個(gè)視頻片段為例,假設(shè)我們要考慮的某一個(gè)幀中的某一個(gè)點(diǎn)為$x_i$,該視頻片段里所有的像素點(diǎn)為$x_j$。non-local的最終輸出為:

image.png

這里的$f(x_i, x_j)$可以看作是兩點(diǎn)之間的關(guān)聯(lián)系數(shù),$g(x_j)$可以看作是$x_j$點(diǎn)中包含的信息。即以$f$為權(quán)重,將信息$g$進(jìn)行加權(quán)求和。$C(x)$為其歸一化系數(shù)。

到這里已經(jīng)介紹完了Non-local的最重要的思想。接下來(lái)就是確定$f$和$g$的形式了。文章中列舉了幾種不同的$f$。

實(shí)例

$g$可以直接用一個(gè)線(xiàn)性函數(shù)來(lái)編碼,即


image.png

實(shí)現(xiàn)時(shí)只要應(yīng)用$1\times 1$卷積核就可以解決。關(guān)鍵是$f$的形式。下面列舉幾種。

函數(shù) 表達(dá)式
Gaussian
image.png
Embedded Gaussian
image.png
Dot product
image.png
Concatenation
image.png

不過(guò)論文也指出,最終的結(jié)果對(duì)于$f$的選擇并不敏感。


這里寫(xiě)圖片描述

None-local塊的實(shí)現(xiàn)

res的結(jié)構(gòu)是一定要有的,所以在之前的$y_i$算出來(lái)以后,我們最終的輸出要滿(mǎn)足:


image.png
這里寫(xiě)圖片描述

所以Non-local層的結(jié)構(gòu)如圖2所示。

實(shí)現(xiàn)時(shí),通道數(shù)先減半最后再還原,遵從了bottleneck的設(shè)計(jì)思想,降低了一半的計(jì)算量。同時(shí),$\mathbb x_j$可以被降采樣后的數(shù)據(jù)$\hat{\mathbb x}_j$代替,從而進(jìn)一步降低計(jì)算量。

視頻分類(lèi)模型

作者在介紹視頻分類(lèi)實(shí)驗(yàn)介紹之前,先介紹了視頻分類(lèi)的常用方法。由于我對(duì)這塊兒不太熟悉,所以這部分內(nèi)容也記錄下來(lái)。

  • 2D卷積基準(zhǔn)(2D ConvNet baseline)

    這個(gè)網(wǎng)絡(luò)是個(gè)咸魚(yú)網(wǎng)絡(luò)。因?yàn)橐容^Non-local和I3D中時(shí)間序列的表現(xiàn),所以構(gòu)建這樣一個(gè)基準(zhǔn)網(wǎng)絡(luò)。時(shí)間信息僅僅通過(guò)pooling來(lái)使用。


    這里寫(xiě)圖片描述
  • 膨脹3D卷積(Inflated 3D ConvNet)

    這里的膨脹指的是把卷積層膨脹成為3D的。使用2D卷積層初始化,然后再將每層縮放$1/t$。

    要注意的是,3D卷積是非常消耗計(jì)算資源的,因此每隔兩個(gè)res層才會(huì)使用一次3D卷積。提出I3D的人表示他們的方法要比CNN+LSTM方法好。

  • Non-local network

    在C2D和I3D中加入Non-local塊。

實(shí)現(xiàn)細(xì)節(jié)

網(wǎng)絡(luò)現(xiàn)在imagenet上訓(xùn)練,然后使用視頻微調(diào)。

首先是數(shù)據(jù),從視頻中采樣連續(xù)的64幀,再?gòu)倪@64幀中間隔取32幀作為數(shù)據(jù)集;空域上隨機(jī)從[256,320]上截取一塊224X224大小的區(qū)域。訓(xùn)練時(shí),每個(gè)GPU上放8段視頻,一次用8塊GPU,也就是說(shuō)一個(gè)minibatch是64個(gè)clips(再次說(shuō)明了多卡的重要性)。然后就是常規(guī)設(shè)置了,迭代40萬(wàn)次。(抱歉,有卡真的是可以為所欲為的)

值得注意的是他們?cè)谖⒄{(diào)網(wǎng)絡(luò)時(shí)激活了BN層,而ResNet訓(xùn)練時(shí)BN是關(guān)閉的。因?yàn)樗麄兪褂肂N減少了過(guò)擬合。

在Non-local layer中,只有在最后一個(gè)1X1X1層的后面使用了BN,并且將BN的初始化參數(shù)設(shè)為0,從而保證網(wǎng)絡(luò)的初始行為和預(yù)訓(xùn)練的網(wǎng)絡(luò)一樣。

inference時(shí),從一個(gè)視頻里取10段分別做前向,再將結(jié)果做softmax后再取平均。

在視頻分類(lèi)上的實(shí)驗(yàn)

這里寫(xiě)圖片描述

使用了Kinetics數(shù)據(jù)集和Charades數(shù)據(jù)集。

Kinetics數(shù)據(jù)集上的實(shí)驗(yàn)

Kinetics dataset包含了246K個(gè)訓(xùn)練視頻和20k個(gè)驗(yàn)證視頻,包含400種人的常見(jiàn)行為。


這里寫(xiě)圖片描述

圖4說(shuō)明加入NL之后的模型在整個(gè)訓(xùn)練過(guò)程中都力壓沒(méi)加過(guò)的。

圖1和圖3說(shuō)明模型學(xué)到了很多有意義的關(guān)聯(lián)點(diǎn)。


這里寫(xiě)圖片描述

表2的信息量有點(diǎn)大。。。

表2a對(duì)比了不同的$f$對(duì)結(jié)果的影響。不管怎么選,只加一層Non-local都可以提高1個(gè)點(diǎn)。同時(shí)表格說(shuō)明不同的$f$對(duì)結(jié)果影響不大。因此,接下來(lái)的實(shí)驗(yàn)都選擇了Gaussian,因?yàn)樗麄兊妮敵雎湓?~1之間,便于可視化。

表2b比較了在不同的位置添加Non-local層的影響。在res234添加的效果差不多,但在res5添加會(huì)有降低。一種可能的解釋是越往后圖越小,空間信息就越不明顯。

表2c比較了不同數(shù)量的Non-local的影響。越多越準(zhǔn)。值得注意的是,五層Nonlocal的ResNet-50比ResNet100還要準(zhǔn),但參數(shù)數(shù)量和計(jì)算量都比ResNet100小,因此其效果的提升并不是僅僅通過(guò)加深網(wǎng)絡(luò)實(shí)現(xiàn)的。另外,作者還嘗試把Non-local換成普通的Res層,結(jié)果精度并沒(méi)有提高,說(shuō)明Non-Local的確是增強(qiáng)了網(wǎng)絡(luò)的能力。

表2d比較了Non-local用在時(shí)間、空間、時(shí)空上的結(jié)果。雖然都有提高,但是在時(shí)空上最好。

表2e比較了加了Non-local的C2D和I3D的效果。這兩種操作可以看成是將C2D擴(kuò)展到時(shí)間維度的不同方法??梢钥闯鯪on-local使用的計(jì)算力和參數(shù)都更小,卻取得了更高的精度。

表2f比較了加了Non-local的I3D和I3D的效果。加了后效果更好了,說(shuō)明Non-local可以是I3D的一種補(bǔ)充。

表2g比較了不同序列長(zhǎng)度對(duì)結(jié)果的影響。這次直接用了128幀做輸入。由于輸入增大,每個(gè)GPU上同時(shí)跑兩個(gè)clips,因此凍結(jié)了batchnorm層。與2f相比,精度提高了。同時(shí)加入Non-local的網(wǎng)絡(luò)在精度增長(zhǎng)上也毫不遜色。


這里寫(xiě)圖片描述

表3比較了NL-I3D和現(xiàn)在在Kinetics數(shù)據(jù)集上的state-of-art方法的結(jié)果。在沒(méi)有使用任何光流和聲音信息的情況下,NL-I3D取得了和state-of-art相同的結(jié)果。

在Charades數(shù)據(jù)集上的實(shí)驗(yàn)

Charades數(shù)據(jù)集每個(gè)視頻都包含多個(gè)標(biāo)簽。因此使用Kinetics數(shù)據(jù)集訓(xùn)練好的模型做初始化,輸出換成per-category sigmoid函數(shù),即為每種類(lèi)別訓(xùn)練一個(gè)2分類(lèi)器。結(jié)果又雙叒叕吊打了之前的方法。


這里寫(xiě)圖片描述

擴(kuò)展:在COCO上的實(shí)驗(yàn)

在Mask-RCNN的主干網(wǎng)絡(luò)上添加NL層,就可以用在物體檢測(cè)了。對(duì)比了Non-local和不加的結(jié)果,加了以后顯著提高。同時(shí)在關(guān)鍵點(diǎn)檢測(cè)上也取得了好的結(jié)果。


這里寫(xiě)圖片描述

結(jié)論

不管什么任務(wù),加了Non-local以后效果都顯著提高,簡(jiǎn)直就是神經(jīng)網(wǎng)絡(luò)界的金坷垃。正所謂,非洲農(nóng)業(yè)不發(fā)達(dá),種地要有金坷垃。神經(jīng)網(wǎng)絡(luò)訓(xùn)不好,試試加上Non-local。作者希望以后Non-local可以成為以后神經(jīng)網(wǎng)絡(luò)設(shè)計(jì)的一個(gè)標(biāo)準(zhǔn)模塊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容