SENet
Squeeze-and-Excitation Networks (SENet) ,CVPR2017 [code]
很多工作被提出來從空間維度層面來提升網(wǎng)絡(luò)的性能,如 Inception 結(jié)構(gòu)中嵌入了多尺度信息,聚合多種不同感受野上的特征來獲得性能增益;在 Inside-Outside 網(wǎng)絡(luò)中考慮了空間中的上下文信息;還有將 Attention 機(jī)制引入到空間維度上。那么很自然想到,網(wǎng)絡(luò)是否可以從其他層面來考慮去提升性能,比如考慮特征通道之間的關(guān)系?SENet就是基于這一點(diǎn),Squeeze 和 Excitation 是兩個(gè)非常關(guān)鍵的操作。動(dòng)機(jī)是希望顯式地建模特征通道之間的相互依賴關(guān)系。另外,并沒有引入一個(gè)新的空間維度來進(jìn)行特征通道間的融合,而是采用了一種全新的「特征重標(biāo)定」策略。具體來說,就是通過學(xué)習(xí)的方式來自動(dòng)獲取到每個(gè)特征通道的重要程度,然后依照這個(gè)重要程度去提升有用的特征并抑制對(duì)當(dāng)前任務(wù)用處不大的特征。
SE 模塊的示意圖如下。給定一個(gè)輸入 x,其特征通道數(shù)為 ,通過一系列卷積等一般變換后得到一個(gè)特征通道數(shù)為
的特征。與傳統(tǒng)的 CNN 不一樣的是,接下來我們通過三個(gè)操作來重標(biāo)定前面得到的特征。
首先是 Squeeze 操作,我們順著空間維度來進(jìn)行特征壓縮,將每個(gè)二維的特征通道變成一個(gè)實(shí)數(shù),這個(gè)實(shí)數(shù)某種程度上具有全局的感受野,并且輸出的維度和輸入的特征通道數(shù)相匹配。它表征著在特征通道上響應(yīng)的全局分布,而且使得靠近輸入的層也可以獲得全局的感受野,這一點(diǎn)在很多任務(wù)中都是非常有用的。
其次是 Excitation 操作,它是一個(gè)類似于循環(huán)神經(jīng)網(wǎng)絡(luò)中門的機(jī)制。通過參數(shù) w 來為每個(gè)特征通道生成權(quán)重,其中參數(shù) w 被學(xué)習(xí)用來顯式地建模特征通道間的相關(guān)性。
最后是一個(gè) Reweight 的操作,我們將 Excitation 的輸出的權(quán)重看做是經(jīng)過特征選擇后的每個(gè)特征通道的重要性,然后通過乘法逐通道加權(quán)到先前的特征上,完成在通道維度上的對(duì)原始特征的重標(biāo)定。
左圖是將 SE 模塊嵌入到 Inception 結(jié)構(gòu)的一個(gè)示例。方框旁邊的維度信息代表該層的輸出。這里我們使用 global average pooling 作為 Squeeze 操作。緊接著兩個(gè) Fully Connected 層組成一個(gè) Bottleneck 結(jié)構(gòu)去建模通道間的相關(guān)性,并輸出和輸入特征同樣數(shù)目的權(quán)重。我們首先將特征維度降低到輸入的 1/16,然后經(jīng)過 ReLu 激活后再通過一個(gè) Fully Connected 層升回到原來的維度。這樣做比直接用一個(gè) Fully Connected 層的好處在于:
1)具有更多的非線性,可以更好地?cái)M合通道間復(fù)雜的相關(guān)性;
2)極大地減少了參數(shù)量和計(jì)算量。然后通過一個(gè) Sigmoid 的門獲得 0~1 之間歸一化的權(quán)重,最后通過一個(gè) Scale 的操作來將歸一化后的權(quán)重加權(quán)到每個(gè)通道的特征上。
除此之外,SE 模塊還可以嵌入到含有 skip-connections 的模塊中。右圖是將 SE 嵌入到 ResNet 模塊中的一個(gè)例子,操作過程基本和 SE-Inception 一樣,只不過是在 Addition 前對(duì)分支上 Residual 的特征進(jìn)行了特征重標(biāo)定。如果對(duì) Addition 后主支上的特征進(jìn)行重標(biāo)定,由于在主干上存在 0~1 的 scale 操作,在網(wǎng)絡(luò)較深 BP 優(yōu)化時(shí)就會(huì)在靠近輸入層容易出現(xiàn)梯度消散的情況,導(dǎo)致模型難以優(yōu)化。
目前大多數(shù)的主流網(wǎng)絡(luò)都是基于這兩種類似的單元通過 repeat 方式疊加來構(gòu)造的。由此可見,SE 模塊可以嵌入到現(xiàn)在幾乎所有的網(wǎng)絡(luò)結(jié)構(gòu)中。通過在原始網(wǎng)絡(luò)結(jié)構(gòu)的 building block 單元中嵌入 SE 模塊,我們可以獲得不同種類的 SENet。如 SE-BN-Inception、SE-ResNet、SE-ReNeXt、SE-Inception-ResNet-v2 等等。
SKNet
Selective Kernel Networks (SKNet) ,CVPR2019 [code]
本文的motivation是發(fā)現(xiàn)過去的卷積網(wǎng)絡(luò)在每層都share相同的感受野大小,而在神經(jīng)科學(xué)中,視覺皮層單元中的感受野大小應(yīng)該是受stimulus變化而自適應(yīng)調(diào)整,故SK unit 就是實(shí)現(xiàn)這個(gè)功能。對(duì)多個(gè)不同感受野大小的branch進(jìn)行融合,融合中使用的是類SENet結(jié)構(gòu),最后使用類似門機(jī)制的softmax attention來分配branch的重要性。
- Split 即進(jìn)行不同感受野卷積操作,上面的branch為3x3 kernel, dilate size=1的,而下面的為5x5 的dilate size=2的卷積(為了進(jìn)一步提高效率,將常規(guī)的5x5卷積替換為5x5的空洞卷積)。
- Fuse 即進(jìn)行特征融合,對(duì)兩個(gè)branch卷積后的特征進(jìn)行疊加,然后標(biāo)準(zhǔn)SE過程(Global AVG, FC-BN-ReLU,F(xiàn)C),這里最后的FC是分別出來兩個(gè)branch的channel weight vector
- Select 即對(duì)Fuse最后的兩個(gè)branch的channel weight vector進(jìn)行每個(gè)位置各自的Softmax操作,類似門機(jī)制,可得到兩個(gè)branch中每個(gè)channel各自的權(quán)值,乘回原始特征中,最后進(jìn)行特征疊加。
通過在自然圖像中放大目標(biāo)對(duì)象和縮小背景來模擬刺激,以保持圖像大小不變。結(jié)果發(fā)現(xiàn),當(dāng)目標(biāo)物體越來越大時(shí),大多數(shù)神經(jīng)元會(huì)越來越多地從更大的核路徑中收集信息。這些結(jié)果表明,所提出的sknet中的神經(jīng)元具有自適應(yīng)的感受野大小。
Non-Local Net
Non-local neural networks(NLNet), [code]
Local這個(gè)詞主要是針對(duì)感受野(receptive field)來說的。以卷積操作為例,它的感受野大小就是卷積核大小,而我們一般都選用33,55之類的卷積核,它們只考慮局部區(qū)域,因此都是local的運(yùn)算。同理,池化(Pooling)也是。相反的,non-local指的就是感受野可以很大,而不是一個(gè)局部領(lǐng)域。
那我們碰到過什么non-local的操作嗎?有的,全連接就是non-local的,而且是global的。但是全連接帶來了大量的參數(shù),給優(yōu)化帶來困難。這也是深度學(xué)習(xí)(主要指卷積神經(jīng)網(wǎng)絡(luò))近年來流行的原因,考慮局部區(qū)域,參數(shù)大大減少了,能夠訓(xùn)得動(dòng)了。
我們知道,卷積層的堆疊可以增大感受野,但是如果看特定層的卷積核在原圖上的感受野,它畢竟是有限的。這是local運(yùn)算不能避免的。然而有些任務(wù),它們可能需要原圖上更多的信息,比如attention。如果在某些層能夠引入全局的信息,就能很好地解決local操作無法看清全局的情況,為后面的層帶去更豐富的信息。
上面的公式中,輸入是x,輸出是y,i和j分別代表輸入的某個(gè)空間位置,是一個(gè)向量,維數(shù)跟x的channel數(shù)一樣,f是一個(gè)計(jì)算任意兩點(diǎn)相似關(guān)系的函數(shù),g是一個(gè)映射函數(shù),將一個(gè)點(diǎn)映射成一個(gè)向量,可以看成是計(jì)算一個(gè)點(diǎn)的特征。也就是說,為了計(jì)算輸出層的一個(gè)點(diǎn),需要將輸入的每個(gè)點(diǎn)都考慮一遍,而且考慮的方式很像attention:輸出的某個(gè)點(diǎn)在原圖上的attention,而mask則是相似性給出。
以圖像為例,為了簡(jiǎn)化問題,作者簡(jiǎn)單地設(shè)置g函數(shù)為一個(gè)1*1的卷積。相似性度量函數(shù)f的選擇有多種:
- Gussian:
- Embedded Gussian:
- Concatenation:
最后一種的歸一化系數(shù)C(x)選擇為x的點(diǎn)數(shù),只是為了簡(jiǎn)化計(jì)算,同時(shí),還能保證對(duì)任意尺寸的輸入,不會(huì)產(chǎn)生數(shù)值上的尺度伸縮。
為了能讓non-local操作作為一個(gè)組件,可以直接插入任意的神經(jīng)網(wǎng)絡(luò)中,作者把non-local設(shè)計(jì)成residual block的形式,讓non-local操作去學(xué)x的residual:
實(shí)際上是一個(gè)卷積操作,它的輸出channel數(shù)跟x一致。這樣以來,non-local操作就可以作為一個(gè)組件,組裝到任意卷積神經(jīng)網(wǎng)絡(luò)中。
GCNet
Non-local Networks Meet Squeeze-Excitation Networks and Beyond (GCNet) , [code]
為了捕獲長(zhǎng)距離依賴關(guān)系,產(chǎn)生了兩類方法:
- 第一種是采用自注意力機(jī)制來建模query對(duì)的關(guān)系。
- 第二種是對(duì)query-independent(可以理解為無query依賴)的全局上下文建模。
NLNet就是采用自注意力機(jī)制來建模像素對(duì)關(guān)系。然而NLNet對(duì)于每一個(gè)位置學(xué)習(xí)不受位置依賴的attention map,造成了大量的計(jì)算浪費(fèi)。
SENet用全局上下文對(duì)不同通道進(jìn)行權(quán)值重標(biāo)定,來調(diào)整通道依賴。然而,采用權(quán)值重標(biāo)定的特征融合,不能充分利用全局上下文。
通過嚴(yán)格的實(shí)驗(yàn)分析,作者發(fā)現(xiàn)non-local network的全局上下文在不同位置幾乎是相同的,這表明學(xué)習(xí)到了無位置依賴的全局上下文。基于上述觀察,本文提出了GCNet,即能夠像NLNet一樣有效的對(duì)全局上下文建模,又能夠像SENet一樣輕量。
作者通過計(jì)算一個(gè)全局的attention map來簡(jiǎn)化non-local block,并且對(duì)所有位置共享這個(gè)全局attention map。忽略
和
表示為線性轉(zhuǎn)換矩陣。為了進(jìn)一步減少簡(jiǎn)化版non-local block的計(jì)算量,將
移到attention pooling的外面,表示為:
不同于原始的non-local block,簡(jiǎn)化版non-local block的第二項(xiàng)是不受位置依賴的,所有位置共享這一項(xiàng)。因此,作者直接將全局上下文建模為所有位置特征的加權(quán)平均值,然后聚集全局上下文特征到每個(gè)位置的特征上。
Global Context Modeling Framework
(a)全局attention pooling:采用1x1卷積 和softmax函數(shù)來獲取attention權(quán)值,然后執(zhí)行attention pooling來獲得全局上下文特征
(b)特征轉(zhuǎn)換:采用1x1卷積
(c)特征聚合:采用相加操作將全局上下文特征聚合到每個(gè)位置的特征上。
GIoRe
Graph-Based Global Reasoning Network(GIoRe) , [code]
此文的目標(biāo)其實(shí)跟Non-local一樣,希望能得到全局的上下文信息,即reasoning globally。開頭的圖1比較炫酷.對(duì)特征從坐標(biāo)空間映射到交互空間,使用圖卷積網(wǎng)絡(luò)GCN進(jìn)一步推理來獲取global context,最后反映射回坐標(biāo)空間,可看成是 Non-local Block的優(yōu)化版本
從上圖可以看出文章的主要做的事情,就是希望推理不同區(qū)域間的上下文關(guān)系;而在Coordinate Space去做比較難處理且低效,就映射到Interaction space,然后通過圖卷積網(wǎng)絡(luò)來進(jìn)行reasoning,剛好這也是圖網(wǎng)絡(luò)所擅長(zhǎng)的。
如上圖所示,GloRe Unit主要做了幾件事情:
- 空間映射(中間黃色區(qū)域的 左邊是從坐標(biāo)空間映射到交互空間;而 右邊是從交互空間映射回坐標(biāo)空間):空間映射目的是找到子空間可以 more friendly for global reasoning over disjoint and distant regions,但又不想像 I3D-GCN[7] 一樣用額外的 detector 或者 label 來框出區(qū)域, 故采取類似 non-local 中的做法,直接來 weighted global pooling:假定輸入 X的維度為[C,H,W],則最后子空間上的 node states V 可表示為
這里的 N 是超參,即交互空間中節(jié)點(diǎn)的個(gè)數(shù)(好像后面可視化環(huán)節(jié)設(shè) N=128 ),而C '為reduced channel number。
2.圖卷積推理:這里假定Nodes間都有交互,就形成了fully connected graph,然后需要學(xué)習(xí)的是affine matrix Ag和圖網(wǎng)絡(luò)參數(shù)Wg,上圖中間黃色區(qū)域典型的圖卷積公式如下:
而文中把它巧妙地分解成兩個(gè)步驟,則先進(jìn)行節(jié)點(diǎn)間的message information propagation,然后再更新節(jié)點(diǎn)內(nèi)部的states,如下圖所示,分別使用兩個(gè)1D卷積來實(shí)現(xiàn)。
OcNet
未完待續(xù)......
Octave
Octave Convolution [4], 將特征分解成低空間分辨率和原始空間分辨率的branch,并進(jìn)行intra & inter branch間的信息交互;通過分解成低空間分辨率,可使卷積操作更加輕量級(jí)。
文中的初衷和story出發(fā)點(diǎn)是挺好的,就是借圖像中高頻(細(xì)節(jié),非結(jié)構(gòu)性)和低頻(邊緣形狀,結(jié)構(gòu)性)信息一說,來構(gòu)造卷積來分解成低頻和高頻信息,其中低頻用更低的空間分辨率來表示,達(dá)到去除空間冗余的目的,從而節(jié)省模型參數(shù)及計(jì)算量
上面橙色branch表示High frequency,下面藍(lán)色branch表示Low frequency;綠色箭頭表示 intra-branch information update,紅色箭頭表示 inter-branch information exchange。看到這里,恐怕有點(diǎn) SKNet 的小感覺了。
1.Selective Kernel Unit, SKNet [1],對(duì)多個(gè)不同感受野大小的branch進(jìn)行融合,融合中使用的是類SENet [5]結(jié)構(gòu),最后使用類似門機(jī)制的softmax attention來分配branch的重要性。
2.Global Context (GC) block, GCNet [2], 將 Non-local Block [6]進(jìn)行簡(jiǎn)化(position間共享context feature,channel間不共享)來高效提取global context,并融合SENet來進(jìn)行輕量地channel context計(jì)算。
3.Global Reasoning Unit, GloRe [3], 對(duì)特征從坐標(biāo)空間映射到交互空間,使用圖卷積網(wǎng)絡(luò)GCN進(jìn)一步推理來獲取global context,最后反映射回坐標(biāo)空間,可看成是 Non-local Block的優(yōu)化版本。
- Octave Convolution [4], 將特征分解成低空間分辨率和原始空間分辨率的branch,并進(jìn)行intra & inter branch間的信息交互;通過分解成低空間分辨率,可使卷積操作更加輕量級(jí)。
[參考鏈接]
https://mp.weixin.qq.com/
https://zhuanlan.zhihu.com/p/33345791
https://zhuanlan.zhihu.com/p/64988633
http://tongtianta.site/paper/10696