一开始学习时我没有太关注正负样本的问题,我以为正样本就是标注好的GT box,然而学到后面发现有很多的区别正负样本的方法,我才知道自己理解错了。正例是用来使预测结果更靠近真实值的,负例是用来使预测结果更远离除了真实值之外的值的。
看了好几篇博文之后我大概有了一些基础的理解,在分类问题中,对于狗这一类来说,所有标签为狗的图片都是狗类的正样本,其他的图片都是负样本,正负样本也就是所有图片都进入损失函数进行梯度下降。而在目标检测中的位置回归的问题中就不适用了,因为不能将所有的预测框都进入损失函数进行计算,这样的话就太多了,参数量太大。所以一般将与GT box的IOU大于某个阈值的预测框作为正样本,小于某个阈值作为负样本,得先将正负样本选择出来,再进行损失函数的计算。
分类场景:
mnist数字分类为例,如果一张图是数字3,对于类别“3”这张图是正样本,对于其他九类来说就是负样本。
猫狗分类,label=dog 的所有图片都是 这个类的正样本,其他图片作为负样本,同理,label=cat 的所有图片都是 这个类的正样本,其他图片作为负样本
人脸识别中,也没必要准备大量负样本图片,可以从拍摄的图片中生成负样本,但是需要注意,如果你要进行教室中学生的人脸识别,那么负样本就是教室的窗子、墙等等,也就是说,不能是与你要研究的问题毫不相关的乱七八糟的场景图片,这样的负样本并没有意义,要考虑模型的使用场景,否则效果会影响。
检测场景:
我理解检测场景区别与分类的情况,检测需要人工打标签,分类是不用的。检测问题需要做的事情是指出哪里有什么,也就是既要给出框,又要说明框中是什么,在这种情况下,我们所具备的数据就是一些人工标注的图片,这些图片上有框,并且会给出框中的物体类别,我们需要运用这些数据生成训练中的正负样本数据,参考了faster以及SSD两种检测框架中对于正负样本的选取准则,包括古典类型的目标识别,我的理解正负样本如下:
正样本: 就是那些手工标记的ground truth区域作为正样本;
负样本: 使用选择搜索(Selective Search)方法对区域进行融合--> 计算每个候选区域与真实标记区域ground truth之间的重合,如果区域A与ground truth的重合度在20-50%之间,而且A与其他的任何一个已生成的负样本之间的重合度不大于70%,则A被采纳为负样本,其实就是根据预测框和真实框的IoU值来判断:1.和每一个gt的重叠比例IoU最大的那个bbox是正例(一张图会有很多gt) 2.对于任意的bbox和任意gt的IoU的比例大于0.7就是正例 3.对于任意的bbox和任意gt的IoU的比例小于0.3就是负例