nnUnet使用

本文详细介绍了如何使用PaddleSeg的MedicalSeg组件进行nnUnet的训练和验证,包括2D-UNet、3D-UNet和CascadeUNet的5折训练与验证过程,以及模型的Ensemble和静态图导出。整个流程涵盖了数据准备、依赖安装、模型训练、验证、预测和部署等关键步骤。

nnUnet使用

MedicalSeg/nnUnet组件介绍

  1. 组件结构

在这里插入图片描述

  1. 使用流程

      1. 准备工作:
      #1.1获取PaddleSeg组件
      #cd ~表示进入用户主目录
      %cd ~/
      !git clone https://gitee.com/PaddlePaddle/PaddleSeg.git
      !git pull
      %cd ~/PaddleSeg/
      !git checkout develop
      

      %cd ~/进入用户根目录,该指令不论当前工作目录是什么,均会返回根目录

      %cd ~/data/进入根目录下的data目录

      %cd data进入当前文件夹下的data目录,注意与~/data区别

      %cd …/返回上一根目录

      #1.2解压数据集
      %cd ~/
      !mkdir ~/PaddleSeg/contrib/MedicalSeg/msd_lung
      !tar -xf ~/data/data125872/Task06_Lung.tar -C ~/PaddleSeg/contrib/MedicalSeg/msd_lung
      
      #1.3安装依赖
      %cd ~/PaddleSeg/contrib/MedicalSeg
      !pip install -r requirements.txt
      !pip install medpy
      
      #1.4(可选)解压2D-UNet和Cascade UNet-lowres训练好的权重
      %cd ~/
      !mkdir ~/PaddleSeg/contrib/MedicalSeg/output
      !unzip -oq ~/data/data169512/2d_and_cascade_lowres.zip -d ~/PaddleSeg/contrib/MedicalSeg/output/
      
      1. 开始训练
      # 2D-UNet 训练————5折训练
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      !python train.py --config configs/nnunet/msd_lung/nnunet_2d_msd_lung_fold0.yml --log_iters 20 --precision fp16 --nnunet --save_dir output/2d_unet/fold0 --save_interval 1000 --use_vdl
      '''
      修改fold1/2/3/4分别训练即可
      考虑到内存问题,可增大save_interval
      --precison fp16表示Use AMP (Auto mixed precision)自动混合精度训练
      '''
      
      # 3D-UNet训练
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      !python train.py --config configs/nnunet/msd_lung/nnunet_3d_fullres_msd_lung_fold0.yml --log_iters 20 --precision fp16 --nnunet --save_dir output/3d_unet/fold0 --save_interval 1000 --use_vdl
      '''
      同样分别修改fold1/2/3/4进行5折训练
      '''
      

      train.py的可设置参数,具体查看train.py脚本

      —— log_iters记录训练的loss、cost等参数的轮数

      —— use_vdl记录训练参数,结束后可用于可视化

      —— resume_model=‘path’中断训练和恢复重新训练

      —— save_interval保存训练模型的轮数

      1. 验证——由于分为5折训练,故验证时5个模型分别在各自验证集验证,之后整合验证,即6次验证
      # 2D UNet验证-提供权重
      %cd 
### nnUNet 使用教程 nnUNet 是一种用于医学图像分割的自动化框架,它能够自动调整超参数并优化模型性能。以下是关于 nnUNet使用教程以及模型架构的相关说明。 #### 1. 导入必要的模块 为了实现高效的推理功能,nnUNet 需要导入多个 Python 模块和自定义模块。这些模块涵盖了数据预处理、模型加载、推理执行等多个方面[^1]。通过这种方式,开发者可以灵活地扩展框架的功能以适应不同的应用场景。 ```python import os from nnunet.inference.predict import predict_from_folder from nnunet.paths import folder_with_preprocessed_data, network_training_output_dir ``` #### 2. 数据集准备 在使用 nnUNet 进行训练之前,需要按照特定的数据结构来组织输入数据。这种文件夹结构通常包括 `imagesTr` 和 `labelsTr` 子目录,分别存储原始图像及其对应的标注文件[^2]。确保遵循此标准有助于简化后续流程中的配置工作。 #### 3. 训练过程概述 当一切就绪后,可以通过命令行工具启动训练脚本: ```bash nnUNet_train 3d_fullres TaskXXX_NameOfYourTask fold_X ``` 这里,“3d_fullres”表示所选分辨率模式;“TaskXXX_NameOfYourTask”应替换为实际的任务名称;而 “fold_X” 则指定了交叉验证的具体折数。 --- ### nnUNet 模型架构详解 nnUNet 构建了一个基于 U-Net 的深度学习网络,并针对不同类型的医疗影像进行了改进。主要特点如下: #### a) 自动化设计 该框架可以根据给定数据集的特点动态调整网络层数量以及其他重要参数设置。这意味着即使对于新手来说也无需过多担心复杂的调参问题。 #### b) 多尺度特征提取 通过引入跳跃连接机制,在下采样过程中捕获全局上下文信息的同时保留局部细节特性。这一策略显著提高了最终预测结果的质量。 #### c) 条件实例标准化 (Instance Normalization) 相较于传统的批量规范化方法(batch normalization),条件实例标准化更适用于小型批次甚至单样本情况下的训练场景。因此被广泛应用于医学领域内的各种任务当中[^1]。 #### d) 可视化支持(可选项) 如果希望进一步探索内部工作机制,则可通过额外安装 hiddenlayer 工具包获得更加直观的理解途径: ```bash pip install --upgrade git+https://github.com/FabianIsensee/hiddenlayer.git ``` 这一步并非强制要求完成整个项目所需步骤之一,但对于研究者而言确实提供了一种便利手段去观察神经元之间的相互作用关系变化趋势图表展示形式呈现出来[^2]。 ---
### 使用NNUNet处理PNG格式的医学影像数据 对于PNG格式的医学影像数据,在使用NNUNet进行训练或预测前,通常需要先将其转换为适合NNUNet使用的标准格式。由于NNUNet主要针对的是诸如DICOM、NIfTI等常用医学图像格式设计[^1],因此建议将PNG文件转化为这些格式之一。 #### 转换PNG到NIfTI格式 为了使PNG图片兼容于NNUNet框架,可以采用Python中的`PIL`库加载并预处理PNG图像,再利用`nibabel`库保存为`.nii`或`.nii.gz`格式: ```python from PIL import Image import numpy as np import nibabel as nib import os def png_to_nifti(png_folder, output_file): images = [] # 假设png_folder内按顺序排列着一系列切片图 for filename in sorted(os.listdir(png_folder)): if not filename.endswith('.png'): continue img_path = os.path.join(png_folder, filename) image = Image.open(img_path).convert('L') # 将彩色图转灰度图 array = np.array(image) images.append(array) volume_data = np.stack(images, axis=-1) # 组合成三维矩阵 affine_matrix = np.eye(4) # 创建仿射变换矩阵,默认单位阵即可满足需求 nifti_image = nib.Nifti1Image(volume_data, affine=affine_matrix) nib.save(nifti_image, output_file) # 示例调用方法 png_directory = './path/to/png/files' output_filename = 'converted_volume.nii.gz' png_to_nifti(png_directory, output_filename) ``` 完成上述转化过程之后,就可以按照官方文档指导准备相应的配置文件,并执行NNUNet命令来进行模型训练或是推理工作了。 #### 准备用于NNUNet的数据集结构 确保创建符合NNUNet预期的任务目录布局,其中应包含如下子文件夹: - `imagesTr`: 存放训练阶段输入图像(.nii/.nii.gz),命名规则如case_0000.nii.gz; - `labelsTr`: 对应每张训练图像的真实标签mask(.nii/.nii.gz), 同样遵循相同编号约定; - `imagesTs`(可选): 测试集中仅含有的无标注测试样本; - `dataset.json`: 描述整个数据集元信息的关键JSON文件,包括但不限于模态数量、类别数等重要参数设置。 一旦完成了以上准备工作,则可以直接参照[NNUNet GitHub页面](https://github.com/MIC-DKFZ/nnUNet)上的说明来启动实验流程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值