PaddleSeg Loss Functions Complete Guide: Cross Entropy, Lovasz, OHEM, Dice and More
发布时间:2026/9/27 8:37:01来源:尧图网络
人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载PaddleSeg 内置了一套完整、可插拔的损失函数库paddleseg.models.losses覆盖从基础交叉熵到 OHEM 难样本挖掘、Lovasz 系列、Dice、语义连通性SCL等语义分割常用损失。本指南以官方文档 losses_en.md 为主体结合 损失函数源码 与真实训练配置逐项讲解每个损失类的数学背景、构造参数、默认值、适用场景与 YAML 配置方法。读完本文你将能够在 PaddleSeg 的loss配置段中自由组合并加权多种损失如 CrossEntropy LovaszSoftmax、针对类别不均衡与难样本问题选择合适的损失以及通过 MixedLoss 实现多损失混合训练而无需改动网络代码。损失函数库总览注册机制与模块结构PaddleSeg 的所有损失类都位于 paddleseg/models/losses/ 目录并通过manager.LOSSES.add_component装饰器注册到统一的组件管理器中见 paddleseg/cvlibs/manager.py。这意味着训练时只需在 YAML 配置中按名称引用损失类型框架会自动完成类的实例化与调用无需修改任何训练代码。从 损失库__init__.py的导出列表可以确认官方文档详细讲解的损失包括模块文件损失类cross_entropy_loss.pyCrossEntropyLossbinary_cross_entropy_loss.pyBCELossbootstrapped_cross_entropy.pyBootstrappedCrossEntropyLossdecoupledsegnet_relax_boundary_loss.pyRelaxBoundaryLossdice_loss.pyDiceLossgscnn_dual_task_loss.pyDualTaskLossedge_attention_loss.pyEdgeAttentionLossl1_loss.pyL1Losslovasz_loss.pyLovaszSoftmaxLoss/LovaszHingeLossmean_square_error_loss.pyMSELossohem_cross_entropy_loss.pyOhemCrossEntropyLossohem_edge_attention_loss.pyOhemEdgeAttentionLosssemantic_connectivity_loss.pySemanticConnectivityLossmixed_loss.pyMixedLoss此外从源码结构可以推断该模块还实现了FocalLoss、KLLoss、RMILoss、DetailAggregateLoss、PointCrossEntropyLoss、PixelContrastCrossEntropyLoss、SECrossEntropyLoss、MaskFormerLoss、DistillationLoss、DistillCrossEntropyLoss等更多损失用于特定模型如 MaskFormer、蒸馏训练它们与上述 14 个类共用同一注册与配置机制。YAML 配置范式如何声明与组合损失PaddleSeg 的损失配置段位于模型配置文件中的loss:字段采用类型列表 加权系数的结构。以下配置展示了如何将CrossEntropyLoss与LovaszSoftmaxLoss通过MixedLoss组合完整示例见 configs/ocrnet/ocrnet_hrnetw18_cityscapes_1024x512_160k_lovasz_softmax.ymlloss: types: - type: MixedLoss losses: - type: CrossEntropyLoss - type: LovaszSoftmaxLoss coef: [0.8, 0.2] coef: [1]其中外层的coef对应网络多个输出的加权系数一般网络只有一个 logit 输出故为[1]内层MixedLoss的coef则是组合内各损失函数的权重。若某个损失需要传递构造参数直接在类型下方平铺键值即可例如loss: types: - type: OhemCrossEntropyLoss thresh: 0.7 min_kept: 10000 coef: [1]CrossEntropyLoss语义分割最常用的基线损失交叉熵Cross Entropy, CE因其简单有效已成为最流行的损失函数之一它描述了两个概率分布之间的差异可用于衡量当前模型与真实模型训练过程中我们将给定的标注集视为真实世界的模型之间的差距。机器学习中的逻辑回归正是交叉熵的一种特例。在语义分割中它允许针对不同类别的像素调整权重从而缓解多类别样本不均衡问题。class paddleseg.models.losses.CrossEntropyLoss( weight None, ignore_index 255, top_k_percent_pixels 1.0 )参数说明参数类型默认值说明weighttuple/list/ndarray/Tensor可选None各类别的手动重缩放权重长度必须等于类别数。在多种类样本不均衡时可用于调整各类权重。从源码cross_entropy_loss.py看权重会被转为 float32 的 Tensor且若logit的类别通道数与权重长度不一致会抛出ValueErrorignore_indexint64可选255标注图中指定被忽略的像素值这些像素不参与梯度计算。当标注图存在无法或难以标注的像素时可将其标记为特定灰度值计算损失时这些像素不作为损失函数的自变量top_k_percent_pixelsfloat可选1.0取值区间 [0.0, 1.0]。当值 1.0 时只对 top k 百分比的像素计算损失例如 top 20% 像素适用于难像素挖掘hard pixel mining源码补充该类的forward(logit, label, semantic_weightsNone)还支持传入semantic_weights对每个像素的损失进行加权同时实现了avg_non_ignore是否仅对非忽略像素求平均默认 True与data_formatNCHW/NHWC默认 NCHW两个扩展参数这在 NHWC 布局的部署场景中有用。类内部还维护了EPS 1e-8的小量用于数值稳定。BCELoss二分类与多标签分割二值交叉熵适用于二分类和多标签分类任务。它基于标注图的概率模型用二值语义分割模型计算 KL 散度根据 Gibbs 不等式两者交叉熵大于语义分割概率模型的熵。计算 BCELoss 时通常忽略语义分割概率模型的熵因为它是常数仅使用 KL 散度的一部分作为损失函数。class paddleseg.models.losses.BCELoss( weight None, pos_weight None, ignore_index 255, edge_label False )参数说明参数类型默认值说明weightTensor | str可选None对每个 batch 元素的损失进行手动重缩放的权重。若给定须是大小为[N,]的 1D Tensorfloat32/float64。若类型为 str则必须等于dynamic表示每一步动态计算权重pos_weightfloat | str可选None正样本的权重。若类型为 str必须等于dynamic表示每一步动态计算权重ignore_indexint64可选255同上标注图中被忽略的像素值不参与梯度计算edge_labelbool可选False是否使用边缘标签BootstrappedCrossEntropyLoss迭代自举的硬样本学习自举Bootstrapping方法先用样本构建一个初始分类然后迭代地对未标注样本进行分类再用扩充后的训练数据为未标注样本提取新的种子规则。该损失可参考文献 Learning from Noisy Labels with Deep Neural NetworksarXiv:1412.6596中提出的思想通过只对损失超过阈值的像素计算损失聚焦于模型当前难以正确分类的样本。class paddleseg.models.losses.BootstrappedCrossEntropyLoss( min_K, loss_th, weight None, ignore_index 255 )参数说明参数类型默认值说明min_Kint必填无参与损失计算的像素的最少数量loss_thfloat必填无损失阈值只有损失大于该阈值的像素才被计算weighttuple/list可选None不同类别的权重ignore_indexint可选255标注图中被忽略的像素值不参与梯度计算RelaxBoundaryLoss面向 DecoupleSegNet 的边界松弛损失RelaxBoundaryLoss 专为 DecoupleSegNet 设计由多个部分组成主特征损失、边缘特征损失和交叉熵损失。该模型对边界像素可能归属的类别≥2进行预测此损失在边界松弛约束下最大化单个像素各类别概率之和。class paddleseg.models.losses.RelaxBoundaryLoss( border 1, calculate_weights False, upper_bound 1.0, ignore_index 255 )参数说明参数类型默认值说明borderint可选1边界松弛relax的像素宽度值calculate_weightsbool可选False是否为每个类别计算权重upper_boundfloat可选1.0若为各类别计算权重权重的上界ignore_indexint64255标注图中被忽略的像素值不参与梯度计算DiceLoss医学影像分割的经典损失Dice Loss 广泛应用于医学图像分割任务。Dice 系数用于度量集合间的相似程度在语义分割中可理解为当前模型与真实模型在真实世界中的相似度。其计算过程包括预测分割图与 GT 分割图的逐点相乘、对乘积结果逐位置累加求和最终以1 - Dice作为损失输出即Dice 1 - 2(|X∩Y| / (|X| |Y|))可引入 Laplacian 平滑系数smooth同时加在分子与分母上既避免除零异常又能抑制过拟合Dice_smooth 1 - 2((|X∩Y| smooth) / (|X| |Y| smooth))class paddleseg.models.losses.DiceLoss( ignore_index 255, smooth 0. )参数说明参数类型默认值说明ignore_indexint64可选255标注图中被忽略的像素值不参与梯度计算smoothfloat可选0平滑参数可加在分子分母上防止除零异常也可设置更大的平滑值Laplacian 平滑以避免过拟合DualTaskLoss双任务一致性的半监督约束DualTaskLoss 用于半监督学习通过双任务一致性来约束模型强化多个任务之间的一致性。其实现位于 gscnn_dual_task_loss.py与 GSCNNGated Shape CNN架构配套使用。class paddleseg.models.losses.DualTaskLoss( ignore_index 255, tau 0.5 )参数说明参数类型默认值说明ignore_indexint64255标注图中被忽略的像素值不参与梯度计算taufloat0.5Gumbel softmax 采样的温度参数 tauEdgeAttentionLoss边缘检测与注意力机制的结合EdgeAttentionLoss 适用于编码器提取边缘、解码器进行加权聚合的多任务训练场景是将边缘检测与注意力机制相结合的多损失联合输出方法。注意该损失面向多类别的logit与真实标注而从 ohem_edge_attention_loss.py 的源码看它内部以 BCE 方式在边缘概率与边缘标签间计算损失并与边缘注意力机制融合。class paddleseg.models.losses.EdgeAttentionLoss( edge_threshold 0.8, ignore_index 255 )参数说明参数类型默认值说明edge_thresholdfloat0.8像素值大于该阈值的像素被视为边缘ignore_indexint64255标注图中被忽略的像素值不参与梯度计算L1Loss 与 MSELoss回归型损失L1LossL1 范数损失用于计算最小绝对值偏差目标是最小化估计值与真实值之间绝对差的总和可选择 reduction 策略对损失直接计算结果做进一步处理。class paddleseg.models.losses.L1Loss( reduction mean, ignore_index 255 )MSELoss均方误差损失计算模型预测值与样本真实值之间距离平方的平均值。class paddleseg.models.losses.MSELoss( reduction mean, ignore_index 255 )两者参数一致参数类型默认值说明reductionstr可选mean输出的归约方式候选值为none|mean|sum。none返回未归约的逐元素损失mean返回归约后的均值损失sum返回归约后的求和损失ignore_indexint255标注图中被忽略的像素值不参与梯度计算OhemCrossEntropyLoss在线难样本挖掘OHEMOnline Hard Example Mining旨在处理难样本。在某些情况下存在类别不均衡且标注所有像素困难甚至不可能这会严重限制模型性能。OHEM 算法根据输入模型的样本损失来区分难样本——这些难样本分类精度差、会产生更大的损失从而聚焦训练资源。class paddleseg.models.losses.OhemCrossEntropyLoss( thresh 0.7, min_kept 10000, ignore_index 255 )参数说明参数类型默认值说明threshfloat可选0.7OHEM 的阈值min_keptint可选10000计算损失函数时保留的最少像素数。min_kept与thresh配合使用若thresh设置过高可能导致本轮迭代中损失函数没有输入值因此设置该值可保证至少 topmin_kept个元素不会被过滤掉ignore_indexint64可选255标注图中被忽略的像素值不参与梯度计算源码补充从 ohem_cross_entropy_loss.py 可见该实现同时提供了可选的weight参数类别重缩放权重默认None并维护EPS 1e-5防止 softmax 数值不稳定源码中还针对 NPU、MLU 设备做了适配判断_IS_NPU、_IS_MLU说明该损失支持在多种硬件后端上训练。OhemEdgeAttentionLoss难样本 边缘注意力当类别不均衡导致难样本问题时若还想提升边缘提取的性能可选用该损失。它在 EdgeAttentionLoss 的基础上叠加了 OHEM 机制既保留边缘注意力结构又只对难样本计算损失。class paddleseg.models.losses.OhemEdgeAttentionLoss( edge_threshold 0.8, thresh 0.7, min_kept 5000, ignore_index 255 )参数说明参数类型默认值说明edge_thresholdfloat可选0.8像素值大于该阈值的像素被视为边缘threshfloat可选0.7OHEM 的阈值min_keptint可选5000计算损失时保留的最少像素数与thresh配合防止过滤掉全部像素注意其默认值 5000 小于 OhemCrossEntropyLoss 的 10000ignore_indexint64可选255标注图中被忽略的像素值不参与梯度计算SemanticConnectivityLoss面向连通性的语义损失SCLSemantic Connectivity-aware Learning框架引入 SC LossSemantic Connectivity-aware Loss从连通性connectivity的角度提升分割结果质量支持多类分割。该工作出自 PP-HumanSeg: Connectivity-Aware Portrait Segmentation with a Large-Scale Teleconferencing Video DatasetWACV 2022 workshoparXiv:2112.07146。其运行流程分为两步连通分量计算Connected Components Calculation连通分量匹配与 SC Loss 计算Connected Components Matching and SC Loss Calculationclass paddleseg.models.losses.SemanticConnectivityLoss( ignore_index 255, max_pred_num_conn 10, use_argmax True )参数说明参数类型默认值说明ignore_indexint255标注图中被忽略的像素值不参与梯度计算max_pred_num_connint10预测连通分量的最大数量。训练初期连通分量数量庞大、计算非常耗时因此需要限制预测连通分量的最大数量其余部分不参与计算use_argmaxboolTrue是否对 logits 使用 argmax 得到类别预测Lovasz 系列损失直接优化 mIoU 的利器在图像分割任务中经常出现类别分布不均衡的情况例如工业产品缺陷检测、道路提取、病灶区域提取等场景。Lovasz loss 正是为解决这一问题而设计的它基于子模损失submodular losses的凸 Lovasz 扩展直接优化神经网络的均值 IoU 损失。根据分割目标类别数Lovasz loss 分为两种Lovasz hinge loss适用于二分类问题实现见 paddleseg/models/losses/lovasz_loss.py 中的LovaszHingeLossLovasz softmax loss适用于多分类问题同一文件中的LovaszSoftmaxLoss。该工作发表于 CVPR 2018Berman M, Rannen Triki A, Blaschko M B, The Lovász-Softmax loss: a tractable surrogate for the optimization of the intersection-over-union measure in neural networks, Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition, 2018: 4413-4421。源码要点LovaszSoftmaxLoss.forward先对 logits 沿类别轴做softmax再用flatten_probas将概率与标签展平并剔除ignore_index像素最后调用lovasz_softmax_flat计算损失它支持classes参数all 表示平均所有类别present 表示只平均标签中出现的类别或传入类别列表。LovaszHingeLoss则针对二分类使用 Jaccard hinge 损失。Lovasz loss 的两种推荐训练方式注意通常的直接训练方式效果不佳官方推荐以下两种训练方法与交叉熵或 BCE加权组合使用通过MixedLoss类选择训练期间的损失函数用coef参数对不同损失加权灵活调整训练参数两阶段训练先用交叉熵或 BCE 训练再用 lovasz softmax / hinge 损失进行微调finetuning。以方法 (1) 为例一般网络只有一个输出 logit配置示例如下Lovasz softmax loss 示例loss: types: - type: MixedLoss losses: - type: CrossEntropyLoss - type: LovaszSoftmaxLoss coef: [0.8, 0.2] coef: [1]Lovasz hinge loss 示例loss: types: - type: MixedLoss losses: - type: CrossEntropyLoss - type: LovaszHingeLoss coef: [1, 0.02] coef: [1]多输出网络示例以 2 个输出为例每个输出分别组合损失外层coef控制各输出的权重loss: types: - type: MixedLoss losses: - type: CrossEntropyLoss - type: LovaszSoftmaxLoss coef: [0.8, 0.2] - type: MixedLoss losses: - type: CrossEntropyLoss - type: LovaszSoftmaxLoss coef: [0.8, 0.2] coef: [1, 0.4]实验对比一Lovasz softmax lossCityscapes 多分类以经典的 Cityscapes 数据集19 个类别为例其类别并不均衡road、building等类别非常常见而fence、motorcycle、wall等相对稀少。官方对比了 lovasz softmax loss 与 softmax loss 的效果模型使用 OCRNet、backbone 为 HRNet w18。Lovasz loss 训练命令CUDA_VISIBLE_DEVICES0,1,2,3 python -u -m paddle.distributed.launch tools/train.py \ --config configs/ocrnet/ocrnet_hrnetw18_cityscapes_1024x512_160k_lovasz_softmax.yml \ --use_vdl --num_workers 3 --do_eval交叉熵训练命令对照组CUDA_VISIBLE_DEVICES0,1,2,3 python -u -m paddle.distributed.launch tools/train.py \ --config configs/ocrnet/ocrnet_hrnetw18_cityscapes_1024x512_160k.yml \ --use_vdl --num_workers 3 --do_eval实验中 mIoU 曲线如下蓝色曲线为 lovasz softmax loss cross entropy loss绿色曲线为 cross entropy loss提升约 1%可以看出使用 lovasz softmax loss 后精度曲线整体高于原始精度。Lossbest mIoUcross entropy loss80.46%lovasz softmax loss cross entropy loss81.53%实验对比二Lovasz hinge lossDeepGlobe 道路提取二分类以道路提取任务为例基于 MiniDeepGlobeRoadExtraction 数据集与交叉熵损失进行对比实验。该数据集来自 DeepGlobe CVPR2018 Challenge 的 Road Extraction 单项训练数据中道路仅占 4.5%在整个图片中占比很小是典型的类别不均衡场景。实验从 Road Extraction 训练集中随机选取 800 张作为训练集、200 张作为验证集构造了小型道路提取数据集 MiniDeepGlobeRoadExtraction训练脚本运行时会自动下载数据集。模型同样使用 OCRNet HRNet w18。Lovasz loss 训练命令CUDA_VISIBLE_DEVICES0,1,2,3 python -u -m paddle.distributed.launch tools/train.py \ --config configs/ocrnet/ocrnet_hrnetw18_road_extraction_768x768_15k_lovasz_hinge.yml \ --use_vdl --num_workers 3 --do_eval交叉熵训练命令对照组CUDA_VISIBLE_DEVICES0,1,2,3 python -u -m paddle.distributed.launch tools/train.py \ --config configs/ocrnet/ocrnet_hrnetw18_road_extraction_768x768_15k.yml \ --use_vdl --num_workers 3 --do_eval实验中 mIoU 曲线如下紫色曲线为 lovasz hinge loss cross entropy loss蓝色曲线为 cross entropy loss提升约 0.5%使用 lovasz hinge loss 后精度曲线整体高于原始精度。Lossbest mIoUcross entropy loss78.69%lovasz hinge loss cross entropy loss79.18%MixedLoss不修改网络代码的多损失加权PaddleSeg 中每个损失函数对应网络的一个 logit 输出。如果想把多个损失函数应用于某一网络输出通常需要修改网络代码而MixedLoss允许网络对多个损失函数的结果进行加权只需以模块化形式加载即可实现混合损失训练。class paddleseg.models.losses.MixedLoss(losses, coef)参数说明参数类型说明losseslist of nn.Layer由多个损失类组成的列表coeffloat/int 列表多个损失的加权系数返回值MixedLoss的可调用对象。源码要点从 mixed_loss.py 的实现可以看到构造函数会做严格校验losses必须是 list、coef必须是 list且两者长度必须相等否则抛出TypeError/ValueError。forward(logits, labels)会依次对每个子损失计算输出并乘以其对应系数coef[i]返回加权后的损失列表——这也解释了外层coef为何是与网络输出数量对应的列表。实战选型建议与注意事项类别不均衡工业缺陷、道路、病灶等小目标占比极低优先考虑 Lovasz 系列直接优化 mIoU或OhemCrossEntropyLoss聚焦难样本建议与CrossEntropyLoss/BCELoss加权组合参考前文 Lovasz 实验中的coef取值医学影像分割DiceLoss是经典选择可设置smooth平滑参数防止除零并抑制过拟合边缘敏感任务 / 多任务边缘 分割使用EdgeAttentionLoss或OhemEdgeAttentionLoss难样本版本注意edge_threshold控制边缘判定阈值人像分割等对连通性敏感的任务可尝试SemanticConnectivityLoss训练初期建议保持max_pred_num_conn较小默认 10以控制连通分量计算的耗时半监督 / 多任务一致性DualTaskLoss配合 GSCNN 等双任务架构使用tau控制 Gumbel softmax 采样温度忽略像素约定所有损失统一以ignore_index 255标记不可标注/难标注像素这些像素不参与梯度计算实际使用时需与数据标注约定保持一致。参考与延伸阅读各损失的中文版详细文档见 docs/module/loss/ 目录下对应*_cn.md文件如 losses_cn.md损失源码目录paddleseg/models/losses/组件注册机制见 paddleseg/cvlibs/manager.py实际配置示例Lovasz softmax 见 ocrnet_hrnetw18_cityscapes_1024x512_160k_lovasz_softmax.ymlLovasz hinge 见 ocrnet_hrnetw18_road_extraction_768x768_15k_lovasz_hinge.yml训练入口tools/train.py支持--config、--use_vdl、--num_workers、--do_eval等参数Lovasz 原理Berman et al., CVPR 2018The Lovász-Softmax lossSCL 原理PP-HumanSegWACV 2022 workshop, arXiv:2112.07146。赞分享人工智能计算机视觉预训练【免费下载链接】PaddleSegEasy-to-use image segmentation library with awesome pre-trained model zoo, supporting wide-range of practical tasks in Semantic Segmentation, Interactive Segmentation, Panoptic Segmentation, Image Matting, 3D Segmentation, etc.项目地址https://gitcode.com/gh_mirrors/pa/PaddleSeg点击查看免费下载相关推荐gs-quant 从零到一卡尔曼滤波价差套利实战gs quant 从零到一卡尔曼滤波价差套利实战 2023 03 07铁矿石单日暴涨 4%螺纹钢 铁矿石的固定布林带价差策略直接打穿止损。把均值换成动态估后端数据库文档数据库SpeechBrain 在 RescueSpeech 上的噪声鲁棒语音识别SepFormer 增强 Whisper ASR 联合微调实战SpeechBrain 在 RescueSpeech 上的噪声鲁棒语音识别SepFormer 增强 Whisper ASR 联合微调实战 导读 本文基于人工智能计算机视觉预训练X6 Edges: A Complete Guide to Adding, Configuring, and Customizing ConnectionsX6 Edges: A Complete Guide to Adding, Configuring, and Customizing Connections 本前端图形学上一篇NixOS Litestream 模块为 SQLite 数据库配置流式复制与对象存储备份下一篇opencode 的 Effect 架构迁移实战移除 makeRuntime 服务门面Facade的完整清单与模板创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网