Motivation: 文章從BM3D去噪算法中的non-local means 和self-attention出發(fā)轻抱,在neural network中考慮不同空間和時(shí)間位置上的特征之間的關(guān)系鹊汛。NL-means去噪與常用的雙線性濾波爽雄、中值濾波等利用圖像局部信息來(lái)濾波不同的是,它利用了整幅圖像來(lái)進(jìn)行去噪灰蛙,以圖像塊為單位在圖像中尋找相似區(qū)域,再對(duì)這些區(qū)域求平均,能夠比較好地去掉圖像中存在的高斯噪聲巧还。non-local在一個(gè)位置的計(jì)算響應(yīng)是輸入特性圖中所有位置的特征的加權(quán)總和。一組位置可以在空間坊秸、時(shí)間或時(shí)空上麸祷,適用于圖像、序列和視頻問(wèn)題褒搔。
non-local主要是下面這個(gè)公式:
上式中阶牍,輸入是x(圖片,序列星瘾,視頻 features)走孽,輸出是y,i和j分別代表輸入的某個(gè)(空間琳状,時(shí)間磕瓷,時(shí)空)位置,x_i是一個(gè)向量,維數(shù)跟x的channel數(shù)一樣困食,f是一個(gè)計(jì)算任意兩點(diǎn)相似關(guān)系的函數(shù)边翁,輸出一個(gè)值作為權(quán)重,g函數(shù)計(jì)算j處這個(gè)點(diǎn)的特征陷舅。為了計(jì)算輸出層的一個(gè)點(diǎn)倒彰,需要將輸入的每個(gè)點(diǎn)都考慮一遍,而且考慮的方式很像attention莱睁,輸出的某個(gè)點(diǎn)在原圖上的attention待讳,而mask則是相似性給出。最后C(x)是歸一化項(xiàng)仰剿。
以圖像為例创淡,為了簡(jiǎn)化問(wèn)題,作者簡(jiǎn)單地設(shè)置g函數(shù)實(shí)現(xiàn)時(shí)二維用1x1卷積南吮,三維用1x1x1卷積琳彩,w均為待學(xué)習(xí)的參數(shù)。相似性度量函數(shù)f的選擇有多種:
Embedded Gaussian的例子:
實(shí)現(xiàn)中可以用softmax歸一化部凑,non-local可以轉(zhuǎn)換為:
為了能讓non-local作為一個(gè)組件直接插入任意的神經(jīng)網(wǎng)絡(luò)中露乏,同時(shí)不破壞模型原有的操作。作者把non-local設(shè)計(jì)成residual block的形式涂邀,并且輸出跟原圖大小一致瘟仿。Wz為1x1的卷積,這里采用bottleneck形式降維一半比勉,最后利用1x1卷積升維至輸入維度:
具體實(shí)現(xiàn)
用for循環(huán)實(shí)現(xiàn)肯定是很慢的劳较。如果在尺寸很大的輸入上應(yīng)用non-local layer,也是計(jì)算量很大的浩聋。后者的解決方案是观蜗,只在高階語(yǔ)義層中引入non-local layer。還可以通過(guò)對(duì)embedding( )的結(jié)果加pooling層來(lái)進(jìn)一步地減少計(jì)算量衣洁。
對(duì)于前者墓捻,注意到f的計(jì)算可以化為矩陣運(yùn)算,我們實(shí)際上可以將整個(gè)non-local化為矩陣乘法運(yùn)算+卷積運(yùn)算坊夫。如下圖所示毙替,其中oc為output_channels,卷積操作的輸出filter數(shù)量践樱。f(.)的操作是每個(gè)點(diǎn)的特征向量(通道個(gè)數(shù)的維度)進(jìn)行內(nèi)積,時(shí)空信息保留了下來(lái)凸丸,輸出還是TxHxW大小拷邢。
圖中T,H,W代表輸入特征的維度。其中T是對(duì)于視頻幀數(shù)屎慢,特征圖尺寸為T(mén)×H×W×1024 也就是有 1024 個(gè)通道瞭稼。 f函數(shù)采用的是公式3中的Embedded Gaussian忽洛。藍(lán)色框表示1×1×1 的卷積操作,這種結(jié)構(gòu)為512通道的“瓶頸”(bottleneck)結(jié)構(gòu)环肘。對(duì)于分割或檢測(cè)任務(wù)欲虚,1x1的卷積壓縮通道數(shù),形成瓶頸結(jié)構(gòu)(bottleneck)悔雹「炊撸或者在f(.)對(duì)應(yīng)的1x1卷積之后使用pooling來(lái)減小H,W,即采樣一部分的j而不是所有的j進(jìn)行信息融合腌零。
與全連接層的關(guān)系:
non-local block利用兩個(gè)點(diǎn)的相似性對(duì)每個(gè)位置的特征做加權(quán)梯找,而全連接層則是利用位置相關(guān)的權(quán)重參數(shù)直接對(duì)每個(gè)位置加權(quán)。于是益涧,全連接層可以看成non-local block的一個(gè)特例:
1. 任意兩點(diǎn)的相似性?xún)H跟兩點(diǎn)的位置有關(guān)锈锤,而與兩點(diǎn)的具體feature無(wú)關(guān),即 f(xi,xj)=wij
2. g是identity函數(shù)闲询, g(x)=x
3. 歸一化系數(shù)為1久免。歸一化系數(shù)跟輸入無(wú)關(guān),全連接層不能處理任意尺寸的輸入扭弧。
Pytorch 復(fù)現(xiàn)代碼:
??????非局部神經(jīng)網(wǎng)絡(luò)在計(jì)算上也比三維卷積神經(jīng)網(wǎng)絡(luò)更加經(jīng)濟(jì)阎姥。作者在 Kinetics 和 Charades 數(shù)據(jù)集上做了全面的對(duì)比研究。僅使用 RGB 數(shù)據(jù)寄狼,不使用任何高級(jí)處理(例如光流丁寄、多尺度測(cè)試),就取得了與這兩個(gè)數(shù)據(jù)集上競(jìng)賽冠軍方法相當(dāng)乃至更好的結(jié)果泊愧。
??????為了證明非局部運(yùn)算的通用性伊磺,作者在 COCO 數(shù)據(jù)集上進(jìn)行了物體檢測(cè)、實(shí)例分割和人體姿態(tài)關(guān)鍵點(diǎn)檢測(cè)的實(shí)驗(yàn)删咱。他們將非局部運(yùn)算模塊與 Mask R-CNN 結(jié)合屑埋,新模型在計(jì)算成本稍有增加的情況下,在所有三個(gè)任務(wù)中都取得了最高的精度痰滋。由此表明非局部模塊可以作為一種通用的基本組件摘能,在設(shè)計(jì)深度神經(jīng)網(wǎng)絡(luò)時(shí)使用。
實(shí)驗(yàn):
對(duì)于視頻分類(lèi)任務(wù)整個(gè)視頻平均取10個(gè)clip敲街,計(jì)算softmax值后平均团搞。8卡,一卡8個(gè)clip多艇,minibatch為64逻恐,輸入clip為32幀。
Reference
Wang X, Girshick R, Gupta A, et al. Non-local Neural Networks[J].CVPR 2018.
Vaswani A, Shazeer N, Parmar N, et al. Attention is all you need[C]. NIPS 2017.
知乎:https://zhuanlan.zhihu.com/p/33345791
Pytorch:https://github.com/AlexHex7/Non-local_pytorch
引自知乎:
??????cnn一開(kāi)始是面向目標(biāo)實(shí)體識(shí)別的任務(wù)的。它就是要模擬人的認(rèn)知方式复隆,達(dá)到一個(gè)從局部到宏觀的層次化認(rèn)知流程拨匆。所以每一層的卷積核就沒(méi)有設(shè)計(jì)過(guò)大,底層的去捕捉輪廓信息挽拂,中層的組合輪廓信息惭每,高層的組合全局信息。但對(duì)于序列化的任務(wù)亏栈,這種思路就不一定能學(xué)到充分的需要的信息台腥。
???????識(shí)別揮拍這個(gè)動(dòng)作,僅僅利用傳統(tǒng)cnn卷積核關(guān)注手腕周?chē)男畔⑹遣粔虻穆仄耍覀冃枰私獾饺说氖滞蟾母觳怖谰簟⒓绨颉⑾ドw以及腳發(fā)生了哪些一系列的相對(duì)位移才能判斷出揮拍動(dòng)作镇饮。
卷積核真的只關(guān)注于局部嗎蜓竹?如果只看一層,那答案就是是的储藐。但縱觀整個(gè)網(wǎng)絡(luò)俱济,不同的全局信息最終被綜合,但由于sampling損失了大量信息钙勃,就沒(méi)有non-local效果明顯蛛碌。所以傳統(tǒng)cnn不是很local,但是信息逐層傳遞丟失太多以致于不能有期待的效果辖源。
1蔚携、單一的non-local block加在較淺層次效果顯著。
高層次丟失的信息太多了克饶,找不到細(xì)小的遠(yuǎn)距離的聯(lián)系酝蜒,太模糊了。
2矾湃、多個(gè)non-local block加入亡脑,也就是加深non-local特性,有一定效果提升但不會(huì)很明顯邀跃。
既然容易起作用的是在低層加霉咨,那么使勁加深意義不大,加多了這種東西就要考慮梯度消失和引入噪聲拍屑。畢竟你把背景全都扔進(jìn)來(lái)算途戒。
3、時(shí)空同時(shí)non-local比單一時(shí)間維度或單一空間維度效果都要好僵驰。
4棺滞、non-local比三維cnn要好裁蚁。
這是有人會(huì)問(wèn),non-local這么吊怎么不把卷積層全都替換掉继准?
肯定不行的!你要依賴(lài)小卷積核去捕捉主體信息矮男,同時(shí)用他的block捕捉全局信息移必,兩者相輔相成才有好的效果。在視頻變長(zhǎng)以后毡鉴,non-local的trick的提升變小了崔泵。因?yàn)樵跁r(shí)間維度上,這些短視頻幀數(shù)太短猪瞬,時(shí)間維度上的小卷積得到的信息不足憎瘸,劣勢(shì)明顯。時(shí)間變長(zhǎng)了陈瘦,non-local也不能handle這么大的信息量了幌甘,損失一些信息的小卷積反而不那么差勁了