3. 分割标注与数据管理

在医学影像分割项目中,算法模型的上限往往由数据质量决定。一个 Dice 系数长期卡在 0.85 上不去的分割模型,问题通常不在网络结构,而在标注边界模糊、类别定义不一致、训练集与验证集存在患者级泄漏,或者标注版本与训练版本对不上。本节围绕“从原始影像到可训练数据集”这条链路,讲清楚标注工具选型、标注规范制定、多专家一致性评估、数据清洗、数据集划分与版本管理这六个环节的实际做法。

一、标注工具:按标注形态与协作方式选型

医学影像分割标注工具大致分三类。第一类是通用二维标注工具,如 LabelMe、CVAT、Label Studio,适合 CT/MR 单层切片、超声、病理切片的区域勾画,支持多边形、掩膜笔刷、SAM 辅助分割,部署简单,适合小团队快速起步。第二类是医学影像专用工具,如 3D Slicer、ITK-SNAP、MITK,原生支持 DICOM、NIfTI 体数据,可在冠状面、矢状面、横断面三视图联动勾画,适合器官、病灶的三维分割。第三类是云端协作平台,支持任务分发、角色权限、标注-审核双盲流程,适合多中心、多专家的大规模项目。

选型时重点看四个能力:是否原生读取 DICOM 并保留窗宽窗位、是否支持三维插值勾画、是否支持多标注者独立标注同一病例、是否可导出标准格式(NIfTI、NRRD、DICOM-SEG)。以肝脏肿瘤分割为例,若只做单层评估可用 CVAT,但要做体积测量和三维重建,ITK-SNAP 或 3D Slicer 更合适。

二、标注规范:把“边界在哪”写成可执行文档

标注规范的核心是把临床共识翻译成可复现的操作规则。一份可用的规范至少包含:类别定义与包含/排除标准、边界勾画规则、层间处理规则、特殊情形的处理约定、标注顺序与命名规则。

以“肝脏肿瘤分割”为例,规范可写成:肿瘤区域指动脉期强化、门脉期廓清的可疑恶性病灶;肿瘤与正常肝实质边界以病灶边缘最外缘为准;若病灶与血管紧贴,血管腔不计入肿瘤;直径小于 5 mm 的病灶单独标记为 small_lesion 类别;每例标注从病灶最大层面开始,向上下逐层勾画,层间跳变不超过 3 mm。这些规则越具体,标注者之间的分歧就越小。

规范文档应配典型示例图:正确边界、常见错误(如把血管误标为肿瘤、边界内缩 2 mm)、模糊情形的处理方式。示例图比文字描述更能统一标注者的判断标准。

三、多专家一致性与一致性评估

医学影像标注存在主观性,单专家标注无法反映这种不确定性。常用做法是让 2~3 位专家独立标注同一批病例,再计算一致性指标。分割任务常用 Dice 系数和 Hausdorff 距离:Dice 衡量重叠度,Hausdorff 衡量边界最大偏差。一般要求专家间 Dice 不低于 0.85,若低于 0.75 说明规范存在歧义,需要回到规范修订。

对于分歧区域,可采用多数投票或 STAPLE 算法生成概率图,把专家分歧转化为模型可学习的不确定性信息。若项目允许,也可保留多专家标注作为软标签,训练时对分歧区域降低损失权重。

医学影像分割数据管理全链路 原始影像 DICOM / NIfTI 患者ID · 序列号 标注工具 CVAT / ITK-SNAP 3D Slicer 标注规范 类别定义 · 边界规则 示例图 · 排除标准 多专家一致性 Dice ≥ 0.85 STAPLE 概率图 数据清洗 空标注 · 重复病例 标签越界 · 层间跳变 强度异常 · 方向错误 数据集划分 患者级划分 7:1:2 分层抽样 · 防泄漏 train / val / test 版本管理 DVC / Git-LFS 数据哈希 · 变更日志 标注版本 ↔ 模型版本 可训练数据集 v1.0 影像 + 标签 + 划分清单 + 数据卡(Data Card) 含标注者ID、一致性指标、清洗记录、版本哈希 一致性不达标 → 修订规范 → 重新标注

四、数据清洗:把“脏数据”挡在训练之前

标注完成后不能直接训练,必须先做清洗。常见问题与处理方式如下:

  • 空标注或全背景:检查是否漏标,若确认为阴性病例,单独归入阴性集,不参与阳性分割训练。
  • 重复病例:同一患者多次检查可能被误当作独立样本,需按患者 ID 去重,避免训练集与验证集泄漏。
  • 标签越界:标注区域超出影像边界,通常是勾画时误操作,需裁剪或重新标注。
  • 层间跳变:相邻层标注面积突变超过阈值(如 50%),提示可能漏层或错层,需人工复核。
  • 强度异常:CT 值超出预期范围(如肝脏平扫约 40~70 HU),可能是窗宽窗位错误或序列选错。
  • 方向与仿射矩阵错误:NIfTI 的 qform/sform 不一致会导致左右翻转,必须统一到标准方向(如 RAS)。

清洗后应生成一份数据卡,记录每例的清洗状态、剔除原因、剩余样本量。这一步看似繁琐,但能避免“训练集里混入错误标签导致模型学到噪声”这类隐蔽问题。

五、数据集划分:患者级划分是底线

医学影像数据划分最容易被忽视的是患者级泄漏。同一患者的不同层面、不同期相若被分到训练集和验证集,模型会“记住”患者特征,验证指标虚高。正确做法是按患者 ID 划分,常用比例 7:1:2 或 8:1:1。若阳性样本少,应采用分层抽样,保证训练、验证、测试集中阳性比例接近。

划分后应固定随机种子并保存划分清单(CSV 或 JSON),记录每例所属集合。这样后续换模型、换超参时,划分不变,指标才可比。

六、版本管理:让数据与模型可追溯

数据版本管理要解决三个问题:当前训练用的是哪一版数据、这一版数据相比上一版改了什么、某个模型指标对应哪一版数据。推荐做法是用 DVC 管理大文件,Git 管理划分清单和配置文件,每次数据变更生成新版本号并记录变更日志。

dataset/
├── v1.0/
│   ├── images/          # NIfTI 影像
│   ├── labels/          # 分割标签
│   ├── splits.json      # 患者级划分清单
│   └── data_card.md     # 数据卡:来源、标注者、一致性、清洗记录
├── v1.1/
│   ├── ...              # 修订规范后重新标注的版本
└── dvc.yaml             # DVC 流水线定义

版本号建议采用“主版本.次版本”形式:主版本变更表示标注规范或类别定义改变,次版本变更表示新增病例或修正个别标注。训练脚本中应显式记录数据版本哈希,使模型权重与数据版本一一对应。

不要用“最终版”“最终版2”“真的最终版”这类命名。数据版本必须可机器解析、可追溯,否则半年后无法复现任何实验结果。

把上述六个环节串起来,就形成了一条从原始 DICOM 到可训练数据集的完整链路:工具选型决定标注效率,规范决定标注质量,一致性评估暴露分歧,数据清洗剔除噪声,患者级划分保证评估可信,版本管理保证实验可复现。这条链路做扎实,后续的模型训练与调优才有意义。