nnU-Net到底怎么使用,好不好用,我们看一个实战例子
本次实战项目为使用预训练nnU-Net模型进行推理
数据集: 医学分割十项全能的前列腺数据集(Prostate)
本系列还有
1 论文解读- nnU-Net: Self-adapting Framework for U-Net-Based Medical Image Segmentation(附实现教程)
2 nnU-Net 如何安装–傻瓜式安装教程
这是该系列第3篇✍️✍️✍️
确保已经安装nnU-Net。确保设置所有相关路径,
具体操作见nnU-Net 如何安装–傻瓜式安装教程
下载链接
tips: 文件不是很大(< 250MB), 使用应该可以下载下来。下载不下来,联系我,我发给你。
十项全能的数据都是 4D nii格式。这与nnU-Net不兼容。将前列腺数据集转换为正确的格式。
这一个知识点很重要,很重要。也是你使用nnU-Net唯一需要做的事情。
nnU-Net的所有数据集都存放在nnUNet_raw_data_base/nnUNet_raw_data
文件夹(nnUNet_raw_data_base
安装nnU-Net时指定了该文件夹的地址!)。
比如,我的nnUNet_raw_data_base
文件夹在/home/.../.../nnunet_file/
每个数据集都存储为单独的“Task”。统一命名为(“Task”“ID”_“任务名称”
), “ID”是三位数的整, 任务名称(您可以自由选择. 比如 Task005_Prostate以’Prostate’作为任务名称任务ID为5。像这样存储在nnUNet_raw_data_base / nnUNet_raw_data文件夹中:
imagesTr
: 训练图像。imagesTs
(可选): 测试图像labelTr
: 训练集标签。dataset.json
: 包含数据集的元数据, 如任务名字,模态,标签含义,训练集包含的图像地址。注意
: 请使您的自定义任务ID从500开始,以确保与下载的预训练模型不会有冲突!!!(ID不能超过999)另外,对图像的名称还要要求!
图像和标签最好是相同的名字。所有图像(包括标签)必须是3D nifti文件(.nii.gz)!
图像的统一命名格式case_identifier_XXXX.nii.gz
, 标签的统一命名格式case_identifier.nii.gz
XXXX
是模态标识符, 四位整数。
此命名方案将导致以下文件夹结构。必须严格将其数据转换为这种格式!
举例1:这是MSD的第一个任务的示例:BrainTumour。每个图像都有四个模态:FLAIR(0000),T1w(0001),T1gd(0002)和T2w(0003)。
举例2 这是MSD第二个任务的另一个示例,它只有一个模态,也要如下命名:
nnU-Net使用的dataset.json
文件与MSD使用的文件相同。对于自定义任务,把dataset.json的内容替换一下就可以了,从而完全遵循相同的结构。
如果你想用于2D 数据,参见如何通过nnU-Net使用2D数据
我们下载好的Task005_Prostate数据集是以下格式
将其转换成如下格式
具体步骤:
step1 :激活nnUNet
step2: 使用nnUNet_convert_decathlon_task
命令自动转格式
nnUNet_convert_decathlon_task -i $nnUNet_raw_data_base/nnUNet_raw_data/Task05_Prostate
-i 后面 接 Task05_Prostate(下载的数据)存放地址
转换成功后, Task05_Prostate 会重新命名为 Task005_Prostate
nnUNet_download_pretrained_model Task005_Prostate
下载的模型会自动保存到 RESULTS_FOLDER="/media/fabian/nnUNet_trained_models"
因为使用了五折交叉验证,所以会有5个文件夹,每个文件夹都包含一个预训练模型。
前列腺数据集需要两个图像模式作为输入。这很像RGB图像有三个颜色通道。
nnUNet通过文件结尾识别模式:前列腺数据集的单个测试用例因此由两个文件case_0000.nii.gz和case_0001.nii.gz组成。
每个文件都是一个三维图像。以0000.nii.gz结尾的文件必须始终包含T2图像和0001.nii.gz ADC图像。无论何时使用预训练模型,都可以使用
nnUNet_print_pretrained_model_info Task005_Prostate
得到如下的结果
Prostate Segmentation.
Segmentation targets are peripheral and central zone,
input modalities are 0: T2, 1: ADC.
Also see Medical Segmentation Decathlon, http://medicaldecathlon.com/
你现在可以用预训练模型预测前列腺测试病例。我们在这里举例使用3D full resoltion U-Net:
nnUNet_predict -i $nnUNet_raw_data_base/nnUNet_raw_data/Task005_Prostate/imagesTs/ -o OUTPUT_DIRECTORY -t 5 -m 3d_fullres
-i
: 测试图像文件夹地址 -o
: 模型输出地址 -t
: id号, 您还可以提供完整的任务名称(Task005_Prostate, -m
: 选择的模型为3d_fullres
预测应该很快,您应该在几分钟之内就沉迷其中。如果您想加快速度(以降低分割质量为代价),可以通过设置--disable_tta
标志(8倍加速)来禁用测试时间数据扩充(TTA)。
如果这对于您来说仍然太慢,可以通过指定使用单个模型而不是整体模型-f 0
。这将仅使用在交叉验证的折数0上训练的模型来实现另外5倍的加速。
到这里,可以结束今天的教程
但是,下面还有进阶操作~~~~~
如果要使用一组不同的U-Net配置进行推理,则需要运行以下命令:
使用3d全分辨率U-Net进行预测(此命令与上面的命令有些不同)。
nnUNet_predict -i $nnUNet_raw_data_base/nnUNet_raw_data/Task005_Prostate/imagesTs/ -o OUTPUT_DIRECTORY_3D -t 5 --save_npz -m 3d_fullres
二维U-Net预测
nnUNet_predict -i $nnUNet_raw_data_base/nnUNet_raw_data/Task005_Prostate/imagesTs/ -o OUTPUT_DIRECTORY_2D -t 5 --save_npz -m 2d
--save_npz
会告诉nnU-Net还存储softmax概率进行集合。
还可以集成模型
nnUNet_ensemble -f OUTPUT_DIRECTORY_3D OUTPUT_DIRECTORY_2D -o OUTPUT_FOLDER_ENSEMBLE -pp POSTPROCESSING_FILE
这将合并来自OUTPUT_DIRECTORY_2D和的预测OUTPUT_DIRECTORY_3D。
-pp POSTPROCESSING_FILE
: (可选!)是一个文件,提供有关如何对集合进行后处理的nnU-Net信息。
这些文件也作为预训练模型权重的一部分下载,位于RESULTS_FOLDER/nnUNet/ensembles/ Task005_Prostate/ensemble_2d__nnUNetTrainerV2__nnUNetPlansv2.1–3d_fullres__nnUNetTrainerV2__nnUNetPlansv2.1/postprocessing.json。
我们将在以后的版本(很快!)中使后处理文件更易于访问。
关注我,共同学习更多医学图像处理相关知识~~
小试牛刀后,下一次我们就试试 如何在自己的数据集上训练nn-UNet吧~~
最后,喜欢这篇文章,请点赞,评论(夸我也行),收藏。