引入:机器学习中的precision和recall
GT\pred | positve | negative |
---|---|---|
positive | true positive | false negative |
negative | false positive | true negative |
p
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
precision = \frac{TP}{TP + FP}
precision=TP+FPTP
r
e
c
a
l
l
=
s
e
n
s
i
t
i
v
i
t
y
=
T
P
T
P
+
F
N
recall = sensitivity = \frac{TP}{TP + FN}
recall=sensitivity=TP+FNTP
s
p
e
c
i
f
i
c
i
t
y
=
T
N
T
N
+
F
P
specificity=\frac{TN}{TN+FP}
specificity=TN+FPTN
precision和recall的分子都是被正确分类(挑选)的部分,分别用挑选为正类的总数(TP+FP)和正类总数(TP+FN)来评估正确的比例。
F1 score便是以相同权重的调和平均去整合在这两个指标:
1
F
1
=
1
P
r
e
c
i
s
i
o
n
+
1
R
e
c
a
l
l
⟹
F
1
=
2
∗
P
∗
R
P
+
R
⟹
F
1
=
2
∗
T
P
2
∗
T
P
+
F
P
+
F
N
\frac{1}{F^1} = \frac{1}{Precision}+\frac{1}{Recall}\implies F^1=\frac{2*P*R}{P+R}\implies F^1=\frac{2*TP}{2*TP+FP+FN}
F11=Precision1+Recall1⟹F1=P+R2∗P∗R⟹F1=2∗TP+FP+FN2∗TP
dice loss
dice系数
s
=
2
∣
X
⋂
Y
∣
∣
X
∣
+
∣
Y
∣
=
2
∗
T
P
2
∗
T
P
+
F
P
+
F
N
s = \frac{2|X\bigcap Y|}{|X|+|Y|}=\frac{2*TP}{2*TP+FP+FN}
s=∣X∣+∣Y∣2∣X⋂Y∣=2∗TP+FP+FN2∗TP
∣
X
⋂
Y
∣
|X\bigcap Y|
∣X⋂Y∣是指X和Y之间的交集,|X|和|Y|分别表示X和Y的元素个数。分子的系数为2,因为分母存在重复计算X和Y之间共同元素。直观上是计算X与Y的相似性,本质上这是同时隐含precision和recall两个指标。
X :分割图像的ground truth
Y:分割图像的predict分割结果
dice系数差异函数为dice loss
d
i
c
e
l
o
s
s
=
1
−
d
i
c
e
=
1
−
2
∣
X
⋂
Y
∣
∣
X
∣
+
∣
Y
∣
dice loss =1-dice = 1-\frac{2|X\bigcap Y|}{|X|+|Y|}
diceloss=1−dice=1−∣X∣+∣Y∣2∣X⋂Y∣训练网络求得极小值
网络最后一层输出为sigmoid
cross-entropy交叉熵损失函数
网络最后一层激活函数为softmax(如果是二分类问题,最后一层用softmax与sigmoid的效果是相同的),softmax适用于二分类多分类,经过softmax之后,各个类别加和为1。
二分类:
第i个神经元的交叉熵为
y
i
l
o
g
(
y
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
)
=
{
−
l
o
g
(
y
i
)
y
^
i
=
1
−
l
o
g
(
1
−
y
i
)
y
^
i
=
0
y_ilog(y_i)+(1-y_i)log(1-y_i)=\begin{cases} -log(y_i) & \quad \hat y_i=1\\ -log(1-y_i) & \quad \hat y_i=0 \end{cases}
yilog(yi)+(1−yi)log(1−yi)={−log(yi)−log(1−yi)y^i=1y^i=0
最后一层总的交叉熵损失函数是
−
∑
i
y
i
l
o
g
(
y
i
)
+
(
1
−
y
i
)
l
o
g
(
1
−
y
i
)
-\sum_iy_ilog(y_i)+(1-y_i)log(1-y_i)
−∑iyilog(yi)+(1−yi)log(1−yi)
y
i
y_i
yi是预测值,
y
^
i
\hat y_i
y^i是标签。
focal loss
focal loss主要是为了解决one stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重。增加了对难分样本的权重。
focal loss是对交叉熵损失函数的改进
L
f
l
=
{
−
(
1
−
y
i
)
γ
l
o
g
(
y
i
)
y
^
i
=
1
−
(
y
i
)
γ
l
o
g
(
1
−
y
i
)
y
^
i
=
0
L_{fl}=\begin{cases} -(1-y_i)^\gamma log(y_i) & \quad \hat y_i = 1\\ -(y_i)^\gamma log(1-y_i) & \quad \hat y_i=0 \end{cases}
Lfl={−(1−yi)γlog(yi)−(yi)γlog(1−yi)y^i=1y^i=0
在原有的基础上加上一
(
1
−
y
i
)
γ
(1-y_i)^\gamma
(1−yi)γ(称为调制系数),其中
γ
>
0
\gamma >0
γ>0使得减少易分类样本的损失,更关注对于困难的、错分的样本。通过减少易分类样本的权重,从而使模型在训练时更加专注于难分类的样本。
首先预测值
y
i
y_i
yi的范围是0到1,不管
γ
\gamma
γ值是多少,这个调制系数都是>=0的。易分样本再多,但是他的权重小,因此对总体的loss贡献不会太大。例如,易分样本
x
1
x_1
x1,他的预测值
y
i
=
0.9
y_i=0.9
yi=0.9,难分样本
x
2
x_2
x2,他的预测值
y
i
=
0.6
y_i=0.6
yi=0.6。对于前者,他的权重是
0.
1
γ
0.1^\gamma
0.1γ,而对于后者,他的权重这是
0.
4
γ
0.4^\gamma
0.4γ。显然后者对loss的贡献更大。
当一个样本被错分时,
y
i
y_i
yi是很小的,比如当
y
^
i
=
1
\hat y_i=1
y^i=1时,
y
i
<
0.5
y_i<0.5
yi<0.5才是错分,此时的
y
i
y_i
yi就比较小,反之亦然。因此调制系数趋于1,相比原来的loss就没有什么变化。又当
y
i
y_i
yi趋于1的时候,此时样本分类正确,并且是易分类样本,此时调制系数趋于0,也就对总的loss贡献很小。
当
γ
=
0
\gamma=0
γ=0的时候,focal loss就是传统的交叉熵损失,当
γ
\gamma
γ增加时,调制系数也会增加。
一般
γ
\gamma
γ取值为2。
此外,加入平衡因子 α \alpha α,用来平衡正负样本本身比例不均。注意, α \alpha α不关注难分样本。
L
f
l
=
{
−
α
(
1
−
y
i
)
γ
l
o
g
(
y
i
)
y
^
i
=
1
−
(
1
−
α
)
(
y
i
)
γ
l
o
g
(
1
−
y
i
)
y
^
i
=
0
L_{fl}=\begin{cases} -\alpha(1-y_i)^\gamma log(y_i) & \quad \hat y_i = 1\\ -(1-\alpha)(y_i)^\gamma log(1-y_i) & \quad \hat y_i=0 \end{cases}
Lfl={−α(1−yi)γlog(yi)−(1−α)(yi)γlog(1−yi)y^i=1y^i=0
前面新加了一个系数
α
\alpha
α。当
y
^
i
=
1
\hat y_i=1
y^i=1时,取
α
\alpha
α,否则取系数取
1
−
α
1-\alpha
1−α。(资料上说,一般而言正样本的比例比负样本的比例多,所以
α
\alpha
α取值为0到0.5来增加负样本的权重。)而我的实际应用场景是正样本的比例远远小于负样本,所以这个
α
\alpha
α的取值应该为0.5到1之间。
论文的实验中,
α
\alpha
α取值为0.25。