聊聊图像分割的DICE和IOU指标

news2024/11/17 16:29:19

目录

1. 介绍

2. dice 和 iou 的联系

3. 代码实现

3.1 dice

3.2 iou

3.3 test

3.4 dice 和 iou 的关系曲线

4. 代码


1. 介绍

dice 和 iou 都是衡量两个集合之间相似性的度量

dice计算公式:

iou计算公式:

iou的集合理解:

 

iou 其实就是两个区域的 overlap 部分和 union 部分的比值,也就是两个集合的交集 / 并集

dice 的分母不是并集,因为dice的分母是两个区域的和,A+B = A + B - A∩B,所以dice的分母其实是少减去了一个 A∩B,所以就让分子的 A∩B(交集) 扩大2倍

2. dice 和 iou 的联系

如果将两个集合间的关系划分的更细一点,即这种形式:

那么 A∩B = TP , A∪B = FN + TP + FP ,A+B = FN + TP +TP + FP 

dice : 

 

iou : 

 

那么根据变形,可以得出:

 

3. 代码实现

|A ∩ B| = A * B 的 和 = 两个区域乘积的和

|A| + |B|  = A + B 的和 = 两个区域相加的总和

|A∪B| = |A| + |B| - |A ∩ B| = 两个区域相交的总和 - 两个区域相乘的和

3.1 dice

dice 的实现

# Dice
def Dice(pred,true):
    intersection = pred * true          # 计算交集  pred ∩ true
    temp = pred + true                  # pred + true
    smooth = 1e-8                       # 防止分母为 0
    dice_score = 2*intersection.sum() / (temp.sum() + smooth)
    return dice_score

intersection 为两个区域的交集,即两个区域的乘积

temp 为两个区域的和,(注:这里不是并集,因为没有减去相交的部分)

3.2 iou

iou 的实现

# Iou
def Iou(pred,true):
    intersection = pred * true          # 计算交集  pred ∩ true
    temp = pred + true                  # pred + true
    union = temp - intersection         # 计算并集:A ∪ B = A + B - A ∩ B
    smooth = 1e-8                       # 防止分母为 0
    iou_score = intersection.sum() / (union.sum() + smooth)
    return iou_score

intersection 为两个区域的交集,即两个区域的乘积

temp 为两个区域的和,(注:这里不是并集,因为没有减去相交的部分)

union 为两个区域的并集

3.3 test

预测:

# prediction
predict = torch.tensor([0.01,0.03,0.02,0.02,0.05,0.12,0.09,0.07,0.89,0.85,0.88,0.91,0.99,0.97,0.95,0.97]).reshape(1,1,4,4)
'''
tensor([[[[0.0100, 0.0300, 0.0200, 0.0200],
          [0.0500, 0.1200, 0.0900, 0.0700],
          [0.8900, 0.8500, 0.8800, 0.9100],
          [0.9900, 0.9700, 0.9500, 0.9700]]]])
'''

label:

# label
label = torch.tensor([0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]).reshape(1,1,4,4)
'''
tensor([[[[0, 0, 0, 0],
          [0, 0, 0, 0],
          [1, 1, 1, 1],
          [1, 1, 1, 1]]]])
'''

计算结果:

 

公式可知,dice和iou的关系为:

验证可知:

注:有些细微的差异是smooth所导致

3.4 dice 和 iou 的关系曲线

有公式可知,dice 和 iou 的关系公式如下:

关系曲线如图:

 

4. 代码

import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'

import torch
import numpy as np
import matplotlib.pyplot as plt

# prediction
predict = torch.tensor([0.01,0.03,0.02,0.02,0.05,0.12,0.09,0.07,0.89,0.85,0.88,0.91,0.99,0.97,0.95,0.97]).reshape(1,1,4,4)
'''
tensor([[[[0.0100, 0.0300, 0.0200, 0.0200],
          [0.0500, 0.1200, 0.0900, 0.0700],
          [0.8900, 0.8500, 0.8800, 0.9100],
          [0.9900, 0.9700, 0.9500, 0.9700]]]])
'''

# label
label = torch.tensor([0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1]).reshape(1,1,4,4)
'''
tensor([[[[0, 0, 0, 0],
          [0, 0, 0, 0],
          [1, 1, 1, 1],
          [1, 1, 1, 1]]]])
'''


# Dice
def Dice(pred,true):
    intersection = pred * true          # 计算交集  pred ∩ true
    temp = pred + true                  # pred + true
    smooth = 1e-8                       # 防止分母为 0
    dice_score = 2*intersection.sum() / (temp.sum() + smooth)
    return dice_score


# Iou
def Iou(pred,true):
    intersection = pred * true          # 计算交集  pred ∩ true
    temp = pred + true                  # pred + true
    union = temp - intersection         # 计算并集:A ∪ B = A + B - A ∩ B
    smooth = 1e-8                       # 防止分母为 0
    iou_score = intersection.sum() / (union.sum() + smooth)
    return iou_score


# dice 和 iou 的换算
def dice_and_iou(x):
    y = x / (2 - x)
    return y


dice = np.arange(0,1,0.001)
iou = dice_and_iou(dice)

plt.plot(dice,iou)
plt.xlabel('dice')
plt.ylabel('iou')
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/398427.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux本地yum挂载实践

本方法适用于:linux无法挂载官方yum源或无本地无yum仓库的场景,因为手动安装依赖包是极其麻烦的事,需要花费大量的时间寻找rpm包并导入到虚拟机去逐个安装。通过配置本地yum源,可以很容易地解决依赖问题。一、前提:lin…

90后老板用低代码整顿旅行社,创2000万年收,他是怎么做到的?(真实)

热爱旅游的92年成都小伙猴哥,大学毕业后开了一家旅行社,主要从事川藏、云南定制游服务。 从今年春节开始,国内各地旅游业开始复苏,向旅行社打电话咨询的人越来越多。 旅游的人多是好事,也是一种烦恼,因为…

Baklib客户故事:快递助手ERP

快递助手ERP以多平台多店铺订单管理为核心,集打单发货、商品、库存、采购、售后于一体,中小商家易上手的轻量级ERP,可以满足满足微商、自建商城、档口货源网、一件代发等不同类型客户的打单需求,通过开放平台API接口,自…

Leetcode.剑指 Offer II 022 链表中环的入口节点

题目链接 Leetcode.剑指 Offer II 022 链表中环的入口节点 mid 题目描述 给定一个链表,返回链表开始入环的第一个节点。 从链表的头节点开始沿着 next指针进入环的第一个节点为环的入口节点。如果链表无环,则返回 null。 为了表示给定链表中的环&#…

华为OD机试题,用 Java 解【分奖金】问题

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典使用说明 参加华为od机试,一定要注意不…

vscode的远程开发与调试——以C/C++为例

一、背景vscode在1.35版本引入了remote development特性,该特性允许用户通过vscode进行远程开发。这意味着,用户可以在本地开启vscode编辑代码,但是代码本身存在远程服务器上,同时在本地debug,但是却使用远程服务器编译…

我的 System Verilog 学习记录(9)

引言 本文简单介绍 SystemVerilog 的类。 前文链接: 我的 System Verilog 学习记录(1) 我的 System Verilog 学习记录(2) 我的 System Verilog 学习记录(3) 我的 System Verilog 学习记录…

TypeScript深度剖析:TypeScript 中命名空间与模块的理解?区别?

一、模块 TypeScript 与 ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的 例如我们在在一个 TypeScript 工程下建立一…

JavaScript 中的类型转换机制以及==和===的区别

目录一、概述二、显示转换Number()parseInt()String()Boolean()三、隐式转换自动转换成字符串自动转换成数值四、 和 区别1、等于操作符2、全等操作符3、区别小结一、概述 我们知道,JS中有六种简单数据类型:undefined、null、boolean、string、number、…

固定资产管理5大难题?一招破解,现学现用

随着国有企业改革的不断深化,国有固定资产管理越来越受到人们重视,然而国有固定资产管理的好坏在一定程度上影响着国有企业的经济效益,如果不处理好必定影响国有企业的发展。 固定资产存在的5大难题 01.资产流程和管理方式相对落后&#xff0…

分布式架构-流量治理-流量控制

系列目录 分布式架构-流量治理-服务容错 分布式架构-流量治理-流量控制 引子 任何一个系统的运算、存储、网络资源都不是无限的,当系统资源不足以支撑外部超过预期的突发流量时,便应该要有取舍,建立面对超额流量自我保护的机制,这…

企业新闻稿的格式和要求是什么?如何写好新闻稿?

新闻稿是企业自己撰写给媒体的新闻素材,媒体采纳你的稿件后就可以传播到更多的大众面前。 所以企业新闻稿的撰写一方面要让媒体认可,另外一方面是让用户认可你的品牌或是产品。 企业新闻稿的格式和要求是什么?如何写好新闻稿?今…

Unity之ASE实现影魔灵魂收集特效

前言 我们今天来实现一下Dota中的影魔死亡后,灵魂收集的特效。效果如下: 实现原理 1.先添加一张FlowMap图,这张图的UV是根据默认UV图,用PS按照我们希望的扭曲方向修改的如下图所示: 2.通过FlowMap图,我…

java - 数据结构,算法,排序

一、概念 1.1、排序 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 平时的上下文中,如果提到排序,通常指的是排升序(非降序)。 通常意义上的排序&#…

ESP32设备驱动-AM2301(DHT21)温度湿度传感器驱动

AM2301(DHT21)温度湿度传感器驱动 文章目录 AM2301(DHT21)温度湿度传感器驱动1、AM2301(DHT21)介绍2、硬件准备3、软件准备4、驱动实现1、AM2301(DHT21)介绍 AM2301 湿敏电容数字温湿度模块是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温…

腾讯安全SOC+与广州农商银行联合安全体系入选工信部试点示范项目

近日,工信部、央行、银保监、国家互联网信息办公室等十二部门联合发布“2022年网络安全技术应用试点示范项目名单”,由腾讯云和广州农村商业银行股份有限公司联合共建的“金融云平台安全运营体系”成功入选。该体系依托腾讯安全SOC产品,构建了…

java——了解反射

目录 什么是反射? 反射如何获取类信息? 小结: 什么是反射? 反射是用代码分析类信息的能力 类中有哪些信息:方法、对象、构造器、全局变量、父类、接口等.... 反射如何获取类信息? 三种方式 1.通过对象…

k8s client-go源码解析之informer 二

Informer(二) 注意:本文内容为学习笔记,内容为个人见解,不保证准确性,但欢迎大家讨论何指教。 本篇介绍cache.SharedIndexInforme中 Controller及其组件 informer大致工作流程如下: sharedI…

CVS Health 西维斯健康EDI需求

CVS Health西维斯健康在特拉华州成立,通过旗下的 CVS Pharmacy 和 Longs Drugs 零售店以及 CVS.com 电商提供处方药、美容产品、化妆品、电影和照片加工服务、季节性商品、贺卡和方便食品。CVS Health通过使高质量的护理变得更经济、更易获得、更简单、更无缝&#…

中国通信行业十大杰出女性,看看你认识几个?

注:排名不分先后█ 01 中国信息通信研究院副院长 王志勤王志勤王志勤在中国乃至全球通信行业具有极高的知名度。她1992年毕业于北京邮电大学无线通信专业,在通信领域辛勤耕耘了三十余年,长期从事标准研究和制定工作,参与了中国从2…