文章目录

  • 1 坐标注意力机制(Coordinate Attention)
    • 原理:
    • 结构:
    • 代码:
    • 优缺点:
  • 2 加权双向特征金字塔(BiFPN)网络结构
    • 原理
    • 结构
    • 代码
    • 优缺点

1 坐标注意力机制(Coordinate Attention)

论文:http://arxiv.org/abs/2103.02907
源码:https://github.com/Andrew-Qibin/CoordAttention
推荐文章(参考文章):https://blog.csdn.net/zhouchen1998/article/details/114518727

原理:

通过将位置信息嵌入到通道注意力中,使得轻量级网络能够在更大的区域上进行注意力,同时避免了产生大量的计算开销。为了缓解2D全局池化造成的位置信息丢失,论文作者将通道注意力分解为两个并行的1D特征编码过程,有效地将空间坐标信息整合到生成的注意图中。更具体来说,作者利用两个一维全局池化操作分别将垂直和水平方向的输入特征聚合为两个独立的方向感知特征图。然后,这两个嵌入特定方向信息的特征图分别被编码为两个注意力图,每个注意力图都捕获了输入特征图沿着一个空间方向的长程依赖。因此,位置信息就被保存在生成的注意力图里了,两个注意力图接着被乘到输入特征图上来增强特征图的表示能力。由于这种注意力操作能够区分空间方向(即坐标)并且生成坐标感知的特征图,因此将提出的方法称为坐标注意力(coordinate attention)。

结构:


从结构图上不难看出

  • 其中XAvgPoolX Avg PoolXAvgPool是对WWW方向做平均池化,得到C×H×1C \times H \times 1C×H×1,同样YAvgPoolY Avg PoolYAvgPool是对HHH方向做平均池化,得到C×1×WC \times 1 \times WC×1×W
  • 对两个多通道的一D向量在做空间维度的concatconcatconcat,然后用1×11 \times 11×1卷积压缩通道数
  • 然后再通过BN和Non-linear来编码垂直方向和水平方向的空间信息
  • 在进行split分离(就是将完整的特征向量重新分为两个方向的向量),通过1×11 \times 11×1卷积重新调整两个方向特征向量的通道数,然后经过SigmoidSigmoidSigmoid函数
  • 最后在与原输入信息进行两个方向的加权

代码:

源码地址:https://github.com/Andrew-Qibin/CoordAttention
下面是原作者github上传的源代码:

import torch
import torch.nn as nn
import math
import torch.nn.functional as Fclass h_sigmoid(nn.Module):def __init__(self, inplace=True):super(h_sigmoid, self).__init__()self.relu = nn.ReLU6(inplace=inplace)def forward(self, x):return self.relu(x + 3) / 6class h_swish(nn.Module):def __init__(self, inplace=True):super(h_swish, self).__init__()self.sigmoid = h_sigmoid(inplace=inplace)def forward(self, x):return x * self.sigmoid(x)class CoordAtt(nn.Module):def __init__(self, inp, oup, reduction=32):super(CoordAtt, self).__init__()self.pool_h = nn.AdaptiveAvgPool2d((None, 1))self.pool_w = nn.AdaptiveAvgPool2d((1, None))mip = max(8, inp // reduction)self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0)self.bn1 = nn.BatchNorm2d(mip)self.act = h_swish()self.conv_h = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)self.conv_w = nn.Conv2d(mip, oup, kernel_size=1, stride=1, padding=0)def forward(self, x):identity = xn,c,h,w = x.size()x_h = self.pool_h(x)x_w = self.pool_w(x).permute(0, 1, 3, 2)y = torch.cat([x_h, x_w], dim=2)y = self.conv1(y)y = self.bn1(y)y = self.act(y) x_h, x_w = torch.split(y, [h, w], dim=2)x_w = x_w.permute(0, 1, 3, 2)a_h = self.conv_h(x_h).sigmoid()a_w = self.conv_w(x_w).sigmoid()out = identity * a_w * a_hreturn out

优缺点:

  • 1.它捕获了不仅跨通道的信息,还包含了方向感知和位置感知的信息,这使得模型更准确地定位到并识别目标区域。
  • 2.其次就是论文中所说的,插入到MobileNetV2网络中,在不增加太多的参数前提下,分类精度提升较明显
  • 3.其次提到的下游任务:检测分割等,效果也很好,但是从论文的角度去看,在他们的训练策略下,坐标注意力就已经比SE、CBAM参数多,如果是我们自己改进,参数量肯定是需要考虑的方面。(不过作为一种新的注意力机制,创新性还是很很可观的)

2 加权双向特征金字塔(BiFPN)网络结构

推荐文章:https://zhuanlan.zhihu.com/p/96773680

原理

BiFPN主要思想有两点:一是高效的双向跨尺度连接,二是加权特征图融合。

结构


上图为比较经典的PANet结构

上图为BiFPN结构
下面将FPN,PANet,BiFPN结构进行对比:

  • 图(a) FPN 引入了一条自顶向下的通道来融合特征
  • 图(b) PANet 在 FPN 基础上增加了一条自底向上的通道
  • 图© BiFPN:不同于其他的FPN结构(不同 resolution 的特征融合时直接相加),但实际上它们对最后 output 的贡献是不同的,所以作者希望网络来学习不同输入特征的权重,即 weighted feature fusion。在PANet的基础上,若输入和输出都是同一水平的(好多文章都说水平二字,我认为应该是在网络结构图上来看,他们处于同一水平,并且通道数一致),则添加一条额外的边。在EfficientDet文章中,BiFPN当做一个小的网络模块来使用,并且叠加多次。
    加权特征融合
    先前的特征融合方法大多平等地对待所有输入特征。然而,因为不同的特征具有不同的分辨率,他们对特征融合的贡献是不平等的。为解决此问题,本文提出在特征融合期间为每个输入添加一个额外的权重,让网络去学习每个输入特征的重要性。

代码

代码(源码)链接:https://github.com/xuannianz/EfficientDet

优缺点

  • 特征复用更绝对化,而不是平均化
  • 作为改进当下的网络模型可以进行参考

注:参考的原文出处已经给出,本着学习的态度去搜的参考文章,而不仅仅是搬运工~~

Coordinate Attention和BiFPN相关推荐

  1. 注意力机制(SE、Coordinate Attention、CBAM、ECA)、即插即用的模块整理

    总结曾经使用过的一些即插即用的模块以及一些注意力机制 ** 注意力模块:SE ** 代码源自这位大佬的仓库:https://github.com/moskomule/senet.pytorch cla ...

  2. CVPR2021|| Coordinate Attention注意力机制

    Paper:https://arxiv.org/pdf/2103.02907.pdf GitHub:https://github.com/Andrew-Qibin/CoordAttention 轻量, ...

  3. 注意力机制——Coordinate Attention

    目录 摘要 1 介绍 2 相关工作 2.1 Mobile Network 2.2 注意力机制 3 Coordinate Attention 3.1 Revisit SE Block 3.1.1 Squ ...

  4. yolox改进--添加Coordinate Attention模块(CVPR2021)

    yolox改进--添加Coordinate Attention模块 Coordinate Attention 代码 建立包含CAM代码的attention.py 在yolo_pafpn.py中添加CA ...

  5. Coordinate Attention 论文笔记

    Coordinate Attention for Efficient Mobile Network Design CA block CVPR2021 论文链接: https://arxiv.org/a ...

  6. Coordinate Attention for Efficient Mobile Network Design

    目录 摘要 Coordinate Attention 注意力机制 Coordinate Attention模块 坐标信息嵌入(Coordinate Information Embedding ) 坐标 ...

  7. Coordinate Attention for Efficient Mobile Network Design论文详解(结合代码)

    1.简介 Mobile Network设计的最新研究成果表明,通道注意力(例如,SE注意力)对于提升模型性能具有显著效果,但它们通常会忽略位置信息,而位置信息对于生成空间选择性attention ma ...

  8. Coordinate Attention学习笔记

    CVPR2021 Paper:https://arxiv.org/pdf/2103.02907.pdf GitHub:https://github.com/Andrew-Qibin/CoordAtte ...

  9. Coordinate Attention注意力机制注释讲解

    Coordinate Attention注意力机制注释讲解 原文链接:https://arxiv.org/pdf/2103.02907.pdf 源码链接:https://github.com/Andr ...

最新文章

  1. javaweb开发中的那些坑
  2. 皮一皮:直男相亲还想着龙珠...
  3. 教你网站怎么添加返回顶部代码?
  4. JavaScript实现判断整数是否为2的幂isPowerOfTwo算法(附完整源码)
  5. 求交错序列前N项和(15 分)
  6. JAVA内存模型及垃圾回收自我总结
  7. windows 消息
  8. 必须了解的一些IT知识点
  9. Linux Ubuntu 系统测试硬盘读写速度命令
  10. 今日头条笔试面试大全
  11. 非线性优化问题---MATLAB
  12. 浮华,原来青春是一场梦
  13. airbnb_Airbnb对观众情感联系的误解导致双重抵制
  14. 花瓣搜索编辑网站的方法
  15. golang与面向接口编程
  16. 服务器e5与e7性能差异,英特尔:至强E3、E5和E7服务器处理器
  17. git学习笔记——Linux和Windows下git的基本操作
  18. t460p和t470p对比评测_【ThinkPadT470p评测】以性能取胜 ThinkPad T470p的猛兽一面_ThinkPad T470p_笔记本评测-中关村在线...
  19. 小伙熬夜用C++开发泡泡堂游戏,网友直呼:666!
  20. 树莓派c语言人脸识别,树莓派实现简单的人脸识别

热门文章

  1. 设计一个二进制文件格式
  2. Ubuntu 20 LTS 安装kubenetes 1.25
  3. Mysql清空数据报错:1114 – The table ‘xxxx’is full问题解决
  4. 全能营销用在百事作文网上的经验
  5. 下载Foxmail显示“该文件已达到200次的下载限制”的解决办法
  6. 李航《统计学习方法》公式推导
  7. 如何解决choregraphe由于VCOMP120.DLL丢失而导致的闪退问题
  8. DNS污染检测方法 教你一招轻松验证DNS
  9. 目标检测算法——收藏|小目标检测的定义(一)
  10. Qt/C++ 模仿 酷狗音乐播放器