目录
摘要
这篇论文主要是研究了为什么单阶段目标检测器的检测效果不如两阶段检测器,并指出因为两阶段检测器最终是在第一阶段提取的稀疏proposal上进行分类和回归,而单阶段检测器是直接对大量密集的可能是目标的位置进行分类和回归,单阶段检测器在训练阶段严重的正负样本不平衡问题是导致效果差异的主要原因。作者在交叉熵(cross entropy)损失函数的基础上提出了focal loss,focal loss可以同时做到消除类别不平衡和更加关注难分样本。同时作者设计了一个简单的单阶段目标检测网络RetinaNet搭配focal loss,实验结果显示RetinaNet搭配focal loss可以在保持单阶段检测器速度的基础上超过所有现有两阶段检测器的精度。
Focal Loss
二分类的交叉熵(cross entropy)损失函数如下
其中代表ground-truth的类别,
是模型预测的y=1的概率,为了方便定义
如下
CE loss可以写成如下
CE loss如下图中最上方的蓝色曲线所示
从图中可以看出即使是容易分类的样本(),其loss也没有小到可以忽略的程度,如果这部分样本数量非常多,即便难分样本的loss大,但难分样本的数量很少,这样累加后也会导致易分样本对总体loss的贡献远大于难分样本,从而使得模型偏向于优化数量众多的易分样本而忽略真正该优化的难分样本。
处理类别不平衡常用的方法是引入一个权重因子,对于类别1使用
,对于类别-1使用
。在实际应用中
的取值大小和样本数量相反,即样本多的那一类的权重乘以的权重因子小一些,或者作为一个超参数通过交叉验证实验获得。按重定义
的方式重定义
,这样CE loss可表示成如下式子
但是只能用来解决正负样本不平衡的问题,无法解决训练过程中模型偏向优化大量易分样本的问题。
因此作者提出了focal loss来减小易分样本的loss在总体loss中的权重,使得模型专注于优化难分样本。focal loss就是在BE loss上加了一个系数,公式如下
其中是可调的超参数,当
取不同值时Loss曲线如图1所示。从公式中可以看出对于易分样本
接近1,此时系数
接近0,即大大减小了易分样本的loss值。而对于难分样本
很小,此时系数
接近1,对难分样本的loss影响很小。比如当
时,对于
的易分样本,focal Loss的值相比于CE loss小了100倍,而对于错分的难分样本
,focal loss相比于CE loss至多小4倍,从而可以大大降低易分样本在总体loss中的比重。
在实际应用中,结合平衡正负样本的权重因子,focal loss的最终表达式如下
RetinaNet
作者同时设计一个简单的单阶段检测网络RetinaNet。RetinaNet是由一个backbone网络(论文中取ResNet50)、特征金字塔网络(FPN)、两个全卷积(FCN)子网络组成的,两个子网络分别负责分类和box回归,不共享参数,其结构如下图所示
其中FPN的每层都分别接了两个子网络,子网络是由4个3*3*256卷积层接1个用于分类或者回归的卷积层,图中的A代表feature map上每个点的anchor数量,论文中是9(由3种ratio和3种scale构成)。
两阶段检测器处理样本不平衡的方法
两阶段检测器通常用BE loss而不是权重因子或本文提出的focal loss,它们通过两种机制解决样本不平衡问题(1)两阶段级联(two-stage cascade)(2)偏向的小批量采样(biased minibatch sampling)。第一个级联阶段是一个候选框机制,将几乎无穷个可能的目标位置减少到一两千个,而且选取的候选框不是随机的,而是大概率对应着真实目标位置的,这就删去了绝大部分易分样本(背景)。第二个阶段minibatch中的样本用带有偏向的采样方式获得,例如按正负样本1:3采样,这个比例就类似于loss函数中
权重因子的作用。
通过模型的初始化优化样本不平衡问题
神经网络训练过程中梯度容易爆炸的一个原因在于模型初始化策略,一般情况下我们会倾向让初始化的模型对于各类的预测是相同概率的,但是对于我们这个正负样本极度不平衡问题,这其实是非常不利的,因为负样本的loss会很大。所以RetinaNet论文中建议在对分类分支初始化时,对负样本设置一个先验概率值,具体做法是改变分类分支的bias初始化值。论文中设置分类分支最后一个卷积层的偏置为,
取0.01,这样初始化后分类分支sigmoid处理后的预测概率倾向于0.01,而不是0.5,这就大大减少了负样本的初始loss。