YOLO11改进-模块-引入门控瓶颈卷积GBC 关注目标抑制背景干扰
在结构裂缝像素级分割任务中,现有方法存在诸多挑战。卷积神经网络(CNNs)虽有较强的局部特征提取能力,但有限的感受野使其难以建模图像全局的不规则依赖关系,导致分割不连续、背景噪声抑制弱;Vision Transformer(ViT)虽能捕捉不规则像素依赖,但自注意力机制计算复杂度高,内存占用大,不利于在资源受限设备上部署;基于 Mamba 的方法在处理裂缝图像时,其视觉状态空间(VSS)块结构和扫描策略难以有效捕捉裂缝形态和纹理,且常通过线性层处理特征图,限制了对裂缝特征的选择性增强或抑制。为解决这些问题,提出了轻量级门控瓶颈卷积(Gated Bottleneck Convolution,GBC),旨在在降低参数数量和计算成本的同时,增强模型对裂缝形态信息的建模能力。
上面是原模型,下面是改进模型

1. 门控瓶颈卷积GBC介绍
GBC 的理论核心是通过低秩近似和门控机制,在减少模型计算量的同时,增强其对裂缝特征的提取能力。在卷积操作中,传统方式计算量较大。GBC 引入瓶颈卷积,采用低秩近似的方法,将高维矩阵映射到低维空间,从而降低计算复杂度。这一操作使得模型在处理裂缝图像时,能更高效地提取特征,同时减少资源消耗。另外,门控机制为每个空间位置和通道赋予动态特征,让模型可以根据不同的裂缝特征进行自适应调整,增强对裂缝细节的捕捉能力,提高分割精度。
从提供的图片来看,门控瓶颈卷积GBC模块主要包含以下几个部分:
GBC 主要包含瓶颈卷积层、门控机制以及残差连接这几个关键部分。输入的特征会先保留一份用于后续的残差连接。之后,特征进入瓶颈卷积层,这一层通过特殊的卷积方式减少参数数量和计算量。经过瓶颈卷积处理后,特征再依次经过归一化和激活函数进行处理,得到两组特征。这两组特征通过哈达玛积组合形成门控特征图,门控特征图进一步经过瓶颈卷积细化细节。最后,将细化后的特征与最初保留的特征进行残差连接,得到最终输出。这种结构设计保证了模型在有效提取裂缝特征的同时,能够避免信息丢失,增强模型的鲁棒性,从而实现更精准的裂缝分割。
2. YOLOv11与门控瓶颈卷积GBC的结合
在 YOLOv11 中,用 MFM(调制融合模块)替换 concat,能根据特征重要性动态调整权重,相比简单拼接,可更有效突出关键特征。这能增强特征交互,提升模型对目标的特征表达能力,进而提高检测精度和对复杂场景的适应性 。
3. 门控瓶颈卷积GBC代码部分
视频讲解:
YOLOv8_improve/YOLOv11.md at master · tgf123/YOLOv8_improve · GitHub
用一篇论文教您如何使用YOLOv11改进模块写一篇1、2区论文_哔哩哔哩_bilibili
YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili
YOLOv11全部代码,现有几十种改进机制。
4. 门控瓶颈卷积GBC引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在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"E:\Part_time_job_orders\YOLO\YOLOv11\ultralytics\cfg\models\11\yolo11_GBC.yamy")\
.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
)