零基础入门语义分割-Task4 评价函数与损失函数

本文内容主要介绍语义分割中的评价函数和损失函数。

常见的评价函数

  • Dice
  • IoU
  • BCE
  • Focal Loss
  • Lovász-Softmax

Dice评价指标

Dice系数

Dice系数(Dice coefficient)是常见的评价分割效果的方法之一,同样也可以改写成损失函数用来度量prediction和target之间的距离。Dice系数定义如下:

D i c e ( T , P ) = 2 ∣ T ∩ P ∣ ∣ T ∣ ∪ ∣ P ∣ = 2 T P F P + 2 T P + F N Dice (T, P) = \frac{2 |T \cap P|}{|T| \cup |P|} = \frac{2TP}{FP+2TP+FN} Dice(T,P)=TP2TP=FP+2TP+FN2TP 式中: T T T表示真实前景(target), P P P表示预测前景(prediction)。Dice系数取值范围为 [ 0 , 1 ] [0,1] [0,1],其中值为1时代表预测与真实完全一致。仔细观察,Dice系数与分类评价指标中的F1 score很相似:

F 1 = 2 ⋅ P ⋅ R P + R F1 = 2\cdot \frac{P\cdot R}{P+R} F1=2P+RPR
  F 1 = 2 T P F P + 2 T P + F N \ F1 = \frac{2TP}{FP+2TP+FN}  F1=FP+2TP+FN2TP

所以,Dice系数不仅在直观上体现了target与prediction的相似程度,同时其本质上还隐含了精确率和召回率两个重要指标。

计算Dice时,将 ∣ T ∩ P ∣ |T \cap P| TP近似为prediction与target对应元素相乘再相加的结果。 ∣ T ∣ |T| T ∣ P ∣ |P| P的计算直接进行简单的元素求和(也有一些做法是取平方求和),如下示例: ∣ T ∩ P ∣ = [ 0.01 0.03 0.02 0.02   0.05 0.12 0.09 0.07   0.89 0.85 0.88 0.91   0.99 0.97 0.95 0.97   ] ∗ [ 0 0 0 0   0 0 0 0   1 1 1 1   1 1 1 1   ] → [ 0 0 0 0   0 0 0 0   0.89 0.85 0.88 0.91   0.99 0.97 0.95 0.97   ] → s u m 7.41 |T \cap P| = \begin{bmatrix} 0.01 & 0.03 & 0.02 & 0.02 \ 0.05 & 0.12 & 0.09 & 0.07 \ 0.89 & 0.85 & 0.88 & 0.91 \ 0.99 & 0.97 & 0.95 & 0.97 \ \end{bmatrix} * \begin{bmatrix} 0 & 0 & 0 & 0 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 \ \end{bmatrix} \stackrel{}{\rightarrow} \begin{bmatrix} 0 & 0 & 0 & 0 \ 0 & 0 & 0 & 0 \ 0.89 & 0.85 & 0.88 & 0.91 \ 0.99 & 0.97 & 0.95 & 0.97 \ \end{bmatrix} \stackrel{sum}{\rightarrow} 7.41 TP=[0.010.030.020.02 0.050.120.090.07 0.890.850.880.91 0.990.970.950.97 ][0000 0000 1111 1111 ][0000 0000 0.890.850.880.91 0.990.970.950.97 ]sum7.41

∣ T ∣ = [ 0.01 0.03 0.02 0.02   0.05 0.12 0.09 0.07   0.89 0.85 0.88 0.91   0.99 0.97 0.95 0.97   ] → s u m 7.82 |T| = \begin{bmatrix} 0.01 & 0.03 & 0.02 & 0.02 \ 0.05 & 0.12 & 0.09 & 0.07 \ 0.89 & 0.85 & 0.88 & 0.91 \ 0.99 & 0.97 & 0.95 & 0.97 \ \end{bmatrix} \stackrel{sum}{\rightarrow} 7.82 T=[0.010.030.020.02 0.050.120.090.07 0.890.850.880.91 0.990.970.950.97 ]sum7.82

∣ P ∣ = [ 0 0 0 0   0 0 0 0   1 1 1 1   1 1 1 1   ] → s u m 8 |P| = \begin{bmatrix} 0 & 0 & 0 & 0 \ 0 & 0 & 0 & 0 \ 1 & 1 & 1 & 1 \ 1 & 1 & 1 & 1 \ \end{bmatrix} \stackrel{sum}{\rightarrow} 8 P=[0000 0000 1111 1111 ]sum8

Dice Loss

Dice Loss是在V-net模型中被提出应用的,是通过Dice系数转变而来,其实为了能够实现最小化的损失函数,以方便模型训练,以 1 − D i c e 1 - Dice 1Dice的形式作为损失函数: L = 1 − 2 ∣ T ∩ P ∣ ∣ T ∣ ∪ ∣ P ∣ L = 1-\frac{2 |T \cap P|}{|T| \cup |P|} L=1TP2TP 在一些场合还可以添加上Laplace smoothing减少过拟合: L = 1 − 2 ∣ T ∩ P ∣ + 1 ∣ T ∣ ∪ ∣ P ∣ + 1 L = 1-\frac{2 |T \cap P| + 1}{|T| \cup |P|+1} L=1TP+12TP+1

代码实现

import numpy as np

def dice(output, target):
    '''计算Dice系数'''
    smooth = 1e-6 # 避免0为除数
    intersection = (output * target).sum()
    return (2. * intersection + smooth) / (output.sum() + target.sum() + smooth)

# 生成随机两个矩阵测试
target = np.random.randint(0, 2, (3, 3))
output = np.random.randint(0, 2, (3, 3))

d = dice(output, target)
# ----------------------------
target = array([[1, 0, 0],
       			[0, 1, 1],
			    [0, 0, 1]])
output = array([[1, 0, 1],
       			[0, 1, 0],
       			[0, 0, 0]])
d = 0.5714286326530524

IoU评价指标

IoU(intersection over union)指标就是常说的交并比,不仅在语义分割评价中经常被使用,在目标检测中也是常用的评价指标。顾名思义,交并比就是指target与prediction两者之间交集与并集的比值: I o U = T ∩ P T ∪ P = T P F P + T P + F N IoU=\frac{T \cap P}{T \cup P}=\frac{TP}{FP+TP+FN} IoU=TPTP=FP+TP+FNTP 仍然以人物前景分割为例,如下图,其IoU的计算就是使用 i n t e r s e c t i o n / u n i o n intersection / union intersection/union

iou公式和Dice非常相似。
在这里插入图片描述

BCE损失函数

BCE损失函数(Binary Cross-Entropy Loss)是交叉熵损失函数(Cross-Entropy Loss)的一种特例,BCE Loss只应用在二分类任务中。针对分类问题,单样本的交叉熵损失为: l ( y , y ^ ) = − ∑ i = 1 c y i ⋅ l o g y ^ i l(\pmb y, \pmb{\hat y})=- \sum_{i=1}^{c}y_i \cdot log\hat y_i l(yyy,y^y^y^)=i=1cyilogy^i 式中, y = y 1 , y 2 , . . . , y c , \pmb{y}={y_1,y_2,...,y_c,} yyy=y1,y2,...,yc,,其中 y i y_i yi是非0即1的数字,代表了是否属于第 i i i类,为真实值; y ^ i \hat y_i y^i代表属于第i类的概率,为预测值。可以看出,交叉熵损失考虑了多类别情况,针对每一种类别都求了损失。针对二分类问题,上述公式可以改写为: l ( y , y ^ ) = − [ y ⋅ l o g y ^ + ( 1 − y ) ⋅ l o g ( 1 − y ^ ) ] l(y,\hat y)=-[y \cdot log\hat y +(1-y)\cdot log (1-\hat y)] l(y,y^)=[ylogy^+(1y)log(1y^)] 式中, y y y为真实值,非1即0; y ^ \hat y y^为所属此类的概率值,为预测值。这个公式也就是BCE损失函数,即二分类任务时的交叉熵损失。值得强调的是,公式中的 y ^ \hat y y^为概率分布形式,因此在使用BCE损失前,都应该将预测出来的结果转变成概率值,一般为sigmoid激活之后的输出。

4.6 Focal Loss

Focal loss最初是出现在目标检测领域,主要是为了解决正负样本比例失调的问题。那么对于分割任务来说,如果存在数据不均衡的情况,也可以借用focal loss来进行缓解。Focal loss函数公式如下所示:

l o s s = − 1 N ∑ i = 1 N ( α y i ( 1 − p i ) γ log ⁡ p i + ( 1 − α ) ( 1 − y i ) p i γ log ⁡ ( 1 − p i ) ) loss = -\frac{1}{N} \sum_{i=1}^{N}\left(\alpha y_{i}\left(1-p_{i}\right)^{\gamma} \log p_{i}+(1-\alpha)\left(1-y_{i}\right) p_{i}^{\gamma} \log \left(1-p_{i}\right)\right) loss=N1i=1N(αyi(1pi)γlogpi+(1α)(1yi)piγlog(1pi)) 仔细观察就不难发现,它其实是BCE扩展而来,对比BCE其实就多了个 α ( 1 − p i ) γ 和 ( 1 − α ) p i γ \alpha(1-p_{i})^{\gamma}和(1-\alpha)p_{i}^{\gamma} α(1pi)γ(1α)piγ 为什么多了这个就能缓解正负样本不均衡的问题呢?见下图:
在这里插入图片描述

简单来说: α α α解决样本不平衡问题, γ γ γ解决样本难易问题。

也就是说,当数据不均衡时,可以根据比例设置合适的 α α α,这个很好理解,为了能够使得正负样本得到的损失能够均衡,因此对loss前面加上一定的权重,其中负样本数量多,因此占用的权重可以设置的小一点;正样本数量少,就对正样本产生的损失的权重设的高一点。

那γ具体怎么起作用呢?以图中 γ = 5 γ=5 γ=5曲线为例,假设 g t gt gt类别为1,当模型预测结果为1的概率 p t p_t pt比较大时,我们认为模型预测的比较准确,也就是说这个样本比较简单。而对于比较简单的样本,我们希望提供的loss小一些而让模型主要学习难一些的样本,也就是 p t → 1 p_t→ 1 pt1则loss接近于0,既不用再特别学习;当分类错误时, p t → 0 p_t → 0 pt0则loss正常产生,继续学习。对比图中蓝色和绿色曲线,可以看到,γ值越大,当模型预测结果比较准确的时候能提供更小的loss,符合我们为简单样本降低loss的预期。

4.7 Lovász-Softmax

IoU是评价分割模型分割结果质量的重要指标,因此很自然想到能否用 1 − I o U 1-IoU 1IoU(即Jaccard loss)来做损失函数,但是它是一个离散的loss,不能直接求导,所以无法直接用来作为损失函数。为了克服这个离散的问题,可以采用lLovász extension将离散的Jaccard loss 变得连续,从而可以直接求导,使得其作为分割网络的loss function。Lovász-Softmax相比于交叉熵函数具有更好的效果。

论文地址:

paper on CVF open access

arxiv paper

代码实现

论文作者已经给出了Lovász-Softmax实现代码,并且有pytorch和tensorflow两种版本,并提供了使用demo。此处将针对多分类任务的Lovász-Softmax源码进行展示。

Lovász-Softmax实现链接:https://github.com/bermanmaxim/LovaszSoftmax

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值