yolo核心组件4:CA 注意力机制 (Coordinate Attention)

📅 2026/7/26 5:43:19
yolo核心组件4:CA 注意力机制 (Coordinate Attention)
CA 注意力机制 (Coordinate Attention)[!abstract] 论文信息论文标题: Coordinate Attention for Efficient Mobile Network Design作者: Qibin Hou, Daquan Zhou, Jiashi Feng发表: CVPR 2021论文地址: https://arxiv.org/abs/2103.02907核心贡献: 提出坐标注意力机制将位置信息嵌入通道注意力中使移动端网络能够关注大区域且保留精确的位置信息一、核心思想CA (Coordinate Attention) 的核心思想是将位置信息编码到通道注意力中。与 SE 只考虑通道关系、CBAM 使用局部卷积捕获空间信息不同CA 通过两个方向水平和垂直的全局池化分别沿宽度和高度方向聚合特征从而保留了精确的位置信息。CA 的关键特点位置感知不同于全局池化丢失位置信息CA 在水平和垂直方向分别编码保留了空间位置长程依赖通过沿一个方向的全局池化可以捕获该方向的长程依赖关系双分支结构水平和垂直两个方向并行处理生成两个注意力图移动端友好设计轻量适合部署在移动端设备上二、模块结构2.1 整体流程输入特征图 X [C×H×W] │ ┌─────┴─────┐ │ │ 水平方向 垂直方向 全局池化 全局池化 (H方向) (W方向) │ │ [C×H×1] [C×1×W] │ │ Concat (维度变换) │ [C×(HW)×1] │ Conv1×1 BN h_swish │ ┌─────┴─────┐ │ │ 水平注意力 垂直注意力 │ │ Sigmoid Sigmoid │ │ Xh × X Xw × X │ │ 输出特征图2.2 Coordinate Attention 详细结构输入 X [C×H×W] │ ┌───┴───┐ │ │ │ Coordinate │ Information │ Embedding (CIE) │ │ │ ┌───┴───┐ │ │ │ │ AvgPool AvgPool │ 沿W方向 沿H方向 │ │ │ │ [C×H×1] [C×1×W] │ │ │ │ └───┬───┘ │ │ │ Concat Transform │ Conv1×1 BN h_swish │ │ │ Split │ ┌───┴───┐ │ │ │ │ Conv1×1 Conv1×1 │ Sigmoid Sigmoid │ │ │ │ └───┬───┘ │ │ └───┬───┘ │ 输出 X [C×H×W]三、数学公式3.1 坐标信息嵌入 (Coordinate Information Embedding)水平方向沿宽度 W 聚合zch(h)1W∑0≤iWxc(h,i)z_c^h(h) \frac{1}{W} \sum_{0 \leq i W} x_c(h, i)zch​(h)W1​0≤iW∑​xc​(h,i)输出zh∈RC×H×1z^h \in \mathbb{R}^{C \times H \times 1}zh∈RC×H×1每个通道保留了高度方向的位置信息。垂直方向沿高度 H 聚合zcw(w)1H∑0≤jHxc(j,w)z_c^w(w) \frac{1}{H} \sum_{0 \leq j H} x_c(j, w)zcw​(w)H1​0≤jH∑​xc​(j,w)输出zw∈RC×1×Wz^w \in \mathbb{R}^{C \times 1 \times W}zw∈RC×1×W每个通道保留了宽度方向的位置信息。3.2 坐标注意力生成将两个方向的特征拼接后通过共享变换fδ(BN(Conv1×1([zh;zw])))f \delta\Big(BN\big(Conv_{1\times 1}([z^h; z^w])\big)\Big)fδ(BN(Conv1×1​([zh;zw])))其中[⋅;⋅][\cdot;\cdot][⋅;⋅]表示空间维度的拼接f∈RC/r×(HW)f \in \mathbb{R}^{C/r \times (HW)}f∈RC/r×(HW)δ\deltaδ为 h-swish 激活函数rrr为缩减率默认16然后将fff沿空间维度分割fh∈RC/r×H,fw∈RC/r×Wf^h \in \mathbb{R}^{C/r \times H}, \quad f^w \in \mathbb{R}^{C/r \times W}fh∈RC/r×H,fw∈RC/r×W3.3 注意力权重生成ghσ(Conv1×1(fh))∈RC×H×1g^h \sigma\Big(Conv_{1\times 1}(f^h)\Big) \in \mathbb{R}^{C \times H \times 1}ghσ(Conv1×1​(fh))∈RC×H×1gwσ(Conv1×1(fw))∈RC×1×Wg^w \sigma\Big(Conv_{1\times 1}(f^w)\Big) \in \mathbb{R}^{C \times 1 \times W}gwσ(Conv1×1​(fw))∈RC×1×W3.4 最终输出yc(i,j)xc(i,j)×gch(i)×gcw(j)y_c(i, j) x_c(i, j) \times g_c^h(i) \times g_c^w(j)yc​(i,j)xc​(i,j)×gch​(i)×gcw​(j)四、代码实现importtorchimporttorch.nnasnnclassh_sigmoid(nn.Module):Hard Sigmoid 激活函数def__init__(self,inplaceTrue):super().__init__()self.relunn.ReLU6(inplaceinplace)defforward(self,x):returnself.relu(x3)/6classh_swish(nn.Module):Hard Swish 激活函数def__init__(self,inplaceTrue):super().__init__()self.hsigmoidh_sigmoid(inplaceinplace)defforward(self,x):returnx*self.hsigmoid(x)classCoordAtt(nn.Module):Coordinate Attention 模块def__init__(self,channels,reduction32):super().__init__()mid_channelsmax(8,channels//reduction)# 共享变换层self.pool_hnn.AdaptiveAvgPool2d((None,1))# 沿W方向池化self.pool_wnn.AdaptiveAvgPool2d((1,None))# 沿H方向池化self.conv1nn.Conv2d(channels,mid_channels,kernel_size1,stride1,padding0,biasFalse)self.bn1nn.BatchNorm2d(mid_channels)self.acth_swish()# 分支卷积self.conv_hnn.Conv2d(mid_channels,channels,kernel_size1,stride1,padding0,biasFalse)self.conv_wnn.Conv2d(mid_channels,channels,kernel_size1,stride1,padding0,biasFalse)defforward(self,x):b,c,h,wx.size()# 沿两个方向进行全局池化x_hself.pool_h(x)# [B, C, H, 1]x_wself.pool_w(x).permute(0,1,3,2)# [B, C, W, 1]# 拼接并变换ytorch.cat([x_h,x_w],dim2)# [B, C, HW, 1]yself.conv1(y)yself.bn1(y)yself.act(y)# 分割x_h,x_wtorch.split(y,[h,w],dim2)x_wx_w.permute(0,1,3,2)# [B, C/r, 1, W]# 生成注意力权重att_hself.conv_h(x_h).sigmoid()# [B, C, H, 1]att_wself.conv_w(x_w).sigmoid()# [B, C, 1, W]# 应用注意力returnx*att_h*att_w4.2 YOLO 集成版本classC2f_CA(nn.Module):在C2f模块后添加CA注意力def__init__(self,c1,c2,n1,shortcutFalse,e0.5):super().__init__()self.c2fC2f(c1,c2,n,shortcut,e)self.caCoordAtt(c2)defforward(self,x):xself.c2f(x)xself.ca(x)returnx五、在YOLO中的应用5.1 适用场景CA 注意力在以下场景中特别有效场景原因小目标检测位置信息对小目标定位至关重要密集目标场景精确的空间注意力帮助区分相邻目标自动驾驶车辆、行人等目标需要精确定位遥感图像目标位置信息对检测很重要5.2 YOLO 配置示例# 在YOLOv8的Backbone中添加CAbackbone:-[-1,1,Conv,[64,3,2]]-[-1,1,Conv,[128,3,2]]-[-1,3,C2f,[128,True]]-[-1,1,Conv,[256,3,2]]-[-1,6,C2f,[256,True]]-[-1,1,CoordAtt,[256]]# 在P3后添加CA-[-1,1,Conv,[512,3,2]]-[-1,6,C2f,[512,True]]-[-1,1,Conv,[1024,3,2]]-[-1,3,C2f,[1024,True]]-[-1,1,CoordAtt,[1024]]# 在P5后添加CA5.3 注意力机制对比注意力位置信息参数量适用场景SE无全局池化中等通用分类CBAM局部7×7卷积中等通用检测ECA无全局池化极低轻量化模型CA精确行列编码低位置敏感任务六、优缺点优点精确的位置编码通过水平和垂直方向的独立池化保留了精确的空间位置信息长程依赖沿某一方向的全局聚合可以捕获该方向的长程依赖关系轻量化设计参数量远少于 CBAM 和 SE适合移动端部署双方向互补水平和垂直方向的注意力互补增强了空间感知能力即插即用可灵活嵌入各种网络架构缺点二维设计限制CA 的设计基于二维特征图扩展到三维场景需要额外设计计算开销相比 ECA 稍高但在可接受范围内池化压缩沿某方向的全局池化仍会损失该方向上的局部细节对通道数敏感缩减率的选择会影响性能需要适当调参参考Hou, Q., Zhou, D., Feng, J. (2021). Coordinate Attention for Efficient Mobile Network Design.CVPR 2021.https://arxiv.org/abs/2103.02907https://github.com/houqb/CoordAttention