乳腺磁共振诊断集 MRI — 八十八例影像与分子读数配对

88 例 · 148 次检查 · BI-RADS 与 Oncotype

来源 TCIA 托管,Bloch B、Jain A、Jaffe C 提交;Philips 1.5 T 采集,单中心诊断队列发布时间: 2026-10-29最后更新: 2026-10-29 阅读 7
乳腺磁共振诊断集 MRI — 八十八例影像与分子读数配对

信息速览

数据集名称乳腺磁共振诊断集 MRI — 八十八例影像与分子读数配对
数据类型DICOM 多序列,BI-RADS 结构化特征,关键切片坐标,ER/PR/HER2 病理读数,Oncotype 复发评分,CC BY 3.0
规模88 名受试者(148 次检查、429 个序列、105,050 幅图像)
接入方式TCIA 托管,Bloch B、Jain A、Jaffe C 提交;Philips 1.5 T 采集,单中心诊断队列
AI 就绪度

乳腺 MRI 的报告里有一类信息,影像本身并不携带:病灶按 BI-RADS 词汇被描述成什么形态、边缘如何、强化曲线是哪一型;阅片者认为最能说明问题的那一层是第几层、肿块在那一层的哪个位置;病理回报的雌激素受体、孕激素受体、HER2 与 Oncotype 复发评分又是什么。这四类信息分别落在影像归档系统、报告系统、病理系统里,通常不会跟着 DICOM 一起流出。想研究「影像形态」与「分子表型」之间的关系,最大的障碍往往不是算法,而是找不到一批两者兼有、且能公开发用的病例。

BREAST-DIAGNOSIS 就是在这个缺口上留下来的少数样本之一。它自 2011 年起挂在 TCIA(The Cancer Imaging Archive)下,八十八名受试者、一百四十八次检查、四百二十九个序列,影像为 Philips 1.5 T 的乳腺 MRI,同一 DOI 下另附一张二十一 KB 的临床表,把 BI-RADS 特征、关键切片坐标、受体状态与 Oncotype 评分逐例排在了一起。它比大多数公开乳腺影像集都老,也因此带着那个年代的全部粗糙:没有掩膜,没有切分,没有评测脚本。

正因为它老,用它之前必须先纠正一个预期——它不是为机器学习准备的基准,而是一份影像与报告、病理并置的临床档案。把它当分割数据集用会处处碰壁,把它当放射基因组学的配对表用则相当顺手。一屏速览见下表。

项目 内容
官方名称 BREAST-DIAGNOSIS
库内 slug breast-diagnosis
托管方 TCIA(The Cancer Imaging Archive,美国国家癌症研究所资助)
提交者 Bloch B、Jain A、Jaffe C(官方页面署名)
DOI 10.7937/K9/TCIA.2015.SDNRQXXR
受试者 88 名
检查 148 次
序列 429 个
图像 十万五千零五十幅
模态 MR 为主,另含 CT、PT、MG(标本钼靶)
常见序列标注 T2、STIR、BLISS,另有其它序列混入
设备 Philips 1.5 T
队列构成 高危正常、DCIS、良性纤维腺瘤类病变、浸润性小叶癌
影像标注 无掩膜、无包围框;关键切片层号 + 近似 X-Y 中心
临床标注 BI-RADS 特征、ER/PR/HER2、Oncotype 评分、病理摘要
临床表体积 21.72 KB(更新于 2011-07-16)
影像体积 60.87 GB(Version 1 清单)
许可 CC BY 3.0(影像与临床表同许可)
版本 Version 2,2026-10-23;Version 1,2011-11-09
状态 官方标为 Complete,v2 注明部分序列修复后归位
库内近邻 qin-breast-dce-mri(1700)、duke-breast-mri(440)、acrin-contralateral-breast-mr(1701)

§1 它是什么:一张表把影像、报告与病理钉在同一行

§1.1 一句话定义

BREAST-DIAGNOSIS 是 TCIA 上的一份乳腺 MRI 诊断集合,价值重心不在影像的量,而在那张把 BI-RADS 影像特征、关键切片坐标与 ER/PR/HER2、Oncotype 评分逐例并置的临床表。

这句话里每一个从句都可以换成别的东西,唯独「逐例并置」换不掉。绝大多数乳腺影像公开集要么只有影像加良恶性标签(DDSM、CBIS-DDSM、EMBED),要么只有影像加疗效终点(Duke-Breast-MRI、QIN Breast DCE-MRI),要么只有影像加人口学(ACRIN 6667);把放射科报告里的结构化描述词与病理分子读数放在同一行、并由一个 DOI 统一发放的公开集,数得出来。

§1.2 为什么它不是一个普通的影像集

普通影像集的样本单位是「一幅图」或「一个体」,标注是「这块像素属于病灶」。这份集合的样本单位是「一名受试者的一次检查」,标注是「这次检查在报告里被怎么描述、病理上是什么」。

这个差别决定了三件事。第一,像素级任务无从下手:没有掩膜意味着 Dice、HD、FROC 这些指标全都算不了,能做的只有分类、回归与关联分析。第二,表格比影像更需要读懂:二十一 KB 的表里塞着几十个语义各异的字段,其中一半是自由文本转录,字段含义要靠报告学知识去还原。第三,影像的角色是「配菜」:它是特征表与分子读数之间的中介变量,而不是被预测的目标。

把它倒过来用——先看影像、再猜标签——也能跑通,但会浪费掉它唯一稀缺的东西。

§1.3 三十秒决策卡

你的处境 它能帮你什么
想研究 BI-RADS 描述词与分子分型的关系 一张表里同时有形态、边缘、强化动力学与 ER/PR/HER2、Oncotype
手上有一个乳腺 MRI 模型,想找外部验证集 可以,但只能验分类或表征,不能验分割
要做影像-基因组关联,缺配对样本 八十八例的配对虽小,但字段齐全,适合做假设生成
想教学生「报告里的结构化描述怎么变成变量」 临床表本身就是一份现成教案
需要一个可商用、许可干净的乳腺 MRI 训练集 CC BY 3.0 允许商用,但样本量与标注粒度都撑不起训练
想复现某篇用 TCIA 乳腺数据做的论文 先确认那篇用的是哪一版、哪些序列,v2 的序列集合与 v1 不完全相同

表里左列写的是处境,不是特性。同一份数据在不同处境下的用处差别极大,这张表想说明的正是这一点。

§1.4 不适合谁

如果你的需求是「训练一个病灶分割模型」,它给不了你任何像素级真值——没有掩膜,没有框,只有一个层号和一个近似中心点。要分割,去用 Duke-Breast-MRI 的肿瘤框,或者干脆换模态,用 TDSC-ABUS 的体素掩膜。

如果你的需求是「估计乳腺 MRI 在人群中的阳性率」,它也给不了——队列里没有筛查阴性者,恶性与高危病变的占比被人为抬高,任何比例都不能外推到自然人群。

如果你的需求是「大体量预训练」,八十八例、六十 GB 出头的规模只够做微调与验证。真要预训练,得去 EMBED 或 BCS-DBT 那种万例级、TB 级的集合。

最后,如果需求是「拿到一份字段字典直接建库」,也会失望:官方没有发布字段字典,临床表的列名与取值域只能自己从表里反推,而表里混着自由文本与缩写。

§1.5 它在乳腺影像数据谱系里的位置

乳腺影像公开数据大致排成四条线:钼靶与断层摄影(DDSM、CBIS-DDSM、EMBED、BCS-DBT、VinDr-Mammo)、超声(TDSC-ABUS、BUSI 一类)、MRI(QIN、Duke、ACRIN 6667、EMORY 的 MRI 分支),以及病理切片(CAMELYON、BreastPathQ)。BREAST-DIAGNOSIS 站在 MRI 这条线上,但它的定位不是「又一个 MRI 集」,而是「MRI 与分子数据之间的一座桥」。

在 MRI 这条线内部,它和另外三家的分工很清楚:QIN 关心同一患者在两个时间点的测量重复性,Duke 关心新辅助化疗后的病理完全缓解,ACRIN 6667 关心对侧乳腺的筛查价值,而它关心「这一次诊断性检查在报告里长什么样、病理上是什么」。四者互相不可替代。

§1.6 一句话记住它

八十八例的乳腺 MRI,影像只是底片,真正的正片是那张二十一 KB 的配对表。

§2 数据构成与规格

§2.1 四层计数:为什么不能说「八十八例、十万张图」

TCIA 对每个集合都按四个层级计数,这不是修辞,而是 DICOM 的物理结构:受试者(subject)下有检查(study),检查下有序列(series),序列下有实例(instance,在这里就是一幅图像)。四个数字是四个不同的东西,混着说会直接导致错误的样本量假设。

层级 数量 含义 常见误读
受试者 88 去重后的人 当作「病例数」使用时,忽略了同人多检查
检查 148 一次就诊的影像 当作独立样本,实际同人检查高度相关
序列 429 一次检查里的一段同参数采集 当作「模态数」,把多期动态算成多个模态
图像 105,050 二维切片总数 当作独立样本,同一序列内相邻层相关系数接近一

把四个数字相除,能得到三个有用但官方没写的比值,它们可以用来判断这批数据「厚不厚」:

#-- 由官方四个计数直接推得的三个比值(非官方公布,仅为口径校验)
148 / 88   ≈ 1.68   检查/受试者   → 说明确实存在同人多时间点
429 / 148  ≈ 2.90   序列/检查     → 接近「每例至少三个序列」的官方说法
105050 / 429 ≈ 245  图像/序列     → 二维多层采集,单序列两三百层是常态

第一个比值最有信息量。一比六八意味着大约三成八的受试者有不止一次检查——这正是官方那句「同一患者可能有多个时间点检查」在数字上的投影。做交叉验证时,如果不按受试者分组,同一个人不同时间点的影像会同时出现在训练与验证两侧,指标会虚高,而且虚高得很难察觉,因为两次检查的解剖结构几乎一样。

第二个比值接近三,与官方「每例有三个或更多不同脉冲序列」的描述吻合,但它小于三这件事本身有信息量:说明有相当一部分检查的序列数不到三个,可能是采集中断、重做,或者部分序列在历次迁移中没有归位。

§2.2 从受试者到一幅图的层级长什么样

DICOM 的层级在检索端直接暴露为筛选维度,这是它比打包成 NIfTI 的集合更好用的地方,也是更容易出错的地方。

#-- 集合的层级骨架(示意;实际层级由 DICOM 标签决定,非文件名)
Collection: BREAST-DIAGNOSIS
└── PatientID                     88 个
    └── StudyInstanceUID          148 个
        └── SeriesInstanceUID     429 个
            └── SOPInstanceUID    十万五千零五十个

在这套骨架里,唯一可以作为跨文件主键的是病例标识与三个 UID。文件名通常被重命名为一串数字,不含语义,任何靠文件名猜序列类型的做法都会失败。想区分 T2、STIR 与动态增强,只能读 SeriesDescription、ProtocolName 与回波时间、重复时间这些标签,而 SeriesDescription 是自由文本,写法在不同年份、不同技师手里并不统一。

§2.3 模态不是纯 MRI

官方版本表的模态列写的是 MR、CT、PT、MG 四项,而正文描述只提到 MRI 与肿瘤标本的数字钼靶。这两处并不矛盾,但合起来说明一件事:这批检查不是「清一色的乳腺 MRI」。

MG 的来路是明确的——官方写了「digital mammogram of tumor specimen」,即把切除后的肿瘤标本拿去做数字钼靶,用来对照标本内病灶的范围与钙化,这在当年是乳腺 MRI 与病理对照研究的常规做法。CT 与 PT 的来路,官方没有逐条解释。可能是个别受试者在诊断路径上顺带做了胸腹部 CT 或 PET,也可能是早期数据迁移时混入的邻近检查。

无论原因是哪一种,对使用者的实际影响是一样的:按模态过滤是必须的一步。

#-- 只取 MR 序列做形态学分析;若研究需要标本钼靶对照,再单独取 MG
#-- modality 过滤在检索端完成,避免把几十 GB 的 CT/PT 拉回本地再筛
from tcia_utils import nbia

df = nbia.getSeries(collection="Breast-Diagnosis", modality="MR")
print(len(df), df["Modality"].value_counts())

tcia_utils 是 TCIA 官方维护的 Python 包,getSeries 的过滤在检索端生效,返回的是序列级清单而不是影像本体。这一步如果省掉,下载量与后续清洗成本都会翻倍。

§2.4 T2、STIR 与 BLISS:三个序列族各管什么

官方对序列的描述很短:常见的是 T2、STIR、BLISS,但也可能有别的脉冲序列。这三个名字对应的临床用途完全不同,混在一起做特征提取会得到没有物理意义的数值。

序列标注 成像权重 在这份数据里的用途 使用注意
T2 T2 加权,液体高信号 看囊肿、水肿、导管扩张,判断病灶内是否有坏死或黏液 与增强序列不在同一几何,配准前不能直接叠
STIR 短 TI 反转恢复,压脂 抑制脂肪信号,突出腺体与病灶 压脂均匀性随体位变化,同一患者两次检查的灰度不可直接比
BLISS 动态增强序列族 注射钆对比剂后的多期采集,看强化动力学 期相数、时间间隔、注射方案因检查而异,必须逐例读标签

BLISS 是这个集合真正的分析对象。官方专门用一整段讲它的对比动力学怎么读,那段话是本篇最重要的一手材料,因为它同时暴露了数据的一个系统性缺陷(见 §4.5)。

官方的说法可以拆成五个可执行的点:对比剂为拜耳的马格维显(Magnevist);注射量按体重算,规则是「磅数乘以百分之十」得到毫升数;注射持续六到七秒,速率每秒三毫升;第一个动态序列在注射开始后一分钟启动;脉冲参数全部从 DICOM 标签读。

把这五点连起来,就能复原一次动态增强的时间轴:注射开始→六到七秒推完→再等约一分钟→第一期采集。任何想从信号强度曲线里算洗入率、洗出率的工作,都必须用这条时间轴,而不能假设各例的期相间隔一致。

§2.5 一条记录逐行解剖

临床表只有二十一 KB,小到可以用一张截图看完,但它的字段结构决定了这份数据能做什么。官方没有发布字段字典,下面按语义把页面所述的字段分成四组,这是使用前必须自己完成的第一步还原工作。

组 字段(语义) 来源 取值形态 可计算性
身份 病例标识 影像归档系统 字符串 高,可作主键
影像特征 BI-RADS 描述词若干 放射科报告转录 多为文本或缩写 中,需人工编码
空间定位 关键切片层号 阅片者标记 整数 高
空间定位 肿块近似 X-Y 中心 阅片者标记 两个坐标值 中,坐标系需确认
病理 ER、PR、HER2 病理报告摘录 文本或半定量 中高,需统一阴阳性判据
病理 Oncotype 复发评分 分子检测报告 整数分值 高,但缺失严重
病理 病理报告摘要 病理报告 自由文本 低,需自然语言处理

这张表的第五、六行是全篇的技术核心,第七行是它的软肋。自由文本摘要意味着任何结构化分析都要先做一次信息抽取,而抽取的质量没法用官方标准校验——官方没有给标注指南,也没有给一致性统计。

§2.6 与同类集合的规格差异

把五份乳腺 MRI 相关集合放在一起,差异一目了然。这张表也解释了为什么库内需要单独一篇来讲它。

集合 受试者 主要模态 标注形态 终点 许可
BREAST-DIAGNOSIS 88 MRI + 标本钼靶 报告特征 + 关键切片 + 分子 诊断与分子表型 CC BY 3.0
QIN Breast DCE-MRI 10 DCE-MRI 药代动力学参数 测量重复性 CC BY 3.0
Duke-Breast-MRI 922 DCE-MRI 三维肿瘤框 + 影像组学特征 新辅助疗效 CC BY-NC 4.0
ACRIN 6667 984 增强 MRI 报告与临床表 对侧乳腺癌 CC BY 4.0
EMBED 十一万余 钼靶 病灶框 + BI-RADS 描述词 筛查 分档开放

五份里只有两份带 BI-RADS 结构化描述词(本品与 EMBED),只有一份带 Oncotype 评分(本品),只有一份带三维框(Duke),只有一份是筛查人群(EMBED)。规格上没有谁能替代谁。

§2.7 两个体积:六十 GB 与二十一 KB

页面给了两个体积数字,相差三个数量级,各自含义完全不同。

六十点八七 GB 是 Version 1 的 .tcia 清单所描述的体积,指的是全部 DICOM 原文件。用这个数除以图像总数,得到平均每幅约零点五八 MB——对一幅二〇一一年代的乳腺 MRI 切片来说,这个量级是合理的,说明图像没有经过激进的压缩。

二十一 KB 是临床表的大小。这个数字本身就是一条信息:八十八例、几十个字段的表小到二十一 KB,意味着里面几乎全是短字符串与整数,没有长文本段落,也没有嵌入图像。所谓「病理报告摘要」,在这张表里大概率是几行压缩过的短语,而不是完整报告。

至于 Version 2 的体积,页面没有填。这不是排版遗漏那么简单——它意味着官方在 2026 年这次更新里,还没有完成对全量序列的复核,体积要等序列归位后才能定。

§3 影像层:一次检查里到底有什么

§3.1 为什么把影像层单独拿出来

因为这一层决定「哪些任务在这份数据上根本做不了」。判断一个数据集能不能用,最省时的办法不是看它有什么,而是看它缺什么,而影像层的缺口恰好最大:没有掩膜、没有框、没有配准、没有统一的重建参数。

影像层能提供的只有三样东西:一组可读的 DICOM、一套能区分序列的标签、以及一个把病灶指到某一层的坐标。三样都够用,但都只够「找到并裁剪」,不够「勾画并度量」。

§3.2 同一患者多时间点:既是资产也是陷阱

官方写了一句很轻的话:同一患者可能有多个时间点的检查。这句话在临床上是常识——新辅助治疗前后、术前与术后、随访与复发,都会重复做 MRI。但它对建模的影响被严重低估。

第一,样本量不能按检查数算。一百四十八次检查背后是八十八个人,有效独立样本量介于两者之间,取决于有多少人做了多次。做统计检验时用一百四十八作分母,会低估标准误。

第二,切分必须按人分组。若随机按检查切分,同一个人的两次检查会分到两侧,模型学到的是「这个人乳房的形状」,而不是「病灶的性质」。这类泄漏在乳腺 MRI 上尤其难发现,因为同人双侧乳房的脂肪与腺体分布高度相似,指标会漂亮得不真实。

第三,多时间点本身是有信息的。如果同一个人的两次检查分别对应治疗前后,那么两次之间的强化幅度变化就是一个天然的纵向信号。可惜官方没有标注每次检查处在治疗路径的哪个节点,这个信号只能靠检查日期与病历去猜,而病历不在数据集里。

§3.3 序列标签不是受控词表

SeriesDescription 是自由文本。放射科按习惯把动态增强序列写成「BLISS」,把压脂 T2 写成「T2 SPAIR」,下一个技师可能写成「T2_SPAIR_AX」,再下一次可能只剩「T2」。官方在描述里也承认了这一点:常见的标注是 T2、STIR、BLISS,但也可能包含其它脉冲序列。

这意味着三件事必须自己做:把标签归一化成「T2 类 / 压脂类 / 动态增强类 / 其它」四组;对归一化失败的序列,用回波时间与重复时间去反推;把无法判定的序列显式标记为未知,而不是硬塞进某一类。

#-- 序列标签归一化:先按关键字粗分,再把剩下的交给 TR/TE 判据
import re

def classify(desc, tr, te):
    s = (desc or "").upper()
    if re.search(r"BLISS|DCE|DYNAMIC|POST|\+C", s):
        return "dynamic"
    if re.search(r"STIR|SPAIR|FS|FAT", s):
        return "fat_suppressed"
    if re.search(r"\bT2\b|T2W", s):
        return "t2"
    # 标签失效时的兜底:增强后序列的 TR 通常短于 T2
    if tr and te and tr < 10 and te < 5:
        return "dynamic"
    return "unknown"

兜底判据不可靠,但它比「猜一个」诚实。真实的分布里,「unknown」占比多高,直接反映这批元数据的可维护性。

§3.4 二维采集的几何:层厚、层间距与期相

这套影像是二维多层采集,不是三维容积采集。区别在于:三维采集的层厚与层间距一致且很薄,二维多层的层厚通常在三到五毫米,层间距可能等于层厚(连续)也可能更大(有间隙)。切片方向的分辨率因此远低于层面内。

对分析的影响集中在两处。第一,任何按体素计的体积都会被层厚放大或缩小,算病灶体积前必须乘层厚。第二,动态增强的期相在同一位置上的层可能不是同一时刻采集的——多层序列是逐层采集的,一期扫完整个乳腺需要几十秒,期间对比剂仍在洗入。这个误差在快速强化病灶上不可忽略,而它无法从数据集内部校正,因为官方没有给每层的采集时间偏移(严格的 DICOM 里 AcquisitionTime 是逐层记录的,可以用,但需要逐例检查是否完整)。

§3.5 标本钼靶:一条容易被忽略的支线

MG 序列是切除标本的数字钼靶。它的临床用途是把影像上看到的病灶范围与标本上的实际范围对齐,判断 MRI 是否高估或低估了病灶。对研究来说,它是一条独立的对照支线:如果你关心「影像-病理的空间一致性」,标本钼靶比活体 MRI 更接近病理切片。

但它也有陷阱。标本在离体后会收缩,钼靶的压迫会进一步改变形状,因此标本钼靶的图像坐标与活体 MRI 的坐标之间不存在简单的线性映射。把两者叠在一起做配准,需要至少三个解剖标志点,而这份数据没有提供标志点。

§3.6 没有掩膜意味着什么

没有掩膜,就不存在「正确边界」这个概念。可以做的是:用关键切片坐标裁一个方形区域,把区域内的病灶当成一个整体,做以区域为单位的分类或回归。这种做法在放射基因组学里很常见,代价是区域里混入了大量腺体与脂肪,特征的信噪比取决于裁剪框的大小,而裁剪框的大小没有官方标准。

这也是为什么本集合的多数下游工作都停留在「整幅图像 + 表格变量」的层面:不是研究者不想做精细分割,而是没有真值可对齐。

§4 特征层:BI-RADS 表与分子读数

§4.1 三层信息,三种可信度

这张表里的信息按可信度可以排成三层,层次之间不是并列关系,而是「转录 → 标记 → 检验」的递进。

层 内容 产生者 可信度 误差来源
转录层 BI-RADS 描述词 放射科医师写报告,录入者转录 中 报告用词不统一,转录可能简化
标记层 关键切片层号与 X-Y 中心 阅片者在工作站上标 中高 主观选层,坐标精度约到像素
检验层 ER/PR/HER2、Oncotype 病理与分子实验室 高 检测方法差异,临界值判定

三层的可信度不同,但缺失机制更值得推敲:越靠下的层越容易缺,而且缺得越不随机。

§4.2 BI-RADS MRI 词汇:四个轴

BI-RADS 的 MRI 部分把病灶描述拆成几个互不重叠的轴,这套词汇是放射科报告能够被计算化的基础。理解这四个轴,才能判断表里的字段能不能直接当特征用。

轴 取值举例 为什么重要 计算化难点
形态 肿块、非肿块强化、焦点、不对称 决定后续所有描述词是否适用 非肿块强化没有明确边界,框选困难
边缘 清晰、不规则、毛刺 与恶性概率强相关 毛刺在二维层上可能看不全
内部强化 均匀、不均匀、环形、分隔 反映坏死与血供 需要多期对比,单期无法判断
动力学曲线 一型持续、二型平台、三型洗出 与恶性概率强相关,是 BI-RADS 分级的关键输入 依赖期相时间轴,而各例时间轴不一致

第五个轴是背景实质强化(BPE),它描述正常腺体的强化程度,常被当作混杂因素。官方没有说表里是否包含 BPE,这需要在拿到表后自己确认。

四个轴里,动力学曲线的坑最深。它需要「注射前基线 + 至少两期增强」才能算,而各例的期数与间隔不同。如果某个检查只采了两期,曲线类型就只能二分,不能三型。字段里若把三型硬编码成三个值,实际上是给不同信息量的病例贴了同一个标签。

§4.3 关键切片坐标:是指针,不是标注

官方对这项的描述是:记录了关键图像的层号,以及在发现肿块时该层上肿块的近似 X-Y 中心位置。这句话里每个词都在限定它的能力。

「层号」意味着它只在一个二维平面上有定义,不是一个三维位置。「近似」意味着它不承诺落在病灶的几何中心。「中心位置」意味着它不描述范围。合起来,这是一个「请你到这里看」的指针,而不是「这里是病灶」的声明。

用它裁剪 ROI 时,有三件事必须自己确认:层号是从零还是从一开始计(不同读取库的约定不同);X-Y 是图像的列行坐标还是患者坐标;关键切片取自哪一个序列(T2 与增强序列的层数往往不同,层号不可通用)。

#-- 用关键切片坐标裁 ROI:先确认层号基准,再确认坐标系
import pydicom

ds = pydicom.dcmread("IM_0001")          # 一幅切片
rows, cols = int(ds.Rows), int(ds.Columns)
slice_idx, cx, cy = 42, 128, 160          # 表里读到的三个值

#-- 层号基准校验:若层号等于总层数,说明是从 1 开始计
one_based = slice_idx >= rows            # 粗略判据,仅用于提示
box = (max(cx - 64, 0), max(cy - 64, 0), min(cx + 64, cols), min(cy + 64, rows))
print(ds.SeriesInstanceUID, one_based, box)

这段代码不做实际裁剪,只做两件校验:层号基准与边界截断。它值得单独写出来,是因为裁到图像外面这种错误不会报错,只会让样本变黑。

§4.4 ER/PR/HER2 与 Oncotype:分子层的适用边界

受体状态是乳腺癌分型的骨架。ER、PR 是核受体,用免疫组化的阳性细胞百分比与强度判定;HER2 先用免疫组化筛,二价结果再用原位杂交确认。三者的组合决定了分子亚型(管腔 A、管腔 B、HER2 富集、三阴),也决定了内分泌治疗与靶向治疗的选择。

Oncotype DX 是另一类东西。它不是受体,而是一个基于二十一个基因表达量的复发风险评分,输出一个数值,用于判断雌激素受体阳性、HER2 阴性的早期浸润性乳腺癌患者是否需要辅助化疗。这句话里的每个限定词都是使用前提:受体阴性者不适用,HER2 阳性者不适用,晚期患者不适用,导管原位癌不适用。

于是就有了一个必然结果:这份集合里,高危正常与 DCIS 病例不会有 Oncotype 评分,三阴病例也不会有。缺失不是随机的,而是由适应症决定的。

这一点在建模时会被反复踩。用「有评分的病例」训练一个回归模型,模型学到的是「什么样的肿瘤会被送去做 Oncotype 检测」,而不是「什么样的影像对应高分」。前者是临床决策的镜像,后者才是生物学信号。

§4.5 案例:体重标签写 68,剂量却按 150 磅算

官方页面用一整段解释对比剂的给药规则,这段文字值得逐句拆开看,因为它是整份数据「元数据可信度」问题的最小样本。

官方陈述 具体内容 含义
对比剂 马格维显(Magnevist,拜耳) 一种细胞外钆螯合物,当年乳腺 MRI 的常规选择
剂量规则 按体重算,毫升数等于磅数的百分之十 这是一个经验法则,不是按每公斤体重的标准剂量
举例 一百五十磅的患者给十五毫升 换算成千克约六十八公斤,即每公斤约零点二二毫升
关键句 体重以磅计,而 DICOM 体重标签以千克记录 两个单位被混用,且没有换算
后果 该患者的 DICOM 体重标签会显示六十八 标签本身没错,错的是它与剂量规则的单位错配

拆到这里,问题就清楚了:DICOM 里的体重标签是对的(六十八公斤),剂量也是按规则算的(十五毫升),但规则的单位是磅。如果后人拿 DICOM 体重标签去反推「每公斤给了多少对比剂」,会算出每公斤零点二二毫升;而按磅理解,实际是按每公斤零点二二毫升给的——两者数值上竟然一致,因为百分之十磅与零点二二毫升每公斤本来就是同一个规则。

真正的风险不在这一例,而在推广。一旦有人用 DICOM 体重标签乘以某个「每公斤标准剂量」(比如零点一毫摩尔每公斤)去重算剂量,得到的结果会与实际给药差约二点二倍。对比剂剂量直接决定强化幅度,强化幅度又是所有动力学特征的分子。剂量差一倍,动力学曲线的斜率就差一倍,而曲线类型(持续、平台、洗出)可能因此改变。

这就是为什么本集合的动力学特征只能做「个体内相对比较」,不能做「个体间绝对比较」。官方把规则写出来是诚实的,但诚实不能消除误差,只能让人知道误差在哪。

§4.6 缺失不是随机的

把三层信息的缺失情况画成一张表,可以看到缺失与病例类型的强关联。下表是按官方描述推断的缺失结构,官方未给逐字段的缺失统计。

字段组 高危正常 DCIS 良性病变 浸润性小叶癌
BI-RADS 描述词 有,但多为阴性描述 有 有 有
关键切片坐标 无(无肿块可标) 可能有 有 有
ER/PR/HER2 无 常有 常有 有
Oncotype 评分 无 无(不适用) 无 部分有

四个字段组的缺失模式完全不同:关键切片坐标的缺失与「有没有肿块」相关,Oncotype 的缺失与「适不适用」相关。前者可以按「无病灶」处理,后者必须按「不适用」处理。把两者都编码成空值,再统一做插补,会把两种完全不同的语义混成一锅。

§4.7 把表读成变量

拿到 XLSX 后,第一件事不是建模,而是把每个字段的取值域打出来。

#-- 读临床表并打印每个字段的非空率与取值样例,用于建立字段字典
import pandas as pd

df = pd.read_excel("TCIA-Breast-clinical-data-public-7_16_11.xlsx", sheet_name=0)
print(df.shape)
for col in df.columns:
    s = df[col]
    nonnull = s.notna().mean()
    sample = s.dropna().astype(str).unique()[:5]
    print(f"{col!r:36} 非空 {nonnull:5.1%}  样例 {list(sample)}")

输出会立刻暴露三件事:哪些列几乎全空(可以直接丢弃)、哪些列是自由文本(需要信息抽取)、哪些列是分类变量但写法不统一(需要归一化)。这三件事做完,字段字典才算建立,而官方没有提供字典,这一步无法跳过。

§5 获取层:从 DOI 到可计算的张量

§5.1 三条路径,各有各的代价

路径 载体 优点 代价
TCIA Data Retriever .tcia 清单 + 桌面客户端 官方推荐,支持断点续传 需要装客户端,清单对应 Version 1
NBIA 检索接口 REST API 可按模态、序列过滤,适合脚本化 需要处理分页与限流
IDC 镜像 云端对象存储 免下载直接查询,适合探索 需要云环境与对应的查询工具

三条路径拿到的内容不完全相同:清单文件是 2015 年生成的,描述的是 Version 1 的全量;NBIA 接口给的是当前在线状态,可能与清单有出入;IDC 镜像有自己的同步节奏,通常滞后于 TCIA 主站。三者对不上时,以 TCIA 主站为准。

§5.2 CC BY 3.0 给了什么,收回了什么

许可标的是 CC BY 3.0,影像与临床表同一许可。这意味着可以复制、分发、改编、商用,只要署名。署名不是可选项,官方在引用区写明了必须使用的引用格式,包含 DOI。

但 CC BY 不是全部。TCIA 另有一份数据使用政策,其中最基本的一条是不得尝试再识别受试者。这条限制与 CC BY 的「无额外限制」在字面上有张力,实践中的处理方式是:把 TCIA 政策理解为使用条件,而不是许可条款的附加限制。

还有一处容易忽略:临床表里的病理与分子信息属于敏感健康数据,即便去标识,也不适合公开发布衍生表。做研究时把病例号与分子结果的对照表贴到论文附录里,是一个常见的越界动作。

§5.3 下载与校验

#-- 下载清单对应的全部文件;清单里带校验值,先核对再解压
#-- 需要先安装 TCIA Data Retriever(Java 客户端),此处为命令行调用形式
java -jar Downloader.jar --manifest TCIA_BREAST-DIAGNOSIS_06-22-2015.tcia \
     --directory ./raw --validate

下载完成后先做一次完整性核对:按 SeriesInstanceUID 分组计数,与四百二十九这个数对照。若少了,先确认是不是撞上了 Version 2 的序列修复窗口,再决定是否需要从 IDC 补齐。

#-- 按序列计数,与官方 429 对照;同时统计每个序列的实例数
import os
from collections import Counter
import pydicom

cnt = Counter()
for root, _, files in os.walk("./raw"):
    for f in files:
        if not f.lower().endswith(".dcm"):
            continue
        ds = pydicom.dcmread(os.path.join(root, f), stop_before_pixels=True)
        cnt[ds.SeriesInstanceUID] += 1
print("序列数", len(cnt), "实例数", sum(cnt.values()))
print("实例数最多/最少的序列", max(cnt.values()), min(cnt.values()))

这段代码的输出有两个用途:确认序列数是否为四百二十九,以及发现「只有一两幅图的序列」——后者通常是定位像或失败采集,应当在预处理阶段剔除。

§5.4 从 DICOM 到可计算的体

原始 DICOM 是逐层的二维图像,转成三维数组需要处理几何:层间距可能不等于层厚,层的位置可能不严格等距,方向矩阵可能缺失。

#-- 单个序列转 NIfTI:保留物理间距,避免后续按体素等距处理
import SimpleITK as sitk

reader = sitk.ImageSeriesReader()
files = reader.GetGDCMSeriesFileNames("./raw/STUDY_UID", "SERIES_UID")
reader.SetFileNames(files)
img = reader.Execute()
print(img.GetSize(), img.GetSpacing())   # 第三维间距通常远大于前两维
sitk.WriteImage(img, "series.nii.gz")

GetGDCMSeriesFileNames 会按 ImagePositionPatient 排序,这比按文件名排序可靠。若某个序列的排序结果异常(例如层数对但顺序乱),说明层位置信息有问题,这种序列应当单独隔离,不要混入训练。

§5.5 按病例号把表并进来

影像与临床表之间唯一的连接键是病例标识。这个键在 DICOM 里是 PatientID,在表里是某一列字符串。两边的写法可能不一致:大小写、前导零、空格、甚至前缀(有的集合会在 ID 前加机构缩写)。

#-- 关联前先做一次规范化,再统计匹配率;匹配率低于预期说明键的写法不一致
import pandas as pd

def norm(x):
    return str(x).strip().upper().lstrip("0")

tbl = pd.read_excel("TCIA-Breast-clinical-data-public-7_16_11.xlsx")
tbl["key"] = tbl.iloc[:, 0].map(norm)
patients = {"0001", "0002", "0003"}          # 由 DICOM 侧扫出的 PatientID 集合
print("表内行数", len(tbl), "匹配", tbl["key"].isin(patients).sum())

匹配率是最诚实的质量指标。若只有七成匹配,说明有三成病例的影像或临床信息至少缺一边,后续任何「影像-分子」分析的样本量都要按匹配后的交集算。

§5.6 最小可用管线

把上面几步串起来,一条能跑通的最小管线是五步:按模态过滤、按序列分类、按病例分组切分、按关键切片裁 ROI、按病例号并入表格。

#-- 最小管线骨架:分组切分是关键一步,按受试者而非按检查
import pandas as pd
from sklearn.model_selection import GroupKFold

cases = pd.read_csv("cases.csv")             # 每行一次检查,含 subject_id
gkf = GroupKFold(n_splits=5)
for tr, va in gkf.split(cases, groups=cases["subject_id"]):
    print("训练", len(tr), "验证", len(va),
          "两侧受试者交集", len(set(cases.subject_id.iloc[tr]) & set(cases.subject_id.iloc[va])))

最后那个交集必须为零。若不是零,说明切分函数没有按组工作——这在 GroupKFold 里通常是 groups 参数传错,在自写切分里则是常见的手误。

§5.7 存储与算力预算

原始 DICOM 约六十 GB。转成 NIfTI 后体积取决于是否保留全部期相:只留一期、按三十二位浮点存,四百二十九个序列、每序列约二百四十五层,粗算约十四 GB;若矩阵是五百一十二见方,则翻四倍到五十余 GB。这是量级估算,实际取决于各序列的矩阵大小与期相数。

预处理阶段的峰值内存出现在「一次载入整个四维序列」的时候。乳腺 MRI 单个序列通常几百 MB,普通工作站可以承受;但若把多个期相同时载入做配准,内存需求会到数 GB。稳妥的做法是逐期处理、逐期落盘,最后再合并。

§6 与库内乳腺各集的对应关系

§6.1 关系图谱

库内乳腺方向已有七份,分属钼靶、断层摄影、超声、MRI 四条线。本集合占的是「MRI × 诊断 × 分子配对」这一格,与它们没有重叠。

库内数据集 rid 模态与任务 与本集合的分工
qin-breast-dce-mri 1700 DCE-MRI,十例两访视,测重复性 关心同一患者两次测量的稳定性,不含分子读数
duke-breast-mri 440 DCE-MRI,九百余例,新辅助疗效 有三维肿瘤框与影像组学特征,终点是病理完全缓解
acrin-contralateral-breast-mr 1701 增强 MRI,近千例,对侧乳腺 关心对侧乳腺癌的发生,属筛查与随访视角
emory-embed 1726 钼靶,万例级 钼靶筛查与人口学分层的规模担当,无 MRI
breast-cancer-screening-dbt 1739 断层摄影,五千例 三维钼靶筛查,带病灶框
ddsm 1444 胶片钼靶,约两千六百例 老归档库,像素级肿块与钙化轮廓
tdsc-abus-2023 1763 三维超声,二百体 超声线的分割基准,体素掩膜

一句话概括分工:要框去 Duke,要重复性去 QIN,要对侧风险去 ACRIN,要规模去 EMBED,要分割去 TDSC-ABUS,要「报告特征 + 分子读数」只在这里。

§6.2 检索路径

从钼靶出发的检索路径通常是 ddsm → cbis-ddsm,再进入 emory-embed 或 breast-cancer-screening-dbt;从超声出发是 tdsc-abus-2023;从 MRI 出发则先遇到 qin-breast-dce-mri(小样本方法学)与 duke-breast-mri(大样本疗效),本集合排在两者之后,作为「分子层」的补充。

§6.3 三条互链判断规则

第一,按终点连,不按模态连。同样做乳腺 MRI,终点是疗效的与终点是分子的不是一回事,混连会让使用者以为可以互换。

第二,按标注粒度连。有像素级标注的与只有指针的不能并列,否则使用者会误判可做的任务。

第三,许可不同的要显式提示。Duke 是 CC BY-NC,禁商用;本集合是 CC BY,允许商用。两者混合用于商业项目会在许可上出问题。

§7 质量评估与局限性

§7.0 前置认知校正:它不该用「数据集成熟度」这把尺子量

用当代 AI-ready 数据集的标准去评它,会得到一份几乎全是红叉的清单:没有切分、没有评测脚本、没有字段字典、没有版本化元数据、没有基线模型。但这份清单评价的是「它作为基准的完成度」,而它从来不是基准。

它是一份 2011 年建立的临床档案,当年的目标是让放射基因组学研究有一个可复用的影像与分子配对样本,而不是让算法在榜上比分数。用错尺子会导致两种典型误判:一是认为它「质量差」,从而忽略它在分子配对上的稀缺性;二是认为它「既然是 TCIA 的就能直接训练」,从而在没有任何标注的情况下期待分割结果。

正确的评价框架是三条:作为影像-分子配对源,它的字段完整度如何;作为影像数据,它的可计算性如何;作为长期存档,它的可维护性如何。下面的评分按这三条展开。

§7.1 DAIMS 评分

按八个维度打分,每项满分五分,依据全部来自官方公开材料。

维度 得分 依据
描述层身份与边界 4 有 DOI、有提交者、有队列构成、有许可;但未写机构、未给字段字典
描述层文档完备度 2 序列与给药规则写得很细,字段含义、缺失率、坐标约定全无
结构层标识体系 4 病例号作主键可跨影像与表格连接;未声明主键的规范化形式
结构层层级一致性 3 四层计数自洽,但 v2 未填体积、部分序列缺席,层级暂时不闭合
结构层模态配对 3 MRI 与标本钼靶并存,无配准、无标志点,跨模态对齐需自行解决
访问层开放程度 5 无需申请、无 embargo,影像走 TCIA,表格直链可下
访问层可复现性 2 无切分、无脚本、无基线,任何分数都不可跨研究复现
访问层许可清晰度 5 CC BY 3.0 明示,署名格式给定,商用边界清楚

八项平均三点五。扣分集中在文档与可复现两项,这不是疏忽,而是年代差异:2011 年的数据发布没有「字段字典」这个概念,报告特征靠论文正文描述,复现靠作者邮件。加分集中在访问与许可,这两项恰好是 TCIA 作为国家级档案机构的制度能力,与提交者个人无关。

§7.2 已知局限逐条

没有像素级真值。 关键切片坐标是点,不是区域。任何声称在本集合上做分割的工作,其真值要么是自建的,要么来自别的数据集,与本集合的原始标注无关。

没有切分,也没有评测口径。 这带来一个隐蔽后果:不同论文报告的 AUC 分母不同,有的按检查算,有的按受试者算,有的把无评分病例剔除。三个分母下的同一模型可以差出十几个点。

缺失非随机。 Oncotype 只对有适应症的病例存在,关键切片只对有肿块的病例存在。前者的缺失与生物学相关,后者与影像表现相关,两者的处理方式不能共用一套插补策略。

对比剂剂量不可比。 磅与千克的混用使得按体重归一化的剂量在个体间有二点二倍的潜在偏差,动力学特征的绝对值因此不可横向比较。

单中心单机型。 全部影像来自一台 Philips 1.5 T。场强、线圈、压脂算法、重建核都同源,跨设备泛化无法从数据内部估计。这一点在今天的多中心研究里是硬伤,但在 2011 年是常态。

没有阴性对照的规模。 高危正常只占少数,没有大规模的健康筛查阴性者。任何「正常 vs 异常」的二分类都会面临严重的类别不平衡,且阴性样本的代表性无法评估。

版本处于中间态。 v2 于 2026-10-23 上线,注明部分序列修复后归位。这意味着当下载到的序列数与版本表不一致时,既可能是下载问题,也可能是官方尚未归位,两种原因在页面上无法区分。

自由文本不可直接计算。 病理摘要与部分描述词是自由文本,结构化依赖自行抽取,而抽取质量没有官方基准可比对。

§7.3 外部可比性:三条容易误比的地方

误比 为什么错 正确处理
与 Duke 比分类 AUC Duke 的框是三维标注,本集合是指针,任务难度不同 只比同一任务定义下的结果,或明确声明真值来源
与 EMBED 比 BI-RADS 一致性 EMBED 的描述词是结构化录入,本集合是报告转录 比较前先统一词表与缺失处理
与筛查队列比阳性率 本集合是诊断队列,阳性率被人为抬高 只做内部比较,不外推患病率

第二行值得展开。同样是 BI-RADS 描述词,结构化录入的字段有受控取值域,转录的字段则是「放射科医师写了什么,录入者就抄了什么」。前者的一致性可以用 Kappa 衡量,后者的一致性取决于转录者的习惯,连衡量的前提都不成立。

§7.4 与官方文字的口径差异

研究过程中遇到四处需要并列说明的地方,都属于「同一页面内不同表述」而非外部矛盾。

位置 说法 另一处 处理
集合描述 队列含「fibroids」 乳腺语境下该词通常指子宫肌瘤,乳腺对应词是纤维腺瘤 按良性纤维腺瘤类病变理解,并注明官方原文用词
状态字段 标为 Complete v2 注明部分序列修复后归位 按「阶段性完整」处理,下载后自行核对序列数
体积 六十点八七 GB 该数字挂在 Version 1 行 引用时注明版本,v2 体积未公布
模态 列出 MR、CT、PT、MG 正文只描述 MRI 与标本钼靶 按四项都存在处理,下载时显式过滤

第一行是最容易引起误解的。官方描述里那句「高危正常、DCIS、fibroids 与小叶癌」把四种病例并列,其中 fibroids 一词在英文医学语境里几乎专指子宫平滑肌瘤,用在乳腺上属于明显的笔误或用词不当。合理的解释是纤维腺瘤(fibroadenoma)——这是乳腺最常见的良性病变,也与「诊断队列需要良性对照」的设计相符。但这是解释,不是官方声明,引用时应保留原文并标注。

§7.5 拿到数据后先做的四件事

#-- 一、序列数是否为 429;二、MR/MG/CT/PT 各多少
#-- 三、有多少受试者出现多次检查;四、表格与影像的病例交集多大
python3 - <<'PY'
import os, pydicom
from collections import Counter, defaultdict
mod, subj = Counter(), defaultdict(set)
for root, _, fs in os.walk("./raw"):
    for f in fs:
        if f.endswith(".dcm"):
            ds = pydicom.dcmread(os.path.join(root, f), stop_before_pixels=True)
            mod[ds.Modality] += 1
            subj[ds.PatientID].add(ds.StudyInstanceUID)
print(mod)
print("受试者", len(subj), "多次检查者", sum(1 for v in subj.values() if len(v) > 1))
PY

四件事的结果会决定后续所有分析的口径。特别是第四件:如果表格与影像的病例交集明显小于八十八,说明有一部分病例只有一边的信息,样本量要按交集报。

§8 版本与生态

§8.1 一条跨越十五年的时间线

时间 事件 意义
2011-07-16 临床表定版 表里的 BI-RADS 与分子读数停在这一天,此后未再更新
2011-11-09 Version 1 上线 影像首次公开,六十点八七 GB
2015 DOI 注册 从「一个网页上的下载链接」变成可引用的数据出版物
2015-06-22 清单文件生成 当前可下载的 .tcia 清单即此版本
2019 前后 进入 IDC 镜像 可在云端直接查询,不必全量下载
2026-10-23 Version 2 上线 部分序列修复,体积待补

时间线里最扎眼的是 2011 与 2026 之间长达十五年的空白。临床表停在 2011 年,意味着表里的「当前受体状态」是十五年前的判读,按今天的标准(ASCO/CAP 指南几经修订)可能有部分病例的分类会变。这不是数据错误,而是任何长期存档都必然面对的时间漂移。

§8.2 它靠什么活着

一份十五年前建档、没有切分、没有脚本、只有八十八例的数据集,为什么还在被引用?答案不在数据本身,而在它挂靠的机构与制度。

第一层是托管。TCIA 由美国国家癌症研究所资助,其存续不依赖某个课题组的经费周期。数据放在这里,不会因为作者退休或服务器下架而消失。

第二层是 DOI。2015 年注册的 DOI 把这份数据变成了学术基础设施的一部分:它可以被引用,引用可以被计数,计数反过来成为提交者维护数据的动力。官方页面显示的数千次浏览与十余次引用,就是这个循环的可见部分。

第三层是许可。CC BY 3.0 让数据可以进入商业与教学场景,不需要逐次申请。许可越简单,二次使用越多,二次使用越多,数据越难被遗忘。

第四层是镜像。IDC 把它接入云端查询体系,使用者不必先下载六十 GB 就能知道里面有什么。镜像降低了使用门槛,也给了主站一个备份。

四层叠起来,形成了一种与「数据质量」无关的生存逻辑:它活着不是因为好用,而是因为它在制度上不可撤销。

§8.3 生态位:放射基因组学的少数公开配对

放射基因组学这个词在 2010 年前后很热,核心假设是影像表型可以替代部分基因表达信息。要验证这个假设,需要同一批患者的影像与分子数据,而这类配对在公开数据里一直稀缺,原因是伦理与流程:影像在放射科,分子在病理科,两边系统不通,能配对的前提是有人愿意做一次跨科室的整理。

本集合就是那次整理的结果。它的稀缺性不在于八十八例这个数字,而在于「有人把两边接上了」这件事。今天要做类似的整理,成本比 2011 年低得多(有 REDCap 一类工具、有更成熟的去标识流程),但公开的配对集并没有变多,因为激励结构没变:整理数据不发论文,用数据才发论文。

这解释了它为什么一直被引用而很少被扩展:它是一个孤本式的工作,后来者更愿意在它上面做分析,而不是再做一份。

§8.4 它代表的那个时代

把它放在数据出版史里看,它属于「前基准时代」:数据发布的目的是让同行能重复论文里的图,而不是让算法能在统一口径下比较。那个时代的数据集普遍有几个特征:无切分、无基线、无评测脚本、文档写在论文里而不是页面上、更新靠作者个人。

这些特征在今天看来是缺陷,在当时是常态。理解这一点,才能理解为什么它的价值集中在「配对」而不是「规模」,也才能理解为什么它不适合被当作现代基准来用。

§8.5 它接下来会怎样

最可能的路径是被动维护:Version 2 完成序列修复,体积补齐,此后再无大改。TCIA 的更新节奏通常如此,除非有新的整理者接手。

另一条路径是被并入更大的放射基因组学集合。若未来出现跨机构的乳腺影像-分子联合库,它会被当作历史子集收录,届时它的独立价值会进一步下降——但在那之前,它仍是少数可直接下载的配对样本。

§9 使用指引

§9.1 三种角色的路径

角色 目标 建议路径
做关联分析的研究者 找影像特征与分子的关系 先读临床表建字段字典,再按关键切片裁 ROI,最后做分层回归
做模型验证的工程师 找外部数据验分类器 只取 MR 序列、按受试者分组、把无评分病例单独作测试
做教学的人 讲报告如何变成变量 用临床表本身当教材,配合两三例的关键切片做对照

三条路径的共同前置动作是一样的:先把表读懂,再动影像。反过来做的,通常会在关联阶段返工。

§9.2 最小实现:从一例到一个特征矩阵

#-- 一例的完整走法:定位关键切片、裁 ROI、抽一阶统计量
import numpy as np, pydicom, pandas as pd

row = pd.read_excel("TCIA-Breast-clinical-data-public-7_16_11.xlsx").iloc[0]
series_dir, slice_no, cx, cy = "./raw/S1", 42, 128, 160

ds = pydicom.dcmread(f"{series_dir}/IM_{slice_no:04d}")
px = ds.pixel_array.astype(float) * float(ds.RescaleSlope) + float(ds.RescaleIntercept)
roi = px[max(cy-32,0):cy+32, max(cx-32,0):cx+32]
feat = {"mean": roi.mean(), "std": roi.std(),
        "p90": np.percentile(roi, 90), "skew": float(pd.Series(roi.ravel()).skew())}
print(feat)

这段代码只做一件事:把一例的关键切片裁成一个六十四见方的块,输出四个一阶统计量。它的价值是示范坐标系怎么用,而不是提供一个可用的特征工程——真正的放射组学特征需要固定重采样、固定灰度离散化,这些步骤在二维 ROI 上做,结果的可比性很差。

§9.3 在 AI 流程中的位置

在典型的乳腺影像流程里,它最合适的位置是「验证与解释」,不是「训练」。

预训练阶段用大规模钼靶或 MRI 集;微调阶段用带明确终点的中等规模集(如 Duke);验证阶段用本集合,因为它能回答一个别处回答不了的问题:模型的输出是否与报告里的人类描述词、以及病理分子读数存在一致的方向性关系。这一步做得好,模型的可解释性就有了外部锚点;做得不好,至少能发现模型在学的其实是扫描仪。

§9.4 使用前的五个问题

第一,你要的是影像还是表?如果只要表,二十一 KB 就够了,不必下载六十 GB。

第二,你的任务需要像素级真值吗?需要的话,这份数据给不了,尽早换。

第三,你的样本量按受试者还是按检查算?按检查算会让置信区间偏窄。

第四,你的缺失处理是否与缺失机制匹配?Oncotype 的缺失是适应症决定的,不能随机插补。

第五,你的切分是否按人分组?没有的话,先修这一条,再谈模型。

§10 使用声明

项目 声明
性质 公开的临床研究影像集合,非临床产品,非诊断依据
推荐用途 影像-分子关联分析、外部验证、报告结构化教学、放射基因组学假设生成
不建议用途 分割与检测基准、患病率估计、商业产品的直接训练、临床决策支持
伦理 数据已去标识,仍禁止任何再识别尝试;涉及人体的研究应经所在机构伦理审查
引用 Bloch B, Jain A, Jaffe C. Data From BREAST-DIAGNOSIS (Version 2). TCIA. 2015. DOI 10.7937/K9/TCIA.2015.SDNRQXXR
许可 CC BY 3.0,须署名并保留 DOI;同时遵守 TCIA 数据使用政策
版本 引用时注明 Version 2(2026-10-23)与实际下载日期
状态 官方标为 Complete,v2 部分序列仍在归位,下载后自行核对序列数

常见误读

常见说法 实际情况 证据
「Grand Challenge 上的乳腺挑战赛」 站内无此 slug,也无同名赛事 官方入口在 TCIA,页面无排行榜与提交入口
「八十八例、十万张图,样本量很大」 十万是切片数,独立样本至多八十八人 四个计数分别对应受试者、检查、序列、实例
「有分割标注」 只有关键切片层号与近似 X-Y 中心 官方描述用「denoted key image slice」与「approximate X-Y center」
「标注是包围框」 没有框,也没有边界 同上,无任何二维或三维框的说明
「BI-RADS 分级标签」 有描述词,未说明给出一到五级的分级结论 官方写的是 BIRADS MRI features,不是 category
「每例都有 Oncotype 评分」 仅 when available,且检测本身有适应症限制 官方描述与检测适用人群
「按体重给了标准剂量」 剂量按磅算,体重标签按千克记 官方专门用一段解释这个错配
「六十点八七 GB 就是全部」 那是 Version 1 清单的体积,v2 未公布 体积数字挂在 v1 行
「CC BY 就是随便用」 须署名、保留 DOI、不得再识别 官方引用区与 TCIA 使用政策
「同一患者的多次检查可以当独立样本」 会造成同人泄漏,指标虚高 官方明示多时间点检查存在

FAQ

Q1:这份数据到底叫什么、在哪?
官方名称是 BREAST-DIAGNOSIS,全大写,挂在 TCIA 的 collection 路径下,DOI 为 10.7937/K9/TCIA.2015.SDNRQXXR。Grand Challenge 上既没有这个 slug,也没有同名赛事。

Q2:八十八是患者数还是病例数?
是受试者数。TCIA 的四层计数分别是八十八名受试者、一百四十八次检查、四百二十九个序列、十万五千零五十幅图像,四者不可互换。

Q3:影像是什么模态?
以 Philips 1.5 T 的乳腺 MRI 为主,常见序列标注为 T2、STIR 与 BLISS(动态增强),另有肿瘤标本的数字钼靶,版本表的模态列还列了 CT 与 PT。

Q4:有掩膜或包围框吗?
没有。影像侧唯一的空间标注是关键切片的层号与该层上肿块的近似 X-Y 中心,官方用词是「近似」。

Q5:BI-RADS 是分级还是描述词?
是描述词。官方写的是从影像报告里摘出的 BI-RADS MRI 特征,没有说给出 BI-RADS 一到五类的最终分级。

Q6:Oncotype 评分能当回归目标吗?
可以,但要先处理缺失。该评分只适用于雌激素受体阳性、HER2 阴性的早期浸润性癌,DCIS、高危正常与三阴病例天然没有,缺失与病例类型强相关。

Q7:能商用吗?
可以。影像与临床表都是 CC BY 3.0,署名并保留 DOI 即可,同时不得尝试再识别受试者。

Q8:为什么说剂量不可比?
官方写明注射量按磅数的百分之十计算,而 DICOM 体重标签按千克记录,两个单位相差约二点二倍。按标签反推每公斤剂量会得到与原始临床意图不同的结果。

Q9:v2 和 v1 有什么区别?
v2 于 2026-10-23 上线,注明部分序列修复后归位;v1 是 2011-11-09 的首发版,六十点八七 GB 的体积数字属于 v1。两版的临床表相同,都停在 2011-07-16。

Q10:怎么和库内其它乳腺 MRI 集配合用?
用它做影像-分子关联与外部验证,用 Duke 做有框的病灶任务,用 QIN 做重复性方法学,用 ACRIN 6667 做对侧风险。四者的终点不同,不建议合并训练。

Q11:为什么没有基线模型和排行榜?
因为它是 2011 年的影像集合,不是挑战赛。当年的发布目标是让同行重复论文里的图,而不是提供统一评测。

Q12:下载后序列数不足四百二十九怎么办?
先确认是否落在 v2 的序列归位窗口内,再看是否按模态过滤过。两者都排除后,可从 IDC 镜像按序列补齐,并在引用时注明实际取到的序列数。

附录 A 数据组织与目录

层级 键 计数 说明
集合 Collection 1 BREAST-DIAGNOSIS
受试者 PatientID 88 跨检查稳定,可作主键
检查 StudyInstanceUID 148 一次就诊一次检查
序列 SeriesInstanceUID 429 一段同参数采集
实例 SOPInstanceUID 105,050 一幅二维图像
#-- 下载后的典型目录形态(客户端按 PatientID / StudyUID / SeriesUID 分层)
raw/
└── <PatientID>/
    └── <StudyInstanceUID>/
        ├── <SeriesInstanceUID_A>/   # 常见为 T2
        ├── <SeriesInstanceUID_B>/   # 常见为 STIR
        └── <SeriesInstanceUID_C>/   # 常见为 BLISS 动态增强

目录名不含语义,序列类型的判断只能靠 SeriesDescription 与采集参数。这一点在批量处理时必须先解决,否则后续所有按「序列」的统计都是错的。

附录 B 标注类别与格式

标注项 载体 形态 值域 备注
BI-RADS 形态 临床表 文本 肿块 / 非肿块强化 / 焦点 / 不对称 转录自报告
BI-RADS 边缘 临床表 文本 清晰 / 不规则 / 毛刺等 转录自报告
强化方式 临床表 文本 均匀 / 不均匀 / 环形等 转录自报告
动力学曲线 临床表 文本或编码 持续 / 平台 / 洗出 依赖期相数
关键切片层号 临床表 整数 依序列层数而定 基准未说明
肿块中心 临床表 两个数值 图像坐标 近似值
ER / PR 临床表 文本或半定量 阳性 / 阴性 / 百分比 判据未统一
HER2 临床表 文本 阳性 / 阴性 / 待定 未注明检测方法
Oncotype 临床表 整数 评分分值 仅部分病例
#-- 一行临床记录的语义等价形态(官方未公布列名,此处按语义重建)
subject_id, birads_morphology, birads_margin, enhancement, curve_type,
key_slice, center_x, center_y, er, pr, her2, oncotype
<病例号>,    mass,             irregular,     heterogeneous, washout,
42,        128,              160,           positive, positive, negative, 31

上表的取值是示意,不是官方取值域。真正的取值域必须从表里逐列统计得到,这也是建立字段字典的第一步。

附录 C 术语表

术语 含义
BI-RADS 乳腺影像报告与数据系统,ACR 发布的影像描述与分级规范
BPE 背景实质强化,正常腺体在增强扫描中的强化程度,常作混杂因素
DCE-MRI 动态增强 MRI,注射对比剂后多期采集,用于观察强化动力学
STIR 短 TI 反转恢复序列,压脂,突出含水组织
BLISS 本集合中对动态增强序列的标注名,具体参数须读 DICOM 标签
Magnevist 马格维显,拜耳的钆对比剂商品名
DCIS 导管原位癌,癌细胞局限于导管内,未突破基底膜
小叶癌 起源于乳腺小叶的浸润性癌,影像上常表现为非肿块强化
Oncotype DX 二十一基因复发风险评分,适用于 ER 阳性、HER2 阴性的早期浸润癌
ER / PR 雌激素受体 / 孕激素受体,免疫组化判定,决定内分泌治疗
HER2 人表皮生长因子受体 2,免疫组化与原位杂交判定,决定靶向治疗
关键切片 阅片者认为最能显示病灶的那一层,附带近似中心坐标
标本钼靶 切除标本的数字 X 线摄影,用于对照病灶范围与钙化
期相 动态增强中一次完整采集,期相数决定曲线能否三分
洗入 / 洗出 对比剂在病灶内进入与退出的速率,曲线分型的依据
TCIA The Cancer Imaging Archive,美国国家癌症研究所资助的影像档案
IDC Imaging Data Commons,云端影像数据平台,提供镜像查询
DOI 数字对象标识符,本集合为 10.7937/K9/TCIA.2015.SDNRQXXR
去标识 移除直接标识符的处理,准标识符可能残留
组内相关 同一受试者多次测量之间的相关性,决定有效样本量

附录 D 常见误读 FAQ 速查

你的疑问 一句话答案 详见
这是挑战赛吗 不是,是 TCIA 上的影像集合 §1.1
有多少例 八十八名受试者,一百四十八次检查 §2.1
十万张图能当十万样本吗 不能,切片高度相关 §2.1
能做分割吗 不能,没有掩膜 §3.6
框在哪 没有框,只有关键切片上的近似中心 §4.3
BI-RADS 是标签吗 是描述词,不是分级结论 §4.2
Oncotype 为什么缺那么多 检测有适应症,缺失非随机 §4.4
剂量为什么不能比 磅与千克混用,差约二点二倍 §4.5
能商用吗 能,CC BY 3.0,须署名 §5.2
为什么指标不可复现 无切分、无脚本、无基线 §7.2
v2 下不全怎么办 可能仍在归位,可从 IDC 补 §5.1
和 Duke 能混用吗 终点不同,不建议合并训练 §6.1

附录 E 许可与引用

项目 内容
影像许可 CC BY 3.0
临床表许可 CC BY 3.0
附加条件 遵守 TCIA 数据使用政策,不得再识别
数据引用 Bloch B, Jain A, Jaffe C. Data From BREAST-DIAGNOSIS (Version 2) [dataset]. The Cancer Imaging Archive. 2015
DOI 10.7937/K9/TCIA.2015.SDNRQXXR
引用要求 必须包含 DOI,官方标注 Data Citation Required
商用 允许,须署名并保留 DOI
再分发 允许,须保留许可声明与 DOI
禁止 任何再识别尝试、与外部数据链接以还原身份
建议标注 版本号、下载日期、实际取到的序列数
#-- 建议在论文数据可用性声明中使用的模板(替换日期与序列数)
Data from BREAST-DIAGNOSIS (Version 2) were obtained from The Cancer Imaging
Archive (https://doi.org/10.7937/K9/TCIA.2015.SDNRQXXR) under CC BY 3.0.
Downloaded on <date>; 429 series retained after modality filtering.

编辑说明

项目 内容
核验日期 2026-10-29
核验方式 读取 TCIA 集合页的版本表、描述段与引用区;在 Grand Challenge 站内以 API 全量拉取 264 个挑战赛的 slug 检索,确认无同名条目
已核实 四层计数、模态列表、序列标注、给药规则、许可、DOI、两个版本的日期与体积
未覆盖 未逐序列下载核对实例数;未对临床表逐列扫描(只依据官方对字段的文字描述与文件体积判断);未统计各字段的实际缺失率
口径说明 文中标注为「推算」「示意」的数字均为按官方计数得出,非官方公布;「纤维腺瘤」是对官方 fibroids 一词的解释,已在 §7.4 注明

相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集