YOLO11改进-模块-引入空间增强前馈网络SEFN 提高多尺度 遮挡
基于卷积神经网络(CNNs)的方法在图像修复中受限于感受野增长缓慢,难以捕捉长距离依赖;基于 Transformer 的方法存在二次计算复杂度问题,且在像素级捕捉空间长距离依赖方面效果不佳。选择性状态空间模型(SSM)虽在学习长距离依赖上有优势,但传统 SSM 缺乏 2D 空间感知。在处理图像修复任务时,SSM 的固有设计局限使其在跨多行和多列区域的局部空间信息捕捉上存在不足。为解决这些问题,提升图像表示学习中空间感知能力,提出了空间增强前馈网络(SEFN)。
上面是原模型,下面是改进模型

1. 空间增强前馈网络SEFN介绍
SEFN 的关键思想是利用从 SEM 块之前的特征表示中提取的空间信息,通过门控机制作用于 SMB 之后的特征,从而将空间感知和长距离依赖学习整合到整个 SEM 块中。通过平均池化扩大感受野,利用 {Conv-LN-ReLU} 块捕捉更广泛的空间感知,再经上采样得到空间感知指标 γ。利用该指标 γ 对 SMB 之后的特征进行调制,增强特征的空间感知能力,以此来补充 SSM 在局部空间信息捕捉上的不足,优化图像修复过程中的空间表示学习 。
空间增强前馈网络(SEFN)是用于优化图像修复中空间感知能力的关键组件,其结构主要包含特征获取、扩大感受野、生成空间感知指标和门控机制调制这几个关键步骤:
特征获取:SEFN 首先获取 Mamba 块入口和出口的特征,分别记为hbefore和hafter。这两个特征包含了图像在不同处理阶段的信息,是后续处理的基础。
扩大感受野:对hbefore进行平均池化操作,平均池化可以扩大感受野,让网络能捕捉到更广泛区域的信息。之后,将平均池化后的特征送入由两个 {卷积层 - 层归一化层 - 修正线性单元激活函数}({Conv-LN-ReLU})组成的模块中。经过这两个模块的处理,网络能够进一步捕捉到更丰富、更广泛的空间感知信息。
生成空间感知指标:经过前面的处理后,对得到的特征进行上采样操作,从而得到空间感知指标 γ。这个 γ 指标保留了来自hbefore的空间关系,能够反映出图像中不同区域之间的空间联系。
门控机制调制:把hafter分成hafter′和hafter′′两部分。hafter′会结合 γ,先经过线性变换,再通过 GELU 这种非线性激活函数处理,形成一个 “gate”(门)。最后,这个 “gate” 和hafter′′进行逐点相乘操作,这样就能根据空间感知指标 γ 对hafter′′进行调制,增强hafter′′的空间感知能力,让网络在图像表示学习过程中对空间信息的把握更准确。
2. YOLOv11与空间增强前馈网络SEFN的结合
在 YOLO11 目标检测框架中,SEFN 替换 YOLO11 的 concat 操作,能增强空间感知能力。SEFN 通过独特的结构捕捉更丰富空间信息,以门控机制优化特征,比 concat 单纯拼接特征更有效,可使模型在检测时对目标空间位置和关系把握更精准,提升检测精度与稳定性。
3. 空间增强前馈网络SEFN代码部分
视频讲解:
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub
用一篇论文教您如何使用YOLOv11改进模块写一篇1、2区论文_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
YOLOv11全部代码,现有几十种改进机制。
4. 空间增强前馈网络SEFN引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入包
第三:在YOLOv11\ultralytics\nn\tasks.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行成功
from sympy import falsefrom ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name__=="__main__":# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型model = YOLO(r"E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\models\11\yolo11_SEFN.yamy")\.load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weightsresults = 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)