(五:2020.07.31)nnUNet最简单的推理教程(让我的奶奶也会用nnUNet(下))

Follow Me, Buddy!

  • 一、写在前面
  • 二、nnUNet的推理很简单!(仅针对简单的推理模式,不包括ensemble)
    • 1. 准备好你的测试集。
    • 2. 下载预训练模型或使用自己的模型。
    • 3. 进行推理。
    • 4. 注意!
  • 三、nnUNet的推理又很难。

一、写在前面

  • 1.为了承接上一篇的训练教程,我会在这篇博客中仍然采用简单的方式对如何推理进行讲述。除此之外,我会对最近的研究成果做一个总结和温习,这种温习大致会融合在整个nnUNet的推理代码中,我会尽可能详细的对代码进行解读;
  • 2.尽管写出这些教程只是为了方便大家使用,但是希望有时间有精力的能够在前面三篇博客花点时间并提出质疑,毕竟最精髓的算法都在这些部分。
  • 有点啰嗦,开始吧!有问题请添加私人微信号JoeVaen3

二、nnUNet的推理很简单!(仅针对简单的推理模式,不包括ensemble)

1. 准备好你的测试集。

  • 第一种情况:你认真地执行了我在上一篇给出的训练流程,并且没有对原Task08数据集做任何调整,那么恭喜你,你不需要做任何的准备,仅仅创建两个空文件夹使你的Task008文件底下像这样:
    2
    可以看出,相比原来的Task008,我多创建了两个文件夹,这是按照我的习惯进行整合的,方便我进行最后的指标的测试。labelsTs中我存放了测试集的标签,inferTs是我待推理测试集的推理结果。由于原本的imagesTs中有100多个nii文件,会花费巨额的时间,我建议你先找个地方把其他文件拷贝出来,只留一个nii.gz文件进行推理,至于为什么这么慢,我会在后面做详细的解析;
  • 第二种情况:你想要在自己的数据集上进行推理,我们姑且把这种你自己的数据集叫做“生肉”,那么我们要让它变成“熟肉”,就要进行下面这一步操作:
    • ① 假如你的“生肉”是dicom序列文件或者.nii文件,那么你必须把dicom、nii文件转成nii.gz。必须是nii.gz,其他格式nnUNet源码无法识别,自己有兴趣可以把这部分代码加进去。
    • ② 现在,你的“生肉”变成了nii.gz,我们假设它文件名为test.nii.gz。之后,把你的nii.gz文件(可以是一个也可以是多个)放在一个新建文件夹里面(新建文件夹名字随便,我们命名为Input)。然后,修改文件名为test_0000.nii.gz,这就是熟肉。(当然,你也可以使用nnUNet_convert_decathlon_task -i /home/你的主机用户名/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task008_HepaticVessel来进行文件名的转换)
    • ③ 创建一个推理结果的输出文件夹,我一般是这样整合我的数据的(下图),这样比较方便:
      1
      这些文件夹上面已经介绍过,我不做赘述。再次强调这是按照我自己的习惯进行整合的,方便我进行最后的指标的测试。

2. 下载预训练模型或使用自己的模型。

  • 第一种情况:你并未进行我之间介绍的训练,仅仅想做推理。
           这是预训练模型的下载地址。日常建议读者拥有属于自己的稳定的冲浪工具和谷歌账号,我这里有相当稳定的airport有兴趣的可以私聊我。请将里面的Task008的模型进行下载,下载后解压保存至:
    /home/你的主机用户名/nnUNetFrame/DATASET/nnUNet_trained_models/nnUNet下面。
  • 第二种情况:你只进行了几轮训练(确定是按照上一篇训练教程一步步来的),模型远远达不到可以使用的状态。
           进入/home/你的主机用户名/nnUNetFrame/DATASET/nnUNet_trained_models/nnUNet,你会发现这个文件夹地下会有一个Task008_HepaticVessel的文件夹,这个其实就是该任务的训练模型,也就是你模型的存放位置,请用你下载好的预训练模型将这个文件夹替换掉。
  • 第三种情况:经过漫长的等待,你终于训练出了属于自己的模型,恭喜你拥有SOTA级别的模型。你什么也不用做啦,因为你的模型在它该在的位置。

3. 进行推理。

       经过上面两步的准备,现在可以进行推理了。请在终端中执行下面命令行:
nnUNet_predict -i /home/你的主机用户名/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task008_HepaticVessel/imagesTs/ -o /home/你的主机用户名/nnUNetFrame/DATASET/nnUNet_raw/nnUNet_raw_data/Task008_HepaticVessel/inferTs -t 8 -m 3d_fullres -f 4
       nnUNet_predict:执行预测的命令;
       -i: 输入(你的待推理测试集);
       -o: 输出(测试集的推理结果);
       -t: 你的任务对应的数字ID;
       -m: 对应的训练时使用的网络架构;
       -f: 数字4代表使用五折交叉验证训练出的模型;
       推理完全部需要消耗相当长的时间,建议先只用一个测试文件进行推理。

4. 注意!

       nnUNet的推理是在多线程池中进行设置的,默认为8 线程,也就是如果你要做很多个case的推理,你的机器其实在处理多个线程,这也就会导致电脑负荷过大从而推理过程卡死不动,所以尽量推理的时候,推理文件夹中只放一个case,即只放一个nii.gz文件.
       或者可以在setup或者代码中设置下线程的数目.


三、nnUNet的推理又很难。

这部分是非教程的代码解析部分,因为会涉及很大的代码量,所以我会在下一篇中想详细解释。

你可能感兴趣的:(nnUNet,医学图像分割,深度学习,人工智能,python)