检测模型在整体 mAP 上很漂亮,卡车和公交车却几乎检不出来——这是目标检测里最经典的长尾困境:稀有类被多数类淹没。直接"多标点数据"当然对,但成本最高。这篇按性价比排一套完整方案,从类别定义到训练策略,附每步的成本收益评估。
第一步永远是重审类别定义
动手改训练之前先问一个问题:这些类别真的需要分开吗?如果下游任务只关心"是不是大型车辆",卡车和公交车合并成一个类,问题直接消失——这是成本最低、见效最快的解法。合并的前提是与业务确认分类需求真实存在,而不是数据集历史遗留的划分。
即便不能合并,也可以把稀有类的子属性(车型、颜色)从类别体系挪到属性预测头里,让检测头只负担主类别。
数据层面:三个递进手段
Repeat Factor Sampling(RFS) 是首选:按类别频率计算重复采样因子,让稀有类在训练中被更频繁地抽到。MMDetection 原生支持,配置改动几行,通常带来几个点的稀有类 AP 提升。RFS 不够时上 ClassAwareSampler,强制每个 batch 至少含 N 个稀有类样本,防止某些 batch 完全无稀有类导致梯度缺失。
Copy-Paste 增强 是性价比最高的一条:把稀有类实例(带框或掩码)抠出来贴到其他图的背景上,成倍扩充"位置+背景+尺度"的组合。没有分割掩码时 bbox 抠图粘贴也有效。
补真实数据的三个来源:KITTI、Cityscapes、UA-DETRAC 等公开集里有大量车辆类;从自有视频抽帧(稀有类在视频里连续出现,抽帧成本低);用当前模型定位误检漏检区域做主动学习式定向补采。3D 渲染合成数据留作最后手段——每类只有几十张的极端场景才值得,且要验证域差距。
训练层面:损失函数的真实分工
一个普遍误区是把 Focal Loss 当长尾解药。它解决的是前景/背景不平衡和难易样本问题,对类间不平衡作用有限——稀有类漏检是"被轿车抢走"而非"被背景淹没"时,调 focal 的 γ 基本无效。真正的类间武器是 Seesaw Loss 和 Equalization Loss:前者动态抑制多数类对稀有类的梯度压制,后者放宽多数类对稀有类梯度的惩罚。稀有类比多数类少 100 倍以上时值得一试。
两阶段微调是最实用的一招:第一阶段全量数据正常训练收敛;第二阶段冻结骨干和颈部,只在均衡采样子集上微调检测头。稀有类的梯度在长训练中被多数类"洗掉"的风险由此规避。
评估必须分开看
只看 mAP 是长尾问题的根源。三件事必须做:按类报告 AP,稀有类的 recall 单独盯;看混淆矩阵确认稀有类是不是被系统性误判成多数类(长尾偏差的典型指纹);有硬指标时把"卡车漏检率 < X%"写进训练目标,而不是事后补救。
执行顺序清单
按性价比排序:① 重审类别定义(成本极低,可能直接解决)→ ② RFS(配置级改动)→ ③ Copy-Paste 增强 → ④ 定向补真实数据 → ⑤ Seesaw/两阶段微调 → ⑥ 合成数据。前两步解决一半以上的实际案例,多数团队的问题不是方案不够先进,而是跳过了便宜的直接上了贵的。

评论0