Hard Negative Mining
了解困难负样本挖掘如何通过识别容易混淆的负样本并改进 YOLO 模型训练,减少计算机视觉中的误报。
困难负样本挖掘是一种训练数据策略,用于识别模型认为异常可信的负样本,并在学习过程中给予它们更多关注。负样本不属于目标类别,而困难负样本与正样本足够相似,可能产生高分、错误检测或邻近的 嵌入。困难负样本挖掘不再反复向模型展示容易识别的背景样本,而是集中处理这些容易混淆的案例,从而能够细化决策边界并减少误报。
困难负样本挖掘的工作原理#
这一过程通常从一个使用具有代表性的训练数据训练的基线模型开始。随后,模型会评估更大的候选池,例如未标注的生产图像、仅包含负样本的场景,或每个训练批次中的样本。尽管候选样本是负样本,但如果获得了较高的正类分数,就会被选中进行审核并用于后续训练。
什么样的样本算作“困难”取决于具体任务:
- 在目标检测中,当检测器将背景区域误判为目标对象时,该背景区域就是困难样本。
- 在分类中,它是一个错误类别样本,却被模型以高置信度分配为目标类别。
- 在检索或度量学习中,它是一个无关项,却在嵌入空间中被排在查询附近。Google 关于推荐模型负采样的指南将困难负样本描述为得分较高且会显著影响梯度的负项。
- 在三元组学习中,与匹配的正样本相比,负样本距离锚点过近。PyTorch TripletMarginLoss 文档解释了用于学习相对相似度的锚点-正样本-负样本结构。
挖掘可以通过定期在大型数据集上运行模型以离线进行,也可以通过从当前小批次中选择困难负样本以在线进行。Keras 困难负样本挖掘层提供了一个根据候选 logits 进行逐查询选择的示例。
困难负样本为何重要#
大多数负样本都很容易识别:空旷的天空不太可能让叉车检测器产生混淆。当模型能够正确分类这类样本后,它们提供的有效学习信号就很少了。困难负样本能够暴露模型误解的具体视觉或语义特征。
当误报会降低精确率时,它们尤其有价值。精确率-召回率分析有助于确定重新训练是否确实减少了误报,同时没有导致召回率不可接受地下降,scikit-learn 精确率-召回率指南对此进行了说明。
困难负样本挖掘与相关技术有所不同:
- 负采样从所有负样本中选择一个可管理的子集;困难负样本挖掘则优先选择最容易造成混淆的样本。
- **主动学习**通常选择不确定的样本供人工标注,其中也包括潜在的正样本。困难负样本挖掘专门针对已确认的、会给模型带来挑战的负样本。
- **焦点损失**改变损失函数内部对样本的加权方式,而挖掘改变的是选择或强调哪些样本。
- 类别重平衡用于处理类别频率不均衡问题。Google 的类别不平衡数据集指南介绍了下采样和加权,但出现频率较高的负样本不一定是困难负样本。
- **数据增强**会创建现有样本的变体,但无法可靠地引入未知的生产环境故障模式。
实际应用#
**仓库安全检测:**假设叉车检测器反复将托盘搬运车、货架反光和剪式升降机识别为叉车。这些误报可能触发不必要的警报并降低操作员的信任度。工程师可以将这些场景收集为不含叉车标注的负样本图像,将其加入数据集,然后重新训练检测器,使其能够区分目标与相似设备。
**视觉商品搜索:**客户搜索特定的黑色跑鞋,但检索系统却将其他产品线中外观相似的鞋子排得过高。这些不匹配的商品就成为困难负样本。使用这些样本进行训练,可以促使嵌入模型保留鞋底形状、徽标位置和材质等细微差异。Keras 孪生网络示例展示了锚点、正样本和负样本图像如何支持相似度学习。
实用的挖掘工作流#
可靠的工作流是迭代式的:
- 在具有代表性的验证数据和生产数据上运行预测。
- 使用 Ultralytics 验证模式和混淆矩阵检查高置信度误报和类别混淆模式。
- 确认每个候选样本确实是负样本;错误的标注可能会教会模型抑制真实对象。
- 查找相关样本,移除重复项,并保留多样化的背景、视角和环境条件。
- 重新训练,然后使用计算机视觉模型测试工作流,比较完整测试集和专用困难负样本子集上的性能。
Ultralytics Explorer 相似度搜索可以帮助找出与已知误报相似的图像:
from ultralytics import Explorer
# Build an embedding index for the example dataset
explorer = Explorer(data="coco128.yaml", model="yolo26n.pt")
explorer.create_embeddings_table()
# Retrieve visually similar candidates for human review
candidates = explorer.get_similar(
img="https://ultralytics.com/images/bus.jpg",
limit=12,
)
print(candidates.head())仅凭相似度无法证明候选样本是困难负样本;审核人员必须核实其真实标签。团队可以使用 Ultralytics Platform来整理候选图像、为其添加标注或修正标注、训练更新后的模型并监控部署。
避免只选择绝对最困难的样本。其中一些样本可能存在错误标注、含义模糊,或属于会使训练不稳定的极端离群值。将容易、难度中等和困难的负样本进行均衡混合,通常能够在保持广泛覆盖的同时,教会模型当前决策边界在哪些地方失效。









