165、ATSS 的 topk 与标准差系数消融:k=9/13/20 与 σ 系数 1/1.5/2 的 9 组实验

发布时间:2026/7/10 6:15:22
165、ATSS 的 topk 与标准差系数消融:k=9/13/20 与 σ 系数 1/1.5/2 的 9 组实验 165、ATSS 的 topk 与标准差系数消融:k=9/13/20 与 σ 系数 1/1.5/2 的 9 组实验从一次线上事故说起去年双十一前夜,我负责的检测模型在灰度环境突然召回率暴跌。排查日志发现,ATSS 的正负样本分配器在某个 batch 里把大量目标分配给了背景——因为那个 batch 的候选框标准差异常大,导致自适应阈值直接崩到了 0.99。当时我盯着屏幕骂了句“这破系数”,然后连夜改了 σ 系数从 1.0 到 1.5,召回率瞬间回弹。但第二天又发现 mAP 掉了 0.3 个点——这就是 ATSS 里 topk 和 σ 系数这对“冤家”的真实写照。今天这篇笔记,我直接拿 YOLOv11 的 ATSS 实现开刀,把 k 和 σ 的 9 种组合全部跑一遍消融实验。代码改起来其实就几行,但调参的坑能让你怀疑人生。ATSS 在 YOLOv11 里的实现位置YOLOv11 的 ATSS 分配器藏在ultralytics/utils/loss.py的TaskAlignedAssigner类里。注意,YOLOv11 官方默认用的是 TaskAlignedAssigner,不是纯 ATSS,但核心逻辑一样——通过 topk 选候选,用标准差算自适应阈值。我直接在这个类上改,保留原始接口。先定位关键代码段(别去翻官方文档,直接看源码):