当前位置:   article > 正文

nnUnet使用_unet cascade

unet cascade

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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7

      %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
      • 2
      • 3
      • 4
      #1.3安装依赖
      %cd ~/PaddleSeg/contrib/MedicalSeg
      !pip install -r requirements.txt
      !pip install medpy
      
      • 1
      • 2
      • 3
      • 4
      #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
      • 2
      • 3
      • 4
      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)自动混合精度训练
      '''
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      # 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折训练
      '''
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      # 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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      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折训练
      '''
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      # 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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6

      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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      # 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
      • 2
      • 3
      • 4
      • 5
      • 6
      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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10

  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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      # 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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      # 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
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19

部署

  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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      # 静态图多折推理
      %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
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/955035
推荐阅读
相关标签
  

闽ICP备14008679号