位置: IT常识 - 正文

Attentional Feature Fusion 注意力特征融合

编辑:rootadmin
Attentional Feature Fusion 注意力特征融合 Attentional Feature Fusion 注意力特征融合

推荐整理分享Attentional Feature Fusion 注意力特征融合,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

最近看到一篇比较不错的特征融合方法,基于注意力机制的 AAF ,与此前的 SENet 、SKNet 等很相似,但 AFF 性能优于它们,并且适用于更广泛的场景,包括短和长跳连接以及在 Inception 层内引起的特征融合。AFF 是由南航提出的注意力特征融合,即插即用!

本篇博客主要参考自知乎作者 OucQxw ,知乎原文地址:https://zhuanlan.zhihu.com/p/424031096

论文下载地址:https://arxiv.org/pdf/2009.14082.pdf

Github代码地址:https://github.com/YimianDai/open-aff

一、Motivation

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

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

近年发展的 SKNet 和 ResNeSt 注意力特征融合存在的问题:场景限制:SKNet 和 ResNeSt 只关注同一层的特征选择,无法做到跨层特征融合。简单的初始集成 :为了将得到的特征提供给注意力模块,SKNet 通过相加来进行特征融合,而这些特征在规模和语义上可能存在很大的不一致性,对融合权值的质量也有很大的影响,使得模型表现受限。偏向上下文聚合尺度:SKNet 和 ResNeSt 中的融合权值是通过全局通道注意机制生成的,对于分布更全局的信息,该机制更受青睐,但是对于小目标效果就不太好。是否可以通过神经网络动态地融合不同尺度的特征?本文的贡献,针对于上述三个问题,提出以下解决办法:注意特征融合模块(AFF),适用于大多数常见场景,包括由short and long skip connections以及在Inception层内引起的特征融合。迭代注意特征融合模块(IAFF),将初始特征融合与另一个注意力模块交替集成。引入多尺度通道注意力模块(MSCAM),通过尺度不同的两个分支来提取通道注意力。二、MethodMulti-scale Channel Attention Module (MS-CAM)

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

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

MS-CAM 通过逐点卷积(1x1卷积)来关注通道的尺度问题,而不是大小不同的卷积核,使用点卷积,为了让 MS-CAM 尽可能的轻量化。MS-CAM 不是在主干网中,而是在通道注意力模块中局部本地和全局的特征上下文特征。

上图为 MS-CAM 的结构图,X 为输入特征,X' 为融合后的特征,右边两个分支分别表示全局特征的通道注意力和局部特征的通道注意力,局部特征的通道注意力的计算公式 L(X) 如下:

Attentional Feature Fusion 注意力特征融合

实现的代码如下:

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 + xg wei = self.sigmoid(xlg) return x * weiAttentional Feature Fusion(AFF)

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

AFF 的计算方法如下:

对输入的两个特征 X , Y 先做初始特征融合,再将得到的初始特征经过 MS-CAM 模块,经过 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 + residual xl = self.local_att(xa) xg = self.global_att(xa) xlg = xl + xg wei = self.sigmoid(xlg) xo = x * wei + residual * (1 - wei) return xoiterative 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 + residual xl = self.local_att(xa) xg = self.global_att(xa) xlg = xl + xg wei = self.sigmoid(xlg) xi = x * wei + residual * (1 - wei) xl2 = self.local_att2(xi) xg2 = self.global_att(xi) xlg2 = xl2 + xg2 wei2 = self.sigmoid(xlg2) xo = x * wei2 + residual * (1 - wei2) return xo三、Experiments

这里展示部分实验结果,详细的实验结果请参考原论文。

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

在各种主流网络中,使用本论文中提出的特征融合方法,用于短跳连接、长跳连接、同一层的特征融合中,效果均优于之前的模型。

不同的图像分类数据集上,在原有的网络模型中加入本文提出的特征融合方法,并与其原模型进行比较,发现准确率和网络的参数大小都得到了不错的性能提升。

本文链接地址:https://www.jiuchutong.com/zhishi/300057.html 转载请保留说明!

上一篇:使用YOLOv5模型进行目标检测!AI大佬手撕源码带你学(yolov3模型大小是多少)

下一篇:详解Inception结构:从Inception v1到Xception(critical_section 结构)

  • 淘宝服装店推广攻略(淘宝服装店推广文案)

    淘宝服装店推广攻略(淘宝服装店推广文案)

  • 联想m7400pro更换墨粉盒怎么清零(联想m7400pro更换墨粉视频)

    联想m7400pro更换墨粉盒怎么清零(联想m7400pro更换墨粉视频)

  • 达尔优ek815怎么调灯光(达尔优ek815怎么样)

    达尔优ek815怎么调灯光(达尔优ek815怎么样)

  • 国家反诈中心悬浮窗怎么开启(国家反诈中心悬浮窗权限在哪里开启)

    国家反诈中心悬浮窗怎么开启(国家反诈中心悬浮窗权限在哪里开启)

  • 为什么智慧团建在电脑上打不开(为什么智慧团建没有验证码)

    为什么智慧团建在电脑上打不开(为什么智慧团建没有验证码)

  • iphonex和xr区别大吗(iphonex与xr区别)

    iphonex和xr区别大吗(iphonex与xr区别)

  • 苹果手表的蜂窝网络是什么意思(苹果手表的蜂窝版怎么用)

    苹果手表的蜂窝网络是什么意思(苹果手表的蜂窝版怎么用)

  • 嘀嗒拼车合法吗(嘀嗒拼车合法吗?)

    嘀嗒拼车合法吗(嘀嗒拼车合法吗?)

  • 视频号最长时间可以发几分钟(视频号最长时间能发几条)

    视频号最长时间可以发几分钟(视频号最长时间能发几条)

  • 网线面板接法是a还是b(网线面板接网线面板)

    网线面板接法是a还是b(网线面板接网线面板)

  • 免流中是什么意思(免流中是什么意思?)

    免流中是什么意思(免流中是什么意思?)

  • 华为mate30橙色后面是什么材质(华为mate30pro橙色)

    华为mate30橙色后面是什么材质(华为mate30pro橙色)

  • 错误代码1001是什么意思(错误代码1001是什么)

    错误代码1001是什么意思(错误代码1001是什么)

  • 华为gt2 苹果能用吗(华为gt2iphone能用吗)

    华为gt2 苹果能用吗(华为gt2iphone能用吗)

  • 抖音和火山粉丝共享吗(抖音和火山粉丝怎么共享)

    抖音和火山粉丝共享吗(抖音和火山粉丝怎么共享)

  • 双十一买的iphone11什么时候发货(双十一买的iphone一直没拆封)

    双十一买的iphone11什么时候发货(双十一买的iphone一直没拆封)

  • 荣耀10的OTG在哪(华为荣耀10手机ot g在哪儿打开)

    荣耀10的OTG在哪(华为荣耀10手机ot g在哪儿打开)

  • 掌上高铁怎么开通微信支付分(掌上高铁怎么开发票)

    掌上高铁怎么开通微信支付分(掌上高铁怎么开发票)

  • 唯品会退了货怎么删除(唯品会退货怎么免运费)

    唯品会退了货怎么删除(唯品会退货怎么免运费)

  • 手机AI键什么功能(手机的al键什么用)

    手机AI键什么功能(手机的al键什么用)

  • huawei和honor的区别(华为和华为荣耀有啥区别)

    huawei和honor的区别(华为和华为荣耀有啥区别)

  • 苹果x闹钟音量怎么调(苹果x闹钟音量太小)

    苹果x闹钟音量怎么调(苹果x闹钟音量太小)

  • word锁定怎么解锁(word锁定怎么解除)

    word锁定怎么解锁(word锁定怎么解除)

  • 电脑文件夹发送到手机上(电脑文件夹发送到微信)

    电脑文件夹发送到手机上(电脑文件夹发送到微信)

  • 我的第一次edusrc漏洞挖掘 (三连挖)(我的第一次作文400字左右)

    我的第一次edusrc漏洞挖掘 (三连挖)(我的第一次作文400字左右)

  • Pycharm在指定目录下生成文件和删除文件(pycharm cant find main)

    Pycharm在指定目录下生成文件和删除文件(pycharm cant find main)

  • 5月份企业所得税
  • 土地使用权利
  • 未达起征点可以开专票吗
  • 优惠政策所得税计算
  • 房产经纪公司成本费用
  • 营改增以前土地交易应交税费
  • 有哪些扣除项目可以抵扣
  • 吸收合并控股合并新设合并的区别
  • 企业对无法收回的应收账款应借记的会计科目是
  • 关于销售返利的说法正确的有
  • 装卸收入的增值税税率是多少
  • 实收资本退还
  • 税务清算审计需要多久
  • 营改增后企业所得税不能跨年
  • 转账支票怎么进账到个人账户
  • 发票与报税记录不一致
  • 快递费开专票怎么入账
  • 利息发票能开专票吗
  • 如果工程款要不到的话怎么办
  • 营改增后小规模纳税人转一般纳人
  • 电子承兑汇票支付信用查询
  • 收到员工补缴的公积金怎么入账
  • 增值税专票已经认证
  • 公司终止的时间是进行注销登记生效后
  • 哪些收入应计入成本
  • 未办土地有偿使用手续多少钱
  • 买车的发票可以抵扣吗?
  • 不需要缴纳增值税和免税的区别
  • 残值收入的会计处理
  • win10 搜狗
  • 总资产收益率什么意思
  • 发生以前年度损益调整
  • 工会经费使用具体办法
  • 腾讯电脑管家上的steam可以吗
  • 系统之家装机可靠吗
  • 固定资产更新改造支出计入什么科目
  • 收到现金股利或债券利息时会计分录
  • 无形资产本月增加本月摊销如何设置函数
  • 个人转让门面的法律规定
  • 如何补办二手车牌照
  • 买入返售金融资产和卖出回购金融资产
  • gridviewcolumn
  • 多表关联join
  • 预提的奖金能不能提前申报个税
  • 智能优化算法主要内容
  • 随货赠品会计处理
  • 小规模附加税减免性质代码如何选
  • 外经证预缴税款之后剩下的税款交到哪呢
  • 管家婆实收资本显示负数什么原因
  • java拼接字符串和数字
  • 长期待摊费用是非流动资产吗
  • 代扣员工伙食费
  • 施工仪器的主要类别
  • 退休人员的返聘协议模板
  • 固定资产的计提折旧方法有哪些
  • 开办费企业所得税处理
  • 银行利息收入如何记账
  • 储备基金是什么
  • 增值税专用发票几个点
  • 固定资产的维修计入什么科目
  • 公司帮别人代缴社保要交税吗
  • 资产处置损益在资产负债表哪里
  • 水表怎么借水
  • 购进货物取得
  • 购建时间是什么意思
  • 任务栏安全中心的图标没有了
  • ubuntu20.10安装教程
  • sendmail -t
  • mac未能分区
  • Win7旗舰版电脑亮度怎么调节?
  • win7删除开机启动程序
  • Android游戏开发入门
  • 一个android项目一般包含哪些目录?各有什么用途?
  • Python的SQLalchemy模块连接与操作MySQL的基础示例
  • 河南省发票查询真伪查询系统
  • 税务实地核实工作程序
  • 国税局云南省税务局
  • 内蒙古电子税务局开票流程
  • 如何打印个人所得税证明
  • 个人劳务承包需要什么资质
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设