信息速览
Colorectal-Liver-Metastases 是纪念斯隆凯特琳癌症中心(MSKCC)一系结直肠癌肝转移肝切除病例的术前影像集合,托管在 TCIA 上。它收的是 197 位病理证实为肝转移并接受了切除的病人,每人在手术前六周内做一次门静脉期对比增强 CT,配一套分割文件,把肝脏、术后将留下的那部分肝、肝静脉、门静脉和每一枚肿瘤分别圈出来;另附一张覆盖人口学、病理、切缘与生存终点的临床表。
它的分量不在图像数量。一万七千余幅在今天的公开影像库里只算小体量,真正稀缺的是这些段里有一个叫 Liver_Remnant 的东西:术后会剩下的那部分肝脏。这个段在其他公开肝脏数据集里几乎见不到,因为它不是解剖结构,而是一次手术决策的产物——外科医生打算切到哪里,残肝就到哪里。把它和同一病例号下的生存终点放在一起,一份数据就同时承载了「切多少」与「活多久」。
边界要先说清。它是单中心回顾性连续病例的子集,从更大的一组切除病例里按六条标准筛出来;它只有门静脉期一个期相;它没有术后影像、没有基因、没有预先算好的影像组学特征。下文按结构、残肝、结局、获取四层展开,最后给使用路径与已知问题。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 官方名 | Colorectal-Liver-Metastases,副题「Preoperative CT and Survival Data for Patients Undergoing Resection of Colorectal Liver Metastases」 |
| 执行机构 | Memorial Sloan Kettering Cancer Center(MSKCC) |
| 托管方 | The Cancer Imaging Archive(TCIA),另有 IDC 云侧索引 |
| 规模 | 197 例 / 197 个检查 / 394 个序列 / 17,836 幅图像 / 10.91 GB |
| 模态 | CT 与 SEG 两种,CT 为门静脉期单期相 |
| 分割段 | Liver、Liver_Remnant、Hepatic、Portal、Tumor_x 五类 |
| 临床数据 | 一张带数据字典的表格,含人口学、病理、治疗与生存终点,135.34 kb |
| 许可 | CC BY 4.0,影像与临床表均公开直链,非申请制 |
| 版本 | Version 2,2023/04/25,状态 Complete |
| 数据引用 | Simpson 等,2023,DOI 10.7937/QXK2-QG03 |
| 数据描述论文 | Simpson 等,Scientific Data 2024;11(1),DOI 10.1038/s41597-024-02981-2 |
| 主键 | 病例号 CRLM-CT-xxxx |
| 明确不含 | 术后影像、动脉期与平扫、基因与病理切片、预提取特征矩阵、逐灶复发标注 |
| 库内同域 | lits-liver、sliver07、atlas-liver-tumor(均为分割或体积任务,无生存终点) |
§1 它是什么:一条把「切多少」和「活多久」绑在一起的手术链
1.1 一句话定义
它是一份术前影像加一张结局表,中间用病例号焊死。影像侧每人一次门静脉期 CT,一套 DICOM 分割对象,段里既有所见(肝、血管、肿瘤)也有所决(残肝);表格侧每人一行,记录这台手术切了什么、病理看到了什么、之后活了多久、肝内有没有再长。
这种组合在公开数据里不常见。医学影像数据集通常只回答一个问题:这张图上有什么。分割集给掩膜,检测集给框,分类集给标签,三者都停在「图像内容」这一层。这一份多走了一步,它把图像内容与一个几年之后才发生的事件连起来,而且连得可核对——不是用人群统计去推断,是用同一个病例号去对齐。
1.2 为什么它不是又一个肝脏分割集
库内肝脏方向已有三份公开数据:lits-liver 给肝与肝肿瘤的二分类掩膜,sliver07 给肝脏体积,atlas-liver-tumor 给 HCC 的肝与肿瘤双标签。三者的终点都是「像不像」「准不准」,评价指标是 Dice 与表面距离。
这一份的终点不在这里。它的掩膜只是中间产物,真正要回答的是:术前那点残肝,够不够支撑病人活过几年;残肝的质地(脂肪变、窦状扩张、化疗后的纤维化)在 CT 上有没有痕迹;痕迹能不能预测肝内复发。同一个掩膜,在前三份数据里是答案,在这一份里是自变量。
差别落到使用上很具体。做分割,它是又一个训练集,规模不大,收益有限;做预后,它是罕见的「影像—手术—结局」三联,可替代品几乎没有。选错用途,会觉得它平平无奇;选对用途,会发现它不好找替代。
1.3 你的处境,它能帮什么
| 你的处境 | 它能帮你什么 | 你要自己补什么 |
|---|---|---|
| 研究残肝体积与术后肝衰的关系 | 197 例带残肝段的术前 CT,残肝是按实际切线画的 | 术后肝衰的判定要自己从临床表或外部记录重建 |
| 做肝切除的手术规划算法 | 真实切线留下的三维形态,含切缘宽度信息 | 规划用的「术前应切」范围要自己重画,不能用现成残肝段 |
| 建影像组学预后模型 | 同一批人的门静脉期 CT、掩膜与生存终点齐全 | 特征要自己提;训练与验证必须按病例划分而非按图像 |
| 研究非肿瘤肝实质的影像表征 | 病理给了脂肪变与窦状扩张的分级,可与肝实质纹理对照 | 纹理度量与病理取材位置的对齐没有官方配准 |
| 评估分割算法在多枚病灶下的表现 | 每枚肿瘤独立成段,可直接算逐灶指标 | 空段、缺段与编号跳号要自己容忍 |
| 找一份能写进方法学的公开对照 | CC BY 4.0、有 DOI、有数据描述论文 | 版本与口径要自己核,站点表格与论文表述有出入 |
1.4 不适合谁:五条边界
第一,不适合把残肝当成预测目标的人。Liver_Remnant 是按术后影像与病理切缘回推的,它记录的是「实际切到了哪里」,不是「术前应该切到哪里」。拿它当监督信号训练一个「预测残肝」的模型,模型学到的是术者的决策习惯与术后信息,不是解剖约束。这是这份数据最容易被用错的地方,下文 §3.3 展开。
第二,不适合需要多期相的人。只有门静脉期。想看动脉期强化、想看平扫的基线密度、想算强化率,这里都做不了。门静脉期是看肝实质与门静脉解剖的最佳期相,也是肝转移灶显示较差的期相之一——转移灶多在动脉期富血供、门脉期等密度,这本就是肝转移检出的经典难题。
第三,不适合需要随访影像的人。每人只有一次术前检查。术后影像参与了切除线的确定,但没有作为 DICOM 发布。要做复发灶的定位、要做纵向配准、要看残肝再生曲线,这份数据给不了。
第四,不适合把 197 例当作「所有肝转移病人」的人。入组排除了 90 天内死亡、随访不足 24 个月、术前接受肝动脉灌注化疗、做过消融、楔形切除超过三处、术前影像看不到肿瘤的人。这是一个为「能算清残肝」而筛选过的队列,手术难度与预后都优于总体。
第五,不适合需要分子信息的人。没有基因、没有转录组、没有病理切片、没有 RAS/BRAF 状态。做多模态融合,缺的正是这一半。
1.5 一句话判断
如果你要的是「术前 CT 看得见的肝,术后还剩多少、病人后来怎样」这条链上的真实配对,它在公开数据里近乎唯一;如果你要的是一批干净的多期相 CT 去做病灶检出,它连期相都不够。
1.6 与库内三个肝脏集的定位差异
| 集合 | 标注对象 | 任务终点 | 有无结局 | 与本篇的关系 |
|---|---|---|---|---|
| lits-liver | 肝、肝肿瘤 | 分割精度 | 无 | 同域分割集,规模更大,无残肝、无生存 |
| sliver07 | 肝脏 | 体积测量 | 无 | 同域体积集,单器官,无肿瘤 |
| atlas-liver-tumor | 肝、HCC 肿瘤 | 分割精度、肿瘤负荷 | 无 | MRI 而非 CT,HCC 而非转移,无残肝 |
| 本篇 | 肝、残肝、肝静脉、门静脉、逐枚肿瘤 | 手术规划、预后 | 有,三条生存终点 | 唯一带残肝段与生存终点的一组 |
这张表能读出一件事:前三份数据的差别在「标什么」,本篇的差别在「标完之后还给了什么」。掩膜之上多了一层结局,用法就从评测扩展到建模。
§2 数据构成:197 例、394 个序列、五类段
2.1 规模与体量
官方表格给四列:197 位受试者、197 个检查、394 个序列、一万七千八百三十六幅图像,合计 10.91 GB。四个数之间是可以对上的,而且对得很整齐。
197 例对 197 个检查,人均恰好一次,没有重复检查。394 个序列对 197 个检查,恰好是两倍,意味着每例一个 CT 序列加一个分割序列,没有第三种。图像数除以序列数约 45 幅,但这个平均值会骗人:分割序列通常按单个对象计一幅,CT 序列则有近百层,两者混在一起算平均没有意义。
体量与图像数的比例更有信息。10.91 GB 摊到一万七千余幅,每幅约 0.63 MB。这个密度恰好是 512×512、十六位灰度、未压缩的典型腹部 CT 单层大小,加上 DICOM 头的余量。它说明集合里的 CT 是常规重建层厚,不是薄层高分辨;也说明没有额外的派生图像在撑体积。
2.2 三个计数口径
问「这个集合有多大」,会得到三个都正确、但所指不同的答案。
| 口径 | 数值 | 含义 | 常见误用 |
|---|---|---|---|
| 受试者 | 197 | 病例数,等于临床表的行数 | 一般不会错 |
| 检查 | 197 | DICOM 的 Study 层对象数 | 被误读为 394,把序列当检查 |
| 序列 | 394 | DICOM 的 Series 层对象数,每人两个 | 被当作检查数或扫描次数 |
| 图像 | 17,836 | DICOM 的 Instance 数,含分割对象 | 被当作 CT 层数 |
| 体量 | 10.91 GB | 影像与分割合计 | 被当作纯 CT 体量 |
最容易出错的是 394。官方页面把四个数字并列在同一行,受试者与检查都是 197,序列翻倍,图像跳到一万七千余。乍看像是「197 人做了 394 次检查」,实际不是:检查数就是 197,多出来的那一倍是序列。人均检查一、人均序列二,这是这份数据结构上最干净的一点。
作者在数据描述论文里写明队列来自 384 例连续肝切除术,按标准筛到 197 例。这个 384 是来源池,不是收录量,两者相差一倍。写方法学时若把 384 当成本数据集的规模,会高估近一倍。
2.3 五类段各自是什么
| 段名 | 中文 | 由什么构成 | 谁会用 |
|---|---|---|---|
| Liver | 全肝 | 术前影像上可见的整个肝脏轮廓 | 分割评测、肝体积基线、影像组学掩膜 |
| Liver_Remnant | 残肝 | 按实际切除方案虚拟切除后剩下的那部分 | 手术规划研究、残肝体积与结局分析 |
| Hepatic | 肝静脉 | 肝静脉系统,用于肝段划分与流出道评估 | 肝段解剖、切除范围合理性 |
| Portal | 门静脉 | 门静脉系统,用于流入道与切除耐受评估 | 门静脉栓塞前后对比、解剖变异 |
| Tumor_x | 肿瘤 | 逐枚转移灶,x 为序号 | 病灶检出、逐灶分割、肿瘤负荷 |
五类段的组合方式值得注意:它把「解剖」(肝、肝静脉、门静脉)、「病理」(肿瘤)与「决策」(残肝)放在同一个对象里。一般分割集的段只覆盖前两类,第三类几乎不出现,因为它不属于解剖学,属于外科学。
段的识别靠 Segment Label 头,官方说明这是跨版本稳定的标识方式。另有一个 Segmented Property Type Code Sequence,存放 SNOMED CT 属性码,官方明确提示这套码在未来版本中可能按最佳实践调整。实务含义是:按 Label 匹配段,不要按码匹配;码可以变,名字是承诺。
2.4 一条病例的磁盘解剖
取一例,它在磁盘上的形态大致如下。层级是病例 → 检查 → 序列 → 图像,SEG 作为独立序列与 CT 并列。
#-- 目录层级与关键 DICOM 标签(值为示意,非真实病例)
Colorectal-Liver-Metastases/
CRLM-CT-0xxx/
<StudyInstanceUID>/ #-- 唯一的术前检查
<SeriesInstanceUID_ct>/ #-- 门静脉期 CT,约百层
0001.dcm ... 00xx.dcm
<SeriesInstanceUID_seg>/ #-- 分割对象,单文件
0001.dcm
#-- 读头可见的关键字段
PatientID = "CRLM-CT-0xxx"
Modality = "CT" 或 "SEG"
StudyInstanceUID = "1.3.6.1.4.1..."
SeriesInstanceUID = "1.3.6.1.4.1..."
ImagePositionPatient = 逐层递增的 z 坐标
SegmentLabel = "Liver" / "Liver_Remnant" / "Hepatic" / "Portal" / "Tumor_1"
SegmentedPropertyTypeCodeSequence = SNOMED CT 码,可能随版本调整
这条结构对写代码有三个直接后果。其一,SEG 是一整个序列一个文件,里面装多帧,读法与传统图像序列不同,需要专门的库。其二,段与像素的对应关系在 SEG 的 PerFrameFunctionalGroupsSequence 里,通过引用帧定位到 CT 的哪一层,不能假设 SEG 与 CT 逐层对齐。其三,同一例的 CT 与 SEG 共用 StudyInstanceUID,这是连接两者的天然外键,比病例号更可靠。
2.5 临床表:一张表加一本字典
临床数据不是多张按表单拆分的表,而是一份表格加数据字典。三类 Data Type 在站点上标为 Demographic、Measurement、Treatment,分别对应人口学与体质、测量与病理、治疗与手术。
从 Version 2 的更新说明可以确认八个变量名,它们都是补入的:body_mass_index、node_positive_primary、synchronous_crlm、multiple_metastases、carcinoembryonic_antigen、max_tumor_size、bilobar_disease、preoperative_pve。这八个名字本身就是一份数据结构说明:体质指数、原发灶淋巴结状态、同时性转移、多发转移、癌胚抗原、最大肿瘤径、双叶受累、术前门静脉栓塞。
生存侧有三个时间字段与配套的事件指示列:overall_survival_months、months_to_DFS_progression、months_to_liver_DFS_progression。三者分别对应总生存、任何部位复发或死亡、肝内复发或死亡。事件列的存在意味着截尾是可分辨的——没有结局的人不是被记成「未发生」,而是被记成「观察到某个时点为止」。
#-- 临床表读取要点(列名为官方变量名,非完整清单)
patient_id #-- 主键,形如 CRLM-CT-xxxx
body_mass_index #-- V2 补入
carcinoembryonic_antigen #-- V2 补入,单位与检测法需查字典
max_tumor_size #-- V2 补入
bilobar_disease #-- V2 补入,双叶受累指示
preoperative_pve #-- V2 补入,术前门静脉栓塞指示
overall_survival_months #-- 总生存,月
months_to_DFS_progression #-- 任何部位复发或死亡,月
months_to_liver_DFS_progression #-- 肝内复发或死亡,月
一条实务提醒:官方格式列写的是 CSV,实际下载文件是 xlsx 扩展名。这不是笔误,是站点表格沿用了旧版描述。解析时用表格库读,不要按逗号分隔文本切。
2.6 版本与更新
两个版本,日期挨得很近。Version 1 是 2023 年 3 月 1 日,Version 2 是 2023 年 4 月 25 日。两版的影像计数完全一致——197、197、394、一万七千余、10.91 GB,一字未改;变的是临床表,从 125.4 kb 的十月版换成 135.34 kb 的四月版,补入前述八个变量。
这个版本关系值得记住:版本号只对表格生效,影像与分割从第一版起就没动过。对使用者的含义是,如果你只用影像,两个版本等价;如果你用临床变量,必须指名 Version 2,否则会缺八个字段。
官方给出的更新理由是让临床表更好地匹配 2017 年原始论文里描述的数据集。这句话透露了一段历史:这份数据在成为公开集合之前,先是一篇 2017 年研究的数据基础,六年后整理成集时,表格字段与原论文对不齐,于是补了一次。
2.7 磁盘上的形态与三条取数后果
用 Data Retriever 取数会得到一个按病例编号命名的目录树,每例一个目录,目录下按序列展开。manifest 文件名里带 November-2022,说明清单是 2022 年 11 月生成的,而版本更新在 2023 年 4 月;影像未变,所以清单仍然有效。
第一是计数的含义。目录数等于病例数,序列目录数等于 394。用序列目录数当病例数,会把规模高估一倍。
第二是段的存在方式。分割不是每类段一个文件,而是一例一个 SEG,里面装若干段。想按段取,必须先解析 SEG 再做拆分,不能靠文件名挑。
第三是体量的分布。10.91 GB 里绝大部分是 CT,SEG 占比很小。做磁盘规划时按全量留即可,压缩后解压的膨胀主要发生在 CT 的逐层文件上。
§3 残肝:一个只在这类数据里出现的段
3.1 FLR 是什么
未来肝残余(future liver remnant,FLR)是肝切除术前必须算清的一个量:把计划切除的部分去掉,剩下的肝还剩多少。它决定手术能不能做、要不要先做门静脉栓塞把对侧肝养大、切除范围能不能再扩一点。
临床上它通常以体积百分比表达——残肝体积占标准化肝体积的比例。这个比例没有统一的阈值,但方向是明确的:剩得越少,术后肝功能不全与肝衰的风险越高。同一个病人,切三成和切六成,是两种手术。
所以 FLR 不是一个解剖名词。解剖学里没有「残肝」这个结构,只有左叶、右叶、段。残肝是「这个病人这次手术」的产物,换个方案就换个形状。
3.2 这个段是怎么造出来的
官方流程写得克制但完整:肝脏、肿瘤与血管由放射科医师或 fellow 借助 Scout Liver 半自动分割,生成三维模型;术后影像与病理切缘宽度被用来确定所需的切除线;据此在术前模型上生成术后残肝的分割。
拆开看是三步。第一步是在术前 CT 上把肝和血管画出来,建三维模型——这一步与普通分割没有区别。第二步是确定切线,依据是术后的影像(实际切到了哪里)与病理报告的切缘宽度(切缘离肿瘤多远)。第三步是在术前模型上按这条线切一刀,剩下的一块就是 Liver_Remnant。
关键在于第二步的信息来源。切线不是术前的计划,是术后的复盘。数据描述论文里把这一点说得很直接:在术前三维模型上虚拟绘制实际施行的切除范围,切除线依据术后影像与病理切缘宽度确定。这句话里的「实际施行」四个字,决定了这个段的性质。
3.3 它是复现,不是预测
这一点值得单独说,因为它决定了这个段能不能当标签。
一份术前规划数据应当只含术前信息:术者看着术前 CT,判断切到哪里能切干净又留够肝。这样的标签是决策,可以被模型学习,也可以被模型预测。而 Liver_Remnant 里混入了术后信息:术后影像告诉你实际切到了哪里,病理切缘告诉你切得够不够,两者一起回推出这条线。
后果有两层。浅的一层是信息泄漏:如果拿它训练「预测残肝」,模型可以借由肝表面的形态差异间接识别出术者的习惯,而这些习惯在术前并不可得。深的一层是目标错位:模型学到的是「这位术者切了多少」,而不是「这位病人应该切多少」。前者是行为建模,后者是临床决策,两者在论文里可以写成同一句话,含义完全不同。
正确的用法有三条。其一,把它当真实切线的金标准,用于评估「如果按影像自动规划,与真实切线差多远」——这时泄漏是设计的一部分,不是缺陷。其二,把它当体积参照,算真实残肝占全肝的比例,再做体积与结局的关联。其三,把它当形态样本,研究不同切线下的残肝形状分布。三条用法都不要求它是术前可得的。
3.4 为什么别的公开集没有这个段
三个原因,依次从技术到制度。
技术上,画残肝需要一条切线,而切线是一条人为定义的曲面,不是一个有边界的解剖结构。分割模型擅长找边界,不擅长找「术者心里的那条线」。让标注者画残肝,等于让每个人重新做一次手术决策,标注者间一致性会很低。
制度上,切线是手术记录的一部分,属于临床文档,不属于影像。要把切线变成像素,需要把术后影像、病理报告与术前 CT 三者对齐,这是研究项目的工作量,不是数据发布的常规动作。
用途上,多数公开肝脏集的目标是算法评测,评测需要的是可重复的、标注者间一致的标签。残肝恰好相反:它因人而异、因术者而异、因方案而异。对评测是噪声,对手术规划研究是信号。
这也解释了为什么这个段在库内三份肝脏集里都找不到:不是它们漏了,是它们不需要。
3.5 三种用法与各自的前提
| 用法 | 需要什么 | 前提 | 风险 |
|---|---|---|---|
| 真实切线对照 | 残肝段 + 全肝段 | 承认切线含术后信息 | 把对照说成预测,结论失据 |
| 残肝比例与结局 | 残肝体积、全肝体积、生存字段 | 体积算法统一,单位一致 | 各例层厚不同,体积误差需评估 |
| 残肝形状研究 | 残肝段、肝静脉段 | 形状描述与肝段划分对齐 | 肝段划分依赖肝静脉,缺段时无法算 |
三种用法有一个共同前提:先把体积算对。CT 的体素是各向异性的,层厚与像素间距不同,直接数体素会错。体积必须按 PhysicalDeltaX/Y/Z 换算,或先把掩膜重采样到等体素。这一点在后面 §9 的代码里会再提。
§4 结局层:从 384 例切除到 197 个带终点的病例
4.1 入组漏斗
| 环节 | 例数 | 说明 |
|---|---|---|
| 来源池 | 384 | 连续的肝切除术,曾用于两项无关的既往研究 |
| 最终收录 | 197 | 满足全部纳入条件且不触发任何排除条件 |
| 影像可分析 | 197 | 官方标注全部分割对象均经核验 |
漏斗只有一个可核对的数字落差:384 到 197。中间每一步筛掉多少,官方没有逐条给出,只给了条件清单。这意味着无法做「排除是否随机」的敏感性分析——不知道被排除者在年龄、肿瘤负荷、切缘上偏向哪一侧。
从条件本身可以推断偏向。排除 90 天内死亡与随访不足 24 个月,等于剔掉了最差的一端(术后早期死亡)与最新的一端(来不及随访)。排除术前肝动脉灌注化疗、消融与多处楔形切除,等于剔掉了治疗更复杂的一端。排除术前影像无可见肿瘤,等于剔掉了影像学完全缓解的一端。四个方向叠起来,留下的是一批「有可见病灶、切得动、活得够久」的病人,预后优于总体。
4.2 六条排除标准各自排掉了什么
第一条,90 天内死亡。术后早期死亡是肝切除最严重的并发症结局,恰恰是残肝体积研究最关心的对象。把它排除,等于把「残肝太小导致肝衰」这条因果链的极端样本剪掉了。研究残肝与肝衰的关系时,这是必须声明的截断。
第二条,随访不足 24 个月。生存分析需要足够的观察窗,否则事件被大量截尾。代价是队列的时间跨度被拉长,早期病例占比更高,治疗范式可能已经变迁。
第三条,术前接受肝动脉灌注化疗。官方理由写得很实在:灌注化疗对非肿瘤肝实质的病理与影像改变描述不清,会污染「肝实质质地」这个自变量。而肝实质质地正是这份数据的核心假设之一。
第四条,局部消融。消融会在肝内留下坏死区与纤维化,改变局部密度与形态,也让「切除范围」失去意义。
第五条,楔形切除超过三处。楔形切除是非解剖性切除,切得多了,残肝形状变成一堆碎片,体积算不准。
第六条,术前影像无可见肿瘤。没有可见肿瘤就没有可圈的目标,肿瘤段会变成空段,残肝的切线也失去参照。
六条合起来,是一句潜台词:这份数据要的是「能算清残肝」的病例,不是「所有肝转移」的病例。
4.3 三个时间窗
第一个窗是影像窗:术前六周内。这个宽度是有意留的——太窄,很多病人在外院做 CT,调片来不及;太宽,新辅助化疗前后的肝实质会变。六周大致覆盖了一个术前评估周期。
第二个窗是随访下限:24 个月。低于此不入组。
第三个窗是死亡窗:90 天内死亡者不入组。
三个窗叠在一起,定义了「什么算一个可分析的病例」:在手术前六周内做过门静脉期 CT、活过三个月、被跟踪了至少两年。任何回顾性生存研究都有类似的窗,这里把它写进了纳入条件,反而更清楚。
4.4 三条终点的定义与读法
| 终点 | 字段 | 事件定义 | 读的时候注意 |
|---|---|---|---|
| 总生存 | overall_survival_months |
任何原因死亡 | 不含死因区分,非肿瘤死亡也算事件 |
| 无病生存 | months_to_DFS_progression |
任何部位复发或死亡 | 肝外复发也算,最严的一条 |
| 肝内无病生存 | months_to_liver_DFS_progression |
肝内复发或死亡 | 与残肝假设最贴的一条 |
三条终点不是三条独立的轴,而是同一批随访记录在三种事件定义下的切分。同一个人可能肝内无复发但肺转移,此时肝内 DFS 是长尾,DFS 已到事件。
选哪条终点,取决于假设。若假设是「残肝质地藏着隐匿转移灶」,肝内 DFS 最贴;若假设是「手术整体成败」,总生存最贴;若假设是「影像特征能否预测任何复发」,DFS 最贴。三条都写、都说显著,是这类研究常见的过度解读。
另有一个细节:事件指示列与时间列必须配对使用。只有时间没有事件列,会把截尾当事件;只有事件没有时间,无法做时间-事件模型。表格里两者都在,读取时成对取即可。
4.5 一个必须记住的特例
官方在数据集说明里单列了一条:病例 CRLM-CT-1074 扫描时受试者为俯卧位,图像方向与其余病例不同。
这一条的分量比它看起来重。腹部 CT 常规是仰卧,俯卧位的图像在患者坐标系里的前后、左右都翻转过。凡是依赖方向的处理都会受影响:左右肝叶的判断、肝段编号、左右侧病灶的定位、以及任何用「前腹壁」「右侧」这类方位词做的特征。
批量流水线里最容易被这一例击穿的有两处。一处是按 ImageOrientationPatient 直接堆叠体数据,俯卧位堆出来的体会上下颠倒,掩膜与影像对不上。另一处是按解剖方位裁 ROI,俯卧位会把肝裁到画面外。稳妥做法是先按方向余弦重定向到统一解剖朝向,再做后续处理;或者至少在流水线里保留一列「方向是否标准」的标记,让下游知道这一例特殊。
§5 拿到它:许可、路径与引用
5.1 CC BY 4.0 意味着什么
影像、分割与临床表的许可都是 CC BY 4.0。允许复制、分发、改编与商用,条件只有三条:署名、附许可链接、标明是否修改,且不得暗示原作者背书。
公开直链意味着不需要申请、不需要数据使用协议、不需要二次伦理审批。下载链接直接可用,manifest 文件与临床表压缩包都能匿名取。对一个要赶实验进度的团队,这一点比样本量更实际——当天就能开始,不必等审批窗口。
宽松不等于无义务。TCIA 的数据使用政策要求在使用者成果中附 Data Citation 与 DOI,且不得尝试重新识别受试者。CC BY 4.0 自身要求署名与标明修改。对医学影像,还有一条行业共识:即便已去标识,也不应把图像用于重新识别的尝试。
5.2 三条取数路径
| 路径 | 适合的人 | 代价 | 备注 |
|---|---|---|---|
| TCIA Data Retriever | 要完整下载或命令行批量取 | 需安装客户端,全量 10.91 GB | 官方推荐,可用 collection 名或 manifest |
| IDC 云侧 | 要在云端筛选与计算,不想落盘 | 需熟悉 IDC 的表结构与查询 | collection_id 为 colorectal_liver_metastases |
| 网页检索与按序列下载 | 只要几十例做探索 | 手点,效率低 | 适合核对 manifest 是否完整 |
三条路径背后是同一批文件。IDC 的价值在于把 DICOM 重新索引成可查询的表,能按模态、序列类型筛选;TCIA 的价值在于它是源头,版本、许可与统计口径以它为准。
5.3 取数时的三个动作
第一步,认准 collection 名:全大写连字符的 Colorectal-Liver-Metastases。名称相近的肝脏集合不少,认名字加 DOI 就不会错。
第二步,先取清单再下载。manifest 文件名里的 November-2022 是生成月份,不代表数据版本;影像从第一版起未变,清单仍然有效。
第三步,按病例分组。每例一个目录,目录名就是病例号,直接可用作主键。这一步几乎不会错,但也正因如此,很多人忘了检查病例号与临床表是否一一对应。两侧本应严格相等,一旦出现差额,先查编号的空格与大小写,再查表格是否有重复行。
5.4 引用怎么写
引用分三层,缺一层都会削弱可复现性。
第一层是数据引用,TCIA 强制要求:Simpson AL、Peoples J、Creasy JM、Fichtinger G、Gangai N、Lasso A、Keshava Murthy KN、Shia J、D’Angelica MI、Do RKG,2023 年,《Preoperative CT and Survival Data for Patients Undergoing Resection of Colorectal Liver Metastases (Colorectal-Liver-Metastases)》Version 2,The Cancer Imaging Archive,DOI 10.7937/QXK2-QG03。版本号不能省。
第二层是数据描述论文:Simpson 等,《Preoperative CT and survival data for patients undergoing resection of colorectal liver metastases》,Scientific Data 2024 年第 11 卷第 1 期,DOI 10.1038/s41597-024-02981-2。凡涉及队列构成、分割流程、变量定义、已知局限的陈述,出处应指向这篇。
第三层是 2017 年的原始研究。TCIA 页面在说明 Version 2 的更新理由时提到「原始 2017 年发表」,那是这批数据最早的分析出处。凡涉及「这批数据当初用来回答什么问题」,需回到那一层。
5.5 先用表格,再决定下不下影像
135.34 kb 的临床表可以在几分钟内拿到。它的价值被低估:够做样本量估算、够看变量构成、够判断这个队列是否适合自己的问题。很多项目在下载十个 GB 之后才发现终点定义不对,而这一步本可以在下载之前完成。
具体动作是先读字典再看表。字典给出变量名、类型与编码方向;不看字典直接读表,容易把指示变量当成计数,把月份当成天数。八个 V2 补入的变量里,bilobar_disease、preoperative_pve、synchronous_crlm、multiple_metastases、node_positive_primary 五个都是指示变量,取值只有两三种;把它们当连续变量送进模型,是最常见的低级错误。
5.6 存储与算力规划
10.91 GB 不算大,DICOM 逐文件存储会让解压后的目录膨胀。规划磁盘按两倍留余量是稳妥做法。
算力上要注意的是分割对象的解析。SEG 是装在单个文件里的多帧对象,一次读入会把所有段的所有帧都载进内存;对一百多层的 CT 加五类段,峰值内存可能到几个 GB。稳妥做法是先读元数据、按段筛选、再逐段读像素,不要一次性 dcmread 整个对象。
§6 取数代码:从清单到「一人一行 + 段清单」
6.1 先列清单,核实四个数
不要一上来就下十个 GB。先取序列清单,把 197/197/394 对上,再决定下载范围。
#-- 列出 collection 的序列清单,先核对四个计数
from tcia_utils import nbia
from collections import Counter
series = nbia.getSeries(collection="Colorectal-Liver-Metastases")
print("序列数:", len(series))
print("模态构成:", Counter(s.get("Modality") for s in series).most_common())
studies = {s.get("StudyInstanceUID") for s in series}
patients = {s.get("PatientID") for s in series}
print("检查数:", len(studies), "病例数:", len(patients))
跑完应得到序列 394、检查 197、病例 197。若序列数偏少,多半是清单版本旧或过滤条件写错;若病例数偏多,多半是 PatientID 里混入了非病例对象。
6.2 解析 SEG,把段名取出来
段靠 SegmentLabel 识别,不靠属性码。下面这段只读元数据,不读像素,几百毫秒就能跑完一例。
#-- 只读 SEG 元数据,列出每例的段名与帧数
import glob
import pydicom
from collections import defaultdict
inventory = defaultdict(list)
for path in glob.glob("./data/**/SEG/**/*.dcm", recursive=True):
ds = pydicom.dcmread(path, stop_before_pixels=True)
pid = ds.PatientID
for seg in ds.SegmentSequence:
inventory[pid].append((seg.SegmentLabel, getattr(seg, "SegmentNumber", None)))
print("病例数:", len(inventory))
print("每例段数分布:", sorted({len(v) for v in inventory.values()}))
print("示例:", inventory[sorted(inventory)[0]])
输出会显示每例的段数不一:肝、残肝、肝静脉、门静脉四段固定,肿瘤段按枚数增加。段数是 4 + 肿瘤枚数——这个规律可以用来做一次快速质控,段数少于四例说明有段缺失。
6.3 临床表合成宽表并与影像对账
#-- 读临床表,检查主键能否与影像侧一一对应
import glob
import pandas as pd
path = glob.glob("./clinical/*April-2023*.xlsx")[0]
df = pd.read_excel(path, sheet_name=None)
print("工作表:", list(df))
clinical = pd.concat(df.values(), ignore_index=True) if len(df) > 1 else list(df.values())[0]
print(clinical.shape, clinical.columns[:12].tolist())
clinical["patient_id"] = clinical["patient_id"].astype(str).str.strip()
imaging_ids = set(inventory)
table_ids = set(clinical["patient_id"])
print("仅在影像侧:", len(imaging_ids - table_ids))
print("仅在表格侧:", len(table_ids - imaging_ids))
对账结果应当两边都接近零。若有差异,先检查病例号前后空格与大小写,再检查表格是否有重复行——这两类问题占了这类对账失败的大半。
6.4 体积的正确算法
残肝比例是这份数据最常用的衍生量,也是最容易算错的一个。
#-- 按物理间距算体积,不要直接数体素
import numpy as np
import pydicom
def volume_ml(mask: np.ndarray, ds) -> float:
"""mask 为三维布尔数组,ds 为对应 CT 的任一层的头"""
dz = float(ds.SliceThickness) if hasattr(ds, "SliceThickness") else float(ds.SpacingBetweenSlices)
dy, dx = float(ds.PixelSpacing[0]), float(ds.PixelSpacing[1])
return float(mask.sum()) * dx * dy * dz / 1000.0
三个数都来自头信息:PixelSpacing 给层内两向间距,SliceThickness 给层间。缺 SliceThickness 时退回 SpacingBetweenSlices,两者在多数重建里相等,但并不总是。算完之后应做一次合理性检查:成人全肝体积大致在一升到两升之间,若结果差一个量级,多半是把毫米当成了厘米。
§7 质量与已知问题
7.0 读这一节前的一个前置校正
评估这份数据,最容易犯的错是拿「分割基准」的尺子量它:问它标注一致性多高、有没有标注者间信度、能不能直接算 Dice 排名。这些维度上它必然不好看,因为它的分割从一开始就不是为评测做的,是为手术规划做的——一人一画,画的人就是做规划的人,没有第二个人复核,也没有一致性实验。
同样不该用「生存队列」的尺子量它:问它有没有多中心、有没有前瞻设计、有没有竞争风险模型。它是单中心回顾性子集,这些都没有。
合适的框架是第三条:它是一份「把手术决策过程固化成像素与字段」的工程产物。按这个框架看,要问的是四件事——身份是否可唯一定位、层级是否自洽、模态是否配对、访问是否可复现。下面按这四条评。
7.1 DAIMS 八维评分
| 层 | 维度 | 评分 | 依据 |
|---|---|---|---|
| 描述层 | 身份与边界 | 5 / 5 | 集合名、DOI、版本、病例号体系、纳入与排除标准全部写明,边界可逐条核对 |
| 描述层 | 文档完备度 | 4 / 5 | 有数据描述论文、数据字典与分割流程说明;扣分在变量级单位与编码未在页面汇总 |
| 结构层 | 标识体系 | 4 / 5 | 病例号作主键,Study 与 Series 的 UID 齐备,段靠 SegmentLabel 稳定识别;扣分在肿瘤段编号无跨病例语义 |
| 结构层 | 层级一致性 | 5 / 5 | 197 例对 197 检查、394 序列恰为两倍,四层计数彼此自洽,无孤儿对象 |
| 结构层 | 模态配对 | 4 / 5 | CT 与 SEG 一一配对且共 Study;扣分在仅门静脉期单期相,无平扫与动脉期可对照 |
| 访问层 | 开放程度 | 5 / 5 | CC BY 4.0 直链,三条取数路径,无申请与审批环节 |
| 访问层 | 可复现性 | 3 / 5 | 影像与表格可完整复现;扣分在不提供预提取特征、不提供分割代码与体积计算脚本,衍生量口径需自行统一 |
| 访问层 | 许可清晰度 | 5 / 5 | 影像与临床表同为 CC BY 4.0,Data Citation 与 DOI 明确,商用与改编边界清楚 |
八项里有三项满分,两项五分制的四分,一项三分。最弱的是可复现性:数据本身完整,但把数据变成数字的那一步没有官方实现。同一批影像,两个人算出的残肝体积可以差几个百分点,差别来自重采样、插值与层厚处理。这不是数据的缺陷,是交付范围的边界——作者明确说过不提供预提取特征,理由是特征依赖软件。
7.2 可枚举的边界与缺口
第一,单期相。只有门静脉期。转移灶在门静脉期常与肝实质等密度,检出难度高于动脉期,任何以「病灶检出」为目标的使用都会遇到这个天花板。
第二,单时间点。每人一次术前检查,没有术后随访影像。残肝再生、复发灶出现的位置与形态,都无法观察。
第三,单中心。MSKCC 一家,扫描仪是 GE 的两款机型。跨机构的外推性未经检验,机型与协议差异对纹理特征的影响无法从这份数据内部估计。
第四,队列经过筛选。六条排除标准叠起来,留下的是预后偏好的一端。以它为训练集,模型在真实全谱人群上的表现会低于内部验证。
第五,无预提取特征。这不是遗漏,是设计选择。代价是任何两组结果都难以直接比较,除非双方公开特征定义与提取参数。
第六,肿瘤段编号无语义。Tumor_1 与 Tumor_2 只表示序号,不表示位置、大小或肝段。跨病例做「第 1 枚病灶」的统计,得到的是排序后的第一个,不是解剖上的某个位置。
第七,切缘宽度的字段归属不清。切缘参与了切除线的回推,这是流程上的事实;但切缘宽度是否以独立变量出现在临床表中,官方页面未列出字段清单,需解压后按数据字典确认。要定量研究切缘,这一步不能省。
第八,一例方向异常。CRLM-CT-1074 为俯卧位扫描,批量处理需专门处理。
7.3 外部印证
| 角度 | 证据 | 结论 |
|---|---|---|
| 使用强度 | DataCite 记录显示万次量级浏览与近二十次引用 | 在专科 CRLM 影像集里属常用 |
| 二次索引 | IDC 收录同一批影像并提供独立筛选入口 | 数据结构经得起再索引,不是孤本 |
| 学术背书 | 数据描述论文发表于 Scientific Data,同行评议 | 采集与整理流程经外部审阅 |
| 资金可追溯 | NIH/NCI 资助,含 P30 与 R01 两项 | 建设动机与维护来源可查 |
| 流程可复核 | 分割工具、转换工具、转换代码仓库均具名 | 关键步骤可被他人重走 |
7.4 两个具体的失败模式
第一个失败模式是把全肝当残肝。取段时按名字模糊匹配,Liver 会命中 Liver_Remnant 的前缀,也可能反过来。两者的体积差可以到一半以上,而算错之后的结果仍然「看起来合理」——肝体积在一个宽区间里都说得通。正确做法是精确匹配 SegmentLabel,并在读完后打印每例的段名清单核一遍。
第二个失败模式是按图像划分训练测试。一份 CT 有近百层,SEG 一例一个对象。若按层或按切片随机划分,同一个病人的相邻层会同时出现在训练与测试两侧,模型可以靠层间连续性拿到虚高的分数。这份数据每人只有一次检查,泄漏的单位就是病例:划分必须以病例号为界,197 例分成两组,任一组内的所有切片都只属于该组。
第三个值得提的失败模式是俯卧位那一例。它不会让指标明显变差,只会让某一例的掩膜与影像错位,而错位在汇总指标里被平均掉。做逐例质控时,先按方向余弦分组,把非标准方向的病例单独列出。
§8 生态位与历史
8.1 时间线
| 时间 | 事件 |
|---|---|
| 2017 年 | 原始研究发表,这批病例首次作为研究数据使用 |
| 2022-11 | 生成下载清单,影像整理完成 |
| 2023-03-01 | TCIA 发布 Version 1,临床表为十月版,125.4 kb |
| 2023-04-25 | 发布 Version 2,临床表补入八个变量,135.34 kb |
| 2024 年 | 数据描述论文发表于 Scientific Data 第 11 卷 |
从这条线能读出两件事。其一是长尾:研究 2017 年做完,数据 2023 年才公开,中间六年用于整理与合规。其二是发布节奏:两个版本相隔不到两个月,第二版只动表格,说明影像侧一次到位,表格侧对齐原论文花了一轮返工。
8.2 一家医院的两条线
这份数据的血统里有两条技术线,交汇在同一个病例号上。
第一条是手术规划线。Scout Liver 是肝胆外科用的三维规划软件,输入 CT,输出可旋转的肝、血管、肿瘤模型,术者用它算残肝、定切线、评估可切除性。这条线的产物是决策,落点在手术室。
第二条是影像组学线。MSKCC 的影像分析团队长期研究肝转移的纹理特征与预后,用的是同一批术前 CT。这条线的产物是特征与模型,落点在论文。
两条线本来各自独立,因为都需要同一批病例的同一批影像,于是合并成一个数据集。合并的痕迹留在了结构里:段既含解剖也含决策,表格既含病理也含生存。这种「两条线共用一份数据」的形态,是临床研究数据集里相当典型、却很少被明确写出来的一种组织方式。
8.3 与库内三个肝脏集的分工
| 集合 | 模态 | 标注 | 结局 | 一句话区隔 |
|---|---|---|---|---|
| lits-liver | CT | 肝、肝肿瘤 | 无 | 规模最大的肝肿瘤分割基准,做精度不做预后 |
| sliver07 | CT | 肝脏 | 无 | 单器官体积基准,历史最久,样本最少 |
| atlas-liver-tumor | MRI | 肝、HCC 肿瘤 | 无 | 换模态、换病种,做 HCC 的 MRI 分割 |
| 本篇 | CT | 肝、残肝、肝静脉、门静脉、逐枚肿瘤 | 三条生存终点 | 唯一把手术决策与结局绑在一起的一组 |
一条实用选型规则:要规模与评测可比性,去 lits-liver;要单器官体积的历史基线,去 sliver07;要做 MRI 上的 HCC,去 atlas-liver-tumor;要问「切多少、活多久」,只能来这里。四者不构成替代关系,构成的是任务谱系上的四个点。
8.4 它为何能持续
这份数据没有活跃的维护团队,两个版本之后就没有再更新,却仍在被引用。原因不在维护,在结构。
第一,残肝段没法事后补。要造这个段,需要术前 CT、术后影像、病理切缘与手术记录四样东西同时到位,还要有人把它们对齐成一条切线。公开档案里同时具备这四样的极少,因此它的稀缺性不会因为时间推移而衰减——别人做不出来,只能来用。
第二,结局与影像同源。很多公开影像集能与生存数据连接,靠的是人群层面的匹配(同一家医院、同一时期),匹配本身带噪声。这一份是同一个病例号,连接误差为零。这种精度无法通过外部拼接获得。
第三,许可把门槛降到零。CC BY 4.0 加公开直链,任何团队当天可用。对方法学验证、基线对照、教学演示这类「不需要大样本但需要真实结构」的用途,这一点比样本量更有价值。
三条叠起来形成一种刚性:不是靠更新维持存在感,是靠不可复制维持必要性。
8.5 作为「决策留痕」样本的价值
除了做研究,这份数据还有一层常被忽略的用途:它是一份「手术决策如何被固化成数据」的实物样本。
翻一遍,能看到四件典型的事。其一,决策可以被像素化——切线本来是一句话,这里变成了一组体素。其二,决策带着执行者的印记——同一批病人在不同术者手里会有不同切线,而数据里没有术者字段,这个变量被抹掉了。其三,决策依赖事后信息——切线靠术后影像与病理回推,这在临床上是常规,在数据上就是泄漏。其四,决策的粒度与解剖的粒度不同——肝段是固定的,切线是自由的。
这四件事对要设计临床数据集的人有直接用处:它示范了把过程性信息放进数据集的收益(可研究决策),也示范了代价(标签含未来信息)。想清楚这两面,再决定自己的数据集要不要保留过程性标注。
§9 使用指引
9.1 三类角色的路径
肝胆外科与规划研究者的路径最短:取 CT 与 SEG,算全肝与残肝体积,做比例,再与结局字段连接。关键动作是承认残肝段含术后信息,把研究问题限定在「真实切线对照」或「体积与结局关联」,不要越界到「预测」。
影像组学与预后建模者的路径更重:需要自己定掩膜(全肝还是残肝)、自己定特征集、自己定重采样参数。三件事都没有官方默认值,每一项都会改变结果。建议在方法里把三项写死并公开,否则结果无法与任何人比较。
数据工程与标注方法研究者的路径最轻:不必下影像,读 SEG 的元数据与论文的流程说明即可。这份数据的价值在于它示范了一条完整的标注链——半自动分割、三维建模、按实际切线回推、格式转换——每一环都有具名工具,可以照着重走。
9.2 一条最短的可用流程
#-- 一、装依赖并取清单
pip3 install tcia-utils pydicom pandas openpyxl highdicom SimpleITK
python3.11 -c "from tcia_utils import nbia; s=nbia.getSeries(collection='Colorectal-Liver-Metastases'); print(len(s))"
#-- 二、下载(先取二十例试跑,再全量)
python3.11 -c "from tcia_utils import nbia; nbia.downloadSeries('series_manifest.tcia', format='tcia', dir='./data')"
#-- 三、核对:序列目录数应为 394,病例目录数应为 197
find ./data -maxdepth 2 -type d | wc -l
#-- 四、成表:一人一行,给出段清单、全肝与残肝体积
import glob
import numpy as np
import pandas as pd
import pydicom
from highdicom.seg import Segmentation
rows = []
for seg_path in glob.glob("./data/**/SEG/**/*.dcm", recursive=True):
ds = pydicom.dcmread(seg_path)
seg = Segmentation.from_dicom(ds)
labels = [s.SegmentLabel for s in ds.SegmentSequence]
rows.append({"patient": ds.PatientID, "n_segments": len(labels), "labels": ",".join(labels)})
df = pd.DataFrame(rows).drop_duplicates("patient")
print(df.shape)
print(df["n_segments"].describe())
df.to_csv("segment_index.csv", index=False)
跑完会得到一张段清单表,一人一行。这张表应与 §6.2 的结果一致;若某例段数少于四,说明有段缺失,需回到原始 SEG 确认是标注遗漏还是解析问题。
9.3 写方法学时的最小信息集
用这份数据写论文,方法部分至少要交代七项:一是数据引用与 DOI、版本号;二是病例口径(197 例,来自 384 例连续切除的子集);三是所用段(全肝、残肝,还是两者);四是体积算法(层厚来源、是否重采样、插值方式);五是终点选择(三条中的哪一条,事件如何定义);六是划分单位(必须以病例为界);七是方向处理(是否对俯卧位病例做了重定向)。
七项里第四与第七最容易被略过,也最容易导致结果不可比。体积算法不写清,别人复现不出同一个数;方向处理不写清,别人不知道你有没有把那一例算对。
9.4 合规动作清单
下载前确认许可为 CC BY 4.0;使用时在成果中附 Data Citation 与 DOI;在数据可用性声明里写明版本号与 collection 名;不尝试重新识别;若对图像做过重采样、重定向或裁剪,在方法里声明为修改。五步做完,义务即履行完毕。
9.5 三种任务的推荐组合
| 任务 | 最小数据配置 | 必须先做的处理 | 主要风险 |
|---|---|---|---|
| 残肝体积与结局关联 | CT + Liver 段 + Liver_Remnant 段 + 三条终点 | 按物理间距算体积、统一重采样 | 体积口径不一,结论不可比 |
| 肝与肿瘤分割评测 | CT + Liver 段 + Tumor_x 段 | 拆分 SEG、补空段、按病例划分 | 多枚病灶下逐灶指标与整例指标混用 |
| 影像组学预后建模 | CT + 选定段 + 生存字段 | 定掩膜、定特征、定重采样、按病例划分 | 特征参数不公开,结果不可复现 |
三行任务的共同点是:难点都不在影像,而在把影像变成数字的那一步,以及在划分时尊重「一个人的所有切片属于同一个体」这条约束。前者决定结果能不能比,后者决定结果是不是真的。
§10 AI 使用声明
| 项目 | 说明 |
|---|---|
| 本页 AI 参与程度 | 由 AI 助手依据 TCIA collection 页与数据描述论文起草,人工复核关键数字 |
| 数字来源层级 | 见附录 B,collection 页为一级,数据描述论文为二级 |
| 未核实项 | 逐条排除的人数、切缘宽度的独立字段名、层厚与重建参数的逐例分布、每例肿瘤段数 |
| 版本信息 | 以 2026 年 10 月读取的 collection 页为准,现行版本为 2023-04-25 的 Version 2 |
| 已知不一致 | 站点格式列写 CSV 而下载文件为 xlsx;394 常被误读为检查数;Location 字段标 Colon 而非 Liver |
| 适用边界 | 描述数据集的结构、规模与边界,不评价任何具体研究的效能结论,不转引生存中位数 |
| 更新机制 | 集合自 2023 年 4 月后未再更新,本文不承诺随版本同步刷新 |
常见误读(避坑清单)
| 常见说法 | 实际 | 证据 |
|---|---|---|
| 「197 例、394 次检查」 | 394 是序列数,检查数是 197,人均一次 | 官方表格四列并列:197 受试者、197 检查、394 序列 |
| 「这是多期相增强 CT」 | 只有门静脉期一期,无平扫与动脉期 | 纳入条件写明 portal venous contrast-enhanced MDCT |
| 「有术后随访影像」 | 没有,术后影像只用于回推切线,未发布 | 数据集说明只列术前 CT 与分割 |
| 「残肝段可以用来训练预测模型」 | 该段含术后信息,是实际切线的复现 | 切线依据术后影像与病理切缘宽度确定 |
| 「每个病例的 Tumor_1 是同一个位置」 | 编号只是序号,无解剖或肝段含义 | 段名为 Tumor_x,x 表示该例的若干枚之一 |
| 「下载要申请或签协议」 | 不需要,CC BY 4.0 公开直链 | 下载区影像与临床表均标 CC BY 4.0 |
| 「临床表是 CSV」 | 格式列写 CSV,实际文件是 xlsx | 四月版文件扩展名为 .xlsx,135.34 kb |
| 「数据是 197 例连续切除」 | 197 是 384 例连续切除中筛出的子集 | 数据描述论文写明来源池为 384 例 |
| 「影像在 V1 与 V2 之间有变化」 | 影像计数一字未改,只有临床表补了八个变量 | 两版表格的 197/197/394/图像数完全相同 |
| 「有预提取的影像组学特征」 | 没有,官方明确不提供,理由是特征依赖软件 | 数据描述论文的局限段 |
| 「所有病例都是仰卧位」 | CRLM-CT-1074 为俯卧位,方向不同 | 数据集说明单列了这一例 |
| 「有基因与病理切片」 | 没有,只有表格化的病理分级与生存字段 | 下载区仅影像、SEG 与临床表 |
FAQ
Q1:394 是检查数还是序列数?
是序列数。官方四列分别是 197 位受试者、197 个检查、394 个序列、一万七千余幅图像。394 恰为 197 的两倍,对应每例一个 CT 序列加一个分割序列,人均检查数为一次。
Q2:为什么每人只有一次检查?
纳入条件限定为肝切除前六周内的单次术前门静脉期 CT。术后影像参与了切除线的回推,但没有作为 DICOM 发布,所以集合里没有纵向序列。
Q3:残肝段到底能不能当标签用?
能当对照,不能当预测目标。它是按术后影像与病理切缘回推的实际切线,含未来信息。做「自动规划与真实切线差多远」的评估时,这个信息泄漏是设计的一部分;做「预测残肝」时,它会让模型学到结果而不是约束。
Q4:三条生存终点该用哪条?
看假设。残肝质地藏隐匿转移灶的假设,用肝内无病生存;手术整体成败,用总生存;影像特征能否预测任何复发,用无病生存。三条都报且都称显著,属于过度解读,审稿人会追问。
Q5:门静脉期单期相够做病灶检出吗?
勉强。肝转移灶多在动脉期富血供、门脉期等密度,门静脉期是检出较差的期相之一,但对肝实质与门静脉解剖的显示最好。做检出会明显吃亏,做分割与体积不吃亏。
Q6:SEG 怎么读?
用支持 DICOM 分割对象的库读,按 SegmentLabel 取段,按 PerFrameFunctionalGroupsSequence 定位帧与 CT 层的对应。不要假设 SEG 与 CT 逐层对齐,也不要用属性码匹配段——官方提示码可能随版本调整。
Q7:体积怎么算才与别人可比?
三条必须写清:层厚取自哪个标签、是否重采样到等体素、用什么插值。三者任一不同,同一例的残肝体积可以差几个百分点。官方不提供计算脚本,这是复现性评分只有三分的原因。
Q8:能不能用于商业产品?
可以。CC BY 4.0 允许商用与改编,条件是署名、附许可链接、标明修改,且不暗示原作者背书。同时须遵守 TCIA 数据使用政策,不尝试重新识别。
Q9:197 例够训练深度学习模型吗?
分层看。做逐例分类或生存建模,197 例偏小但可用,前提是严格的病例级划分与交叉验证;做像素级分割,197 例的层数总量不小,但病例多样性不足,外部验证会掉点。作者自己在论文里也把「样本量对影像组学偏小」列为局限。
术语表
| 术语 | 含义 |
|---|---|
| CRLM | 结直肠癌肝转移,结直肠癌最常见的远处转移形式 |
| 肝切除 | 切除部分肝脏的手术,分解剖性与非解剖性两类 |
| FLR | 未来肝残余,术后将保留的肝组织,术前必须估算 |
| 残肝段 | 本集合中按实际切线回推的术后剩余肝,段名 Liver_Remnant |
| 门静脉期 | 注射对比剂后约八十秒的采集时相,肝实质强化、门静脉显影 |
| 多排 CT | 多探测器行 CT,一次旋转采集多层,腹部常规机型 |
| 半自动分割 | 算法给出初稿、医师手工修正的标注方式 |
| DICOM-SEG | 存放像素级分割的 DICOM 对象,一个对象可含多段多帧 |
| Segment Label | 分割段的名称标签,官方承诺跨版本稳定 |
| SNOMED CT | 系统化医学术语集,分割属性类型码的来源 |
| 虚拟切除 | 在三维模型上按计划切除范围切一刀,得到残肝形态 |
| 切缘宽度 | 肿瘤与切面之间的最短距离,病理测量 |
| 楔形切除 | 非解剖性局部切除,不按血管走行 |
| 门静脉栓塞 | 术前堵塞一侧门静脉,使对侧肝代偿性增大 |
| 肝动脉灌注化疗 | 经肝动脉持续灌注化疗药,对肝实质有病理改变 |
| 脂肪变 | 肝细胞内脂滴蓄积,按 Kleiner-Brunt 评分分级 |
| 窦状扩张 | 肝窦内皮损伤导致的扩张,按 Rubbia-Brandt 分级 |
| 无病生存 | 从手术到任何部位复发或死亡的时间 |
| 肝内无病生存 | 从手术到肝内复发或死亡的时间 |
| 截尾 | 观察期内未发生事件,只知事件发生在观察终点之后 |
| CC BY 4.0 | 署名即可使用的知识共享许可,允许商用与改编 |
| DAIMS | 数据资产管理的评估框架,分描述、结构、访问等层 |
| IDC | NCI 影像数据共享平台,提供云侧索引与查询 |
附录 A:核心数字核对表
| 项 | 值 | 来源 | 层级 |
|---|---|---|---|
| 受试者 | 197 | collection 页 | 一级 |
| 检查 | 197 | collection 页 | 一级 |
| 序列 | 394 | collection 页 | 一级 |
| 图像 | 17,836 | collection 页 | 一级 |
| 体量 | 10.91 GB | collection 页 | 一级 |
| 模态 | CT、SEG | collection 页 | 一级 |
| 段类别 | Liver、Liver_Remnant、Hepatic、Portal、Tumor_x | collection 页 | 一级 |
| 临床数据大小 | 135.34 kb(V2)/125.4 kb(V1) | collection 页 | 一级 |
| 发布版本 | Version 2,2023-04-25 | collection 页 | 一级 |
| DOI | 10.7937/QXK2-QG03 | collection 页 | 一级 |
| 来源池 | 384 例连续肝切除术 | 数据描述论文 | 二级 |
| 影像窗 | 术前六周内 | 数据描述论文 | 二级 |
| 随访下限 | 24 个月 | collection 页 | 一级 |
| 补充变量数 | 8 | collection 页更新说明 | 一级 |
| 数据描述论文 | Scientific Data 2024;11(1) | collection 页 | 一级 |
附录 B:数字的来源分层
一级:collection 页面。 受试者、检查、序列、图像、体量、模态、段类别、临床表大小、两个版本与日期、DOI、许可、俯卧位病例的说明、Version 2 补入的八个变量名,全部取自这一层,且在同一次读取中彼此一致。
二级:数据描述论文。 来源池 384 例、影像窗六周、分割工具与转换流程、三条终点的定义与字段名、病理分级体系、扫描机型、不提供预提取特征的说明,取自 Scientific Data 的正文。这一层用于确认设计与口径,不用于描述数据规模。
三级:未展开。 384 到 197 之间每一步排除的例数、切缘宽度的独立字段是否存在及其单位、每例的肿瘤段数与层厚分布、八个补入变量的完整取值编码,官方页面与论文摘要均未给出,标注为未核实而不作推定。
附录 C:参考文献
- Simpson AL, Peoples J, Creasy JM, Fichtinger G, Gangai N, Lasso A, Keshava Murthy KN, Shia J, D’Angelica MI, Do RKG. Preoperative CT and Survival Data for Patients Undergoing Resection of Colorectal Liver Metastases (Colorectal-Liver-Metastases) (Version 2) [Data set]. The Cancer Imaging Archive, 2023. DOI 10.7937/QXK2-QG03.
- Simpson AL, Peoples J, Creasy JM, et al. Preoperative CT and survival data for patients undergoing resection of colorectal liver metastases. Scientific Data, 2024, 11(1). DOI 10.1038/s41597-024-02981-2.
- TCIA collection 页,Colorectal-Liver-Metastases,https://www.cancerimagingarchive.net/collection/colorectal-liver-metastases/ ,2026 年 10 月访问。
- NCI Imaging Data Commons,同 collection 的云侧索引,collection_id 为 colorectal_liver_metastases。
- LabelmapToDICOMSeg 转换代码,https://github.com/lassoan/LabelmapToDICOMSeg 。
- dcmqi:DICOM 与定量影像的互转工具,https://github.com/QIICR/dcmqi 。
附录 D:如果只记五件事
第一,它是 MSKCC 197 例结直肠癌肝转移肝切除病例的术前门静脉期 CT 加分割加临床表,CC BY 4.0 公开直链。
第二,规模是 197 例、197 个检查、394 个序列;394 是序列不是检查,人均检查一次。
第三,五类段里最不可替代的是 Liver_Remnant,它是按实际切线回推的残肝,含术后信息,只能当对照不能当预测标签。
第四,临床表带三条生存终点与数据字典,Version 2 补入八个变量,影像侧两版未变。
第五,单中心、单期相、单时间点,队列经六条标准筛选,做预后可以,做病灶检出与多期相分析都不合适。
附录 E:文件与字段清单(按官方可确认的范围)
| 类别 | 内容 | 形态 | 说明 |
|---|---|---|---|
| 影像 | 门静脉期腹部 CT | DICOM | 每例一个序列,约百层,需 Data Retriever 或 IDC 获取 |
| 分割 | 肝、残肝、肝静脉、门静脉、逐枚肿瘤 | DICOM-SEG | 每例一个对象,内含多段,段名见 SegmentLabel |
| 影像清单 | manifest 文件 | .tcia | 2022 年 11 月版,用于按序列下载 |
| 影像摘要 | NBIA digest | XLSX | 供核对序列与文件数,不替代 DICOM |
| 临床数据 | 人口学、测量、治疗三类变量加数据字典 | XLSX | Version 2 为四月版,135.34 kb |
| 转换代码 | 掩膜转 DICOM-SEG | GitHub 仓库 | 具名公开,可照着重走流程 |
字段层面,官方给出的可确认信息有三块。其一是三类 Data Type:Demographic、Measurement、Treatment。其二是 Version 2 补入的八个变量名。其三是三个生存时间字段及其事件指示列。完整的变量清单与编码需解压后按数据字典逐项确认,页面未汇总。
编辑说明
本篇核验时间为 2026 年 10 月 29 日。核验方式为直接读取 TCIA 的 collection 页面,逐项比对受试者、检查、序列、图像、体量、模态、段类别、许可、两版日期与临床表大小,并核对 Data Citation、DOI、数据描述论文的卷期与 DOI、以及 Version 2 的八个新增变量名。
需要说明三处口径问题。第一,任务给定的口径写「197 例、394 次检查」,与官方表格不符:394 是序列数,检查数为 197,两者恰为两倍关系,本篇按官方表格写作。第二,站点临床数据的格式列写 CSV,实际下载文件为 xlsx 扩展名,本篇按实际文件形态描述。第三,站点 Location 字段标为 Colon,指的是疾病起源部位(结直肠),影像的实际拍摄部位是肝脏,两者不冲突但容易被误读为部位标注错误。
未覆盖的内容包括:384 到 197 之间的逐条排除例数、切缘宽度是否以独立字段存在、每例的肿瘤段数与层厚分布、八个补入变量的完整编码、以及三条终点的观察分布。前四项官方页面与论文摘要未展开,第五项属分布类统计,按体例不收录,需要时应回到数据表自行统计。
另有一处结构性说明:本篇不转引任何生存中位数、复发比例或组间比较结论。这些是研究结果,随分析口径变化,且不属于数据集的结构参数。引用效能结论时,应回到数据描述论文与引用该数据集的后续研究,而不是从数据集的介绍里转引。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- bkai-igh-neopolyp — 共享标签:医学影像 / 肿瘤学 / 结直肠癌 / 医学图像分割
- ct-colonography — 共享标签:医学影像 / CT / 肿瘤学 / 结直肠癌
- pddca — 共享标签:医学影像 / CT / 肿瘤学 / 医学图像分割
- ct-org — 共享标签:医学影像 / CT / 肿瘤学 / 医学图像分割
- headneck-radiomics — 共享标签:医学影像 / CT / 肿瘤学 / 医学图像分割
- hcc-tace-seg — 共享标签:医学影像 / CT / 肿瘤学 / 医学图像分割
- kipa22 — 共享标签:医学影像 / CT / 肿瘤学 / 医学图像分割
- glas — 共享标签:医学影像 / 肿瘤学 / 结直肠癌 / 医学图像分割
- crag — 共享标签:医学影像 / 肿瘤学 / 结直肠癌 / 医学图像分割
- lctsc — 共享标签:医学影像 / CT / 肿瘤学 / 医学图像分割
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

