语义分割的损失函数

article/2025/10/11 17:25:58

        语义分割任务实际上是一种像素层面上的分类,需要识别图像中存在的内容和位置,同样也存在与分类类似问题-样本类别不平衡,对于语义分割更多的是前景区域的样本远小于背景区域。针对类别不平衡问题,在loss层面上有不同的选择。

1. dice Loss

dice loss 源于dice系数,是用于度量集合相似度的度量函数,通常用于计算两个样本之间的相似度,公式如下:

 那么对应的dice loss的公式如下:

 为了防止分母预测为0,会在分子和分母上加上一个平滑系数,公式如下。需要注意的是,一般预测值会经过sigmoid或softmax计算概率,是不存在输出为0的情况,但为了防止输出值过小的情况。

 根据dice loss的定义可以看出,dice loss是一种区域相关的loss,也即意味着某像素点的loss以及梯度值不仅和该点的label和预测值相关,也与其他点的label及预测值相关。dice loss可用于样本极度不均衡的情况,而在一般情况下使用dice loss会对反向传播有不利的影响,使得训练不稳定。

关于交叉熵和dice的梯度:

假设使用p来表示预测值,而t来表示真实标签值,那么交叉熵损失关于p的梯度形式为p-t,而dice loss的值为1-\frac{2pt}{p+t},得到关于p的梯度形式为\frac{2t(t^{2}-p^{2})}{(p^{2}+t^{2})^{2}},在极端情况下即pt都很小时,计算得到的梯度值可能会非常大,导致训练十分不稳定。

2. IOU Loss

与dice loss类似,IoU loss也是一个区域相关的损失函数,其计算公式如下:

 与dice loss一样存在训练过程不稳定的问题,且一般在分割任务中不怎么使用。

交叉熵损失函数的优点:其梯度形式更优。

DiceIoU损失函数的优点:分割任务的优化目标是最大化dice系数和IoU度量,而交叉熵仅仅是一种代理形式。

3. 交叉熵

语义分割任务中最常用的损失函数是交叉熵,通过逐个对比每个像素得到损失值。

每个像素对应的损失函数为:

pixel -loss = - \sum_{classes}^{}(y_{c}log(p_{c})))

其中y_{c}为一个one-hot向量,取值只有[0, 1],p_{c}为网络预测值经过softmax或sigmoid函数之后的概率值。

整个图像的损失就是每个像素的损失求平均。

交叉熵损失函数适用于大多数语义分割场景中,但是当前景像素的数量远小于背景像素的数量时,

此时背景的损失占主导地位,导致网络性能不佳。

4. 带权值的交叉熵

针对类别不平衡的问题,通过给每个类别添加一个权重系数来缓解。加上权重之后的公式如下:

pixel-loss = -\sum_{c}^{classes}(w_{c}y_{c}log(p_{c})))

 其中权重系数w_{c}的计算公式为:w_{c}= \frac{N-N_{c}}{N}N表示总的像素个数,而N_{c}表示GT类别为c的像素个数。

5. Focal Loss

Focal loss用来解决难易样本,数量不平衡问题,在anchor-based目标检测算法中,设置的默认候选框的个数远大于图中目标的个数,此时anchor的正负样本数量极度不平衡。对于交叉熵损失函数:

 为了解决正负样本数量不平衡问题,可以通过在损失值前面添加一个权重系数\partial > 0.5,来增强正样本的影响,默认的\partial =0.75.

 由于大量的候选目标都是容易分类样本,即p的取值一般很高,虽然得到的损失值很小,但是由于样本数量差距过大,使得容易分类样本的损失值堆叠占据了损失的主导地位。

为此,模型应该主要关注那些难以分类的样本,一个简单的想法是降低高置信度样本的损失影响。

 最终,通过添加两个系数,同时解决了正负样本不均衡和难易样本问题。

6. 参考链接

语义分割之dice loss深度分析(梯度可视化) - 知乎 (zhihu.com)

【损失函数合集】超详细的语义分割中的Loss大盘点 - 知乎 (zhihu.com)


http://chatgpt.dhexx.cn/article/InipDpNx.shtml

相关文章

损失函数简介

损失函数的作用:衡量模型预测的好坏。 简单来说就是,损失函数就是用来表现预测与真实数据的差距程度。 令 真实值 为Y,预测值为 f(x),损失函数为L( Y , f(x)),关系如下: 损失函数&a…

Pyotorch自定义损失函数

👨‍💻作者简介:大数据专业硕士在读,CSDN人工智能领域博客专家,阿里云专家博主,专注大数据与人工智能知识分享,公众号:GoAI的学习小屋,免费分享书籍、简历、导图等资料&a…

GAN的损失函数

1.GAN 在训练过程中,生成器和判别器的目标是相矛盾的,并且这种矛盾可以体现在判别器的判断准确性上。生成器的目标是生成尽量真实的数据,最好能够以假乱真、让判别器判断不出来,因此生成器的学习目标是让判别器上的判断准确性越来…

损失函数比较

Pytorch学习之十九种损失函数 一、简介 损失函数(Loss Function)是用来评估模型好坏程度,即预测值f(x)与真实值的不一致程度,通常表示为L(Y, f(x))的一个非负的浮点数。比如你要做一个线性回归,你拟合出来的曲线不会和原始的数据…

常见的损失函数

1、损失函数的意义 机器学习中的监督学习本质上是给定一系列训练样本 ,尝试学习 的映射关系,使得给定一个 ,即便这个 不在训练样本中,也能够得到尽量接近真实 的输出 。而损失函数(Loss Function)则是这个过…

损失函数

损失函数(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结…

常见损失函数

常见损失函数 (cs231n) 文章目录 常见损失函数损失函数定义0-1损失函数(zero-one loss)绝对值损失函数(Absolute loss)log对数损失函数(Log Loss)平方损失函数(Square Loss)指数损失函数 (Exponential Loss)SVM损失函数(Hinge Loss)感知损失函数(percep…

【常见的损失函数总结】

文章目录 损失函数的定义神经网络的学习为何要设定损失函数?常见的损失函数1. 0-1损失函数(zero-one loss)2. 对数损失函数3. 平方损失函数MSE(均值平方差)4. Hinge 损失函数5. 交叉熵损失函数 (Cross-entropy loss function) 损失函数的定义 损失函数&…

神经网络损失函数汇总

目录 一、基础知识 二、分类 (1)二分类交叉熵损失函数(binary_crossentropy) (2)categorical_crossentropy损失函数 (3)sparse_categorical_crossentropy (4&#…

Jmeter 使用正则表达式提取器将返回值全部保存到一个文件中

目标:将响应数据 {"errorCode":0,"message":"success","data":null} 中的message字段的值全部保存到一个文件中。 1.正则表达式提取器 正则表达式:提取内容的正则表达式【()表示提取,对于你要提取的…

Jmeter性能测试报告模板

性能测试报告 一、测试内容 针对当当网——服务器,进行性能测试,主要针对的核心业务是:注册,登录,查看商品信息与提交订单等。 二、测试方法 本次采用Apache的开元测试工具jmeter,采用本地动态拼装请求数据…

Jmeter5.4.1测试批量上传文件(参数化)

0、下载jmeter5.4.1 jmeter5.4.1-Java文档类资源-CSDN下载 注意需要java环境哦 jdk1.8-java_sdk_jre-Java文档类资源-CSDN下载 启动命令: java -jar ApacheJMeter.jar 用这个启动才是中文版本,另外启动后,界面字体太小&#xff0c…

Jmeter接口测试参数化详解

接口测试是目前最主流的自动化测试手段,它组合不同的参数向服务器发送请求,接受和解析响应结果,通过测试数据的交换逻辑来验证服务端程序工作的正确性。我们在测试过程中需要考虑不同的输入组合,来覆盖不同的测试范围;…

Jmeter学习之用户定义变量与用户变量

一、User Defined Variables 1、添加方法:选择“线程组”,右键点击添加-Config Element-User Defined Variables,定义你所需要的参数,如 2、在对应的需要使用参数的位置,使用${host}替代。 …

jmeter请求get接口报错(java.net.URISyntaxException: Illegal character in query at index 153: http://qa....)

log: 问题描述: 接口请求类型:get 请求参数:{"canshu1":"17600000005","canshu2":"test-0004","canshu3":"2021090301"},如下: 请求的时候报错如下: …

jmeter文件上传请求配置:文件,图片,语音、视频上传

图片上传http请求配置: 跟一般的http请求相对,图片上传的配置请求参数多了以下3个部分 1.点击图中【高级】,将客户端实现方式改为java 2.点击【参数】,按照基本请求参数配置即可 3.点击【文件上传】,配置图片路径&am…

JMeter外观配置与汉化

1、JMeter外观配置 推荐使用系统默认的外观,原因:不会出现窗口拉伸、变形等问题。 路径:选项->外观->System 2、JMeter汉化 方法1:修改JMeter设置(一次性的,下次打开JMeter还会恢复默认配置&#x…

16、Jmeter如何创建桌面快捷带图方式(亲测有效)

First step** 1、先找到jmeter文件安装的bin目录—>jmeter.bat文件,创建桌面快捷方式。 ** 2、右键,点击“发送到”---->桌面快捷方式”。然后再选中桌面快捷方式,右键,点击“属性”,修改“属性”里的路径为&am…

11、jmeter读取CSV文件之元件数据文件设置基础页面了解(1)

使用场景以及好处: 读取用例的方法通常有两种,1、通过建立多个请求信息实现接口的入参参数化,2、通过读取csv文件,加载测试用例。第一种方法会导致脚本过于冗余,不便于维护,因此多数情况我们会使用读取csv文…

JMeter的基本使用

目录 一、下载JMeter 二、设置语言为简体中文 三、JMeter外观设置 三、添加线程组 四、添加HTTP请求 五、添加信息头管理器 ​六、创建察看结果树 七、运行查看结果 一、下载JMeter 下载地址:Apache JMeter - Apache JMeter™ 下载zip文件解压后运行bin目录…