【即插即用】漲點神器AFF:注意力特征融合(已經(jīng)開源,附論文和源碼鏈接)

這篇文章一種新注意力特征融合機制AFF!性能優(yōu)于SKNet、SENet等方法,可應(yīng)用于分類、語義分割和目標(biāo)檢測等方向。
1、簡介
特征融合是指來自不同層或分支的特征的組合,是現(xiàn)代網(wǎng)絡(luò)體系結(jié)構(gòu)中很常見的一種操作。它通常通過簡單的操作(例如求和或串聯(lián))來實現(xiàn),但這可能不是最佳選擇。在本論文中提出了一個統(tǒng)一而通用的方案,即注意力特征融合,該方案適用于大多數(shù)常見場景,包括由short and long skip connections以及在Inception層內(nèi)的特征融合。
為了更好地融合語義和尺度不一致的特征,提出也了一個多尺度的通道注意力模塊,該模塊解決了在融合不同尺度的特征時出現(xiàn)的問題。同時還通過添加另一個注意力級別(稱為迭代注意力特征融合)來緩解特征圖的初始集成的瓶頸。
2、相關(guān)工作
2.1、Multi-scale Attention Mechanism
深度學(xué)習(xí)中的注意機制模仿人類視覺注意機制,比如Squeeze-and-Excitation Networks (SENet)將全局空間信息壓縮到通道描述中,以捕獲與通道的依賴關(guān)系。近年來,研究者開始考慮注意機制的scale尺度問題:
第1類:將多個尺度上的特征或它們連接的結(jié)果輸入注意模塊生成多尺度上的Faeture map,注意模塊內(nèi)上下文聚合的特征尺度要保持統(tǒng)一。 第2類:也被稱為多尺度空間注意,通過大小不同的卷積核或從注意模塊內(nèi)的金字塔聚集上下文的特征。
提出的MS-CAM遵循ParseNet的思想,結(jié)合局部和全局特征和空間注意的想法融合注意力模塊內(nèi)部的多尺度特征,在以下2個重要方面有所不同:
1)、MS-CAM通過逐點卷積來關(guān)注通道的尺度問題,而不是大小不同的卷積核。 2)、MS-CAM不是在主干網(wǎng)中,而是在通道注意力模塊中局部本地和全局的特征上下文特征。
2.2、Skip Connections in Deep Learning
skip connection可以分為:Short Skip和Long Skip;
Short Skip:即在Res Block中添加的標(biāo)識映射快捷方式,為反向傳播期間梯度流提供了一種連續(xù)的替代路徑;
Long Skip:通過連接較低層次的細節(jié)特征和較粗分辨率的高級語義特征,幫助網(wǎng)絡(luò)獲得高分辨率的語義特征。
最近,一些基于注意的方法,如全局注意Upsampe(GAU)和跳躍注意(SA),被提出使用高級特征作為引導(dǎo)來調(diào)節(jié)長跳躍連接中的低級特征。然而,調(diào)制特征的融合權(quán)重仍然是固定的。Highway Networks(高速公路網(wǎng)絡(luò))首次引入在跳連機制(skip connection)中引入選擇機制(selection mechanism),而在某種程度上,注意力跳連接的提出可以被視為其后續(xù),但是有3個不同點:
1)、高速公路網(wǎng)絡(luò)使用一個簡單的完全連接層,只能生成一個標(biāo)量融合權(quán)重,MSCAM通過dynamic soft選擇元素的方式生成融合權(quán)重大小相同的特征圖; 2)、高速公路網(wǎng)絡(luò)只使用一個輸入特征來生成權(quán)重,而AFF模塊同時感知這兩個特征; 3)、指出了初始特征集成的重要性,提出了iAFF模塊作為解決方案;
3 本文方法---MS-CAM
3.1、Multi-Scale Channel Attention Module(MS-CAM)
其核心思想是通過改變空間池的大小,可以在多個尺度上實現(xiàn)通道關(guān)注。為了使其盡可能輕量化只在attention模塊中將局部上下文添加到全局上下文中。選擇逐點卷積(PWConv)作為通道上下文融合器,它只利用每個空間位置的點向通道融合。



class?ResGlobLocaChaFuse(HybridBlock):
????def?__init__(self,?channels=64):
????????super(ResGlobLocaChaFuse,?self).__init__()
????????with?self.name_scope():
????????????self.local_att?=?nn.HybridSequential(prefix='local_att')
????????????self.local_att.add(nn.Conv2D(channels,?kernel_size=1,?strides=1,?padding=0))
????????????self.local_att.add(nn.BatchNorm())
????????????self.global_att?=?nn.HybridSequential(prefix='global_att')
????????????self.global_att.add(nn.GlobalAvgPool2D())
????????????self.global_att.add(nn.Conv2D(channels,?kernel_size=1,?strides=1,?padding=0))
????????????self.global_att.add(nn.BatchNorm())
????????????self.sig?=?nn.Activation('sigmoid')
????def?hybrid_forward(self,?F,?x,?residual):
????????xa?=?x?+?residual
????????xl?=?self.local_att(xa)
????????xg?=?self.global_att(xa)
????????xlg?=?F.broadcast_add(xl,?xg)
????????wei?=?self.sig(xlg)
????????xo?=?2?*?F.broadcast_mul(x,?wei)?+?2?*?F.broadcast_mul(residual,?1-wei)
????????return?xo
4. 模塊
4.1、AFF模塊
基于多尺度信道的注意模塊M,Attentional Feature Fusion (AFF) 可以被表達為:


class?AXYforXplusYAddFuse(HybridBlock):
????def?__init__(self,?channels=64):
????????super(AXYforXplusYAddFuse,?self).__init__()
????????with?self.name_scope():
????????????self.local_att?=?nn.HybridSequential(prefix='local_att')
????????????self.local_att.add(nn.Conv2D(channels,?kernel_size=1,?strides=1,?padding=0))
????????????self.local_att.add(nn.BatchNorm())
????????????self.global_att?=?nn.HybridSequential(prefix='global_att')
????????????self.global_att.add(nn.GlobalAvgPool2D())
????????????self.global_att.add(nn.Conv2D(channels,?kernel_size=1,?strides=1,?padding=0))
????????????self.global_att.add(nn.BatchNorm())
????????????self.sig?=?nn.Activation('sigmoid')
????def?hybrid_forward(self,?F,?x,?residual):
????????xi?=?x?+?residual
????????xl?=?self.local_att(xi)
????????xg?=?self.global_att(xi)
????????xlg?=?F.broadcast_add(xl,?xg)
????????wei?=?self.sig(xlg)
????????xo?=?F.broadcast_mul(wei,?residual)?+?x
????????return?xo
4.2、iAFF模塊
完全上下文感知方法有一個不可避免的問題,即如何初始地集成輸入特性。初始融合質(zhì)量作為注意力模塊的輸入會對最終融合權(quán)重產(chǎn)生影響。由于這仍然是一個特征融合問題,一種直觀的方法是使用另一個attention模塊來融合輸入的特征,即iterative Attentional Feature Fusion (iAFF):


class?AXYforXYAddFuse(HybridBlock):
????def?__init__(self,?channels=64):
????????super(AXYforXYAddFuse,?self).__init__()
????????with?self.name_scope():
????????????self.local_att?=?nn.HybridSequential(prefix='local_att')
????????????self.local_att.add(nn.Conv2D(channels,?kernel_size=1,?strides=1,?padding=0))
????????????self.local_att.add(nn.BatchNorm())
????????????self.global_att?=?nn.HybridSequential(prefix='global_att')
????????????self.global_att.add(nn.GlobalAvgPool2D())
????????????self.global_att.add(nn.Conv2D(channels,?kernel_size=1,?strides=1,?padding=0))
????????????self.global_att.add(nn.BatchNorm())
????????????self.sig?=?nn.Activation('sigmoid')
????def?hybrid_forward(self,?F,?x,?residual):
????????xi?=?x?+?residual
????????xl?=?self.local_att(xi)
????????xg?=?self.global_att(xi)
????????xlg?=?F.broadcast_add(xl,?xg)
????????wei?=?self.sig(xlg)
????????xo?=?F.broadcast_mul(wei,?xi)
????????return?xo
5 實驗和可視化結(jié)果
以下是作者根據(jù)現(xiàn)存的模型設(shè)計的部分模塊以進行實驗和對比:

通過下面的表格可以看出本文所提方法的效果:
以下是基于Cifar100進行的實驗:
以下是基于ImageNet進行的實驗:
以下是Heatmap的輸出圖,可以看出該方法的注意力的聚焦更加的集中和突出重點:

更多詳細信息,可以參考論文原文:鏈接如下:
https://arxiv.org/abs/2009.14082
https://github.com/YimianDai/open-aff
參考:
[1].Attentional Feature Fusion
END
在【機器視覺CV】公眾號后臺回復(fù)?CPP,獲取 CPP 開發(fā)手冊

下載 2
在【機器視覺CV】公眾號后臺回復(fù)?
YOLO?獲取 YOLO 權(quán)重,回復(fù)?深度學(xué)習(xí)?獲取學(xué)習(xí)資源,回復(fù)?表情識別?獲取表情識別實戰(zhàn)項目

機器視覺 CV
與你分享 AI 和 CV 的樂趣
分享數(shù)據(jù)集、電子書、免費GPU
長按二維碼關(guān)注我們
