语义分割中常用的损失函数

前言

   语义分割任务可以看作像素级的分类任务,在设计基于语义分割的深度学习架构时,尤其是在伪装目标分割的特殊场景下,损失/目标函数的选择非常关键,会直接影响到算法的学习过程,进而影响到模型的收敛速度、分割准确度。

   目前,语义分割种常用的损失函数包括cross entropy, generalized dice coefficient, focal loss 等。

1. cross entropy交叉熵

   逐像素的交叉熵是语义分割中最常用的一种损失函数,一般用来量化两个概率分布之间的差异。
(1)对于二分类的情况,其公式如下:
L = 1 N ∑ i − [ y i ⋅ l o g ( p i ) + ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] L=\frac{1}{N} \sum_i -[y_i \cdot log(p_i)+(1-y_i) \cdot log(1-p_i)] L=N1i[yilog(pi)+(1yi)log(1pi)]

其中:

  • y i y_i yi表示样本i的label,正类为1,负类为-
  • p I p_I pI表示样本i预测为正类的概率

(2)对于多分类的情况
L = − 1 N ∑ i ∑ c = 1 M y i c l o g ( p i c ) L=- \frac{1}{N} \sum_i \sum_{c=1}^M y_{ic}log(p_{ic}) L=N1ic=1Myiclog(pic)
其中:

  • M代表类别的数量
  • y i c y_{ic} yic如果样本i的真实类别等于c取1,否则取0
  • p i c p_{ic} pic观测样本i属于类别c的预测概率

多分类的情况实际上是对二分类的扩展。

2. dice coefficient

   Dice Loss最先由V-Net文章中被提出,目的是为了增强网络对于医学影像中细小结构的分割能力,解决在学习过程中损失函数陷入局部最小值,导致前景区域特征丢失的问题。

   Dice系数是一种度量集合相似度的函数,通常用于计算两个样本的相似度,取值范围在[0, 1]:
s = 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ s=\frac{2 \lvert X \cap Y \rvert}{\lvert X \rvert + \lvert Y \rvert} s=X+Y2XY
   其中, ∣ X ∩ Y ∣ \lvert X \cap Y \rvert XY是X和Y集合的交集的元素个数, ∣ X ∣ \lvert X \rvert X ∣ Y ∣ \lvert Y \rvert Y分别表示X和Y的元素的个数。分子系数为2,是因为分母中存在重复计算X和Y之间的共同元素的原因。

   Dice越大则表示两个集合的元素之间越相似,也就说明模型训练得越好。
   Dice Loss:
d = 1 − 2 ∣ X ∩ Y ∣ ∣ X ∣ + ∣ Y ∣ d=1-\frac{2 \lvert X \cap Y \rvert}{\lvert X \rvert + \lvert Y \rvert} d=1X+Y2XY
   为了避免分子被0除和减少过拟合,一般会在分子分母上同时加一个常数:
d = 1 − 2 ∣ X ∩ Y ∣ + ϵ ∣ X ∣ + ∣ Y ∣ + ϵ d=1-\frac{2 \lvert X \cap Y \rvert + \epsilon}{\lvert X \rvert + \lvert Y \rvert + \epsilon} d=1X+Y+ϵ2XY+ϵ

  • Dice-coefficient loss function vs cross-entropy

(1)交叉熵损失函数的优点在于交叉熵值关于logits的梯度计算形式类似于p-t,其中,p代表softmax输出的预测值,t代表真实标签。而dice-coefficient的loss值为 2 p t p 2 + t 2 \frac{2pt}{p^2+t^2} p2+t22pt 2 p t p + t \frac{2pt}{p+t} p+t2pt,其关于p的梯度形式很复杂: 2 t ( t 2 − p 2 ) ( p 2 + t 2 ) 2 \frac{2t(t^2-p^2)}{{(p^2+t^2)}^2} (p2+t2)22t(t2p2) 2 t 2 ( p + t ) 2 \frac{2t^2}{{(p+t)}^2} (p+t)22t2。当p和t的值都很小时,计算得到的梯度值可能会非常大,导致训练更加不稳定。

(2)采用Dice-coefficient的原因在于分割的最终目标就是使IOU和dice-coefficient最大,而交叉熵仅是一种代理函数。

(3)为什么Dice-coefficient对于类别不均衡问题,效果可能更好?

   图像分割任务中,softmax 交叉熵loss 是对每一个像素点进行类别预测,然后平均所有的像素点. 其本质上仍是对图片的每个像素进行平等的学习,这就导致如果图像上的多种类别存在不平衡时,模型的训练会由最主流的类别所主导. 网络更偏向于对主流类别的学习,而降低了对非主流类别的特征提取能力.

   而Dice loss 通过预测和GT的交集除以它们的总体像素进行计算,将一个类别的所有像素作为一个整体进行考量,而且计算交集在总体中的比例,所以不会受大量主流像素的影响,能够提取更好的效果.

实际中,dice loss 往往与 bce loss (binary cross entropy loss)结合使用,以提升模型训练的稳定性.

3. focal loss

   focal loss是何恺明团队为了解决one-stage目标检测中类别不平衡(class imbalance)的问题而提出的一种损失函数。类别不平衡问题是指在对一张图像进行目标检测时,需要评估 1 0 4 10^4 104 1 0 5 10^5 105个侯选位置,但是其中只有少数位置包含目标对象。这导致了两个问题:

(1)训练效率低。将样本分为positive和negative两类,由于大部分位置都是negative样本,使用交叉熵损失函数进行计算时,negative样本的贡献远大于positive样本,从而不利于整个目标函数的收敛。

(2)大部分negative样本位于背景区,只有极少的negative样本位于前景和背景的过渡区。位于背景区的negative样本分类相对容易,称为easy negative样本。easy negative样本在训练时对应的score很大,loss很小。在梯度下降法对模型参数进行更新时,easy negative样本对参数收敛作用有限。从而导致hard negative样本很难得到更新,效果不佳。

   focal loss论文中认为,导致上述两个问题的原因在于传统的交叉熵损失函数只关注了positive \ negative样本,而没有区分easy \ hard样本。所以在传统交叉熵损失的基础上引入了调制因子 ( 1 − p t ) γ (1-p_t)^\gamma (1pt)γ,公式如下:
F L ( p t ) = − ( 1 − p t ) γ l o g ( p t ) FL(p_t)=-(1-p_t)^\gamma log(p_t) FL(pt)=(1pt)γlog(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={p,1p,if y=1otherwise
   其中, y ∈ { ± 1 } y \in \lbrace \pm1 \rbrace y{±1}代表真实标签。 p ∈ [ 0 , 1 ] p \in [0, 1] p[0,1]代表模型对于标签y=1的估计概率。

注意到focal loss有两个性质:

(1)当一个样本被错误分类时, p t p_t pt的值很小,调制因子接近于1,loss不受影响;当 p t → 1 p_t \rightarrow 1 pt1时,因子接近于0,降低分类正确的样本的权重。

(2)超参数 γ \gamma γ可以灵活调整调制因子的作用。当 γ = 0 \gamma = 0 γ=0时,FL相当于传统的交叉熵损失;当 γ \gamma γ增加时,调制因子的作用也会增加。

   整体而言,调制因子 ( 1 − p t ) γ (1-p_t)^\gamma (1pt)γ降低了easy样本对于损失值的贡献,并且增加了被错误分类的样本在损失函数中的权重。

Trick
一般在初始化参数的时候,会让最后一层分类层每个类别服从等概分布,但是由于negative样本非常多,等概之后明显增加了negative样本在训练时的loss,导致训练初期不稳定。好的做法是让最后一层的分布符合正样本相对负样本的分布

参考

对于语义分割任务,常用损失函数是交叉熵损失函数。然而,使用传统的交叉熵损失函数存在一些问题,如类别不平衡和边界模糊等。因此,有一些改进的方法可以提高语义分割的精度和性能。 1. 权重交叉熵损失函数(Weighted Cross Entropy Loss):通过赋予不同类别的像素不同的权重,可以解决类别不平衡问题。通常,权重可以根据每个类别在训练集的频率进行计算,使得少数类别的像素有更大的权重。 2. 评估指标损失函数(IoU Loss):交叉熵损失函数只关注像素级别的分类准确性,而忽略了目标物体的边界准确性。为了解决这个问题,可以使用评估指标损失函数(如Intersection over Union,简称IoU)来度量预测结果和真实标签之间的重叠程度。通过最大化IoU值,可以提高边界的精度。 3. 多尺度损失函数(Multi-scale Loss):语义分割任务通常需要同时考虑局部和全局信息。为了综合考虑不同尺度上的特征,可以设计多尺度损失函数。一种常见的方法是使用多个尺度的预测结果,并分别计算它们的损失函数,然后将损失函数进行加权求和。 4. 上下文注意力损失函数(Context Attention Loss):为了提高语义分割的精度,可以引入上下文信息。一种常见的方法是使用注意力机制,将图像的上下文信息融合到特征表示。通过设计上下文注意力损失函数,可以引导模型更好地利用上下文信息进行语义分割。 这些改进的损失函数可以结合使用,也可以根据具体任务的特点选择适合的方法。同时,还可以通过数据增强、模型结构优化等其他方法进一步提高语义分割的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值