当前位置:   article > 正文

#科研笔记#关于用nnUNet对BraTS2020数据集进行训练_brats2020 dataset

brats2020 dataset

一、简述nnUNet

nnUNet现在有两个版本,分别为nnUNet和nnUNetv2,github地址如下。我用的是老版本,因为发现有针对BraTS2020数据集现成的脚本(嘎嘎嘎)。

MIC-DKFZ/nnUNet at nnunetv1 (github.com)

MIC-DKFZ/nnUNet (github.com)

nnUNet是第一个旨在处理领域中发现的数据集多样性的分割方法。它概括并自动化地设计了成功分割管道所需的关键决策,适用于任何给定的数据集。总而言之,它可以帮无论是公共数据集还是私有数据集进行快速地分割。

二、创建环境

2.1 nnUNet要求

官方要求Ubuntu 16、18 和 20

2.2 我的配置

我租用的是算力平台上的RTX4090 gpu,PyTorch  1.10.0,Python  3.8(ubuntu20.04),Cuda  11.3

三、准备工作

3.1 下载源码

我是直接下载的压缩包,然后用xftp上传到服务器上

3.2 准备要训练的数据集

将BraTS2020数据集也通过xftp上传到服务器上

3.3 创建虚拟环境

创建一个工作环境(我命名为nn)并激活:

conda create -n nn python=3.8
conda activate nn

创建好之后进入刚刚下载好的包中:

cd nnUNet-nnunetv1

然后为他下载一些需要用到的包和环境变量(两种任选其一:

pip install -e .
python setup.py

3.4 准备容器

正文开始!我们要创建一个又一个文件夹作为预处理之后数据的容器。

##  首先在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”:这里会存放经过剪裁后的数据集。

四、再次设置环境变量

因为我们要让网络知道训练之后应该存放在哪里。指令如下:

  1. export nnUNet_raw_data_base="/root/autodl-tmp/nnUNet-nnunetv1/nnUNetFrame/DATASET/nnUNet_raw_data_base"
  2. export nnUNet_preprocessed="/root/autodl-tmp/nnUNet-nnunetv1/nnUNetFrame/DATASET/nnUNet_preprocessed"
  3. export RESULTS_FOLDER="/root/autodl-tmp/nnUNet-nnunetv1/nnUNetFrame/DATASET/RESULTS_FOLDER"

后面的路径改为你自己的。

五、Data Conversion

这一步旨在进行结构上的转换。也就是说,我们要把自己的数据集转换为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采用了五折交叉验证,每次训练后都会得到一个模型,一共五个,对这五个模型在验证集上的性能进行评估,得到可靠的模型性能指标。

训练指令:

  1. nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 0 --npz ##编号为0的作为验证集,其余四个作为训练集
  2. nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 1 --npz ##编号为1的作为验证集,其余四个作为训练集
  3. nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 2 --npz ##编号为2的作为验证集,其余四个作为训练集
  4. nnUNet_train 3d_fullres nnUNetTrainerV2 Task082_BraTS2020 3 --npz ##编号为3的作为验证集,其余四个作为训练集
  5. 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

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

闽ICP备14008679号