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

YOLO11改进-模块-引入Restormer模块

         随着深度学习发展,在图像恢复领域,传统方法逐渐被基于深度学习的模型取代。Transformer 在处理长距离依赖关系上展现优势,Restormer 应运而生,旨在利用 Transformer 架构更有效地处理高分辨率图像恢复任务,为图像融合等应用提供更好的特征提取基础,后续被引入到本文的医学图像融合方法中,用于处理未对齐的多模态医学图像。我们将其与C3K2模块相结合,提取图像特征。

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

改进后的

1. Restormer 介绍          

       Restormer 主要由多尺度密集 Transformer 注意力模块(MDTA)和门控双线性特征网络(GDFN)构成,以下是详细介绍:

1. 多尺度密集 Transformer 注意力模块(MDTA)

        核心机制:MDTA 利用多头自注意力机制(Multi - Head Self - Attention),从不同子空间捕捉特征间的关系,以增强特征表达能力。自注意力机制能够计算输入特征序列中每个位置与其他位置的关联程度,从而有效建模长距离依赖关系。

        具体操作:在 MDTA 中,输入特征被线性投影到多个头(head),每个头独立地计算注意力,然后将结果拼接并再次投影,得到最终输出。这种多头设计允许模型从不同角度捕捉特征间的关系,提高特征表示的丰富性。

2. 门控双线性特征网络(GDFN

        核心机制:GDFN 用于对 MDTA 输出的特征进行进一步处理,它通过门控机制(gating mechanism)控制特征的流动和融合,以增强模型对重要特征的捕捉能力。

        具体操作:GDFN 通过双线性变换(bilinear transformation)对输入特征进行变换,并使用门控单元(如 sigmoid 函数)对变换后的特征进行加权,从而实现对不同特征的选择性增强或抑制。在整体结构中,Restormer 通过堆叠多个 MDTA 和 GDFN 模块,构建出一个层次化的特征提取网络,能够从输入图像中提取不同层次和尺度的特征,为后续的图像恢复、融合等任务提供丰富的特征表示。 从图中可以看到,在医学图像融合应用里,Restormer 作为 Encoder 的一部分,对输入图像进行特征提取,其输出的特征后续参与到模态差异消除、特征对齐和融合等操作中。

   

2. YOLOv11与Restormer 的结合     

 可以在YOLOv11原有的局部特征基础上,增加对全局特征的关注,使特征表达更加丰富和准确。        

3. Restormer 代码部分

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

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

 4. 将Restormer 引入到YOLOv11中

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

   

第二:在task.py中导入

   

第三:在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_Restormer.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
                          )


http://www.kler.cn/a/517700.html

相关文章:

  • Final2x--开源AI图片放大工具
  • npm和webpack学习
  • vim如何显示行号
  • Jenkins pipline怎么设置定时跑脚本
  • [央企大赛 2025] pwn
  • 【数据结构】树的基本:结点、度、高度与计算
  • OpenCV:在图像中添加高斯噪声、胡椒噪声
  • freeswtch目录下modules.conf各个模块的介绍【freeswitch版本1.6.8】
  • 使用 C++ 在深度学习中的应用:如何通过 C++20 构建高效神经网络
  • vue3 中如何监听 props 中的值的变化
  • 自定义脚手架
  • Rust使用tokio(一)
  • 蓝桥杯3520 翻转 | 贪心+分类讨论
  • 《Effective Java》学习笔记——第7部分并发
  • 一文讲清JVM中的内存泄漏问题
  • Go语言中的值类型和引用类型特点
  • STM32项目分享:智能宠物喂食系统(升级版)
  • 软件过程模型
  • python动态全局缓存配置
  • 【论文+源码】 SeqDiffuSeq带有序列到序列生成的编码器变压器的文本扩散模型
  • OpenCV相机标定与3D重建(65)对图像点进行去畸变处理函数undistortPoints()的使用
  • 洛谷P1469 找筷子
  • Scala语言的移动应用开发
  • 使用select函数创建多线程TCP服务端
  • Skia使用Dawn后端在Windows窗口中绘图
  • 反向代理模块1