医学图像分割常见评价指标(单目标)——包含源码讲解和指标缺陷

单目标分割常见评价指标

    • 1 知道4个常见指标,TP,TN,FP,FN
    • 2 评价分割区域准确率
      • 2.1 Recall Sensitivity TPR(True Positive Rate)
      • 2.2 Specificity (True Negative Rate)
      • 2.3 Precision (PPV, 精确率)
      • 2.4 Dice Coefficient
      • 2.5 Jaccard Coefficient (IOU)
      • 2.6 新增Accuracy(准确率)
    • 3 对分割出的边界进行评价
      • 3.1 Hausdorff_95
      • 3.2 持续更新中
    • 4 源码
      • 4.1 直接第三方包使用
      • 4.2 手写代码

1 知道4个常见指标,TP,TN,FP,FN

在这里插入图片描述

  1. TP:True Positive,被判定为正样本,事实上也是正样本 ,即蓝色与红色的交集
  2. TN:True Negative,被判定为负样本,事实上也是负样本,即红色与蓝色以外区域
  3. FP:False Positive,被判定为正样本,但事实上是负样本,即红色中除了蓝色部分
  4. FN:False Negative,被判定为负样本,但事实上是正样本,即蓝色中除了红色部分

2 评价分割区域准确率

2.1 Recall Sensitivity TPR(True Positive Rate)

定义:
在这里插入图片描述
白话:
就是预测的区域中真正是目标区域的面积占据总目标区域的比例,1最好,0最拉;
优点:
可以清晰的得到正确的分割区域占据真区域的面积比例。

缺陷:

在这里插入图片描述

指标高不高?高,分割好不好?不好,这就是缺陷。

2.2 Specificity (True Negative Rate)

定义:
在这里插入图片描述
白话:
是Recall的另外一面,针对单目标分割,Recall和Specificity就是一个转置,也是1最好,0最拉。
优点:
可以从侧面印证自己分割的区域外面积目标区域外的总面积比例
缺陷:
在这里插入图片描述

假设灰色100,绿色10, 蓝色20, 则TNR为0.90多,指标如何,还撮合,实际一塌糊涂

2.3 Precision (PPV, 精确率)

定义:
在这里插入图片描述
白话:
实际预测正确的部分占据预测部分总面积的比例,也是1最好,0最拉。
优点:
可以很清晰的知道自己预测正确的部分占据自己预测部分的比例
缺陷:
在这里插入图片描述

PPV高不高?很高了,红色占据整个小圈的面积比例很高,但是分割效果好不好?不好。

2.4 Dice Coefficient

定义:

在这里插入图片描述
白话:
就是两个物体相交的面积占总面积的比值,也是1最好,0最拉。
优点:
看着公式大家自己都能说出来,主要是我再想,为什么要用2TP呢?直接上下两个都是TP也是能看出指标的啊!
缺陷:
在这里插入图片描述
缺陷:
这里和Recall的缺陷比较相似,但是引入了FP,会稍微中和掉recall的缺陷,但是也是可以看出这个指标也是可以的,但实际效果分割效果也是不太好的。

2.5 Jaccard Coefficient (IOU)

定义:
在这里插入图片描述

白话:
和Dice很相似,也回答了我之前的疑惑,哈哈,是可以用TP的,就是换一个名字,也可以计算出重叠区域指标的,也是1最好,0最拉。
优点:
参考Dice
缺陷:
参考Dice

以上的所有参考指标都是有所侧重的,因此存在一些固有缺陷,这种缺陷是比较特殊的例子,这是没啥问题的,在评价分割效果的时候可以多用几个,如果几个指标都好,那就证明分割效果确实很好,如果有的指标很好,有的很差,就可以自己动手画一下图,看看是那种特殊情况了。

2.6 新增Accuracy(准确率)

这个是我在写文章时特地查阅的时候才知道这个指标和Precision存在区别
定义:
在这里插入图片描述

白话:
和Precision(精确性)在翻译上存在着一定的相关性,很容易误导人。这个表示的是预测正确的区域(预测正确的目标区域和预测正确的背景区域)占据所有区域的比例。
优点:
Chat-GPT原话:

由于正样本(感兴趣区域或目标物体)通常较小,而负样本(背景)占据较大比例,准确率可能会受到负样本的影响而偏高。因此,Precision更常用于分割任务中,因为它更关注分类结果中的正样本准确性,而Accuracy用于评估整体的准确性。总结的很到位,很不错

3 对分割出的边界进行评价

3.1 Hausdorff_95

定义:
在这里插入图片描述
就是计算两个边界之间的距离,公式中是 max(min(d(x,y))),别看成了mind, 具体计算过程我记得我写过流程图的,为啥没有了,难道是做梦写的?但是能get到点,这个值越大越差,越小越好。丢个连接看一下:https://www.cnblogs.com/icmzn/p/8531719.html

3.2 持续更新中

4 源码

4.1 直接第三方包使用

在这里插入图片描述
安装:

pip install medpy

使用:

from medpy import metricdef calculate_metric_percase(pred, gt):dice = metric.binary.dc(pred, gt)jc = metric.binary.jc(pred, gt)hd = metric.binary.hd95(pred, gt)asd = metric.binary.asd(pred, gt)return dice, jc, hd, asd

重点是,这里传入的pred和gt从模型中预测出来后,需要使用pred.cpu().detach().numpy(),将数据转化为cpu上的numpy数据类型,同时在单目标分割中,传入的数据需要做二值化处理,否则出现的数据有问题,具体参看下面手写的代码。

4.2 手写代码

  1. 以下代码都是基于predict在传入的时候已经二值化处理了,且target也已经是二值矩阵
  2. 以下代码在自己的模型中都是跑过的,是没问题的,重点是如何将其用到自己的模型中
  3. 重点在于如何理解指标的实现,帮助理解这些评价指标的计算过程
    Recall:
def recall(predict, target): #Sensitivity, Recall, true positive rate都一样if torch.is_tensor(predict):   # 模型本身有sigmoid函数predict = predict.data.cpu().numpy()if torch.is_tensor(target):target = target.data.cpu().numpy()total_recall = 0.0for i in range(len(predict[0])):  # 因为存在batch_size通道,需要切割一下pre_split = predict[i]tar_split = target[i]pre_split = numpy.atleast_1d(pre_split.astype(numpy.bool))  # 非0为True 0为Falsetar_split = numpy.atleast_1d(tar_split.astype(numpy.bool))  tp = numpy.count_nonzero(pre_split & tar_split)   # 计算tpfn = numpy.count_nonzero(~pre_split & tar_split)  # 计算fntry:recall = tp / float(tp + fn)  # 根据recall公式计算recallexcept ZeroDivisionError:recall = 0.0total_recall += recall  return total_recall/len(predict[0])  # 进行均值化处理

Dice:

def dice(predict, target):if torch.is_tensor(predict):predict = predict.data.cpu().numpy()if torch.is_tensor(target):target = target.data.cpu().numpy()total_dice = 0.0for i in range(len(predict[0])):pre_split = predict[i]tar_split = target[i]pre_split = numpy.atleast_1d(pre_split.astype(numpy.bool))  tar_split = numpy.atleast_1d(tar_split.astype(numpy.bool))intersection = numpy.count_nonzero(pre_split & tar_split) #计算非零个数size_i1 = numpy.count_nonzero(pre_split)    # 计算gt面积size_i2 = numpy.count_nonzero(tar_split)  # 这里直接计算pre面积try:dice = 2. * intersection / float(size_i1 + size_i2)except ZeroDivisionError:dice = 0.0total_dice += dicereturn total_dice/len(predict[0])

IOU:

def iou(predict, target):if torch.is_tensor(predict):   predict = predict.data.cpu().numpy()if torch.is_tensor(target):target = target.data.cpu().numpy()total_iou = 0.0for i in range(len(predict[0])):pre_split = predict[i]tar_split = target[i]pre_split = numpy.atleast_1d(pre_split.astype(numpy.bool))tar_split = numpy.atleast_1d(tar_split.astype(numpy.bool))tp = numpy.count_nonzero(pre_split & tar_split)fn = numpy.count_nonzero(~pre_split & tar_split)fp = numpy.count_nonzero(~tar_split & pre_split)try:iou = tp / float(tp + fn + fp)except ZeroDivisionError:iou = 0.0total_iou += ioureturn total_iou/len(predict[0])

最近一直在弄医学图像分割模型,特此记录,有错误大家可以积极讨论,我也会不断改进的!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

医学图像分割之Attention U-Net

目录 一、背景 二、问题 三、解决问题 四、Attention U-Net网络结构 简单总结Attention U-Net的操作:增强目标区域的特征值,抑制背景区域的目标值。抑制也就是设为了0。 一、背景 为了捕获到足够大的、可接受的范围和语义上下文信息,在标…

常用的医学图像分割评价指标

常用的图像分割评价指标非常多,论文中常用的指标包括像素准确率,交并比(IOU),Dice系数,豪斯多夫距离,体积相关误差。 下面提到的所有案例都是二分类,标签中只有0和1 目录 一:像素…

医学图像分割评判标准及程序代码

文章目录 1.图像分割指标2. 两个问题3.IOU和假阳性率4. 准确率(Accuracy), 精确率(Precision), 召回率(Recall)和F1-Measure 参考资源: 1.https://blog.csdn.net/zichen_ziqi/article/details/80408465 2.https://blog.csdn.net/HXG2006/article/details/79649154 …

基于Android studio开发的图灵智能聊天机器人

前言 在人工智能时代,开发一款自己的智能问答机器人,既可以提升自己的编程能力,又可以作为开发项目的实战练习。 百度有小度,小米有小爱,VIVO有小V,总之类似的智能聊天机器人是越来越多了。面对这些智能的机…

短视频矩阵源码开发部署--开原

短视频矩阵源码是一种常见的视频编码标准,它通过将视频分成多个小块并对每个小块进行压缩来实现高效的视频传输。在本文中,我们将介绍短视频矩阵的原理和实现,并提供示例代码。 开发链路解析 短视频矩阵系统源码开发链路包括需求分析、技术…

ChatGPT危了!注意力机制的神秘bug曝光!Transformer模型恐大受冲击...

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【Transformer】微信交流群 转载自:新智元 【导读】「注意力公式」存在8年的bug首现,瞬间引爆舆论。爆料者称,基于Transformer架构打造的模…

短视频抖音seo矩阵源码如何搭建开发?

抖音SEO矩阵源码排名逻辑采用一系列算法进行生成,其中包括用户行为、关键词匹配和内容质量等多维度指标的衡量。首先,用户行为是决定视频排名的主要因素,包括点赞数、评论数、观看时长和转发次数等。其次,关键词匹配也是影响排名的…

chatgpt赋能python:使用Python让照片动起来:一种新颖的SEO方法

使用Python让照片动起来:一种新颖的SEO方法 在当今数字时代,社交媒体已经成为营销策略中不可或缺的一部分。人们越来越喜欢以图像的形式来获取信息。然而,在面对大量的图像时,如何让自己的图片和品牌脱颖而出?答案是&…

chatgpt赋能python:PythonWand:用Python实现的ImageMagick工具箱

Python Wand: 用Python实现的ImageMagick工具箱 ImageMagick是一款强大的图像处理工具箱,经常被用于缩放、裁剪和转换图像等任务。Python Wand是对ImageMagick命令行工具的Python封装,使得Python程序员能够使用Python代码来操作图像。 为什么使用Pytho…

短视频如何进行高效制作?元引擎助你一臂之力

在当今社会,视频制作已经成为了一种非常流行和重要的创意方式。越来越多的人开始尝试制作自己的短视频,但是对于很多新手小白来说,短视频制作可能是一项相对困难的任务。但是现在,使用元引擎AI一键生成原创视频系统,可…

Python预测彩票中奖

文章目录[隐藏] python来解答你有生之年可以中双色球 python来解答你有生之年可以中双色球 昨天买了几注双色球开奖了,规划好了中奖后怎么花,紧张又刺激的等待后,狗带…… 到底我们能不能中双色球呢,用Python来验证一下吧&#xf…

基于GPT-4的 IDEA 神仙插件,无需魔法,非常不错!

大家好,我是不才陈某~ 最近发现了一款很厉害的 Intellij IDEA 插件——Bito。 Bito 插件无需魔法,亲测有效,可以基于 GPT-4 来写代码同时还提供了一些有用的功能,如自动补全提交信息、快速查看历史记录等。 没使用魔法的情况下&am…

IDEA懒人必备插件:自动生成单元测试,太爽了!

程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 7 分钟。 来自:blog.csdn.net/sun5769675/article/details/111043213 今天来介绍一款工具Squaretest,它是一款自动生成单元测试的插件,会用到它也是因为最近公司上了代…

Mac Automator 图片自动压缩上传 COS

把个人博客放在了 netilfy 托管,它给了一个优化建议,可以压缩图片节省带宽。但是每次截图后都要再压缩下图片有点麻烦,于是想着应该可以偷偷懒。目标很明确,截图后图片传到我的 git 仓库 images 目录后,能给我自动压缩…

IDEA 28 个天花板技巧,YYDS!

因公众号更改推送规则,请点“在看”并加“星标”第一时间获取精彩技术分享 点击关注#互联网架构师公众号,领取架构师全套资料 都在这里 0、2T架构师学习资料干货分 上一篇:ChatGPT研究框架(80页PPT,附下载)…

CSDN 去除图片水印

想要保存 CSDN 博客中的一张图片时,发现图片上有水印,想要删除,怎么办呢? 如下图 右击图片 --> [在新标签中打开图片] 把问号以及问号后面的内容全部删掉,再访问 呐,水印不见了。 PS:写博…

免费的图片去水印消除水印清除水印去水印方法去水印软件免费下载

是一款免费的图片去水印工具。适用于微博下载的(偷的)图,从别的地方下载的(偷的)图等。 ** 直接说下载链接:请点击链接里的普通下载,(其他是别的下载器) 当然&#xff…

批量图片去水印,操作简单,赶紧收藏!

图片怎么去水印?在平时的日常生活中,我们有时候需要用到一些图片或者视频,但是这些视频或者图片往往会有烦人的水印,我们需要去除水印后才能更好来使用~那么你都是怎么去除水印的呢?有什么比较简单轻松的批量图片去水印方法吗?小编这里有一…

2023新版 多功能去水印工具微信小程序源码_带流量主功能(已更新)

简介: 2023新版 多功能去水印工具微信小程序源码_带流量主功能 自带去水印接口的多功能小程序 支持各大平台短视频去水印 支持保存封面,图集,标题等等 支持本地图片去水印 支持图片拼接 支持九宫格切图 支持修改视频的MD5等等 另外当然也有流量主功能的 链…

去除CSDN博客图片水印

今天写论文时要用到之前写博客时的一张图片,但是直接复制过来有水印 ,例如(右下角): 后来找到了解决办法,故在这里分享一下: 1.右击博客中的图片,选择复制图片地址,如下&…