retinanet 和focal loss

转载的

这是一篇论文阅读笔记

论文链接:https://arxiv.org/abs/1708.02002

代码链接:https://github.com/facebookresearch/Detectron

首先,提一个问题,为什么one stage方法精度比two stage方法精度低?

这个问题是本篇论文讨论与解决的主要问题.

作者总结道,一个很重要的因素是因为在one stage方法中,正负样本的不均衡

那么one stage方法为什么正负样本就不均衡了呢?

这里举个例子:

首先来看一个典型的one stage方法,SSD。在SSD中,首先按照一定的规律产生Prior,大约会产生约10,000的候选区域,由于其实规律的采样,所以相对来说比较稠密、冗余,即使后面在分类的时候采用了hard example mining(对分数进行排序,取前面部分),但是仍然会存在较多的简单样本,使得正负样本不均衡。

相比较two stage方法,我们已Faster R-CNN为代表,在Faster R-CNN中,首先利用RPN网络产生目标框候选区域,约会生成1000-2000的候选框,这就过滤掉了大部分的简单负样本,然后在分类过程中,使用正负样本1:3或者OHEM方法使得正负样本更为均衡。

简单总结two stage的优势在于:

  • 其采用两个阶段的级联,这样rpn阶段就可以将候选区域数量控制在1-2k左右,相比于one-stage要减少很多。

  • mini-batch采样,采样并不是随便采样的,而是根究正样本的位置进行采样(比如将负样本的设定为与ground-truth的IOU在0.1-0.3之间的),这样可以干掉一大部分简单样本,另外在正负样本比例上的选择,比如1:3,同样在打破平衡性。

正负样本类别不均衡带来的问题:

  • 训练低效,过多的负样本,对于检测框没有作用。 (training is inefficient as most locations are easy negatives that contribute no useful learning signal)
  • 过多简单的负样本会压制训练,使得训练效果不好。(enmasse the easy nagatives can overwhelm training and lead to degenerate models.)

为了解决这个问题,作者提出了Focal Loss , 并且设计了RetinaNet


一个解决正负样本的方法:Focal Loss

Focal Loss是在交叉熵损失基础上修改的,所以这里有必要先回顾一下交叉熵损失(cross entropy loss)

交叉熵损失的公式如下,这里给的是简单的Binary CrossEntropy Loss,就是只有两个类别。

在这里插入图片描述

简化一下,我们定义 p t p t p t ptpt p_t γ取2的时候,负样本的loss大部分的损失都是很小的,只有一小部分的loss比较大,这也说明了focal loss起到了对简单负样本的抑制作用,使得大部分负样本没有作用。

在这里插入图片描述

下面是网络的检测精度,以及速度,以及与state of the art网络的对比。

观察下面两张图,可以发现AP不太一样,主要原因是,其采用了一些策略,比如尺度变换等。

在这里插入图片描述

在这里插入图片描述

以上是对Focal Loss以及RetinaNet的一些理解,如果有不对的地方,欢迎指正

发布了63 篇原创文章 · 获赞 7 · 访问量 3396

猜你喜欢

转载自blog.csdn.net/weixin_44523062/article/details/105189680