语义分割损失总结

本文汇总了从CVPR2015至2018年间及ECCV2018发表的图像分割算法,详细介绍了各算法的年份、标题、是否使用辅助分类损失、主损失类型、总损失构成及其备注,涵盖了FCN、PSPNet、ContextEncoding等知名算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

年份

标题

是否采用辅助分类损失lossauxiliary

主损失lossmain

 

总loss

备注

CVPR 2015

Fully Convolutional Networks for Semantic Segmentation

Softmax loss

lossmain 

 

CVPR 2017

Semantic Segmentation--Pyramid Scene Parsing Network(PSPNet)

是/ Softmax loss, https://i-blog.csdnimg.cn/blog_migrate/266fd53d0ffe228c7cb38c1963fc4868.png

Softmax loss

lossmain  +0.4lossauxiliary

 

CVPR 2018

Context Encoding for Semantic Segmentation

Cross-entropy loss

Cross-entropy loss

lossmain  +0.2lossauxiliary

 

CVPR 2018

Convolutional Neural Networks with Alternately Updated Clique

Cross-entropy loss

lossmain 

 

CVPR 2018

DenseASPP for Semantic Segmentation in Street Scenes

 

Cross-entropy loss

 

lossmain 

 

CVPR 2018

Learning a Discriminative Feature Network for Semantic Segmentation

是/ semantic boundary loss(focal loss)

Cross-entropy loss

λ=0.1

semantic boundary loss的标签是由mask图像二值化提取canny边缘得到的,不是分类损失

2018

OCNet: Object Context Network for Scene Parsing

是/ Softmax loss,

Softmax loss

lossmain  +0.4lossauxiliary

 

2018

Pyramid Attention Network

for Semantic Segmentation

Softmax loss

lossmain

 

ECCV 2018

BiSeNet: Bilateral Segmentation Network for

Real-time Semantic Segmentation

是/ Softmax loss,

Softmax loss

α=1 K=3;Xi is the output feature from stage i of Xception model

 

 

Loss

公式

特点

Log loss

https://private.codecogs.com/gif.latex?L%20%3D%20-y%5Ccdot%20log%28y%5E%7B%27%7D%29%20-%20%281-y%29%5Ccdot%20log%281-y%29

可化为:

https://private.codecogs.com/gif.latex?L%20%3D%20%5Cleft%5C%7B%5Cbegin%7Bmatrix%7D%20-log%28y%5E%7B%27%7D%29%20%26%20y%20%3D%201%20%26%20%5C%5C%20-log%281-y%5E%7B%27%7D%29%20%26%20y%3D0%20%5Cend%7Bmatrix%7D%5Cright.

当正样本数量远远小于负样本的数量时,即y=0的数量远大于y=1的数量,loss函数中y=0的成分就会占据主导,使得模型严重偏向背景。

所以对于背景远远大于目标的分割任务,Log loss效果非常不好

Dice Loss

定义两个轮廓区域的相似程度,用A、B表示两个轮廓区域所包含的点集,定义为:

https://private.codecogs.com/gif.latex?DSC%28A%2CB%29%20%3D%202%5Cleft%20%7C%20A%5Ccap%20B%20%5Cright%20%7C/%28%5Cleft%20%7C%20A%20%5Cright%20%7C%20+%20%5Cleft%20%7C%20B%20%5Cright%20%7C%29

loss为:

https://i-blog.csdnimg.cn/blog_migrate/21f8c94fc0a85564a9fd3dfd963fdf70.png

Dice Loss其实也可以分为两个部分,一个是前景的loss,一个是物体的loss,但是在实现中,往往只关心物体的loss

FocaL Loss

https://i-blog.csdnimg.cn/blog_migrate/c207b5399b40e8a07128f48e9bab936e.png

γ>0,论文中2为最优

  1. 首先在原有的基础上加了一个因子,其中γ>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本

例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。

  1. 此外,加入平衡因子α,用来平衡正负样本本身的比例不均。
  2. 只添加α虽然可以平衡正负样本的重要性,但是无法解决简单与困难样本的问题。

γ调节简单样本权重降低的速率,当γ为0时即为交叉熵损失函数,当γ增加时,调整因子的影响也在增加

 

### 关于语义分割中的常用损失函数 在深度学习领域,尤其是针对图像处理任务如语义分割,设计合适的损失函数对于模型性能至关重要。以下是几种常用的损失函数及其特点: #### 1. **交叉熵损失 (Cross-Entropy Loss)** 交叉熵损失是最常见的用于分类问题的损失函数之一,在像素级分类任务中也广泛适用。它衡量预测概率分布与真实标签之间的差异。 公式如下: \[ L_{CE} = - \frac{1}{N} \sum_{i=1}^{N} y_i \log(\hat{y}_i) \] 其中 \( N \) 是样本数量,\( y_i \) 表示真实的类别标签,而 \( \hat{y}_i \) 则表示模型预测的概率值[^2]。 这种损失函数适用于二分类或多分类场景下的语义分割任务,并且可以轻松集成到 PyTorch 和 TensorFlow 中。 ```python import torch.nn as nn criterion = nn.CrossEntropyLoss() ``` --- #### 2. **Dice 损失 (Dice Loss)** Dice 损失基于 Sørensen-Dice 系数,主要用于评估两个集合之间的相似度。其目标是最大化预测掩码与实际掩码之间的重叠区域。 公式定义为: \[ DSC(A, B) = \frac{2|A \cap B|}{|A| + |B|} \] 为了将其转化为可优化的目标函数,通常取负号作为损失项: \[ L_{Dice} = 1 - DSC(A, B) \][^3] 该方法特别适合解决前景背景比例不均衡的情况。 实现代码如下所示: ```python def dice_loss(preds, targets, smooth=1e-6): preds_flat = preds.view(-1) targets_flat = targets.view(-1) intersection = (preds_flat * targets_flat).sum() union = preds_flat.sum() + targets_flat.sum() return 1 - ((2.0 * intersection + smooth) / (union + smooth)) ``` --- #### 3. **Jaccard/IOU 损失 (Intersection over Union Loss)** IoU 或 Jaccard Index 类似 Dice Coefficient,但它计算的是交集占并集的比例。通过最小化 IoU 的补集来构建损失函数。 表达式形式为: \[ IoU(A, B) = \frac{|A \cap B|}{|A \cup B|} \] 对应的损失函数则写成: \[ L_{IoU} = 1 - IoU(A, B) \][^4] 此方式同样能够有效应对类不平衡现象。 下面是 Tensorflow 实现版本的一个例子: ```python from tensorflow.keras import backend as K def iou_loss(y_true, y_pred, smooth=1e-6): intersection = K.sum(K.abs(y_true * y_pred), axis=-1) union = K.sum(K.abs(y_true)+K.abs(y_pred), axis=-1) - intersection loss = 1 - K.mean((intersection + smooth) / (union + smooth), axis=0) return loss ``` --- #### 4. **Focal Loss** 当数据集中存在严重的正负样本不平衡时,标准交叉熵可能无法很好地发挥作用。为此提出的 Focal Loss 对难分样本赋予更高的权重,从而缓解这一问题。 具体而言,原始交叉熵被调整为加权的形式: \[ FL(p_t) = -(1-p_t)^{\gamma}\log(p_t) \] 这里 \( p_t \) 是估计属于正确类别的概率,参数 γ 控制聚焦的程度[^5]。 PyTorch 下面提供了一个简单实现方案: ```python class FocalLoss(nn.Module): def __init__(self, alpha=1, gamma=2, reduction='mean'): super(FocalLoss, self).__init__() self.alpha = alpha self.gamma = gamma self.reduction = reduction def forward(self, inputs, targets): ce_loss = nn.CrossEntropyLoss(reduction="none")(inputs, targets) pt = torch.exp(-ce_loss) focal_loss = self.alpha * (1-pt)**self.gamma * ce_loss if self.reduction == 'mean': return focal_loss.mean() elif self.reduction == 'sum': return focal_loss.sum() else: return focal_loss ``` --- #### 总结 以上列举了几种主流应用于语义分割任务上的损失函数,每一种都有各自的优势以及适应范围。选择何种取决于具体的业务需求和技术条件等因素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值