医学影像分割:nnU-Net 实战
医学影像分割是给 CT、MRI 等三维图像的每个体素赋一个标签,例如器官、病灶或背景,输出是与原图同尺寸的掩膜。它是体积测量、影像组学特征提取和放疗靶区勾画的基础。nnU-Net 的特点是根据数据集的体素间距、图像尺寸、模态数和显存自动决定预处理、网络结构、分块大小和训练计划,使用者主要负责把数据整理成规定格式。常见输入是 NIfTI(nii.gz)文件,多序列 MRI 需要先配准到同一空间。这类分析属于科研用途,分割结果用于定量和研究,不替代临床诊断或治疗决策。
什么时候用
- 需要在成百上千例影像上测量器官或病灶体积,人工勾画不可行
- 为影像组学分析批量生成感兴趣区域掩膜
- 已有一批医生勾画的标注,想训练模型把流程自动化
- 多时间点随访需要一致的分割标准,减少勾画者间差异
- 多序列 MRI 需要统一空间后联合分割病灶的不同成分
不适合的情况
- 标注极少且结构形态差异极大时,模型难以学到稳定边界
- 直接用于临床靶区勾画或诊断决策,结果必须由医生复核
- 只需要粗略体积估计且已有成熟测量工具时,训练模型不划算
需要准备的数据
- 影像文件
- NIfTI 或可转换为 NIfTI 的 DICOM 序列,需保留正确的体素间距和方位信息
- 标注掩膜
- 与影像同尺寸同空间,标签为连续整数,0 为背景;多个结构用不同整数区分
- 数据集描述文件
- 说明模态数、各通道含义、标签名称与数量、训练样本列表
- 多序列配准关系(可选)
- 同一病例的不同序列需配准到同一参考空间,并统一体素间距
- 划分信息
- 病例级划分依据,含中心、设备、扫描参数,用于分层和外部验证
分析步骤
- 1
整理数据与命名
把影像和标注转成 NIfTI,按工具要求的目录结构和文件命名规则放置,多模态按通道编号区分。做对的标志:每例影像都有对应标注,标注的尺寸、间距、方位与影像完全一致。
- 2
核对空间信息
逐例检查体素间距、方位矩阵和尺寸。方位不一致会让左右翻转,间距缺失会让重采样失效。发现异常先修正原始文件,不要在训练阶段临时拼补。
- 3
配准与重采样
多序列数据先选一个参考序列,用刚性或仿射配准把其他序列对齐,再统一重采样到同一体素间距。影像用线性或更高阶插值,标注必须用最近邻插值,否则会产生不存在的中间标签值。
- 4
运行预处理与自动配置
让 nnU-Net 做数据集指纹分析并生成训练计划,输出会包含目标体素间距、强度归一化方式和分块大小。检查这些数值是否合理,比如分块是否小到装不下目标结构。
- 5
选择配置并训练
三维结构通常先跑 3d_fullres;各向异性明显或切片很厚时考虑 2d 或级联配置。按默认的交叉验证折数训练,观察训练与验证损失曲线是否正常收敛。
- 6
交叉验证与模型选择
汇总各折的验证 Dice,比较不同配置和是否集成。选择依据应是交叉验证结果,而不是在测试集上反复挑选,否则测试指标不再独立。
- 7
推理与后处理
对新病例推理得到掩膜,常用后处理包括只保留最大连通域(适用于单个器官)、去掉过小的碎片。后处理是否有益应在验证集上验证,不要默认开启。
- 8
评估与目视检查
计算 Dice、HD95、体积偏差等指标,并逐例查看最差的若干例。指标平均值好但个别病例完全失败,是临床应用中最需要关注的情况。
关键参数与决策
配置选择(2d / 3d_fullres / 级联)
3d_fullres 保留三维上下文,多数器官和病灶任务首选;切片厚、层间距远大于层内间距时 2d 可能更稳;目标很大而显存受限时用级联,先低分辨率定位再精细分割。
目标体素间距
自动配置会按数据集间距分布给出目标值。间距过粗会丢失小结构,过细会让分块覆盖范围变小、上下文不足。小病灶任务可考虑手动调细并同步检查分块大小。
分块大小与批大小
两者受显存约束、互相制约。分块应能容纳目标结构的大部分,批大小过小会让归一化层统计不稳。显存不足时优先保证分块覆盖范围。
强度归一化
CT 的 HU 值有物理意义,常用全数据集统计加窗裁剪;MRI 信号强度跨设备不可比,常按每例自身统计做 z-score。用错方式会让跨中心数据表现明显下降。
插值方式
影像重采样用线性或 B 样条,标注一律用最近邻。标注用线性插值会生成 0.5 这类非法标签,导致边界混乱和评估错误。
后处理开关
最大连通域过滤对单一器官有效,但对多发病灶会删掉真实病灶。应按任务在验证集上比较开启与关闭的 Dice 后再决定。
常见错误
- 标注与影像的空间信息不一致:尺寸相同但方位或间距不同,训练时掩膜与解剖结构错位,模型学到的是噪声。
- 标注重采样用了线性插值:边界出现非整数标签,部分体素被归入错误类别,Dice 评估也随之失真。
- 同一患者的多个时间点分散在训练和测试:模型记住个体解剖,Dice 虚高,换新患者后明显下降。
- MRI 不做每例强度归一化:不同设备和序列参数的信号范围差异大,跨中心推理时分割面积系统性偏大或偏小。
- 只看平均 Dice 不看最差病例:平均值可以被多数简单病例拉高,而失败病例往往正是临床最关心的难例。
- 默认开启最大连通域后处理做多发病灶分割:除最大灶外的病灶被全部删除,灵敏度大幅下降却不体现在平均 Dice 上。
结果怎么看
分割掩膜叠加图
把预测掩膜叠加在原图上,分别看横断、冠状、矢状位。重点看边界是否贴合、有无跨解剖边界的溢出和孤立碎片。碎片多说明需要后处理或训练不足。
Dice 与 HD95 汇总表
按病例和结构列出指标。Dice 衡量整体重叠,对小结构惩罚重;HD95 衡量最大边界偏差,对局部溢出敏感。Dice 高但 HD95 很大,通常是主体分割正确却有远处假阳性区域。
体积偏差与一致性分析
预测体积与标注体积的散点图和 Bland-Altman 图。点应沿对角线分布;系统性偏高或偏低说明边界阈值或归一化有问题,离散度大则说明在部分病例上不稳定。
最差病例清单
按 Dice 升序排列的病例列表。逐例检查是标注错误、影像质量差(运动伪影、金属伪影)还是真实难例。若最差病例集中在某台设备或某个中心,提示需要补充该来源的数据。
和相近方法怎么选
nnU-Net 与自己手写 U-Net
nnU-Net 把预处理、网络配置和训练计划按数据集自动决定,复现性好、基线强,适合大多数分割任务;手写网络便于加入特定结构改动和新损失函数,但需要大量调参才能追上自动配置的基线。先用前者做基线是常见做法。
3d_fullres 与 2d 配置
3d_fullres 利用三维上下文,对连续解剖结构和边界判断更有利;2d 逐层分割,显存需求低、对层厚大的各向异性数据更稳健,也便于用层内高分辨率。不确定时两者都跑,按交叉验证结果选择。
分割与影像组学
分割提供感兴趣区域,影像组学在该区域上提取形状、强度和纹理特征再建模。分割边界的微小差异会传导到特征值上,因此影像组学研究通常要报告分割方式和稳定性检验结果。
专用分割模型与通用交互式分割
针对特定结构训练的模型在该任务上精度高、可批量自动运行,但换结构就要重新训练;通用交互式模型需要点或框提示,不必训练,适合少量样本和探索性勾画,批量任务中人工提示成本高。
常见问题
nnU-Net 需要多少标注病例?
没有统一门槛,与结构大小、形态一致性和图像质量有关。实践中可先用现有数据跑交叉验证,再画学习曲线判断增加病例是否仍带来提升。结构小、形态变异大的任务需要的样本明显更多。
Dice 多少算好?
依任务而定,大器官通常能达到较高水平,小病灶和边界模糊的结构会低不少。更有意义的参照是勾画者间一致性:模型与医生的 Dice 接近两位医生之间的 Dice,就说明达到可用水平。
多序列 MRI 要怎么准备?
先选一个序列作为参考空间,用刚性或仿射配准把其他序列对齐,统一重采样到相同体素间距和尺寸,再作为多通道输入。标注必须在参考空间内,重采样时用最近邻插值。
训练显存不够怎么办?
可以降低批大小、调粗目标体素间距,或改用级联配置先在低分辨率定位再精细分割。优先保证分块能覆盖目标结构的主体,上下文不足对精度的影响通常比批大小更大。
分割结果可以直接用于临床吗?
不可以。这类模型输出属于科研定量结果,不替代临床诊断或治疗决策。用于临床相关研究时应由医生逐例复核,报告外部验证表现、失败病例情况和适用范围,并说明所用数据来源与设备构成。
在 Codar 里怎么做
在 Codar 中提供影像与标注后,会先核对空间信息、完成三维医学影像的配准与重采样,再按 nnU-Net 的格式整理数据集、运行预处理与自动配置、训练并做交叉验证,最后对新病例推理和后处理。交付分割掩膜叠加图、Dice 与 HD95 汇总表、体积一致性分析、最差病例清单,以及可复现的处理与训练脚本。
我有 120 例腹部 CT 和医生勾画的肝脏掩膜(nii.gz),帮我用 nnU-Net 训练分割模型并报告每例 Dice