YOLO11改进-模块-引入卷积加法自注意力机制 Conv Additive Self-Attention 轻量化自注意力机制

        视觉 Transformer(ViTs)凭借其强大的全局上下文捕捉能力,在神经网络领域取得了革命性进展。但传统 ViT 中的多头自注意力(MSA)存在计算复杂度高的问题,其计算复杂度与输入图像大小呈二次关系,这导致在移动设备等资源受限场景中计算效率低下,无法满足实时应用需求。同时,复杂的矩阵乘法和 Softmax 操作在部署到边缘设备时,常因算子不支持或模型转换失败而受阻。虽然已有改进方法,如 MSA 改进和异构 MSA(H-MSA)等,但仍未在效率和性能之间达到令人满意的平衡。因此,开发兼具高效部署和强大性能的神经网络模型成为亟待解决的问题。

上面是原模型,下面是改进模型

1. 卷积加法自注意力机制介绍 

       Conv Additive Self-Attention 理论基于对传统视觉 Transformer(ViT)自注意力机制的深度剖析。传统 ViT 的多头自注意力(MSA)虽能捕捉长距离依赖和全局信息,但计算时需测量所有 Query 对来获取注意力图,计算复杂度与输入图像大小呈二次关系,在资源受限场景计算负担过重。研究表明,自注意力机制获取全局上下文信息依赖多个信息交互维度,如空间和通道域交互。因此,该机制提出新思路:用更简单高效操作实现信息交互,摒弃复杂且计算成本高的矩阵乘法和 Softmax 操作。

        具体而言,Conv Additive Self-Attention 重新定义了相似性函数。以往自注意力机制的相似性计算复杂且易导致高复杂度问题,而在该机制中,相似性函数是 Query(Q)和 Key(K)的上下文分数之和。上下文分数由特定上下文映射函数计算,该函数整合了空间和通道注意力信息,避免手动设计上下文的局限,使网络灵活学习信息关联。多次交互 Q 和 K,能让网络聚焦关键信息令牌,减少计算量的同时保留和利用关键信息,平衡性能与效率。

从提供的图片来看,CASA模块主要包含以下几个部分:

        Conv Additive Self-Attention 主要依托卷积加法令牌混合器(CATM)来构建其结构,CATM 针对输入张量分别在空间域和通道域进行操作。

         空间域操作:在空间域,首先利用 3×3 卷积层来整合局部令牌信息。3×3 卷积层具有一定的感受野,能够捕捉输入图像中局部区域的特征,将局部空间信息进行初步融合。经过 3×3 卷积层处理后,再通过 1×1 卷积层将特征维度降低到 1。1×1 卷积层可以在不改变空间维度的情况下,对通道数进行调整,这里将其调整为 1,以便后续生成空间注意力图。最后,经过 Sigmoid 激活函数处理,得到空间注意力图。Sigmoid 函数的作用是将输出值映射到 0 到 1 之间,这样得到的空间注意力图可以反映出不同空间位置的重要程度,值越大表示该位置越重要。

         通道域操作:通道域操作参考了 SENet(Squeeze-and-Excitation Networks)的思想,但又有所不同。SENet 通过通道缩减来整合通道间信息,而在 Conv Additive Self-Attention 中,使用 1×1 卷积层直接对通道间信息进行整合。1×1 卷积层可以对每个通道的信息进行加权求和,从而实现通道间的信息交互。同样经过 Sigmoid 激活函数处理后,得到通道注意力图,该图体现了不同通道的重要程度。

         综合操作:将空间域和通道域操作得到的结果进行堆叠,从而得到经过空间和通道域交互后的特征图。这个特征图综合了空间和通道两个维度的信息,包含了更丰富的上下文信息。在得到这个综合特征图后,

2. YOLOv11与CASA的结合          

 基于上述的想法,本文将其与C3K2相结合,使用全群信息缓解CNN带来的细节特征丢失的问题。同时与C2PSA传统的自注意力机制。

3. CA代码部分

YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub

视频讲解:YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili

YOLOv11模型改进讲解,教您如何根据自己的数据集选择最优的模块提升精度_哔哩哔哩_bilibili

YOLOv11全部代码,现有几十种改进机制。

 4. 将CASA引入到YOLOv11中

第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。

               

第二:在task.py中导入

 ​​​            

第三:在task.py中的模型配置部分下面代码

 ​​​​​​​ ​​​​​​​ ​​​​​​​​​​​​​​​​​​​​​ ​​​​​​​​​​​​​​      

第四:将模型配置文件复制到YOLOV11.YAMY文件中

     ​​​​​​​ ​​​​​​​​​​​​​​ ​​​​​​​ ​​​​​​​​​​​​​​        

     第五:运行成功

from sympy import false

from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld

if __name__=="__main__":

    # 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
    model = YOLO(r"E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\models\11\yolo11_CASAttention.yamy")\
        .load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt')  # build from YAML and transfer weights

    results = model.train(data=r'E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\datasets\VOC_my.yaml',
                          epochs=300,
                          imgsz=640,
                          batch=64,
                          # cache = False,
                          # single_cls = False,  # 是否是单类别检测
                          # workers = 0,
                          # resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',
                          amp = True
                          )
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值