三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

到底什么是 Hard-Negative?

到底什么是 Hard-Negative?

. 到底什么是 Hard-Negative?

  • 先拆解“Negative(负例)”:在目标检测中,负例就是“背景”。比如一张切片里没有任何车、人、飞机,只有地面、屋顶、树木,这就该被模型判断为“没有目标”。

  • 再拆解“Hard(难的)”:如果这张切片是一面纯白墙壁,模型一眼就知道是背景,这叫Easy Negative(简单负例),对训练帮助不大。但如果这张切片是密集的树冠阴影圆形屋顶带有纹理的碎石路面——它们的纹理、边缘或颜色与你要检测的目标(比如坦克、车辆)有相似之处,导致模型在推理时输出了0.8的高置信度(以为有目标),但实际GT(标注框)显示这里啥也没有。

核心定义被模型误判为正样本(False Positive,误报)且置信度较高的负样本,就是 Hard-Negative。


2. 与之强相关的核心概念(横向对比)

为了理清头绪,我把它们按“样本质量”和“训练策略”分成两类:

(1)按“难度”划分的样本梯队

  • Positive(正例):含有GT目标(真实框)的样本,模型应该预测为“有”。

  • Easy-Negative(简单负例):与目标毫无相似之处的纯背景,模型轻易就能正确识别为“无”。(数量极多,但训练价值低)

  • Hard-Negative(难负例)模型“看走眼”的背景。特征表达与正例高度重叠,是导致误报(FP)的罪魁祸首。

  • Hard-Positive(难正例):虽然含有GT目标,但目标极度模糊、被遮挡、尺寸极小或光照极暗,导致模型很难认出来(漏检,即False Negative)。与之对应的是Easy-Positive(清晰的大目标)。

(2)按“挖掘和处理策略”划分的概念(你最需要关注的操作)

  • Hard Negative Mining(难例挖掘,缩写HNM):这是一种主动训练策略。即在每一轮训练中,专门筛选出那些被模型分错的Hard-Negative,把它们强行加回训练集,让模型“知耻而后勇”地重点学习这批困难样本。

  • OHEM(在线难例挖掘):HNM的进化版。在训练过程中,不依赖离线数据筛选,而是在当前的batch(批次)内自动计算所有样本的损失(Loss),只挑选损失最大的那批Hard-Negative进行反向传播。“按规则并进训练集”,本质上就是离线版的HNM

  • Focal Loss(焦点损失):这是一种损失函数,用来替代传统的交叉熵损失。它的设计初衷就是为了解决Easy-Negative和Hard-Negative的数量极度不平衡(正负样本悬殊)。它会自动降低Easy-Negative的权重,让模型把注意力聚焦在Hard-Negative上——你不必手动挖掘,算法在计算损失时自动帮你做了。

3. 结合SAHI 场景,理清逻辑

问题:

  • “真空白图被大量误报”,如果误报置信度很高,那就是典型的Hard-Negative(原本连GT都没有,模型却以为有)。

  • “有GT但SAHI报得过多”中的空白子切片,这些切片虽然来自有目标的母图,但切片本身不含GT,且纹理复杂导致误报,它们也是 Hard-Negative

所以,“反切成负切片再并进训练集”这一动作,在学术上就叫做基于位置规则(IoU=0筛选)的离线 Hard Negative Mining 策略。你做得很标准,这在工业界往往比单纯改损失函数见效更快。

← 返回列表