【图像分割】nnUnetV1与V2的Linux部署与应用命令

  以前觉得麻烦,一直没用过nnunet,虽然知道它很火,最近一个契机,部署使用了一下nnunet,记录一下其部署和使用的方法与命令。


1、部署

  首先,我有一个环境,这个环境可以是以前就有的,也可以为了nnunet重新建一个,给它一个温暖的家。

第一步,激活环境:

source activate myMRI

第二步,安装nnunet:

pip install nnunet

  安装完了可以发现,nnunetV1和nnunetV2都安装上了:

在这里插入图片描述

第三步,查看与进入.bashrc文件:

ls -al /home/qijing   # 查看
vim ~/.bashrc  # 进入文件

第四步,修改.bashrc文件:

  直接按 i 键可以对文件进行修改,若采用nnunetV1,则文件底部添加:

export nnUNet_raw_data_base="/mnt/data_2/qijingunet/nnUNet_raw"
export nnUNet_preprocessed="/mnt/data_2/qijingunet/nnUNet_preprocessed"
export RESULTS_FOLDER="/mnt/data_2/qijingunet/nnUNet_trained_models"

  若采用nnunetV2,则文件底部添加:

export nnUNet_raw="/mnt/data_2/qijingunet/nnUNet_raw"
export nnUNet_preprocessed="/mnt/data_2/qijingunet/nnUNet_preprocessed"
export nnUNet_results="/mnt/data_2/qijingunet/nnUNet_trained_models"

  这三个路径可以根据自己的文件夹名字设置,我是给V1和V2都设置了:

在这里插入图片描述

  修改完成后,Esc + :+ wq 退出并保存修改之后的文件:Esc 键退出编辑模式,英文模式下输入 :wq ,然后回车 (write and quit)

第五步,更新.bashrc文件:

source ~/.bashrc

第六步,验证路径设置正确,并且应该打印出正确的文件夹:

echo $RESULTS_FOLDER etc

  验证如下所示:

在这里插入图片描述


2、应用

  部署好了nnunet,得用起来呀,我们试试十项分割挑战赛的数据集:下载传送

  以Task02_Heart为例,下载好的文件夹如下所示,其中imagesTr存放训练数据,imagesTs存放测试数据,labelsTr存放训练数据标签,dataset.json是数据集的信息。

在这里插入图片描述

第一步,数据格式转换:

  nnunetV1命令:

nnUNet_convert_decathlon_task -i $nnUNet_raw_data_base/nnUNet_raw_data/Task02_Heart

  nnunetV2命令:

nnUNetv2_convert_MSD_dataset -i $nnUNet_raw/Task02_Heart

  -i 后面也可以写绝对路径:

nnUNetv2_convert_MSD_dataset -i /mnt/data_2/qijingunet/nnUNet_raw/nnUNet_raw_data/Task02_Heart

  运行完成后,在同目录下生成一个名为Dataset002_Heart的文件夹。

  一般制作自己的数据集,可以直接制作成这一步的样子。

  imagesTr文件夹如下所示,其中_0000表示模态,像Task01_BrainTumour数据集,训练数据会有四个模态。

在这里插入图片描述

  labelsTr文件夹如下所示,与imagesTr文件夹中的数据相对应:

在这里插入图片描述

  dataset.json文件信息如下,nnUnetV2的dataset.json信息比nnUnetV1简单很多,如果是自己的数据集,可以写代码生成json信息文件,当然如果按V2这个形式,复制过去改是最方便的啦~

在这里插入图片描述

第二步,数据预处理:

  nnunetV1命令:

nnUNet_plan_and_preprocess -t 002 --verify_dataset_integrity

  nnunetV2命令:

nnUNetv2_plan_and_preprocess -d 002 --verify_dataset_integrity

  其中,002是任务id号,预处理完成后,会在nnUNet_preprocessed文件夹中生成一个Dataset002_Heart同名文件夹,里面包含以下内容:

在这里插入图片描述

第三步,模型训练:

(1)训练2D U-Net模型

  nnunetV1命令:

nnUNet_train 2d nnUNetTrainerV2 Task002_Heart 3
nnUNet_train 2d nnUNetTrainerV2 002 3

  可以写文件夹全名,也可以只写任务id号,最后的数字表示第几折,默认取值为[0,1,2,3,4],

  nnunetV2命令:

nnUNetv2_train 002 2d 0

  运行命令后,会在nnUNet_preprocessed/Dataset002_Heart文件夹中生成一个splits_final.json文件,其中存储的就是交叉验证的数据划分信息,当然啦,如果想自己划分也可以修改这个文件。

在这里插入图片描述

  当然啦,一折一折跑还得看着它,挺麻烦的,想要一个命令实现五折交叉验证怎么办咧

  使用 && 运行多个 Linux 命令:

nnUNet_train 2d nnUNetTrainerV2 002 0 && nnUNet_train 2d nnUNetTrainerV2 002 1 && nnUNet_train 2d nnUNetTrainerV2 002 2 && nnUNet_train 2d nnUNetTrainerV2 002 3 && nnUNet_train 2d nnUNetTrainerV2 002 4
nnUNetv2_train 002 2d 0 && nnUNetv2_train 002 2d 1 && nnUNetv2_train 002 2d 2 && nnUNetv2_train 002 2d 3 && nnUNetv2_train 002 2d 4

  nnUNet五折交叉验证运行结束后可在以下路径中生成五个fold文件夹:

nnUNet_trained_models/nnUNet/2d/Task002_Heart/nnUNetTrainerV2__nnUNetPlansv2.1

在这里插入图片描述

(2)训练3D full resolution U-Net模型

  nnunetV1命令:

nnUNet_train 3d_fullres nnUNetTrainerV2 Task002_Heart 2

  nnunetV2命令:

nnUNetv2_train 002 3d_fullres 0
(3)训练3D U-Net cascade模型

  nnunetV1命令:

# 第一步:3D low resolution U-Net训练
nnUNet_train 3d_lowres nnUNetTrainerV2 Task002_Heart 0  
# 第二步:3D full resolution U-Net 训练
nnUNet_train 3d_cascade_fullres nnUNetTrainerV2CascadeFullRes Task002_Heart 0  

  nnunetV2命令:

# 第一步:3D low resolution U-Net训练
nnUNetv2_train 002 3d_lowres 0 
# 第二步:3D full resolution U-Net 训练
nnUNetv2_train 002 3d_cascade_fullres 0

第四步,自动确定最佳配置:

  五折交叉验证跑完后,可以设置自动识别最适合数据的组合,–strict 参数代表即使配置不存在仍继续执行。

  nnunetV1命令:

nnUNet_find_best_configuration -m 2d 3d_fullres 3d_lowres 3d_cascade_fullres -t 002 --strict

  nnunetV2命令:

nnUNetv2_find_best_configuration 002 -c 2d 

第五步,模型测试:

  nnunetV1命令:

nnUNet_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -t TASK_NAME_OR_ID -m CONFIGURATION

  其中,INPUT_FOLDER 是测试数据集的路径,OUTPUT_FOLDER 为指定的输出文件夹,TASK_NAME_OR_ID 为任务 id 号,CONFIGURATION 代表所使用的 UNet 配置。

  nnunetV2命令:

nnUNetv2_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -d DATASET_NAME_OR_ID -c CONFIGURATION --save_probabilities

  交叉验证跑完可以采用以下命令:

nnUNetv2_predict -d Dataset002_Heart -i INPUT_FOLDER -o OUTPUT_FOLDER -f  0 1 2 3 4 -tr nnUNetTrainer -c 2d -p nnUNetPlans

第六步,后处理:

  这个好像只有V2版本有,因为运行完第五步后,V1版本没有提示可以后处理的命令:

在这里插入图片描述

  nnunetV2命令:

nnUNetv2_apply_postprocessing -i OUTPUT_FOLDER -o OUTPUT_FOLDER_PP -pp_pkl_file /mnt/data_2/qijingunet/nnUNet_trained_models/Dataset002_Heart/nnUNetTrainer__nnUNetPlans__2d/crossval_results_folds_0_1_2_3_4/postprocessing.pkl -np 8 -plans_json /mnt/data_2/qijingunet/nnUNet_trained_models/Dataset002_Heart/nnUNetTrainer__nnUNetPlans__2d/crossval_results_folds_0_1_2_3_4/plans.json

  其中OUTPUT_FOLDER为上一步的输出路径,OUTPUT_FOLDER_PP为重新指定的新路径。


PS:修改epoch

  nnunet默认训练1000个epoch,要是不想训练那么多怎么修改呢?

  nnunetV1:在下面路径的py文件中,修改self.max_num_epochs

anaconda3/envs/myMRI/lib/python3.8/site-packages/nnunet/training/network_training/nnUNetTrainerV2.py

  nnunetV2:在下面路径的py文件中,修改self.num_epochs

anaconda3/envs/myMRI/lib/python3.8/site-packages/nnunetv2/training/nnUNetTrainer/nnUNetTrainer.py

  其实,当自己一步步去做的时候,好像也不是很难~

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

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

相关文章

Python | Leetcode Python题解之第8题字符串转换整数atoi

题目: 题解: INT_MAX 2 ** 31 - 1 INT_MIN -2 ** 31class Automaton:def __init__(self):self.state startself.sign 1self.ans 0self.table {start: [start, signed, in_number, end],signed: [end, end, in_number, end],in_number: [end, end,…

LabVIEW齿轮箱噪声监测系统

LabVIEW齿轮箱噪声监测系统 齿轮箱作为机械设备的“心脏”,其健康状态对设备的性能有着重要的影响。传统的齿轮箱监测方法依赖于直接的振动信号分析,但这种方法不仅成本高昂,而且在安装和拆卸过程中可能对设备造成损害。针对这些问题&#x…

Aurora8b10b(2)上板验证

文章目录 前言一、AXI_Stream数据产生模块二、上板效果总结 前言 上一篇内容我们已经详细介绍了基于aurora8b10b IP核的设计,本文将基于此进一步完善并且进行上板验证。 设计思路及代码思路参考FPGA奇哥系列网课 一、AXI_Stream数据产生模块 AXIS协议是非常简单的…

Java零基础入门到精通_Day 4

方法的重载 就是同一个类中的相同方法名的多个方法,但是他们的参数不同,类型不同或者参数个数不同。 (与返回值无关) package Base_One;public class Base_005 {public static void main(String[] args) {// Main method logic …

C++读取.bin二进制文件

C读取.bin二进制文件 在C中,可以使用文件输入/输出流来进行二进制文件的读写操作,方便数据的保存和读写。 //C读取bin二进制文件 int read_bin() {std::ifstream file("data_100.bin", std::ios::in | std::ios::binary);if (file) {// 按照…

plumelog日志查询使用指南

一、日志查询 字段说明 内容语法 1.中文需要用双引号包含 例如:"异常",默认会被按照单字体分割检索 2.多个检索条件可以用 AND OR NOT 来组合查询 例如 "异常" AND "内容" 3.单个不可分割单词可以用*开头或者结尾进行模糊匹配 例如 *NullPoi…

2013年认证杯SPSSPRO杯数学建模C题(第二阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现: 交通运输作为国民经济的载体,沟通生产和消费,在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系,生产水平越高…

ARM FVP平台的terminal窗口大小如何设置

当启动ARM FVP平台时,terminal窗口太小怎么办?看起来非常累眼睛,本博客来解决这个问题。 首先看下ARM FVP平台对Host主机的需求: 通过上图可知,UART默认使用的是xterm。因此,我们需要修改xterm的默认字体设…

实景三维在数字乡村建设中的重要作用

随着科技的飞速发展,数字乡村建设已成为推动乡村振兴、实现农村现代化的重要途径。实景三维技术作为数字乡村建设的重要支撑,正逐渐在各个领域发挥着不可或缺的作用。本文将从实景三维技术在数字乡村中的应用场景、优势及未来展望等方面进行探讨&#xf…

Brain.js 的力量:构建多样化的人工智能应用程序

机器学习(ML)是人工智能 (AI) 的一种形式,旨在构建可以从处理的数据中学习或使用数据更好地执行的系统。人工智能是模仿人类智能的系统或机器的总称。 机器学习(ML)与复杂的数学纠缠在一起,让大多数初学者…

时序分解 | Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序列信号分解

时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解 目录 时序分解 | Matlab实现GWO-CEEMDAN基于灰狼算法优化CEEMDAN时间序列信号分解效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现GSWOA-VMD改进鲸鱼优化算法优化变分模态分解时间序…

盘点中国优秀付费资源站WordPress主题

中国优秀的付费资源站WordPress主题,它们专注于资源管理和分享,提供了丰富的功能和用户体验: 资源宝(ziyuanbao):这是一款功能强大的资源站主题,支持多种资源类型的上传、分类和展示&#xff0…