对于机器学习中的正负样本问题,之前思考过一次,但是后来又有些迷惑,又看了些网上的总结,记录在这里。

我们经常涉及到的任务有检测以及分类。

针对与分类问题,正样本则是我们想要正确分类出的类别所对应的样本,例如,我们要对一张图片进行分类,以确定其是否属于汽车,那么在训练的时候,汽车的图片则为正样本,负样本原则上可以选取任何不是汽车的其他图片,这样就可以训练出来一个汽车的分类网络,对这个网络进行测试会发现,它会将一些非汽车的图片误报成汽车,这些误报的图片则为“难分样本”,后续进行训练的时候,将这些难分样本加入至负样本集合中进行训练,最后得到的网络模效果会更好一些,这个过程就叫做“难例挖掘”。另外,在选取负样本的时候,原则上是可以选择任意非汽车的图片作为负样本,但是比较合理的情况应该是要考虑到实际应用场景,例如实际应用是对行车记录仪上面捕捉到的图片进行分类,那么,负样本则应该是捕捉到的其他非汽车的图片,例如马路,树木,路灯等。

针对与检测问题,需要确定哪里有什么,也就是既要对位置进行回归,还要进行分类,这时的正样本就是我们事先标注出来的bbox框之中的部分,但是一般的检测框架,都是按照一定的规则生成一些预测bbox,那么在进行正样本的选取时,就需要判断这些生成的bbox与GT的bbox之间的overlap,如果overlap大于某一阈值,则将该预测bbox作为正样本,如果没有超过这一阈值,则认为是负样本。下面摘录一段博客中的解释,是针对与SSD训练中的正负样本的生成问题:

 给定输入图像以及每个物体的Ground Truth,首先找到每个Ground True Box对应的Default Box中IOU最大的作为正样本。然后,在剩下的Default Box中找到那些与任意一个Ground Truth Box的IOU大于0.5的Default Box作为正样本。其他的作为负样本(每个Default Box要么是正样本Box要么是负样本Box)。如上图中,两个Default Box与猫匹配,一个与狗匹配。在训练过程中,采用Hard Negative Mining 的策略(根据Confidence Loss对所有的Box进行排序,使正负例的比例保持在1:3) 来平衡正负样本的比率。

引自http://lanbing510.info/2017/08/28/YOLO-SSD.html

具体的代码还没有仔细研究,FasterRcnn也是类似的策略,它们的代码都值得好好研究一下,但是目前还不知道yolo再选取负样本的时候有没有用到什么策略,有时间应该拜读一下论文。