1. 程式人生 > >residual attention network 論文解讀

residual attention network 論文解讀

論文下載連結:https://arxiv.org/abs/1704.06904

github程式碼下載連結caffe:https://github.com/fwang91/residual-attention-network

摘要簡介

在本篇論文中,提出了Residual attention network,該網路利用attention機制(可以將該結構使用到現有的端到端的卷積網路中),Residual attention network網路取樣將attention結構堆疊的方法來改變特徵的attention。並且隨著網路的加深,attention module會做適應性的改變,在每一個attention modual中,採用上取樣和下采樣結構,另外作者提出了attention residual learning去訓練更深的網路。

【文章的主要創新點】

  1. stacked network structure:通過堆疊多個attention modules來構建residual attention network,這點跟其他的深度網路很像的。
  2. attention residual learning:如果僅僅是堆疊attention modules,很明顯會使得模型的精度降低,所以作者提出了learning的思想,來優化residual attention network
  3. bottom-up top-down feedforward attention: bottom-up top-down就是FCN中的特徵圖先變小,然後通過上取樣將影象變大的方法,作者利用這種方法將特徵權重新增到特徵圖上

下面簡要介紹一下這篇文章

先拋一張attention結構圖

根據上圖結構可知,作者將每個Attention Module分成2個分支,分別為mask branch(attention部分)以及trunk banch(原始部分),attention的輸出利用公式代表如下,其中T代表trunk banch,M代表mask branch,公式很清晰。

H
i , c ( x ) = M i , c ( x ) T i , c ( x )

並且作者在論文中提到: 在attention modules中attention mask不僅僅在前向傳播中進行特徵的選擇,並且在反向傳播中也是對梯度的過濾,mask的導數如下: θ 代表mask的引數, ψ 代表trunk的引數,這裡先留一個疑問,反向傳播的時候mask如何處理??

如果僅僅使用一個簡單網路的分支去產生mask會怎麼樣呢?
1. 影象背景複雜,需要不同的attentions, 這樣使用簡單的分支網路就需要channel的指數倍去對應不同的引數組合,這裡怎麼理解呢?比如這張圖有天空、草地很多的attention,那就需要多種組合了,一個肯定是不夠了,這樣就需要很多的attention網路了
2. 簡單的attention只是修改了一次的features,如果修改錯了,或者沒修改就會出現問題了。

attention的好處在哪裡呢?

如下圖所示,下圖中既有氣球,又有背景(藍天),所以採用本文的堆疊attention modules的方法,前面層可以提取背景的attention,後面層可以提取氣球的attention,前後結合就很好的目標提取出來了。

attention residual learning

但是,很顯然如果只是簡單的堆疊,效果肯定不會好,不然早就有人發明出來attention network了,但是這裡作者也解釋了一下為什麼這樣簡單的做法效果不好:
* mask的範圍是0-1,重複的相乘會使得特徵值逐漸變小
* mask可能會破壞trunk branch的好的特性,比如resnet中的恆等。

基於這,作者提出了attention residual learning,咋搞的?如下:M代表mask,F代表feature map,這就有點類似於resnet,即使M的大小為0,我們還保留著F(x)的大小,這就是作者所謂的attention residual learning

H i , c ( x ) = ( 1 + M i , c ( x ) ) F i , c ( x )

soft mask branch

mask branch作者主要採用簡單的類似於FCN的網路實現,首先,針對輸入,採用幾次max pooling去增加感受野,達到最小解析度之後,利用一個對稱的網路結構將特徵放大回去。這裡作者表述,使用線性插值進行放大:

原文表述如下:

Linear interpolation up sample the output after some Residual Units. The number of bilinear interpolation is the same as max pooling to keep the output size the same as the input feature map.

然後,接2個1*1的卷積層,最後在output後面接一個sigmoid layer,將輸出歸一化到[0,1]區間。另外,在mask branch中,作者增加了skip connection 在bottom-up , top-down 之間。

另外,作者在這裡解釋到,雖然我們這同樣採用了FCN網路,但是與之不同的是,FCN直接應用於複雜問題,而我們這裡是應用到提高trunk branch的feature的質量,兩者的目的不同。

網路結構如下圖所示:圖例給的很好,很清晰

這裡需要注意一下,stage1的mask中間有兩個連線,stage2的mask中有一個連線,stage3中mask沒有連線

spatial attention and channel attention

這裡作者想,針對mask branch,同樣可以採用一些方法進行約束,使之達到最好的效果,這裡作者嘗試了3種方法:mixed attention, channel attention, spatial attention,其公式分別為f1,f2,f3 表示如下:

其中,f1就是對每個channel的每個位置進行sigmoid操作,f2,對每個位置,求所有channel的L2範數,f3,對每個channel先進行標準化,然後對每個位置進行sigmoid操作。

實驗結果如圖所示,採用的是Attention-56網路:

Experiments

作者首先對比了attention residual learning的作用,作者採用含有learning的模組(ARL)以及不含learning的模組(NAL)分別進行實驗,實驗結果如下,可以看出帶學習的完勝。

為了一探究竟,作者計算了每個stage的output的mean absolute response,網路採用attention-164,實驗結果如下圖所示:

可以發現,不帶學習的話,在第二個stage的時候,response已經降為0了,這樣哪會有效果尼。。。。為什麼會這樣呢?作者解釋到:

attention module 通過重複的mask以及feature進行點積來抑制噪聲,增強有效資訊,但是重複的點積不僅會抑制噪聲的梯度同時會抑制有用資訊的梯度,所以,通過learning的方法,增加了identical mapping單元可以增強訊號的傳播。

原文是這麼解釋的:The Attention Module is designed to suppress noise while keeping useful information by applying dot product between feature and soft mask. However, repeated dot product will lead to severe degradation of both useful and useless information in this process. The attention residual learning can relieve signal attenuation using identical mapping, which enhances the feature contrast.

Comparison of different mask structures

另外作者進行了mask的對比,對比結果發現採用encoder and decoder的mixed attention效果會好一些,如下圖:

前面的實驗都是在cifar資料集上測試的,那麼在imagenet上的結果如何呢?

結果如下圖

不難發現,attention的方法提升效果還是很顯著的。

下面展示一下作者提供的caffe.prototxt中的程式碼,有利於實現:

attention-56程式碼連結:https://github.com/fwang91/residual-attention-network/blob/master/imagenet_model/Attention-56-deploy.prototxt

將上面的網路prototxt複製到下面的連結,按shift+enter就可以看到網路的形狀了

展示網路形狀的網頁連結

結合figure2提供的說明看這個網路更好理解,attention-56就是按照這個來的,r=1,下面對mask進行介紹:

這裡需要突出的是,caffe中的interp層,attention-56採用interp進行上取樣,有的部落格說這裡採用decon(反捲積)也可以,這裡擷取的是attention-56的第二個stage的attention部分,這裡可能看不清,主要是讓大家對整體的結構有個概念,這裡具備了上面figure2中stage2的所有元素,這裡我就不詳細的展開了,感興趣的可以參考作者github提供的程式碼進行檢視,需要強調的是,這裡的上取樣就是採用interp實現的,知道這點,參考作者的fiture2就很好理解了。