2. 医学影像数据模态与训练集构成
在医学影像训练集质量评估中,第一步不是看标注是否精细,而是先确认“数据到底是什么”。不同成像模态的物理机制决定了图像的灰度含义、空间分辨率、噪声结构和临床语义,而这些差异会直接影响模型能学到什么、评估指标是否合理,以及训练集能否被正确复用。一个看似“图像很多”的数据集,如果模态混杂、格式不统一、元数据缺失,往往在训练前就已经埋下了偏差。
五种常见模态的成像特点
CT(计算机断层扫描)基于X射线衰减,像素值以HU(Hounsfield Unit)为单位,具有近似定量的物理意义:水约为0 HU,空气约-1000 HU,骨皮质可达+1000 HU以上。CT图像空间分辨率高、采集快,常用于急诊、肿瘤筛查和骨结构评估。其训练集通常需要关注窗宽窗位(如肺窗、纵隔窗、骨窗)是否统一,因为同一套DICOM在不同窗设置下呈现的对比度差异极大。
MRI(磁共振成像)依赖氢质子在外加磁场中的弛豫特性,同一解剖部位可产生T1、T2、FLAIR、DWI等多种对比度。MRI没有类似HU的绝对定量单位,信号强度受扫描参数、线圈和场强影响,因此跨中心数据常存在明显的强度漂移。训练集中若混合不同场强(1.5T与3.0T)或不同序列,必须记录序列类型,否则模型可能把“序列差异”误学成“病变差异”。
X光(X射线摄影)是二维投影成像,组织前后重叠,缺乏深度信息。胸片、骨片是常见对象。其灰度动态范围大,常需窗宽窗位调整或直方图均衡。X光训练集的关键在于投照体位(正位/侧位)、设备类型和是否包含网格伪影。
超声利用高频声波反射成像,实时、无辐射,但图像受操作者手法影响大,存在斑点噪声、声影和扇形成像几何。超声图像通常不满足DICOM的规则网格,且不同探头(凸阵、线阵)视野差异显著。训练集需记录探头型号、检查部位和增益设置。
病理图像来自玻片扫描(WSI),分辨率可达0.25 μm/pixel,单张全切片可达数万×数万像素。病理图像颜色受染色批次影响,常见H&E染色。训练集通常以切片为单位组织,需记录染色方法、扫描仪型号和放大倍数。
DICOM与NIfTI:两种格式的分工
DICOM是临床采集与归档的事实标准,一个检查包含多个SOP Instance,每个实例携带丰富的标签:患者信息、设备参数、图像几何、窗设置等。DICOM的像素数据通常以原始存储值保存,需结合Rescale Slope/Intercept转换为HU或信号强度。它的优势是信息完整、可追溯,缺点是文件数量多、读取慢、标签私有化严重。
NIfTI则更贴近科研与算法训练,通常将三维或四维数据存为单个.nii或.nii.gz文件,头信息精简,包含体素间距、方向矩阵和数据类型。NIfTI不保留DICOM的采集参数和患者信息,因此从DICOM转NIfTI时,必须同步导出关键元数据表,否则训练集将失去可追溯性。实际工程中常见做法是:DICOM作为原始归档,NIfTI作为训练输入,两者通过唯一标识(如StudyInstanceUID + SeriesNumber)建立映射。
训练集构成的四个层次
一个可用的医学影像训练集,至少应包含图像、标注、元数据和患者信息四个层次。图像层决定模型输入;标注层决定监督信号;元数据层决定可复现性与偏差分析;患者信息层决定伦理合规与分层评估。四者缺一不可,且必须通过稳定ID关联。
以肺结节CT训练集为例:图像层为各患者胸部CT序列,层厚1.0 mm,重建核为肺算法;标注层为放射科医师勾画的结节分割掩膜及良恶性标签,并记录标注者年资与审核状态;元数据层包含设备型号、管电压、管电流、重建核、层厚、像素间距;患者信息层包含匿名ID、年龄、性别、吸烟史和病理随访结果。若缺少元数据中的重建核,模型可能把“锐利核”误学为“结节边缘特征”;若缺少患者信息中的随访结果,就无法进行分层评估。
格式转换与元数据保留的实操要点
从DICOM到NIfTI的转换,常用工具包括dcm2niix、SimpleITK和pydicom。以dcm2niix为例,典型命令如下:
dcm2niix -z y -f "%p_%s" -o /data/nifti /data/dicom/patient001
其中-z y表示输出压缩的.nii.gz,-f指定文件名格式,%p为协议名,%s为序列号。转换后应检查生成的JSON侧文件是否包含RepetitionTime、EchoTime、Manufacturer、MagneticFieldStrength等字段。对于CT,还需确认Rescale Slope/Intercept是否被正确应用,否则HU值会偏移。
若使用Python批量处理,可借助pydicom读取标签并写入CSV:
import pydicom, pandas as pd, glob
rows = []
for f in glob.glob('/data/dicom/**/*.dcm', recursive=True):
ds = pydicom.dcmread(f, stop_before_pixels=True)
rows.append({
'PatientID': ds.PatientID,
'Modality': ds.Modality,
'StudyUID': ds.StudyInstanceUID,
'SeriesNumber': ds.SeriesNumber,
'SliceThickness': getattr(ds, 'SliceThickness', None),
'PixelSpacing': getattr(ds, 'PixelSpacing', None),
'Manufacturer': getattr(ds, 'Manufacturer', None),
'RescaleSlope': getattr(ds, 'RescaleSlope', 1),
'RescaleIntercept': getattr(ds, 'RescaleIntercept', 0),
})
pd.DataFrame(rows).to_csv('/data/meta.csv', index=False)
这段代码只读取标签、不加载像素,适合大规模元数据盘点。生成的meta.csv可用于检查模态分布、层厚一致性、设备集中度,以及是否存在缺失关键字段的检查。
常见问题与判断依据
在训练集验收阶段,以下几类问题最值得优先排查:模态标签与像素特征不符(如把MRI标成CT);同一患者多次检查被误分为训练与测试(数据泄漏);标注掩膜与图像几何不匹配(如方向矩阵被忽略);元数据中关键字段缺失率超过阈值。判断依据可以量化为:模态字段缺失率应低于1%,层厚或像素间距缺失率应低于5%,同一患者跨集合重叠率应为0。若这些指标不达标,应先修复数据,再进入模型训练。
理解模态差异、格式分工与训练集四层构成,是后续质量评估的基准。只有先确认“数据是什么、来自哪里、缺了什么”,才能进一步讨论标注质量、分布偏差和模型泛化。