《nnU-Net 0基础入门(6):找到最佳模型,cross-validation、ensemble 与 postprocessing》

503611908 发布于 2 小时前 4 次阅读


本篇学习目标

这是《nnU-Net 0基础入门》系列的第 6 篇。前一篇我们重点讲了训练阶段:fold、configuration、checkpoint 和日志。本文进入训练后的关键步骤:找到最佳模型配置。

读完本文,你应该能够:

  1. 理解为什么不能只凭一次训练结果就说模型最好。
  2. 知道 nnUNetv2_find_best_configuration 的前置条件。
  3. 理解 individual configuration、ensemble 和 postprocessing 分别是什么意思。
  4. 知道如何使用 inference_instructions.txt 作为最终推理命令来源。

1. 为什么还需要“找最佳配置”

nnU-Net v2 在 plan 阶段可能会生成多个 configuration,例如 2d3d_fullres3d_lowres。这些配置没有绝对的通用排名。某个任务上 3D 可能更好,另一个任务上 2D 可能更稳定。

因此,训练完成后需要比较不同配置在验证集上的表现。官方提供的工具是:

nnUNetv2_find_best_configuration DATASET_NAME_OR_ID -c CONFIGURATIONS

例如:

nnUNetv2_find_best_configuration 1 -c 2d 3d_fullres 3d_lowres

这一步不是训练新模型,而是基于已有验证结果,比较哪些配置或配置组合最适合当前数据集。

2. 前置条件:必须有 validation probabilities

官方文档明确写明:使用 nnUNetv2_find_best_configuration 前,必须已经有 validation probabilities。也就是训练时加了 --npz,或者训练后用 --val --npz 补跑验证。

推荐训练命令:

nnUNetv2_train 1 2d 0 --npz
nnUNetv2_train 1 2d 1 --npz
nnUNetv2_train 1 2d 2 --npz
nnUNetv2_train 1 2d 3 --npz
nnUNetv2_train 1 2d 4 --npz

nnUNetv2_train 1 3d_fullres 0 --npz
nnUNetv2_train 1 3d_fullres 1 --npz
nnUNetv2_train 1 3d_fullres 2 --npz
nnUNetv2_train 1 3d_fullres 3 --npz
nnUNetv2_train 1 3d_fullres 4 --npz

如果忘了加 --npz,可以补跑:

nnUNetv2_train 1 3d_fullres 0 --val --npz

validation probabilities 指模型在验证集上输出的类别概率图。它们不仅能算 Dice,也能用于 ensemble,因为 ensemble 需要把多个模型的概率结果合并后再取最终类别。

3. find_best_configuration 会评估什么

官方文档说明,这个命令会评估三类内容:

  • individual configurations:单个配置,例如只用 2d 或只用 3d_fullres
  • pairwise ensembles:两两组合的 ensemble,除非你加 --disable_ensembling 禁用。
  • postprocessing:基于 connected-component removal 的后处理。
flowchart TD
    A[已训练好的多个 configuration] --> B[读取验证集概率 npz]
    B --> C[评估单个配置]
    B --> D[评估两两 ensemble]
    C --> E[尝试 connected-component postprocessing]
    D --> E
    E --> F[写出 inference_instructions.txt]

ensemble 指把多个模型的预测结果组合起来。常见做法是对多个模型输出的概率取平均,再得到最终分割结果。它可能提升稳定性,但也会增加推理时间和存储成本。

postprocessing 指模型预测之后再做的处理。nnU-Net v2 这里主要评估 connected-component removal,也就是移除某些不合理的小连通域。连通域可以理解为图像中互相连接的一块预测区域。

4. 命令示例

假设你训练了数据集 1 的 2d3d_fullres,并且 5 个 fold 都有 --npz,可以运行:

nnUNetv2_find_best_configuration 1 -c 2d 3d_fullres

如果还训练了 3d_lowres,可以加入:

nnUNetv2_find_best_configuration 1 -c 2d 3d_fullres 3d_lowres

如果你不想评估 ensemble,可以禁用:

nnUNetv2_find_best_configuration 1 -c 2d 3d_fullres --disable_ensembling

初学者建议先让官方工具完整评估,不要过早禁用 ensemble。等你理解模型选择逻辑后,再根据推理速度、部署成本和任务要求决定是否使用 ensemble。

5. 输出文件在哪里

官方文档说明,该命令会在 nnUNet_results/DatasetXXX_Name 下写出两个重要文件:

文件 作用 建议怎么用
inference_instructions.txt 推荐的最终推理命令 优先复制这里的命令执行推理
inference_information.json 记录推理所需信息 用于追踪最佳配置和后处理信息

对初学者来说,最重要的是 inference_instructions.txt。不要凭记忆手写最终推理命令,尤其是在使用 ensemble 和 postprocessing 时。官方工具已经把推荐命令写好,直接按它执行更稳妥。

6. postprocessing 是不是一定会提升效果

不一定。后处理不是魔法,它只是基于验证集判断某些规则是否有用。例如对于“每个病例理论上只有一个器官”的任务,移除小的错误连通域可能有效。但如果任务本来就允许多个病灶或多个小目标,盲目移除小连通域可能会删掉真实病灶。

因此,postprocessing 必须由验证集结果支持。nnU-Net v2 的工具会自动评估 connected-component removal 是否改善验证表现,而不是让用户随便套规则。

7. 模型选择决策表

情况 建议 原因
只训练了一个 fold 不要急着称为最终模型 验证依据太少,无法稳定比较配置
训练了 5 folds,但没保存 npz --val --npz 补跑验证 find_best_configuration 需要 validation probabilities
多个配置都训练完整 运行 nnUNetv2_find_best_configuration 自动比较单配置、ensemble 和后处理
推理速度比精度更重要 谨慎使用 ensemble ensemble 往往更慢、占用更多模型存储
小目标或多病灶任务 谨慎接受连通域后处理 错误移除小区域可能损害召回率

8. 一个推荐的完整顺序

如果你想按官方流程得到最终推理命令,可以采用下面的顺序:

# 1. 每个配置训练 5 个 fold,并保存 npz
nnUNetv2_train 1 2d 0 --npz
nnUNetv2_train 1 2d 1 --npz
nnUNetv2_train 1 2d 2 --npz
nnUNetv2_train 1 2d 3 --npz
nnUNetv2_train 1 2d 4 --npz

nnUNetv2_train 1 3d_fullres 0 --npz
nnUNetv2_train 1 3d_fullres 1 --npz
nnUNetv2_train 1 3d_fullres 2 --npz
nnUNetv2_train 1 3d_fullres 3 --npz
nnUNetv2_train 1 3d_fullres 4 --npz

# 2. 比较配置、ensemble 和 postprocessing
nnUNetv2_find_best_configuration 1 -c 2d 3d_fullres

# 3. 查看官方推荐推理命令
cat "$nnUNet_results"/Dataset001_Liver/inference_instructions.txt

如果你的数据集编号不是 1,或者数据集名称不是 Dataset001_Liver,把命令中的编号和路径换成自己的。

9. 官方资料入口

本文主要参考:

本篇总结

找到最佳模型不是看一次训练结果,而是基于完整的 validation probabilities 比较不同 configuration、可能的 pairwise ensemble 和 connected-component postprocessing。官方推荐使用 nnUNetv2_find_best_configuration,并以输出的 inference_instructions.txt 作为最终推理命令来源。

下一篇预告

下一篇我们会继续推理和评估:如何用 nnUNetv2_predict 批量预测,什么时候保存 probabilities,如何使用 ensemble 和 postprocessing 结果,以及怎样从预测文件走向 Dice 等基础指标。

此作者没有提供个人介绍。
最后更新于 2026-05-14