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

news2024/11/27 7:35:26

  以前觉得麻烦,一直没用过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.coloradmin.cn/o/1565080.html

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

相关文章

左值与右值,以及c++11的相关特性。

目录 左值 右值 左值引用总结: 右值引用总结: 右值引用使用场景和意义: 1、左值引用的使用场景: 编译器优化1: 2、移动构造与移动赋值: 3、右值引用的使用场景: 编译器优化2&#xff1a…

Qt_Note20_QML_自定义Grid控件与OpacityMask的使用

import QtQuick 2.12 import QtQuick.Window 2.12 import QtQuick.Controls 2.12 import QtGraphicalEffects 1.14Window {visible: truewidth: 640height: 480title: qsTr("Hello World")// 自定义Grid控件与OpacityMask的使用Grid {id: gridwidth: 15height: 200co…

SQL语句学习+牛客基础39SQL

什么是SQL? SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统(RDBMS)。 SQL 的范围包括数据插入、查询、更新和删除,数据库模式创建和修改,以及数据访问控制。 SQL语法 数据库表 一个…

Autosar-从0到1构建Autosar最小系统(免费)-1

1建立Ecu最小系统 1.1Ecu最小系统组成 Ecu最小系统至少需要:SWC、Com、ComM、EcuM、BswM、Os、RTE等。 Autosar各模块的配置以arxml文件形式保存,因此生成以上模块需要以下各个arxml文件。 模块 所需的arxml文件 准备好以上arxml文件后,就可…

python核心篇之桌面程序

推荐使用: wxPython 一. 安装wxPython 二. 第一个wxPython程序 展示 代码 # coding: utf-8import wx# 创建应用程序对象 app wx.App() # 创建窗口对象 frame wx.Frame(None, title"Hello World", size(300, 200), pos(100, 100)) # 显示窗口 frame.Show() # 进入主…

【Spring实战项目】SpringBoot3整合WebSocket+拦截器实现登录验证!从原理到实战

🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏《Spring 狂野之旅:从入门到入魔》 &a…

CV论文--2024.4.3

1、Style Aligned Image Generation via Shared Attention 中文标题:共享注意力下的风格对齐图像生成 简介:大规模文本到图像(T2I)模型在创意领域迅速崭露头角,可以从文本提示中生成视觉上引人入胜的输出。然而&#…

【卫星家族】 | 高分六号卫星影像及获取

1. 卫星简介 高分六号卫星(GF-6)于2018年6月2日在酒泉卫星发射中心成功发射,是高分专项中的一颗低轨光学遥感卫星,也是我国首颗精准农业观测的高分卫星,具有高分辨率、宽覆盖、高质量成像、高效能成像、国产化率高等特…

C语言 | Leetcode C语言题解之第8题字符串转换整数atoi

题目&#xff1a; 题解&#xff1a; int myAtoi(char * s){int i0;int out0;int pol1;int lenstrlen(s);if(len0) return 0;while(s[i] ) i; //删除空格if(s[i]-){ //判断正负pol-1;i;}else if(s[i]){pol1;i;}else{pol1;}while(s[i]!\0){if(s[i]<0||s[i]>9){ /…

【Turtle】海龟先生

什么是编程 计算机只懂0和1这样的语言&#xff0c;可是我们不懂&#xff0c;当我们希望 计算要能帮我们做事情的时候&#xff0c;该怎么办呢&#xff1f; 我们需要一种更简便的方法告诉计算机要做什么&#xff0c;所以人类发明了编程语言 利用计算机编程语言&#xff0c;我们…

Transformer - 注意⼒机制

Transformer - 注意⼒机制 flyfish 计算过程 flyfish # -*- coding: utf-8 -*-import torch import torch.nn as nn import torch.nn.functional as F import os import mathdef attention(query, key, value, maskNone, dropoutNone):# query的最后⼀维的⼤⼩, ⼀般情况下就…

动态规划详解(Dynamic Programming)

目录 引入什么是动态规划&#xff1f;动态规划的特点解题办法解题套路框架举例说明斐波那契数列题目描述解题思路方式一&#xff1a;暴力求解思考 方式二&#xff1a;带备忘录的递归解法方式三&#xff1a;动态规划 推荐练手题目 引入 动态规划问题&#xff08;Dynamic Progra…

QT背景介绍

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、QT背景 1.1什么是QT 1.2QT的发展历史 1.3什么是框架、库 1.4QT支持的平台 1.5QT的优点 1.6QT的…

分布式锁 — Redisson 全面解析!

前言 分布式锁主要是解决集群&#xff0c;分布式下数据一致性的问题。在单机的环境下&#xff0c;应用是在同一进程下的&#xff0c;只需要保证单进程多线程环境中的线程安全性&#xff0c;通过 JAVA 提供的 volatile、ReentrantLock、synchronized 以及 concurrent 并发包下一…

JVM_垃圾收集器

GC垃圾收集器 文章目录 GC垃圾收集器GC垃圾回收算法和垃圾收集器关系GC算法主要有以下几种四种主要的垃圾收集器SerialParallelCMSG1垃圾收集器总结查看默认垃圾收集器 默认垃圾收集器有哪些各垃圾收集器的使用范围部分参数说明 新生代下的垃圾收集器并行GC(ParNew)并行回收GC&…

[Python GUI PyQt] PyQt5快速入门

PyQt5快速入门 PyQt5的快速入门0. 写在前面1. 思维导图2. 第一个PyQt5的应用程序3. PyQt5的常用基本控件和布局3.1 PyQt5的常用基本控件3.1.1 按钮控件 QPushButton3.1.2 文本标签控件 QLabel3.1.3 单行输入框控件 QLineEdit3.1.4 A Quick Widgets Demo 3.2 PyQt5的常用基本控件…

morkdown语法转微信公众号排版(免费)

morkdown语法转微信公众号排版&#xff08;免费&#xff09; 源码来自githab&#xff0c;有些简单的问题我都修复了。大家可以直接去找原作者的源码&#xff0c;如果githab打不开就从我下载的网盘里下载吧。 效果

在制定OKR的过程中,应该怎么确定目标O的来源或方向?

在制定OKR&#xff08;Objectives and Key Results&#xff0c;目标与关键成果&#xff09;的过程中&#xff0c;确定目标O的来源或方向是至关重要的一步。一个明确、合理的目标能够为团队指明方向&#xff0c;激发团队成员的积极性和创造力&#xff0c;进而推动公司的整体发展…

【嵌入式智能产品开发实战】(十五)—— 政安晨:通过ARM-Linux掌握基本技能【GNU C标准与编译器】

目录 GNU C 什么是C语言标准 C语言标准的内容 C语言标准的发展过程 1.K&R C 2.ANSI C 3.C99标准 4.C11标准 编译器对C语言标准的支持 编译器对C语言标准的扩展 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1f44d;点赞✍评论⭐收藏 收录专栏: 嵌入式智能产品…

信息技术学院大数据技术专业开展专业实训周

四川城市职业学院讯&#xff08;信息技术学院 陈天伟&#xff09;日前&#xff0c;为提升学生的工匠精神和职业认知&#xff0c;信息技术学院邀请企业专家入驻眉山校区大数据实训基地&#xff0c;开展数据标识专业实训周。 数据标识是大数据专业的核心技术&#xff0c;数据标识…