YOLOv11 改进 - C2PSA C2PSA融合DML动态混合层(Dynamic Mixing Layer)轻量级设计优化局部细节捕获与通道适应性,提升超分辨率重建质量
前言本文介绍了动态混合层DML并将相关改进模块集成进YOLOv11。DML是SRConvNet核心组件用于解决轻量级图像超分辨率任务中特征捕捉和通道适应性问题。它通过通道扩展拆分、多尺度动态深度卷积、通道洗牌与融合等步骤实现多尺度局部信息聚合和通道自适应增强。DML的动态卷积具有内容感知适配和分组共享效率优势多尺度设计能覆盖全尺度图像细节。我们将DML相关模块集成到YOLOv11注册并配置yaml文件。实验表明改进后的YOLOv11有较好的效果。文章目录 YOLOv11改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLOv11改进专栏介绍最近视觉变换器Vision Transformers在多种任务中展现了相较于卷积神经网络ConvNet的优势包括单图像超分辨率SISR。变换器的成功可归因于其不可或缺的多头自注意力MHSA机制该机制能够用较少的参数有效地建模全局连接性。然而MHSA 的二次复杂度通常会导致巨大的计算成本和内存占用限制了它们在移动设备上的高效部署相较于广泛使用的轻量级 ConvNet。在本研究中我们深入探索了基于 ConvNet 和基于变换器的超分辨率SR模型之间的关键区别从而提出了 SRConvNet它吸收了这两者的优点以实现轻量级的 SISR。我们的 SRConvNet 通过两个主要设计来实现1傅里叶调制注意力FMA一种类似于 MHSA 的但更加计算和参数效率高的运算符它执行区域频率-空间调制与聚合以确保长短期依赖关系的建模2动态混合层DML利用混合尺度的深度可分离动态卷积通过通道分割和重排来探索多尺度上下文信息从而提升模型的局部性和适应性。结合 FMA 和 DFN我们可以构建一个纯变换器风格的 ConvNet在效率与准确性之间权衡来与最优秀的轻量级 SISR 模型竞争。大量实验表明SRConvNet 在计算和参数方面能够比最近的最先进的轻量级 SISR 方法实现更高效的超分辨率重建同时保持相当的性能。代码可在 https://github.com/lifengcs/SRConvNet 获取。摘要文章链接论文地址论文地址代码地址代码地址基本原理动态混合层Dynamic Mixing Layer, DML是SRConvNet的核心组件之一专为解决轻量级图像超分辨率SISR任务中局部多尺度特征捕捉与通道适应性增强两大痛点设计旨在替代传统Vision TransformerViT中局限于线性变换的前馈网络FFN同时融合卷积神经网络ConvNet的局部建模优势与动态权重的灵活性。一、设计背景与核心目标1. 现有方法的局限传统ViT的FFN仅通过“线性层激活函数”实现特征变换无法有效捕捉图像的局部空间依赖后续改进方法如卷积FFN、混合尺度卷积FFN虽引入卷积增强局部性但存在明显缺陷 -单尺度卷积仅用固定尺寸卷积核如3×3难以覆盖不同尺度的图像细节如边缘、纹理 -静态权重卷积核权重训练后固定无法根据输入特征的通道差异自适应调整导致通道间适应性不足。2. DML的核心目标针对上述问题DML的设计聚焦两大核心目标 1.多尺度局部信息聚合通过多尺寸动态卷积同时捕捉小尺度精细纹理与大尺度结构特征 2.通道自适应增强生成动态卷积权重根据不同通道的特征分布调整核参数提升模型对复杂场景的适配能力。二、整体架构与核心流程DML的架构遵循“通道扩展-拆分-多尺度动态卷积-通道混合-融合”的逻辑具体流程如图2c文档附图所示输入为FMA输出的特征$\bar{X} \in \mathbb{R}^{H×W×C}$$H,W$为空间尺寸$C$为通道数输出为融合多尺度局部特征的$\hat{X} \in \mathbb{R}^{H×W×C}$关键步骤如下1. 通道扩展与拆分通道扩展输入特征$\bar{X}$先经过层归一化Layer Norm消除通道间分布差异再通过1×1卷积将通道数从$C$扩展至$2C$为后续多分支学习提供基础通道拆分将扩展后的$2C$通道特征拆分为两个独立分支$\tilde{X}_1 \in \mathbb{R}^{H×W×C}$和$\tilde{X}_2 \in \mathbb{R}^{H×W×C}$每个分支负责单一尺度的局部特征提取避免不同尺度特征相互干扰。2. 多尺度动态深度卷积核心步骤两个分支分别采用5×5和7×7动态深度卷积Dynamic Depthwise Convolution通过“全局特征感知-动态权重生成-局部特征聚合”实现自适应多尺度学习以$\tilde{X}_1$5×5卷积分支为例1动态权重生成机制全局特征压缩对$\tilde{X}_1$执行全局平均池化GAP将$H×W$的空间维度压缩为1×1得到通道级特征向量维度$C$捕捉全局通道统计信息线性投影生成权重通过两层线性投影转换特征向量生成动态卷积核 1. 第一层线性层带GELU激活将通道数从$C$降至$C/G$$G$为分组数减少计算量 2. 第二层线性层带Sigmoid激活将维度恢复并重塑为动态滤波器$w \in \mathbb{R}^{H×W×G×K^2}$$K$为卷积核大小如5或7$K^2$为核参数数量。 文档中明确$K5$和$K7$分别对应小尺度细节与大尺度结构的捕捉。2动态卷积计算动态卷积核$w$与分支特征$\tilde{X}1$按“分组-局部窗口”方式进行元素乘累加公式如下 $$\hat{X}_1\sum_1(iu, jv, G)$$ 其中 - $\Delta\lfloor K/2 \rfloor$如$K5$时$\Delta2$表示卷积窗口的半宽 - $w(i,j,u,v)$为位置$(i,j)$处卷积窗口内$(u,v)$坐标的动态权重 - $\otimes$为元素乘权重与对应位置的特征相乘后累加得到聚合后的局部特征$\hat{X}_1$5×5分支和$\hat{X}_2$7×7分支。}^{\Delta} \sum_{v-\Delta}^{\Delta} w(i, j, u, v) \otimes \tilde{X3. 通道洗牌与特征融合通道洗牌Channel Shuffling参考ShuffleNet V2的设计将$\hat{X}_1$和$\hat{X}_2$的通道随机重组打破分支间的通道独立性实现跨尺度特征的高效交互避免通道冗余特征融合通过1×1卷积将洗牌后的特征通道数从$2C$压缩回$C$整合多尺度信息输出最终特征$\hat{X}$。三、关键机制的优势1. 动态深度卷积超越静态卷积的适应性与传统静态卷积如MixCFN的固定核相比DML的动态卷积具有两大优势 -内容感知适配动态权重由输入特征的全局统计信息生成可根据图像内容如平滑区域、纹理区域调整核参数——例如纹理密集区域的权重更关注细节保留平滑区域的权重更侧重噪声抑制 -分组共享效率动态权重按通道分组$G$组共享每个组内的$(C/G)$个通道使用同一组核参数在保证适应性的同时将计算量降低至静态深度卷积的$1/G$符合轻量级设计目标。2. 多尺度设计覆盖全尺度图像细节通过5×5和7×7两个分支的互补 - 5×5卷积捕捉小尺度细节如文本边缘、纹理颗粒 - 7×7卷积捕捉大尺度结构如物体轮廓、场景布局 - 通道洗牌后两种尺度特征深度融合避免单尺度卷积“顾此失彼”的问题尤其适合SISR中“低分辨率图像细节恢复”的核心需求。3. 通道拆分与洗牌高效特征交互拆分优势将特征拆分为两个分支使每个分支专注于单一尺度学习减少不同尺度特征的干扰提升学习效率洗牌优势打破分支间的通道隔离让5×5分支的细节特征与7×7分支的结构特征在通道维度充分混合避免“多分支但特征割裂”的问题。核心代码class MixFFN(nn.Module): def __init__(self, dim, num_kernels16): super().__init__() self.proj_in nn.Conv2d(dim, dim * 2, 1) self.conv1 DyConv(dim, kernel_size5, groupsdim, num_kernelsnum_kernels) self.conv2 DyConv(dim, kernel_size7, groupsdim, num_kernelsnum_kernels) self.proj_out nn.Conv2d(dim * 2, dim, 1) self.norm LayerNorm(dim, eps1e-6, data_formatchannels_first) self.act nn.GELU() def forward(self, x): shortcut x x self.norm(x) x self.act(self.proj_in(x)) x1, x2 torch.chunk(x, 2, dim1) x1 self.act(self.conv1(x1)).unsqueeze(dim2) x2 self.act(self.conv2(x2)).unsqueeze(dim2) x torch.cat([x1, x2], dim2) x rearrange(x, b c g h w - b (c g) h w) x self.proj_out(x) x x shortcut return x实验脚本import warnings warnings.filterwarnings(ignore) from ultralytics import YOLO # if __name__ __main__: # 修改为自己的配置文件地址 model YOLO(./ultralytics/cfg/models/11/yolov11-C2PSA_DML.yaml) # 修改为自己的数据集地址 model.train(data./ultralytics/cfg/datasets/coco8.yaml, cacheFalse, imgsz640, epochs10, single_clsFalse, # 是否是单类别检测 batch8, close_mosaic10, workers0, optimizerSGD, ampTrue, projectruns/train, nameC2PSA_DML, )结果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2580184.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!