当前位置:   article > 正文

【图像分割】nnUnetV1与V2的Linux部署与应用命令_nnunet v1 jason文件

nnunet v1 jason文件

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


1、部署

  首先,我有一个环境,这个环境可以是以前就有的,也可以为了nnunet重新建一个,给它一个温暖的家。

第一步,激活环境:

source activate myMRI
  • 1

第二步,安装nnunet:

pip install nnunet
  • 1

  安装完了可以发现,nnunetV1和nnunetV2都安装上了:

在这里插入图片描述

第三步,查看与进入.bashrc文件:

ls -al /home/qijing   # 查看
vim ~/.bashrc  # 进入文件
  • 1
  • 2

第四步,修改.bashrc文件:

  直接按 i 键可以对文件进行修改,若采用nnunetV1,则文件底部添加:

export nnUNet_raw_data_base="/mnt/data_2/qijingunet/nnUNet_raw"
export nnUNet_preprocessed="/mnt/data_2/qijingunet/nnUNet_preprocessed"
export RESULTS_FOLDER="/mnt/data_2/qijingunet/nnUNet_trained_models"
  • 1
  • 2
  • 3

  若采用nnunetV2,则文件底部添加:

export nnUNet_raw="/mnt/data_2/qijingunet/nnUNet_raw"
export nnUNet_preprocessed="/mnt/data_2/qijingunet/nnUNet_preprocessed"
export nnUNet_results="/mnt/data_2/qijingunet/nnUNet_trained_models"
  • 1
  • 2
  • 3

  这三个路径可以根据自己的文件夹名字设置,我是给V1和V2都设置了:

在这里插入图片描述

  修改完成后,Esc + :+ wq 退出并保存修改之后的文件:Esc 键退出编辑模式,英文模式下输入 :wq ,然后回车 (write and quit)

第五步,更新.bashrc文件:

source ~/.bashrc
  • 1

第六步,验证路径设置正确,并且应该打印出正确的文件夹:

echo $RESULTS_FOLDER etc
  • 1

  验证如下所示:

在这里插入图片描述


2、应用

  部署好了nnunet,得用起来呀,我们试试十项分割挑战赛的数据集下载传送

  以Task02_Heart为例,下载好的文件夹如下所示,其中imagesTr存放训练数据,imagesTs存放测试数据,labelsTr存放训练数据标签,dataset.json是数据集的信息。

在这里插入图片描述

第一步,数据格式转换:

  nnunetV1命令:

nnUNet_convert_decathlon_task -i $nnUNet_raw_data_base/nnUNet_raw_data/Task02_Heart
  • 1

  nnunetV2命令:

nnUNetv2_convert_MSD_dataset -i $nnUNet_raw/Task02_Heart
  • 1

  -i 后面也可以写绝对路径:

nnUNetv2_convert_MSD_dataset -i /mnt/data_2/qijingunet/nnUNet_raw/nnUNet_raw_data/Task02_Heart
  • 1

  运行完成后,在同目录下生成一个名为Dataset002_Heart的文件夹。

  一般制作自己的数据集,可以直接制作成这一步的样子。

  imagesTr文件夹如下所示,其中_0000表示模态,像Task01_BrainTumour数据集,训练数据会有四个模态。

在这里插入图片描述

  labelsTr文件夹如下所示,与imagesTr文件夹中的数据相对应:

在这里插入图片描述

  dataset.json文件信息如下,nnUnetV2的dataset.json信息比nnUnetV1简单很多,如果是自己的数据集,可以写代码生成json信息文件,当然如果按V2这个形式,复制过去改是最方便的啦~

在这里插入图片描述

第二步,数据预处理:

  nnunetV1命令:

nnUNet_plan_and_preprocess -t 002 --verify_dataset_integrity
  • 1

  nnunetV2命令:

nnUNetv2_plan_and_preprocess -d 002 --verify_dataset_integrity
  • 1

  其中,002是任务id号,预处理完成后,会在nnUNet_preprocessed文件夹中生成一个Dataset002_Heart同名文件夹,里面包含以下内容:

在这里插入图片描述

第三步,模型训练:

(1)训练2D U-Net模型

  nnunetV1命令:

nnUNet_train 2d nnUNetTrainerV2 Task002_Heart 3
nnUNet_train 2d nnUNetTrainerV2 002 3
  • 1
  • 2

  可以写文件夹全名,也可以只写任务id号,最后的数字表示第几折,默认取值为[0,1,2,3,4],

  nnunetV2命令:

nnUNetv2_train 002 2d 0
  • 1

  运行命令后,会在nnUNet_preprocessed/Dataset002_Heart文件夹中生成一个splits_final.json文件,其中存储的就是交叉验证的数据划分信息,当然啦,如果想自己划分也可以修改这个文件。

在这里插入图片描述

  当然啦,一折一折跑还得看着它,挺麻烦的,想要一个命令实现五折交叉验证怎么办咧

  使用 && 运行多个 Linux 命令:

nnUNet_train 2d nnUNetTrainerV2 002 0 && nnUNet_train 2d nnUNetTrainerV2 002 1 && nnUNet_train 2d nnUNetTrainerV2 002 2 && nnUNet_train 2d nnUNetTrainerV2 002 3 && nnUNet_train 2d nnUNetTrainerV2 002 4
  • 1
nnUNetv2_train 002 2d 0 && nnUNetv2_train 002 2d 1 && nnUNetv2_train 002 2d 2 && nnUNetv2_train 002 2d 3 && nnUNetv2_train 002 2d 4
  • 1

  nnUNet五折交叉验证运行结束后可在以下路径中生成五个fold文件夹:

nnUNet_trained_models/nnUNet/2d/Task002_Heart/nnUNetTrainerV2__nnUNetPlansv2.1
  • 1

在这里插入图片描述

(2)训练3D full resolution U-Net模型

  nnunetV1命令:

nnUNet_train 3d_fullres nnUNetTrainerV2 Task002_Heart 2
  • 1

  nnunetV2命令:

nnUNetv2_train 002 3d_fullres 0
  • 1
(3)训练3D U-Net cascade模型

  nnunetV1命令:

# 第一步:3D low resolution U-Net训练
nnUNet_train 3d_lowres nnUNetTrainerV2 Task002_Heart 0  
# 第二步:3D full resolution U-Net 训练
nnUNet_train 3d_cascade_fullres nnUNetTrainerV2CascadeFullRes Task002_Heart 0  
  • 1
  • 2
  • 3
  • 4

  nnunetV2命令:

# 第一步:3D low resolution U-Net训练
nnUNetv2_train 002 3d_lowres 0 
# 第二步:3D full resolution U-Net 训练
nnUNetv2_train 002 3d_cascade_fullres 0
  • 1
  • 2
  • 3
  • 4

第四步,自动确定最佳配置:

  五折交叉验证跑完后,可以设置自动识别最适合数据的组合,–strict 参数代表即使配置不存在仍继续执行。

  nnunetV1命令:

nnUNet_find_best_configuration -m 2d 3d_fullres 3d_lowres 3d_cascade_fullres -t 002 --strict
  • 1

  nnunetV2命令:

nnUNetv2_find_best_configuration 002 -c 2d 
  • 1

第五步,模型测试:

  nnunetV1命令:

nnUNet_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -t TASK_NAME_OR_ID -m CONFIGURATION
  • 1

  其中,INPUT_FOLDER 是测试数据集的路径,OUTPUT_FOLDER 为指定的输出文件夹,TASK_NAME_OR_ID 为任务 id 号,CONFIGURATION 代表所使用的 UNet 配置。

  nnunetV2命令:

nnUNetv2_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -d DATASET_NAME_OR_ID -c CONFIGURATION --save_probabilities
  • 1

  交叉验证跑完可以采用以下命令:

nnUNetv2_predict -d Dataset002_Heart -i INPUT_FOLDER -o OUTPUT_FOLDER -f  0 1 2 3 4 -tr nnUNetTrainer -c 2d -p nnUNetPlans
  • 1

第六步,后处理:

  这个好像只有V2版本有,因为运行完第五步后,V1版本没有提示可以后处理的命令:

在这里插入图片描述

  nnunetV2命令:

nnUNetv2_apply_postprocessing -i OUTPUT_FOLDER -o OUTPUT_FOLDER_PP -pp_pkl_file /mnt/data_2/qijingunet/nnUNet_trained_models/Dataset002_Heart/nnUNetTrainer__nnUNetPlans__2d/crossval_results_folds_0_1_2_3_4/postprocessing.pkl -np 8 -plans_json /mnt/data_2/qijingunet/nnUNet_trained_models/Dataset002_Heart/nnUNetTrainer__nnUNetPlans__2d/crossval_results_folds_0_1_2_3_4/plans.json
  • 1

  其中OUTPUT_FOLDER为上一步的输出路径,OUTPUT_FOLDER_PP为重新指定的新路径。


PS:修改epoch

  nnunet默认训练1000个epoch,要是不想训练那么多怎么修改呢?

  nnunetV1:在下面路径的py文件中,修改self.max_num_epochs

anaconda3/envs/myMRI/lib/python3.8/site-packages/nnunet/training/network_training/nnUNetTrainerV2.py
  • 1

  nnunetV2:在下面路径的py文件中,修改self.num_epochs

anaconda3/envs/myMRI/lib/python3.8/site-packages/nnunetv2/training/nnUNetTrainer/nnUNetTrainer.py
  • 1

  其实,当自己一步步去做的时候,好像也不是很难~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/正经夜光杯/article/detail/955012
推荐阅读
相关标签
  

闽ICP备14008679号