《nnU-Net 0基础入门(1):nnU-Net v2 是什么,为什么它是医学图像分割的强基线》

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


本篇学习目标

这是《nnU-Net 0基础入门》系列的第 1 篇。读完本文,你应该能够回答四个问题:

  1. nnU-Net v2 到底是什么,它解决的不是“造一个新网络”,而是什么问题?
  2. 为什么医学图像分割不能简单套一个普通 U-Net 就结束?
  3. nnU-Net v2 从数据到预测的大致流程是什么?
  4. 这个系列后面会怎样带你从会用 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 常见配置包括 2d3d_fullres3d_lowres3d_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

我建议把学习路径分成四层:

  1. 会安装:理解环境、PyTorch、CUDA、三个核心目录变量。
  2. 会跑通:整理数据集,完成 plan、preprocess、train、predict。
  3. 会解释:知道 fingerprint、plans、configuration、fold、postprocessing 在做什么。
  4. 会修改:能通过继承 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. 官方资料入口

本文主要基于以下官方资料整理:

本篇总结

nnU-Net v2 不是单纯的 U-Net 网络代码,而是一套面向监督式医学图像语义分割的自动配置框架。它会从数据中提取 fingerprint,生成 plans,自动决定预处理、网络配置、训练和推理流程。对初学者来说,先把它当作强基线跑通,再逐步理解内部机制,是最稳妥的学习路径。

下一篇预告

下一篇我们进入实操:安装 nnU-Net v2。重点会讲清楚 PyTorch 应该先怎么装,为什么需要 nnUNet_rawnnUNet_preprocessednnUNet_results 这三个路径变量,以及如何检查环境是否真的准备好了。

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