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

news2024/11/28 2:32:49

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.coloradmin.cn/o/1577068.html

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

相关文章

申请免费SSL证书

SSL证书是数字证书的一种,配置在服务器上,起到文件信息传输加密的作用。由受信任的数字证书颁发机构CA在验证服务器身份后颁发,防止第三方窃取或篡改信息。 具体来说,SSL证书在客户端浏览器与Web服务器两端建立一条SSL安全通道&a…

【C++】流程控制语句:跳转语句之Break

在C编程语言中,流程控制不仅包括循环和条件分支,还包括一类特别重要的语句——跳转语句。 这类语句允许程序在执行过程中“打破”常规流程,转而执行其他位置的代码。 C提供了四种跳转语句:break、continue、goto 以及 return。…

(已解决)使用IEEE格式的latex模板时出现引用(citation/reference)下面有下划线的情况

文章目录 背景原因解决方案 背景 问题如下,1.有一个下划线标注所发表的期刊或者会议2.不是斜体的。 上面这样肯定是不对的,那为什么会出现这种情况呢? 原因 I think I know of no style that applies underlining to titles in the bibli…

实现第一个动态链接库 游戏插件 成功在主程序中运行 dll 中定义的类

devc 5.11编译环境 dll编译环境设置参考 Dev c C语言实现第一个 dll 动态链接库 创建与调用-CSDN博客 插件 DLL代码和主程序代码如下 注意 dll 代码中的class 类名需要 和主程序 相同 其中使用了函数指针和强制类型转换 函数指针教程参考 以动态库链接库 .dll 探索结构体…

基于51单片机的温度、烟雾、火焰检测设计

基于51单片机的火灾检测设计 (仿真+程序+原理图设计报告) 功能介绍 具体功能: 1.使用MQ-2烟雾采集,使用ADC0832将传感器输出的模拟信号转化为数字信号,再传给单片机。 2.使用DS18B20采集温度。…

fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化

为了 提供数据做后端回环优化和手动回环优化,需要保存每帧的点云和每帧的里程计为单独的文件,并且需要保存的名字为ros时间戳。 效果很好,比我自己写的手动回环模块好用 // This is an advanced implementation of the algorithm described in the // following paper: /…

Ceph学习 -4.Ceph组件介绍

文章目录 1.Ceph组件介绍1.1 组件介绍1.2 流程解读1.2.1 综合效果图1.2.2 数据存储逻辑 1.3 小结 1.Ceph组件介绍 学习目标:这一节,我们从组件介绍、流程解读、小结三个方面来学习。 1.1 组件介绍 无论是想向云平台提供 Ceph 对象存储和 Ceph 块设备服务…

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

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

原来科技感的三维地图可以这么简单实现

前言 2024.02.20 下午摸鱼时接到一个客户的数字孪生项目的需求,客户什么也没说,就要求“炫酷”和“科技感”地图,还要把他们的模型都放上去,起初我以为又是一个可视化大屏的项目,准备用高德地图应付过去,然…

spring面试八股

常用的注册bean的方式 ComponentScan扫描到的service和Controller等的注解 Configration配置类或者是xml文件的定义。 spring中有几种依赖注入的方式 1.构造器注入。 2.setter方法注入。 3.使用field属性的方式注入。 applicationContext是什么 spring bean spring aop Aop…

03-JAVA设计模式-建造者模式

建造者模式 什么是建造者模式 建造者模式(Builder Pattern)是一种对象构建的设计模式,它允许你通过一步一步地构建一个复杂对象,来隐藏复杂对象的创建细节。 这种模式将一个复杂对象的构建过程与其表示过程分离,使得…

目标点注意力Transformer:一种用于端到端自动驾驶的新型轨迹预测网络

目标点注意力Transformer:一种用于端到端自动驾驶的新型轨迹预测网络 附赠自动驾驶学习资料和量产经验:链接 摘要 本文介绍了目标点注意力Transformer:一种用于端到端自动驾驶的新型轨迹预测网络。在自动驾驶领域中,已经有很多…

深度比较Vue 3.0中的computed和watch属性用法与最佳实践

摘要:在Vue 3.0中,computed和watch属性是用于处理数据逻辑的重要工具。本文将详细对比这两个属性的工作原理、适用场景以及使用时的注意事项,旨在帮助开发者更有效地选择和使用它们。 一、computed属性 computed属性是Vue 3.0中用于计算数据…

wpf TreeView 实现动态加载页面

实现以下的效果,在TreeView上点击节点,动态加载右边的页面,如下图所示: 1. 主页面如下: 2. 实现主页面刷新方法 _currentStateViewModel.RefreshState(); _currentStateViewModel就是点击TreeView上的节点&#xff0…

Linux安装最新版Docker完整教程

参考官网地址:Install Docker Engine on CentOS | Docker Docs 一、安装前准备工作 1.1 查看服务器系统版本以及内核版本 cat /etc/redhat-release1.2 查看服务器内核版本 uname -r这里我们使用的是CentOS 7.6 系统,内核版本为3.10 1.3 安装依赖包 …

c++20协程详解(四)

前言 到这就是协程的最后一节了。希望能帮到大家 代码 到这里我们整合下之前二、三节的代码 #include <coroutine> #include <functional> #include <chrono> #include <iostream> #include <thread> #include <mutex> #include <me…

政安晨【AIGC实践】(一):在Kaggle上部署使用Stable Diffusion

目录 简述 开始 配置 执行 安装完毕&#xff0c;一键运行 结果展示 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 人工智能数字虚拟世界实践 希望政安晨的博客能够对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提…

spring加载类初始化顺序

今天看spring官网的时候&#xff0c;提到了Ordered执行顺序。我当时记得PostConstruct注解会在bean加载后执行&#xff0c;现在又来了一个执行顺序&#xff0c;直接给我整蒙了。 于是我写了一个简单的dom来看看&#xff0c;它是什么&#xff1a; Service("t2ServerImpl&q…

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

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

中药提取物备案数据库<5000+中药提取物>

NMPA中药提取物备案数据库的建立是确保中药提取物质量安全、规范生产行为、加强监管、保障公众用药安全、促进产业发展和国际化的重要措施。 通过查询中药提取物备案信息我们能了解到中药提取物的实用备案号、药品通用名称、药品生产企业、批准文号、备案日期、备案状态、中药…