公司动态
yolo检测核心组件1:SE注意力机制 (Squeeze-and-Excitation)
yolo检测核心组件1SE注意力机制 (Squeeze-and-Excitation)[!abstract] 论文信息标题: Squeeze-and-Excitation Networks作者: Jie Hu, Li Shen, Gang Sun年份: 2018会议: CVPR 2018核心贡献: 通道注意力机制动态调整通道权重一、核心思想SE注意力的核心: 学习每个通道的重要性 传统卷积: ┌─────────────────────────────────────┐ │ 所有通道同等重要 │ │ 输出 卷积(输入) │ └─────────────────────────────────────┘ SE注意力: ┌─────────────────────────────────────┐ │ 学习每个通道的权重 │ │ 输出 卷积(输入) × 通道权重 │ └─────────────────────────────────────┘ 直觉理解: - 不同通道提取不同的特征边缘、纹理、形状等 - 对于不同任务不同通道的重要性不同 - SE模块让网络自动学习通道的重要性二、SE模块结构SE模块结构: 输入特征图 (C×H×W) │ ▼ ┌─────────────────────────────────────┐ │ Squeeze (压缩) │ │ 全局平均池化 │ │ C×H×W → C×1×1 │ │ │ │ 将每个通道压缩为一个值 │ │ 代表该通道的全局信息 │ └─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ Excitation (激励) │ │ 全连接层 → ReLU → 全连接层 → Sigmoid │ │ C×1×1 → C/r×1×1 → C×1×1 │ │ │ │ r是缩放因子通常r16 │ │ 学习通道间的非线性关系 │ │ 输出0~1的通道权重 │ └─────────────────────────────────────┘ │ ▼ ┌─────────────────────────────────────┐ │ Scale (缩放) │ │ 输入特征图 × 通道权重 │ │ C×H×W × C×1×1 → C×H×W │ │ │ │ 对每个通道加权 │ │ 重要通道权重接近1 │ │ 不重要通道权重接近0 │ └─────────────────────────────────────┘ │ ▼ 输出特征图 (C×H×W)三、数学公式SE模块的数学表达: 1. Squeeze (全局平均池化): z_c (1/H×W) × Σ(i,j) u_c(i,j) 其中: - u_c: 第c个通道的特征图 - z_c: 第c个通道的全局描述符 - H, W: 特征图的高和宽 2. Excitation (门控机制): s σ(W₂ × ReLU(W₁ × z)) 其中: - z: 全局描述符向量 (C×1) - W₁: 第一个全连接层 (C/r × C) - W₂: 第二个全连接层 (C × C/r) - σ: Sigmoid函数 - r: 缩放因子 (通常r16) 3. Scale (加权): x̃_c s_c × u_c 其中: - s_c: 第c个通道的权重 - u_c: 第c个通道的特征图 - x̃_c: 加权后的特征图四、代码实现importtorchimporttorch.nnasnnclassSEBlock(nn.Module):SE注意力模块def__init__(self,channels,reduction16):super(SEBlock,self).__init__()# Squeeze: 全局平均池化self.avg_poolnn.AdaptiveAvgPool2d(1)# Excitation: 门控机制self.fcnn.Sequential(nn.Linear(channels,channels//reduction,biasFalse),nn.ReLU(inplaceTrue),nn.Linear(channels//reduction,channels,biasFalse),nn.Sigmoid())defforward(self,x):b,c,_,_x.size()# Squeezeyself.avg_pool(x).view(b,c)# Excitationyself.fc(y).view(b,c,1,1)# Scalereturnx*y.expand_as(x)五、在YOLO中的应用SE模块在YOLO中的应用: 1. YOLOv5: - 在C3模块中可选使用SE - 通过配置文件启用 2. YOLOv8: - 在某些变体中使用SE - 作为注意力机制的选项 3. 改进YOLO: - 可以在骨干网络中添加SE模块 - 提升特征表达能力SE模块的插入位置不要只关注SE模块能否加入YOLO更应通过实验比较不同插入位置的效果Backbone骨干网络增强高层语义特征的通道表达能力可能带来额外的推理延迟Neck特征融合网络对多尺度特征融合通常更有意义适合重点关注不同尺度目标的检测任务Head前检测头之前可能有助于分类特征的筛选对边界框定位的提升未必稳定需要通过消融实验验证建议在相同数据集和训练配置下分别比较上述插入位置并记录mAP、参数量、FLOPs和FPS综合评估精度与部署成本。六、优缺点优点✅ 简单有效: 结构简单易于实现 ✅ 通道建模: 有效建模通道间关系 ✅ 即插即用: 可以添加到任何网络 ✅ 计算量小: 增加的计算量很小缺点❌ 只关注通道: 没有考虑空间信息 ❌ 全局池化: 可能丢失空间细节 ❌ 缩放因子: 需要手动设置r参考SENet论文