赞
踩
这个帖子仅用于学习使用,参考大佬的CSDN帖子。
nnU-Net 如何安装–傻瓜式安装教程
nnUNet实战一使用预训练nnUNet模型进行推理
不用写代码神器!教你用4行命令轻松使用nnUNet训练自己的医学图像分割模型
这篇文章介绍如何使用nnunet封装好的框架和命令跑自己的数据,不涉及后续代码的修改。
nnU-Net只在Linux上测试(ubuntu16、18和20;centOS, RHEL)
该模块是标准Python 3库的一部分,以便我们可以创建虚拟环境(virtualenv)。
通过以下步骤安装:
sudo apt update && sudo apt upgrade
sudo apt upgrade python3
sudo apt install python3-venv
让我们选择要将Python编程环境放入哪个目录,建议将环境和大型数据都放到服务器的数据盘/root/autodl-tmp,否则后续系统盘会直接爆满无法继续运行程序。
cd /root/autodl-tmp
mkdir environments
cd environments
python3 -m venv nnunet
nnunet是虚拟环境的名字
cd ../
source nnunet/bin/activate
deactivate
激活进入虚拟环境之后
pip install nnunet
安装好后可以查看下安装了的包
pip list
这一步对于nnUNet来讲很重要,nnU-Net需要知道原始数据,预处理数据和训练好的的模型保存在何处。
必须设置一下三个环境变量:
在/root/autodl-tmp的路径下新建文件夹nnunet,在nnunet中再新建三个文件夹
nnUNet_raw/nnUNet_raw_data
nnUNet_preprocessed
nnUNet_trained_models
nnUNet_raw_data_base="/root/autodl-tmp/nnunet/nnUNet_raw/nnUNet_raw_data"
nnUNet_preprocessed="/root/autodl-tmp/nnunet/nnUNet_preprocessed"
RESULTS_FOLDER="/root/autodl-tmp/nnunet/nnUNet_trained_models"
如何设置环境变量
是在主目录中的.bashrc文件中设置路径
cd ~
ls
ls -al
nnUNet_raw_data_base="/root/autodl-tmp/nnunet/nnUNet_raw/nnUNet_raw_data"
nnUNet_preprocessed="/root/autodl-tmp/nnunet/nnUNet_preprocessed"
RESULTS_FOLDER="/root/autodl-tmp/nnunet/nnUNet_trained_models"
修改方法:
设置成功!
通过输入echo $RESULTS_FOLDER来验证路径设置正确,并且应该打印出正确的文件夹。
输入:echo $RESULTS_FOLDER
输出:/root/autodl-tmp/nnunet/nnUNet_trained_models
nnU-Net的所有数据集都存放在nnUNet_raw_data_base/nnUNet_raw_data 文件夹(nnUNet_raw_data_base安装nnU-Net时指定了该文件夹的地址!)。
nnUNet_raw_data_base="/root/autodl-tmp/nnunet/nnUNet_raw/nnUNet_raw_data"
每个数据集都存储为单独的“Task”。统一命名为( “Task”“ID”_“任务名称”), “ID”是三位数的整, 任务名称(您可以自由选择. 比如Task005_Prostate以’Prostate’作为任务名称任务ID为5。像这样存储在nnUNet_raw_data_base / nnUNet_raw_data文件夹中。
因为后续要进行格式转换,所以我的数据一开始命名为:
Task05_lacrima_sac
在每一个Task文件夹里,又包含以下文件夹:
Task05_lacrima_sac/
imagesTr:训练图像
imagesTs(可选):测试图像
labelTr:训练集标签。
dataset.json:包含数据集的元数据, 如任务名字,模态,标签含义,训练集包含的图像地址
imagesTr和labelTr中的图像名称有要求:
图像和标签是相同的名字。所有图像(包括标签)必须是3D nifti文件(.nii.gz)!
图像和标签统一命名格式:
lacrimal_01.nii.gz
lacrimal_02.nii.gz
....
注意:
保证自己的label中的值和json文件中写的一致!
"modality":
{
"0":background
"1":lacrima_sac
}
确保自己label的值由[0,1]构成 !
详细的json文件看之前在服务器跑的例子
dataset.json:
具体步骤:
step1 :激活nnUNet
step2: 使用nnUNet_convert_decathlon_task命令自动转格式
nnUNet_convert_decathlon_task -i $nnUNet_raw_data_base/nnUNet_raw_data/Task05_lacrima_sac
-i 后面 接 Task05_lacrima_sac(原始数据)存放地址
转换成功后,Task05_lacrima_sac 会重新命名为Task005_lacrima_sac
使用命令: nnUNet_plan_and_preprocess
nnUNet_plan_and_preprocess -t XXX --verify_dataset_integrity
作用: 它会自动读取 数据集的属性,例如图像大小、体素间距、强度信息等。并转换成模型需要的格式。
XXX是与任务名称相关联的整数标识符TaskXXX_MYTASK(如005, 就写5)。
nnUNet_plan_and_preprocess -t 5 --verify_dataset_integrity
–verify_dataset_integrity 对数据集执行一些检查以确保它与 nnU-Net 兼容。如果此检查已通过一次,则可以在以后的运行中省略。
目前遇到的问题:
nnUNet_plan_and_preprocess完成后,结果保存在文件夹nnUNet_preprocessed /Task05_lacrima_sac
使用命令 nnUNet_train
该命令参数很多,可以使用nnUNet_train -h查看参数的含义
该命令的一般结构为:
nnUNet_train CONFIGURATION TRAINER_CLASS_NAME TASK_NAME_OR_ID FOLD (additional options)
使用:3D full resolution U-Net 训练5折
nnUNet_train 3d_fullres nnUNetTrainerV2 Task05_lacrima_sac 4
训练过程中,终端会输出以下信息:大致包括使用的模型,数据信息,损失函数,网络架构,每个epoch的输出。
将训练好的模型写入 RESULTS_FOLDER/nnUNet 文件夹。每次训练都会获得一个自动生成的输出文件夹名称:
nnUNet_preprocessed/CONFIGURATION/TaskXXX_MYTASKNAME/TRAINER_CLASS_NAME__PLANS_FILE_NAME/FOLD
文件树大致如下:
每一折里面,又有图上红框所示内容。大致包括
训练完成后,我们当然要看看在测试集上的表现啦。
使用命令 nnUNet_predict
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 /root/autodl-tmp/nnunet/nnUNet_raw/nnUNet_raw_data/imagesTs -o /root/autodl-tmp/nnunet/output -t 005 -m 3d_fullres -f 4
总结:目前只是成功的将自己的数据集放到nnunet中跑,对于一些参数的调整和预测的Dice得分的设定,后续会继续总结,我要先去写Review了,下期再见!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。