赞
踩
使用流程
#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/
# 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保存训练模型的轮数
# 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
# 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
%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
训练完成后
预测——预测的结果同样支持模型间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
仅以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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。