YOLO11改进-模块-引入通道混合器 CGLU 提高复杂场景中的检测精度

       在 ViT 时代来临前,Squeeze-and-Excitation(SE)机制率先将通道注意力引入计算机视觉领域,不过它存在着让所有特征图 token 共享相同门控信号、通道注意力缺乏灵活性及过于粗粒度等弊端。进入 ViT 时代,自注意力等全局 token 混合器改变了信息聚合格局,使得 SE 机制的不足愈发明显,而且 ViT 结构自身原本就缺少通道注意力。与此同时,研究发现 3×3 深度卷积可作为条件位置编码。鉴于此背景,作者深入思考通道混合器设计,进而提出 Convolutional GLU。它通过在 GLU 门控分支激活函数前添加 3×3 深度卷积,有效解决了 SE 机制的缺陷,满足了 ViT 模型对位置信息的需求,并且在计算复杂度方面也展现出明显优势。

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

1. CGLU结构介绍          

        原理:Gated Linear Unit(GLU)由两个线性投影通过元素相乘构成,其中一个投影由门控函数激活。与 SE 机制不同,GLU 每个 token 的门控信号源于 token 自身,且其门控分支的感受野并不比值分支大。在此基础上,作者发现于 GLU 门控分支的激活函数前添加最小形式的 3×3 深度卷积,能使结构契合门控通道注意力的设计理念,转化为基于最近邻特征的门控通道注意力机制。在 Convolutional GLU 中,每个 token 依据其最近的细粒度特征拥有独特的门控信号,克服了 SE 机制中全局平均池化过于粗粒度的缺点,满足了部分无位置编码设计的 ViT 模型对深度卷积提供位置信息的需求,同时其值分支保持与 MLP 和 GLU 相同的深度,利于反向传播。

       结构: CGLU 主要由输入的线性变换、深度卷积、激活函数以及元素相乘等操作构成。首先,输入数据会经过两个不同的线性变换分支,一个分支产生的结果(记为分支一结果)会直接用于后续计算,另一个分支产生的结果(记为分支二结果)会先进行 3×3 深度卷积操作,然后通过 GELU 激活函数进行激活。之后,激活后的分支二结果与分支一结果进行元素相乘,最终得到 Convolutional GLU 的输出。这种结构设计使得它能够利用深度卷积提取的局部特征信息来调整门控信号,从而实现基于最近邻特征的门控通道注意力机制,有效提升模型性能。

2. YOLOv11与通道混合器 CGLU的结合

       在yolo目标检测模型中,为了增强backbone的通道融合,本文将其与C2PSA相结合提升YOLOv11模型的精度。

3. 通道混合器 CGLU代码部分

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

视频讲解:YOLOv11模型改进讲解,教您如何修改YOLOv11_哔哩哔哩_bilibili

YOLOv11模型改进讲解,教您如何根据自己的数据集选择最优的模块提升精度_哔哩哔哩_bilibili

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

 4. 将高效多尺度注意力EMA引入到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_CGLU.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
                          )
### CGLU编程库或框架使用指南 #### 定义与背景 CGLU(Convolutional Gated Linear Unit),即卷积门控线性单元,是一种用于增强神经网络局部建模能力的技术。通过引入通道级别的注意力机制,使得每个token能够依据其临近的图像特征获取到相应的注意权重,从而提升模型的表现力和稳定性[^2]。 #### 实现方式 为了实现这一功能,在实际编码过程中通常会涉及到以下几个方面: - **输入数据准备** 需要准备好待处理的数据集,并对其进行预处理操作,比如调整大小、归一化等。 - **构建基础层结构** 利用现有的深度学习框架如PyTorch或者TensorFlow来搭建基本的CNN架构作为底层支持。 - **集成CGLU模块** 将自定义设计好的CGLU组件嵌入至上述建立的基础之上,形成完整的网络拓扑图。 下面给出一段简单的Python代码片段展示如何在一个假设性的项目里加入CGLU特性: ```python import torch.nn as nn class ConvGLU(nn.Module): def __init__(self, channels_in, channels_out): super(ConvGLU, self).__init__() # Define convolution layers with GLU activation function self.conv = nn.Conv2d(channels_in, channels_out * 2, kernel_size=3, padding=1) def forward(self, x): conv_result = self.conv(x) n_channels = conv_result.size(1) // 2 # Split the output into two parts and apply sigmoid to one part gate = torch.sigmoid(conv_result[:, :n_channels]) content = conv_result[:, n_channels:] return gate * content ``` 此段代码展示了怎样创建一个继承于`nn.Module`类的新类`ConvGLU`,该类内部包含了两个主要部分——卷积运算以及随后应用的GLU激活函数。当调用这个对象时,将会执行前向传播过程中的逻辑计算并返回最终的结果。 #### 应用场景举例 除了被应用于TransNeXt这样的先进视觉骨干网之外,CGLU还可以广泛适用于其他计算机视觉任务当中,例如但不限于物体识别、姿态估计等领域内。由于其独特的性质可以有效地捕捉空间位置关系及其变化趋势,因此对于那些依赖精细纹理分析的任务来说尤为有用。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值