【图像分割】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.mzph.cn/news/798059.shtml

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

相关文章

1.c++入门(命名空间、缺省参数、函数重载、引用、内联函数、for循环、auto关键字、指针空值nullptr)

1.c的第一个程序 // 方法一 #include<iostream>// namespace为命名空间的关键字&#xff0c;std为空间名&#xff1b; C标准库的东西放进std命名空间 using namespace std; int main() {cout << "hello world" << endl;return 0; }// 方法二 #in…

YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.6p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

【leetCode】2810. 故障键盘

文章目录 [2810. 故障键盘](https://leetcode.cn/problems/faulty-keyboard/)思路一&#xff1a;模拟代码&#xff1a;思路二&#xff1a;双端队列代码&#xff1a; 2810. 故障键盘 思路一&#xff1a;模拟 用StringBuilder来拼贴字符遍历字符串&#xff0c;如果遇到i,对拼贴好…

注解,自定义注解和元注解

1.注解 1.1.注解概述、作用 注解&#xff08;Annotation&#xff09;&#xff0c;也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性&#xff0c;与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面&#xff0…

《深入浅出多模态》:多模态经典模型CLIP

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、资料共享、行业最新动态以、实践教程、求职…

逆向案例14——cnki学术翻译AES加密分析,涉及保持会话和获取token值

python代码&#xff1a; import execjs import requests UA "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" token_url "https://dict.cnki.net/fyzs-front-api/getToken" url …

图像分割-RSPrompter

文章目录 前言1. 自动化提示器1.1 多尺度特征增强器1.2 RSPrompterAnchor-based PrompterQuery-based Prompter 2. SAM的扩展3. 结果WHU数据集NWPU数据集SSDD数据集 前言 《RSPrompter: Learning to prompt for remote sensing instance segmentation based on visual foundati…

一文读懂Memory consistency model (内存模型)

Memory consistency model又称Memory model (内存模型)&#xff0c;定义了使用Shared memory(共享内存)执行多线程(Multithread)程序所允许的行为规范。Memory model定义了软硬件接口规范&#xff0c;以便程序员预料硬件会有什么行为&#xff0c;而硬件实现者知道可以使用什么样…

牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f 思路 前缀树动态规划参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规…

OpenCV4.9处理平滑图像

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用OpenCV4.9的随机生成器和文本 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何使用 OpenCV …

助力瓷砖生产智造,基于YOLOv5全系列参数【n/s/m/l/x】模型开发构建瓷砖生产制造场景下1280尺寸瓷砖表面瑕疵检测识别系统

砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光&#xff0c;最后进行质量检测和包装。得益于产业自动化的发展&#xff0c;目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说&#xff0c;一条产线需要配数名质检工&#…

【三十三】【算法分析与设计】回溯(1),46. 全排列,78. 子集,没有树结构,但是依旧模拟树结构,回溯,利用全局变量+递归函数模拟树结构

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1&#xff0c;2&#xff0c;3] 输出&#xff1a;[[1&#xff0c;2&#xff0c;3]&#xff0c;[1&#xff0c;3&a…

缺陷检测项目 | 使用OpenCV实现纺织品表面缺陷检测

项目应用场景 面向纺织品表面缺陷检测场景&#xff0c;使用 OpenCV 来实现&#xff0c;因此无需深度学习复杂的训练流程&#xff0c;实现起来会更加便捷。 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md 项目采用 VisualStudio C# 开发&#xff0c;所以用 Visua…

AcWing---转圈游戏---快速幂

太久没写快速幂了... 这是一道数学题orz&#xff0c;能看出来的话答案就是 &#xff0c;但是很大&#xff0c;同时还要mod n&#xff0c;直接用快速幂即可。 快速幂模版&#xff1a; long long int power(long long int a,long long int b,long long int mod){long long int r…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

java流式计算Stream

java流式计算Stream 流(Stream)到底是什么呢? 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 “集合讲的是数据&#xff0c;流讲的是计算! ” 特点&#xff1a; Stream自己不会存储元素。 Stream不会改变源对象。相反&#x…

金三银四面试题(十六):MySQL面试都问什么(1)

在开发岗位面试中&#xff0c;MySQL基本是必考环节。所以接下来我们就进入MySQL八股文环节&#xff0c;看看都有哪些高频考题。 MySQL 中有哪些不同的表格&#xff1f; 在MySQL中&#xff0c;可以创建多种不同类型的表格&#xff0c;其中一些常见的类型包括&#xff1a; InnoD…

性能优化-如何爽玩多线程来开发

前言 多线程大家肯定都不陌生&#xff0c;理论滚瓜烂熟&#xff0c;八股天花乱坠&#xff0c;但是大家有多少在代码中实践过呢&#xff1f;很多人在实际开发中可能就用用Async&#xff0c;new Thread()。线程池也很少有人会自己去建&#xff0c;默认的随便用用。在工作中大家对…

ThingsBoard通过MQTT发送属性数据

MQTT基础 客户端 MQTT连接 属性上传API 案例 MQTT基础 MQTT是一种轻量级的发布-订阅消息传递协议&#xff0c;它可能最适合各种物联网设备。 你可以在此处找到有关MQTT的更多信息&#xff0c;ThingsBoard服务器支持QoS级别0&#xff08;最多一次&#xff09;和QoS级别1&…