rcnn中的Hard negative mining方法

 rcnn中类别判断分类器对每一类目标,使用一个线性SVM分类器进行判别。输入为深度网络输出的4096维特征,输出是否属于此类。由于负样本很多,使用hard negative mining方法。

关于hard mining,比较生动的例子是高中时期你准备的错题集。错题集不会是每次所有的题目你都往上放。放上去的都是你最没有掌握的那些知识点(错的最厉害的),而这一部分是对你学习最有帮助的。

一、为何难例挖掘? Why Hard Example Mining

难例挖掘与非极大值抑制 NMS 一样,都是为了解决目标检测老大难问题(样本不平衡+低召回率)及其带来的副作用。

目标检测与图像分类不同,图像分类往往只有一个输出,但目标检测的输出个数却是未知的。除了Ground-Truth(标注数据)训练时,模型永远无法百分百确信自己要在一张图上预测多少物体

目标检测问题的老大难问题之一就是如何提高召回率

为了提高这个值,很直观的想法是“宁肯错杀一千,绝不放过一个”。因此在目标检测中,模型往往会提出远高于实际数量的区域提议(Region Proposal,SSD等one-stage的Anchor也可以看作一种区域提议)。

但此时就会遇到一个问题,因为区域提议实在太多,导致在训练时绝大部分都是负样本,这导致了大量无意义负样本的梯度“淹没”了有意义的正样本。

为了让模型正常训练,我们必须要通过某种方法抑制大量的简单负例,挖掘所有难例的信息,这就是难例挖掘的初衷。

难负例挖掘(Hard Negative Mining)就是在训练时,尽量多挖掘些难负例(hard negative)加入负样本集,这样会比easy negative组成的负样本集效果更好。

二、R-CNN中的hard negative mining

而R-CNN中的难负例挖掘就是采用了这种自举法(bootstrap)的方法:

    • 先用初始的正负样本训练分类器(此时为了平衡数据,使用的负样本也只是所有负样本的子集)
    • 用(1)训练好的分类器对样本进行分类,把其中错误分类的那些样本(hard negative)放入负样本子集,
    • 再继续训练分类器,
    • 如此反复,直到达到停止条件(比如分类器性能不再提升)

 也就是说,R-CNN的Hard Negative Mining相当于给模型定制一个错题集,在每轮训练中不断“记错题”,并把错题集加入到下一轮训练中,直到网络效果不能上升为止。

非首次负例采样时,要筛选出 难负例example,需要满足两个条件:

    • 负例,即最大IOU 小于 阈值 d.overlap(:, cls_id) < neg_ovr_thresh
    • 分类错误,既然是负例,那么SVM计算值wx+b 应该小于 1

以下图简单的回顾一下SVM,

位于H1和H2超平面上的实例就称为支持向量,对于y=1的正例点,有H1: wx + b =1

对于y=-1的负例点,H2: wx + b = -1

分类正确时应满足,

wx+b>=1, if y = 1

wx+b <=-1, if y = -1

但是,SVM为了处理非严格线性可分的数据集,引入了松弛变量,于是如下图,

于是 只要 wx+b>-1,都可以认为是正例,只不过 wx+b越小,置信度越低。 


链接:https://www.zhihu.com/question/46292829/answer/794749025
来源:知乎
 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值