介绍
摘要
本项目介绍了一种轻量级的 Mixed Local Channel Attention (MLCA) 模块,该模块同时考虑通道信息和空间信息,并结合局部信息和全局信息以提高网络的表达效果。基于该模块,我们提出了 MobileNet-Attention-YOLO(MAY) 算法,用于比较各种注意力模块的性能。在 Pascal VOC 和 SMID 数据集上,MLCA 相对于其他注意力技术更好地平衡了模型表示效果、性能和复杂度。与 PASCAL VOC 数据集上的 Squeeze-and-Excitation(SE) 注意力机制和 SIMD 数据集上的 Coordinate Attention(CA) 方法相比,mAP 分别提高了 1.0% 和 1.5%。
YOLOv11目标检测创新改进与实战案例专栏
点击查看文章目录: YOLOv11创新改进系列及项目实战目录 包含卷积,主干 注意力,检测头等创新机制 以及 各种目标检测分割项目实战案例
点击查看专栏链接: YOLOv11目标检测创新改进与实战案例
文章链接
论文地址:论文地址
代码地址:代码地址
基本原理
Mixed Local Channel Attention (MLCA)是一种轻量级的本地注意力机制,旨在同时考虑通道信息、空间信息、局部信息和全局信息。MLCA模块的结构和工作原理如下:
结构:
- 输入处理:MLCA的输入特征向量经过两步池化处理,首先进行局部池化,将输入转换为1 C ks * ks的向量,以提取局部空间信息。
- 分支处理:经过初始阶段处理后,使用两个分支将输入转换为一维向量,第一个分支包含全局信息,第二个分支包含局部空间信息。
- 信息融合:经过一维卷积处理后,两个向量的原始分辨率通过反池化恢复,然后融合信息以实现混合注意力。
工作原理:
- 局部空间信息提取:通过局部池化和反池化,MLCA能够捕获输入特征向量中的局部空间信息,有助于提高对象检测的准确性。
- 通道交互信息:一维卷积考虑每个通道与其k个相邻通道之间的关系,捕获通道间的局部交互信息,从而增强通道信息的表达能力。
- 全局和局部信息融合:MLCA通过融合全局和局部信息,实现对对象检测任务的综合关注,同时避免通道维度减少导致的精度损失。
核心代码
import torch
import torch.nn as nn
import torch.nn.functional as F
import math
class MLCA(nn.Module):
def __init__(self, in_size,local_size=5,gamma = 2, b = 1,local_weight=0.5):
super(MLCA, self).__init__()
# ECA 计算方法
self.local_size=local_size
self.gamma = gamma
self.b = b
t = int(abs(math.log(in_size, 2) + self.b) / self.gamma) # eca gamma=2
k = t if t % 2 else t + 1
self.conv = nn.Conv1d(1, 1, kernel_size=k, padding=(k - 1) // 2, bias=False)
self.conv_local = nn.Conv1d(1, 1, kernel_size=k, padding=(k - 1) // 2, bias=False)
self.local_weight=local_weight
self.local_arv_pool = nn.AdaptiveAvgPool2d(local_size)
self.global_arv_pool=nn.AdaptiveAvgPool2d(1)
task与yaml配置
详见:https://blog.csdn.net/shangyanaf/article/details/143099740