当前位置:网站首页>常用损失函数(二):Dice Loss
常用损失函数(二):Dice Loss
2022-07-30 05:44:00 【CV技术指南】
Dice Loss是由Dice系数而得名的,Dice系数是一种用于评估两个样本相似性的度量函数,其值越大意味着这两个样本越相似,Dice系数的数学表达式如下:

其中
表示X和Y之间交集元素的个数,
和
分别表示X、Y中元素的个数。Dice Loss表达式如下:

1、①Dice Loss常用于语义分割问题中,X表示真实分割图像的像素标签,Y表示模型预测分割图像的像素类别,
近似为预测图像的像素与真实标签图像的像素之间的点乘,并将点乘结果相加,
和
分别近似为它们各自对应图像中的像素相加。
②对于二分类问题,真实分割标签图像的像素只有0,1两个值,因此
可以有效地将在预测分割图像中未在真实分割标签图像中激活的所有像素值清零,对于激活的像素,主要是惩罚低置信度的预测,置信度高的预测会得到较高的Dice系数,从而得到较低的Dice Loss。即:

其中,
与
分别表示像素
的标签值与预测值,N为像素点总个数,等于单张图像的像素个数乘以batchsize。
2、可以说Dice Loss是直接优化F1 score而来的,是对F1 score的高度抽象,可用于多分类分割问题上。其中查准率(精确率)公式如下,表示在预测为1的样本中实际为1的概率:

查全率(召回率)的公式如下,表示在实际为1的样本中预测为1的概率:

查准率和查全率往往是相互制约的,如果提高模型的查准率,就会降低模型的查全率;提高模型的查全率就会降低模型的查准率。为了平衡这两者的关系,F1 score就被提出,其公式如下:

在二分类问题中,Dice系数也可以写成
3、Dice Loss可以缓解样本中前景背景(面积)不平衡带来的消极影响。Dice Loss训练更关注对前景区域的挖掘,即保证有较低的FN,但会存在损失饱和问题,而CE Loss是平等地计算每个像素点的损失,当前点的损失只和当前预测值与真实标签值的距离有关,这会导致一些问题(见Focal Loss)。因此单独使用Dice Loss往往并不能取得较好的结果,需要进行组合使用,比如Dice Loss+CE Loss或者Dice Loss+Focal Loss等。
4、Dice Loss的代码实现如下:
def Dice_loss(inputs, target, beta=1, smooth = 1e-5):
n, c, h, w = inputs.size()
nt, ht, wt, ct = target.size()
if h != ht and w != wt:
inputs = F.interpolate(inputs, size=(ht, wt), mode="bilinear", align_corners=True)
temp_inputs = torch.softmax(inputs.transpose(1, 2).transpose(2, 3).contiguous().view(n, -1, c),-1)
temp_target = target.view(n, -1, ct)
#--------------------------------------------#
# 计算dice loss
#--------------------------------------------#
tp = torch.sum(temp_target[...,:-1] * temp_inputs, axis=[0,1])
fp = torch.sum(temp_inputs , axis=[0,1]) - tp
fn = torch.sum(temp_target[...,:-1] , axis=[0,1]) - tp
score = ((1 + beta ** 2) * tp + smooth) / ((1 + beta ** 2) * tp + beta ** 2 * fn + fp + smooth)
dice_loss = 1 - torch.mean(score)
return dice_loss边栏推荐
- 单例模式:Swift 实现
- Conda 安装 tensorflow gpu 1.13.1(验证可行)
- SQL Server database generation and execution of SQL scripts
- The most powerful and most commonly used SQL statements in history
- [Getting C language from zero basis - navigation summary]
- 【数仓】数据仓库高频面试题题英文版(1)
- 八、Kotlin基础学习:1、数据类;2、单例;3、伴生对象;4、密封类;
- Mysql client common exception analysis
- Mycat2.0 build tutorial
- The number of warehouse 】 data quality
猜你喜欢
Awd summary

21. Kotlin Advanced Learning: Implementing Simple Network Access Encapsulation

Function 函数式接口及应用
Volatility memory forensics - command shows

十六、Kotlin进阶学习:协程详细学习。

SQL Server 数据库之生成与执行 SQL 脚本

Twenty-two, Kotlin advanced learning: simply learn RecyclerView to achieve list display;

网上说的挖矿究竟是什么? 挖矿系统开发详解介绍

Competition WP in May

sqli-labs less3/4 Targeting Notes
随机推荐
SQL Server Installation Tutorial
Use kotlin to extend plugins/dependencies to simplify code (after the latest version 4.0, this plugin has been deprecated, so please choose to learn, mainly to understand.)
mysql删除表中重复数据,(只保留一行)
Mysql client common exception analysis
Flink PostgreSQL CDC配置和常见问题
Oracle数据库SQL优化详解
Servlet基本原理与常见API方法的应用
Extraction of BaseDAO
七、Kotlin基础学习:1、创建类;2、构造函数;3、继承;4、封装;5、抽象类;6、接口;7、嵌套类;8、内部类;9、枚举类
C语言学习经验
Misc of CTF-Memory Analysis (Volatility)
FastAPI 快速入门
Flink-流/批/OLAP一体得到Flink引擎
使用kotlin扩展插件/依赖项简化代码(在最新版本4.0以后,此插件已被弃用,故请选择性学习,以了解为主。)
Twenty-two, Kotlin advanced learning: simply learn RecyclerView to achieve list display;
【零基础搞定C语言——导航汇总篇】
Reasons and solutions for Invalid bound statement (not found)
Jackson 序列化失败问题-oracle数据返回类型找不到对应的Serializer
学生管理系统
sqli-labs less3/4 Targeting Notes