赞
踩
nnUNet现在有两个版本,分别为nnUNet和nnUNetv2,github地址如下。我用的是老版本,因为发现有针对BraTS2020数据集现成的脚本(嘎嘎嘎)。
MIC-DKFZ/nnUNet at nnunetv1 (github.com)
nnUNet是第一个旨在处理领域中发现的数据集多样性的分割方法。它概括并自动化地设计了成功分割管道所需的关键决策,适用于任何给定的数据集。总而言之,它可以帮无论是公共数据集还是私有数据集进行快速地分割。
官方要求Ubuntu 16、18 和 20
我租用的是算力平台上的RTX4090 gpu,PyTorch 1.10.0,Python 3.8(ubuntu20.04),Cuda 11.3
我是直接下载的压缩包,然后用xftp上传到服务器上
将BraTS2020数据集也通过xftp上传到服务器上
创建一个工作环境(我命名为nn)并激活:
conda create -n nn python=3.8
conda activate nn
创建好之后进入刚刚下载好的包中:
cd nnUNet-nnunetv1
然后为他下载一些需要用到的包和环境变量(两种任选其一:
pip install -e .
python setup.py
正文开始!我们要创建一个又一个文件夹作为预处理之后数据的容器。
## 首先在nnUNet-nnunetv1文件夹下创建一个名为“nnUNetFrame”的文件夹;
## 在“nnUNetFrame”的文件夹下创建一个名为“DATASET”的文件夹;
## 在“DATASET”的文件夹下创建三个文件夹,分别命名为“nnUNet_raw_data_base”,“nnUNet_preprocessed”,“RESULT_FOLDER”;
## 在“nnUNet_raw_data_base”文件夹下创建两个文件夹,分别命名为“nnUNet_raw_data”,“nnUNet_cropped_data”;
## 在“nnUNet_raw_data”文件夹下创建一个名为"TaskXXX_NAME"的文件夹,其中XXX是000~999的编号,NAME是你数据集的名字。我的是Task082_BraTS2020,为什么是082呢?因为我想直接用它的脚本,脚本编号是082,所以对应上。如果你用的是其他数据集,可以在dataset_conversion文件里找找有没有对应的脚本,直接用就好。
好的,不用再创建了。最后的结构是这样式的。
我来解释一下每个文件夹都是用来存放什么的。
“nnUNet_raw_data_base”:这是 nnU-Net 查找原始数据并存储裁剪数据的地方。
“nnUNet_preprocessed”:这是保存预处理数据的文件夹。
“RESULT_FOLDER”:这指定了 nnU-Net 将保存模型权重的位置,还有最后的结果。
“nnUNet_raw_data”/“Task082_BraTS2020”:这里会读入你未处理的的数据集,它会将数据存放结构进行转变。
“nnUNet_cropped_data”:这里会存放经过剪裁后的数据集。
因为我们要让网络知道训练之后应该存放在哪里。指令如下:
- export nnUNet_raw_data_base="/root/autodl-tmp/nnUNet-nnunetv1/nnUNetFrame/DATASET/nnUNet_raw_data_base"
- export nnUNet_preprocessed="/root/autodl-tmp/nnUNet-nnunetv1/nnUNetFrame/DATASET/nnUNet_preprocessed"
- export RESULTS_FOLDER="/root/autodl-tmp/nnUNet-nnunetv1/nnUNetFrame/DATASET/RESULTS_FOLDER"
后面的路径改为你自己的。
这一步旨在进行结构上的转换。也就是说,我们要把自己的数据集转换为nnUNet能读懂的形式。这就要用到上面说的脚本了,直接无脑运行:
python nnunet/dataset_conversion/Task082_BraTS_2020.py
从前的我是这样的:
Conversion之后的我是这样的:
这一环节主要干两件事,任务规划和预处理。
任务规划:定义实验的配置,包括选择使用的任务(例如,分割任务的名称)、确定数据集的路径和文件结构、配置网络模型的参数等。这有助于明确实验的设置,确保训练和评估过程按照预期进行。
预处理:数据预处理是数据在输入模型之前进行的一系列操作,以准备数据以便更好地适应神经网络的训练。预处理包括对图像进行标准化、裁剪、缩放等一系列数学操作,以及生成网络训练所需的输入。
了解之后同样无脑运行:
nnUNet_plan_and_preprocess -t 082 --verify_dataset_integrity
把082换成自己的数据集ID。
一切准备就绪!可以开始训练了。
你需要先确定你的数据集属于哪一种分割模型,2d,3d_cascade_fullres,3d_fullres和3d_lowres具体参考去官方。我选择的是3d_fullres模型。
并且,nnUNet采用了五折交叉验证,每次训练后都会得到一个模型,一共五个,对这五个模型在验证集上的性能进行评估,得到可靠的模型性能指标。
训练指令:
- nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 0 --npz ##编号为0的作为验证集,其余四个作为训练集
- nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 1 --npz ##编号为1的作为验证集,其余四个作为训练集
- nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 2 --npz ##编号为2的作为验证集,其余四个作为训练集
- nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 3 --npz ##编号为3的作为验证集,其余四个作为训练集
- nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 4 --npz ##编号为4的作为验证集,其余四个作为训练集
训练后的结果在“RESULT_FOLDER”文件夹查看,里面包含有图片和数据的丰富信息。
由于网络设置默认epoch=1000时间较长,当然这里可以修改,可以先改个200看看效果。
由于网络设置默认epoch=1000时间较长,不免会出现网络中断、电源断电等各种各样的情况,想要继续上次的训练可以运行下面的指令:
nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 0 -c
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。