Unet分割医学图像全记录/结果全白解决办法/多分类Dice loss

文章目录

  • 任务介绍
  • 数据来源及预处理
  • Unet实现过程中遇到的bug

任务介绍

本项目是基于Unet网络对心肌图像进行心池和心肌分割。写这篇博客为了记录下我在写模型时遇到的bug和思考,我发现好像没有一篇从头到尾的笔记,我作为小白真的遇到了很多大坑,所以写写我建模的整个过程。一把辛酸泪www
如果碰巧你也遇到了这些bug,希望我的方法能帮助你呀。
最后贴上全部代码:GitHub

huangs

数据来源及预处理

  1. 数据介绍
    数据为45位病人LGE MRI图像,数据格式为nii.gz。随机抽选9张图像为训练集,validation dataset比例为10%。
    1)先将3Dnii.gz图像转换成2D切片
    nii.gz是医学图像常用的格式。可以通过SimpleITK库处理。
    将3D图像转成2D切片的思路很简单,因为是按列表存储将一张张2D切片存储成3D图像的。
    完整代码过长,具体见GitHub
def load_img(path):img = sitk.ReadImage(path)data = sitk.GetArrayFromImage(img)return data
def clip_img(img,path):for i in range(img.shape[0])clip = img[i]clip = clip[0:240,0:240]clip_file = os.path.join(IMAGE_PATH,path+str(i)+IMAGE_FORMAT)plt.imsave(clip_file,clip)

2)进行数据增强(image augmentation)

数据增强过程中遇到的问题是:不同于图像分类问题只需要进行图像增强,分割任务需要同时对label image和data image进行同步一对一增强。这步我部分参考keras官方教程。
但是官方教程的操作让后期数据导入modle的过程不能随意调参,所以并没有完全照搬代码。根据官网,发现原理主要是label和image增强时运用同一个随机种子。所以我按照该原理写代码,导出数据之后发现label和image的确是一对一关系,成功!
tips: random.randint()的范围要大于等于你augmentation后图片的数量。比如我生成8000张随机图片,所以设置的是random.randint(1,100000)

def image_augmentation(img,label,augnum):#num means batch_sizeimage_datagen = ImageDataGenerator(rotation_range = 0.2,width_shift_range = 0.1,height_shift_range = 0.1,shear_range = 0.1,zoom_range = 0.1,fill_mode = 'nearest')label_datagen = ImageDataGenerator(rotation_range = 0.2,width_shift_range = 0.1,height_shift_range = 0.1,shear_range = 0.1,zoom_range = 0.1,fill_mode = 'nearest')#random.seed(1)seed = random.randint(1,100000)n = 0for batch in image_datagen.flow(img,batch_size=1,save_to_dir=path,save_prefix='aug',save_format='png',seed=seed):n +=1if n > augnum:breakn = 0for batch in image_datagen.flow(label,batch_size=1,save_to_dir=path_,save_prefix='aug_label',save_format='png',seed=seed):n +=1if n >augnum:breakreturn

3) 对label进行one-hot encoding处理

4) 正则化

Unet实现过程中遇到的bug

1.Found 0 images belonging to 0 classes
keras读取数据需要数据树形式,
即 data/class_one …
/class_two …

服务器上将一个文件夹内容移到另一个文件夹的操作:
mv ./* ./另一个文件夹
2. Unet检测出来全零
这个问题困扰了我很久,最开始训练阶段预测出来结果全是0,图片全黑/全白。找了很多博客,问了朋友最后终于解决了这个问题。
首先:这个错误可以是很多结果导致的,我只能列出我遇到的原因,可能还存在其他奇奇怪怪的原因。慢慢排除一定能解决问题
1.最最最重要:看看数据集是否正确
我犯过的傻错误:
1)label数据集没有经过 one-hot encoding处理/处理方法出错。
(有朋友说不用one-hot encoding处理也可以 但是我没有实验过)
2) label和image增强后不一一对应。
3)testdata做了两次正则化
2. loss function
因为本实验进行的是医学图像分割,存在背景占比大,目标物占比小的问题。所以选用Cross-entropy loss效果不一定很好。后期我选用DICE LOSS作为loss function。但是我看了很多博客都只提到了二分类DICE LOSS。所以我根据原理自己写了多分类的DICE LOSS。
在这里插入图片描述
(图源:https://www.cnblogs.com/hotsnow/p/10954624.html)

@lucyyy
def dice_coef(y_true,y_pred):sum1 = 2*tf.reduce_sum(y_true*y_pred,axis=(0,1,2))sum2 = tf.reduce_sum(y_true**2+y_pred**2,axis=(0,1,2))dice = (sum1+0.1)/(sum2+0.1)dice = tf.reduce_mean(dice)return dice
def dice_coef_loss(y_true,y_pred):return 1.-dice_coef(y_true,y_pred)

最后,分割出来accuracy分别在左心池,左心肌,右心池上达到了0.9,0.81.0.83。效果还是不错的。

在这里插入图片描述

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

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

相关文章

【医学图像】图像分割系列.4

介绍几篇使用Transformer结构做医学图像分割的论文:CASTformer(NeuralPS2022),PHNet(arXiv2023)。 Class-Aware Adversarial Transformers for Medical Image Segmentation, NeuralPS2022 解读&#xff1a…

医学图像分割实战——使用U-Net实现肾脏CT分割

使用U-Net实现肾脏CT分割 数据集准备数据来源数据预处理 网络结构及代码网络结构训练代码 训练过程参数设置:可视化 结果分析 数据集准备 数据来源 MICCAI KiTS19(Kidney Tumor Segmentation Challenge):https://kits19.grand-challenge.org/ KiTS201…

医学图像分割之 Dice Loss

文章目录 医学图像分割之 Dice Loss1. Dice coefficient 定义1.1. Dice 系数计算示例1.2. Dice-coefficient loss function vs cross-entropy 2. Dice 系数的 Pytorch 实现2.1. Dice 系数2.2. Dice Loss2.3. BCELoss2d 3. Dice 系数的 Keras 实现4. Dice 系数的 TensorFlow 实现…

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

单目标分割常见评价指标 1 知道4个常见指标,TP,TN,FP,FN2 评价分割区域准确率2.1 Recall Sensitivity TPR(True Positive Rate)2.2 Specificity (True Negative Rate)2.3 Precision (PPV, 精确率)2.4 Dice Coefficient…

医学图像分割之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:写博…