第一次发布时间:2017.08
第二次发布时间:2018.02
论文地址:Focal Loss for Dense Object Detection
全文概括
该论文首先总结了目标检测的两个主要方向:1) two-stage 区域候选型检测器;2) one-stage 密集采样每一个可能的位置。Two-stage 分为两段,第一段专注于 proposals 的提取,第二段专注于对第一段提取出的 proposals 进行分类和边框回归。One-stage 摒弃了提取 proposals 的过程,对图片分格后,对每个格子预测一定数量的边框。相应的,这两种网络也各有相应的问题。Two-stage 网络需要单独对提取出的 proposals 进行分类和回归,这将带来速度的问题;One-stage 网络没有提取 proposals,这将引入前景背景类别不平衡的问题,给精确度带来影响;
而本文引进的 focal loss,就是为了解决 one-stage 所丢失的精确度问题。其参考了 two-stage 提取 proposal 带来的影响,给背景anchor 和 前景anchor对应的权重,以解决样本类别不平衡问题;
最后的损失函数为:
F
L
(
p
t
)
=
−
α
t
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
FL(p_t)=-\alpha_t(1-p_t)^\gamma\mathop{log}(p_t)
FL(pt)=−αt(1−pt)γlog(pt)其前身为交叉熵损失函数:
C
E
(
p
t
)
=
−
l
o
g
(
p
t
)
CE(p_t)=-\mathop{log}(p_t)
CE(pt)=−log(pt)其中,
p
t
=
{
p
i
f
y
=
1
1
−
p
o
t
h
e
r
w
i
s
e
p_t=\begin{cases}p&if\ y=1\\ 1-p &otherwise\end{cases}
pt={p1−pif y=1otherwise,是不同类别的概率值(所以,这里使用sigmoid函数,而不是softmax函数,作为其分类函数),
α
t
=
{
α
i
f
y
=
1
1
−
α
,
o
t
h
e
r
w
i
s
e
\alpha_t=\begin{cases}\alpha &if\ y=1 \\ 1-\alpha, &otherwise\end{cases}
αt={α1−α,if y=1otherwise.
该损失函数有两个超参数:
α
\alpha
α和
γ
\gamma
γ,
α
\alpha
α是为了解决正负样本不平衡问题,
γ
\gamma
γ是为了解决 easy-examples 和 hard-examples问题(采取超参
γ
\gamma
γ是为了解决大量 easy-examples,背景样本,所导致的 loss 倾向背景的问题;同时采取
α
\alpha
α,是因为作者发现这能略微提升最后的准确度,且
α
\alpha
α这种,是对类别不平衡通用的一种方法)。
介绍
作者首先介绍了类别不平衡的问题在 R-CNN 系列解决了的原因:第一阶段提取候选区域,已经快速地减少候选区域中属于背景的样本数量;第二阶段(分类阶段)使用一些样本启发行为:固定正负样本比(比如 1 : 3 1:3 1:3)、在线硬样本缩减(Online hard example mining、OHEM,该方法通过对每一个样本的loss进行排序,选出其中loss最大的 top-N 用于训练。该方法的问题在于其去掉了正的 esay-examples,这将使精确度受损)
Focal Loss
Focal Loss 的公式为:
F
L
(
p
t
)
=
−
α
t
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
FL(p_t)=-\alpha_t(1-p_t)^\gamma \mathop{log}(p_t)
FL(pt)=−αt(1−pt)γlog(pt)其中,
p
p
p是每个类别的概率$
p
t
=
{
α
i
f
y
=
1
1
−
α
o
t
h
e
r
w
i
s
e
p_t=\begin{cases}\alpha & if\ y=1 \\ 1-\alpha & otherwise\end{cases}
pt={α1−αif y=1otherwise,
α
\alpha
α和
γ
\gamma
γ都是固定值,不参与训练。
α
\alpha
α用于解决类别不平衡问题,加权重因子是解决类别不平衡问题的一个通用方法,前景使用
α
\alpha
α,背景使用
1
−
α
1-\alpha
1−α;
γ
t
\gamma_t
γt用于解决难易样本问题,不管是正样本和负样本,当
p
t
p_t
pt越大,
(
1
−
p
t
)
γ
(1-p_t)^\gamma
(1−pt)γ越小;
α
\alpha
α和
γ
\gamma
γ的最优值是互相影响的,当
γ
\gamma
γ上升时,
α
\alpha
α应该略微下降;作者的论文给出,
γ
=
2
,
α
=
0.25
\gamma=2,\alpha=0.25
γ=2,α=0.25得到最好结果。
RetainaNet
RetainaNet 是由三部分组成:骨干网络、分类子网络、边框回归子网络;
骨干网络是FPN网络,其能多个level,不同尺度检测目标。
Anchors,和RPN(Faster RCNN中的推荐候选区域的网络)一样,但是对多分类检测做了点修改,阈值条件也不同。和ground-truth 的 IoU达到0.5就认为是正样本,当IoU ∈ [ 0.4 , 0.5 ) \in[0.4, 0.5) ∈[0.4,0.5)就属于背景样本,当IoU ∈ [ 0.4 , 0.5 ) \in[0.4, 0.5) ∈[0.4,0.5)就不赋值,即忽略。(个人认为,该忽略可帮助减少训练那些IoU不那些小,但足以看出前景信息的边框)
分类子网络,是一个小的FCN,在每一层FPN网络后面接着。每一个FCN后连接的分类子网络参数是共享的。而与RPN不同的是,分类子网络和回归子网络参数不共享。
边框回归子网络,也是一个FCN,回归的是边框的offset。不像很多其他的分类网络,该网络是分类不可知的。
Inference,在每一个level的预测时,为了加快检测速度,在检测置信度设为0.05的同时,只提取top 1000个边框。最后整合所有的边框时,采用NMS,边框置信度设为0.5.
Facal loss,是应用于分类子网络的输出的,作者发现 γ = 2 \gamma=2 γ=2是效果很好, γ ∈ [ 0.5 , 5 ] \gamma\in[0.5, 5] γ∈[0.5,5]都相对健壮; α \alpha α也相对有一个稳定的范围。最后作者的实验中, γ = 2 , α = 0.25 \gamma=2, \alpha=0.25 γ=2,α=0.25效果最好。
初始化对于骨干网络,使用ImageNet预训练;对于其余的conv,除了最后一层, 设 b i a s = 0 bias=0 bias=0,以及 σ = 0.01 \sigma=0.01 σ=0.01的高斯核初始化;分类层,bias初始化为 − l o g ( ( 1 − η ) / η ) -\mathop{log}((1-\eta)/\eta) −log((1−η)/η), η \eta η是一个先验超参,设为 0.01 0.01 0.01。作者认为,该设定可以减少在训练初期减少该loss的不稳定程度,因为在训练初期,正负类的概率值差不多,该loss体现不出来。
Optimization,使用SGD,在8个GPU上每一个minibatch使用16张图片(每个GPU2张),初始学习率为 0.01 0.01 0.01,权重衰减为 0.0001 0.0001 0.0001,动量设为 0.9 0.9 0.9,最后的训练loss为focal loss(用于分类),平滑L1损失函数(用于回归)的和。总共大概是80k次迭代(我猜)。