【nnUNetv2实践】二、nnUNetv2快速入门-训练验证推理集成一条龙教程

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。以下是关于nnUNet的详细解释和特点:

自适应框架:nnUNet能够根据具体的医学图像分割任务自动调整模型结构、训练参数等,从而避免了繁琐的手工调参过程。
自动化流程:nnUNet包含了从数据预处理到模型训练、验证及测试的全流程自动化工具,大大简化了使用深度学习进行医学图像分割的复杂度。
自适应网络结构调整:根据输入数据集的特点,nnUNet能够自动选择和配置合适的网络深度、宽度等超参数,确保模型在复杂性和性能之间取得平衡。
Patch-Based Training and Inference:nnUNet使用基于patch级别的训练方法,通过滑窗的方式遍历整个图像进行训练。在推理阶段,也采用类似的方法来生成整个图像的分割结果。这种方法对于处理大尺寸图像或有限显存的情况非常有效。
集成学习与交叉验证:nnUNet还采用了交叉验证策略以最大程度利用有限的数据集,并结合集成学习技术来提高模型预测的稳定性和准确性。
此外,nnUNet还提供了丰富的文档和示例,帮助用户更好地了解和使用该框架。要使用nnUNet,用户需要安装Python和相应的深度学习框架,然后按照官方文档提供的步骤进行操作即可。

总的来说,nnUNet是一个功能强大、易于使用的深度学习框架,特别适用于医学图像分割任务。它的自适应特性、自动化流程和先进的训练策略使得用户能够更高效地构建和训练模型,同时获得更好的性能表现。

本文介绍nnunetv2的使用方法,快速学会nnunet的使用。

请确保您已经完成:【nnUNetv2实践】一、nnUNetv2安装

一、准备数据

1、下载数据集

        本文使用MSD挑战赛的Task04_Hippocampus数据集作为测试,该数据集较小,非常适合做学习只用,首先下载Task04_Hippocampus数据集到本地并解压,如下图(我这里把数据集放到了nnUNet_raw里面,可以随意放置,记住路径)。

2、转换数据格式

接下来开始转换数据格式(路径更改为自己的数据集路径):

nnUNetv2_convert_MSD_dataset -i D:\DeepLearning\nnUNet\nnUNet_raw\Task04_Hippocampus

报以下错误说明环境变量未设置,这是因为【nnUNetv2实践】一、nnUNetv2安装中设置的环境变量是临时的:

设置环境变量(路径更改为自己的,我的是windows环境,如果是linux环境可以参考 【nnUNetv2实践】一、nnUNetv2安装):

set nnUNet_raw=D:/DeepLearning/nnUNet/nnUNet_raw
set nnUNet_preprocessed=D:/DeepLearning/nnUNet/nnUNet_preprocessed
set nnUNet_results=D:/DeepLearning/nnUNet/nnUNet_results

设置完成环境变量后重新运行本小结的数据格式转换代码,可以在nnUNet_raw下找到处理后的数据集:

处理后的图片会有0000后缀,如下图:

数据格式转换完成。

3、预处理并生成plan

完成数据格式转换后,使用如下命令进行预处理并生成plan:

nnUNetv2_plan_and_preprocess -d 4 --verify_dataset_integrity

过程如下,生成了2d和3d_fullres的plan,但是没有cascade unet的plan,这是因为这个数据集比较小,不需要生成级联网络:

可以在nnUNet_preprocessed文件夹下查看处理好的数据集:

可以看到该文件夹中有3个json文件,其中的nnUNetPlans.json是网络结构相关的配置文件,可自行查阅。

至此数据准备完成。

二、训练

完成以上步骤准备好数据集之后,就准备训练模型。

注意

1、对于本文的数据集来说nnunet有2d和3d_fullres共两个模型,且nnunet默认使用五折交叉验证的方式训练模型,既对2d和3d_fullres来说,各自训练五次。(对于部分数据集来说,还有3d_lowres, 3d_cascade_fullres模型)

2、本文的数据没有验证集,因为MSD挑战赛都是把测试集结果提交到官网进行评估的。

下面开始训练模型:

首先训练2d模型(4表示数据集编号,最后面的数字0,1,2,3,4表示五折的编号):

nnUNetv2_train 4 2d 0  
nnUNetv2_train 4 2d 1 
nnUNetv2_train 4 2d 2  
nnUNetv2_train 4 2d 3 
nnUNetv2_train 4 2d 4  

然后训练3d_fullres模型:

nnUNetv2_train 4 3d_fullres 0  
nnUNetv2_train 4 3d_fullres 1  
nnUNetv2_train 4 3d_fullres 2  
nnUNetv2_train 4 3d_fullres 3 
nnUNetv2_train 4 3d_fullres 4  

训练好之后,在nnUNet_results文件夹下有了以下内容,分别对应着2d和3d_fullres两个模型的训练结果:

打开2d文件夹,可以看到五折的训练结果:

打开任意一个文件夹,里面有权重和日志以及其他的训练结果:

三、验证并推理

训练好模型之后,可以使用nnunet的自动寻找最优模型的功能。其原理如下:

训练好2d\3d_fullres\3d_lowres\3d_cascade_fullres之后,每个模型都是五折,可以将模型的预测结果相加求平均作为新的预测结果(叫做ensemble),然后得到多个预测结果,选择精度最高的模型作为最终的推理模型。

注意:精度验证时,是把每折的验证集保存下来,5折得到的预测结果和训练集完全一致,直接和训练集一起计算相关指标。

nnunet的原理可以参考:nnunet原理讲解_哔哩哔哩_bilibili

1、验证

由于有ensemble的策略,所有需要模型预测的概率图(属于某个类别的概率,在0到1之间)而不是分割结果(0,1,2。。。),先每折生成npz文件(每个模型都要,本文只有2d和3d_fullres):

nnUNetv2_train 4 2d 0  --val --npz
nnUNetv2_train 4 2d 1  --val --npz
nnUNetv2_train 4 2d 2  --val --npz
nnUNetv2_train 4 2d 3  --val --npz
nnUNetv2_train 4 2d 4  --val --npz
nnUNetv2_train 4 3d_fullres 0  --val --npz
nnUNetv2_train 4 3d_fullres 1  --val --npz
nnUNetv2_train 4 3d_fullres 2  --val --npz
nnUNetv2_train 4 3d_fullres 3  --val --npz
nnUNetv2_train 4 3d_fullres 4  --val --npz

运行以上命令后,nnUNet_results文件夹的每折validation文件夹出现npz文件:

2、推理

nnunet可以自己找寻最优模型并给出推理命令,使用如下命令自动寻优:

nnUNetv2_find_best_configuration 4 -c 2d  3d_fullres -f 0 1 2 3 4

稍等等片刻,出现如下结果,我这里显示ensemble的结果比较好,提示我运行以下的命令(下面所有的命令都参考下图):

首先运行两个推理命令(-i指向的是转换格式后的文件夹目录,既文件名以0000结尾的,-o指向推理结果保存的位置):

nnUNetv2_predict -d Dataset004_Hippocampus -i nnUNet_raw\Dataset004_Hippocampus\imagesTs -o hippocampus_2d_predict -f  0 1 2 3 4 -tr nnUNetTrainer -c 2d -p nnUNetPlans --save_probabilities
nnUNetv2_predict -d Dataset004_Hippocampus -i nnUNet_raw\Dataset004_Hippocampus\imagesTs -o hippocampus_3d_fullres_predict -f  0 1 2 3 4 -tr nnUNetTrainer -c 3d_fullres -p nnUNetPlans --save_probabilities

因为要五折推理,可以看到每个图片推理都进行了5次:

2个模型各自推理完成后,进行ensemble(-i是上面推理的保存路径,-o指向输出的保存位置):

nnUNetv2_ensemble -i hippocampus_2d_predict hippocampus_3d_fullres_predict -o hippocampus_ensemble -np 8

等待运行完成后,进入最后一步:后处理,命令和上面那个图中的一致(-i是ensemble的保存位置,-o指向后处理结果的保存位置):

nnUNetv2_apply_postprocessing -i hippocampus_ensemble -o hippocampus_ensemble_pp -pp_pkl_file D:/DeepLearning/nnUNet/nnUNet_results\Dataset004_Hippocampus\ensembles\ensemble___nnUNetTrainer__nnUNetPlans__2d___nnUNetTrainer__nnUNetPlans__3d_fullres___0_1_2_3_4\postprocessing.pkl -np 8 -plans_json D:/DeepLearning/nnUNet/nnUNet_results\Dataset004_Hippocampus\ensembles\ensemble___nnUNetTrainer__nnUNetPlans__2d___nnUNetTrainer__nnUNetPlans__3d_fullres___0_1_2_3_4\plans.json

至此,完成了Task04_Hippocampus测试集的预测,可以提交到官网验证精度。

nnunet入门教程到此结束,后续可能会出高阶教程,如何修改网络结构和损失函数,如有疑问可私聊解答。

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

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

相关文章

C++流程控制语句:嵌套循环案例分析【九九乘法表】

在C++编程中,循环语句的嵌套是一种常见且强大的技术手段,它允许我们将多个循环结构相互嵌套,形成多维循环。不论是for循环、while循环还是do…while循环,均可以进行嵌套。 而在实践中,由于for循环具有明确的循环变量初始化、条件判断和更新机制,因此在嵌套循环中,for循…

C语言第四十一弹---猜数字游戏

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 猜数字游戏 1、随机数生成 1.1、rand 1.2、srand 1.3、time 1.4、设置随机数的范围 2、猜数字游戏的分析和设计 2.1、猜数字游戏功能说明 2.2、猜数字游戏…

如何用Java后端处理JS.XHR请求

Touching searching engine destroies dream to utilize php in tomcat vector.The brave isn’t knocked down,turn its path to java back-end. Java Servlet Bible schematic of interaction between JS front-end and Java back-end Question 如何利用Java…

[C++][算法基础]最大异或对(Trie树)

在给定的 N 个整数 &#xff0c;...... 中选出两个进行 xor&#xff08;异或&#xff09;运算&#xff0c;得到的结果最大是多少&#xff1f; 输入格式 第一行输入一个整数 N。 第二行输入 N 个整数 ~ 。 输出格式 输出一个整数表示答案。 数据范围 1≤N≤, 0≤< 输…

【数据结构与算法】力扣 19. 删除链表的倒数第 N 个结点

题目描述 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 1&#xff1a; 输入&#xff1a; head [1,2,3,4,5], n 2 输出&#xff1a; [1,2,3,5]示例 2&#xff1a; 输入&#xff1a; head [1], n 1 输出&#xff1a; []示例…

Mamba入局遥感图像分割 | Samba: 首个基于SSM的遥感高分图像语义分割框架

文章目录 1、导读 2、背景 3、动机 4、方法 5、实验 6、总结 标题&#xff1a;《Samba: Semantic Segmentation of Remotely Sensed Images with State Space Model》论文&#xff1a;https://arxiv.org/abs/2404.01705源码&#xff1a;https://github.com/zhuqinfeng1999…

在展会上如何介绍产品和公司,柯桥俄语培训

1.Приглашаем Вас… 邀请您…… 2. Позвольте пригласить Вас… 请允许邀请您…… 3.Имеем честь пригласить Вас … 诚挚邀请您…… 4. Посылаем Вам приглашение на… 给您&#xff0…

Vue - 你知道Vue中key的工作原理吗

难度级别:中级及以上 提问概率:80% 在Vue项目开发中,并不推荐使用索引做为key,以为key必须是唯一的,可以使用服务端下发的唯一ID值,也不推荐使用随机值做为key,因为如果每次渲染都监听到不一样的key,那么节点将无法复用,这与Vue节省…

android gradle版本无法下载

android gradle版本无法下载问题解决方法 在引入一个新的android项目的时候&#xff0c;通常会因为无法下载gradle版本而一直卡在同步界面&#xff0c;类似于下面的情况。 这是因为gradle运行时首先会检查distributionUrlhttps://services.gradle.org/distributions/gradle-5.6…

JavaScript逆向爬虫——无限debugger的原理与绕过

debugger 是 JavaScript 中定义的一个专门用于断点调试的关键字&#xff0c;只要遇到它&#xff0c;JavaScript 的执行便会在此处中断&#xff0c;进入调试模式。 有了 debugger 这个关键字&#xff0c;就可以非常方便地对 JavaScript 代码进行调试&#xff0c;比如使用 JavaSc…

从MySQL5.7平滑升级到MySQL8.0的最佳实践分享

一、前言 升级需求&#xff1a;将5.7.35升级到8.0.27, 升级方式 in-place升级【关闭现有版本MySQL&#xff0c;将二进制或包替换成新版本并在现有数据目录上启动MySQL并执行升级任务的方式&#xff0c;称为in-place升级】 原版本 5.7.35 CentOS Linux release 7.9.2009 新版本…

OpenHarmony实战开发-多设备自适应能力

介绍 本示例是《一次开发&#xff0c;多端部署》的配套示例代码&#xff0c;展示了页面开发的一多能力&#xff0c;包括自适应布局、响应式布局、典型布局场景以及资源文件使用。 说明&#xff1a; 自适应布局能力仅可以保证在外部容器大小在一定范围内变化时&#xff0c;容…

✌2024/4/3—力扣—整数转罗马数字

代码实现&#xff1a; 方法一&#xff1a;硬编码数字 const char *thousands[] {"", "M", "MM", "MMM"}; const char *hundreds[] {"", "C", "CC", "CCC", "CD", "D",…

STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档)

目录 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 2.2 设计电路规范 3、代码 4、资料清单 资料下载地址&#xff1a;STM32无刷电机全套开发资料(源码、原理图、PCB工程及说明文档) 1、原理图、PCB、BOOM表 2、设计描述 2.1 前言 经过一个星期的画PCB&#xff0c;今…

C++模仿qq界面

#include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//设置窗口的大小this->resize(645,497);//设置窗口名字this->setWindowTitle("QQ");//设置窗口图标this->setWindowIcon(QIcon("C:\\zhouzhouMyfile\\qt_proj…

如何使用Excel搭建一套低值易耗品管理系统

低值易耗品是企业日常运营中不可或缺的一部分&#xff0c;虽然其单个价值不高&#xff0c;但因其使用频繁且数量众多&#xff0c;对其的管理同样重要。利用Excel搭建一套低值易耗品管理系统&#xff0c;不仅成本低廉&#xff0c;而且易于操作和维护。本文将指导您如何使用Excel…

Mac运行不畅?一招教你轻松清理缓存,恢复流畅体验!

在日常使用Mac电脑时&#xff0c;面对系统运行速度下降或频繁卡顿的问题&#xff0c;不仅影响工作效率&#xff0c;用户体验也随之大打折扣。探究 Mac 运行变慢的背后原因&#xff0c;涵盖了一系列潜在因素&#xff0c;诸如存储空间接近极限、系统资源紧张、启动加载项过多等。…

1.4 掌握Scala运算符

大家好&#xff0c;今天我们将一起探讨Scala中的运算符。在Scala中&#xff0c;运算符实际上就是方法的一种特殊形式。这意味着我们可以像调用方法一样使用运算符。 首先&#xff0c;让我们了解一下Scala中的运算符种类。Scala支持多种类型的运算符&#xff0c;包括算术运算符…

IT廉连看——SpringBoot——SpringBoot快速入门

IT廉连看——SpringBoot——SpringBoot快速入门 1、idea创建工程 &#xff08;1&#xff09;普通Maven工程创建 工程名spring-boot-test 2、添加依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/PO…

windows7安装高版本Node

项目需要安装高版本得node&#xff0c;windows7最高支持到v13&#xff0c;需要手动下载zip安装包进行解压&#xff0c;配置环境变量&#xff0c;添加路径到path&#xff0c;如果安装了nvm需要卸载&#xff0c;否则配置得高版本node可能不生效&#xff0c;成功后如下&#xff1a…