既有得当小白学习的零底子资料,也有得当3年以上履历的小搭档深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目次截图出来,全套包含大厂面经、学习笔记、源码课本、实战项目、大纲路线、讲授视频,并且后续会连续更新
需要这份体系化资料的朋侪,可以戳这里获取
五、数据集转换
1.数据集转换是什么,为什么要举行数据集转换?
nnUNet要求将原始数据转换成特定的格式,以便了解怎样读取和表明数据。
每个分割数据集存储为单独的“使命”。命名包罗使命与使命ID,即三位整数和相干联的使命名称。
比如Task001_BrainTumour的使命名称为“脑瘤”,使命ID为1。
在每个使命文件夹中,预期的结构如下:
- Task001_BrainTumour/
- ├── dataset.json
- ├── imagesTr
- ├── (imagesTs)
- └── labelsTr
复制代码 图像大概具有多种模态,这对于医学图像来说尤其常见。
nnU-Net通过厥后缀(文件名末端的四位整数)识别成像模态。因此,图像文件必须遵循以下命名约定:case_identifier_XXXX.nii.gz。
这里,XXXX是模态标识符。dataset.json文件中指定了这些标识符所属的模态。
标签文件保存为case_identifier.nii.gz
此命名方案产生以下文件夹结构。用户有责任将其数据转换为这种格式!
下面是MSD的第一个使命的示例:BrainTumor。每个图像有四种模态:FLAIR(0000)、T1w(0001)、T1gd(0002)和T2w(0003)。请留意,imagesTs文件夹是可选的,不必存在。
- nnUNet_raw_data_base/nnUNet_raw_data/Task001_BrainTumour/
- ├── dataset.json
- ├── imagesTr
- │ ├── BRATS_001_0000.nii.gz
- │ ├── BRATS_001_0001.nii.gz
- │ ├── BRATS_001_0002.nii.gz
- │ ├── BRATS_001_0003.nii.gz
- │ ├── BRATS_002_0000.nii.gz
- │ ├── BRATS_002_0001.nii.gz
- │ ├── BRATS_002_0002.nii.gz
- │ ├── BRATS_002_0003.nii.gz
- │ ├── BRATS_003_0000.nii.gz
- │ ├── BRATS_003_0001.nii.gz
- │ ├── BRATS_003_0002.nii.gz
- │ ├── BRATS_003_0003.nii.gz
- │ ├── BRATS_004_0000.nii.gz
- │ ├── BRATS_004_0001.nii.gz
- │ ├── BRATS_004_0002.nii.gz
- │ ├── BRATS_004_0003.nii.gz
- │ ├── ...
- ├── imagesTs
- │ ├── BRATS_485_0000.nii.gz
- │ ├── BRATS_485_0001.nii.gz
- │ ├── BRATS_485_0002.nii.gz
- │ ├── BRATS_485_0003.nii.gz
- │ ├── BRATS_486_0000.nii.gz
- │ ├── BRATS_486_0001.nii.gz
- │ ├── BRATS_486_0002.nii.gz
- │ ├── BRATS_486_0003.nii.gz
- │ ├── BRATS_487_0000.nii.gz
- │ ├── BRATS_487_0001.nii.gz
- │ ├── BRATS_487_0002.nii.gz
- │ ├── BRATS_487_0003.nii.gz
- │ ├── BRATS_488_0000.nii.gz
- │ ├── BRATS_488_0001.nii.gz
- │ ├── BRATS_488_0002.nii.gz
- │ ├── BRATS_488_0003.nii.gz
- │ ├── BRATS_489_0000.nii.gz
- │ ├── BRATS_489_0001.nii.gz
- │ ├── BRATS_489_0002.nii.gz
- │ ├── BRATS_489_0003.nii.gz
- │ ├── ...
- └── labelsTr
- ├── BRATS_001.nii.gz
- ├── BRATS_002.nii.gz
- ├── BRATS_003.nii.gz
- ├── BRATS_004.nii.gz
- ├── ...
复制代码 假如对于数据集转换这件事照旧不明白,打开你的nnUNet文件夹,在/nnUNet/documentation/文件夹下找到dataset_conversion这个文件来进一步学习。
2.运行数据集转换的命令
依旧以Task01_BrainTumour为例:
- nnUNet_convert_decathlon_task -i /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task01_BrainTumour
复制代码 转换操纵完成以后,你会发如今你的Task01_BrainTumour文件夹旁边,出现了一个Task001_BrainTumour文件夹,打开看一下,里面的格式应该和我上面展示的一样。
3.关于dataset.json文件
这个文件包含你的训练数据信息和使命信息,假如你按照我的发起下载了Task01的数据集,那里面是包含dataset.json文件的,假如你有训练自己的数据集的需求,在我的另一篇博客里会有详细的说明。
六、数据预处理
- nnUNet_plan_and_preprocess -t 1 --verify_dataset_integrity
复制代码 只需要一行命令,由于我们的Task_id是1,所以这里的数字就是1。这个过程会消耗许多的时间,速率慢的原因在于对要举行插值等各种操纵。
根据nnUNet框架,三维医学图像分割的通用预处理可以分为四步,分别是数据格式的转换,裁剪crop,重采样resample以及标准化normalization。假如你想进一步学习,保举学习这篇文章怎样针对三维医学图像分割使命举行通用数据预处理:nnUNet中预处理流程总结及代码分析 - 知乎 (zhihu.com)
运行“nnUNet_plan_and_preprocess”将使用预处理数据填充文件夹。
我们将在nnUNet_preprocessed/Task001_BrainTumour中找到这条命令的输出结果。使用2D U-Net以及全部适用的3D U-Net的预处理数据创建子文件夹。它还将为2D和3D配置创建“plans”文件(结尾为.pkl)。这些文件包含天生的分割 pipeline 配置,将由nnUNetTrainer读取(见下文)。请留意,预处理的数据文件夹仅包含训练案例。测试图像没有经过预处理。测试集的预处理将会在推理过程中及时举行。
别的,`–verify_dataset_integrity”应至少在给定数据集上首次运行命令时运行。这将对数据集执行一些检查,以确保其与nnU-Net兼容。假如此检查通过一次,则可以在以后的运行中省略。假如您遵守数据集转换指南(请参见上文),那么这条命令肯定会通过的。
七、模型训练
1.写在训练前:更改epoch
nnUNet默认原始的epoch是1000,这太久了,我们打开nnUNet/nnunet/training/network_training/nnUNetTrainerV2.py
第48行的max_epoch来修改epoch
2.关于训练的运行命令
nnU-Net在5倍交叉验证中训练全部U-Net配置。这使nnU-Net能够确定训练数据集的后处理和聚集(参见下文)。
假如你不清楚什么是K折交叉验证,可以学习这篇博客【技能分享】什么是K折交叉验证?_AISec盐究员的博客-CSDN博客_k折交叉验证
我们在数据预处理那一步的时候创建了三个U-Net配置:2D U-Net、对全分辨率图像举行操纵的3D U-Net以及3D U-Net级联,此中级联的第一个U-Net在下采样图像中创建粗分割图,然后由第二个U-Net举行细化。我们在训练的时候可以自由选用它们。
训练模型使用“nnUNet_train”命令完成。命令的一般结构为:
- nnUNet_train CONFIGURATION TRAINER_CLASS_NAME TASK_NAME_OR_ID FOLD --npz (additional options)
复制代码
- CONFIGURATION是一个字符串,用于标识所请求的U-Net配置。
- TRAINER_CLASS_NAME是model trainer的名称。假如您实施定制trainers(nnU-Net作为一个框架),您可以在此处指定您的定制trainers。
- TASK_NAME_OR_ID指定应训练的数据集,FOLD指定训练的是5倍交叉验证的哪一倍。
- “–npz”使模型在最终验证期间保存softmax输出。它仅适用于筹划在之后运行“nnUNet_find_best_configuration”的训练
(这是nnU Nets主动选择最佳性能(聚集)配置,见下文)。
对于我们的Task01来说,应该运行的命令如下
- nnUNet_train 3d_fullres nnUNetTrainerV2 1 0 --npz
复制代码
- 3d_fullres代表我们选用对全分辨率图像举行操纵的3D U-Net
- nnUNetTrainerV2是我们选用的训练器
- 1代表你的使命ID
- 0代表五折交叉验证中的第0折
下面给出各种配置的nnUNet网络需要的训练命令
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 3D全分辨率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 U-net级联
①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
复制代码 留意,级联的3D全分辨率U-Net需要预先完成低分辨率U-Net的five folds!
3.训练结果
训练后的模型将写入RESULTS_FOLDER/nnUNet文件夹。对于我们的项目来说,就是会存在/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_trained_models/nnUNet这个路径下。
每次训练都会获得一个主动天生的输出文件夹名称,根据我们的训练配置,我们会得到3d_fullres/Task001_BrainTumour这个文件夹。关于它的树状图如下(为简洁起见,有些文件仅在一个文件夹下详细睁开):
- RESULTS_FOLDER/nnUNet/
- ├── 2d
- │ └── Task001_BrainTumour
- │ └── nnUNetTrainerV2__nnUNetPlansv2.1
- │ ├── fold_0
- │ ├── fold_1
- │ ├── fold_2
- │ ├── fold_3
- │ └── fold_4
- ├── 3d_cascade_fullres
- ├── 3d_fullres
- │ └── Task001_BrainTumour
- │ └── nnUNetTrainerV2__nnUNetPlansv2.1
- │ ├── fold_0
- │ │ ├── debug.json
- │ │ ├── model_best.model
- │ │ ├── model_best.model.pkl
- │ │ ├── model_final_checkpoint.model
- │ │ ├── model_final_checkpoint.model.pkl
- │ │ ├── network_architecture.pdf
- │ │ ├── progress.png
- │ │ └── validation_raw
- │ │ ├── BRATS_010.nii.gz
- │ │ ├── BRATS_010.pkl
- │ │ ├── BRATS_018.nii.gz
- │ │ ├── BRATS_018.pkl
- │ │ ├── summary.json
- │ │ └── validation_args.json
- │ ├── fold_1
- │ ├── fold_2
- │ ├── fold_3
- │ └── fold_4
- └── 3d_lowres
复制代码 假如你的训练乐成了,应该会得到和我下图一样的结果
下面详细讲讲这些训练后得到的文件都是什么
- debug.json:包含用于训练此模型的蓝图和推断参数的摘要。不容易阅读,但对调试非常有用。
- model_best.model/model_best.model.pkl:训练期间识别的最佳模型的检查点文件。
- model_final_checkpoint.model/model_final_checkpoint.model.pkl:最终模型的检查点文件(训练结束后)。这是用于验证和推理的。
- networkarchitecture.pdf(仅当安装了hiddenlayer时!):一个pdf文档,此中包含网络架构图。
- progress.png:训练期间训练(蓝色)和验证(红色)损失的图。还表现了评估指标的近似值(绿色)。这个近似值是前景类的平均Dice分数。
- validation_raw:在这个文件夹中是训练完成后预测的验证案例。summary.json包含验证度量(文件末端提供了全部环境的平均值)。
- training_log:训练过程中不停打印,nnunet的loss函数默认是趋向-1的,也就是说在训练的过程中,我们通过每轮训练的日志可以查看到每轮的loss函数,这个数值应该是负数,而且越趋向于-1,效果越好。
如今我们想看看我们训练的结果怎么样,有两种方法:
第一种是打开progress.png来从图像上直观的感受一下,它大概长如许:
第二种是打开validation_raw/summary.json,从里面我们不仅可以看到对每一个验证数据的评价,更可以在最末端看到它们的平均值。
这里我们主要关注这个Dice分数,之前说到了脑瘤数据集分为四个模态,而labels的数目也是4(参见dataset.json):
- "labels": {
- "0": "background",
- "1": "edema",
- "2": "non-enhancing tumor",
- "3": "enhancing tumour"
复制代码 包含配景在内的4个标签,分别是配景、坏疽(NET,non-enhancing tumor)、浮肿地区(ED,peritumoral edema)、增强肿瘤地区(ET,enhancing tumor),如下图,它们的平均dice分数约为0.9994,0.8770,0.7780,0.8728
八、确定最佳U-Net配置
本文只说明了3d_fullres的训练,完备的nnUNet流程还需要跑2d和3d级联的,然后举行三种的择优。不外从实际性能来说,一般3d级联≥3d>2d,是否跑其他两种需要自己思量。
训练完全部模型后,使用以下命令主动确定用于测试集预测的U-Net配置:
- nnUNet_find_best_configuration -m 2d 3d_fullres 3d_lowres 3d_cascade_fullres -t 1
复制代码
- 全部指定配置都需要完玉成部的5折训练!
- 对于未配置级联的数据集,请改用“-m 2d 3d_fullres”。假如您只想探索配置的某些子集,可以使用“-m”命令指定。
所以说,假如你训练完全部模型,才可以使用这一步,假如没有,那可以直接推理
九、运行推理
1.准备测试集
让我们回到你刚刚做好数据集转换的那个数据集:/home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour,在里面创建inferTs这个文件夹,用于存放待推理测试集的推理结果。然后,我会选择将原本的imagesTs重命名为imagesTs0,它是我们下载数据集时给我们的几十个测试集,然后新建一个imagesTs,里面只放一个测试集。(表明:这个原理其实很显着,推理太多数据集太久了,先用一个试试)
这个时候我们在imagesTs里存放的待推理的测试集,它的格式应该是经过数据集转换那一步的格式,忘记了的话可以翻上去看一下,如下图所示,四个模态都要有,且重命名过:
2.运行推理的最简单方法是简单地使用下面这一条命令:
- nnUNet_predict -i 要预测数据的文件夹路径 -o 输出文件夹路径 -t 1 -m 3d_fullres -f 0
复制代码 对于我们这个项目,它就应该是:
- nnUNet_predict -i /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/imagesTs/ -o /home/work/nnUNet/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task001_BrainTumour/inferTs -t 1 -m 3d_fullres -f 0
复制代码 你会在inferTs里得到模型天生的预测结果
3.假如你想集成多个模型的推理结果
假如你已经训练出了多个模型,并且像上一步一样举行了推理,如今你想集成它们的推理结果,首先需要在上面的命令后面加入“–save_npz”。`–save_npz”将使命令保存softmax概率以及需要大量磁盘空间的预测分割掩码。
然后请为每个配置选择单独的“OUTPUT_FOLDER”!
最后使用以下命令聚集来自多个配置的预测:
- nnUNet_ensemble -f FOLDER1 FOLDER2 ... -o OUTPUT_FOLDER -pp POSTPROCESSING_FILE
复制代码 您可以指定任意数目标文件夹,但请记住,每个文件夹都需要包含由“nnUNet_predict”天生的npz文件。对于集成,还可以指定一个文件,告诉命令怎样举行后处理。
这些文件是在运行“nnUNet_find_best_configuration”时创建的,位于相应的训练模型目次中(RESULTS_FOLDER/nnUNet/CONFIGURATION/TaskXXX_MYTASK/TRAINER_CLASS_NAMEPLANS_FILE_IDENTIFIER/postprocessing.json or
RESULTS_FOLDER/nnUNet/ensembles/TaskXXX_MYTASK/ensemble_XYZ–XY__Z/postprocessing.json).
您也可以选择不提供文件(只需省略-pp),nnU-Net将不会运行后处理。
因此,在运行集成推理之前,必须对全部5个折举行训练。在推理开始时,将打印找到的可用的nnU-Net folds列表。
十、评估推理结果
依旧是一行命令完成
- nnUNet_evaluate_folder -ref 金标准文件夹 -pred 预测结果文件夹 -l 1 2 3
复制代码 -l 表现要计算的label的类别,正常就是配景-0肿瘤-1,所以设置1,假如有两类就是 -l 1 2,以此类推,所以我们这里是1 2 3
这个是nnUNet自带的评估命令,计算分割DSC,可以不消这个,另写代码去算需要的评估指标即可
既有得当小白学习的零底子资料,也有得当3年以上履历的小搭档深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!
由于文件比较多,这里只是将部分目次截图出来,全套包含大厂面经、学习笔记、源码课本、实战项目、大纲路线、讲授视频,并且后续会连续更新
需要这份体系化资料的朋侪,可以戳这里获取
der -ref 金标准文件夹 -pred 预测结果文件夹 -l 1 2 3
- **-l 表示要计算的label的类别,正常就是背景-0肿瘤-1,所以设置1,如果有两类就是 -l 1 2,以此类推,所以我们这里是1 2 3**
- 这个是nnUNet自带的评估命令,计算分割DSC,可以不用这个,另写代码去算需要的评估指标即可
- [外链图片转存中...(img-4R1RqIKV-1715750645867)]
- [外链图片转存中...(img-iytgfej9-1715750645867)]
- [外链图片转存中...(img-K8SDq05x-1715750645867)]
- **既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!**
- **由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
- **[需要这份系统化资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618545628)**
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |