本篇学习目标
这是《nnU-Net 0基础入门》系列的第 6 篇。前一篇我们重点讲了训练阶段:fold、configuration、checkpoint 和日志。本文进入训练后的关键步骤:找到最佳模型配置。
读完本文,你应该能够:
- 理解为什么不能只凭一次训练结果就说模型最好。
- 知道
nnUNetv2_find_best_configuration的前置条件。 - 理解 individual configuration、ensemble 和 postprocessing 分别是什么意思。
- 知道如何使用
inference_instructions.txt作为最终推理命令来源。
1. 为什么还需要“找最佳配置”
nnU-Net v2 在 plan 阶段可能会生成多个 configuration,例如 2d、3d_fullres、3d_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 的 2d 和 3d_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 等基础指标。
Comments NOTHING