深度学习使计算机能够自动分析图像,例如从医学影像中分割肿瘤或器官。然而,不同数据集差异大、硬件条件不一,传统方法依赖专家手动设计网络和调参。
nnU-Net 实现了高度自动化,无需人工反复试错,可自动完成数据预处理、网络结构设计、训练策略及结果后处理,并针对每一个新任务自动调整。
Introduction
- 语义分割就是让电脑把医学影像里的不同结构'认出来并标出来',在很多地方都非常关键,是医学影像里非常核心的一项技术。
- 现在大多数医学影像分割都用深度学习,而且研究非常火(70%)。
- 现实问题是:① 想把一个分割模型'用好',非常依赖专家经验;② 一点点参数设置错了,效果就会大幅下降。
- 尤其在 3D 医学影像中差异很大,一个数据集调好的方案,几乎不能直接用到另一个,而且超参很多很复杂。
- 用 AutoML 需要机器多的训练次数,非常耗就算资源,实际上只能调一小部分,剩下的还是要人来决定,而且给新数据集用 AutoML,本身又需要专家来设搜索空间。
作者给出的思路:把专家经验系统化 + 规则化,只把少量事情留给数据来学,整个流程为:预处理→网络结构→训练→后处理,将模型参数分为以下三个部分:
- 永远不变的设置(fixed parameters):哪些设计在不同数据集之间通用直接固定,不再调。
- 看数据特征就能决定的(rule-based parameters):先提取数据指纹(比如图像大小、分辨率等),再用规则自动决定模型要怎么配。
- 实在没法规则化的才用数据学(empirical parameters):只剩很少一部分需要真正训练来决定。
nnUNet 具体自动化参数设计
整体的数据框架如下:

- Fixed Parameters:unet 架构、优化器、等。
- Data fingerprint:图像尺寸/像素体素间距/各类别占比等。
- Pipeline fingerprint:patch 大小/batch size/网络有多深等。
- Rule Parameters:比如:先把 patch 设成图像的中位大小,然后在不爆显存的前提下,一边缩小 patch,一边自动调整网络结构,直到能保证 batch size ≥ 2(网络的深度、pooling 等都会跟着一起自动修改)。
- Empirical:选哪个模型效果好,要不要做某种后处理。
应用到新数据集时:自动提取数据指纹→执行所有规则生成模型配置→默认训练三种模型(2D/全分辨 3D/二阶段 3D)→交叉验证选最优模型或模型组合→自动判断要不要加一个简单的后处理。
下面具体说说每一板块怎么工作的。
Fixed Parameters 具体设计
- 不搞复杂结构,U-Net 就够了。
- 网络模块里用最基础的组件:卷积 → Instance Normalization → Leaky ReLU,其中 Instance Normalization:自己和自己比,医学图像 batch 小同时差异大(CT 亮度不同)。
- 每个尺度固定用两个卷积块:编码器(每层两个连续卷积)和解码器(每层两个连续卷积)。
固定了每一层网络中的结构,所以后面 Rule 部分才能实现通过显存和 patch 调整网络深度。
- 下采样和上采样的方式也固定:下用带步长卷积,上用转置卷积(作者强调用不用 max pooling、双线性插值,其实对精度影响不大)。
- 为什么要用三种 UNet:作者承认很难提前知道哪种 U-Net 对哪个数据集最好,所以最后交叉验证自动选最好。
- 2D U-Net:在原始分辨率上逐帧做,适合层厚层间距差异大的,比如 MRI。
- 3D 全分辨:一般情况下效果最好,但是受限于显存可能 patch 较小,看不够上下文。
- 3D 级联:专门针对特别大的 3D 图像。









