096、C3k2 内嵌 SE 注意力:在 Split 之后 Bottleneck 之前插入的代码与效果
096、C3k2 内嵌 SE 注意力:在 Split 之后 Bottleneck 之前插入的代码与效果从一次诡异的 mAP 震荡说起上个月调一个工业缺陷检测模型,YOLOv11 的 C3k2 模块在训练到 80 轮左右时,mAP 突然从 0.78 掉到 0.72,然后又慢慢爬回去。我盯着 loss 曲线看了半天,发现是特征图在 Split 之后、Bottleneck 之前的信息流出现了“注意力漂移”——某些通道的响应被背景噪声带偏了。当时第一反应是加个 SE 模块,但直接塞在 Bottleneck 后面效果很差,反而让梯度爆炸了两次。后来试了试在 Split 之后、Bottleneck 之前插入 SE,mAP 直接稳在 0.81 以上,而且收敛速度明显加快。这个位置的选择不是拍脑袋的。C3k2 的 Split 操作会把输入特征图切成两半,一半直接走 shortcut,另一半经过 Bottleneck 序列。如果 SE 放在 Bottleneck 后面,它只能看到经过变换后的特征,对原始信息的校准能力有限。而放在 Split 之后、Bottleneck 之前,SE 能同时“看到”两条路径的输入,相当于给后续的 Bottleneck 提前做了一次通道级的重要性排序。代码实现:别把 SE 塞错地方先看原始的 C3k2 结构(简化版,去掉了一些无关细节):