即插即用的漲點神器,南航開源AFF:注意力特征融合

極市導(dǎo)讀
?本文介紹了一種即插即用的漲點神器——Attentional Feature Fusion(AFF)。注意力特征融合技術(shù)適用于大多數(shù)常見場景,本文詳細展示了它的實現(xiàn)方法和實驗結(jié)果。>>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿

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
第1類:將多個尺度上的特征或它們連接的結(jié)果輸入注意模塊生成多尺度上的Faeture map,注意模塊內(nèi)上下文聚合的特征尺度要保持統(tǒng)一。 第2類:也被稱為多尺度空間注意,通過大小不同的卷積核或從注意模塊內(nèi)的金字塔聚集上下文的特征。
1)、MS-CAM通過逐點卷積來關(guān)注通道的尺度問題,而不是大小不同的卷積核。 2)、MS-CAM不是在主干網(wǎng)中,而是在通道注意力模塊中局部本地和全局的特征上下文特征。
2.2、Skip Connections in Deep Learning
3 本文方法:MS-CAM
3.1、Multi-Scale Channel Attention Module(MS-CAM)



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模塊


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模塊


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é)果







推薦閱讀
ACCV 2020國際細粒度網(wǎng)絡(luò)圖像識別競賽正式開賽!

評論
圖片
表情
