YOLO11改进-注意力-引入前景注意力Outlook attention

          在视觉识别领域,卷积神经网络(CNN)长期占据主导地位,但近年来视觉变换器(ViT)也展现出潜力。然而,ViT 在 ImageNet 分类中存在性能短板,主要原因是其将细粒度特征编码为 token 表示的效率较低。Outlook attention 机制的提出解决了这一问题,它能高效地将更细粒度的特征和上下文编码为 token,从而提升模型性能。本文将Outlook attention 与C3K2相结合,提出C3k2_Outlook_attention模块。

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

1. 前景注意力Outlook attention结构介绍          

        Outlook attention 是一种新的注意力机制,用于视觉识别任务,旨在有效编码细粒度特征和上下文信息到 token 表示中,提升模型性能。Outlook Attention 的核心目标是有效地捕捉局部细粒度特征。在传统的自注意力机制中,往往侧重于粗粒度级别的全局依赖建模,而可能忽略了局部特征的重要性。Outlook Attention 通过在局部窗口内进行操作,能够更好地编码局部的细粒度特征和上下文信息。

  1. 原理

    • 局部特征捕捉: 它通过计算局部窗口内各位置之间的关系来生成注意力权重,进而对局部特征进行加权聚合,使得模型能够更精准地捕捉到局部特征的细节。

    • 注意力权重计算: Outlook Attention 首先通过线性变换来生成注意力权重。然后,通过 Softmax 函数对这些权重进行归一化处理,确保权重之和为 1,从而能够合理地对局部窗口内的特征进行加权。

    • 特征聚合: 在得到注意力权重后,Outlook Attention 会根据这些权重对局部窗口内的特征进行加权平均。这个过程可以有效地将局部窗口内的特征进行聚合,使得每个位置的特征都能够融合局部窗口内其他位置的信息。最后,通过折叠操作将处理后的局部特征重新组合成原始尺寸的特征图,得到最终经过 Outlook Attention 处理的特征。

  2. 结构

    • 线性变换(Linear):输入特征图首先经过线性变换层。这一层会将输入特征图的每个局部窗口内的特征进行线性变换,生成尺寸为的中间特征图,其中是局部窗口的大小。

    • 重塑(Reshape)和 Softmax: 中间特征图被重塑为的形状,然后通过 Softmax 函数进行归一化处理,得到注意力权重。

    • Outlook 操作: 经过 Softmax 处理后的注意力权重被应用到局部窗口内的特征上,进行加权操作,实现 Outlook 操作。

    • 线性展开和加权平均(Linear + Unfold 和 Weighted Average):经过 Outlook 操作后的特征会进行线性展开和加权平均操作,得到尺寸为的特征图。

    • 折叠(Fold):最后,通过折叠操作将尺寸为的特征图重新组合成原始尺寸的特征图,完成 Outlook Attention 的处理过程。

2. YOLOv11与前景注意力Outlook attention的结合

        1. 本文将Outlook attention 与C3K2相结合,提出C3k2_Outlook_attention模块。

3. Outlook attention代码部分

https://github.com/tgf123/YOLOv8_improve/blob/master/YOLOv11.md

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

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

yolov11全部代码

 4. 将前景注意力Outlook attention引入到YOLOv11中

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

第二:在task.py中导入C3k2_OutlookAttention包

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

    ​​​​​​ 

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

        第一个改进的配置文件

     第五:运行成功


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

if __name__=="__main__":

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

    results = model.train(data=r'D:\model\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、付费专栏及课程。

余额充值