信息速览

TotalSegmentator — 全身 CT 多结构分割基准数据集 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | TotalSegmentator Dataset |
| 英文全称 | TotalSegmentator: Whole-Body CT Anatomical Structure Segmentation Dataset and Toolkit |
| 别名/简称 | TotalSegmentator v1、TotalSegmentator v2、TotalSegmentator MRI、TS |
| 疾病分类 | ICD-11 无单一对应编码(全身解剖结构正常与病变混合队列);代表性应用场景:2C12 肝恶性肿瘤(肝体积测量)、BD50 主动脉瘤(主动脉直径测量) |
| SNOMED CT | 117 类结构均提供官方 TA2 标准到 SNOMED CT 的映射表(totalsegmentator_snomed_mapping.csv) |
| 数据模态 | 全身 CT(另发布 298 例 MR 配套数据集 TotalSegmentator MRI) |
| AI 任务类型 | 多器官/多结构 3D 语义分割(117 类),支持器官体积测量与体成分分析等下游任务 |
| 样本总数 | 1,228 例 CT(v2 公开数据集;v1 论文数据集为 1,204 例) |
| 数据大小 | 约 23.6 GB(Totalsegmentator_dataset_v2.zip) |
| 数据格式 | NIfTI(.nii.gz,每例 1 个 CT 卷 + 每类 1 个掩膜文件)+ meta.csv 元数据表 |
| 许可证 | 数据集 CC BY 4.0;工具代码 Apache 2.0;部分子任务模型(appendicular_bones、tissue_types、face、heartchambers_highres、vertebrae_body)仅限非商业使用 |
| 访问级别 | 开放(Zenodo 直接下载,无需注册或申请) |
| 语言 | 英语(文档、类名与元数据) |
| 首发日期 | 2022-07(v1 数据集 Zenodo 发布) |
| 最后更新 | 2023-09(v2 数据集,117 类;工具持续更新至 2026-08) |
| 发布机构 | 巴塞尔大学医院(University Hospital Basel)放射与核医学科 Research and Analysis 部门 |
| 官方主页 | https://github.com/wasserth/TotalSegmentator |
| 下载地址 | https://zenodo.org/records/10047292 |
| DOI | 论文 10.1148/ryai.230024;数据集 10.5281/zenodo.10047292 |
| AI 就绪度评分 | ⭐⭐⭐⭐⭐(5/5)— 官方划分(meta.csv split 列)+ nnU-Net 格式转换与评估示例脚本 + pip 一键安装运行;扣分项:部分子任务模型非商业许可、首次运行需下载权重、全量下载 23.6 GB |
| 页面状态 | published |
§0 E-E-A-T 审核声明
医学审核:[千方病案医学编辑部]交叉审核:§2 医学背景(解剖结构临床意义、ICD-11 与 SNOMED CT 映射)、§7 偏倚分析。
数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。TotalSegmentator 数据集本身以 CC BY 4.0 发布、可在 Zenodo 直接下载,但部分子任务模型权重仅限非商业使用,商业部署需向原作者取得商业许可。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? TotalSegmentator 是瑞士巴塞尔大学医院发布的一款"全家桶"级医学影像分割工具与数据集:给它一张全身或局部 CT,它能一次性圈出 117 种解剖结构——从肝脏、脾脏到每一节椎骨、每根肋骨,再到主动脉与主要肌肉群。配套的公开数据集包含 1,228 例真实临床 CT 和逐体素的专家级标注,全部可从 Zenodo 免费下载。它同时是"数据集"和"开箱即用的工具":研究者在论文里引用它作基准,工程师在管道里调用它做自动标注。
为什么重要? 在它出现之前,想研究"某种病患者的肝体积变化"或"做放疗前的器官勾画",往往要花数十小时手工描画或从头训练自己的模型。TotalSegmentator 用 1,200 多例覆盖各种年龄、疾病、扫描仪的真实数据训练出 nnU-Net 模型,平均 Dice 达到 0.943,把"全身解剖分割"变成了所有研究者随手可用的一行命令,成为医学影像领域引用最广泛的开放分割工具之一。
我能用它做什么? 三类典型用途:一是直接推理——批量给自己的 CT 队列打解剖标签,提取器官体积、肌肉脂肪面积等定量指标;二是训练研究——用 1,228 例标注数据微调或预训练自己的分割网络;三是工程底座——把它作为数据清洗流程里的自动标注器,为肿瘤分割、放疗靶区勾画等下游任务提供解剖先验。三类用途对应三种使用深度:只装工具(不下载 23.6 GB 数据)、下载小子集验证管道、全量数据正式训练,你可以按需逐步深入。
§1.1 技术摘要
TotalSegmentator 由 Wasserthal 等人于 2022 年首发(数据集)、2023 年正式刊于《Radiology: Artificial Intelligence》(论文)。研究团队从巴塞尔大学医院 PACS 系统中 2012、2016、2020 三个年份随机抽取 1,368 例 CT,经质量筛查(排除四肢扫描 37 例、层缺失 87 例、结构严重变形无法标注 40 例)后保留 1,204 例,重采样至 1.5 mm 各向同性分辨率,由人工完成 104 类解剖结构(27 器官、59 骨、10 肌肉、8 血管)的逐体素标注,并按 90%/5%/5% 划分为 1,082 例训练、57 例验证、65 例测试。模型侧基于 nnU-Net 自配置框架训练 3D 全分辨率网络,在含大量异常病例的内部测试集上取得 0.943 的平均 Dice,并在独立外部数据集上显著优于当时另一公开分割模型(0.932 对 0.871,P < .001)。2023 年 9 月发布 v2 数据集:类数扩展至 117(新增颅骨、甲状腺、前列腺、脊髓、胸骨等 33 类),公开样本扩至 1,228 例,标签质量修正、元数据扩充并改进去面部处理;2024 年进一步推出 MR 版本(298 例、56 类)。工具侧以 Apache 2.0 开源,pip install TotalSegmentator 即可一键推理,并内置对比期相识别、放射组学特征统计等周边命令。
§1.2 战略价值
维度一:规模与覆盖的"临界质量"。 在 TotalSegmentator 之前,公开的多器官分割数据集要么只覆盖腹部数个器官(如 BTCV、AMOS 的部分任务),要么仅数十例规模。它第一次把"全身、百类、千例"三个维度同时拉满:117 类结构覆盖从颅骨到足部附肢骨骼,1,228 例来自真实临床日常而非健康志愿者,扫描仪横跨 Siemens、GE、Philips、Toshiba、Canon 五大厂商。这种"真实世界多样性"正是模型泛化能力的来源,也使它成为衡量"你的分割模型是否鲁棒"的事实标准试验场。
维度二:工具与数据集闭环的工程范式。 TotalSegmentator 开创了"数据集 + 预训练工具 + Python API + 在线演示"的四位一体分发模式:数据侧 CC BY 4.0 直接下载,工具侧 pip install 后一行命令推理,社区还可通过 3D Slicer 扩展与在线站点 totalsegmentator.com 免安装使用。这一闭环显著降低了医学影像研究的入门门槛——大量后续工作(如 MRSegmentator 等跨模态衍生模型)直接以它为训练底座或迁移起点。对工程团队而言,它示范了如何把 nnU-Net 的研究级训练流程封装为可维护的生产级工具。
维度三:标准化术语桥接临床信息化。 官方为全部类名提供 TA2(Terminologia Anatomica 2)标准与 SNOMED CT 编码映射文件,使分割输出可以直接接入电子病历、影像报告结构与放射组学数据库。这一在分割数据集中罕见的设计,让 TotalSegmentator 成为"影像 AI 结果落地到临床信息系统"的理想中介层。
维度四:许可设计的分层示范。 它还提供了一个值得行业研究的许可范本:数据集 CC BY 4.0 最大程度开放,核心 117 类任务模型随代码自由使用,而研发成本更高的少数子任务模型采用"学术免费 + 商业收费"的双轨制。这既维持了社区生态的繁荣,又为长期维护找到了可持续的商业模式——对同类数据集/工具的发布者具有直接借鉴意义。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注 | 与 TotalSegmentator 的差异化 |
|---|---|---|---|---|
| TotalSegmentator v2 | 1,228 例 CT,117 类 | 全身 CT | 逐体素人工标注 | 全身覆盖最广、真实临床多样性最强,工具生态最完整 |
| BTCV / AbdomenCT-1K | 数十至 1,000+ 例 | 腹部 CT | 多器官标注 | 仅腹部;TotalSegmentator 覆盖头颈、四肢与附肢骨骼 |
| AMOS 2022 | 600 例 CT+MR | 腹部 CT/MR | 15 器官 | 提供跨模态配对,但类数与例数均少于 TotalSegmentator |
| CT-ORG | 140 例 | 胸腹部 CT | 6 器官 | 规模小、类数少,仅适合快速原型验证 |
| TotalSegmentator MRI | 298 例 MR,56 类 | 全身 MR | 逐体素标注 | 同一团队的 MR 版本,类清单与 CT 版部分对齐 |
| MRSegmentator | 1,100+ 例 MR | 全身 MR | 多结构标注 | MR 模态原生数据集,训练中复用了 TotalSegmentator CT 数据 |
选型结论:做 CT 全身解剖分析,TotalSegmentator 几乎总是第一选择;做跨模态配对研究选 AMOS;做 MR 原生任务看 TotalSegmentator MRI 或 MRSegmentator;快速原型用 BTCV/CT-ORG 这类小数据集即可。
§1.4 版本时间轴
下表按时间顺序汇总数据集与工具的关键节点;版本差异的逐项细节见 §3.0 版本抉择矩阵与坑点 3:
| 时间 | 版本/事件 | 关键变化 |
|---|---|---|
| 2022-07 | v1 数据集 Zenodo 发布 | 1,204 例 CT、104 类标注(27 器官 + 59 骨 + 10 肌肉 + 8 血管),DOI 10.5281/zenodo.6802613 |
| 2022-08 | arXiv 预印本(arXiv:2208.05868) | 论文公开,配套工具 v1(pip 包 1.x)上线 |
| 2023-07 | 论文正式发表于《Radiology: Artificial Intelligence》5(5):e230024 | 同行评审定稿;Radiology AI 出版物对应 v1 |
| 2023-09 | v2 数据集发布 | 类数 104→117(新增 33 类),公开样本 1,204→1,228,标签修正、元数据扩充、去面部处理改进、修复损坏文件 |
| 2023-10 | 3D Slicer 扩展兼容 v2 | 交互式医学平台集成,非开放子任务引入许可号机制 |
| 2024-05 | TotalSegmentator MRI 发布 | 298 例 MR、56 类,Zenodo DOI 10.5281/zenodo.11367005,配套 total_mr 任务 |
| 2024 至今 | 工具持续迭代(nnU-Net v2 引擎) | PyPI 2.x 系列;截至 2026-08 最新版本 2.18.0,GitHub 星标约 2,932 |
| 持续维护 | 权重与任务目录在线分发 | 任务清单经 backend.totalsegmentator.com/find-task/ 查询 |
§1.5 典型应用场景
以下五个场景覆盖了社区与文献中最常见的使用方式,按"从推理到训练"的深度排列:
- 器官体积测量与随访定量:对肝、脾、肾、甲状腺等结构自动测体积,用于肿瘤负荷评估、器官萎缩/肥大随访与移植前评估。
- 放疗靶区与危及器官勾画:以 117 类解剖掩膜为底图,自动生成放疗计划中的 OAR 勾画草案,人工只需微调。
- 体成分与肌肉减少症研究:结合
tissue_types(皮下脂肪、骨骼肌、躯干脂肪)与椎体定位,批量提取 L3 层面肌脂面积,开展营养与衰老队列研究。 - 大队列自动预标注:为胸部/腹部 CT 队列的肿瘤、血管疾病研究提供解剖先验与伪标签,降低下游标注成本。
- 解剖基础模型预训练:以 1,228 例 × 117 类的密集监督信号预训练大规模 3D 分割骨干,再向小数据集任务迁移。
§2 医学背景
§2.1 ICD-11 应用场景编码表
TotalSegmentator 标注的是正常解剖与真实临床混合人群,不对应单一疾病编码。下表列出其下游定量分析最常见的代表性应用场景及对应 ICD-11 编码。
| 应用场景 | ICD-11 编码 | 中文名称 | 在本数据集中的支撑 |
|---|---|---|---|
| 肝体积测量(术前评估/肿瘤随访) | 2C12 | 肝或肝内胆管恶性肿瘤 | liver、liver_segments(子任务)掩膜可直接计算分叶体积 |
| 主动脉直径与体积分析 | BD50 | 主动脉瘤或夹层 | aorta、pulmonary_artery 等血管掩膜支持直径/体积自动测量 |
| 体成分与代谢相关研究 | 5A11 | 2 型糖尿病 | tissue_types 子任务(皮下脂肪、骨骼肌、躯干脂肪)支持肌脂定量 |
§2.1b SNOMED CT 映射表
官方仓库发布 resources/totalsegmentator_snomed_mapping.csv,将 117 个类名逐一映射至 SNOMED CT 编码(类名遵循 TA2 解剖学命名标准,个别命名与 TA2 存在差异并在 README 表中注明)。下表为高频核心类的示意(完整映射以官方 CSV 为准)。
| TotalSegmentator 类名 | 中文术语 | SNOMED CT | 术语说明 |
|---|---|---|---|
| liver | 肝 | 10200004 | Liver structure |
| spleen | 脾 | 78904004 | Spleen structure |
| pancreas | 胰腺 | 15776009 | Pancreatic structure |
| heart | 心脏 | 80248007 | Heart structure |
| aorta | 主动脉 | 29707007 | Aortic structure |
| lung | 肺(结构) | 39607008 | Lung structure(CT 版为肺叶细分类) |
| kidney | 肾(结构) | 64033007 | Kidney structure(CT 版分左/右独立类) |
| vertebrae | 椎骨(结构) | 87784001 | Vertebra structure(CT 版为 C1-L5 逐节独立类) |
映射使用说明:官方 CSV 覆盖全部 117 个 CT 类名;少数类名与 TA2 标准命名存在差异(README 类表中以"TA2 name"列标注)。将分割输出接入电子病历或放射组学数据库时,建议以官方 CSV 为唯一映射依据,避免二次翻译引入术语漂移。
§2.2 临床任务背景
全身 CT 是现代放射学工作量最大的检查类型之一,从创伤急诊的全身扫描到肿瘤分期胸腹盆联合扫描,每天都在产生海量需人工解读的断层影像。解剖分割是几乎所有高级影像分析的第一步:要报告肝体积,先要圈出肝脏;要做放疗计划,先要勾画危及器官;要研究肌少症,先要定位第三腰椎水平的肌肉截面。
传统上这些勾画依赖放射科医师或剂量师逐层手绘,单个病例耗时可长达数十分钟,且不同勾画者之间存在可观的主观差异——同一器官由两名医师分别勾画,体积差异达到百分之几在文献中并不罕见。这种"标注瓶颈"直接限制了大样本影像定量研究的可行性:一个 1,000 例的队列,仅器官勾画一项就足以占去一名全职研究人员数月工时。
TotalSegmentator 将这一过程压缩到 GPU 上约一分钟、CPU 上数分钟(配合 --fast 与 --roi_subset 选项),并以 0.943 的平均 Dice 提供了接近人工一致性的基线质量,从而使大样本影像定量研究从"不可行"变为"日常工作流"。更重要的是,它把"全身覆盖"与"真实临床多样性"同时做到位:训练数据来自常规临床工作而非健康志愿者,涵盖不同年龄、异常、扫描仪、身体部位、序列与中心,这使模型在面对"脏"的真实数据时依然稳健——这正是大量单器官、小规模数据集模型落地的最大短板。
§2.3 临床任务定义
在本数据集语境下,"临床任务"指以解剖结构分割为中间步骤的定量影像任务:
| 任务类型 | 输入 | 输出 | 典型指标 | 临床决策角色 |
|---|---|---|---|---|
| 多结构语义分割 | CT 体数据(NIfTI/DICOM) | 117 类逐体素标签 | Dice、NSD/HD95 | 筛查与定量分析前置步骤 |
| 器官体积测量 | 分割掩膜 | 各结构体积(mm³/mL) | 与手工描画的 Bland-Altman 一致性 | 疗效评估与随访(RECIST 补充) |
| 体成分分析 | tissue_types 掩膜 | 肌肉/脂肪面积与衰减值 | L3 水平截面积、平均 HU | 营养风险分层、肌少症诊断研究 |
| 放疗 OAR 勾画 | CT + 分割掩膜 | 危及器官轮廓草案 | 与人工勾画的 Dice/修改时间 | 治疗计划辅助(人工终审) |
上述四类任务共享同一套底层分割输出——这正是"117 类一次到位"设计的临床意义:一次推理同时喂饱体积测量、体成分与放疗勾画三条产品线,而不是每条线各训各的模型。对研究者而言,这也意味着不同研究间的解剖定量指标具备天然可比性(同一类定义、同一套术语),避免了各研究自定义器官边界带来的不可比问题。
§2.4 患者人群画像
| 维度 | 描述 |
|---|---|
| 来源 | 巴塞尔大学医院 PACS 常规临床检查(随机抽样);MR 版本另含部分 IDC 来源图像 |
| 采集时间 | 2012、2016、2020 三个年份分层抽样(v1/v2 CT 数据集) |
| 年龄 | 儿童至老年均有覆盖;meta.csv 逐例记录 age 字段 |
| 性别 | 混合性别,meta.csv 逐例记录 gender 字段 |
| 种族 | 未在公开元数据中披露(单中心欧洲人群为主,见 §7.1 偏倚讨论) |
| 就医类型 | 常规临床检查(含增强/平扫、多部位、多病种);论文示例应用另用 4,004 例多创伤全身 CT |
人群解读:这是"真实世界队列"而非"健康志愿者队列"——它刻意保留了各种异常、伪影与协议差异,因此在其上训练的模型对临床脏数据更鲁棒;反过来,做正常参考值研究时需要自行剔除异常病例。
§2.5 临床价值
对放射科,自动分割把重复性勾画工作移出报告流程,使医师注意力集中于病灶本身;对放疗科,OAR 自动勾画显著缩短计划周期;对科研队列(如老龄化、肿瘤、代谢疾病),它提供了跨研究可比较的标准化解剖定量指标——论文的示例应用即在 4,004 例多创伤全身 CT 上量化了年龄与主动脉体积(rs = 0.64,P < .001)及躯干固有背肌平均衰减(rs = -0.74,P < .001)的相关性,展示了"一次分割、多结构复用"的研究范式。
从卫生经济学视角看,这套工具的价值在"边际成本近乎为零":一旦管道搭好,每新增一例 CT 的分割成本只是几分钟的机时,而不是几十分钟的人工。对于需要"全队列统一口径"的纵向研究(例如同一患者随访 5 年的肝体积曲线),标准化自动分割甚至比多次人工勾画更一致——后者受勾画者状态与经验影响,存在难以避免的批间漂移。
需要强调的是:该工具明确声明不是医疗器械、不用于临床诊断,所有临床用途必须经独立验证与监管审批。在科研与临床之间的这条边界,官方文档反复强调,本词条在 §6.10 MLOps 与 §7.4 伦理中也将持续呼应。
§2.6 金标准参考表
| 维度 | 内容 |
|---|---|
| 金标准划分 | v1:1,082 训练(90%)/ 57 验证(5%)/ 65 测试(5%);v2 公开数据:训练/验证与 v1 同受试者,测试例增加(meta.csv split 列逐例记录) |
| 标注方式 | 人工逐体素标注(基于 nnU-Net 辅助流程迭代校正),v2 对 8 个高误差类(股骨、肱骨、髋、心腔、主动脉、肝、脾、肾)做了系统性标签修正 |
| 标注者资质 | 巴塞尔大学医院影像研究团队(第一作者为资深影像物理师/研究员);未逐例披露标注者人数与背景 |
| 金标准性质 | 逐体素专家级参考标注(reference standard),非多读者多数投票;标注一致性的读者间实验未随数据集公开 |
使用提示:当你的研究需要"读者间一致性"作对照时,应自行设计小规模双读者子研究,而非假设官方标签等于共识金标准。对多数定量应用(体积测量、体成分),单专家参考标准的方差通常可接受;对需要亚毫米精度的场景(小结构边缘),建议在自有队列上估计标签方差后再解读模型指标。
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 复现论文基准 / 引用 104 类结果 | v1 数据集(Zenodo record 6802614) | 约 22 GB(v1 zip 规模,以 Zenodo 页面为准) | 论文与 v1 一一对应;类清单 104 类、划分与论文一致 |
| 训练最新模型 / 需要 117 类 | v2 数据集(Zenodo record 10047292) | 23.6 GB | 类数最多、标签质量最好、元数据最全;注意心腔类已移出 total 任务 |
| 快速探索 / 教学演示 | v2 小子集(102 例) | 约 2 GB 量级 | 官方提供的快速下载探索版,结构与全量一致 |
| MR 模态分割研究 | TotalSegmentator MRI(record 11367005) | 2.4 GB | 298 例 MR、56 类,配 total_mr 任务;不含脂肪/肌肉/面部 4 类 |
| 仅做推理不训练 | 不下载数据集,pip install TotalSegmentator |
权重数百 MB 至数 GB | 工具首次运行自动下载所需任务权重 |
§3.1 模态详情
- CT 成像:多层螺旋 CT 常规临床检查,涵盖平扫与多期增强、不同采集视野(头颈、胸、腹、盆、四肢及全身拼接)、不同层厚与重建核;所有训练数据统一重采样至 1.5 mm 各向同性分辨率。
- 厂商覆盖:Siemens、GE、Philips、Toshiba、Canon 五大主流厂商(v2 元数据含 scanner 字段),减少单一设备偏倚。
- 体数据形态:典型规模约 300 × 300 × 350 体素(逐例不同),原始 HU 值存储于
.nii.gz。 - MR 扩展:TotalSegmentator MRI 覆盖多厂商、多序列、多平面(轴/矢/冠)的临床 routine 采集,56 类标注。
采集协议多样性一览:
| 协议维度 | 覆盖情况 | 对 AI 训练的意义 |
|---|---|---|
| 对比期相 | 平扫与多期增强混合 | 模型需在无期相先验时正确分割,官方提供 totalseg_get_phase 辅助识别 |
| 采集视野 | 头颈/胸/腹/盆/四肢/全身拼接 | 训练 total 任务必须容忍部分结构缺失(视野外 = 全零掩膜) |
| 层厚/重建 | 多种层厚与重建核(统一重采样至 1.5 mm) | 兼容不同分辨率输入,推理时内部自动重采样 |
| 病理状态 | 大量异常病例(含重大异常) | 测试集"覆盖广泛临床数据且包含重大异常"是官方刻意设计 |
| 设备代际 | 2012/2016/2020 三代协议 | 捕捉设备代际演变,但精确采集日期未公开 |
§3.2 按子集样本数
| 子集 | 例数 | 说明 |
|---|---|---|
| v2 训练集 | 1,082 | 与 v1 训练+验证受试者一致(meta.csv split=train) |
| v2 验证集 | 57 | 同 v1 验证(split=val) |
| v2 测试集 | 89(1,228 − 1,139) | 比 v1 测试集(65 例)增加若干例;官方文档注明"v2 测试例比 v1 略多" |
| v1 全集 | 1,204 | 2012/2016/2020 三年采样,104 类 |
| 快速小子集 | 102 | 官方快速探索版 |
| MRI 数据集 | 298 | 其中 30 例标记为测试 |
| Aging study 应用集 | 4,004 | 论文示例应用(多创伤全身 CT,2011-2020),未随数据集公开 |
§3.3 数据格式
| 对象 | 格式 | 说明 |
|---|---|---|
| CT 影像 | ct.nii.gz |
原始 HU 值,1.5 mm 各向同性重采样 |
| 结构掩膜 | segmentations/<class_name>.nii.gz |
每类一个二值文件,类名即文件名(如 aorta.nii.gz) |
| 元数据 | meta.csv |
一行一例:image_id、age、gender、institute、study_type、split 等 |
| 工具输出 | 单类掩膜目录或 --ml 多标签 NIfTI |
多标签文件的类索引顺序 v1/v2 不同(见坑点 3) |
| 统计输出 | statistics.json | --statistics 生成:逐类体积(mm³)与平均强度 |
| 放射组学输出 | statistics_radiomics.json | --radiomics 生成(需 pyradiomics) |
| 期相识别输出 | contrast_phase.json | totalseg_get_phase 生成(需 xgboost) |
§3.4 存储大小
| 对象 | 大小 | 说明 |
|---|---|---|
| Totalsegmentator_dataset_v2.zip | 23.6 GB | Zenodo record 8367088 页面官方标称 |
| 解压后(v2.0.1,1,228 例 × 117 类掩膜) | 约 25-30 GB 量级 | 逐类独立掩膜文件数量庞大(每例最多 117 个小文件) |
| v2 快速小子集 | 约 2 GB 量级 | 102 例,结构与全量一致 |
| TotalSegmentator MRI 数据集 | 2.4 GB | 298 例 MR + 56 类掩膜 |
| 推理权重(按任务缓存) | 数百 MB 至数 GB | 首次运行自动下载至 ~/.totalsegmentator |
建议准备至少 60 GB 磁盘以容纳下载包、解压副本与推理输出;官方另提供 Dropbox 镜像以加速低速网络下载。批量推理产生的输出目录(每例一目录、每类一掩膜)与数据集本身同量级,脚本中应预留独立挂载点。
§3.5 标注方式
人工逐体素标注:团队基于深度学习辅助的迭代标注流程(模型预分割 + 人工校正)完成 117 类结构勾画,标注在 1.5 mm 重采样分辨率上进行。v2 相对 v1 对系统性标签错误做了修正(心肌轻度错位、肝内出血灶误标等),并声明"公开数据集标签质量优于 v1,但仍可能存在个别错误"。
| 标注环节 | 做法 | 质量控制 |
|---|---|---|
| 预分割 | 深度学习模型自动预填 | 大幅降低逐层手绘工时 |
| 人工校正 | 对预分割结果逐结构校正 | 排除 40 例"高度歧义无法标注"的检查 |
| 系统性修正(v2) | 对 femur、humerus、hip、心腔、aorta、liver、spleen、kidney 8 个类修正已知误差 | 官方文档逐类列出修正项 |
| 已知残留问题 | 肋骨起点缺失、肋软骨末端定义不清、结肠/小肠纠缠 | 官方"Still open problems"如实披露 |
§3.6 标注者资质与一致性
标注由巴塞尔大学医院放射与核医学科 Research and Analysis 部门团队完成,核心成员具备影像物理与医学影像研究背景;论文未逐例披露标注者数量与读者间一致性系数。使用者应将标签视为"单一专家团队参考标准"而非"多数共识标准",在小结构(肾上腺、前列腺、肾囊肿)上尤其需要抽检。
§3.7 采集周期
CT 数据采样自 2012、2016、2020 三个年份,跨度约 8 年,可捕捉扫描协议与设备代际的演变;精确采集日期未公开(仅年份分层)。Aging study 应用的 4,004 例多创伤 CT 采集于 2011-2020。MRI 数据集发布于 2024-05。
“三年分层"设计的意图是低成本覆盖协议演变:2012 与 2020 之间的重建算法、探测器排数与剂量水平差异巨大,混合三代数据训练出的模型对"新协议漂移"有天然缓冲。代价是无法回答任何需要精确时间的问题(如"2021 年协议变化后器官边界表现如何”),纵向研究需自行采集时间信息。
§3.8 地域覆盖
单中心:瑞士巴塞尔大学医院(欧洲人群为主)。官方通过"随机采样常规临床工作"保证病种、设备与协议的内部多样性,但地域与族群多样性受限,跨中心外部部署前应按 §7.3 做泛化评估。
MRI 版本在单中心之外补充了部分 IDC(Imaging Data Commons)来源图像以增加多样性(逐例记录于 meta.csv 的 source 列)——这一做法可视作对单中心限制的部分补救,使用 MR 数据做族群相关结论时建议按 source 列分层评估。
§3.9 设备规格
覆盖 Siemens、GE、Philips、Toshiba、Canon 五厂商的多代 CT 扫描仪;v2 的 meta.csv 增加 scanner 字段支持按设备分层的偏差分析。对比期相(平扫/动脉期/静脉期)混合存在,官方另提供 totalseg_get_phase 命令(基于 XGBoost)识别期相;totalseg_get_modality 可自动判别 CT/MR 模态,避免误用任务模型。
§3.10 深度溯源链
| 环节 | 内容 | 可核验载体 |
|---|---|---|
| 数据源 | 巴塞尔大学医院 PACS 常规临床 CT | 论文 Methods 节 |
| 伦理 | EKNZ BASEC Req-2022-00495 伦理豁免 | 论文 Methods 节 |
| 抽样 | 2012/2016/2020 三年随机抽样,1,368 例初筛 | 论文 Methods 节 |
| 质控 | 排除四肢 37、缺层 87、无法标注 40 | 论文 Methods 节 |
| 重采样 | 统一 1.5 mm 各向同性 | 论文 Methods 节 |
| 标注 | 人工逐体素,v2 系统性修正 8 类 | improvements_in_v2.md |
| 去标识化 | 元数据剥离 + defacing(v2 改进) | Zenodo 页面与 v2 说明 |
| 发布 | Zenodo v1 record 6802614 / v2 record 10047292(CC BY 4.0) | Zenodo 页面 |
| 工具 | GitHub Apache 2.0,权重随任务分发 | 官方 README |
§4 数据结构
§4.0 目录树
Totalsegmentator_dataset_v201/
├── meta.csv # 一行一例的元数据表
├── s0001/ # 受试者目录(sXXXX 递增编号)
│ ├── ct.nii.gz # CT 体数据(原始 HU 值)
│ └── segmentations/ # 该例全部结构掩膜
│ ├── adrenal_gland_left.nii.gz
│ ├── adrenal_gland_right.nii.gz
│ ├── aorta.nii.gz
│ ├── femur_left.nii.gz
│ ├── femur_right.nii.gz
│ ├── liver.nii.gz
│ ├── vertebrae_C1.nii.gz
│ ├── vertebrae_L5.nii.gz
│ └── ... # v2 每例最多 117 个掩膜文件
├── s0002/
│ ├── ct.nii.gz
│ └── segmentations/
├── s0003/
└── ... # 共 1,228 例
§4.1 DAIMS 字段字典
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| image_id | string | 受试者/检查唯一标识,与目录名一致 | s0001 | 主键,关联影像与元数据 | 无 | 无 | s0001-s1228 |
| age | integer | 年龄(岁) | 63 | 年龄分层分析、泛化评估 | 部分病例未记录(缺失即空值) | 空值 = 未披露 | 约 1-100 |
| gender | string | 性别 | m / f | 公平性分析 | 无 | 空值 = 未披露 | m、f、空 |
| institute | string | 匿名化机构代码 | inst1 | 中心效应分析 | 无 | 无 | 匿名代码 |
| study_type | string | 检查部位/范围 | abdomen | 按部位分层抽样 | 无 | 无 | 头颈/胸/腹/盆/全身等 |
| split | string | 官方划分 | train / val / test | 复现论文划分 | 无 | 无 | train、val、test |
| ct.nii.gz | NIfTI | CT 体数据,原始 HU | shape (300,300,350) | 模型输入 | 无 | 无 | HU 约 -1000~3000+ |
| segmentations/*.nii.gz | NIfTI | 每类一个二值掩膜 | liver.nii.gz | 分割监督标签/评测参考 | 个别类存在已知系统性误差(§6.5 坑点 7) | 无 | 0(背景)/1(结构) |
| scanner(v2) | string | 扫描仪厂商 | Siemens | 设备偏倚分析 | 无 | 空值 = 未记录 | Siemens/GE/Philips/Toshiba/Canon 等 |
| ct.nii.gz spacing | tuple | 体素物理间距 | (1.5, 1.5, 1.5) | 重采样与真实尺寸换算 | 无 | 无 | 训练数据统一 1.5 mm 各向同性 |
| 掩膜方向 | affine | NIfTI 方向矩阵 | LPS 正交 | 与 CT 同坐标系对齐 | 个别外源数据非正交(坑点 2) | 无 | 正交方向余弦 |
§4.2 标签分布
117 类按四大族组织,各类族代表性结构如下:
| 类族 | 数量(v1→v2) | 代表性结构 | 体素占比特征 |
|---|---|---|---|
| 器官 | 27 → 约 30 | 肝、脾、胰、双肾、肾上腺、肺叶、甲状腺、前列腺、肾囊肿(v2 新增) | 肝/肺/肾体积大;甲状腺、前列腺、肾上腺极小 |
| 骨骼 | 59 → 约 60 | C1-L5 逐节椎体、成对肋骨、髋骨、股骨、颅骨(v2 新增)、胸骨与肋软骨(v2 新增) | 全骨架合计占比高,单节椎体中等 |
| 肌肉 | 10 | 躯干固有背肌(左/右)、髂腰肌、臀大中肌等 | 双侧成对分布,体积中等 |
| 血管 | 8 | 主动脉、肺动静脉、上下腔静脉、门静脉、髂动静脉、臂头干等 | 管状细长结构,边缘 Dice 敏感 |
体素占比高度不均衡:躯干、肺、骨骼系统占据绝大多数体素,而甲状腺、前列腺、肾上腺、肾囊肿等小结构常不足千分之一体积——均值 Dice 会系统性偏向大类,评测时应同时报告逐类 Dice 与小类单独均值。
§4.3 关键统计
| 统计维度 | 数值 | 来源 |
|---|---|---|
| 公开 CT 例数(v2) | 1,228 | Zenodo record 8367088 |
| 类数(v2 total 任务) | 117 | 官方 README |
| 总大小 | 约 23.6 GB | Zenodo 页面 |
| 内部测试集平均 Dice(v1,65 例) | 0.943 | 论文 |
| 外部数据集 Dice(v1) | 0.932(对比模型 0.871,P < .001) | 论文 |
| 扫描仪厂商 | 5 家(Siemens/GE/Philips/Toshiba/Canon) | MedSeg 数据集页 |
| 官方工具月下载 | 约 87,300(截至 2026-08) | SkillFed PyPI 统计 |
| 最多掩膜文件总数 | 1,228 × 117 ≈ 143,676 | 按 v2 规模推算 |
官方 --statistics 选项可为任意推理结果输出逐类体积(mm³)与平均强度 JSON;--radiomics 进一步输出放射组学特征(需 pyradiomics),便于队列级统计与特征工程。
§4.4 数据层级
数据集层级为**检查(examination)→ 体数据(volume)→ 类(class)→ 体素(voxel)**四层:
| 层级 | 载体 | 主键/命名 | 与上层的对应关系 |
|---|---|---|---|
| 检查 | sXXXX 目录 | image_id(meta.csv 主键) | 一受试者一检查,无纵向多次检查公开 |
| 体数据 | ct.nii.gz | 固定文件名 | 一检查一 3D 卷,1.5 mm 各向同性 |
| 类 | segmentations/*.nii.gz | 类名即文件名 | 一检查最多 117 个同尺寸二值掩膜 |
| 体素 | NIfTI 数组元素 | 空间索引 (i,j,k) | 掩膜与 CT 逐体素对齐,坐标框架一致 |
切片语义不存在独立标注文件——切片级标签需训练时从 3D 卷逐层读取派生(如 kaiko eva 将 3D 卷按每 25 层切片采样转为 2D 多标签分类任务)。同理,这里没有"序列"层(不同于 MRI 的多序列数据),每检查恰好一个 CT 卷,逻辑更扁平。
§4.5 缺失值与信息性缺失编码
| 情形 | 编码方式 | 处理建议 |
|---|---|---|
| 元数据字段未披露 | meta.csv 中留空(如个别年龄缺失) | 年龄相关分析按缺失处理,勿填 0 |
| 结构在检查范围外 | 掩膜文件仍存在但全为 0 | 全零掩膜 = “该例不含此结构”,训练时按负样本计 |
| 类不在该版本清单 | 文件不存在(如 v2 无心腔类文件) | 读取前按版本类清单过滤,勿假设文件齐全 |
| 标注歧义(如结肠/小肠) | 官方文档声明部分病例标签本身不佳 | 评测时对已知问题类加脚注或单独报告 |
| 器官不完整(扫描视野截断) | 掩膜反映视野内真实边界,非完整器官 | 体积类统计前按 study_type 过滤或标记截断病例 |
§5 划分与使用建议
§5.1 官方划分
| 划分 | v1(论文口径) | v2 公开数据 | 说明 |
|---|---|---|---|
| 训练 | 1,082(90%) | 1,082 | v1 与 v2 训练+验证受试者一致 |
| 验证 | 57(5%) | 57 | 同上 |
| 测试 | 65(5%) | 89(1,228 − 1,139) | v2 测试例比 v1 略多(官方说明) |
| 合计 | 1,204 | 1,228 | meta.csv split 列逐例可查 |
官方划分直接内嵌于 meta.csv 的 split 列。论文测试集(65 例)“覆盖广泛临床数据且包含重大异常”,是官方基准数字(Dice 0.943)的唯一口径。复现论文数字必须使用该划分。
使用提示:读取 split 列后先做一次三集合的 image_id 唯一性与互斥性断言,再开始任何训练——这一行防御代码可以帮你躲开绝大多数划分相关事故(含坑点 8 的版本间泄漏)。
§5.2 社区惯例划分
社区工具链存在多种"再划分":如 kaiko eva 框架按文件名排序做 60%/20%/20%(737/246/245)切片级采样划分;竞赛与研究代码中也常见按受试者随机五折的自定义划分。这类划分方便默认管道,但与论文划分不可比——引用官方数字时必须使用官方 split,自建模型与文献对比时需明确声明划分口径。
§5.3 划分策略建议与泄漏风险
TotalSegmentator 每个受试者仅一个检查目录,"同一患者跨划分"的直接泄漏风险低于纵向队列数据集,但仍需注意三点:
- 版本间泄漏:v1 与 v2 共享全部训练/验证受试者。若用 v2 全集(含 v2 新测试例)训练、再在 v1 测试集(65 例)上报告,由于 v1 测试例 ⊂ v1 全集 ⊂ 与 v2 训练/验证受试者重叠的关系链,测试例极可能在训练中被见过。正确做法是 v2 工作流只使用 v2 自己的 split 列。
- 预训练权重污染:官方
total工具的预训练权重在训练集上拟合。若用它生成伪标签、再在同分布的官方测试集上评测"你的模型",性能会被系统性高估——伪标签蒸馏实验应使用从未参与任何训练的外部队列。 - 第三方划分混用:社区 60/20/20 划分与官方划分受试者重叠。跨论文比较时必须核对划分来源,同一报告内禁止"官方划分训练 + 第三方划分测试"的组合。
§5.4 交叉验证建议
若自建划分,建议按受试者(image_id)五折交叉验证并保持 study_type(检查部位)分层,确保全身拼接与局部检查在各折内分布一致;小类(肾囊肿、甲状腺、前列腺)每折均应出现,否则逐类指标波动剧烈。
具体操作:先按 study_type 分层抽样确定受试者折次,再在各折内部检查稀有类的例数下限(建议每折 ≥ 3 例;不满足时合并部位层或改用重复分层抽样)。随机种子固定并写入实验记录,保证五折结果可复现。
§5.5 外部验证建议
正式泛化结论至少接入一个非巴塞尔来源的队列(公开选项包括 AMOS、AbdomenCT-1K、BTCV 或自有数据),并按厂商/期相/年龄分层报告 Dice 衰减。论文自身示范了外部评估范式:在独立外部数据集上 TotalSegmentator 0.932 对另一公开模型 0.871(P < .001)。
分层报告建议的最小维度:检查部位(study_type)、期相(平扫/增强)、年龄组、扫描仪厂商。任一维度的 Dice 跌幅超过 3 个百分点即应标注为"该维度需谨慎",并在部署文档中写明适用边界。对外部数据集的类清单差异(如 AMOS 的 15 类与本数据集 117 类的映射关系)须逐一核对,避免"同名异义"的结构被错误对齐。
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
Google Colab / Kaggle 均可零配置试用工具推理(无需先下载数据集):
# Colab(T4 GPU)中约 2 分钟完成环境准备
!pip install TotalSegmentator
# 测试样例:下载官方示例并推理
!wget https://github.com/wasserth/TotalSegmentator/raw/master/resources/tests/reference_ct.nii.gz
!TotalSegmentator -i reference_ct.nii.gz -o seg_output
注意:首次运行会从 GitHub 下载任务权重至 ~/.totalsegmentator/nnunet/results;容器/集群环境请预下载(见坑点 5)。Colab 免费档 T4 显存足以运行 total 任务;若只想验证环境,先跑 --fast 或 --roi_subset 可以更快看到结果。Colab 会话结束即丢失权重缓存,重复实验建议把 TOTALSEG_HOME_DIR 指向 Google Drive 挂载目录。
§6.1 快速上手
本节代码假定你已把 v2 数据集解压到本地磁盘。开始前先确认三件事:目录结构与官方一致(受试者目录 + ct.nii.gz + segmentations/);meta.csv 在数据根目录;你至少准备了 10 例或官方 102 例小子集用于管道冒烟测试。
# ============================================================
# 目录结构预期:
# data_root/
# ├── meta.csv # 官方元数据(含 image_id、split 列)
# ├── s0001/ct.nii.gz + segmentations/*.nii.gz
# └── s0002/...
# data_root 拼接关系:data_root / image_id / ("ct.nii.gz" | "segmentations" / f"{cls}.nii.gz")
# 最小可用子集:官方 102 例小子集(快速验证管道),或任意 10 例 + meta.csv
# ============================================================
import pandas as pd
from pathlib import Path
DATA_ROOT = Path("/data/Totalsegmentator_dataset_v201")
meta = pd.read_csv(DATA_ROOT / "meta.csv")
train_ids = meta.loc[meta["split"] == "train", "image_id"].tolist()
print(f"训练集 {len(train_ids)} 例,首例:{train_ids[0]}")
# 官方工具一键推理(117 类 total 任务)
# 命令行:TotalSegmentator -i data_root/s0001/ct.nii.gz -o out/s0001
# Python API 等价:
from totalsegmentator.python_api import totalsegmentator
import nibabel as nib
img = nib.load(DATA_ROOT / "s0001" / "ct.nii.gz")
pred = totalsegmentator(img) # 返回多标签 NIfTI(117 类)
推理常用变体(均为官方支持的命令行形态):
# 只关心少数结构:GPU 提速约 5 倍、CPU 约 32 倍(官方数据)
TotalSegmentator -i ct.nii.gz -o out --roi_subset spleen colon brain
# CPU 或快速预览:3 mm 低分辨率模型
TotalSegmentator -i ct.nii.gz -o out --fast
# 心腔高清子任务(非商业许可类,见坑点 4)
TotalSegmentator -i ct.nii.gz -o out -ta heartchambers_highres
# 输出逐类体积与平均强度统计
TotalSegmentator -i ct.nii.gz -o out --statistics
# 3D 渲染预览(快速人工质检)
TotalSegmentator -i ct.nii.gz -o out --preview
§6.2 数据获取
| 渠道 | 链接 | 大小 | 适用 |
|---|---|---|---|
| Zenodo v2 全量 | https://zenodo.org/records/10047292 | 23.6 GB | 正式训练/评测(CC BY 4.0) |
| Dropbox 镜像 | 见 Zenodo 页面说明 | 同上 | 低速网络加速 |
| v1 数据集 | https://zenodo.org/record/6802614 | 以页面为准 | 复现论文 |
| 102 例小子集 | 见 v2 Zenodo 页面链接 | 小 | 教学与管道调试 |
| MRI 数据集 | https://zenodo.org/records/11367005 | 2.4 GB | MR 分割 |
# 下载并校验 v2 全量(md5: fd65f71cf3ef78c67a3740909ecef674 为 record 8367088 版本官方值)
wget https://zenodo.org/records/10047292/files/Totalsegmentator_dataset_v201.zip
md5sum Totalsegmentator_dataset_v201.zip # 与 Zenodo 页面 md5 比对
unzip -q Totalsegmentator_dataset_v201.zip -d /data/
无需注册、无需申请:开放下载,仅需遵守 CC BY 4.0 署名要求;受限子任务模型的许可号通过 totalseg_set_license -l aca_xxx 设置(免费非商业许可在官方渠道申请)。
下载实践建议:Zenodo 对大文件支持断点续传但高峰期较慢,国内网络可优先尝试 Dropbox 镜像;下载后务必核对 md5(校验失败的包解压会产生"看似完整实则损坏"的 NIfTI——v1 时代曾有损坏文件问题,v2 官方声明已修复,但传输损坏仍需自防)。
工具亦支持直接读 DICOM:输入参数既可以是单个 NIfTI 文件,也可以是"一个患者的全部 DICOM 切片目录(或 zip)",由工具内部转换——这在只有 PACS 导出原始数据的场景下省去一步预处理:
# 直接输入 DICOM 目录(一个患者一个目录)
TotalSegmentator -i /data/dicom/s0001/ -o out/s0001
# 对比期相识别(可选,需 pip install xgboost)
totalseg_get_phase -i ct.nii.gz -o contrast_phase.json
§6.3 预处理全流程
# 预处理三件事:HU 校验 → 方向校正 → 重采样
# 训练自建模型时建议对齐官方输入约定(1.5mm 各向同性、正常解剖方位)
import SimpleITK as sitk
import numpy as np
def preprocess_ct(ct_path: str, out_path: str):
img = sitk.ReadImage(ct_path)
arr = sitk.GetArrayFromImage(img) # (z, y, x)
# 1) HU 值校验:TotalSegmentator 模型假设输入为原始 HU
lo, hi = np.percentile(arr, [0.5, 99.5])
if hi < 200: # 多数腹部 CT 软组织窗远高于 200 HU
print(f"[警告] {ct_path} 强度范围异常(P99.5={hi:.0f}),"
f"疑似已被重缩放到 [0,1],请检查导出链路!")
# 2) 方向校正:统一到 LPS 正交方向(ITK 拒绝非正交方向余弦)
img = sitk.DICOMOrient(img, "LPS") if img.GetDimension() == 3 else img
# 3) 重采样至 1.5mm 各向同性(与官方训练数据一致)
orig_sp = img.GetSpacing()
ref_size = [int(round(o * s / 1.5)) for o, s in
zip(img.GetSize(), orig_sp)]
resampler = sitk.ResampleImageFilter()
resampler.SetOutputSpacing((1.5, 1.5, 1.5))
resampler.SetSize(ref_size)
resampler.SetOutputDirection(img.GetDirection())
resampler.SetOutputOrigin(img.GetOrigin())
resampler.SetTransform(sitk.Transform())
out = resampler.Execute(sitk.Cast(img, sitk.sitkFloat32))
sitk.WriteImage(out, out_path)
# preprocess_ct("data_root/s0001/ct.nii.gz", "processed/s0001_ct.nii.gz")
转 nnU-Net 格式再训练:官方仓库提供从本数据集生成 nnU-Net 输入格式与运行同款评测的示例脚本(resources/train_nnunet.md),建议直接复用而非手写转换。
从 DICOM 原始数据出发的完整链路(当目标数据不是 NIfTI 时):
# 1) DICOM → NIfTI(dcm2niix,保持原始 HU 与方向)
dcm2niix -z y -f %s -o nifti_out dicom_dir/
# 2) 方向标准化(坑点 2 的预防措施)
fslreorient2std nifti_out/series.nii.gz nifti_out/series_std.nii.gz
# 3) 官方工具直接推理(内部自动完成期相无关的标准化与重采样)
TotalSegmentator -i nifti_out/series_std.nii.gz -o seg_out
自训模型的预处理要点总结:与官方口径对齐(1.5 mm 各向同性、原始 HU、LPS 正交方向),任何一步偏离都要在实验记录中显式声明,否则与 0.943 的官方基准无从比较。
§6.4 PyTorch DataLoader 完整代码
# 完整可运行:官方划分读取 + 3D Dataset + DataLoader
# 依赖:pandas、nibabel、torch、scipy(或 torchinterp)
import pandas as pd
import nibabel as nib
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from pathlib import Path
class TotalSegmentatorDataset(Dataset):
"""读取官方 v2 数据集:1,228 例 CT + 117 类掩膜。
目录契约(与官方一致):
data_root/<image_id>/ct.nii.gz
data_root/<image_id>/segmentations/<class>.nii.gz
"""
def __init__(self, data_root, split="train", classes=None,
target_shape=(128, 128, 128)):
self.root = Path(data_root)
meta = pd.read_csv(self.root / "meta.csv")
self.ids = meta.loc[meta["split"] == split, "image_id"].tolist()
self.classes = classes or [
p.stem for p in sorted(
(self.root / self.ids[0] / "segmentations").glob("*.nii.gz"))]
self.target_shape = target_shape
@staticmethod
def _resize_volume(arr, shape):
zoom = [t / s for t, s in zip(shape, arr.shape)]
from scipy.ndimage import zoom
return zoom(arr, zoom, order=1).astype(np.float32)
def __len__(self):
return len(self.ids)
def __getitem__(self, idx):
sid = self.ids[idx]
ct = nib.load(self.root / sid / "ct.nii.gz").get_fdata()
ct = self._resize_volume(ct, self.target_shape)
# HU 标准化:窗位 40 / 窗宽 400 后线性缩放到 [-1, 1]
ct = np.clip(ct, -160, 240)
ct = (ct + 160) / 400.0 * 2 - 1
ct = torch.from_numpy(ct).unsqueeze(0) # (1, D, H, W)
masks = np.zeros((len(self.classes),) + self.target_shape,
dtype=np.uint8)
for i, cls in enumerate(self.classes):
f = self.root / sid / "segmentations" / f"{cls}.nii.gz"
if f.exists(): # 类缺失 = 该例不含此结构
m = nib.load(str(f)).get_fdata()
masks[i] = (self._resize_volume(m, self.target_shape) > 0.5)
return ct, torch.from_numpy(masks)
if __name__ == "__main__":
ds = TotalSegmentatorDataset("/data/Totalsegmentator_dataset_v201",
split="train",
classes=["liver", "spleen", "aorta"])
loader = DataLoader(ds, batch_size=2, num_workers=4, pin_memory=True)
for ct, mask in loader: # ct: (2,1,128,128,128)
print(ct.shape, mask.shape) # mask: (2,3,128,128,128)
break
实现说明:示例固定缩放到 128³ 以便小显存冒烟测试,正式训练请改回原始分辨率 + 滑窗或 patch 采样(nnU-Net 的默认做法);classes 传 None 时自动读取首例目录的全部类名(注意首例必须包含全部目标类,否则清单不完整);掩膜重采样使用最近邻等价的阈值化写法(order=1 后 > 0.5),避免线性插值产生非二值标签。
§6.5 坑点 8 个
⚠️ 坑点 1:输入 HU 值被重缩放导致"静默坏分割"(分类:预处理陷阱)
问题:模型假设输入为原始 CT 的 Hounsfield Unit 值;若 DICOM 转 NIfTI 或中间管道把强度重缩放到 [0,1],软组织/空气/骨骼的强度关系被破坏,模型输出大面积错误却不报任何错误,脏数据直接流入下游统计。
症状:分割结果出现"器官整体漂移"“皮肤及皮下组织整片被标为肌肉”,或某厂商数据 Dice 异常低而其他厂商正常;--preview3D 渲染图明显扭曲。
解决:
- 简单方法:推理前检查体数据直方图——正常 CT 的 P99.5 分位应在数百 HU 量级,若最大值 ≤ 1 即为重缩放数据,乘回原始窗(×重缩放系数或从 DICOM 重新导出)。
- 进阶方法:在数据加载层写死断言
assert arr.max() > 200 and arr.min() <= -500,不满足直接 fail-fast;官方 README 将"确认输入含原始 HU"列为坏分割第一检查项。- SOTA 方法:用
totalseg_get_modality(XGBoost 分类器)反向校验输入是否符合 CT 分布,并对每批数据落盘 HU 直方图用于审计。
参考:官方 README “Bad segmentations” 一节(https://github.com/wasserth/TotalSegmentator)。
⚠️ 坑点 2:方向余弦非正交 / 患者体位颠倒(分类:工程陷阱)
问题:模型在"正常解剖方位"(轴位脊柱在下、冠位头在上)上训练;NIfTI 的方向余弦若非正交,SimpleITK 直接抛异常,而方向"合法但颠倒"的影像则静默产出完全错位的分割。
症状:加载时报ITK ERROR: ITK only supports orthonormal direction cosines. No orthonormal definition was found!;或无报错但肝脏跑到左侧、椎骨标注出现在腹部空气区。
解决:
- 简单方法:按官方建议
pip install SimpleITK==2.0.2(修复过方向处理行为的版本)或运行fslreorient2std input.nii.gz output.nii.gz。- 进阶方法:用
sitk.DICOMOrient(img, "LPS")统一方向后再推理;推理前可视化中间三平面,肉眼确认"轴位脊柱在下、冠位头在上"。- SOTA 方法:写方向守门器——读取 affine 判定 RAS/LPS 与上下极性,自动重排轴序,并在批量管道中记录每例方向元数据。
参考:官方 README “Typical problems / ITK loading Error”(https://github.com/wasserth/TotalSegmentator)。
⚠️ 坑点 3:v1→v2 类清单漂移:–ml 类顺序变化、心腔与面部输出为空(分类:标签理解)
问题:v2 重训了所有模型并新增 33 类:多标签输出(
--ml)的类索引顺序与 v1 不同;心腔 6 类与面部从 total 任务移入heartchambers_highres、face子任务——total 输出里这些区域为空。
症状:升级工具后旧代码读多标签 NIfTI 得到"错类的掩膜"(索引-名称映射失效);跑完 total 发现 myocardium/atrium 全空,误判为分割失败。
解决:
- 简单方法:固定版本
pip install TotalSegmentator==1.5.7(v1 语义)或按 v2 官方索引表重写映射;v2 需要--v1_order选项可恢复 v1 顺序(但不包含 v2 新类)。- 进阶方法:从不硬编码索引,统一用
totalseg_info --list-tasks与官方 label mapping 动态解析类名;心腔需求改跑TotalSegmentator -i ct.nii.gz -o out -ta heartchambers_highres。- SOTA 方法:在 CI 中加入"类清单契约测试":对每个任务缓存预期类名集合,版本升级触发 diff 审查后再放行。
参考:官方 “Changes and improvements in TotalSegmentator v2”(https://github.com/wasserth/TotalSegmentator/blob/master/resources/improvements_in_v2.md)。
⚠️ 坑点 4:受限子任务模型的非商业许可陷阱(分类:工程陷阱)
问题:代码 Apache 2.0、数据集 CC BY 4.0 的"开放"印象容易让人忽略:
appendicular_bones、tissue_types、face、heartchambers_highres、vertebrae_body五个任务的模型权重仅限非商业使用;企业管道里一次顺手的-ta tissue_types可能构成许可违约。
症状:法律/合规审查时发现商业产品内嵌了非商业权重;或运行受限任务时要求设置许可号而流水线中断。
解决:
- 简单方法:商业环境只使用开放任务清单(total、lung_vessels、body、cerebral_bleed、hip_implant、coronary_arteries、pleural_pericard_effusion 等),在需求评审时冻结任务白名单。
- 进阶方法:需要受限任务时向作者申请免费学术许可或购买商业许可,用
totalseg_set_license -l aca_xxx激活;将许可号管理纳入密钥管理系统而非硬编码。- SOTA 方法:用自标注数据重训替代受限任务(官方提供 nnU-Net 重训路径与数据),把权重依赖收敛到 CC BY 4.0 数据集 + Apache 2.0 代码的自有资产。
参考:官方 README “Subtasks” 许可说明;3D Slicer 社区关于 v2 许可变更的公告(https://discourse.slicer.org/t/totalsegmentator-v2/32470/1)。
⚠️ 坑点 5:首次运行权重自动下载失败 / 离线集群不可用(分类:工程陷阱)
问题:首次运行从远程服务器下载任务权重到
~/.totalsegmentator/nnunet/results;在无外网的计算集群、防火墙内容器或并发任务同时下载时,会出现下载失败、半截权重或写权限冲突。
症状:报网络超时/SHA 校验失败;多节点同时首跑时相互覆盖缓存目录;挂载的只读 home 导致无法写入。
解决:
- 简单方法:在联网机器预下载后把
~/.totalsegmentator整目录拷贝到离线机器。- 进阶方法:用
totalseg_download_weights -t <task>显式预取;export TOTALSEG_HOME_DIR=/shared/cache/.totalsegmentator重定向到共享只读缓存,集群节点统一挂载。- SOTA 方法:将权重烘焙进 docker 镜像(官方提供
wasserth/totalsegmentator容器),或自建权重镜像源并监控版本与官方发布一致性。
参考:官方 README “Other commands / weights download”(https://github.com/wasserth/TotalSegmentator)。
⚠️ 坑点 6:CPU / 全分辨率推理超时与内存溢出(分类:工程陷阱)
问题:total 任务 1.5 mm 全分辨率模型对全身 CT 推理很重;CPU 或小显存 GPU 直跑会数小时不返回或 OOM,被误判为"模型质量问题"。
症状:单例跑数小时无输出;进程被 OOM killer 杀死;大批量管道吞吐远低于预期。
解决:
- 简单方法:CPU 环境加
--fast(3 mm 低分辨率模型);官方基准硬件为 RTX 3090,CPU 场景官方明确建议--fast或--roi_subset。- 进阶方法:只需要少数结构时用
--roi_subset spleen colon brain——官方数据:GPU 提速约 5 倍、CPU 约 32 倍、内存降 40%;再用--body_seg裁剪体区、--force_split三段拆分(小图像禁用,视野过小反而失败)、--nr_thr_saving 1限制保存线程内存。- SOTA 方法:队列服务化——GPU 批处理 +
--roi_subset分任务并发,按任务粒度缓存权重,吞吐对数级提升。
参考:官方 README “Resource Requirements” 与选项文档(https://github.com/wasserth/TotalSegmentator)。
⚠️ 坑点 7:已知标签系统性误差:肋骨起点、肋软骨末端、结肠 vs 小肠(分类:标签理解)
问题:官方文档坦承三类已知标注缺陷:肋骨近脊柱起点总缺一小段;肋骨在肋软骨端的边界定义不清;结肠与小肠在部分病例中纠缠导致 ground truth 本身混乱。把它们当作完美金标准会高估模型误差或错误归因。
症状:自训模型的 rib 类 Dice 恒定到不了 0.9 却找不出代码问题;结肠/小肠验证曲线剧烈震荡;逐例目检发现"模型预测正确但与 GT 不符"。
解决:
- 简单方法:评测报告对这三类加脚注单独解读;目检该类失败案例区分"标注错"与"预测错"。
- 进阶方法:用 v2 数据集(官方对 femur、humerus、hip、心腔、aorta、liver、spleen、kidney 等类做过系统性标签修正);对肋骨类改用容忍性指标(NSD 而非严格 Dice)。
- SOTA 方法:噪声鲁棒训练(对称交叉熵/标签平滑)或在清洗轮次中人工修正高风险类的 GT 后重训。
参考:官方 improvements_in_v2.md “Still open problems”(https://github.com/wasserth/TotalSegmentator/blob/master/resources/improvements_in_v2.md)。
⚠️ 坑点 8:第三方划分混用与版本间数据泄漏(分类:数据泄漏)
问题:官方划分(meta.csv split 列)、社区框架的 60/20/20 再划分、以及 v1/v2 两代数据集并存,三者受试者高度重叠;在同一篇报告里混用"官方划分训练 + 第三方划分测试"或"v2 全集训练 + v1 测试集评测",都会让测试例在训练中见过,性能虚高。
症状:论文/内部报告的 Dice 比官方基准(0.943)还高出数个点且无法复现;同一模型在不同文档中性能差异巨大。
解决:
- 简单方法:一条铁律——报告官方基准必须用 meta.csv 的 split 列;文档中明确记录"数据版本 + 划分来源 + 类清单版本"三元组。
- 进阶方法:写划分契约测试:加载训练与测试 image_id 集合断言交集为空;跨 v1/v2 工作流时显式删除对方版本的测试受试者。
- SOTA 方法:把数据集版本、split 与类清单哈希写入实验追踪(MLflow/W&B tags),任何指标回溯都能还原数据口径。
参考:官方 README “Train/validation/test split”(meta.csv 说明);kaiko eva 社区划分示例(https://kaiko-ai.github.io/eva/0.2/datasets/total_segmentator/)。
§6.6 数据增强
CT 解剖分割的增强策略比自然图像保守得多:任何破坏解剖合理性或 HU 语义的变换都会把模型带偏。下表是本数据集语境下的安全/危险清单:
| 类别 | 变换 | 说明 |
|---|---|---|
| 安全 ✅ | 随机重采样(1.0-3.0 mm) | nnU-Net 标准做法,模拟层厚差异 |
| 安全 ✅ | 镜像翻转(左右轴) | 人体近似左右对称(注意心脏偏左的轻微不对称可接受) |
| 安全 ✅ | 强度缩放/偏移、伽马变换、噪声/模糊 | 保持 HU 相对关系即可 |
| 危险 ❌ | 改变 HU 语义的强度归一化(如 min-max 到 [0,1] 后丢弃尺度) | 破坏模型对组织的强度先验(坑点 1) |
| 危险 ❌ | 前后/上下轴翻转与 90° 旋转 | 违反解剖方位(头脚/腹背倒置),方向类变换只允许小角度弹性形变 |
| 危险 ❌ | 各向异性重采样到非均匀 spacing | 与 1.5 mm 各向同性训练分布失配 |
增强决策原则:一切保持"解剖合理性 + HU 语义"的变换都安全;凡是破坏解剖方位先验或强度语义的变换,即便在自然图像里常见,在这里也是错的。nnU-Net 自带的增强组合(重采样、镜像、伽马、噪声、模糊)已经过官方验证,自训时优先复用该默认组合而非自行发明。
§6.7 模型推荐表
| 模型/路径 | 适用场景 | 依据 |
|---|---|---|
| TotalSegmentator 预训练模型(nnU-Net) | 直接推理、批量伪标注 | 官方权重,内部测试 Dice 0.943 |
| nnU-Net v2 重训 | 需要全类可商用权重或自定义类清单 | 官方提供重训与评测文档 |
| TotalSegmentator MRI(total_mr) | MR 模态应用 | 298 例 MR 专用权重 |
| 伪标签蒸馏 | 大规模无标注队列扩展 | 用 total 任务生成伪标签(避开官方测试集,见坑点 8) |
选型补充:以上路径按"合规自主性"递增——预训练权重最省力但受许可与版本约束,自训模型投入最大但完全自主。工程团队常见组合是"预训练做底 + 自训补位":核心开放类直接用官方权重,受限类或业务特有类用本数据集微调补齐。
重新训练时的两条经验:一是直接复用 nnU-Net 自配置(不要手工调网络超参),把精力花在数据划分与类清单设计上;二是把"哪些类来自官方清单、哪些是业务新增"写进模型卡,避免下游误把自定义类当成官方 117 类的一部分。
最后提醒:无论哪条路径,都应在交付物中固定"数据版本 + 工具版本 + 类清单"三元组——这是 TotalSegmentator 生态里最容易踩空的三格梯子,也是所有复现问题的第一排查点。
§6.8 硬件需求
| 场景 | 硬件 | 选项 | 预期体验 |
|---|---|---|---|
| GPU 全分辨率 | NVIDIA GPU(官方参考 RTX 3090) | 默认 1.5 mm | 全身 total 任务数分钟级 |
| GPU 快速 | 中端 GPU | --fast |
3 mm 模型,显著提速省显存 |
| CPU | 多核 CPU | --fast + --roi_subset |
单结构子集分钟级;全类不推荐 |
| 低内存 | 有限 RAM/显存 | --roi_subset + --nr_thr_saving 1 + --body_seg |
官方提供的内存削减组合 |
| 超大体数据 | 有限显存 | --force_split |
三段拆分顺序处理;小图像禁用(视野过小反而失败) |
软件依赖基线:Python ≥ 3.9、PyTorch ≥ 2.0.0(当前 2.x 系列)、SimpleITK、nibabel;--preview 需 xvfb。系统层面 Ubuntu、macOS、Windows 均支持。
§6.9 评估指标代码
# 逐类 Dice:与官方评测口径一致(对每个结构独立计算再取均值)
import numpy as np
import nibabel as nib
from pathlib import Path
def dice_per_class(gt_dir: Path, pred_dir: Path, classes):
results = {}
for cls in classes:
gt_f, pred_f = gt_dir / "segmentations" / f"{cls}.nii.gz", pred_dir / f"{cls}.nii.gz"
if not (gt_f.exists() and pred_f.exists()):
continue # 双方都缺失 = 该例不含此结构,跳过
gt = nib.load(str(gt_f)).get_fdata() > 0.5
pd_arr = nib.load(str(pred_f)).get_fdata() > 0.5
denom = gt.sum() + pd_arr.sum()
results[cls] = 1.0 if denom == 0 else 2.0 * (gt & pd_arr).sum() / denom
mean_dice = float(np.mean(list(results.values())))
small = [c for c in results if c in
("adrenal_gland_left", "thyroid_gland", "prostate")]
print(f"mean Dice = {mean_dice:.3f};小结构 Dice = "
f"{ {c: round(results[c], 3) for c in small} }")
return results
# dice_per_class(Path("data_root/s0001"), Path("pred/s0001"),
# ["liver", "spleen", "aorta", "thyroid_gland"])
评测纪律:一律按 meta.csv 官方 split 报告(见坑点 8);同时给出大类均值与小类均值,避免 0.94 级别的均值掩盖小结构失效。
除 Dice 外,分割研究常配合表面距离指标(HD95、NSD)。以下给出与 Dice 同一文件口径的补充计算:
# 95% Hausdorff 距离(HD95):基于表面体素坐标,单位 mm
# 依赖:scipy(KDTree);spacing 取自 NIfTI 头(1.5 mm 各向同性时即为 1.5)
import numpy as np
import nibabel as nib
from scipy.spatial import cKDTree
def hd95(gt_path: str, pred_path: str, spacing=(1.5, 1.5, 1.5)):
gt = nib.load(gt_path).get_fdata() > 0.5
pd_m = nib.load(pred_path).get_fdata() > 0.5
if gt.sum() == 0 or pd_m.sum() == 0:
return np.nan # 一侧为空:单独记录,勿静默丢弃
idx = lambda m: np.argwhere(m) * np.array(spacing)
d_gt_to_pd = cKDTree(idx(pd_m)).query(idx(gt))[0]
d_pd_to_gt = cKDTree(idx(gt)).query(idx(pd_m))[0]
return float(np.percentile(np.concatenate([d_gt_to_pd, d_pd_to_gt]), 95))
# hd95("data_root/s0001/segmentations/aorta.nii.gz",
# "pred/s0001/aorta.nii.gz")
指标选择建议:大类看 Dice 即可;管状与细小结构(主动脉、血管、椎弓根)建议加 NSD(表面 Dice,容差 1-2 mm)与 HD95;需要和临床体积测量对齐的任务直接报告体积相对误差(%)。
§6.10 MLOps 笔记
- 版本锁定:数据(v1/v2)、代码(PyPI 2.x)、类清单三者的组合决定输出语义,任何一处升级都触发回归测试(坑点 3、8)。
- 权重缓存:
TOTALSEG_HOME_DIR指向共享缓存;离线集群用totalseg_download_weights预取(坑点 5)。 - 隐私开关:工具默认发送匿名使用统计,医疗内网部署在
~/.totalsegmentator/config.json设send_usage_stats: false。 - 容器化:官方 docker 镜像
wasserth/totalsegmentator适合作为管道基座;业务侧在其上只叠加数据卷与任务白名单(坑点 4)。 - 合规:输出附"研究用途、非医疗器械"声明;任何临床使用前完成独立验证与监管流程。
- 观测性:为每条推理记录落盘(输入哈希、工具版本、任务名、类清单、耗时、统计 JSON),使任何一次历史分割可追溯到确切的数据与代码版本。
- 成本控制:批量任务按
--roi_subset拆分任务类型并发,权重按任务粒度缓存;全类 total 任务仅在有真实全类需求时运行。 - 质量抽检:按固定比例(如 1%)抽人审
--preview渲染图与关键类 Dice,作为管道健康度的长期哨兵指标。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 中心偏倚 | 全部 CT 来自巴塞尔单中心,协议/设备/人群反映当地实践 | 高 | 跨中心外部验证后再下泛化结论(§5.5) |
| 族群偏倚 | 欧洲人群为主,公开元数据无种族字段 | 高 | 下游应用按目标人群重校准;勿直接外推 |
| 年代偏倚 | 仅 2012/2016/2020 三个年份,协议代际不连续 | 中 | 新协议数据(如光子计数 CT)需微调 |
| 病种偏倚 | 常规临床抽样,稀有病与儿科例少 | 中 | 稀有场景增加定向采样并微调 |
| 类不平衡 | 小结构体素占比极低 | 中 | 逐类评测 + 小类加权损失 |
| 标注单源 | 单一团队标注,无读者间一致性公开 | 中 | 关键结论前做小规模双读者抽检 |
| 期相混合 | 平扫与增强混合且逐例期相未全披露 | 低 | 用 totalseg_get_phase 识别后分层分析 |
§7.2 标注质量
| 维度 | 状态 | 依据与建议 |
|---|---|---|
| 整体水平 | 高 | 内部测试 0.943 / 外部 0.932 的模型表现间接反映标签一致性 |
| 系统性修正 | v2 已完成 8 类 | femur、humerus、hip、心腔、aorta、liver、spleen、kidney |
| 已知残留问题 | 3 类 | 肋骨起点缺失、肋软骨末端、结肠/小肠纠缠(见坑点 7) |
| 读者间一致性 | 未公开 | 无多读者多数投票;当作单一专家团队参考标准使用 |
| 小结构风险 | 需抽检 | 肾上腺、前列腺、肾囊肿建议使用前人工抽检 |
| 版本差异 | v2 优于 v1 | 官方明确"公开数据集标签质量优于 v1" |
v2 对八个高误差类做过系统性修正,官方声明公开标签"仍可能存在个别错误";三类已知未解决问题(肋骨起点、肋软骨末端、结肠/小肠)见坑点 7。整体而言,在 0.943 平均 Dice 的语义下,标签质量足以支撑多数定量研究,但小结构与纠缠结构需要抽检。
§7.3 泛化性
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 跨厂商(同代技术) | 低 | 训练覆盖五厂商,论文强调真实世界多样性 |
| 跨地域/族群 | 中-高 | 单中心欧洲数据;无公开跨地域外部基准 |
| 新扫描协议(超低剂量、光子计数) | 中 | 未包含在训练分布,建议微调 |
| MR 输入误用 CT 模型 | 高 | CT/MR 任务分离,MR 用 total_mr 或 MRI 数据集 |
| 儿童小年龄组 | 中 | 儿童例少,小结构指标需单独评估 |
| 术后金属伪影/严重变形 | 中-高 | 标注阶段即排除了部分严重变形病例(40 例无法标注被排除) |
| 极低剂量筛查 CT | 中 | 训练分布以常规剂量为主,超低剂量噪声特征不同 |
| PET-CT 等联合模态的 CT 部分 | 低-中 | CT 成分仍适用;需注意 PET-CT 定位 CT 的视野与层厚差异 |
§7.4 伦理
回顾性研究获瑞士西北与中部伦理委员会伦理豁免(EKNZ BASEC Req-2022-00495);数据经去标识化(元数据剥离,v2 改进 defacing 降低侵入性)后以 CC BY 4.0 公开。工具明确声明非医疗器械、不用于临床;默认匿名使用统计可在内网关闭。
两点延伸提示:其一,伦理豁免覆盖的是原始数据发布方的研究使用;下游使用者在各自司法辖区(包括涉及人类受试者数据的中国境内研究)仍需自行完成所在机构的伦理审查。其二,CC BY 4.0 允许商业使用数据本身,但请注意许可豁免不等于临床合规——把分割结果用于临床决策需要独立的监管路径。
§7.5 公平性
无种族字段使公平性审计受限;性别与年龄可由 meta.csv 直接分层评估。建议下游使用者在自有队列上按性别/年龄分层报告小结构(甲状腺、前列腺)与体成分类的指标差异,避免在欠代表亚组上静默劣化。
# 公平性分层评测骨架:按 meta.csv 的 gender/age 分层报告逐类 Dice
import pandas as pd
def fairness_report(meta_csv, dice_results):
"""dice_results: {image_id: {class_name: dice}},来自 §6.9 逐类评测"""
meta = pd.read_csv(meta_csv)
df = pd.DataFrame([
{"image_id": sid, "class": cls, "dice": d,
"gender": meta.loc[meta.image_id == sid, "gender"].iloc[0],
"age": meta.loc[meta.image_id == sid, "age"].iloc[0]}
for sid, classes in dice_results.items()
for cls, d in classes.items()])
by_sex = df.groupby(["class", "gender"])["dice"].mean().unstack()
by_age = df.groupby(["class", pd.cut(df["age"], [0, 30, 60, 120])])["dice"].mean().unstack()
print("按性别:\n", by_sex, "\n按年龄组:\n", by_age)
return by_sex, by_age
公平性结论的下写标准:两个亚组均值 Dice 差异持续超过 2-3 个百分点,或小结构类在儿童组出现系统性失效,都应触发针对性数据补充或模型微调,而不是在总均值下掩盖。
§7.6 数据漂移
CT 硬件与协议持续演进(AI 重建、光子计数 CT、超低剂量协议),距最新采样年份 2020 已有数年。建议部署侧监控输入 HU 分布、层厚与厂商占比的漂移指标,超过训练分布时触发微调或人工复核比例上调。
# 漂移监控骨架:对生产输入按月统计 HU 分位与体素间距分布
import SimpleITK as sitk
import numpy as np
def drift_snapshot(img, month_key: str, store: dict) -> dict:
a = sitk.GetArrayFromImage(img)
store.setdefault(month_key, {"p1": [], "p99": [], "spacing": []})
store[month_key]["p1"].append(float(np.percentile(a, 1)))
store[month_key]["p99"].append(float(np.percentile(a, 99)))
store[month_key]["spacing"].append(img.GetSpacing()[2])
return store # 月度聚合后与训练分布基线比较,超过阈值告警
§7.7 DAIMS 数据质量评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | meta.csv 一行一例,字段清晰 |
| 2 | 唯一标识 | ✅ | image_id(sXXXX)全局唯一且与目录名一致 |
| 3 | 特殊字符 | ✅ | 类名小写下划线,无特殊字符与编码歧义 |
| 4 | 重复行 | ✅ | 无重复受试者目录与重复元数据行 |
| 5 | 缺失编码 | ✅ | 缺失即空值,无魔法值(如 -1、999) |
| 6 | 标签标识 | ✅ | 类名即文件名,label 语义自描述 |
| 7 | 罕见类分组 | ⚠️ | 肾囊肿、甲状腺等小类实例稀疏,无官方稀有类分组策略 |
| 8 | 偏倚评估 | ⚠️ | 单中心/年代/厂商偏倚明确存在,官方仅定性说明未系统量化 |
| 9 | 数据字典 | ✅ | 官方 README 类表 + meta.csv 字段 + 任务清单完备 |
| 10 | 信息性缺失解释 | ✅ | 全零掩膜(结构不在视野)与文件缺失语义官方有明确说明 |
| 11 | 设备记录 | ✅ | v2 元数据含 scanner 字段(五厂商) |
| 12 | 共线性 | ✅ | 影像+掩膜结构,不存在表格特征共线性问题 |
| 13 | 编码映射 | ✅ | TA2 标准命名 + 官方 SNOMED CT 映射 CSV |
| 14 | 时间戳处理 | ⚠️ | 仅年份分层(2012/2016/2020),无精确采集日期 |
| 15 | 划分建议 | ✅ | 官方 split 内嵌 meta.csv,复现路径清晰 |
| 16 | 泄漏讨论 | ⚠️ | 官方文档未系统讨论 v1/v2 版本间受试者重叠风险(需使用者自行规避) |
| 17 | 标签分布 | ✅ | 117 类清单公开,官方提供逐类评测结果与统计工具 |
| 18 | 测量偏倚 | ⚠️ | 三类已知标注系统误差(肋骨/结肠)仅文档声明,未提供误差量化 |
| 19 | 外部验证建议 | ✅ | 论文示范外部数据集对比(0.932 vs 0.871) |
| 20 | 版本记录 | ✅ | v1/v2 Zenodo 版本链 + 官方差异文档 improvements_in_v2.md |
| 21 | 预处理脚本 | ✅ | 官方提供 nnU-Net 格式转换与同款评测示例代码 |
| 22 | 合规要求 | ✅ | CC BY 4.0(数据)/ Apache 2.0(代码)/ 非商业子任务边界清晰 |
| 23 | 多模态对齐 | ❌ | CT 与 MR 为两个独立数据集,无逐例配对对齐 |
| 24 | 去标识化 | ✅ | 元数据剥离 + defacing,伦理豁免备案 |
DAIMS 评分:20.5 / 24
评分解读:优秀——文档化、版本管理、术语映射与合规边界在医学影像开源数据集中处于第一梯队(18 个 ✅、5 个 ⚠️、1 个 ❌);扣分集中在单中心带来的偏倚量化缺位、精确时间戳缺失、CT/MR 无配对对齐三处,均为该数据集形态的固有约束而非管理疏漏。
对你意味着什么:可以直接把它当生产级底座用——官方划分、转换脚本与版本链让你不需要从零搭数据工程;但在三件事上不能偷懒:一是跨中心/跨人群部署前必须做 §5.5 的外部验证并按 §7.5 分层审计;二是涉及精确时间线的纵向研究要接受"仅年份"的粒度上限;三是 CT/MR 联合应用需自行设计两套独立管线,不要期待配对样本。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| 独立外部分割对比集(论文内) | 论文指定独立数据 | 104 类整体分割 | Dice 0.932(对比模型 0.871,P < .001) | 较内部 0.943 下降约 1 个点 | 真实世界多样性带来的泛化稳健性得到外部印证 |
| 4,004 例多创伤全身 CT(aging study) | 巴塞尔大学医院(2011-2020) | 全结构体积/衰减定量 | 年龄与主动脉体积 rs = 0.64;与背肌衰减 rs = -0.74(均 P < .001) | 应用级验证(非 Dice) | 展示跨 1,010 例级队列的批量定量可行性 |
§8 基准性能与生态
§8.1 基准结果表
TotalSegmentator 数据集没有官方第三方排行榜(它本身即为工具型基准),下表汇总论文报告的基准数字与官方衍生模型。各数字因任务、划分与版本不同,不可直接横向比较。
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | TotalSegmentator v1(1.5 mm 全分辨率) | 内部测试集平均 Dice 0.943 | 2023 | nnU-Net 3D 全分辨率,1,204 例训练 | Wasserthal et al., 2023, Radiology: Artificial Intelligence 5(5):e230024. DOI 10.1148/ryai.230024 | https://github.com/wasserth/TotalSegmentator |
| 2 | TotalSegmentator v1(外部对比集) | Dice 0.932 vs 公开基线 0.871(P < .001) | 2023 | 同上 | Wasserthal et al., 2023, Radiology: Artificial Intelligence 5(5):e230024. DOI 10.1148/ryai.230024 | 同上 |
| 3 | TotalSegmentator MRI(total_mr) | 56 类 MR 多结构分割(30 例内部测试) | 2024 | nnU-Net,298 例 MR 训练 | Wasserthal & Akinci D’Antonoli, 2024, arXiv:2405.19492 | https://github.com/wasserth/TotalSegmentator |
数值不可直接比较的原因:第 1 行与第 2 行的划分不同(内部 65 例测试集 vs 独立外部数据集);第 1 行为 v1 的 104 类口径、当前工具已迭代至 v2 的 117 类;第 3 行为 MR 模态(不同影像物理与类清单)。引用任何一行时必须连同其划分与版本口径完整转述。
§8.2 SOTA 总结与选型建议
对于"给 CT 队列打解剖标签"这一需求,TotalSegmentator 预训练模型仍是默认首选:开箱即用、117 类覆盖、跨厂商稳健。需要商业部署受限类(四肢骨、组织类型、心腔高清、面部、椎体)时,优先评估官方许可或以本数据集自训 nnU-Net;追求架构创新的研究则把 1,228 例当作预训练语料,向下游小数据集任务迁移。
选型速查:
| 你的目标 | 建议路径 |
|---|---|
| 快速拿到 117 类掩膜 | pip install TotalSegmentator + total 任务(开放可用) |
| 商业产品需四肢骨/组织类型等受限类 | 申请商业许可,或用 CC BY 4.0 数据自训替代模型 |
| 复现/对比论文基准 | v1 数据集 + 官方 split + 官方评测脚本 |
| 预训练迁移学习 | v2 全量 1,228 例作预训练语料,下游冻结-微调 |
| MR 模态 | TotalSegmentator MRI 数据集 + total_mr 任务 |
§8.3 评测协议
官方口径:v1 测试集 65 例、逐类 Dice 后取均值,输入 1.5 mm 各向同性。官方仓库提供与论文一致的评测脚本与逐类结果表(论文补充材料 Figure 11 对应高分辨率模型逐类数字)。自评时保持:同一 split、同一重采样、同一类清单版本,并按 §6.9 区分大/小结构均值。
评测协议检查清单:
- 划分来源:meta.csv 官方 split(记录 v1 或 v2 口径)。
- 输入规格:1.5 mm 各向同性重采样、原始 HU、方向标准化。
- 类清单版本:v1(104 类)或 v2(117 类),不得混报。
- 指标口径:逐类 Dice 均值 + 小类子集均值(±表面距离指标)。
- 空掩膜语义:视野外结构(全零 GT)是否计入均值,须显式声明。
§8.4 相关数据集
| 数据集 | 关系 | 适用 |
|---|---|---|
| TotalSegmentator MRI | 同团队 MR 版本(298 例,56 类) | MR 分割与跨模态迁移 |
| AMOS 2022 | 腹部 CT+MR 配对 | 跨模态配对研究 |
| AbdomenCT-1K | 腹部大规模单类/多类 | 腹部器官域泛化对比 |
| BTCV | 经典腹部多器官小样本 | 快速原型与教学 |
| CT-ORG | 胸腹部 6 器官小样本 | 极轻量验证 |
| MRSegmentator | MR 模态衍生工具(复用本数据集训练) | MR 全身分割的跨模态迁移研究 |
§8.5 关键论文
- Wasserthal J, Breit H-C, Meyer MT, Pradella M, Hinck D, Sauter AW, Heye T, Boll DT, Cyriac J, Yang S, Bach M, Segeroth M. TotalSegmentator: Robust Segmentation of 104 Anatomic Structures in CT Images. Radiology: Artificial Intelligence 2023;5(5):e230024. DOI 10.1148/ryai.230024 — 主论文:数据集、基准与 aging study 示范。
- Isensee F, Jaeger PF, Kohl SAA, Petersen J, Maier-Hein KH. nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation. Nature Methods 2021;18:203-211. DOI 10.1038/s41592-020-01008-z — TotalSegmentator 的底层分割框架。
- Wasserthal J, Akinci D’Antonoli T. TotalSegmentator MRI(56 类全身 MR 分割). arXiv:2405.19492, 2024 — MR 扩展与 total_mr 任务。
说明:该数据集生态以工具链与官方衍生版本为核心,独立于官方团队的第三方基准论文数字请以原始出版物口径核对后再引用。这并非生态薄弱——相反,TotalSegmentator 的角色更接近"基础设施"而非"竞赛题目":大量后续研究把它的预训练权重当作起点,其贡献体现在下游论文的方法节而非排行榜上。
§8.6 社区活跃度
| 信号 | 数值/状态 | 时间口径 |
|---|---|---|
| GitHub 星标 | 约 2,932 | 截至 2026-08 |
| PyPI 月下载 | 约 87,300 | 截至 2026-08 |
| 最新 PyPI 版本 | 2.18.0(2026-08-12 发布) | 截至 2026-08 |
| Issue 响应 | 作者本人持续在 Issues 区回复 | 长期 |
| 新类征集 | 官方 Issue #1 长期公开征集未来新增类建议 | 长期 |
| 第三方集成 | 3D Slicer 扩展、MedSeg、totalsegmentator.com 在线版 | 持续可用 |
GitHub 主仓库(wasserth/TotalSegmentator)的活跃度在医学影像开源工具中处于第一梯队;3D Slicer 扩展与 totalsegmentator.com 在线演示构成零门槛使用入口,社区教程(含中文)在多个平台持续产出。
§8.7 生态快照
| 资源 | 类型 | 链接 | Star/规模(截至 2026-08) | 推荐理由 |
|---|---|---|---|---|
| wasserth/TotalSegmentator | 官方代码仓库 | https://github.com/wasserth/TotalSegmentator | 约 2,932 星 | 工具、文档、许可与坑点的唯一权威来源 |
| Zenodo v2 数据集 | 数据托管 | https://zenodo.org/records/10047292 | 23.6 GB / 1,228 例 | CC BY 4.0 正式版本(117 类) |
| Zenodo v1 数据集 | 数据托管 | https://zenodo.org/record/6802614 | 1,204 例 | 复现论文基准 |
| TotalSegmentator MRI | 数据 + 任务 | https://zenodo.org/records/11367005 | 2.4 GB / 298 例 | MR 模态官方数据 |
| 在线演示 | Web 服务 | https://totalsegmentator.com | — | 免安装快速验证 |
| 3D Slicer 扩展 | 桌面集成 | https://github.com/lassoan/SlicerTotalSegmentator | — | 交互式临床可视化 |
| SNOMED 映射 CSV | 术语资源 | 仓库 resources/totalsegmentator_snomed_mapping.csv | 117 类 | 对接临床信息系统 |
生态判断:从数据、工具、文档到集成入口,TotalSegmentator 已经形成"自洽闭环"——新用户从任一入口(pip、网页、Slicer、Zenodo)进入都能找到通向其他入口的路标。这种完整度是它区别于绝大多数学术数据集的核心竞争力。
§9 相关资源与引用
§9.1 官方资源清单
| 资源 | 链接 | 说明 |
|---|---|---|
| 代码仓库与文档 | https://github.com/wasserth/TotalSegmentator | 安装、任务清单、许可、典型问题的唯一权威来源 |
| v2 变更说明 | https://github.com/wasserth/TotalSegmentator/blob/master/resources/improvements_in_v2.md | v1→v2 类迁移、标签修正、许可变化的逐项清单 |
| nnU-Net 重训指南 | 仓库 resources/train_nnunet.md |
数据转 nnU-Net 格式 + 复现论文划分与评测 |
| 在线试用 | https://totalsegmentator.com | 免安装网页版推理 |
| 3D Slicer 扩展 | https://github.com/lassoan/SlicerTotalSegmentator | 桌面交互式分割与可视化 |
| v2 数据集 | https://zenodo.org/records/10047292 | 1,228 例、117 类(CC BY 4.0) |
| v1 数据集 | https://zenodo.org/record/6802614 | 1,204 例、104 类(复现论文用) |
| MRI 数据集 | https://zenodo.org/records/11367005 | 298 例 MR、56 类 |
| 主论文 | https://pubs.rsna.org/doi/10.1148/ryai.230024 | 正式同行评审版本 |
| 免费预印本 | https://arxiv.org/abs/2208.05868 | arXiv:2208.05868 |
| MRI 论文 | https://arxiv.org/abs/2405.19492 | TotalSegmentator MRI 方法论文 |
| SNOMED 映射 | 仓库 resources/totalsegmentator_snomed_mapping.csv |
117 类 → SNOMED CT 编码 |
§9.2 BibTeX 引用
以下 BibTeX 与官方 README 推荐引用格式一致(主论文),另附 nnU-Net 与 MRI 版本两条常用引用:
@article{wasserthal2023totalsegmentator,
author = {Wasserthal, Jakob and Breit, Hanns-Christian and Meyer, Manfred T. and
Pradella, Maurice and Hinck, Daniel and Sauter, Alexander W. and
Heye, Tobias and Boll, Daniel T. and Cyriac, Joshy and Yang, Shan and
Bach, Michael and Segeroth, Martin},
title = {TotalSegmentator: Robust Segmentation of 104 Anatomic Structures in CT Images},
journal = {Radiology: Artificial Intelligence},
volume = {5},
number = {5},
pages = {e230024},
year = {2023},
doi = {10.1148/ryai.230024}
}
@article{isensee2021nnunet,
author = {Isensee, Fabian and Jaeger, Paul F. and Kohl, Simon A. A. and
Petersen, Jens and Maier-Hein, Klaus H.},
title = {nnU-Net: a self-configuring method for deep learning-based
biomedical image segmentation},
journal = {Nature Methods},
volume = {18},
pages = {203--211},
year = {2021},
doi = {10.1038/s41592-020-01008-z}
}
@misc{wasserthal2024mri,
author = {Wasserthal, Jakob and Akinci D'Antonoli, Tugba},
title = {TotalSegmentator MRI: whole-body MR segmentation of 56 anatomical structures},
year = {2024},
note = {arXiv:2405.19492},
doi = {10.48550/arXiv.2405.19492}
}
§9.3 引用指南
使用数据集或工具均须引用主论文(Wasserthal et al., 2023);使用 MR 功能另引 arXiv:2405.19492;由于工具重度基于 nnU-Net,官方要求同时引用 nnU-Net(Isensee et al., 2021)。数据集版本与 Zenodo DOI(10.5281/zenodo.6802613 / 10.5281/zenodo.10047292)写入数据可用性声明。
可复用的数据可用性声明模板:
The TotalSegmentator dataset (v2.0.1, 1,228 CT examinations, 117 classes)
is publicly available under CC BY 4.0 at Zenodo
(https://doi.org/10.5281/zenodo.10047292). We used TotalSegmentator v2.x
for inference, and acknowledge Wasserthal et al., Radiology: Artificial
Intelligence 2023;5(5):e230024, as well as nnU-Net (Isensee et al.,
Nature Methods 2021), on which TotalSegmentator is built.
§10 AI 使用声明卡
§10.1 本页面使用的 AI 模型
| 模型 | 用途 | 提供方 |
|---|---|---|
| 大语言模型(AI 写作助手) | 初稿撰写、表格整理、代码示例生成 | 千方病案医学编辑部调用 |
§10.2 AI 参与范围
AI 参与本页面的文献检索辅助、结构组织、初稿撰写与代码示例起草;所有事实性内容(规模数字、版本历史、许可条款、基准数字)均以本页面引用的官方来源(论文、Zenodo、GitHub 官方文档)为据逐项核对,AI 输出不作为事实来源。
边界约定:AI 未生成任何临床建议;未推断数据集中未披露的信息(如读者间一致性系数、种族构成);代码示例经编辑部核对与官方文档口径一致,但未经大规模生产环境运行验证,使用前请自行冒烟测试。
§10.3 输入来源列表
- Wasserthal J, et al. TotalSegmentator: Robust Segmentation of 104 Anatomic Structures in CT Images. Radiology: Artificial Intelligence 2023;5(5):e230024. DOI 10.1148/ryai.230024
- Wasserthal J, et al. TotalSegmentator: robust segmentation of 104 anatomical structures in CT images. arXiv:2208.05868, 2022. DOI 10.48550/arXiv.2208.05868
- TotalSegmentator 官方 GitHub 仓库(README:任务、许可、资源需求、典型问题)。https://github.com/wasserth/TotalSegmentator
- Changes and improvements in TotalSegmentator v2(官方版本差异文档)。https://github.com/wasserth/TotalSegmentator/blob/master/resources/improvements_in_v2.md
- Dataset with segmentations of 117 important anatomical structures in 1228 CT images(Zenodo v2)。https://zenodo.org/record/8367088
- TotalSegmentator v2.0.1 数据集(Zenodo record 10047292)。https://zenodo.org/records/10047292
- TotalSegmentator v1 数据集(Zenodo record 6802614)。https://zenodo.org/record/6802614
- TotalSegmentator MRI dataset: 298 MRI images with segmentations for 56 anatomical regions(Zenodo record 11367005)。https://zenodo.org/records/11367005
- Wasserthal J, Akinci D’Antonoli T. TotalSegmentator MRI. arXiv:2405.19492, 2024
- Isensee F, et al. nnU-Net. Nature Methods 2021;18:203-211. DOI 10.1038/s41592-020-01008-z
- 3D Slicer 社区 TotalSegmentator v2 公告与许可讨论。https://discourse.slicer.org/t/totalsegmentator-v2/32470/1
- kaiko eva TotalSegmentator 数据集加载文档(社区划分示例)。https://kaiko-ai.github.io/eva/0.2/datasets/total_segmentator/
- MedSeg TotalSegmentator (v2) 数据集目录页(厂商覆盖与元数据补充)。https://app.medseg.ai/public-datasets/totalsegmentator-v2
- Awesome-Medical-Dataset: TotalSegmentator(文件结构与引用格式参考)。https://github.com/openmedlab/Awesome-Medical-Dataset/blob/main/resources/TotalSegmentator.md
来源优先级说明:事实冲突时以论文(1、2)与 Zenodo 官方页面(5-8)为最高优先级,官方仓库文档(3、4)次之,第三方目录页(12-14)仅作补充佐证;本页面所有硬数字均可溯源至前两级来源。
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与版本时间轴 | 千方病案医学编辑部 | 与论文摘要、Zenodo 版本页逐项比对 | ✅ 已通过 |
| §2 医学背景与术语映射 | 千方病案医学编辑部 | 对照 ICD-11/SNOMED 官方映射文件抽查 | ✅ 已通过 |
| §3 数据集规格 | 千方病案医学编辑部 | 与 Zenodo 官方页面逐项核对 | ✅ 已通过 |
| §4 DAIMS 数据字典 | 千方病案医学编辑部 | 抽样比对官方目录结构与 meta.csv 字段 | ✅ 已验证 |
| §5 划分与泄漏讨论 | 千方病案医学编辑部 | 与官方 split 文档及社区划分交叉核对 | ✅ 已通过 |
| §6 AI 就绪指南与 8 坑点 | 千方病案医学编辑部 | 坑点逐条溯源至官方 README/improvements 文档 | ✅ 已验证 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 24 项逐项复核并核对评分计算 | ✅ 已通过 |
| §8 基准与引用数表述 | 千方病案医学编辑部 | 与原文及官方仓库快照交叉比对 | ✅ 已验证 |
| §9 BibTeX 与官方资源 | 千方病案医学编辑部 | 按官方 README 引用格式逐字段核对 | ✅ 已通过 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§1.1 技术摘要、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核声明一致)。
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- nih-pancreas-ct — 共享标签:医学影像 / 医学图像分割 / CT
- abdomenct-1k — 共享标签:医学影像 / 医学图像分割 / CT
- word — 共享标签:医学影像 / 医学图像分割 / CT
- han-seg — 共享标签:医学影像 / 医学图像分割 / CT
- medical-decathlon — 共享标签:医学影像 / 医学图像分割 / CT
- mosmeddata — 共享标签:医学影像 / 医学图像分割 / CT
- ctspine1k — 共享标签:医学影像 / 医学图像分割 / CT
- pddca — 共享标签:医学影像 / 医学图像分割 / CT
- imagecas — 共享标签:医学影像 / 医学图像分割 / CT
- ctooth — 共享标签:医学影像 / 医学图像分割 / CT
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
