Codar
下载

医学影像分割:nnU-Net 实战

医学影像分割是给 CT、MRI 等三维图像的每个体素赋一个标签,例如器官、病灶或背景,输出是与原图同尺寸的掩膜。它是体积测量、影像组学特征提取和放疗靶区勾画的基础。nnU-Net 的特点是根据数据集的体素间距、图像尺寸、模态数和显存自动决定预处理、网络结构、分块大小和训练计划,使用者主要负责把数据整理成规定格式。常见输入是 NIfTI(nii.gz)文件,多序列 MRI 需要先配准到同一空间。这类分析属于科研用途,分割结果用于定量和研究,不替代临床诊断或治疗决策。

什么时候用

  • 需要在成百上千例影像上测量器官或病灶体积,人工勾画不可行
  • 为影像组学分析批量生成感兴趣区域掩膜
  • 已有一批医生勾画的标注,想训练模型把流程自动化
  • 多时间点随访需要一致的分割标准,减少勾画者间差异
  • 多序列 MRI 需要统一空间后联合分割病灶的不同成分

不适合的情况

  • 标注极少且结构形态差异极大时,模型难以学到稳定边界
  • 直接用于临床靶区勾画或诊断决策,结果必须由医生复核
  • 只需要粗略体积估计且已有成熟测量工具时,训练模型不划算

需要准备的数据

影像文件
NIfTI 或可转换为 NIfTI 的 DICOM 序列,需保留正确的体素间距和方位信息
标注掩膜
与影像同尺寸同空间,标签为连续整数,0 为背景;多个结构用不同整数区分
数据集描述文件
说明模态数、各通道含义、标签名称与数量、训练样本列表
多序列配准关系(可选)
同一病例的不同序列需配准到同一参考空间,并统一体素间距
划分信息
病例级划分依据,含中心、设备、扫描参数,用于分层和外部验证

分析步骤

  1. 1

    整理数据与命名

    把影像和标注转成 NIfTI,按工具要求的目录结构和文件命名规则放置,多模态按通道编号区分。做对的标志:每例影像都有对应标注,标注的尺寸、间距、方位与影像完全一致。

  2. 2

    核对空间信息

    逐例检查体素间距、方位矩阵和尺寸。方位不一致会让左右翻转,间距缺失会让重采样失效。发现异常先修正原始文件,不要在训练阶段临时拼补。

  3. 3

    配准与重采样

    多序列数据先选一个参考序列,用刚性或仿射配准把其他序列对齐,再统一重采样到同一体素间距。影像用线性或更高阶插值,标注必须用最近邻插值,否则会产生不存在的中间标签值。

  4. 4

    运行预处理与自动配置

    让 nnU-Net 做数据集指纹分析并生成训练计划,输出会包含目标体素间距、强度归一化方式和分块大小。检查这些数值是否合理,比如分块是否小到装不下目标结构。

  5. 5

    选择配置并训练

    三维结构通常先跑 3d_fullres;各向异性明显或切片很厚时考虑 2d 或级联配置。按默认的交叉验证折数训练,观察训练与验证损失曲线是否正常收敛。

  6. 6

    交叉验证与模型选择

    汇总各折的验证 Dice,比较不同配置和是否集成。选择依据应是交叉验证结果,而不是在测试集上反复挑选,否则测试指标不再独立。

  7. 7

    推理与后处理

    对新病例推理得到掩膜,常用后处理包括只保留最大连通域(适用于单个器官)、去掉过小的碎片。后处理是否有益应在验证集上验证,不要默认开启。

  8. 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
了解AI 医学影像插件