点击下方卡片,关注“CVer”公众号

AI/CV重磅干货,第一时间送达

作者:OucQxw  |  已授权转载(源:知乎)

https://zhuanlan.zhihu.com/p/415238682

Attentional Feature Fusion

论文地址(收录于WACV 2021):

https://openaccess.thecvf.com/content/WACV2021/html/Dai_Attentional_Feature_Fusion_WACV_2021_paper.html

代码地址:

https://github.com/YimianDai/open-aff

这篇文章提出了一种新注意力特征融合机制AFF,是一种即插即用的模块,性能优于SKNet、SENet等方法,可应用于分类、语义分割和目标检测等方向。

一、Motivation

特征融合是来自不同层或分支的特征的组合,是现代网络体系结构中无所不在的一部分。它通常通过简单线性的操作(例如:求和(summation)或串联(concatenation))来实现,但这可能不是最佳选择。我们提出了一个统一的通用方案,即注意力特征融合(AFF),该方案适用于大多数常见场景,包括由short and long skip connections以及在Inception层内引起的特征融合。

为了更好地融合语义和尺度不一致的特征,我们提出了多尺度通道注意力模块(MS-CAM),该模块解决了融合不同尺度特征时出现的问题。我们还证明了初始特征融合可能会成为瓶颈,并提出了迭代注意力特征融合模块(iAFF)来缓解此问题。

1.近年发展的SKNet和ResNeSt注意力特征融合存在的问题:

  • 场景限制:SKNet和ResNeSt只关注同一层的特征选择,无法做到跨层特征融合。

  • 简单的初始集成 :为了将得到的特征提供给注意力模块,SKNet通过相加来进行特征融合,而这些特征在规模和语义上可能存在很大的不一致性,对融合权值的质量也有很大的影响,使得模型表现受限。

  • 偏向上下文聚合尺度:SKNet和ResNeSt中的融合权值是通过全局通道注意机制生成的,对于分布更全局的信息,该机制更受青睐,但是对于小目标效果就不太好。是否可以通过神经网络动态地融合不同尺度的特征?

2.本文的贡献,针对于上述三个问题,提出以下解决办法:

  • 注意特征融合模块(AFF),适用于大多数常见场景,包括由short and long skip connections以及在Inception层内引起的特征融合。

  • 迭代注意特征融合模块(IAFF),将初始特征融合与另一个注意力模块交替集成。

  • 引入多尺度通道注意力模块(MSCAM),通过尺度不同的两个分支来提取通道注意力。

二、Method

1.Multi-scale Channel Attention Module (MS-CAM)

MS-CAM 主要是延续 ParseNet 的想法,再于 CNN 上结合 Local / Global 的特征,并在空间上用 Attention 来融合多尺度 。

MS-CAM 有 2 个较大的不同:

  • MS-CAM通过逐点卷积来关注通道的尺度问题,而不是大小不同的卷积核,使用点卷积,为了让 MS-CAM 尽可能的轻量化。

  • MS-CAM不是在主干网中,而是在通道注意力模块中局部本地和全局的特征上下文特征。

Figure 1: Illustration of the proposed MS-CAM

局部特征的通道注意力的计算公式L(X),通过点卷积来提取:

class MS_CAM(nn.Module):'''单特征 进行通道加权,作用类似SE模块'''def __init__(self, channels=64, r=4):super(MS_CAM, self).__init__()inter_channels = int(channels // r)self.local_att = nn.Sequential(nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)self.global_att = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)self.sigmoid = nn.Sigmoid()def forward(self, x):xl = self.local_att(x)xg = self.global_att(x)xlg = xl + xgwei = self.sigmoid(xlg)return x * wei

2. Attentional Feature Fusion(AFF)

Figure 2:Illustration of the proposed AFF

AFF

给定两个特征 X, Y 进行特征融合(Y代表感受野更大的特征)。

AFF的计算方法如下:

对输入的两个特征 X, Y 先做初始特征融合,经过sigmod激活函数,输出值为0~1之间,作者希望对X 、Y 做加权平均,就用 1 减去这组 Fusion weight,可以作到 Soft selection,通过训练,让网络确定各自的权重。

class AFF(nn.Module):'''多特征融合 AFF'''def __init__(self, channels=64, r=4):super(AFF, self).__init__()inter_channels = int(channels // r)self.local_att = nn.Sequential(nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)self.global_att = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)self.sigmoid = nn.Sigmoid()def forward(self, x, residual):xa = x + residualxl = self.local_att(xa)xg = self.global_att(xa)xlg = xl + xgwei = self.sigmoid(xlg)xo = 2 * x * wei + 2 * residual * (1 - wei)return xo

为了验证AFF 是否具备泛用性,AFF被用到不同 InceptionNet, ResNet, and FPN结构中,作法是取代相加或串接的操作。

Figure 3: The schema of the proposed AFF-Inception mod-ule, AFF-ResBlock, and AFF-FPN. The blue and red linesdenote channel expansion and upsampling, respectively.

如上图所示,AFF主要是针对不同网络结构中,不同尺度特征融合时的注意力问题。对于不同结构中,具体X,Y对应:

  • same-layer scenario:在InceptionNet中,X 是3×3卷积的输出,Y是5×5卷积的输出;

  • short skip connection scenario:X 是本身映射,Y 是ResNet块中的学习残差;

  • long skip connection scenario:X 是低层特征图,Y 是高层特征金字塔中的高阶语义特征图。

根据前述的特征融合作法,整理出了深度网络中特征融合的不同公式:

只有Soft Selection的权重加和是1,其他方法都不是。

3.iterative Attentional Feature Fusion (iAFF)

在注意力特征融合模块中,X,  Y初始特征的融合仅是简单对应元素相加,然后作为注意力模块的输入会对最终融合权重产生影响。作者认为如果想要对输入的特征图有完整的感知,只有将初始特征融合也采用注意力融合的机制,一种直观的方法是使用另一个attention模块来融合输入的特征。

公式跟AFF的计算一样,仅仅是多加一层attention。

class iAFF(nn.Module):'''多特征融合 iAFF'''def __init__(self, channels=64, r=4):super(iAFF, self).__init__()inter_channels = int(channels // r)# 本地注意力self.local_att = nn.Sequential(nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)# 全局注意力self.global_att = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)# 第二次本地注意力self.local_att2 = nn.Sequential(nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)# 第二次全局注意力self.global_att2 = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(channels, inter_channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(inter_channels),nn.ReLU(inplace=True),nn.Conv2d(inter_channels, channels, kernel_size=1, stride=1, padding=0),nn.BatchNorm2d(channels),)self.sigmoid = nn.Sigmoid()def forward(self, x, residual):xa = x + residualxl = self.local_att(xa)xg = self.global_att(xa)xlg = xl + xgwei = self.sigmoid(xlg)xi = x * wei + residual * (1 - wei)xl2 = self.local_att2(xi)xg2 = self.global_att(xi)xlg2 = xl2 + xg2wei2 = self.sigmoid(xlg2)xo = x * wei2 + residual * (1 - wei2)return xo

三、Experiments

InceptionNet和ResNet网络使用的是CIFAR-100 and ImageNet 数据集,用于图像分类,CIFAR-100 的实验实际上只有20 类别。FPN使用的StopSign数据集(COCO数据的子集),用于语义分割。

b 参数是指每个Stage 内的ResBlock 数量。

相关实验参数的设定如下:

1.Ablation Study

为了验证Multi-scale 的作法是否有效,作者设置了Global + Global 和Local + Local两种方法,与Global + Local对比,发现全局+局部的效果还是最优的。

Figure 4: Architectures for the ablation study on the impactofcontextual aggregation scale.

我们在表1中研究了特征融合策略。为了公平起见,我们基于提出的注意力权重MS-CAM重新实现了这些方法,结构如下:

Figure 5: Architectures for ablation study on the impact offeature integration strategies

上表的实验结果,是特别调整Reduction ratio ,让不同方法的参数量都是接近的。

与线性方法相比,带有注意机制的非线性融合策略具有更好的性能。

在大多数情况下,所提出的iAFF方法明显优于其他方法,这也证明了之前的假设,早期的特征融合对注意力特征融合有一定的影响。

但是注意到,并非网络深度增加,性能提高,iAFF-ResNet,当网络深度从3增加到4时,的性能并没有提高,而是降低了。

2.Impact on Localization and Small Objects

研究本文提出的MS-CAM对目标定位和小物体识别的影响,使用 GradCAM应用于下述网络,可得出class activation mapping(类似于热力图),可以看出该方法的注意力的聚焦更加的集中和突出重点,并在图下显示softmax分数。

Figure 6: Network visualization with Grad-CAM. The comparison results suggest that the proposed MS-CAM is beneficialto the object localization and small object recognition.

上图会看到有些类别名称旁边带着红色的✖ ,表示的是预测错误的结果。

从上图的上半部来看, 尽管SENet-50能够定位真正的目标,但包括许多背景成分在内的参与区域过大,因为SENet-50只有全局通道注意力。AFF-ResNet-50 比较会去专注在跟标签相关的物件上,展现了它的定位能力。而下半部则展现了对小型物件的定位能力。

3.Comparison with State-of-the-Art Networks

Figure 7: Compassion with baseline and other state-of-the-art networks with a gradual increase of network depth.

不难看出该论文提出的AFF / iAFF 不论在各种参数量的配置下,都有表现得比较好,可使神经网络更有效率地抽取特征。

最后为了强调AFF / iAFF 可以有效改善既有的模型,特别把相关模型架构的准确度与参数量做了比较:

四、Conclusion

为了更好地融合语义和尺度不一致的特征,我们提出了多尺度通道注意力模块(MSCAM),该模块解决了融合不同尺度特征时出现的问题。为了适用于大多数常见场景,我们提出了一个统一的通用方案,即注意力特征融合(AFF),包括由short and long skip connections以及在Inception层内引起的特征融合。针对于初始特征融合可能会成为瓶颈,提出了迭代注意特征融合模块(iAFF)来缓解此问题。

附录提及

采用的交叉熵损失函数,以及采用的评价指标是,mean intersection over union(mIoU)可解释为平均交并比,即在每个类别上计算IoU值(即真正样本数量/(真正样本数量+假负样本数量+假正样本数量)。表5,表6采用的是mixup,是一种运用在计算机视觉中的对图像进行混类增强的算法,它可以将不同类之间的图像进行混合,从而扩充训练数据集。

参考链接:

論文閱讀 WACV 2021 — Attentional Feature Fusion

https://blog.csdn.net/mzj15101229871/article/details/114399377

AFF论文和代码下载

后台回复:AFF,即可下载上述论文和代码

后台回复:CVPR2021,即可下载CVPR 2021论文和代码开源的论文合集

后台回复:ICCV2021,即可下载ICCV 2021论文和代码开源的论文合集

后台回复:Transformer综述,即可下载最新的两篇Transformer综述PDF

重磅!Transformer交流群成立

扫码添加CVer助手,可申请加入CVer-Transformer 微信交流群,方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索、论文投稿&交流、PyTorch和TensorFlow等群。

一定要备注:研究方向+地点+学校/公司+昵称(如Transformer+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群

▲长按加小助手微信,进交流群

▲点击上方卡片,关注CVer公众号

整理不易,请点赞和在看

涨点神器!南航提出AFF:注意力特征融合,即插即用!可用于分类、检测和分割等...相关推荐

  1. Attentional Feature Fusion 注意力特征融合

    Attentional Feature Fusion 注意力特征融合 最近看到一篇比较不错的特征融合方法,基于注意力机制的 AAF ,与此前的 SENet .SKNet 等很相似,但 AFF 性能优于 ...

  2. 多尺度特征融合的知识蒸馏异常检测方法文献笔记

    多尺度特征融合的知识蒸馏异常检测方法 期刊:计算机辅助设计与图形学学报 学校:南京信息工程大学计算机学院 时间:2022 关键词:异常检测;知识蒸馏;一分类问题;特征融合 背景 异常检测一般是指判断并 ...

  3. concat特征融合_MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出)...

    作者:Tom Hardy Date:2020-02-01 来源:MSFNet:多重空间融合网络进行实时语义分割(北航和旷视联合提出) 原文链接:https://arxiv.org/abs/1911.0 ...

  4. 多尺度特征融合:学习更好的语义分割用于坑洼道路检测

    文章题目:MULTI-SCALE FEATURE FUSION: LEARNING BETTER SEMANTIC SEGMENTATION FOR ROAD POTHOLE DETECTION 论文 ...

  5. 干货 | 基于特征的图像配准用于缺陷检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 特征提取 基于特征的图像配准,具有非常广泛的应用,大致流程可以如下 ...

  6. 中山大学提出SimAM:无参Attention!助力分类/检测/分割涨点!

    http://proceedings.mlr.press/v139/yang21o.html code: https://github.com/ZjjConan/SimAM 在正式介绍本文所提注意力模 ...

  7. 目标检测YOLO实战应用案例100讲-基于多尺度特征融合的水下小目标检测方法研究

    目录 水下弱小目标检测算法研究 水下目标检测相关研究基础 2.1水下目标检测算法概述

  8. resnet论文_ResNet还是DenseNet?即插即用的DS涨点神器来了!

    DSNet比ResNet取得了更好的结果,并且具有与DenseNet相当的性能,但需要的计算资源更少.其中改进的DS2Res2Net性能非常强大. 作者:ChaucerG Date:2020-10-2 ...

  9. 大盘点 | 十大即插即用的涨点神器!

    大盘点 | 十大即插即用的涨点神器! 作者:Amusi Date:2020-08-11 来源: CVer微信公众号 链接: 大盘点 | 十大即插即用的涨点神器! 前言 最近出现了很多"即插即 ...

最新文章

  1. Cell子刊:微生物组学研究的突破与瓶颈
  2. OpenStack Liberty 连接vCenter
  3. nyoj-括号匹配(二)---动态规划
  4. boost::hana::remove用法的测试程序
  5. 创业者应具备的基本商业知识
  6. html中optgroup 标签用法,分组、只读的且呈树状样式显示
  7. 你知道考的是平方数吗(记洛谷P1876题RE+WA的经历,Java语言描述)
  8. 《编写高质量代码:改善c程序代码的125个建议》——建议4-2:浮点数转换为新类型时必须做范围检查...
  9. 【版本控制管理】 深入 001 A successful Git branching model GIT 项目分支策略和释放管理
  10. 刘强东为抗疫发声:我们送的不是货,是温暖和希望!
  11. mysql 数据类型大全_MySQL 数据类型_mysql数据类型大全
  12. linux makefile教程,Makefile简单入门教程
  13. 计算机开机加载后进入不了xp,xp电脑开机后进不了系统怎么办
  14. android标题白色_android主题Theme.Holo.Light下如何设置程序的标题字体颜色为白色
  15. 第六天 游戏策划学习
  16. 输入汉语星期几输出英文c语言程序,C根据英文星期获取对应汉字或数字的星期函数(1)...
  17. 码破苍穹:空指针的传说
  18. js_中国大陆加港澳台手机正则验证
  19. 比较好的PHP开源项目
  20. abaqus编写本构方程vumat_基于ABAQUS的木材本构关系数值模拟方法与流程

热门文章

  1. 互联网公司各个岗位的薪资对比
  2. Sanic框架登录验证——Sanic-Auth的使用方法
  3. 有效提高执行力,你需要这几个技巧
  4. Java程序优雅关闭的两种方法(程序停止前做一些善后工作)
  5. Mybatis if test中字符串比较和Mybatis的like查询
  6. ui设计发展到底好不好?为什么越来越多的人开始学习UI设计?
  7. 时间获取相关函数mktime()、gmtime()
  8. win10如何批量修改文件名【系统天地】
  9. 【RNN基础】——一文搞明白RNN
  10. 脑蛋白和计算机意义,冬眠蝙蝠的脑蛋白质组与肝蛋白质组研究