目标检测中,类别不平衡问题很严重,特别是背景类和其他目标类的不平衡。一阶算法在一张图片上大概会评估 1 0 4 − 1 0 5 10^4-10^5 104−105个候选位置,只有一些位置含有objects。训练样本类别不平衡会影响训练效果,导致分类器更倾向于预测数量非常多的背景类。针对这个问题,focal loss 把容易分类的类别的loss相对降低,其他类别的loss相对提高,从而保证网络能够正确学到东西。
Focal loss的公式定义如下
FL
(
p
t
)
=
−
α
t
(
1
−
p
t
)
γ
log
(
p
t
)
\text{FL}(p_t) = -\alpha_t (1 - p_t)^{\gamma} \log (p_t)
FL(pt)=−αt(1−pt)γlog(pt)
其中
p
t
p_t
pt表示是否为gt类的概率
p
t
=
{
p
if
y
=
1
1
−
p
otherwise
p_t = \begin{cases} p & \text{if } y = 1 \\ 1 - p & \text{otherwise} \end{cases}
pt={p1−pif y=1otherwise
γ
\gamma
γ是调制因子,把类别的loss
log
(
p
t
)
\log (p_t)
log(pt)压低,越容易学习的类别,
p
t
p_t
pt越大,
(
1
−
p
t
)
γ
(1-p_t)^\gamma
(1−pt)γ抑制loss的效果越大,loss
log
(
p
t
)
\log (p_t)
log(pt)越低。对于背景类来说,它的训练样本很多,网络很容易学到怎么对背景类分类,背景类的概率
p
t
p_t
pt值比较高。因此,
γ
\gamma
γ可以把背景类的loss压低。对于其他类,因为比较难学,他们的预测概率
p
t
p_t
pt偏低,他们的loss相对背景类来说不会降低太多。这样做的效果平衡了背景类和其他类的loss,减少了背景类的预测对其他类预测的影响。
focal loss 对于不同的概率产生的loss的效果如下图所示
概率越接近于1,loss越小。
α t \alpha_t αt是类别t的权重,针对类别不平衡问题。数量少的类别的 α t \alpha_t αt权重比较高,数量少的类别的 α t \alpha_t αt权重比较低,这是针对类别不平衡问题的常见做法。
论文中使用Focal loss的一阶算法RetinaNet与其他算法的结果如下
可以看到,Focal loss的使用有助于提高训练效果。