当前位置: 首页 > 工具软件 > mining > 使用案例 >

Hard Negtive Mining

颛孙镜
2023-12-01

先要明确:
OHEM是Hard Negtive Mining的一种方法。通过loss判断难易程度。

在目标检测中,多用效果差的样本进行训练,那提高了整个网络的短板,总体的效果也会有提升。

难例挖掘:

难例挖掘是指,针对模型训练过程中导致损失值很大的一些样本(使模型很大概率分类错误的样本),重新训练它们。
维护一个错误分类样本池, 把每个batch训练数据中的出错率很大的样本放入该样本池中,当积累到一个batch以后,将这些样本放回网络重新训练。

2种难例挖掘技术

1.将easy的sample剔除:

一种是用于优化SVM的。通过一个working-set,训练一个收敛于该working-set的SVM,然后使用该SVM,将一些easy的sample剔除(这些sample通常是远离SVM分类边界的),增加hard example到working-set中(这些hard-example是超出模型边界的错误分类样本)。注意,working-set只是整个训练集的一个子集。

2.将false positives(FP)添加到训练集中再继续训练:

另一种是用于优化non-SVM的。如被应用于浅层神经网络,boosted decision tree等,这种方法首先开始训练模型,训练的数据集开始是由所有的positive example和随机的negative samples组成的,训练出来一个模型后,将该模型应用于一个更大的数据集,将model检测错误的样本(false positives)添加到训练集中再继续训练。不断迭代训练。但是论文中提到这个过程通常只迭代一次,且没有收敛的迹象。

已有的方法大多是基于loss来确定是否是hard的,比如OHEM,可以看下我博客中的代码详解 OHEM代码详解,根据分类和回归的loss进行判断,强行保留loss比较大的。

别人的总结:
CNN目标检测类的文章中,hard negative mining一般是,有正负样本,然后分类器分出来一些分错的负样本(容易将负样本看成正样本的那些样本),即假阳性(false positive),也就是说在对负样本分类时候,loss比较大(label与prediction相差较大)的那些样本,这些就是hard negative/困难样本。
hard negative mining就是多找一些hard negative加入负样本集,重新进行训练,这样会比easy negative(例如roi里没有物体,全是背景,这时候分类器很容易正确分类成背景,这个就叫easy negative;如果roi里有二分之一个物体,标签仍是负样本,这时候分类器就容易把他看成正样本,这时候就是hard negative)组成的负样本集效果更好。主要体现在虚警率更低一些(也就是false positive少)。
如何判断困难负样本呢?先用初始样本集(即第一帧随机选择的正负样本)去训练网络,再用训练好的网络去预测负样本集中剩余的负样本,选择其中得分最高,即最容易被判断为正样本的负样本为困难样本,加入负样本集中,重新训练网络,循环往复。

已有的方法大多是基于loss来确定是否是hard的,参考https://blog.csdn.net/u013608402/article/details/51275486文中的方法是,用两个网络,一个只用来前向传播,另一个则根据选择的ROI进行反向传播。
类似的实现在https://blog.csdn.net/jiyangsb/article/details/77802941这篇文章中有implementation details也是一样的
 

 类似资料:

相关阅读

相关文章

相关问答