YOLOv11 改进 - C2PSA C2PSA融合EDFFN高效判别频域前馈网络(CVPR 2025):频域筛选机制增强细节感知,优化复杂场景目标检测
前言本文介绍了高效判别频域前馈网络EDFFN并将其集成到YOLOv11中。EDFFN是为解决图像复原中局部信息表征不足和频域计算成本过高问题而提出的。传统方法存在SSM全局信息偏向性和频域FFN高计算成本的问题EDFFN通过将频域操作位置从FFN中间层迁移到末端降低了计算成本并保留了性能。其结构包括特征投影与激活、降维与频域转换、判别性频域筛选、逆变换与特征融合。我们将EDFFN集成到YOLOv11注册并配置yaml文件实验表明改进后的模型有良好表现。文章目录 YOLOv11改进大全卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总专栏链接: YOLOv11改进专栏介绍摘要卷积神经网络CNN和视觉变换器Vision TransformersViT在图像复原任务中都取得了优异的性能。虽然 ViT 在有效捕捉长距离依赖关系和输入特征方面通常优于 CNN但其计算复杂度会随着图像分辨率的提高而呈二次增长这一限制阻碍了其在高分辨率图像复原中的实际应用。本文提出了一种简单而有效的视觉状态空间模型EVSSM用于图像去模糊充分利用了状态空间模型SSM在处理视觉数据方面的优势。与现有方法采用多个固定方向扫描来提取特征而导致计算成本显著增加不同我们设计了一种高效的视觉扫描模块在每个基于 SSM 的子模块前引入多种几何变换从而在保持高效率的同时捕捉有用的非局部信息。此外为了更有效地提取和表示局部信息我们还提出了一种基于频域的高效判别前馈网络EDFFN能够准确估计图像中对清晰图像复原有用的频率信息。大量实验结果表明所提出的 EVSSM 在多个基准数据集和真实图像上均优于现有最先进方法展现出良好的性能表现。文章链接论文地址论文地址代码地址代码地址基本原理Efficient Discriminative Frequency Domain-based Feedforward Network高效判别频域前馈网络是该研究为解决图像复原中“局部信息表征不足”与“频域计算成本过高”问题而提出的核心组件之一。一、EDFFN的设计背景EDFFN的提出主要针对两类关键问题 1.SSM的全局信息偏向性论文核心框架基于状态空间模型SSM如Mamba其优势是高效建模长程依赖全局信息但天然缺乏对局部细节如纹理、边缘的精准捕捉——而局部信息对图像去模糊、去雨等复原任务的“清晰度提升”至关重要。 2.传统频域FFN的高计算成本此前的频域前馈网络如FFTformer中的DFFN虽能通过频域筛选保留有用信息但存在设计缺陷DFFN将频域量化矩阵学习放在FFN的中间层而该层特征通道数通常是输入特征的3~6倍如DFFN中间层通道数为输入的3倍。对大通道特征执行快速傅里叶变换FFT会产生极高的计算开销限制模型在高分辨率图像上的实用性。二、EDFFN的核心改进降低成本保留性能EDFFN的核心创新是调整频域操作的位置从“FFN中间层”迁移到“FFN末端”具体逻辑如下 | 对比维度 | 传统DFFNFFTformer | 改进后EDFFN本文 | | ------------ | -------------------------- | -------------------------- | | 频域操作位置 | FFN中间层大通道特征 | FFN末端通道数输入特征 | | 通道数规模 | 输入特征的3~6倍 | 与输入特征一致如48通道 | | FFT计算成本 | 高大通道特征耗时 | 低小通道特征高效 | | 量化矩阵学习 | 基于冗余通道信息利用率低 | 基于紧凑通道聚焦关键信息 |这一调整的本质是利用FFN“先升维增强表征、后降维压缩信息”的特性在降维后的紧凑特征上执行频域筛选——既避免了大通道FFT的冗余计算又能精准捕捉对复原有用的频域信息如高频细节、低频结构。三、EDFFN的结构与工作流程结合论文图1(d)及文字描述EDFFN的具体结构的流程如下核心是“线性变换→激活→频域筛选→输出”的闭环 1.特征投影与激活输入特征来自EVS块的全局信息特征先通过1×1点卷积PConv完成通道维度调整升维增强表征再经过GELU激活函数引入非线性增强模型对复杂模式的拟合能力。 2.降维与频域转换通过另一层1×1点卷积将特征通道数降维至与输入一致随后对降维后的特征执行离散傅里叶变换FFT将空间域信息转换为频域信息分离高频细节与低频结构。 3.判别性频域筛选引入一个可学习的量化矩阵W通过“元素-wise乘法”对频域特征进行筛选——矩阵W会自适应学习“哪些频域信息如高频边缘、低频轮廓对恢复清晰图像更重要”抑制噪声或冗余频域成分。 4.逆变换与特征融合对筛选后的频域特征执行逆傅里叶变换IFFT将其转换回空间域最后通过归一化Norm和残差连接与EDFFN的输入特征元素相加输出融合“局部频域细节”与“全局空间信息”的特征传递给下一层模块。核心代码class EDFFN(nn.Module): def __init__(self, dim, ffn_expansion_factor2, biasFalse): super(EDFFN, self).__init__() hidden_features int(dim * ffn_expansion_factor) self.patch_size 8 self.dim dim self.project_in nn.Conv2d(dim, hidden_features * 2, kernel_size1, biasbias) self.dwconv nn.Conv2d(hidden_features * 2, hidden_features * 2, kernel_size3, stride1, padding1, groupshidden_features * 2, biasbias) self.fft nn.Parameter(torch.ones((dim, 1, 1, self.patch_size, self.patch_size // 2 1))) self.project_out nn.Conv2d(hidden_features, dim, kernel_size1, biasbias) def forward(self, x): x_dtype x.dtype x self.project_in(x) x1, x2 self.dwconv(x).chunk(2, dim1) x F.gelu(x1) * x2 x self.project_out(x) b, c, h, w x.shape h_n (8 - h % 8) % 8 w_n (8 - w % 8) % 8 x torch.nn.functional.pad(x, (0, w_n, 0, h_n), modereflect) x_patch rearrange(x, b c (h patch1) (w patch2) - b c h w patch1 patch2, patch1self.patch_size, patch2self.patch_size) x_patch_fft torch.fft.rfft2(x_patch.float()) x_patch_fft x_patch_fft * self.fft x_patch torch.fft.irfft2(x_patch_fft, s(self.patch_size, self.patch_size)) x rearrange(x_patch, b c h w patch1 patch2 - b c (h patch1) (w patch2), patch1self.patch_size, patch2self.patch_size) xx[:,:,:h,:w] return x.to(x_dtype)实验脚本import warnings warnings.filterwarnings(ignore) from ultralytics import YOLO # if __name__ __main__: # 修改为自己的配置文件地址 model YOLO(./ultralytics/cfg/models/11/yolov11-C2PSA_EDFFN.yaml) # 修改为自己的数据集地址 model.train(data./ultralytics/cfg/datasets/coco8.yaml, cacheFalse, imgsz640, epochs10, single_clsFalse, # 是否是单类别检测 batch8, close_mosaic10, workers0, optimizerSGD, ampTrue, projectruns/train, nameC2PSA_EDFFN, )结果