当前位置: 首页 > news >正文

YOLOv11融合YOLOv12中的R-ELAN结构


YOLOv11v10v8使用教程:  YOLOv11入门到入土使用教程

YOLOv11改进汇总贴:YOLOv11及自研模型更新汇总 


《YOLOv12: Attention-Centric Real-Time Object Detectors》

一、 模块介绍

        论文链接:https://arxiv.org/abs/2502.12524

        代码链接:https://gitcode.com/gh_mirrors/yo/yolov12

论文速览:

       长期以来,增强YOLO框架的网络架构一直至关重要,但一直专注于基于cnn的改进,尽管注意力机制在建模能力方面已被证明具有优越性。这是因为基于注意力的模型无法匹配基于cnn的模型的速度。本文提出了一种以注意力为中心的YOLO框架,即YOLOv12,与之前基于cnn的YOLO框架的速度相匹配,同时利用了注意力机制的性能优势。YOLOv12在精度和速度方面超越了所有流行的实时目标检测器。例如,YOLOv12-N在T4 GPU上以1.64ms的推理延迟实现了40.6% mAP,以相当的速度超过了高级的YOLOv10-N / YOLOv11-N 2.1%/1.2% mAP。这种优势可以扩展到其他模型规模。YOLOv12还超越了改善DETR的端到端实时检测器,如RT-DETR /RT-DETRv2: YOLOv12- s比RT-DETR- r18 / RT-DETRv2-r18运行更快42%,仅使用36%的计算和45%的参数。更多的比较见图1。

总结:本文将其中的R-ELAN思想融入C3等模块。


二、二创融合模块

2.1 相关二创模块及所需参数

        该模块可如图加入到C3与自研等模块中,代码见群文件,所需参数如下。

C3-变式模块 所需参数:(c1, c2, n, shortcut, g, e)

RCRep2A及变式模块 所需参数:(c1, c2, shortcut, e)

        其中,C3-变式模块 代码如下:

class C3_R_ELAN(nn.Module):
    def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
        """Initialize the CSP Bottleneck with given channels, number, shortcut, groups, and expansion values."""
        super().__init__()
        c_ = int(c2 * e)  # hidden channels
        self.cv1 = Conv(c1, c_, 1, 1)
        self.cv2 = Conv(c1, c_, 1, 1)
        self.cv3 = Conv((1 + n) * c_, c2, 1)  # optional act=FReLU(c2)
        self.m = nn.ModuleList(nn.Sequential(*(ABlock(c_, max(c_//32, 1), 2, 1) for _ in range(2))) for _ in range(n))

    def forward(self, x):
        y = [self.cv1(x)]
        y.extend(m(y[-1]) for m in self.m)
        return self.cv3(torch.cat(y, 1))

2.2更改yaml文件 (以自研模型为例)

yam文件解读:YOLO系列 “.yaml“文件解读_yolo yaml文件-CSDN博客

       打开更改ultralytics/cfg/models/11路径下的YOLOv11.yaml文件,替换原有模块。

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect
# ⭐⭐Powered by https://blog.csdn.net/StopAndGoyyy,  技术指导QQ:2668825911⭐⭐

# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024] # summary: 377 layers, 2,249,525 parameters, 2,249,509 gradients, 8.7 GFLOPs/258 layers, 2,219,405 parameters, 0 gradients, 8.5 GFLOPs
  s: [0.50, 0.50, 1024] # summary: 377 layers, 8,082,389 parameters, 8,082,373 gradients, 29.8 GFLOPs/258 layers, 7,972,885 parameters, 0 gradients, 29.2 GFLOPs
  m: [0.50, 1.00, 512] # summary:  377 layers, 20,370,221 parameters, 20,370,205 gradients, 103.0 GFLOPs/258 layers, 20,153,773 parameters, 0 gradients, 101.2 GFLOPs
  l: [1.00, 1.00, 512] # summary: 521 layers, 23,648,717 parameters, 23,648,701 gradients, 124.5 GFLOPs/330 layers, 23,226,989 parameters, 0 gradients, 121.2 GFLOPs
  x: [1.00, 1.50, 512] # summary: 521 layers, 53,125,237 parameters, 53,125,221 gradients, 278.9 GFLOPs/330 layers, 52,191,589 parameters, 0 gradients, 272.1 GFLOPs

#  n: [0.33, 0.25, 1024]
#  s: [0.50, 0.50, 1024]
#  m: [0.67, 0.75, 768]
#  l: [1.00, 1.00, 512]
#  x: [1.00, 1.25, 512]
# YOLO11n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 2, C3_R_ELAN, [128]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 4, RCRep2A, [512, False, 0.25]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 4, RCRep2A, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 2, RCRep2A, [1024, True]]
  - [-1, 1, SPPF_WD, [1024, 7]] # 9

# YOLO11n head
head:
  - [[3, 5, 7], 1, align_3In, [144, 1]] # 10
  - [[4, 6, 9], 1, align_3In, [144, 1]] # 11

  - [[-1, -2], 1, Concat, [1]] #12  cat

  - [-1, 1, RepVGGBlocks, []] #13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]] #14
  - [[-1, 4], 1, Concat, [1]] #15 cat

  - [-1, 1, Conv, [128, 3]] # 16
  - [13, 1, Conv, [256, 3]] #17
  - [13, 1, Conv, [512, 3, 2]] #18

  - [[16, 17, 18], 1, Detect, [nc]] # Detect(P3, P4, P5)



# ⭐⭐Powered by https://blog.csdn.net/StopAndGoyyy,  技术指导QQ:2668825911⭐⭐


 2.3 修改train.py文件

       创建Train脚本用于训练。

from ultralytics.models import YOLO
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'

if __name__ == '__main__':
    model = YOLO(model='ultralytics/cfg/models/xy_YOLO/xy_yolov1-ConvNeXt.yaml')
    # model = YOLO(model='ultralytics/cfg/models/11/yolo11l.yaml')
    model.train(data='./datasets/data.yaml', epochs=1, batch=1, device='0', imgsz=320, workers=1, cache=False,
                amp=True, mosaic=False, project='run/train', name='exp',)

         在train.py脚本中填入修改好的yaml路径,运行即可训练,数据集创建教程见下方链接。

YOLOv11入门到入土使用教程(含结构图)_yolov11使用教程-CSDN博客


相关文章:

  • 通过continue插件实现vscode接入本地离线部署的deepseek
  • chromadb向量数据库使用 (2)
  • DeepSeek 配合 Mermaid,自动生成甘特图
  • Linux常见命令
  • Mac远程桌面软件哪个好用?
  • 服务器和本地电脑之间如何传输文件
  • 基于SpringBoot的“数据驱动的资产管理系统站”的设计与实现(源码+数据库+文档+PPT)
  • Android视频流畅播放要素
  • 19.5、C++11新特性有哪些⑤【模板的改进】
  • 科技查新有不通过的情况吗?为什么?
  • JAVA网络协议1
  • C++蓝桥杯基础篇(七)
  • 在单片机上部署的 k3s - agent 中遇到 `Failed to create pod sandbox` 错误
  • windows系统中大容量硬盘分区为1TB的方法
  • ECU抽象-I/O硬件抽象
  • 40岁开始学Java:Java中单例模式(Singleton Pattern),适用场景有哪些?
  • 【星云 Orbit • STM32F4】08. 用判断数据头来接收据的串口通用程序框架
  • K8S学习之基础六:k8s中pod亲和性
  • qt实践教学(编写一个代码生成工具)持续更新至完成———
  • 力扣:1.两数之和(O(n)复杂度)
  • 全国人民代表大会常务委员会公告〔十四届〕第十号
  • “五一”逃离城市计划:带上帐篷去大自然里充电
  • 违规行为屡禁不止、责任边界模糊不清,法治日报:洞穴探险,谁为安全事故买单?
  • 广西干旱程度有所缓解,未来一周旱情偏重地区降水量仍不足
  • 王毅:妥协退缩只会让霸凌者得寸进尺
  • 新任浙江省委常委、杭州市委书记刘非开展循迹溯源学习调研