nnUnet使用

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

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 ~/PaddleSeg/contrib/MedicalSeg/
      !python nnunet/single_fold_eval.py --config configs/nnunet/msd_lung/nnunet_2d_msd_lung_fold0.yml --model_path output/2d_unet/fold0/iter_30000/model.pdparams --val_save_folder output/2d_val --precision fp16
      '''
      single_fold_eval需进行5次
      '''
      !python nnunet/all_folds_eval.py --gt_dir output/2d_val/gt_niftis --val_pred_dir output/2d_val
      
      # 3D UNet 验证
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      !python nnunet/single_fold_eval.py --config configs/nnunet/msd_lung/nnunet_3d_fullres_msd_lung_fold0.yml --model_path output/3d_unet/fold0/iter_30000/model.pdparams --val_save_folder output/3dfullres_val --precision fp16
      '''
      single_fold_eval需进行5次
      '''
      !python nnunet/all_folds_eval.py --gt_dir output/3dfullres_val/gt_niftis --val_pred_dir output/3dfullres_val
      
      1. Cascade UNet训练、验证
      # Cascade UNet lowres 训练
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      
      !python train.py --config configs/nnunet/msd_lung/nnunet_3dcascade_lowres_msd_lung_fold0.yml --log_iters 20 --precision fp16 --nnunet --save_dir output/cascade_lowres/fold0 --save_interval 1000 --use_vdl
      '''
      同样是5折训练
      '''
      
      # Cascade UNet lowres验证,并进行推理,得到下一阶段的输入-提供权重
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      
      !python nnunet/single_fold_eval.py --config configs/nnunet/msd_lung/nnunet_3dcascade_lowres_msd_lung_fold0.yml --model_path output/cascade_lowres/fold0/iter_30000/model.pdparams --val_save_folder output/cascade_lowres_val --precision fp16 --
      '''5折预测'''
      !python nnunet/all_folds_eval.py --gt_dir output/cascade_lowres_val/gt_niftis --val_pred_dir output/cascade_lowres_val
      

      cascade unet二阶段一定会涨点吗?
      不一定!二阶段数据处理将数据的体素间距统一成数据集中最小的体素间距,最小的体素间距并不一定是最优的,一阶段可能效果比二阶段好,这个需要选手自己尝试。

      # Cascade UNet fullres 训练
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      
      !python train.py --config configs/nnunet/msd_lung/nnunet_3dcascade_fullres_msd_lung_fold0.yml --log_iters 20 --precision fp16 --nnunet --save_dir output/cascade_fullres/fold0 --save_interval 1000 --use_vdl
      '''5折训练'''
      1
      2
      3
      4
      
      # Cascade UNet fullres 验证
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      
      !python nnunet/single_fold_eval.py --config configs/nnunet/msd_lung/nnunet_3dcascade_fullres_msd_lung_fold0.yml --model_path output/cascade_fullres/fold0/iter_30000/model.pdparams --val_save_folder output/cascade_fullres_val --precision fp16
      '''5折预测完成后,需要整合'''
      !python nnunet/all_folds_eval.py --gt_dir output/cascade_fullres_val/gt_niftis --val_pred_dir output/cascade_fullres_val
      
      1. Ensemble整合模型
      • def:nnUNet最后会评以下7个策略的精度,挑选精度最高的提交
      • 2D-UNet
        3D-UNet
        Cascade-UNet-lowres
        Cascade-UNet-fullres
        2D-UNet + 3D-UNet
        2D-UNet + Cascade-UNet-fullres
        3D-UNet + Cascade-UNet-fullres
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      #注意修改路径
      !python nnunet/ensemble.py --ensemble_folds \
      output/3dfullres_val\
      output/cascade_lowres_val\
      output/2d_val \
      --gt_dir output/cascade_lowres_val/gt_niftis \
      --plan_path msd_lung/preprocessed/Task006_Lung/nnUNetPlansv2.1_plans_2D.pkl \
      --output_folder output/ensemble
      
      

  1. 训练完成后

    • 预测——预测的结果同样支持模型间Ensemble。如果预测的结果需要Ensemble,加上**–save_npz参数**。
      比如想要:2D-UNet + 3D-UNet 的预测,就分别得到2个模型的预测结果,使用上述Ensemble命令集成。

      #2D预测
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      !python nnunet/predict.py --image_folder msd_lung/Task006_Lung/imagesTs\
      --output_folder output/nnunet_predict/2d_unet \
      --plan_path msd_lung/preprocessed/Task006_Lung/nnUNetPlansv2.1_plans_2D.pkl \
      --model_paths output/2d_unet/fold0/iter_30000/model.pdparams output/2d_unet/fold1/iter_30000/model.pdparams output/2d_unet/fold2/iter_30000/model.pdparams output/2d_unet/fold3/iter_30000/model.pdparams output/2d_unet/fold4/iter_30000/model.pdparams \
      --postprocessing_json_path output/2d_val/postprocessing.json \
      --model_type 2d \
      --save_npz
      
      # 3D UNet 预测
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      !python nnunet/predict.py --image_folder msd_lung/Task006_Lung/imagesTs\
      --output_folder output/nnunet_predict/3d_unet \
      --plan_path msd_lung/preprocessed/Task006_Lung/nnUNetPlansv2.1_plans_3D.pkl \
      --model_paths output/3d_unet/fold0/iter_30000/model.pdparams output/3d_unet/fold1/iter_30000/model.pdparams output/3d_unet/fold2/iter_30000/model.pdparams output/3d_unet/fold3/iter_30000/model.pdparams output/3d_unet/fold4/iter_30000/model.pdparams \
      --postprocessing_json_path output/3d_unet/postprocessing.json \
      --model_type 3d \
      --save_npz
      
      # Cascade UNet 预测,先使用lowres预测,在fullres预测
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      
      !python nnunet/predict.py--image_folder msd_lung/Task006_Lung/imagesTs\
      --output_folder output/nnunet_predict/lowres_pred \
      --plan_path msd_lung/preprocessed/Task006_Lung/nnUNetPlansv2.1_plans_3D.pkl \
      --model_paths output/cascade_lowres/fold0/iter_30000/model.pdparams output/cascade_lowres/fold1/iter_30000/model.pdparams output/cascade_lowres/fold2/iter_30000/model.pdparams output/cascade_lowres/fold3/iter_30000/model.pdparams output/cascade_lowres/fold4/iter_30000/model.pdparams \
      --postprocessing_json_path output/cascade_lowres_val/postprocessing.json \
      --model_type cascade_lowres
      
      #使用2阶段
      !python nnunet/predict.py --image_folder msd_lung/Task006_Lung/imagesTs\
      --output_folder output/nnunet_predict/fullres_pred \
      --plan_path msd_lung/preprocessed/Task006_Lung/nnUNetPlansv2.1_plans_3D.pkl \
      --model_paths output/cascade_fullres/fold0/iter_30000/model.pdparams output/cascade_fullres/fold1/iter_30000/model.pdparams output/cascade_fullres/fold2/iter_30000/model.pdparams output/cascade_fullres/fold3/iter_30000/model.pdparams output/cascade_fullres/fold4/iter_30000/model.pdparams \
      --postprocessing_json_path output/cascade_lowres_val/postprocessing.json\
      --model_type cascade_fullres \
      --save_npz \
      --lowres_segmentations output/nnunet_predict/lowres_pred
      

部署

  1. 仅以2D UNet为示例,演示模型的部署过程。

    • 导出静态图模型(五折训练对应五个模型);

    • 静态图推理(五折训练就对应五折推理)。
      PS:静态图推理的模型也支持Ensemble,需要在推理时加上–save_npz参数,Ensemble命令和5一致。

      # 静态图导出
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      '''导出5个模型'''
      !python nnunet/export.py --config configs/nnunet/msd_lung/nnunet_2d_msd_lung_fold0.yml \
      --save_dir output/static/2d_unet/fold0 \
      --model_path output/2d_unet/fold0/iter_30000/model.pdparams
      #fold1 2 3 4
      
      # 静态图多折推理
      %cd ~/PaddleSeg/contrib/MedicalSeg/
      
      !python nnunet/infer.py --image_folder msd_lung/Task006_Lung/imagesTs \
      --output_folder output/nnunet_static/2d_unet \
      --plan_path msd_lung/preprocessed/Task006_Lung/nnUNetPlansv2.1_plans_2D.pkl \
      --model_paths output/static/2d_unet/fold0/model.pdmodel output/static/2d_unet/fold1/model.pdmodel output/static/2d_unet/fold2/model.pdmodel output/static/2d_unet/fold3/model.pdmodel output/static/2d_unet/fold4/model.pdmodel \
      --param_paths output/static/2d_unet/fold0/model.pdiparams output/static/2d_unet/fold1/model.pdiparams output/static/2d_unet/fold2/model.pdiparams output/static/2d_unet/fold3/model.pdiparams output/static/2d_unet/fold4/model.pdiparams \
      --postprocessing_json_path output/2d_unet_val/postprocessing.json \
      --model_type 2d \
      --disable_postprocessing  \
      --save_npz
      
      
      
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你好!对于nnUNet使用教程,我可以为你提供一些基本的指导。nnUNet是一个用于医学图像分割的开源框架,旨在简化深度学习模型在医学图像上的训练和推理过程。 以下是一个简单的nnUNet使用教程的大纲: 1. 安装nnUNet:首先,你需要安装nnUNet框架。你可以在nnUNet的GitHub页面找到安装说明。 2. 数据准备:准备你的医学图像数据集。确保你的数据集包含正确的标签,并将其划分为训练集、验证集和测试集。 3. 数据预处理:nnUNet要求对数据进行预处理,包括将图像和标签裁剪为相同大小、进行数据增强等。你可以使用nnUNet提供的预处理脚本来完成这些操作。 4. 配置实验:创建一个配置文件来定义你的实验设置。在配置文件中,你需要指定数据路径、模型架构、训练参数等。 5. 训练模型使用nnUNet提供的训练脚本开始训练模型。根据你的配置文件,nnUNet将自动加载数据并开始训练。 6. 模型评估:在训练完成后,你可以使用nnUNet提供的评估脚本评估模型在测试集上的性能。 7. 模型推理:使用已经训练好的模型进行推理。nnUNet提供了推理脚本,你可以使用它来对新的医学图像进行分割。 请注意,这只是一个简要的教程大纲。如果你需要更详细的教程或遇到特定问题,请参考nnUNet的文档或在相关论坛上寻求帮助。祝你成功使用nnUNet进行医学图像分割!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值