nnUNet使用指南(一):Ubuntu系统下使用nnUNet对自己的多模态MR数据集训练
nnUNet的安装
安装python虚拟环境(作者不建议使用conda环境)
sudo apt-get install -y python3-venv
或
pip install virtualenv
创建虚拟环境文件夹
选择要将Python编程环境放入哪个目录,或者我们可以使用来创建一个新目录mkdir
mkdir environments
进入文件夹
cd environments
创建虚拟环境
python3 -m venv project_env
project_env
是虚拟环境的名字,建议命为nnunet, 方便记忆
或
virtualenv nnunet --python=python3.8
指定版本
使用时需要激活该环境
source nnunet/bin/activate
激活要先切换到nnunet的上一级文件夹(也就是environment文件夹)
要离开环境,只需键入命令deactivate
安装nnUNet
在虚拟环境中键入pip install nnunet
pip list
查看安装了哪些包
设置环境变量
这一步对于nnUNet来讲很重要,nnU-Net需要知道您打算将原始数据,预处理数据和训练好的的模型保存在何处
进入文件bashrc文件vim ~/.bashrc
按i键对文件进行修改
将以下行放入文件最后
export nnUNet_raw_data_base="/media/fabian/nnUNet_raw"
export nnUNet_preprocessed="/media/fabian/nnUNet_preprocessed"
export RESULTS_FOLDER="/media/fabian/nnUNet_trained_models"
/media/fabian/改为你自己的地址,下面要有这三个文件夹
Esc + :+ wq 退出并保存修改之后的文件
成功设置后,您可以通过键入echo $RESULTS_FOLDER etc
来验证路径设置正确,并且应该打印出正确的文件夹
注意
安装nnU-Net将向您的终端添加几个新命令。这些命令用于运行整个nnU-Net管道。您可以从系统上的任何位置执行它们。
所有nnU-Net命令的前缀都有 nnUNet_ 这样易于识别。如训练命令nnUNet_train
请注意,这些命令仅执行python脚本。如果在虚拟环境中安装了nnU-Net,则在执行命令时必须激活该环境。
所有nnU-Net命令都有一个-h选项,该选项提供有关如何使用它们的信息
私有数据预处理
nnU-Net的所有数据集都存放在nnUNet_raw/nnUNet_raw_data
文件夹(上面安装nnU-Net时指定了该文件夹的地址)
建立Task文件夹
在nnUNet_raw_data
文件夹下建立Task066_LiverTumer文件夹(举例说明,改成你自己的ID和name)
统一命名为(“Task”“ID”_“任务名称”), “ID”是必须是三位数的整数,066而不是66
在每一个Task文件夹里,又包含以下文件
imagesTr
: 训练图像文件夹。
imagesTs
(可选): 测试图像文件夹
labelTr
: 训练集标签文件夹。
dataset.json
: 包含数据集的元数据的JSON文件, 如任务名字,模态,标签含义,训练集包含的图像地址等
图像的处理
图像的统一命名格式case_identifier_XXXX.nii.gz
, 标签的统一命名格式case_identifier.nii.gz
例如mr_001_0000,mr_001_0001
=> mr_001
可以写一个python文件将自己原本数据集里的数据导入并重命名为标准格式(必须是从nii压缩为nii.gz,不能是重命名)
可以在文件夹用终端打开,用gzip *
可将文件夹内所有不是.gz的文件压缩为.gz
要注意每个图像所有的模态必须相同,不能少
json文件
数据统一格式录入文件夹后,生成json文件,这里可以参考我写的(需要留言,比较懒)
开跑
数据验证
验证通过会自动进行下一步预处理,如果已经验证过,可以去掉--之后的内容,直接开始预处理
66那里填上自己的ID
nnUNet_plan_and_preprocess -t 66 --verify_dataset_integrity
训练
nnUNet_train CONFIGURATION TRAINER_CLASS_NAME TASK_NAME_OR_ID FOLD --npz (additional options)
--npz不需要softmax输出时不要加,会占用大量空间,详情见github说明
举例:
nnUNet_train 2d nnUNetTrainerV2 66 4
66 处填写任务ID
nnUNetTrainerV2 是要用到的使用的model trainer
4 是五折交叉验证的第几折(可选0,1,2,3,4)
2D U-Net:
For FOLD in [0, 1, 2, 3, 4], run:
nnUNet_train 2d nnUNetTrainerV2 TaskXXX_MYTASK FOLD --npz
3D full resolution U-Net
For FOLD in [0, 1, 2, 3, 4], run:
nnUNet_train 3d_fullres nnUNetTrainerV2 TaskXXX_MYTASK FOLD --npz
3D U-Net cascade
3D low resolution U-Net
For FOLD in [0, 1, 2, 3, 4], run:
nnUNet_train 3d_lowres nnUNetTrainerV2 TaskXXX_MYTASK FOLD --npz
3D full resolution U-Net
For FOLD in [0, 1, 2, 3, 4], run:
nnUNet_train 3d_cascade_fullres nnUNetTrainerV2CascadeFullRes TaskXXX_MYTASK FOLD --npz
注意:cascade的3D全分辨率UNet需要事先完成低分辨率UNet的五折
经过培训的模型将被写入RESULTS_FOLDER/nnUNet文件夹。每次训练都会获得自动生成的输出文件夹名称:
nnUNet_preprocessed/CONFIGURATION/TaskXXX_MYTASKNAME/TRAINER_CLASS_NAME__PLANS_FILE_NAME/FOLD
1000轮太多了,自定义epoch
修改这里:
在nnunet虚拟环境里找到nnunet文件夹
不起作用,修改这里:
手动选择预测模型
nnUNet_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -t TASK_NAME_OR_ID -m CONFIGURATION
INPUT_FOLDER: 测试数据地址
OUTPUT_FOLDER: 分割数据存放地址
CONFIGURATION: 使用的什么架构,2d or 3d_fullres or 3d_cascade_fullres等
举例:
nnUNet_predict -i /home/.../nnunet_file/nnUNet_raw/nnUNet_raw_data/Task066_LiverTumer/imagesTs -o /home/.../nnunet_file/output -t 66 -m 2d -f 4
自动选择最佳模型
pass
参考:
不用写代码神器!教你用4行命令轻松使用nnUNet训练自己的医学图像分割模型
nnUNet最舒服的训练教程(让我的奶奶也会用nnUNet(上))