nnUNet一个医学图像分割神仙算法
很多年之前接触过UNet的细胞分割,这次突然拿出来做一个三维的腿骨分割,突然有点不知所措了,可能我的技术只局限于二维的吧,经过一个月的研究差不多鼓捣明白了一点,欢迎有经验的大佬赐教一些知识,我这就写写我自己做的过程吧。
一 训练前的准备工作
- 算法框架搭建以及环境配置
必要程序,环境就搞了我好多天,以为虚拟机就够了,结果配置还是不行,果断换成双系统,这个就不写了,网上太多了而且也不难,我以前都是用的虚拟机或者纯ubuntu系统没有装过,网上找了找一天也搞完了。
a. 操作系统:ubuntu18.04
Ubuntu 18.04.6 LTS (Bionic Beaver)
b. NVIDIA驱动:nvidia465.27(对应自己电脑配置在官网查看对应版本下载安装)
NVIDIA 驱动程序下载
c. pytorch:1.8.0 Previous PyTorch Versions | PyTorch
CUDA:11.1
CUDNN:11.1
# CUDA 11.1
conda install pytorch==1.8.0 torchvision==0.9.0 torchaudio==0.8.0 cudatoolkit=11.1 -c pytorch -c conda-forge
d. Annaconda3:python3.6.9
这个在官网下载很慢,下面链接差不多可以达到1MB/s,还是不错的,找到对应的python版本即可,没有非要跟我一样,看你自己用哪个版本但是不要太高也不要太低。
Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
- 整理数据:安装nnUNet
第一步:在home下创建nnUNetFrame文件夹,在此文件夹打开终端输入
git clone https://github.com/MIC-DKFZ/nnUNet.git
第二步:进入 nnUNet 文件夹
第三步:终端输入 pip install -e .(如果报错那一定是环境配置不对,版本没有对应上)
第四步:回到上一级,创建一个名为DATASET 的文件夹,保证你的nnUNetFrame文件夹下有两个文件夹,nnUNet 是源码,DATASET就是用来放数据的地方.
第五步:终端进入DATASET,之后创建三个文件夹,nnUNet_raw 放要训练的数据,nnUNet_preprocessed放预处理完的数据,nnUNet_trained_models放训练结果。
第六步:终端进入nnUNet_raw,再创建两个文件夹,nnUNet_raw_data 为原始数据,nnUNet_cropped_data为crop以后的数据。
第七步:进入nnUNet_raw_data,创建一个名为 Task08_HepaticVessel的文件夹前面只是个ID编号,后面是分割项目名字,格式就是这样的,名字和编号可以根据自己项目修改。
第八步:自己的数据集放在上面创建好的文件夹下(也可以是下载好的)。
打开下载好的数据集你会看到,json文件,imagesTr是你的训练数据集,而labelsTr里时对应这个imagesTr的标签文件,同样为nii.gz。训练的时候imageTs文件夹可以先不管
- 设置一下nnUNet读取文件的路径:
a:在home目录下ctrl + h,显示隐藏中的文件,
b:找到.bashrc文件,vim打开,
c:在末尾添加下面三行,保存文件。
export nnUNet_raw_data_base="/home/czc/nnUNetFrame/DATASET/nnUNet_raw"
export nnUNet_preprocessed="/home/czc/nnUNetFrame/DATASET/nnUNet_preprocessed"
export RESULTS_FOLDER="/home/czc/nnUNetFrame/DATASET/nnUNet_trained_models"
d:终端source .bashrc更新一下下。
二,准备开始训练
1.先转换一下数据集
这里我说一下我用自己的数据集训练的顺序,我用的是大腿骨数据,拿到之后有些不是dcm格式结尾的,所以要统一一下。
第一步:先统一改文件后缀为“.dcm”。
因为我是大腿股骨和胫骨的分割,之后我想修改一下两部分的色差,这样训练完我就可以直接看出哪部分是股骨,哪部分是胫骨,因为原dcm文件内就是二值化的图片,里面只有0个1的值,所以我把dcm中512*512矩阵中的1改小了,颜色确实变成了灰色,和其他没改的0白色可以看出色差,但是保存后依然没有变化,鼓捣了很久没办法,所以……
第二步:把dcm格式文件转换为jpg格式。
这样修改会导致原dcm格式中丢失很多信息,不过我就是训练图片,信息没有什么太必要。
第三步:修改股骨或者胫骨颜色另存。
这个修改颜色也就是个修改RBG三通道的值而已。
第四步:把修改好的jpg和未修改的合并。
因为要区分,而且我的股骨和胫骨是两个文件夹,所以就,修改其中一个就行。
第五步:把合并好的jpg转换回dcm。
把两部分文件合并起来,并转换为dcm,不知道怎么转换的,我之前的资源里有。
第六步:添加tag信息到转换回的dcm文件内。
因为之前转换为jpg时候丢失的一些信息,所以我想把一些信息再加进去。
第七步:把dcm文件转换成nii.gz。
同样是找不到怎么转换可以用我资源里的软件,因为训练所需要的必须是nn.gz格式,之后把转换好的dcm文件夹直接拖到MRIcroGL软件内,点击File,在下拉框内点击Save Volume,保存类型选择nii.gz,名字根据自己的需求。
之后使用nnUNet自带的脚本转换一下我们的数据集:
nnUNet_convert_decathlon_task -i /home/czc/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task08_HepaticVessel
之后在Task08_HepaticVessel旁边多了新文件夹Task008_HepaticVessel这就成功了
(如果转换显示未找到命令,运行一下pip install -U setuptools,如果还是不对那就检查一下环境配置是否是版本一致的,不然nnunet安装不上就没有这个默认命令)
数据预处理
nnUNet_plan_and_preprocess -t 8(使用自己的数据集预处理时间会很长,要做各种插值)
如果使用自己的训练集预处理之前最好加上--verify_dataset_integrity检查一下数据内的标签是否正确,因为json里面自己配置的labels中有标签,不对应上是没法开始训练的,会报一个CUDA error: device-side assert triggered的错误
- 开始训练 nnUNet_train 3d_fullres nnUNetTrainerV2 8 4(8为之前数据集的ID,4为五折交叉验证,可以改成0,1,2,3)
- 训练结束
/home/czc/nnUNetFrame/DATASET/nnUNet_trained_models/nnUNet,你会发现这个文件夹下会有一个Task008_HepaticVessel的文件夹,这个就是本次训练模型。
三,开始推理
1.创建推理后的文件夹:
创建一个存放推理结果的inferTs的文件夹。
nnUNet_predict -i /home/czc/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task008_HepaticVessel/imagesTs/ -o /home/czc/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task008_HepaticVessel/inferTs -t 8 -m 3d_fullres -f 4
-t: 后跟着对应的ID;
-f: 后代表使用几折交叉验证;
等待推理结束文件夹内是训练完结果的nn.gz文件,使用app打开即可查看结果。
nnUNet一个医学图像分割神仙算法相关推荐
- 医学图像分割 3D nnUNet全流程快速实现
前言 nnUNet作为医学图像分割的各项SOTA实现的基础框架,基本是所有医学图像分割的研究者需要掌握的方法.作为一个集成的框架,nnUNet基本上只需将个人的数据集处理成nnUNet所需要的格式即可 ...
- 医学图像分割方法及卷积神经网络在医学图像分割上的应用
(最开始接触医学图像分割时写的综述,写的比较幼稚,传上来的时候格式可能有些乱.需要原文的小伙伴可以加我qq:604395564联系,也欢迎做医学图像处理的小伙伴一起交流学习.自己写的,欢迎转载,但请注 ...
- nnU-Net团队新作MedNeXt:新一代医学图像分割之王,刷新多项榜单记录!
点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 点击进入->[医疗影像和Transformer]微信技术交流群 转载自:CVHub Title: Me ...
- nnU-Net: 基于U-Net医学图像分割技术的自适应框架
** nnU-Net: 基于U-Net医学图像分割技术的自适应框架 ** https://arxiv.org/pdf/1809.10486.pdf 作者:Fabian Isensee 提要 U-Net ...
- 分享一个PyTorch医学图像分割开源库
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:我爱计算机视觉 分享一位52CV粉丝Ellis开发的基 ...
- 李纯明博士的RSF算法源码.水平集医学图像分割
图像预处理 首先吧nii格式转png,取出单张切片实验,把图像灰度值转到0-255. import os import cv2 from medpy.io import load,save impor ...
- nnUNet原创团队全新力作!MedNeXt:医学图像分割新SOTA
Title:MedNeXt: Transformer-driven Scaling of ConvNets for Medical Image Segmentation MedNeXt:用于医学图像分 ...
- 最新《医学图像分割》综述,详述六大类100多个算法
来源:专知 医学图像自动分割是医学领域的一个重要课题,也是计算机辅助诊断领域的一个重要分支.U-Net由于其灵活性.优化的模块化设计和在所有医学图像模式中的成功,是最广泛应用的图像分割体系结构.多年来 ...
- 【论文笔记】基于U-Net的医学图像分割模型nnU-Net(no-new U-Net)
本文是 nnU-Net 论文的笔记,稍微做了整合了一下,可能有些地方有所遗漏,等以后看完代码之后再补充. 1. 摘要 nnU-Net(no-new-Net)是基于 U-Net 的一种模型,它在达到很好 ...
最新文章
- 解决SQL Server里sp_helptext输出格式错行问题
- 在Java编码中,如何减少bug数量
- 趣挨踢 | 30 个让程序员崩溃的瞬间,笑死我了!
- 交互式地图_张晟推出学校资源交互式地图工具
- Leetcode 1015. Smallest Integer Divisible by K
- 新技能 get —— Python 断点续传下载文件
- html 滑动导航效果,jQuery实现的滑块滑动导航效果示例
- 昨天跟朋友聊天谈技术工作,竟然吹了4个小时
- 精讲设计模式-Builder模式
- JAVA获取硬盘序列号
- Android 自定义仪表盘
- 机器学习 | 交叉验证
- android studio 导入一个已有的android studio project作为lib使
- 2019.08.17 日常总结
- 飞书小程序和微信小程序的调试
- bryntum gantt 5.0.6
- 让我们的爱洒满孩子们的心
- log是什么文件可以删除吗?log文件被删怎么恢复?
- QT 单个窗口实现多页面切换
- latex—中文目录乱码
热门文章
- 专科毕业学习python有前途吗_专科生学IT有前途吗?
- Java中调用ImageJ,与直接使用ImageJ软件处理所得图片黑白颠倒的问题
- 计算机博士英文复试自我介绍,博士复试英文自我介绍范文.doc
- ITECH IT63XX/ IT90XX系列可编程直流电源RS-232调试记录
- 专题05-python操作微信(wxpy)
- Faster Read: Learning a Deep Single Image Contrast Enhancer from Multi-Exposure Images
- windows 界面
- Java编写一个cfd画图软件_starccm+二次开发与java技术(1)
- CCM5.0 应用实例(SIP X-lite)
- oracle shared pool size,oracle 关于设置shared pool及sga大小