[文献阅读]Training Region-based Object Detectors with Online Hard Example Mining

  搜文章名能够搜出来几篇csdn上的文章,不过写得都比较简略,但是物理意义说得比较清楚。然后我这篇写得,也很简略。没放图没讨论具体的网络结构,只记录了自己比较在意的对一些细节的理解。

  论文的主要特点在于online。

  首先介绍了目标检测中,负例与正例的比例严重不平衡的问题,比如DPM中背景图和正例的比例达到了100000比1,而即便是比较新的算法该比例也达到了70:1。文章没有说正负例的数量不平衡会造成什么影响,不过在知乎上看到的一个回答是说,正负例数量差太多,会对SVM等算法的训练产生不好的影响,导致精度降低。

  于是bootstrapping横空出世了,bootstrapping的核心想法是,逐渐增大负例集,而构成负例集的应该是那些被错分类的负样本。该方法需要在一段时间内固定model,获得新的hard examples,然后再用新的训练集更新model,如此迭代。于是,算法的流程就变成了:更新模型-->挖掘负例加入训练集-->更新模型-->挖掘负例加入训练接-->……如此往复。

  然后作者吹了一下bootstrapping的应用广泛,从SVM到浅层模型再到RCNN、SPPNet等,然而话锋一转,指出了Fast RCNN及其变种没有用,为啥呢?因为对于CNN而言,固定模型去挖掘难例会导致模型训练速度变慢,也是这个原因,所以fast RCNN及其变种里面没有使用bootstrapping。

  所以本文提出了一种在线的hard example mining算法,并且用在了Fast RCNN上面。大致上看,算法是对SGD进行简单修改,其主要想法是对examples进行采样,这个采样我现在理解是从样本集中随机抽取一部分样本。该方法适合那种图片数量少的训练,比如一个batch只有一两张图片,但是能从中获取千百个样本。

  回顾部分又重申了一次hard example mining,该方法主要用在SVM上面,因此Fast/Faster RCNN这种纯网络的算法没法立刻使用。然后介绍了hard example mining,有两点值得注意,一个是被删掉的负样本是较为easy的,这里面就涉及到一个门限的问题。另一个是working set只是全部训练集的一个很小的子集。

  然后介绍了在深度网络上的bootstrapping技术发展情况,说大部分的算法都是基于loss,本文是要基于region-based。

  然后回顾了一下Fast RCNN。说起来原理其实很简单,很早之前就看到说RCNN会重复做卷积,重复计算很多,而FRCN只卷积一次,大大降低了计算量,但是不知道怎么做的。现在知道了,是怎么做的呢?简单来说就是生成特征图,然后摆在那儿不动,用SS算法生成推荐区域后,通过感受野计算得到在特征图上的对应的区域,然后直接从特征图中将特征向量抽取出来。之后送入下一个网络进行计算。换句说话,将网络划分为两部分,一部分负责特征抽取,另外一部分负责利用抽取出来的特征向量来进行最后的loss计算。后半部分RoI网络有两个loss,分别计算的是目标/背景的分类和框的回归。详图见原文。

  接下来讨论了IoU和硬不硬之间的关系。首先说目标框,一般要与ground truth交叠达到0.5才算,这个是比较普适的。RCNN里面的背景是IoU小于0.3的算背景。这里面说在FRCN和SPPNet里面设置了IoU处于0.1~0.5的样本为背景,这能够近似模拟hard example mining,他们认为和真实目标框部分交叠的样本是更有迷惑性的。然而文章在5.4节中指出,这会错失一些罕见的但是十分重要的背景样本,因此他们将0.1这个门限值取消掉了。正负样本比例这个,fast rcnn设置正负样本比例为1:3,也即保证25%的样本为正样本。文章说实验测试了,改变这个比例会带来3%的mAP损失。但是本文算法不会有这个限制。

  本文提供的算法想法基于在线SGD。他的意思是如果像一般hard example mining一样,需要从原有的负样本集里面去挑难例,那样的话需要将model固定,然而,每一个训练的图片中就包含了很多的负样本,而且在线SGD每次迭代只包含少量的图片。所以这样既满足了模型固定的要求(因为每个图片送进来时模型是不更新的),又满足了fast rcnn实时处理的要求,不会拖慢速度。

  本文与FRCN原文相比一个改进之处是将全部ROI输入第二个网络,而非是其mini batch。这里的难例选择不仅仅指背景,同时也正对正样本。选择最差的B个正样本去进行反向传播,这样可以减轻计算量。然后提示了一点是ROI之间可能相互交叠,这样选择最差的B个样本时,可能选择的是同一个目标,这不利于训练,所以这一步采用了一次NMS,并且放宽了门限,仅对IOU大于0.7的区域进行抑制。关于比例的问题也做了一点说明,说比例无所谓,因为如果某个目标类被忽略了,他的loss会增大,然后后面会被选中,如果某次迭代正样本都很easy,那就光训负样本好了,反之亦然。总之,单次比例不要紧,因为最后肯定能取得平衡。

  需要注意的是,这里选择难例的标准是high loss,而且这里的难例不仅指负例,也包括正例。我觉得我收到了其他算法的影响。这里的loss不是打分的高低,不是high score,loss是和标准答案的差别大小,如果loss高,那就意味着错得更离谱,所以不管是正例还是负例,都是难例。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值