loss低但精确度低_目标检测中的Loss改进:GIOU

目标检测的改进方向有很多,这次介绍一篇CVPR2019针对Loss的改进方法: GIOU Loss

Motivation

现有目标检测的Loss普遍采用预测bbox与ground truth bbox的1-范数,2-范数来作为loss。但是评测的时候却又采用IOU来判断是否检测到目标。显然二者有一个Gap,即loss低不代表IOU就一定小。就拿下面的例子来说:

loss低但精确度低_目标检测中的Loss改进:GIOU_第1张图片

上图第一排,所有物体的2-范数loss都一样,但是第三个IOU显然要高于第一个,主观来看也是第三个检测结果要好。第二排也是类似,1-范数都一样,但是IOU却不同。

针对这个问题,很自然的,我们会想直接用IOU作为loss。但IOU作为loss存在一个问题,那就是当预测的bbox和ground truth没有重合时,loss为0,这样就没法优化了。于是,作者提出了GIOU loss。

GIOU

GIOU的计算很简单,对于两个bounding box A,B。我们可以算出其最小凸集(包围A、B的最小包围框)C。有了最小凸集,就可以计算GIOU:

计算方法很简单,从公式可以看出,GIOU有几个特点:

  • GIOU是IOU的下界,且取值范围为(-1, 1]。当两个框不重合时,IOU始终为0,不论A、B相隔多远,但是对于GIOU来说,A,B不重合度越高(离的越远),GIOU越趋近于-1。关于这点,下面再详细解释一下。
  • GIOU其实就是在IOU的基础上减掉了一个东西,这个减掉的东西,让我门避免了两个bbox不重合时Loss为0的情况。至于减掉的东西怎么去直观的理解,似乎不好找到一个很好的解释?
  • 可导:这一点需要强调下,由于max,min,分段函数(比如ReLU)这些都是可导的,所以用1-GIOU作为Loss是可导的。

当IOU=0时:

显然,

值不变,最大化GIOU就是要最小化
,最小化C就会促成两个框不断靠近,而不是像最小化IOU那样loss为0。

实验结果

YOLO V3涨了2个点,Faster RCNN,MaskRCNN这种涨点少了些。主要原因在于Faster RCNN,MaskRCNN本身的Anchor很多,出现完全无重合的情况比较少,这样GIOU和IOU Loss就无明显差别。所以提升不是太明显。

总结

  • Motivation很直接,但是怎么就想到了GIOU这个办法,感觉是神来之笔。
  • 改进办法很简单,几行代码。

你可能感兴趣的:(loss低但精确度低)