RetinaNet
在目标检测领域,单阶段算法精度第一次超过双阶段,就是RetinaNet。
网络结构:
作者设计的网络结构没有太大创新,文中是这样说的:
The design of our RetinaNet detector shares many similarities with
previous dense detectors, in particular the concept of ‘anchors’
introduced by RPN [3] and use of features pyramids as in SSD [9] and
FPN [4]. We emphasize that our simple detector achieves top results
not based on innovations in network design but due to our novel loss.
检测头是分类与BBox回归解耦的,并且是基于锚框的,经过FPN后输出五层不同尺度的特征图,每层分别对应32~512尺度的锚框,并且每层根据scale和ratios的不同组合有9种锚框,最终整个网络的锚框尺寸是32 ~ 813之间。使用网络预测的相对锚框的偏移量来计算BBox的方法与Faster R-CNN相同。下图是霹雳吧啦的图。
论文中的结构图如下,只示意了由FPN引出的三种尺度的特征图,W,H,K,A分别代表特征图宽,高,分类数量(不包含背景类),锚框数量(9)。
正负样本匹配
正样本:预测的BBox 与gt IoU>=0.5,
负样本:预测的BBox 与gt IoU<0.4,
其他样本舍弃
损失函数:
第一项分类损失中是计算所有样本(包括正负)的Focal loss,然后除去正样本数量
N
p
o
s
N_{pos}
Npos。BBox回归损失是Fast R-CNN中提出的smooth L1 loss。
RetinaNet可以说是讲完了,但本作的重点是Focal Loss,我们接下来详细探究本文Focal loss的设计。
单阶段目标检测算法中的正负样本不平衡问题
作者认为单阶段算法没双阶段高的重要原因是单阶段算法的预测框是很密集的,只有很少的预测框会匹配到目标,这些预测框即作为正样本,而没有匹配到的候选框(负样本)大概有超过10000个,这种不平衡导致总损失中容易分类的负样本(对训练网络的作用很小)由于数量的巨大优势会淹没掉少量但重要的正样本。
CE损失
一般分类使用CE损失,可以写作:
同时等价于以下形式:
CE损失的变种:Balanced CE Loss
常见的改进方法是引入一个系数
α
\alpha
α来增大正样本的权重,下图是原文中的描述
这种改进方法可以有效提高正样本的损失对训练的影响,能够提升网络的性能,但无法提高难分类样本的权重。
Focal loss
为了提高难分样本在损失中的权重,作者给出了Focal loss的定义:
其中的比例因子
(
1
−
p
t
)
γ
(1−pt)^{\gamma}
(1−pt)γ在训练中自动降低简单例子的贡献,提高困难例子的比重。同时,与Balanced CE Loss相似,作者为Focal Loss前面也加上了一个α的超参,最终的Focal loss形式如下:
将Focal Loss展开后得到下式:
本作的最大创新就是Focal loss。论文中
γ
\gamma
γ推荐取2,α取0.25。若
γ
\gamma
γ取0,则FL就退化为了CE。
举例
下图中,前两个p是易分类的正样本,中间两个是易分类的负样本,最后两个是难分类的正负样本。
可以看到难分类的样本其权重是更大的。
Focal Loss的缺点就是易受噪声的干扰。