nnUNet_v2(Linux)

2024年最全nnU-Netv2在服务器上使用全流程(小白边踩坑边学习的记录),阿里开发7年大牛 (服务器的terminal)直接输入nvidia-smi。 阅读详情
AI摘要

本文详细介绍了如何在Linux环境下配置nnUNet进行医学影像分割,包括创建虚拟环境、数据集的组织与准备、数据转化、预处理、训练、测试、寻找最优配置以及后处理过程,适合nnUNet初学者参考。

目录

一、环境配置

二、数据集准备

三、数据转化

四、数据预处理

五、训练

六、测试

七、寻找最优配置

八、后处理

九、screen的用法


最近在使用nnUNet做医学影像分割,为大家提供参考。

官方使用说明地址:

https://github.com/MIC-DKFZ/nnUNet/blob/master/documentation/how_to_use_nnunet.md

一、环境配置

1. 创建虚拟环境(anaconda 3)

conda create -n nnUnet python=3.9
conda activate nnUnet

2. 配置nnUNet_v2

(1)安装nnUNet

git clone https://github.com/MIC-DKFZ/nnUNet.git
cd nnUNet
pip install -e .

(2)安装hiddenlayer(可选,为了输出网络结构示意图)

pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git

如果在实际使用中发现graphviz库报错:"failed to execute PosixPath('dot'), make sure the Graphviz executables are on your systems' PATH"

请使用以下命令安装dot:

conda install -c conda-forge graphviz

3. 配置环境变量

修改位于/home/user路径下的.barshrc文件,在文件末端输入:

export nnUNet_raw="/home/user_name/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data"
export nnUNet_preprocessed="/home/user_name/nnUNet/nnUNetFrame/DATASET/nnUNet_preprocessed"
export nnUNet_results="/home/user_name/nnUNet/nnUNetFrame/DATASET/nnUNet_results"

4. 更新配置(位于/home/user路径下)

source .bashrc

二、数据集准备

nnUnet有严格的数据集结构要求,按照以下步骤制作自定义数据集:

1. 安装好nnUNet后,在home/user/nnUNet/目录下创建文件夹,命名为nnUNetFrame

2. 在nnUNetFrame下创建DATASET文件夹

3. 在DATASET文件夹下创建三个文件夹,分别为nnUNet_results、nnUNet_raw、nnUNet_preprocessed

如图:

4. 在nnUNet_raw下创建nnUNet_raw_data与nnUNet_cropped_data(后者为可选项)文件夹

5. 在nnUNet_raw_data下创建Task对应的文件夹,以rmyy数据为例,Task200_ctrmyy

注:每一个Task都有唯一的ID,最好从200开始,以免与原有数据集发生冲突。

6. 在Task200_ctrmyy下存放训练、测试数据及标签,并且创建一个dataset.json文件

可以运行脚本自动生成dataset.json文件。

"""
位置:/home/suian/nnUNet/nnUNetFrame/create_data_json.py
创建数据集的json
"""
import os
import json
from collections import OrderedDict

path_originalData = r"/home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/"
Task_name = 'Task200_ctrmyy'
train_real_image = os.listdir((path_originalData + Task_name + "/imagesTr"))
train_real_label = os.listdir((path_originalData + Task_name + "/labelsTr"))
test_real_image = os.listdir((path_originalData + Task_name + "/imagesTs"))
print(train_real_image)
for idx in range(len(train_real_image)):
    print({'image': "./imagesTr/%s" % train_real_image[idx],
           "label": "./labelsTr/%s" % train_real_label[idx]})

# # -------下面是创建json文件的内容--------------------------
# # 可以根据你的数据集,修改里面的描述
json_dict = OrderedDict()
json_dict['name'] = "ct_rmyy"  # 任务名
json_dict['description'] = " Segmentation"
json_dict['tensorImageSize'] = "3D"
json_dict['reference'] = "see challenge website"
json_dict['licence'] = "see challenge website"
json_dict['release'] = "0.0"
# 这里填入模态信息,0表示只有一个模态,还可以加入“1”:“MRI”之类的描述,详情请参考官方源码给出的示例
json_dict['modality'] = {"0": "CT"}

# 这里为label文件中的标签,名字可以按需要命名
########下面一行在参考的基础上做了修改######
json_dict['labels'] = {'0': 'background',
                       '1': "LV",
                       '2': "RV",
                       '3': "LA",
                       '4': "RA",
                       '5': "Aorta",
                       '6': "PA",
                       '7': "myo",
                       '8': "SVC",
                       '9': "IVC",
                       '10': "PV"}

# 下面部分不需要修改
json_dict['numTraining'] = len(train_real_image)
json_dict['numTest'] = len(test_real_image)
json_dict['file_ending'] = '.nii.gz'

json_dict['training'] = []
for idx in range(len(train_real_image)):
    json_dict['training'].append({'image': "./imagesTr/%s" % train_real_image[idx],
                                  "label": "./labelsTr/%s" % train_real_label[idx]})

json_dict['test'] = ["./imagesTs/%s" % i for i in test_real_image]
with open(os.path.join(path_originalData + Task_name, "dataset.json"), 'w') as f:
    json.dump(json_dict, f, indent=4, sort_keys=True)
# 输出文件夹:path_originalData

三、数据转化

准备好数据和dataset.json文件后,进行数据转化:

nnUNetv2_convert_MSD_dataset -i /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task300_FullWholeHeart -overwrite_id 300

命令完成后会在同级文件夹下生成新的Dataset200_ctrmyy文件夹,内部包含转化后的数据(实际上就是把文件重命名以说明当前模态)

会生成新的dataset.json(内容和刚刚自己创建的没什么不同,只是v2相对于v1有些区别,不用管)以及重命名后的数据:

注:Task_x下的dataset.json中label键值对为"0": "background"(b区分大小写);Dataset_x下为”background”: 0。(数据转化命令会自动实现)

四、数据预处理

nnUNetv2_plan_and_preprocess -d 300 --verify_dataset_integrity

结果存放在../DATASET/nnUNet_preprocessed目录下,会生成2d/3d_lowres/3d_fullres三种配置的预处理结果。(Default: 2d 3d_fullres 3d_lowres)

可以通过 -c CONFIGURATIONS设定需要生成的预处理文件,比如:

nnUNetv2_plan_and_preprocess -d 300 -c 3d_fullres --verify_dataset_integrity

五、训练

首先设定GPU编号:

export CUDA_VISIBLE_DEVICES=0
echo $CUDA_VISIBLE_DEVICES

修改训练文件中的num_epochs(原先代码中是1000,训练起来太久了)

(位于/home/user/nnUNet/nnunetv2/training/nnUNetTrainer下nnUNetTrainer.py文件内)

使用脚本训练:

source /home/suian/nnUNet/scripts/train.sh

train.sh脚本内容:

export CUDA_VISIBLE_DEVICES=0
echo $CUDA_VISIBLE_DEVICES
for fold in {0..4}
do
    nnUNetv2_train 300 3d_fullres $fold
done

如果训练意外中断,使用--c恢复训练(需要指定第几折,如第1折):

nnUNetv2_train 300 3d_fullres 0 --c

六、测试

(如果想要确定最佳配置后再测试,可以使用nnUNetv2_find_best_configuration,详见七。)

首先设定GPU编号:

export CUDA_VISIBLE_DEVICES=1
echo $CUDA_VISIBLE_DEVICES

模板:

nnUNetv2_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -d DATASET_NAME_OR_ID -c CONFIGURATION -npp 1

例子:

export CUDA_VISIBLE_DEVICES=1
echo $CUDA_VISIBLE_DEVICES
# 1. rmyy
nnUNetv2_predict -i /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Dataset200_ctrmyy/imagesTs -o /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/test_results/Dataset200_ctrmyy -d 200 -c 3d_fullres -npp 1
# 2. rmyy_on_cq:
nnUNetv2_predict -i /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Dataset201_ctcq/imagesTs -o /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/test_results/rmyy_on_cq -d 200 -c 3d_fullres -npp 1
# 3. cq
nnUNetv2_predict -i /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Dataset201_ctcq/imagesTs -o /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/test_results/Dataset201_ctcq -d 201 -c 3d_fullres -npp 1
# 4. FullWholeHeart
nnUNetv2_predict -i /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Dataset300_FullWholeHeart/imagesTs -o /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/test_results/Dataset300_FullWholeHeart -d 300 -c 3d_fullres -npp 1

七、寻找最优配置

前提是训练了2d、3d_lowres、3d_fullres中的多个配置。

模板:

nnUNetv2_find_best_configuration DATASET_NAME_OR_ID -c CONFIGURATIONS

例子:

nnUNetv2_find_best_configuration 300 -c 2d 3d_fullres --disable_ensembling

八、后处理

寻找最优配置后,会在命令行输出后处理所使用的代码,复制粘贴即可。

例子:

nnUNetv2_apply_postprocessing 
-i /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/prediction_results/Dataset201_ctcq 
-o /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/prediction_results/ Dataset201_ctcq/ Dataset201_ctcq_pp 
-pp_pkl_file /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/Dataset201_ctcq/nnUNetTrainer__nnUNetPlans__2d/crossval_results_folds_5/postprocessing.pkl 
-np 1 -plans_json /home/suian/nnUNet/nnUNetFrame/DATASET/nnUNet_results/Dataset201_ctctcq/nnUNetTrainer__nnUNetPlans__2d/plans.json

也可以在相应文件夹找到:

九、screen的用法

1. 命令:

screen -S <session_name> # 启动一个screen会话

screen -ls # 列出所有的screen会话

screen -r <session_name or id> # 恢复一个Detached会话

screen -d <session_name or id> # 分离一个Attached会话

screen -S <session_name or id> -X quit # 关闭整个screen会话

2. 在一个screen会话中,使用以下命令:

Ctrl+a+d # 分离当前会话

Ctrl+a+c # 在当前screen会话中创建一个新的窗口

Ctrl+a+n # 切换到下一个窗口

Ctrl+a+p # 切换到上一个窗口

exit # 退出并关闭screen

参考博客:

[1] 服务器中的screen 命令_screen关闭会话-优快云博客

[2] nnUNet保姆级使用教程!从环境配置到训练与推理(新手必看)-优快云博客

[3] nnUNet详细笔记教程(Linux下,只有实验没有原理)-优快云博客

[4] 医学图像分割 3D nnUNet全流程快速实现-优快云博客

医学图像分割 nnUNetV2 分割自定义2d数据集 nnUNetV2使用 阅读详情

相关推荐

一文实现nnUNet v2 分割肾脏肿瘤数据集KiTS19

nnUNet v2实现KiTS分割

xin_yan_tang的博客 4230

nnU-Net v2的环境配置到训练自己的数据集(详细步骤)

nnUNet V2的环境配置以及训练自己的数据集详细过程

m0_45521766的博客 3万+

nnUNet_v2实战:从零部署到心脏CT分割的Linux全流程解析

本文详细解析了在Linux系统上从零部署nnUNet_v2并进行心脏CT分割的全流程,包括环境配置、数据集构建、预处理与训练技巧、推理优化及后处理。特别针对nnUNet在Linux环境下的常见问题提供了实用解决方案,帮助开发者高效完成医学影像分割任务。

weixin_30329623的博客 520

【nnUNetv2实践】一、nnUNetv2安装

nnUNet是一个自适应的深度学习框架,专为医学图像分割任务设计。此外,nnUNet还提供了丰富的文档和示例,帮助用户更好地了解和使用该框架。要使用nnUNet,用户需要安装Python和相应的深度学习框架,然后按照官方文档提供的步骤进行操作即可。总的来说,nnUNet是一个功能强大、易于使用的深度学习框架,特别适用于医学图像分割任务。它的自适应特性、自动化流程和先进的训练策略使得用户能够更高效地构建和训练模型,同时获得更好的性能表现。本文介绍nnunetv2的安装方法。

AI爱好者的博客,分享计算机领域相关知识 1万+

nnUNet_v2实战:从零到一在Linux上构建医学影像分割流水线

本文详细介绍了如何在Linux系统上从零开始构建nnUNet_v2医学影像分割流水线。涵盖环境配置、数据集准备、数据预处理、模型训练、测试与后处理等关键步骤,并分享实战中的经验技巧和常见问题解决方案,帮助开发者高效部署和应用nnUNet_v2进行医学影像分析。

weixin_29079643的博客 325

nnUNet_v2实战:从零部署到心脏CT分割(Linux环境)

本文详细介绍了在Linux环境下从零部署nnUNet_v2进行心脏CT分割的完整流程,包括环境配置、数据集准备、数据预处理、多GPU训练优化、推理与后处理等关键步骤。通过实战经验分享,帮助开发者快速掌握nnUNet_v2在医学影像分割中的应用技巧,提升心脏CT分割的准确性和效率。

weixin_33690367的博客 304

nnUNet_v2实战:如何用你自己的CT/MRI数据快速跑通第一个3D分割模型(Linux环境)

本文详细介绍了如何在Linux环境下使用nnUNet_v2快速构建3D医学影像分割模型。从环境配置、自定义数据集构建到模型训练与优化,提供了完整的实战指南,特别针对CT/MRI数据的处理流程进行了深入解析,帮助研究者和工程师高效实现医学影像分析任务。

weixin_30596165的博客 404

nnUNet_v2实战:从零搭建Linux环境下的医学影像分割全流程

本文详细介绍了在Linux环境下从零部署nnUNet_v2医学影像分割框架的全流程。内容涵盖环境配置、数据集准备与格式转换、自动化预处理与实验规划、模型训练与交叉验证、模型推理与最优配置选择,以及后处理与实战技巧。旨在帮助研究者和开发者快速掌握这一强大的自动化分割工具,提升医学影像分析效率。

weixin_29044157的博客 83

nnU-Net 路径环境变量完全指南:nnUNet_raw、nnUNet_preprocessed、nnUNet_results 与 nnUNet_extTrainer 的设置与原理

本文是 nnU-Net v2(nnunetv2)路径配置的权威实操指南,围绕官方文档 [documentation/setting_up_paths.md](https://link.gitcode.com/i/86202030835f8f069b8b394f9fc260d2) 展开。nnU-Net 通过环境变量来确定原始数据(raw data)、预处理数据(preprocessed data)和

gitblog_00116的博客 848

Mac/Windows/Linux三平台实测:nnUNet V2最新版安装与跨平台兼容性验证

本文详细介绍了nnUNet V2在Mac、Windows和Linux三大平台上的安装步骤与跨平台兼容性验证。通过实测数据展示了不同平台下的性能表现和常见问题解决方案,帮助医学图像分割开发者高效部署nnUNet V2,特别针对Apple Silicon的MPS加速和CUDA支持提供了优化建议。

weixin_30240349的博客 204

nnUNet v2环境配置避坑指南:从CUDA版本到依赖包安装的完整流程(含Linux/Windows)

本文详细解析了nnUNet v2环境配置的全流程,包括CUDA版本适配、依赖包安装及UKAN模型切换等关键步骤。针对医学影像分割领域,提供了从硬件核查到模型训练的完整指南,特别解决了CUDA冲突和依赖安装等常见问题,帮助开发者高效搭建nnUNet v2环境。

weixin_29038303的博客 382

nnUNet-v2 官方调用教程(节选关键内容)

如何调用2023.03.17最新发布的nnUNet-v2。详细教程!

RickieLim的博客 4834

nnUNet_v2在Linux服务器上的高效部署与自动化训练流水线搭建心得

本文详细介绍了nnUNet_v2在Linux服务器上的高效部署与自动化训练流水线搭建实战,涵盖环境配置、任务调度、数据流水线自动化设计等关键环节。通过Conda隔离环境构建、智能数据集注册系统和动态GPU分配策略,显著提升医学影像分割任务的效率与可扩展性,适用于多任务并行和工业级解决方案。

weixin_42552637的博客 182

nnU-Net v2 完整安装指南:系统要求、路径配置与 nnUNetv2 命令行工具详解

本文面向需要在本机(Linux / Windows / macOS)部署 nnU-Net v2 的开发者与研究人员,系统性地讲解安装前必须满足的软硬件条件、PyTorch 与 nnunetv2 的安装顺序、三大数据路径环境变量的设置方法,以及安装后获得的 `nnUNetv2_*` 命令行工具族。读完本文,你将能够在一台新机器上从零完成 nnU-Net v2 的安装、路径配置与安装验证,并正确选择数

gitblog_00199的博客 1005

【保研经验】北科自动化到北大工学院

作者:办公室某学长 谢邀。。。作为拖延症晚期患者,希望能在我科开学前写完。 先简单介绍一下我的保研过程,申请了清华叉院&amp;北大叉院大数据&amp;北大信科计算机夏令营,三者都没入营;申请了自所夏令营(自所来宣讲时未交简历,这是重大错误),给了第二批补录但没去;最终九推去了北大工学院。我的这次保研最终成功的经历可以说有一定运气成分,不具有普适性,但在前期准备过程中还是有经验可以分享的。 ...

ruanjianbu的博客 1796

大话西游2经典单机版V8:一键架设+GM全功能+仙玉自由修改

本文详细介绍大话西游2经典单机版V8的一键架设教程和GM全功能使用指南,包括仙玉自由修改技巧。该版本无需虚拟机,解压即玩,完美还原官服经典玩法,支持离线运行,是老玩家重温经典和新玩家体验游戏的理想选择。

weixin_27303545的博客 1133

nnU-Net v2 安装与初始化配置完全指南:从零搭建首个 nnU-Net 运行环境

本文是 nnU-Net v2(即 `nnunetv2` 包)的**首次运行环境搭建指南**,系统覆盖 PyTorch 前置安装、`nnunetv2` 包安装(含开发模式与 Intel macOS 特殊处理)、三大目录(`nnUNet_raw` / `nnUNet_preprocessed` / `nnUNet_results`)的规划与创建、跨平台环境变量设置,以及安装后的验证方法。读完本文,你将

gitblog_00329的博客 408

初识数据结构之入门必懂——线性表(顺序表)

本文将介绍数据结构中的线性表与线性表中最简单的结构——顺序表

m0_64705485的博客 905

别再为nnUNet环境变量头疼了:手把手教你配置BraTS2021数据集路径(附完整代码)

本文详细解析了nnUNet环境变量配置的常见问题,特别是针对BraTS2021数据集的路径设置。通过跨平台配置指南和完整代码示例,帮助用户快速解决路径错误和预处理问题,优化医学影像分析流程。

weixin_30819085的博客 299

Docker部署 SRS rtmp/flv流媒体服务器

SRS(Simple Realtime Server)是一款开源的流媒体服务器,具有高性能、高可靠性、高灵活性的特点,能够支持直播、点播、转码等多种流媒体应用场景。SRS 不仅提供了流媒体服务器,还提供了适用于多种平台的客户端 SDK 和在线转码等辅助服务,是一款十分强大的流媒体解决方案。

m0_56659620的博客 4869

Kalibr标定避坑指南:如何用AprilGrid板快速完成双目IMU标定

本文详细介绍了使用AprilGrid板进行Kalibr双目IMU联合标定的实战技巧,包括标定工具选型、数据采集优化、标定流程及结果验证。通过AprilGrid板的唯一标识性和抗遮挡优势,结合IMU静止标定和运动激励设计,显著提升标定精度。文章还提供了常见报错处理和高级优化技巧,帮助开发者高效完成传感器标定。

sunny的博客 282

nnunet入门之一 (CT图像分割)

nnunet用于CT图像分割。

l2181265的博客 1644

国产FPGA逆袭!深度评测复旦微RFVU3P5G核心板在相控阵雷达中的表现

本文深度评测了复旦微RFVU3P5G核心板在相控阵雷达中的实战表现。该核心板凭借射频直采架构、高采样率ADC/DAC及丰富的DSP资源,在多通道同步精度、动态范围及系统稳定性等关键指标上表现出色,展现了国产FPGA在高端雷达应用中的硬核实力与供应链自主价值。

b0c1d2的博客 725

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

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

风巽·剑染春水的博客 2714

运维系列【仅供参考】:微信版本过低 使用CheatEngine绕过

微信版本过低 使用CheatEngine绕过

weixin_54626591的博客 2135

基于GELAN模块的YOLOv8改进-C2f结构替换与轻量化与高效涨点优化研究

本文详细探讨了在YOLOv8架构中利用YOLOv9的GELAN模块替换C2f结构的改进方法。轻量化版本在资源受限的场景中具有显著的推理效率提升,适用于边缘设备和移动端应用。高效涨点版本则在检测精度上实现了大幅突破,特别适合高精度要求的任务。实验结果显示,GELAN模块相比原C2f模块,在参数量与计算量间取得了更好的平衡,同时提升了检测性能。此外,本文还展示了结构图、训练代码和部署优化方案,为研究者和开发者提供了实践参考。

博客 1437
下一篇: MIT 6.S191: Evidential Deep Learning学习笔记
exploreandconquer
博客等级 码龄3年 1620粉丝 23原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

exploreandconquer

谢谢老板,老板大气!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值