本篇学习目标
这是《nnU-Net 0基础入门》系列的第 1 篇。读完本文,你应该能够回答四个问题:
- nnU-Net v2 到底是什么,它解决的不是“造一个新网络”,而是什么问题?
- 为什么医学图像分割不能简单套一个普通 U-Net 就结束?
- nnU-Net v2 从数据到预测的大致流程是什么?
- 这个系列后面会怎样带你从会用 nnU-Net 走到能改 Trainer、loss、augmentation 和 network architecture?
1. 先说结论:nnU-Net v2 是一个“自动配置医学图像分割流程”的框架
nnU-Net 可以拆开理解:U-Net 是医学图像分割里非常经典的网络结构,而前面的 nn 来自 “no-new-Net”。这个名字的重点不是说它永远不用新网络,而是强调:很多医学分割任务真正难的地方,不是临时设计一个看起来更复杂的网络,而是把整个训练流程配置对。
官方文档把 nnU-Net v2 定位为一个 semantic segmentation framework,也就是语义分割框架。语义分割指的是:模型需要给图像中的每个像素或体素分配一个类别。例如在 CT 中分割肝脏,在 MRI 中分割脑肿瘤,在显微图像中分割细胞区域,都属于这个范畴。
更准确地说,nnU-Net v2 的核心价值是:
给定一个符合格式的训练数据集,nnU-Net 会分析数据特征,然后自动配置预处理、网络结构、patch size、训练策略、模型选择和推理流程,得到一个强基线。
这里的强基线很重要。基线不是“最低水平”,而是一个足够可靠、可复现、很难随便超过的参考系统。对刚开始做医学图像分割的人来说,nnU-Net v2 通常比手写一个 U-Net 更适合作为起点。
2. 为什么医学图像分割不能只靠“一个 U-Net 模型”
如果你已经有深度学习基础,可能会自然地想:既然 U-Net 是分割网络,那我写一个 U-Net,换成医学数据训练不就行了吗?问题在于医学图像的差异远比自然图像大。
官方解释中列出的关键差异包括:2D 与 3D 数据、不同模态和通道数、图像尺寸、体素间距、各向异性、类别不平衡、目标结构属性等。把这些翻译成实际训练问题,就是:
- 2D/3D 差异:一张病理切片可能是 2D 图像,而 CT/MRI 往往是 3D 体数据。2D 卷积和 3D 卷积的显存、上下文和训练方式完全不同。
- spacing:spacing 指医学图像中相邻像素或体素在真实世界里的物理距离。同样是 512×512×100 的数据,不同 spacing 代表的真实器官尺度可能不同。
- anisotropy:各向异性指不同方向的分辨率差异很大。例如平面内很清楚,但层厚很大,这会影响是否适合直接用 3D 卷积。
- class imbalance:类别不平衡指背景区域巨大,而目标区域很小。比如小肿瘤只占整幅图像极少部分,普通训练很容易学成“全预测背景”。
- modality/channel:模态或通道可能是 CT、T1、T2、FLAIR、显微图像不同染色方式等。不同通道的强度分布和预处理方式差异很大。
这些因素会相互影响。你改 patch size,会影响显存;你改 spacing,会影响目标大小;你改 2D/3D 配置,会影响上下文范围;你改 loss,又会和类别不平衡相关。nnU-Net v2 的思路是:不要让用户手工拍脑袋配置所有环节,而是让框架先从数据中提取规律,再用一套可复现的规则和经验策略生成合理配置。
3. nnU-Net v2 的工作流长什么样
从用户视角看,nnU-Net v2 的完整流程可以概括成五步:
flowchart TD
A[准备符合 nnU-Net 格式的数据集] --> B[提取 dataset fingerprint]
B --> C[生成 plans 并执行 preprocessing]
C --> D[训练 2d / 3d_fullres / 3d_lowres / cascade 等配置]
D --> E[比较配置并确定 postprocessing]
E --> F[用最佳配置进行 inference]
这里有几个术语需要先认识:
- dataset fingerprint:可以理解为数据集“指纹”。它总结图像尺寸、spacing、强度分布等数据特征。nnU-Net 后续很多配置都依赖它。
- plans:可以理解为实验计划文件。它记录 nnU-Net 根据 fingerprint 生成的预处理、网络拓扑、patch size、batch size 等配置。
- preprocessing:预处理。包括重采样、归一化、裁剪、保存训练所需的中间数据等。
- configuration:训练配置。nnU-Net v2 常见配置包括
2d、3d_fullres、3d_lowres和3d_cascade_fullres。 - inference:推理。也就是用训练好的模型对新病例生成分割结果。
注意,nnU-Net v2 并不保证每个数据集都会生成所有配置。官方文档明确说明,cascade 只会在数据集特征确实需要时才生成。比如图像本身较小、全分辨率 U-Net 的 patch 已经能覆盖足够大的区域时,就未必需要低分辨率和 cascade。
4. nnU-Net v2 自动配置的不是一个点,而是一条 pipeline
很多初学者第一次接触 nnU-Net,会把它理解成“一个网络”。这不够准确。nnU-Net v2 更像是一条完整 pipeline。pipeline 指的是从输入数据到最终输出结果的一整套流水线。
| 环节 | nnU-Net v2 会做什么 | 初学者常见误解 |
|---|---|---|
| 数据分析 | 读取训练数据,提取尺寸、spacing、强度等 fingerprint | 以为只要把图片放进去就能直接训练 |
| 预处理 | 根据数据特征决定重采样、归一化、裁剪等步骤 | 以为所有医学图像都用同一种归一化 |
| 网络配置 | 自动确定 2D/3D 配置、patch size、网络拓扑等 | 以为网络结构必须完全手动设计 |
| 训练 | 使用标准化 Trainer、loss、augmentation 和 cross-validation | 只关注模型代码,忽略训练策略 |
| 模型选择 | 比较不同配置,必要时做 ensemble 和 postprocessing | 训练完一个 fold 就直接当最终结果 |
| 推理 | 按训练时的配置和预处理逻辑对新数据预测 | 训练和推理前处理不一致 |
这也是为什么 nnU-Net 在很多医学分割任务中很强:它把很多“容易被忽视但决定结果”的工程细节系统化了。
5. nnU-Net v2 适合什么,不适合什么
nnU-Net v2 特别适合以下场景:
- 你有带标签的医学图像分割数据,想快速得到可靠 baseline。
- 你正在参加医学图像分割挑战赛,需要先建立强基线。
- 你的数据和自然图像差异很大,使用 ImageNet 预训练模型不一定合适。
- 你想研究新的 loss、augmentation、Trainer 或网络结构,需要一个成熟框架作为实验平台。
但它不适合被误用在这些场景:
- 没有像素级或体素级标注,却希望它自动学会分割。
- 数据格式混乱、标签不一致,但不愿意先清洗数据。
- 希望不理解任何流程,只靠一条命令得到可发表结果。
- 把 nnU-Net 当成万能模型,忽略任务定义、数据质量和实验验证。
一句话:nnU-Net v2 能帮你少走很多工程弯路,但不能替代数据质量、医学问题定义和严谨实验设计。
6. 初学者应该怎样学习 nnU-Net v2
我建议把学习路径分成四层:
- 会安装:理解环境、PyTorch、CUDA、三个核心目录变量。
- 会跑通:整理数据集,完成 plan、preprocess、train、predict。
- 会解释:知道 fingerprint、plans、configuration、fold、postprocessing 在做什么。
- 会修改:能通过继承 Trainer 修改 loss、augmentation、optimizer、network architecture 等模块。
这个系列后续也会按这个顺序展开。前几篇先解决“怎么跑起来”,中间几篇解决“怎么判断跑得对不对”,最后几篇进入源码和自定义模块。
7. 本篇可以先记住的最小命令地图
第 1 篇不要求你马上运行 nnU-Net,但你可以先对后面会频繁出现的命令有一个印象。nnU-Net v2 的命令一般以 nnUNetv2 开头:
# 查看命令帮助,确认当前安装版本支持哪些参数
nnUNetv2_plan_and_preprocess -h
nnUNetv2_train -h
nnUNetv2_predict -h
# 后续完整流程中会出现的典型命令形态
nnUNetv2_plan_and_preprocess -d DATASET_ID --verify_dataset_integrity
nnUNetv2_train DATASET_ID 3d_fullres 0
nnUNetv2_predict -i INPUT_FOLDER -o OUTPUT_FOLDER -d DATASET_ID -c 3d_fullres
这里的 DATASET_ID 是数据集编号,例如官方格式中常见的 Dataset001_XXX 对应编号 1。具体数据集格式、目录结构和命令参数,我们会在后续文章逐步展开。
8. 官方资料入口
本文主要基于以下官方资料整理:
- MIC-DKFZ/nnUNet 官方仓库
- nnU-Net 官方 documentation 首页
- How nnU-Net Works
- TLDR Migration Guide from nnU-Net V1
本篇总结
nnU-Net v2 不是单纯的 U-Net 网络代码,而是一套面向监督式医学图像语义分割的自动配置框架。它会从数据中提取 fingerprint,生成 plans,自动决定预处理、网络配置、训练和推理流程。对初学者来说,先把它当作强基线跑通,再逐步理解内部机制,是最稳妥的学习路径。
下一篇预告
下一篇我们进入实操:安装 nnU-Net v2。重点会讲清楚 PyTorch 应该先怎么装,为什么需要 nnUNet_raw、nnUNet_preprocessed、nnUNet_results 这三个路径变量,以及如何检查环境是否真的准备好了。
Comments NOTHING