Gated CNN Block,抑制背景噪声、强化边缘特征,更好地融合不同尺度的特征信息
近年来,Transformer 架构在自然语言处理中取得了显著成功,但其自注意力机制的二次复杂度限制了在长序列任务中的应用。为此,研究者提出了基于状态空间模型(SSM)的 Mamba 架构,通过线性复杂度的状态更新机制处理长序列数据。然而,Mamba 在视觉任务中面临挑战:视觉数据通常需要局部特征的精细提取,而 Mamba 的全局状态更新机制可能导致局部信息的稀释。为平衡长序列建模能力与局部特征提取效率,Gated CNN Block 被引入,它结合了 CNN 的局部感知特性和门控机制的自适应能力,既保留了 Mamba 的线性复杂度优势,又强化了对视觉任务中关键局部特征的捕捉能力。
1.Gated CNN Block原理
Gated CNN Block 的核心原理是通过门控机制动态调整卷积特征的传递。输入特征被分为两路:一路通过标准卷积层提取特征,另一路通过卷积层生成 sigmoid 激活的门控信号。门控信号的值域在 [0,1] 之间,用于控制特征图中每个元素的信息保留程度。这种机制使模型能够自适应地关注重要特征,抑制噪声和冗余信息,从而增强特征表达能力。与 Mamba 的状态更新机制相比,Gated CNN Block 更专注于局部特征的选择性增强,特别适合处理视觉任务中的空间依赖关系。
Gated CNN Block 的典型结构包含以下组件:
输入层:接收前一层的特征图。
卷积分支:通过标准卷积层(如 3×3 或 5×5 卷积核)提取特征,生成特征图 A。
门控分支:通过卷积层(通常与卷积分支共享参数)生成门控信号,经过 sigmoid 激活函数得到门控图 G。
门控操作:将特征图 A 与门控图 G 逐元素相乘,得到门控后的特征图。
输出层:门控后的特征图可直接输出,或与输入特征进行残差连接后输出。
这种结构通常以堆叠方式构建深层网络,每层的门控机制能够逐级细化特征表示,使模型更好地捕捉数据中的复杂模式。在 MambaOut 架构中,Gated CNN Block 替代了原始 Mamba 中的 SSM 组件,形成了一种更适合视觉任务的轻量级架构。
2.Gated CNN Block习作思路
医学领域
在医学图像分析中,Gated CNN Block 通过选择性激活机制,有效增强了对细微病理特征的捕捉能力。与 Mamba 的全局状态更新机制相比,Gated CNN Block 更专注于局部特征的精细提取,例如在脑部 MRI 肿瘤分割任务中,门控机制能够自适应地关注肿瘤边缘的模糊区域,抑制正常组织的干扰,从而提高分割精度。
遥感领域
遥感图像通常具有复杂的场景结构和多尺度地物特征,Gated CNN Block 的自适应特征选择能力使其在遥感场景理解中表现出色。与 Mamba 的长序列建模能力不同,Gated CNN Block 更擅长处理空间维度上的局部依赖关系,例如在高分辨率卫星图像的土地覆盖分类任务中,门控机制能够突出不同地物类型(如城市建筑、农田、水体)的特征差异,抑制云层、阴影等干扰因素。
工业缺陷检测领域
在工业产品表面缺陷检测中,Gated CNN Block 通过抑制正常区域特征、增强缺陷特征的方式,显著提高了缺陷的检测精度。与 Mamba 的全局建模能力相比,Gated CNN Block 更适合捕捉缺陷的局部特征,例如在金属板材表面划痕检测任务中,门控机制能够有效区分细微划痕与正常纹理,减少误检率。
农业领域
在农业遥感和作物表型分析中,Gated CNN Block 的自适应特征提取能力为精准农业提供了有力支持。与 Mamba 的时序建模能力不同,Gated CNN Block 更专注于空间维度上的特征提取,例如在无人机航拍的作物病虫害检测任务中,门控机制能够突出病斑的特征信息,抑制背景植被和土壤的干扰,提高检测准确率。
3. YOLO与Gated CNN Block的结合
Gated CNN 的门控机制通过抑制背景噪声、强化边缘特征,更好地融合不同尺度的特征信息,显著提升 YOLO 对小目标的定位能力,同时减少复杂场景下的误检率。
4.Gated CNN Block代码部分
加权卷积算子WConv 通过密度函数对卷积核位置加权,提升特征提取的空间敏感性_哔哩哔哩_bilibili
YOLO12模型改进方法,快速发论文,总有适合你的改进,还不改进上车_哔哩哔哩_bilibili
代码获取:YOLOv8_improve/YOLOV12.md at master · tgf123/YOLOv8_improve · GitHub
5. Gated CNN Block引入到YOLOv11中
第一: 将下面的核心代码复制到D:\model\yolov11\ultralytics\change_model路径下,如下图所示。
第二:在task.py中导入包
第三:在task.py中的模型配置部分下面代码
第四:将模型配置文件复制到YOLOV11.YAMY文件中
第五:运行代码
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
import torch
if __name__=="__main__":# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型model = YOLO("/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/models/11/yolo11_Gated_CNN_block.yaml")\# .load(r'E:\Part_time_job_orders\YOLO\YOLOv11\yolo11n.pt') # build from YAML and transfer weightsresults = model.train(data="/home/shengtuo/tangfan/YOLO11/ultralytics/cfg/datasets/VOC_my.yaml",epochs=300,imgsz=640,batch=4,# cache = False,# single_cls = False, # 是否是单类别检测# workers = 0,# resume=r'D:/model/yolov8/runs/detect/train/weights/last.pt',amp = True)