论文阅读-《Focal Loss for Dense Object Detection》

FAIR. ICCV2017 Oral Kaiming He & RBG

1.Motivation

一直以来,one-stage detector都以快著称,yolo刚发布的时候表明了是主打速度的,但是这些one-stage detector的精度要比two-stage detector,比如faster rcnn差不少。本文的目的就是为了探讨为什么one-stage detector相比two-stage detector精度要差。

2.Contribution

本文的贡献在于指出了one-stage detector精度不高的原因在于extreme forground-background class imbalance,这种不平衡导致了训练的时候存在大量的easy examples(包括easy positive和easy negative,但主要是easy negative),这些easy example虽然每一个的loss会比较小,但是因为数量巨大,主导了最终的loss,导致最后训练出来的是一个degenerated model。

为此,作者提出了一个dynamically scaled cross entropy loss,即focal loss来替换原来detector classification部分的standard cross entropy loss。通过降低训练过程中easy example的权重,提高了模型的训练效果,使得one-stage detector在精度上能够达到乃至超过two-stage detector。

3.Focal Loss

3.1standard cross entropy loss

原来的分类loss是各个训练样本交叉熵的直接求和,也就是各个样本的权重是一样的。如下图所示:

CE表示cross entropy,p表示预测样本属于1的概率,y表示label,y的取值为{+1,-1},这里仅仅以二分类为例,多分类分类以此类推。
为了表示简便,我们用p_t表示样本属于true class的概率。所以(1)式可以写成

我们可以将cross entropy loss的曲线画出来,如下图最上面这根蓝线所示:

从蓝线我们可以看出来,对于well-classified样本(true class的预测概率大于0.6为例),他们的loss仍然不算小。对于yolo/ssd这类one-stage detector,他们没有rpn这类proposal网络,而是对图像上densely sampled window进行检测,这样的话负样本的数量会远远超过正样本的数量,而负样本里面绝大多数又是easy example,也就是说,对于one-stage detector来说,虽然单个easy example的loss不大,但是所有easy example的loss加起来就会远远超过hard example的loss了。当hard example的loss对于模型的更新没有什么影响的时候,得到的分类模型的分类边界往往不够准确,对于hard example比较容易分错。

3.2balanced cross entropy

既然one-stage detector在训练的时候正负样本的数量差距很大,那么一种常见的做法就是给正负样本加上权重,负样本出现的频次多,那么就降低负样本的权重,正样本数量少,就相对提高正样本的权重,如下式所示:

CE(pt)=αtlog(pt)

3.3focal loss definition

作者实际上解决的是easy example和hard example不均衡的问题,这个和训练时候正负样本不均衡是两码事,因为正负样本里面都会有简单的样本和容易分错的样本。

作者提出的focal loss,相当于是对各个样本加上了各自的权重,这个权重是和网络预测该样本属于true class的概率相关的,显然,如果网络预测的该样本属于true class的概率很大,那么这个样本对网络来说就属于easy(well-classified) example。如果网络预测的该样本属于true class的概率很小,那么这个样本对网络来说就属于hard example。为了训练一个有效的classification part,显然应该降低绝大部分easy example的权重,相对增大hard example的权重。作者提出的focal loss如下式所示:

FL(pt)=(1pt)γlog(pt)

参数 γ 大于0。当参数 γ =0的时候,就是普通的交叉熵,作者的实验中发现\gamma=2效果最高。可以看到,当 γ 一定的时候,比如等于2,一样easy example( pt =0.9)的loss要比标准的交叉熵loss小100+倍,当 pt =0.968时,要小1000+倍,但是对于hard example( pt < 0.5),loss最多小了4倍。这样的话hard example的权重相对就提升了很多。实际实验中,作者和3.2一样,对正负样本又做了一个reweighting
FL(pt)=αt(1pt)γlog(pt)

4.Experiments

作者为了验证自己的观点,提出了一个RetinaNet,采用的是Resnet+FPN作为backbone,cls和reg两路subnet分别加在各个Pyramid level上,如下图所示:

注意到这里用的class subnet和box subnet相比ssd都要更深一点,并且两个subnet没有share卷积层的参数。作者的实验结果如下图所示:

所有的实验都是在COCO上做的。
(a)对于3.2说明的balanced cross entropy,当正样本的权重 α 设置为0.75的时候,能达到最高的AP。
(b)对于固定的 α ,当 γ 等于2的时候能达到最高的AP
(c)选择2scale,3aspect ratio效果最好
(d)OHEM相当于是在训练的时候只选择hard example进行训练,作者将自己的方法和OHEM进行对比,同时加入了一组使用OHEM,并通过resample的方式保证正负样本比例1:3的组,可以看到,作者的对hard example和easy example reweighting的方法要比OHEM这种只选择hard example去训练的方法要好。
(e)作者对比了自己的模型在不同的深度和训练图像scale下的speed/accuracy

为了更好的观察focal loss在reweighting example的效果,作者随机选取了10^7个负样本window和10^5个正样本window,然后通过网络之后分别计算这些正负样本的loss,最后,分别对于正样本和负样本,把所有window的loss进行归一化(softmax),画出累计loss随样本数目的增长曲线,如下图所示:

可以看到,对于正样本而言,增大\gamma对于loss的分布影响不大,但是对于负样本来说,当\gamma=2的时候,绝大部分的负样本对于loss和的贡献都可以忽略,所有的loss都集中在很小部分的hard example上。所以说作者提出的focal loss能够让网络focus learning on hard examples and down-weight the numerous easy negatives。

最后,放一张作者加了训练的trick之后在COCO上的结果对比图

作者的这个single-model,训练的时候除了正常的random flip,还加上了scale jitter,延长了训练时间,以及使用了更大scale的训练图像,最终能达到39.1 AP。应该说,如果除掉这些训练的trick以及FPN自带的加成的话,focal loss也能够使得one-stage detector和two-stage detector的精度有的一拼。

你可能感兴趣的:(Computer,Vision,计算机视觉论文研读)