DEIM 从主干到 neck 的所有算子都在空域干活——卷积在空域滑窗、注意力在空域加权但很多结构信息纹理、边缘、周期性在频域里表达得更清晰。针对全程空域视角这个盲区我们做了一批频域处理替换变体双落点backbone 走HG_Stage_X、neck 走lateral_convs_X全部保持原落点参数格式不变、一行切换。1. 现有的空域算子有什么问题不是空域算子错了而是只有空域视角这个事实本身有盲区问题机制原因可观测后果局部 vs 全局割裂卷积感受野是局部的全局信息要叠很多层周期性/长程结构建模慢高频信息被稀释下采样/池化把高频边缘、纹理细节逐步抹掉小目标与纹理细节在深层消失【细分场景】分辨率敏感空域卷积对尺度变化不鲁棒同一目标不同尺度特征差异大信息冗余空域表示里相邻像素高度相关参数量与计算量浪费在冗余上一句话总结空域视角下高频细节是藏在大量冗余像素里的——频域把高频信息单独拎出来让网络可以直接处理细节本身。2. 可以往哪些方向改进把特征切到频域看有四个方向也是我们最终落地的四个分组方向思路代表变体优点代价小波分解小波变换拆多尺度频率子带WTConv、Down_wt、MWPT、PWD多尺度高频显式可逆无损实现复杂傅里叶/FFT频谱调制后反变换FFCM、Fre_MLP、Fourier_Modulation_Attention、FSAS、FSDA、KSFA、PFAE、msfn全局视野天然复数运算频域卷积在频域做卷积/调制FEB、FDConv、CEB融合空域频域优势与 BN 兼容需处理频带学习学习频带重要性/分解Down_wt、CEB、PWD轻量、可解释提升幅度看场景四路共同点backbone 落点保持 HG_Stage 外壳不变neck 落点保持 c→c 同维不变。变体全做让实验挑最优。3. HG 的卷积注意力是如何改进的双落点装配HG_Stage_X/lateral_convs_X均由 train_deim_yaml.py 通用分支自动导入3.1 小波分解组——多尺度频率子带变体核心机制WTConv小波卷积db1 小波分解为 LL/LH/HL/HH 子带LL 递归分解后各尺度卷积再重建详见第 4 节Down_wt小波下采样用小波分解替代大步长下采样保留高频MWPT多级小波包变换更细的频率划分PWD金字塔小波分解3.2 傅里叶/FFT 组——频谱调制变体核心机制FFCM傅里叶频域通道调制Fre_MLP频域 MLP频谱上做逐点/逐通道变换Fourier_Modulation_Attention傅里叶调制注意力FSAS / FSDA频域空间注意力 / 频域尺度解耦注意力KSFA核化频谱特征注意力PFAE金字塔频率注意力增强msfn多尺度频域网络3.3 频域卷积组——频域里做卷积变体核心机制FEB频域增强块FDConv频域解耦卷积CEB通道频带均衡设计逻辑四个分组对应频域的四个本质问题——小波回答如何无损地把频率拆开傅里叶回答如何直接在全频谱上调制频域卷积回答如何让卷积本身具备频域视野频带学习回答哪些频率成分值得单独处理。变体不是堆数量而是把换坐标系看特征这个动作的每个可设计维度都覆盖了一遍WTConv 则是其中机制最完整、最可解释的一个。4.代码和视频讲解视频讲解DEIM超越 YOLO快准双绝DEIM让 DETR 告别慢收敛开启实时检测新纪元_哔哩哔哩_bilibiliDEIM超越 YOLO快准双绝一个视频告诉你DEIM如何搭建backbone_哔哩哔哩_bilibili代码获取YOLOv8_improve/DEIM.md at master · tgf123/YOLOv8_improve · GitHub5.以WTConv小波卷积为例第一: 将下面的核心代码复制到DEIMv2-main\DEIM_YOLO\change_mode_频域处理路径下如下图所示。第二自适应导包与模型搭建第三将模型配置文件复制到DEIM.YAMY文件中第四yaml改进配置文件backbone: - [-1, 1, HGStem, [3, 16, 16]] # 0 stem - [-1, 1, HG_Stage_WTConv, [16, 16, 64, 1, False, False, 3, 3]] # 1 stage1 - [-1, 1, HG_Stage_WTConv, [64, 32, 256, 1, True, False, 3, 3]] # 2 stage2 - [-1, 1, HG_Stage_WTConv, [256, 64, 512, 2, True, True, 5, 3]] # 3 stage3 - [-1, 1, HG_Stage_WTConv, [512, 128, 1024, 1, True, True, 5, 3]] # 4 stage4 head: - [-1, 1, input_proj, [128]] # 5 P5: layer4(1024) - 128 - [3, 1, input_proj, [128]] # 6 P4: layer3( 512) - 128 - [5, 1, TransformerEncoder, [128, 8, 512, 1]] # 7 P5 - [-1, 1, lateral_convs, [128]] # 8 Y5 - [-1, 1, upsample_feat, [2, nearest]] # 9 up2 - [[-1, 6], 1, concat, [1]] # 10 FPN 融合 - 256ch - [-1, 1, fpn_blocks, [256, 128, 256, 21, 2]] # 11 F4 - [-1, 1, downsample_feat, [128, 128, 3, 2]] # 12 downF4 - [[-1, 8], 1, concat, [1]] # 13 PAN 融合 - 256ch - [-1, 1, pan_blocks, [256, 128, 256, 21, 2]] # 14 F5 - [[11, -1], 1, DEIMDecoder, [nc, 128, 3, 300, 32, 4, [6, 6]]] # 15 Detect(F4, F5)backbone: - [-1, 1, HGStem, [3, 16, 16]] # 0 stem - [-1, 1, HG_Stage, [16, 16, 64, 1, False, False, 3, 3]] # 1 stage1 - [-1, 1, HG_Stage, [64, 32, 256, 1, True, False, 3, 3]] # 2 stage2 - [-1, 1, HG_Stage, [256, 64, 512, 2, True, True, 5, 3]] # 3 stage3 - [-1, 1, HG_Stage, [512, 128, 1024, 1, True, True, 5, 3]] # 4 stage4 head: - [-1, 1, input_proj, [128]] # 5 P5 - [3, 1, input_proj, [128]] # 6 P4 - [5, 1, TransformerEncoder, [128, 8, 512, 1]] # 7 P5 - [-1, 1, lateral_convs_WTConv, [128]] # 8 Y5 (频域调制c-c 同维) - [-1, 1, upsample_feat, [2, nearest]] # 9 up2 - [[-1, 6], 1, concat, [1]] # 10 FPN 融合 - 256ch - [-1, 1, fpn_blocks, [256, 128, 256, 21, 2]] # 11 F4 - [-1, 1, downsample_feat, [128, 128, 3, 2]] # 12 downF4 - [[-1, 8], 1, concat, [1]] # 13 PAN 融合 - 256ch - [-1, 1, pan_blocks, [256, 128, 256, 21, 2]] # 14 F5 - [[11, -1], 1, DEIMDecoder, [nc, 128, 3, 300, 32, 4, [6, 6]]] # 15 Detect(F4, F5)第五模型跑出的结果
