原文鏈接:https://arxiv.org/abs/1811.11721
Github:https://github.com/speedinghzl/CCNet
本文也是Self-Attention機制的文章,該論文在捕獲long-range上下文信息的同時提高了計算性能並減少了GPU內存,在Cityscapes、ADE20K和MSCOCO數據集上取得了先進性能。
文中1*1卷積的理解:https://blog.csdn.net/renhaofan/article/details/82721868
Abstract
Long-range依賴能夠捕獲有用的上寫完信息從而解決視覺理解問題。本文提出一種十字交叉的網絡CCNet更有效地獲得重要的信息。具體來說,CCNet能夠通過一個新的交叉注意模塊獲取其周圍像素在十字交叉路徑上的上下文信息。通過這樣反覆的操作,每個像素最終能夠從所有的像素中捕獲long-range依賴。總體上CCNet有以下貢獻:(1)節省GPU內存。與非局部模塊non-local相比,循環十字交叉注意模塊能夠節省11倍的GPU內存佔用;(2)更高的計算性能。循環交叉注意力模塊在計算Long-range依賴時能夠減少85% non-local FLOPs;(3)在語義分割數據集Cityscapes和ADE20K和實例分割數據集COCO上取得了先進性能。
Introduction
爲了捕獲long-range依賴,Chen等人提出多尺度ASPP模塊集成上下文信息;Zhao等人提出帶有金字塔池化模塊的PSPNet。然而空洞卷積只能從周圍像素收集信息不能形成密集上下文信息,池化以非自適應方式集合上下文信息,對圖像中的所有像素採用相同的方式,不能滿足不同像素需要不同上下文依賴的條件。
爲了生成密集的基於像素的上下文信息,PSANet通過各位置的預測注意力圖集成上下問信息;Non-local網絡採用self-attention機制。然而這些基於attention的方法需要耗費大量時間和空間,有着較高的計算複雜度和佔用太大GPU內存。
本文有以下貢獻:
- 提出一種新的十字交叉注意力模塊,能夠以一種更高效的方式從long-range依賴中獲取上下文信息;
- 提出兩層遞歸CCNet,在公開數據集上取得了先進性能。
Approach
Overall
網絡結構圖如下圖所示,輸入圖片經過DCNN得到特徵圖X。爲了保留更多的細節和更有效的生成密集特徵圖,移除DCNN中最後兩個down-sampling操作,並將卷積層替換爲空洞卷積,這樣得到的特徵圖是輸入圖片的1/8大小。本文中採用的是ResNet-101作爲主體網絡。
獲得特徵圖X之後,應用卷積得到一個降維的特徵圖H並將其喂入十字交叉注意模塊CCA得到新的特徵圖H'。H'僅僅繼承了水平和豎直方向的上下文信息還不足以進行語義分割。爲了獲得更豐富更密集的上下文信息,將特徵圖H'再次喂入注意模塊中並得到特徵圖H''。這時H''的每個位置都繼承了所有像素的信息。稱遞歸結構爲遞歸十字交叉注意模塊RCCA。
爲什麼遞歸兩次就能從所有像素中捕獲long-range依賴從而生成密集豐富的上下文特徵呢?
上圖展示了右上角藍色點如何將信息傳遞到左下角綠色點的過程,在loop1中,左下角點(ux,uy)只能得到左上角點(ux,oy)和右下角點(ox,uy)的信息,右上角點(ox,oy)藍色點的信息只能傳遞到(ux,oy)和(ox,uy),還不能傳播到左下角點(ux,uy);在loop2中,左下角點(ux,uy)能夠從左上角點(ux,oy)和右下角點(ox,uy)中得到信息,這時已經包含了藍色點的信息,所以右上角點信息傳播到左下角點。同理,任何不能一次遍歷的位於十字位置的點只需兩次就能完全遍歷。
Criss-Cross Attention
局部特徵圖H(C*W*H)採用1*1卷積降維得到特徵圖Q和K(C'*W*H),其中C'<C。從Q中的某一個位置u,u其實就是一個像素,從Q中取出這個u,那個Qu其實就是一個通道維向量C'。同時,從K中與u相同位置處取出u所在的一行和一列共(H+W-1)個像素,即爲特徵向量Ωu,Ωu形狀如下圖(u就是十字中心位置):
Ωi,u是第i個Ωu,Affine操作就是:
因此A的大小爲(H+W-1)*W*H
從H經1*1卷積後得到另一卷積層V(C*W*H),在空間維特徵V中每一位置u得到向量Vu(C)和φu((H+W-1)*C),然後將A與V中每一個u的特徵向量做Aggregation操作:
從而得到輸出的H'大小爲C*W*H
Results
從上圖中可以看到白色圈內的容易被錯分,當loops增加後效果改善的很明顯。
在Cityscapes驗證集上的mIoU。
在ADE20K上驗證集上的mIoU。
上表中可以看到節省11倍的GPU memory和85%的計算性能。
參考資料: