YOLO11改进-Backbone-引入OverLoCK替换YOLO backbone 融合自上而下注意力机制,实现高效的长程依赖建模与局部细节捕捉,同时平衡计算复杂度与性能

        人类视觉系统通过自上而下的注意力机制(Top-down Attention)实现高效感知:首先获取场景的整体概览(Overview First),识别显著线索,随后进行精细化局部分析(Look Closely Next)。这种机制通过反馈信号引导视觉处理,提升目标定位和分类的准确性。

        现有卷积网络的局限性主流卷积网络(如 ResNet、ConvNeXt)采用层级金字塔结构,通过下采样扩大感受野,但缺乏显式的自上而下语义引导,导致中间层特征难以准确定位目标(如图 2 所示,传统模型在远离分类器的阶段难以正确激活目标区域)。现有动态卷积方法(如 Deformable Conv)虽能建模局部变化,但难以同时捕捉长程依赖和保持局部归纳偏置,在大分辨率输入时性能受限。

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

改进后的

1. OverLoCK介绍 

        OverLoCK 的理论核心是模拟人类视觉系统的自上而下注意力机制(Top-down Attention),提出 *深阶段分解策略(DDS将网络拆分为三个协同子网络:

        Base-Net提取中低层特征,Overview-Net通过粗粒度全局建模生成动态语义先验(模拟 “先概览” 过程),Focus-Net在全局先验引导下进行精细化特征感知(模拟 “后精修” 过程)。

        结合上下文混合动态卷积(ContMix),通过计算输入特征与全局区域中心的亲和度生成动态卷积核,使每个像素的卷积操作融合全局语义信息,既突破传统卷积的固定核限制以建模长程依赖,又保留局部归纳偏置捕捉细节。

OverLoCK 的结构独特且高效,主要由三个并行的子网络组成,它们相互协作以实现强大的特征提取能力。

        输入图像首先进入 Base - Net,该网络负责提取中低层特征,将图像下采样至H/16×W/16分辨率。之后,Base - Net 的输出被分为两条路径。一条路径连接到 Overview - Net,此网络会进一步将特征下采样至H/32×W/32,从而生成全局上下文先验,为后续的特征提取提供全局语义信息。另一条路径则通向 Focus - Net,这是特征提取的关键部分。

        Focus - Net 以动态块为核心构建。每个动态块包含 3×3 深度卷积来捕捉局部细节,门控动态空间聚合器(GDSA)结合上下文混合动态卷积(ContMix)和门控机制,有效抑制上下文噪声,同时实现长程依赖建模。此外,还有 ConvFFN 增强特征的非线性表达。在 Focus - Net 中,上下文先验与输入特征通过拼接、门控机制和动态卷积实现特征级与权重级的双重引导。而且,上下文先验在每个块中会不断更新,通过残差连接防止信息稀释,保证了网络能够充分利用全局和局部信息,在多种视觉任务中展现出出色的性能。

2. YOLOv11与OverLoCK的结合           

       OverLoCK 替换 YOLO 主干时,借人类视觉 “先概览后精修” 机制提升目标定位精度,动态卷积自适应捕捉全局与局部特征,对多尺度目标检测更鲁棒,且纯卷积架构高效易部署,平衡速度与性能。

3. OverLoCK代码部分

视频讲解:

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

YOLOv11模型改进讲解,教您如何替换原有的YOLO11 backbone提升精度_哔哩哔哩_bilibili

用一篇论文教您如何使用YOLOv11改进模块写一篇1、2区论文_哔哩哔哩_bilibili

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

YOLOv11全部代码,现有一百多种改进机制。

 4. TOverLoCK引入到YOLOv11中

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

                     

第二:在task.py中导入

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

第三:在YOLOv11\ultralytics\nn\tasks.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"EE:\bilibili\model\YOLOV8_new\ultralytics-main\ultralytics\cfg\models\11\yolo11_overlock_s.yaml")\
        .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
                          )
WARNING ⚠️ no model scale passed. Assuming scale='n'. Traceback (most recent call last): File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\train.py", line 20, in <module> model = YOLO(r'E:\ultralytics-yolo11-20250502\ov.yaml') File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\models\yolo\model.py", line 23, in __init__ super().__init__(model=model, task=task, verbose=verbose) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\engine\model.py", line 143, in __init__ self._new(model, task=task, verbose=verbose) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\engine\model.py", line 251, in _new self.model = (model or self._smart_load("model"))(cfg_dict, verbose=verbose and RANK == -1) # build model File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\tasks.py", line 417, in __init__ self.model, self.save = parse_model(deepcopy(self.yaml), ch=ch, verbose=verbose, warehouse_manager=self.warehouse_manager) # model, savelist File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\tasks.py", line 1228, in parse_model m = m(*args) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 998, in overlock_xt model = OverLoCK( File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 921, in __init__ self.channel = [i.size(1) for i in self.forward(torch.randn(1, 3, 640, 640).cuda())] File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 976, in forward x, ctx_cls = self.forward_sub_features(x, ctx) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 963, in forward_sub_features x, ctx = blk(x, ctx, ctx_up) File "E:\anaconda\envs\hong\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl return forward_call(*args, **kwargs) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 566, in forward x = self._forward_inner(x, h_x, h_r) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 531, in _forward_inner x1 = na2d_av(attn1, value[0], kernel_size=self.smk_size) TypeError: 'NoneType' object is not callable
07-14
Traceback (most recent call last): File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\train.py", line 20, in <module> model = YOLO(r'E:\ultralytics-yolo11-20250502\ov.yaml') File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\models\yolo\model.py", line 23, in __init__ super().__init__(model=model, task=task, verbose=verbose) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\engine\model.py", line 143, in __init__ self._new(model, task=task, verbose=verbose) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\engine\model.py", line 251, in _new self.model = (model or self._smart_load("model"))(cfg_dict, verbose=verbose and RANK == -1) # build model File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\tasks.py", line 417, in __init__ self.model, self.save = parse_model(deepcopy(self.yaml), ch=ch, verbose=verbose, warehouse_manager=self.warehouse_manager) # model, savelist File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\tasks.py", line 1228, in parse_model m = m(*args) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 998, in overlock_xt model = OverLoCK( File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 921, in __init__ self.channel = [i.size(1) for i in self.forward(torch.randn(1, 3, 640, 640).cuda())] File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 976, in forward x, ctx_cls = self.forward_sub_features(x, ctx) File "E:\ultralytics-yolo11-20250502\ultralytics-yolo11-main\ultralytics\nn\backbone\overlock.py", line 963, in forward_sub_features x, ctx = blk(x, ctx, ctx_up) File "E:\anaconda\envs\hong\lib\site-packages\torch\nn\modules\module.py", line 1501, in _call_impl return forward_call(*args, **kwargs) File "E:
最新发布
07-14
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值