【笔记】Focal Loss个人理解,主要是防止自己忘记
论文地址:Focal Loss for Dense Object Detection
使用项目地址:
fb官方代码
mmdetection
yhenon
![加载失败](https://i-blog.csdnimg.cn/blog_migrate/c855598bcf0e1fa31fe3fd699b0d3aeb.png)
图 1. 我们提出了一种新的损失,我们称之为 Focal Loss,它在标准交叉熵标准中添加了一个因子 (1 - pt)^γ。 设置 γ > 0 可减少分类良好的样本(pt > .5)的相对损失,将更多注意力放在难分类的错误示例上。 正如我们的实验将证明的那样,所提出的焦点损失能够在存在大量简单背景样本的情况下训练高度准确的密集对象检测器。
1、二分类的交叉熵损失
公式如下:
C
E
(
p
,
y
)
=
{
−
l
o
g
(
p
)
if
y
= 1
−
l
o
g
(
1
−
p
)
otherwise
CE(p, y) = \begin{cases} -log(p) & \text {if $y$ = 1} \\ -log(1-p) & \text{otherwise} \end{cases}
CE(p,y)={−log(p)−log(1−p)if y = 1otherwise
在上面的y∈ {±1} 指定了真实框,
p
∈
[
0
,
1
]
p∈[0,1]
p∈[0,1]是模型对标签为y=1的类的估计概率。为了便于标注符号,定义了
p
t
p_t
pt:
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
并重写
C
E
(
p
,
y
)
=
C
E
(
p
t
)
=
−
l
o
g
(
p
t
)
CE(p, y) = CE(pt) = − log(p_t)
CE(p,y)=CE(pt)=−log(pt)。
正如论文中的图(如上)所示,FL中
γ
=
0
\gamma=0
γ=0的时候即为交叉熵损失,正如论文中所说,从图中我们可以看出,容易分类的样本(
p
t
≥
.
5
p_t \ge .5
pt≥.5)的loss值也是比较大的,由于较多的简单易分样本的损失累积过多的时候,会导致整体的损失值很多,模型不易收敛,因此作者提出了带
α
\alpha
α的交叉熵损失。
2、带 α \alpha α平衡的交叉熵损失
解决类不平衡的一种常见方法是为类1(理解为前景)引入加权因子α∈[0,1],为类−1(理解为背景)引入类1−α。在实践中,α可以通过逆类频率来设置,也可以作为一个超参数,通过交叉验证来设置。为了便于标注,我们对
α
t
\alpha_t
αt的定义类似于我们如何定义
p
t
p_t
pt。将α-平衡的CE损失写为:
C
E
(
p
t
)
=
−
α
t
l
o
g
(
p
t
)
CE(p_t) = -\alpha_tlog(p_t)
CE(pt)=−αtlog(pt)
完全形式可写为
C
E
(
p
)
=
−
α
l
o
g
(
p
)
−
(
1
−
α
)
l
o
g
(
1
−
p
)
CE(p) = -\alpha log(p) - (1-\alpha)log(1-p)
CE(p)=−αlog(p)−(1−α)log(1−p)
其中p为预测的概率。
3、Focal Loss
虽然带
α
\alpha
α平衡的交叉熵损失已经平衡了正负样本,但没有区分难/易样本,因此作者提出了Focal Loss,以解决难分的负样本。
正如论文中所说:更正式地说,我们建议在交叉熵损失中增加一个调制因子
(
1
−
p
t
)
γ
(1 − p_t)^\gamma
(1−pt)γ,并具有可调聚焦参数
γ
≥
0
\gamma \ge0
γ≥0。
焦点损失定义为:
F
L
(
p
t
)
=
−
(
1
−
p
t
)
γ
l
o
g
(
p
t
)
FL(p_t) = -(1 − p_t)^\gamma log(p_t)
FL(pt)=−(1−pt)γlog(pt)
完整形式为:
F
L
(
p
t
)
=
−
(
1
−
p
)
γ
l
o
g
(
p
)
−
p
γ
l
o
g
(
1
−
p
)
FL(p_t) = -(1 − p)^\gamma log(p) - p^\gamma log(1-p)
FL(pt)=−(1−p)γlog(p)−pγlog(1−p)
图1中为γ∈[0,5]的几个值的焦点损失。作者注意到焦点损失的两个性质:(1)当一个例子被错误分类,
p
t
p_t
pt很小时,调制因子接近1,损失不受影响。当
p
t
p_t
pt→1时,因子变为0,分类良好的例子的损失被降低。(2)聚焦参数γ平滑地调整简单例子降低的速率。当γ=0时,FL等于CE,随着γ的增加,调节因子的作用也同样增加。
个人的理解:比如一个负样本的p为0.8,此时FL的损失值为
−
p
γ
l
o
g
(
1
−
p
)
=
−
0.
8
γ
l
o
g
(
0.2
)
=
0.44734
-p^\gamma log(1-p) = -0.8^\gamma log(0.2)=0.44734
−pγlog(1−p)=−0.8γlog(0.2)=0.44734,此时的损失值较大,模型更加关注这部分困难负样本。
附上个人觉得讲解比较详细的文章:
https://zhuanlan.zhihu.com/p/143877125
https://blog.csdn.net/weixin_38208912/article/details/106384195
https://blog.csdn.net/xiaohuilang6/article/details/103801426