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

YOLO12改进-Backbone-引入Swin Transformer替换backbone

        在计算机视觉领域,卷积神经网络(CNNs)一直是主流架构,从 AlexNet 开始,其结构不断优化,推动了该领域的快速发展。与此同时,在自然语言处理(NLP)中,Transformer 凭借其注意力机制在处理长距离依赖关系上的优势,成为主导架构,并取得了显著成功。受 Transformer 在 NLP 中的启发,研究人员开始探索将其应用于计算机视觉领域,并在某些任务中展现出潜力。然而,将 Transformer 从语言领域迁移到视觉领域面临诸多挑战,例如视觉元素尺度变化大、图像像素分辨率高导致计算复杂度高等问题。为了解决这些问题,Swin Transformer 应运而生,通过引入滑动窗口机制和层次化设计,有效降低了计算复杂度,同时保持了 Transformer 的建模能力,为视觉任务提供了新的解决方案。

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

改进后的

1.  Swin Transformer介绍 

         基于移位窗口的自注意力计算:标准 Transformer 的全局自注意力计算复杂度与令牌数量呈二次关系,不适用于许多视觉任务。Swin Transformer 提出在局部窗口内计算自注意力,将窗口均匀划分图像且互不重叠,降低计算复杂度。同时,采用移位窗口分区方法,在连续的 Swin Transformer 块中交替使用两种分区配置,引入跨窗口连接,增强模型建模能力。

         相对位置偏差:在计算自注意力时,引入相对位置偏差,为每个头计算相似度时加入相对位置偏差矩阵B。通过参数化一个较小尺寸的偏差矩阵B^来获取B的值,实验表明这种方式相较于无位置编码或使用绝对位置嵌入,能显著提升模型性能。    

 

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

         整体架构:Swin Transformer 首先将输入的 RGB 图像通过补丁分割模块划分为不重叠的补丁,每个补丁视为一个 “令牌”,并通过线性嵌入层将其特征投影到指定维度。接着,经过多个带有修改后自注意力计算的 Transformer 块(Swin Transformer 块)进行特征变换。为生成层次化表示,随着网络加深,通过补丁合并层减少令牌数量,同时增加特征维度。整个架构包含多个阶段,每个阶段由补丁合并层和 Swin Transformer 块组成,最终产生与典型卷积网络相同分辨率的层次化特征图。

        Swin Transformer 块:Swin Transformer 块由基于移位窗口的多头自注意力(MSA)模块和一个 2 层的多层感知器(MLP)组成,中间使用 GELU 非线性激活函数。在每个 MSA 模块和 MLP 之前应用层归一化(LN),并在每个模块之后应用残差连接 。

 2. YOLOv12与Swin Transformer的结合          

      采用 Swin Transformer 替代 YOLO12 的骨干网络,能够通过其层次化特征图构建和移位窗口自注意力机制,更高效地处理多尺度视觉信息,从而提升对不同尺寸目标的检测能力。这一改进不仅显著提高了目标检测的精度,在 COCO 检测任务中表现尤为突出,同时保持了相对较低的计算复杂度,为实际应用场景提供了强有力的技术支持。

3. Swin Transformer代码部分

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

 4. 将Swin Transformer引入到YOLOv12中

第一: 先新建一个change_model,将下面的核心代码复制到下面这个路径当中,如下图如所示。YOLOv12\ultralytics\change_model。

            ​​   

第二:在task.py中导入

 ​​​       ​​​​​​​     

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

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

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

     ​​​​​​​ ​​​​​​​​​​​​​​ ​​​​​​​ ​​​​​​​​​​​​​第五:运行代码


from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name__=="__main__":# 使用自己的YOLOv12.yamy文件搭建模型并加载预训练权重训练模型model = YOLO(r"E:\Part_time_job_orders\YOLO_NEW\YOLOv12_all\ultralytics\cfg\models\12\yolo12_SwinTransformer.yaml")# .load(r'E:\Part_time_job_orders\YOLO_NEW\YOLOv12\yolo12n.pt')  # build from YAML and transfer weightsresults = model.train(data=r'E:\Part_time_job_orders\YOLO\YOLOv12\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)
http://www.xdnf.cn/news/8514.html

相关文章:

  • 地理特征类可视化图像总结
  • Java面向对象编程核心:封装、继承与多态
  • AT24C02(I2C总线)
  • C# TCP协议全面指南:从可靠传输到企业级高并发的深度实践​
  • 当 BIM 遇见 GIS:GISBox 中 Revit 数据导入的技术联动与应用场景
  • 《AI 绘画崛起,人类艺术家如何在夹缝中寻找新机遇?》
  • 复杂工况下液压挖掘机工作臂系统创新设计与性能优化
  • 如何在STM32CubeMX下为STM32工程配置调试打印功能
  • 使用pip安装ptflops报错
  • 探索Qwen2ForCausalLM 架构上进行微调
  • k8s容器入门(2) 容器化组件“可漂移“
  • 企业知识管理面临的挑战与飞书知识问答的解决方案
  • 字节开源多模态文档图像解析模型:Dolphin
  • 【FastAPI】--基础教程
  • 使用compressorjs实现前端图片压缩
  • 文章记单词 | 第106篇(六级)
  • 提高 Maven 项目的编译效率
  • 苍穹外卖day1实战,Idea中Lombok编译时“找不到符号”,更改JDK版本最全流程,作者亲身尝试
  • 【JavaScript篇】对象武林:构造函数创世录与实例江湖风云
  • 大型多模态推理模型技术演进综述:从模块化架构到原生推理能力的综合分析
  • 锐化算子构建方法(机翻)
  • 皮尔森电流互感器测试浪涌电流时的一些典型问题
  • 【AS32X601驱动系列教程】GPIO_按键检测详解
  • HJ106 字符逆序【牛客网】
  • vue3自定义指令来实现 v-copy 功能
  • Systemd服务重启策略详解:on-failure与相关配置
  • 互联网大厂Java求职面试:Spring Cloud微服务架构设计中的挑战与解决方案
  • 通义千问的视觉识别技术和特点
  • 7.6/Q1,GBD数据库最新文章解读
  • 【小程序】手机号快速验证组件如何使用对公转账方式