FAIR. ICCV2017 Oral Kaiming He & RBG
一直以来,one-stage detector都以快著称,yolo刚发布的时候表明了是主打速度的,但是这些one-stage detector的精度要比two-stage detector,比如faster rcnn差不少。本文的目的就是为了探讨为什么one-stage detector相比two-stage detector精度要差。
本文的贡献在于指出了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。
原来的分类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比较容易分错。
既然one-stage detector在训练的时候正负样本的数量差距很大,那么一种常见的做法就是给正负样本加上权重,负样本出现的频次多,那么就降低负样本的权重,正样本数量少,就相对提高正样本的权重,如下式所示:
作者实际上解决的是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如下式所示:
作者为了验证自己的观点,提出了一个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的精度有的一拼。