目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘

  • 2019 年 10 月 4 日
  • 筆記

目标检测系列: 目标检测(object detection)系列(一) R-CNN:CNN目标检测的开山之作 目标检测(object detection)系列(二) SPP-Net:让卷积计算可以共享 目标检测(object detection)系列(三) Fast R-CNN:end-to-end的愉快训练 目标检测(object detection)系列(四) Faster R-CNN:有RPN的Fast R-CNN 目标检测(object detection)系列(五) YOLO:目标检测的另一种打开方式 目标检测(object detection)系列(六) SSD:兼顾效率和准确性 目标检测(object detection)系列(七) R-FCN:位置敏感的Faster R-CNN 目标检测(object detection)系列(八) YOLOv2:更好,更快,更强 目标检测(object detection)系列(九) YOLOv3:取百家所长成一家之言 目标检测(object detection)系列(十) FPN:用特征金字塔引入多尺度 目标检测(object detection)系列(十一) RetinaNet:one-stage检测器巅峰之作 目标检测(object detection)系列(十二) CornerNet:anchor free的开端

目标检测扩展系列: 目标检测(object detection)扩展系列(一) Selective Search:选择性搜索算法 目标检测(object detection)扩展系列(二) OHEM:在线难例挖掘

简介

OHEM(Online Hard Example Mining)是一种在线的难例挖掘方法,它的论文是《Training Region-based Object Detectors with Online Hard Example Mining》,从时间上看它在Faster R-CNN的后面,但是文中没有在Faster R-CNN的基础上实验,而是选择了Fast R-CNN,将Fast R-CNN中的mini-batch sampling策略替换为OHEM,得到了不错的效果。

OHEM原理

设计理念

我们先回归一下Fast R-CNN的 mini-batch sampling:

Fast R-CNN要依赖SS算法生成的区域建议框,然后组合mini-batch。如果batch size是128的话,那么这128个RoI由2张图片,各生产64个区域。并且,128个ROI中,正负样本的比例是1:3,即25%的目标ROI和75%的背景ROI。正例的判定条件是,SS算法给出的区域建议与Ground Truth的IOU要大于等于0.5。负例的判定条件是IOU要在[0.1,0.5)之间。这个IOU最小到了0.1是为了一种类似启发式的难例挖掘策略。 OHEM通过实验得到,这个mini-batch sampling中的1:3的比例对于训练Fast R-CNN来说是个非常重要的超参数,如果不是这个值,都会使mAP降低三个点左右。 但是OHEM认为,mini-batch sampling并不具有高效和最优的状态,因为Fast R-CNN中的mini-batch sampling还只是一种启发式的难例挖掘策略,它是在SGD算法优化之前就先验的组合好了mini-batch。而OHEM可以在每一次迭代中在线的从大量区域建议框中挖掘难例,它更加适合SGD这种迭代式的训练方式。OHEM可以取得更低的training loss和更高 mAP。

OHEM结构

上图就是OHEM结构,可以发现OHEM中有两套ROI Network,其中(a)是绿的部分,它是一个只读(read-only)的ROI Network,每次只读取权重后进行forward,不参与反向传播和梯度更新,(b)是红色的部分,它是一个正常功能的ROI Network。 对于给定图像,经过ss算法生成ROIs,同样计算出卷积特征图,在(a)中会对所有的ROI区域全部计算forward,并计算出oss,loss的大小可以反映出对于当前的模型,这些样本的难易程度。随后会对loss进行排序,选择前batch size个样本送入(b)中,进行forward和backward。 需要注意的是,在排序前要进行NMS,否则导致挖掘出的难例overlap会过高,影响训练效果。

OHEM和Focal loss

Focal loss是在RetinaNet中提出的一种损失函数,和OHEM作用相似,却又有些区别。 OHEM和Focal loss都做了两件事,一是正负样本的平衡,二是难例挖掘:

  • OHEM本身用在了一个two-stage的模型上,那么正负样本就是可控的,OHEM做的事情是难例挖掘的过程;
  • Focal loss应用在one-stage模型上,无论如何正负样本都不能自由组合,所以只能靠最后计算损失的时候抑制负样本,抑制简单样本,挖掘难例。Focal loss有两个部分,一个是平衡交叉熵系数ata_{t}at​和Focal loss新增的系数(1−pt)γ(1-p_{t})^{gamma }(1−pt​)γ。个人感觉,这两个系数对于上述的两件事都是有作用的,并且这两个系数本身会相互影响,RetinaNet通过实验得到at=0.25a_{t}=0.25at​=0.25和γ=2gamma=2γ=2时效果最好。

OHEM性能评价

首先是一个消融实验:

  • 对比11和13行、9行和10行,证明batch size是由一张图还是两张图的ROI组合得到,对OHEM影响很小,但是对Fast R-CNN却不是这样
  • 对比2行和4行,在Fast R-CNN的启发式sampling中,如果把负样本的IOU范围调整到[0,0.5),结果还更好了些。
  • 对比2行13行,就能看出来,OHEM比Fast R-CNN的mAP涨了2.7个点。

下面是总的实验结合,分别在每一个已有方法上加上OHEM,效果都有提升。两个表分别是VOC 2007和 VOC 2012: VOC 2007

VOC 2012