什么是hard negative mining

1.原文来自于:https://blog.csdn.net/qq_36570733/article/details/83444245?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1

此处仅作学习记录之用。

  在目标检测中我们会事先标记好ground_truth,接下来在图片中随机提取一些列sample,与ground_truth重叠率IOU超过一定阈值的(比如0.5), 则认为它是positive sample,否则为negative sample,考虑到实际负样本的数量远大于正样本的数量,我们为了避免network的预测值少数服从多数而向负样本靠拢,取正样本数:负样本数大约为1:3,显而易见,用来训练网络的负样本为提取的负样本的子集,那么,我们当然选择负样本中容易被分错类的困难负样本来进行训练。

  那么负样本中哪些是困难负样本(hard negative)呢?困难负样本是指那些容易被网络预测为正样本的proposal,即假正例(false positive), 例如roi里有二分之一目标时,虽然它仍是负样本,却容易被判断为正样本,这块roi即为hard negative,训练hard negative对提升网络的分类性能具有极大帮助,因为它相当于一个错题集。

  如何判断它为困难负样本呢?也很简单,我们先用初始样本集去训练,再用训练好的网络模型去预测负样本集中的负样本,选择其中得分最高,即最容易被判断为正样本的负样本为困难样本,加入负样本集中,重新训练网络,循环往复,然后我们会发现:咦!我们的网络的分类性能越来越强了!假阳性负样本与正样本间也越来约相似了!(因为此时只有这些妖怪区域能迷惑我们的分类器了)

2.原文来自于:https://blog.csdn.net/u012285175/article/details/77866878 

  最近一直在看关于CNN的目标检测的文章,在这中间会经常看到hard negative mining这个名词,在这里把这个词解释一下:假设给你一堆包含一个或多个人物的图片,并且每一个人都给你一个bounding box做标记,如果要训练一个分类器去做分类的话,你的分类器需要既包含正训练样本(人)和负训练样本(背景)。

  你通过观察bounding box去创建一个有用的正训练样本,那么怎么做才能创建一个有用的负训练样本呢?

  一个很好的方式就是在开始的时候随机创建一堆的bounding box候选框,并且不能与你的正样本有任何的重叠,把这些未与正样本重叠的新的bounding box作为你的负样本。

  好了,这样你的正负样本都有了,可以训练可用的分类器了,你用滑动窗口在你的训练图片上进行运行,但是你会发现你的分类器并不是很好用,分类的效果并不是很好,因为它会抛出一堆错误的正样本,即假正例(当检测到人时,实际上却不是人),那么问题就来了,你训练了一个分类器,然而这个分类器并不能达到你想要的效果,那么应该怎么办呢?

  这个时候就要用到hard negative了,hard negative就是当你得到错误的检测patch时,会明确的从这个patch中创建一个负样本,并把这个负样本添加到你的训练集中去。当你重新训练你的分类器后,分类器会表现的更好,并且不会像之前那样产生多的错误的正样本。

 
原文地址:https://www.cnblogs.com/elitphil/p/12714479.html