126、DyHead 动态检测头替换 YOLOv11 Head:Scale+Space+Task 三维注意力的实现
📅 2026/7/6 4:11:28
👁️ 阅读次数
📝 编程学习
126、DyHead 动态检测头替换 YOLOv11 Head:Scale+Space+Task 三维注意力的实现
从一次诡异的mAP抖动说起
去年年底调YOLOv11的C2f模块,发现一个奇怪现象:换了几种注意力机制,mAP@0.5:0.95始终在0.523附近震荡,死活上不去。后来扒开特征图一看,深层小目标特征被背景噪声淹没了——问题不在Backbone,在Head。YOLOv11的Detect层太“死板”了,对每个尺度、每个空间位置、每个任务分支都用同一套权重,这在小目标密集场景下简直是灾难。
当时就想,要是能让Head自己学会“该看哪里、该关注什么尺度、该为分类还是回归服务”,就好了。DyHead就是干这个的——它把Scale、Space、Task三个维度的注意力揉进一个检测头里,让特征图自己学会“动态调整”。今天就把这个替换方案掰开揉碎讲清楚,代码直接能跑,踩过的坑也一并标出来。
DyHead的核心:三维注意力到底在干什么
先别急着看代码,理解这个三维注意力机制比调参重要十倍。YOLOv11的原始Head结构很简单:输入特征图经过几个卷积层,分别输出分类和回归结果。问题在于,不同尺度的特征图(比如P3、P4、P5)对检测任务的贡献是不一样的——P3负责小目标,P5负责大目标,但原始Head对所有尺度一视同仁。
DyHead的三维注意力是这样拆解的:
- Scale维度:让网络学会“哪个尺度的特征更重要”。比如小
编程学习
技术分享
实战经验