INFOBOX
| 数据集名称 | DeepLesion |
| 英文全称 | DeepLesion: Automated Mining of Large-Scale Lesion Annotations and Universal Lesion Detection with Deep Learning |
| 别名 / 简称 | DeepLesion、NIH DeepLesion、DeepLesion-v6 |
| 疾病分类 | 多器官多疾病覆盖。泛器官病灶检测:骨、腹部、纵隔、肝、肺、肾、软组织、盆腔 8 类。ICD-11 映射依病灶部位而定(如肺结节 2C25、肝肿瘤 2C12、肾肿瘤 2C90 等) |
| SNOMED CT | 非器官级标准映射——数据集覆盖 8 个解剖分区(详见 §2.2),病灶级别分类通过 LesaNet 171 类细粒度标签体系实现 |
| 数据模态 | 影像(CT 轴位扫描,512×512 重建,16-bit PNG) |
| AI 任务类型 | 目标检测(病灶检测)、多标签分类(病灶类型标注)、图像检索(病灶相似性检索)、弱监督学习、自监督预训练 |
| 样本总数 | 32,735 个病灶标注(32,120 张关键 CT 切片 + 3D 上下文切片,总计 928,020 张 PNG 图像) |
| 数据大小 | ~220 GB(56 个 zip 压缩包)/ 约 180 GB(解压后) |
| 数据格式 | PNG(16-bit 无符号整数,512×512 px)+ CSV(DL_info.csv 标注) |
| 许可证 | 无限制使用(Unrestricted usage);建议引用 JMI 2018 论文和原始下载链接 |
| 访问级别 | 开放(无需注册,直接下载) |
| DUO 标签 | NRES(无使用限制) |
| 语言 | 英文(放射学报告为 LesaNet NLP 标签提取源,报告原文不公开) |
| 首发日期 | 2018-07-20(Journal of Medical Imaging 在线发表) |
| 最后更新 | 2019-05-13(v6:新增 LesaNet 171 类语义标签) |
| 发布机构 | NIH Clinical Center, Imaging Biomarkers and Computer-Aided Diagnosis Laboratory(Ronald M. Summers 团队) |
| 官方主页 | https://nihcc.app.box.com/v/DeepLesion |
| 下载地址 | https://nihcc.app.box.com/v/DeepLesion(完整版 ~220GB)/ Kaggle: nih-deeplesion-subset(子集) |
| DOI | 10.1117/1.JMI.5.3.036501 |
| 引用次数 | 837+(Google Scholar,截至 2026-07) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方 PACS 临床书签标注 + 患者级划分 + 3D 上下文切片 + 完整 PyTorch 参考代码;扣分项:单中心来源、标注噪声(35 处已知错误 + 部分书签测量正常结构)、粗粒度病灶类型仅验证/测试集有标注 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(ICD-11 映射、临床任务定义、病灶类型分类体系)、§7 偏倚分析。
数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-07-29
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。DeepLesion 数据使用无限制,但建议在发表成果时引用 JMI 2018 论文并提供原始下载链接。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
DeepLesion 是美国国立卫生研究院(NIH)临床中心于 2018 年发布的全球第一个大规模泛器官 CT 病灶检测公开数据集,包含来自 4,427 名患者的 32,735 个病灶标注,分布在 10,594 次 CT 检查的 32,120 张关键切片中。
它的独特价值在于标注来源的真实临床性——所有标注并非事后人工标定,而是直接从放射科医生日常工作中的 PACS 书签(RECIST 直径测量记录)中自动挖掘而来。这种"零额外标注成本"的构建范式颠覆了传统医学数据集依赖大量人工标注的模式,催生了通用病灶检测(Universal Lesion Detection)这一全新的研究子领域。原始论文已被引用 830 余次,衍生出 3DCE、LesaNet、MULAN 等一系列影响力深远的后续工作。
你可以用它来:训练一个能同时检测骨、肝、肺、肾、淋巴结等全身多器官病灶的通用检测器、研究在"不完整标注"(并非所有病灶都被标出)条件下如何训练鲁棒的目标检测模型、或者利用 LesaNet 171 类细粒度语义标签进行病灶的精细化分类与相似病例检索。
§1.1 摘要
DeepLesion 通过从 NIH 临床中心 PACS(医学影像存档与通信系统)中自动挖掘放射科医生在日常阅片时标注的 RECIST 直径书签构建而成。每位放射科医生在 CT 阅片时会用电子书签标记有临床意义的病灶,记录其长径和短径——这些书签在 PACS 中积累了近 20 年,构成了 DeepLesion 的标注基础。研究团队从这些书签中提取了病灶的 2D 边界框和直径测量值,并将其映射到对应的 CT 关键切片上。数据集以 512×512 的 16-bit PNG 格式发布,每个病灶附带关键切片及其上下各 30mm 的 3D 上下文切片。标注信息通过 DL_info.csv 文件提供,包含 18 个字段,涵盖病灶坐标、直径、粗粒度类型(8 类)、患��性别与年龄、以及官方患者级数据划分。
§1.2 为什么重要
技术创新维度:DeepLesion 开创了"PACS 书签挖掘"这一数据构建新范式。在此之前,医学影像数据集的标注需要放射科医生专门回顾性地标注影像——耗时、昂贵且规模受限。DeepLesion 证明,放射科医生在日常工作中已经产生的临床标注(PACS 书签)可以被系统性地挖掘和复用,将数十年的临床积累一次性转化为 AI 训练数据。这种范式在 2020 年代催生了多个"从临床工作流中挖掘数据"的后续数据集。
应用影响维度:DeepLesion 催生了"通用病灶检测器"(Universal Lesion Detector)这一全新 AI 任务——与传统的一次只检测一种病灶(如单独的肺结节检测器、肝肿瘤检测器)不同,通用检测器要求一个模型在全身所有器官上同时检出所有类型的病灶。这一任务更接近放射科医生的真实工作方式(一次阅片发现全身所有异常),代表了 CADe 从"单器官单病种"向"全身通用筛查"的范式转变。
生态推动维度:基于 DeepLesion 涌现了 3DCE(3D 上下文增强检测)、LesaNet(171 类细粒度语义标注)、MULAN(检测+标注+分割多任务联合学习)、Deep Lesion Graphs(病灶间关系挖掘)等一系列高影响力工作。该数据集已成为病灶检测领域投稿论文的事实标准 benchmark,在 MICCAI、CVPR、TMI、MedIA 等顶会顶刊中被广泛使用。
§1.3 与同类数据集对比
| 数据集 | 病灶数 | 模态 | 病灶覆盖范围 | 标注方式 | 核心差异化 |
|---|---|---|---|---|---|
| DeepLesion | 32,735 | CT | 全身 8 个解剖分区(泛器官) | PACS RECIST 临床书签(自动挖掘) | 通用病灶检测范式开创者,3D 上下文切片 |
| LUNA16 | 1,186 | CT | 仅肺结节 | 4 名放射科医生共识标注 | 肺结节检测金标准,含恶性度评分 |
| LiTS | 130+ | CT | 仅肝肿瘤 | 3 名腹部放射科医生独立标注 + 共识 | 肝肿瘤分割金标准,含术后病理 |
| KiTS19 | 300 例 | CT | 仅肾肿瘤 | 临床专家手动勾画 | 肾肿瘤分割金标准 |
§1.4 版本演进
| 时间 | 事件 |
|---|---|
| 2017-10 | 论文预印本 arXiv:1710.01766 首次公开 DeepLesion 概念与技术细节 |
| 2018-07 | Journal of Medical Imaging 正式发表(Yan et al., JMI 2018);NIH 新闻稿宣布数据集公开发布 |
| 2018-10 | CVPR 2018 Deep Lesion Graphs 论文发表(病灶间关系挖掘) |
| 2018-09 | MICCAI 2018 3DCE 论文发表(3D 上下文增强检测器,官方 GitHub 代码发布) |
| 2019-04 | NIH Box 数据集更新至 v6(05/13/2019),新增 LesaNet 171 类语义标签 |
| 2019-06 | CVPR 2019 LesaNet 论文以 Oral 发表(精细病灶标注网络,AUC 0.9344) |
§1.5 典型应用场景
- 通用病灶检测:训练一个统一的检测器,在一次前向传播中检出 CT 图像中的骨、肝、肺、肾、淋巴结等所有类型病灶。
- 弱监督/半监督病灶检测:利用"不完整标注"(PACS 书签只标记代表性病灶,并非所有病灶都被标出)研究鲁棒的目标检测训练策略。
- 病灶细粒度分类与检索:利用 LesaNet 171 类语义标签体系,对病灶��行身体部位、类型、属性的精细化分类和基于图像的相似病灶检索。
- 跨器官迁移学习:研究在一个器官的病灶上训练的模型能否泛化到其他器官的病灶检测。
- 3D 上下文建模:利用提供的 3D 上下文切片,研究如何利用病灶周围的三维空间信息提升 2D 检测器的性能。
§2 医学背景
§2.1 疾病分类与 ICD-11 映射
DeepLesion 是一个泛器官数据集,不针对单一疾病。其 8 类粗粒度病灶类型(Bone/Abdomen/Mediastinum/Liver/Lung/Kidney/Soft Tissue/Pelvis)和 LesaNet 171 类细粒度标签体系覆盖了从胸腔到盆腔的广泛解剖区域。因此,ICD-11 疾病编码取决于具体病灶的病理性质和所在器官。以下是按病灶类型分组的典型 ICD-11 映射:
| 病灶类型 | 典型对应疾病 | ICD-11 编码 |
|---|---|---|
| 骨(Bone) | 骨转移瘤、骨肉瘤、硬化性病变 | 2B5Y(骨恶性肿瘤)/ FB80(骨硬化症) |
| 肝(Liver) | 肝细胞癌、肝转移瘤、肝囊肿 | 2C12.02(肝细胞癌)/ 2D80(肝转移瘤) |
| 肺(Lung) | 肺结节、肺转移瘤 | 2C25(支气管或肺恶性肿瘤) |
| 肾(Kidney) | 肾细胞癌、肾囊肿 | 2C90.0(肾细胞癌) |
| 纵隔(Mediastinum) | 纵隔淋巴结转移、淋巴瘤 | 2B60(非霍奇金淋巴瘤)/ 2D50(淋巴结转移) |
| 软组织(Soft Tissue) | 软组织肉瘤 | 2B5Z(软组织及其他骨外部位恶性肿瘤) |
| 腹部(Abdomen) | 腹腔转移、腹主动脉旁淋巴结 | 2D80(消化器官转移瘤) |
| 盆腔(Pelvis) | 盆腔转移、髂血管旁淋巴结 | 2D80(盆腔转移瘤) |
§2.2 SNOMED CT 映射
由于 DeepLesion 是泛器官数据集,SNOMED CT 映射按解剖分区提供:
| 数据集病灶类型 | SNOMED CT | SNOMED CT 术语(解剖结构) |
|---|---|---|
| Bone | 272673000 | Bone structure (body structure) |
| Abdomen | 818981001 | Abdominopelvic structure (body structure) |
| Mediastinum | 72410000 | Mediastinal structure (body structure) |
| Liver | 10200004 | Liver structure (body structure) |
| Lung | 39607008 | Lung structure (body structure) |
| Kidney | 64033007 | Kidney structure (body structure) |
| Soft Tissue | 87784001 | Soft tissue (body structure) |
| Pelvis | 12921003 | Pelvic region (body structure) |
§2.3 临床任务定义
DeepLesion 支持的核心临床任务是泛器官 CT 病灶检测(Universal Lesion Detection in CT)——类似于放射科医生在阅读全身 CT 扫描时"一次性找出所有有临床意义的异常发现"。该任务与传统单器官病灶检测(如"只找肺结节"或"只找肝肿瘤")的关键区别在于:
- 输入多样性:CT 扫描来自全身任意解剖部位,涵盖增强与非增强扫描,层厚和成像参数多样。
- 病灶多样性:病灶大小从数毫米(微小淋巴结)到十余厘米(巨大腹腔肿块)不等,形态各异。
- 标签不完整性:PACS 书签只标记了放射科医生当时认为有代表性的病灶,图像中可能存在未被标注的病灶("遗漏标注"问题)。
§2.4 患者人群
| 维度 | 特征 |
|---|---|
| 数据来源 | NIH 临床中心(单一机构),美国马里兰州贝塞斯达 |
| 采集时间 | 约 1998 年至 2016 年(跨度约 20 年) |
| 年龄分布 | 0-157 岁(中位数估计在 50-60 岁区间),含部分儿科病例(最低年龄 0 岁) |
| 性别比例 | 女性(F)略多于男性(M)——因原始数据包括乳腺和妇科相关检查 |
| 种族分布 | 未公开发布种族/民族数据 |
| 就医类型 | 门诊 + 住院混合(三级转诊学术医学中心) |
§2.5 金标准
| 数据划分 | 标注方式 | 标注者 | 金标准性质 |
|---|---|---|---|
| Train(70%) | PACS RECIST 临床书签自动挖掘 | NIH 放射科医生(日常临床工作) | 临床级(非专为研究目的标注),仅含粗粒度类型于 val/test |
| Valid(15%) | 同上 + 粗粒度病灶类型(8 类)人工标注 | NIH 研究团队 | 验证集病灶类型经人工复核 |
| Test(15%) | 同上 + 粗粒度病灶类型(8 类)人工标注 | NIH 研究团队 | 测试集病灶类型经人工复核 |
⚠️ 标注质量说明:PACS 临床书签是放射科医生为自身后续参考而标记的,并非专为机器学习研究制作。因此:(1) 并非所有病灶都被标注——医生通常只标记每个检查中最具代表性的病灶;(2) 少量书签测量的是正常结构(如正常大小的淋巴结);(3) 已知 35 处标注存在噪声(手动检查确认)。这些特性使得 DeepLesion 天然适合研究弱监督和噪声鲁棒学习。
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 完整病灶检测实验 / SOTA 复现 | 完整版(NIH Box) | ~220 GB | 含全部 32,735 病灶 + 3D 上下文 + 官方数据划分 |
| 快速原型验证 / 资源有限 | Kaggle 子集 | ~3.5 GB | 采样子集,适合初步探索和算法调试 |
| 细粒度病灶分类研究 | 完整版 + LesaNet 标签 | ~220 GB + GitHub | 从 CADLab/LesaNet 仓库获取 171 类语义标签 JSON |
| 基准性能对比(小型) | HuggingFace Balanced 2K | ~188 MB | 2,000 张经筛选和窗宽窗位归一化的样本,适合快速评估和 embedding 演示 |
§3.1 模态详细说明
CT 扫描:所有图像均为轴向(axial)CT 切片的二维 PNG 文件。原始数据来自 NIH 临床中心 PACS 中存档的全身 CT 检查,涵盖平扫和增强扫描,采集设备、层厚(1-5mm 不等)、重建算法多样。图像统一预处理为 512×512 像素,以 16-bit 无符号整数(uint16)存储。原始 Hounsfield Unit(HU)值需通过公式 HU = pixel_value - 32768 恢复。
§3.2 样本量统计
| 子集 | 患者数 | 检查数 | 关键切片数 | 病灶数 |
|---|---|---|---|---|
| 训练集(Train) | ~3,099 | ~7,416 | 22,494 | 22,915(70%) |
| 验证集(Validation) | ~664 | ~1,589 | 4,793 | 4,910(15%) |
| 测试集(Test) | ~664 | ~1,589 | 4,833 | 4,910(15%) |
| 总计 | 4,427 | 10,594 | 32,120 | 32,735 |
注:每个关键切片附带 30mm 上下范围的 3D 上下文切片,总计约 928,020 张 PNG 图像。
§3.3 数据格式详情
| 文件类型 | 格式 | 尺寸 | 说明 |
|---|---|---|---|
| CT 切片图像 | PNG(16-bit uint) | 512×512 px | 命名规则:{患者索引}_{检查索引}_{系列索引}/{切片索引}.png |
| 关键切片合集 | PNG(16-bit uint) | 512×512 px | Key_slices.zip:病灶标注叠加后的关键切片,供审查用 |
| 标注文件 | CSV | 32,735 行 × 18 列 | DL_info.csv:完整病灶元数据 |
§3.4 存储大小
| 版本/组件 | 压缩后大小 | 说明 |
|---|---|---|
| Images_png(56 个 zip) | ~180 GB | 所有 CT 切片(关键切片 + 3D 上下文) |
| Key_slices.zip | ~10 GB | 含病灶标注叠加的图像,供快速审查 |
| DL_info.csv | ~5 MB | 标注元数据 |
| 完整解压后 | ~250 GB+ | 需额外磁盘空间 |
§3.5 标注方式
DeepLesion 的标注过程与传统数据集有本质不同——它不是事后组织标注活动,而是从临床工作流中自动挖掘已有标注:
PACS 数据库(~20 年积累)
│
├── 放射科医生日常阅片 → RECIST 书签(病灶测量记录)
│ │
│ ▼
├── 书签挖掘与清洗
│ │
│ ├── 提取 RECIST 直径坐标 → 8D 向量 [x11,y11,x12,y12,x21,y21,x22,y22]
│ ├── 从直径推算 2D 边界框 → 4D 向量 [x1,y1,x2,y2]
│ ├── 定位��键 CT 切片 → Key_slice_index
│ ├── 提取 3D 上下文(关键切片 ± 30mm)→ Slice_range
│ └── 身体部位回归器 → 病灶相对身体位置(xz 坐标)
│
├── 人工质量筛查
│ └── 35 处噪声标注标记 → Possibly_noisy = 1
│
├── NLP 标签增强(2019 v6 更新)
│ ├── 从放射学报告文本中提取语义标签
│ └── LesaNet 171 类细粒度标签体系(身体部位 + 类型 + 属性)
│
└── 患者级数据划分
└── 随机划分 train/val/test = 70/15/15
§3.6 标注者信息
| 维度 | 详情 |
|---|---|
| 标注者 | NIH 临床中心放射科医生(日常临床工作产出) |
| 标注方式 | PACS RECIST 书签(临床常规操作,非专门标注活动) |
| 人工复核 | 32,735 个病灶中手动核查并标记 35 处噪声 |
| 粗粒度类型标注 | 仅验证集和测试集由研究团队标注 8 类(训练集标记为 -1) |
| 一致性检验 | 无——标注来源于日常临床记录,非多读者一致性设计 |
§3.7 数据采集时间范围
数据来自 NIH 临床中心约 20 年间(1998-2016)的临床 CT 检查存档,具体起止年份未在论文中精确给出。
§3.8 地理覆盖
单一机构:美国马里兰州贝塞斯达 NIH 临床中心,一家联邦政府运营的三级转诊研究型医院。
§3.9 采集设备
CT 扫描仪型号多样(跨 20 年多代设备),含多种制造商(Siemens、GE、Philips 等)。切片层厚 1-5mm,像素间距(spacing)因检查而异——DL_info.csv 第 13 列提供每张切片的 x、y、z 轴物理间距(mm/pixel)。
§3.10 深度溯源链
患者就诊(NIH Clinical Center, ~1998–2016)
│
├── CT 扫描采集(多代设备,多参数协议)
│ └── DICOM 存档到 PACS
│
├── 放射科医生阅片
│ ├── RECIST 直径测量 → PACS 书签(电子标注)
│ └── 放射学报告撰写 → EHR 系统(报告用于 LesaNet NLP 标签提取)
│
├── PACS 书签挖掘管线(Yan et al.)
│ ├── 书签提取与去重
│ ├── 关键切片定位
│ ├── DICOM → PNG 转换(512×512, 16-bit, uint16)
│ ├── 3D 上下文切片提取(±30mm)
│ └── 脱敏处理(去除 DICOM 头中的 PHI)
│
├── 质量控制
│ ├── 35 处噪声标注标记
│ └── 粗粒度 8 类标注(val/test 集)
│
├── 数据发布(2018-07,NIH Box)
│ └── 56 个 zip 分包 + DL_info.csv + README.pdf
│
└── v6 更新(2019-05)
└── LesaNet 171 类语义标签(NLP 从放射学报告提取)
§4 数据结构详解
§4.0 目录树预览
DeepLesion/
├── Images_png/ # 所有 CT 切片图像(16-bit PNG)
│ ├── 000001_01_01/ # 子文件夹:{患者索引}_{检查索引}_{系列索引}
│ │ ├── 103.png # {切片索引}.png(关键切片及上下文切片)
│ │ ├── 104.png
│ │ ├── ...
│ │ └── 115.png
│ ├── 000001_02_01/
│ ├── ...
│ └── 004427_XX_XX/
├── Key_slices.zip # 病灶标注叠加的关键切片(审查用)
├── DL_info.csv # 主标注文件(32,735 行 × 18 列)
├── DL_save_nifti.py # 2D PNG → 3D NIfTI 子卷转换脚本
├── batch_download_zips.py # 批量下载 56 个 zip 文件的 Python 脚本
├── readme.pdf # 官方说明文档(版本 v6)
├── FAQ.pdf # 常见问题
├── changelog.txt # 更新日志
└── MD5_checksums.txt # 文件完整性校验
§4.1 DAIMS 标准化数据字典(DL_info.csv)
DL_info.csv 每行对应一个病灶标注,共 32,735 行。以下是 18 列的完整字段定义:
| 列序号 | 字段名 | 数据类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|---|
| 1 | File_name | string | 文件名。将末尾下划线替换为 / 或 \ 即得子文件夹路径 | 000001_01_01_109.png |
图像加载路径 | 无 | — | {patient}_{study}_{series}_{slice}.png |
| 2 | Patient_index | int | 患者索引(从 1 开始) | 1 |
患者级分组/划分 | 无 | — | 1–4,427 |
| 3 | Study_index | int | 该患者的第几次检查(从 1 开始) | 3 |
纵向随访分析 | 无 | — | 1–26 |
| 4 | Series_ID | int | DICOM 序列 ID | 1 |
序列级组织 | 无 | — | 1–5 |
| 5 | Key_slice_index | int | 病灶所在的关键切片索引(从 1 开始) | 109 |
定位关键帧 | 无 | — | 1–1,140+ |
| 6 | Measurement_coordinates | string (8 numbers) | RECIST 双径坐标 [x11,y11,x12,y12,x21,y21,x22,y22],前 4 个是长轴,后 4 个是短轴 | 233.537,95.0204,234.057,106.977,... |
病灶精确测量 | 临床书签定位偏差(数像素级) | — | float, 8D |
| 7 | Bounding_boxes | string (4 numbers) | 从 RECIST 直径推算的 2D 边界框 [x1,y1,x2,y2] | 226.169,90.0204,241.252,111.977 |
目标检测 ground truth | 直径-方框近似误差 | — | int/float, 4D |
| 8 | Lesion_diameters_Pixel | string (2 numbers) | 长轴和短轴的像素长度 | 11.9677,5.10387 |
病灶大小统计 | 像素级测量误差 | — | float, 2D |
| 9 | Normalized_lesion_location | string (3 numbers) | 病灶中心相对于身体的归一化位置(xz 坐标由自监督身体部位回归器预测) | 0.44666,0.283794,0.434454 |
病灶空间分布分析 | z 坐标为近似值 | — | [0,1], 3D |
| 10 | Coarse_lesion_type | int | 病灶粗粒度类型。仅在 val/test 集标注,训练集为 -1 | 3(纵隔) |
病灶分类标签 | 粗粒度划分有主观性 | -1 = 未标注(训练集) | -1 或 1–8 |
| 11 | Possibly_noisy | int | 是否可能为噪声标注 | 0 |
数据清洗标记 | 仅标记了手动查验的 35 处 | 0 = 未标记为噪声 | 0 或 1 |
| 12 | Slice_range | string (2 numbers) | 提供的上下文切片范围(关键切片上方和下方) | 103,115 |
3D 上下文加载 | 受扫描起止位置限制 | — | int, 2D |
| 13 | Spacing_mm_px | string (3 numbers) | x、y、z 轴的物理间距(mm/pixel),第 3 个值即层间距 | 0.488281,0.488281,5 |
物理尺寸归一化 | DICOM 头解析精度 | — | float, 3D |
| 14 | Image_size | string (2 numbers) | 图像尺寸(宽 × 高,像素) | 512,512 |
固定值验证 | 无 | — | 通常 512,512 |
| 15 | DICOM_windows | string (2 numbers) | DICOM 窗宽窗位(min~max,HU 单位) | -175,275 |
HU 值窗口归一化 | 不同扫描协议变化大 | — | HU 范围 |
| 16 | Patient_gender | string (1 char) | 患者性别 | F(女性) |
人口统计分组 | 无 | — | F 或 M |
| 17 | Patient_age | float | 患者年龄(岁) | 62 |
人口统计/偏倚分析 | 年龄偏移(脱敏) | 0 = 未记录或新生儿 | 0–157 |
| 18 | Train_Val_Test | int | 官方患者级随机数据划分 | 3(测试集) |
标准实验划分 | 无 | — | 1(train)/ 2(val)/ 3(test) |
§4.2 标签分布统计
粗粒度 8 类病灶分布(基于 val+test 集标注统计):
| 类型编号 | 病灶类型 | 大致占比 | 典型病灶示例 |
|---|---|---|---|
| 1 | 骨(Bone) | ~15% | 骨转移瘤、硬化性病变、溶骨性病变 |
| 2 | 腹部(Abdomen) | ~10% | 腹腔转移、腹主动脉旁淋巴结 |
| 3 | 纵隔(Mediastinum) | ~12% | 纵隔淋巴结肿大、纵隔肿块 |
| 4 | 肝(Liver) | ~8% | 肝细胞癌、肝转移瘤、肝囊肿 |
| 5 | 肺(Lung) | ~25% | 肺结节、肺转移瘤、肺门淋巴结 |
| 6 | 肾(Kidney) | ~5% | 肾细胞癌、肾囊肿 |
| 7 | 软组织(Soft Tissue) | ~10% | 皮下结节、肌肉内肿块 |
| 8 | 盆腔(Pelvis) | ~15% | 髂血管旁淋巴结、盆腔肿块 |
§4.3 关键字段描述性统计
- 病灶大小:长径范围约 3–200+ mm,中位数约 15–25 mm,均值约 20–30 mm。微小病灶(短径 < 10mm)占显著比例,是检测难点。
- 每张图像病灶数:1–3 个(大多数为 1 个)。
- 每患者检查次数:1–26 次(中位数约 2–3 次),支持纵向随访分析。
- 层间距:1–5 mm 不等,大多数为 5 mm。
- 窗宽窗位:因检查协议不同而异,常见设定为 [-175, 275](软组织窗)或 [-1500, 500](肺窗)。
§4.4 数据层级关系
患者(Patient) # 4,427 人
├── 检查(Study) # 每患者 1–26 次
│ ├── 序列(Series) # 每检查 1–5 个序列
│ │ ├── 关键切片(Key Slice) # 病灶所在的核心切片
│ │ ├── 上下文切片(Context Slices) # 关键切片 ± 30mm
│ │ └── 病灶标注(Lesion Annotation) # 每关键切片 1–3 个病灶
§5 数据划分与使用建议
§5.1 官方数据划分
DeepLesion 提供患者级随机划分(Patient-level Random Split),确保同一患者的所有 CT 检查都在同一个子集中——从根本避免数据泄漏:
- 训练集(Train = 1):~70% 患者,22,494 张关键切片,22,915 个病灶
- 验证集(Validation = 2):~15% 患者,4,793 张关键切片,4,910 个病灶
- 测试集(Test = 3):~15% 患者,4,833 张关键切片,4,910 个病灶
- 35 处噪声标注分布在全部三个子集中
§5.2 划分策略与注意事项
| 策略 | 推荐度 | 说明 |
|---|---|---|
| 官方患者级划分(Train_Val_Test 列) | ⭐⭐⭐ 强烈推荐 | 标准基准,确保与其他论文可比 |
| 按病灶类型分层划分 | ⚠️ 仅进阶 | 训练集无粗粒度类型标签(全为 -1),无法按类型分层 |
| 按检查层面划分 | ❌ 不推荐 | 同一患者的多次检查可能跨越不同子集,造成患者级泄漏 |
§5.3 数据泄漏风险
⚠️ 病灶级 vs 患者级划分:同一患者的同一检查中可能有多张图像包含病灶,必须按 Patient_index 分组而非按文件名随机 shuffle。如果按图像级随机划分,同一患者的 CT 切片可能分布在训练集和测试集中,导致假性高性能(信息泄漏)。
§5.4 交叉验证建议
由于数据集已提供官方验证集,推荐直接使用 train/val/test 三集合进行实验。若需要更稳健的评估,建议使用患者级 5 折交叉验证——按 Patient_index 分组而非按病灶分组。注意:训练集约 22K 图像需要较大 GPU 显存(推荐 ≥ 24GB),交叉验证的训练时间将是单次的 5 倍。
§6 AI 就绪指南
§6.1 快速上手
# ========================================
# DeepLesion 快速上手 — PyTorch 版
# 环境要求: torch>=2.0, torchvision, pandas, numpy
#
# ⚠️ 目录结构预期:
# 请将下载的 56 个 zip 文件解压至 ./DeepLesion/ 目录,确保以下结构:
# ./DeepLesion/
# ├── Images_png/ # 子文件夹/PNG 切片
# ├── DL_info.csv # 标注文件
# └── DL_save_nifti.py # 2D→3D 转换脚本
#
# DL_info.csv 的 File_name 列格式如 "000001_01_01_109.png"
# 将末尾下划线替换为 / 即得相对路径:
# "000001_01_01/109.png" → 拼接为 "./DeepLesion/Images_png/000001_01_01/109.png"
# ========================================
import os
import pandas as pd
import numpy as np
from PIL import Image
import torch
from torch.utils.data import Dataset, DataLoader
class DeepLesionDataset(Dataset):
"""
DeepLesion Dataset for lesion detection.
Each item returns: (image_tensor [1,512,512], bbox [x1,y1,x2,y2], lesion_type, meta)
"""
def __init__(self, csv_path, img_root, split=None, transform=None):
self.df = pd.read_csv(csv_path)
self.img_root = img_root
self.transform = transform
# Apply patient-level split filter
if split is not None:
split_map = {''''''''''''''''train'''''''''''''''': 1, ''''''''''''''''val'''''''''''''''': 2, ''''''''''''''''test'''''''''''''''': 3}
self.df = self.df[self.df[''''''''''''''''Train_Val_Test''''''''''''''''] == split_map[split]].reset_index(drop=True)
def __len__(self):
return len(self.df)
def __getitem__(self, idx):
row = self.df.iloc[idx]
# Parse file path: replace last underscore with /
fname = row[''''''''''''''''File_name'''''''''''''''']
subfolder = ''''''''''''''''_''''''''''''''''.join(fname.rsplit(''''''''''''''''_'''''''''''''''', 1)[0].split(''''''''''''''''_'''''''''''''''')[-3:])
slice_name = fname.rsplit(''''''''''''''''_'''''''''''''''', 1)[1]
img_path = os.path.join(self.img_root, subfolder, slice_name)
# Load 16-bit PNG, convert HU: hu = pixel - 32768
img = np.array(Image.open(img_path)).astype(np.float32) - 32768.0
# Normalize to [-1024, 3071] and clip (common window for CT)
img = np.clip((img + 1024) / 4095.0, 0.0, 1.0)
img = torch.from_numpy(img).unsqueeze(0) # [1, H, W]
# Parse bounding box [x1,y1,x2,y2]
bbox_str = row[''''''''''''''''Bounding_boxes'''''''''''''''']
bbox = np.array([float(x) for x in bbox_str.split('''''''''''''''','''''''''''''''')])
# Parse lesion type (val/test only, -1 for train)
lesionevent-blocked= row[''''''''''''''''Coarse_lesion_type'''''''''''''''']
# Additional meta
meta = {
''''''''''''''''patient_id'''''''''''''''': row[''''''''''''''''Patient_index''''''''''''''''],
''''''''''''''''spacing'''''''''''''''': [float(x) for x in row[''''''''''''''''Spacing_mm_px_''''''''''''''''].split('''''''''''''''','''''''''''''''')],
''''''''''''''''gender'''''''''''''''': row[''''''''''''''''Patient_gender''''''''''''''''],
''''''''''''''''age'''''''''''''''': row[''''''''''''''''Patient_age''''''''''''''''],
''''''''''''''''diameters'''''''''''''''': [float(x) for x in row[''''''''''''''''Lesion_diameters_Pixel_''''''''''''''''].split('''''''''''''''','''''''''''''''')],
}
if self.transform:
img = self.transform(img)
return img, torch.from_numpy(bbox), lesion_type, meta
# ===== 使用示例 =====
dataset = DeepLesionDataset(
csv_path=''''''''''''''''./DeepLesion/DL_info.csv'''''''''''''''',
img_root=''''''''''''''''./DeepLesion/Images_png'''''''''''''''',
split=''''''''''''''''train''''''''''''''''
)
loader = DataLoader(dataset, batch_size=8, shuffle=True, num_workers=4)
for images, bboxes, types, metas in loader:
print(f"Batch shape: {images.shape}") # [8, 1, 512, 512]
print(f"BBoxes: {bboxes[0]}") # [x1, y1, x2, y2]
print(f"Lesion type: {types[0]}") # -1 for train, 1-8 for val/test
break
§6.2 数据获取
| 获取方式 | 链接 | 大小 | 说明 |
|---|---|---|---|
| 官方 NIH Box(完整版) | https://nihcc.app.box.com/v/DeepLesion | ~220 GB(56 个 zip) | 主下载源,推荐使用 batch_download_zips.py 批量下载 |
| Kaggle 子集 | https://www.kaggle.com/datasets/kmader/nih-deeplesion-subset | ~3.5 GB | 适合快速浏览和原型验证 |
| HuggingFace Balanced 2K | https://huggingface.co/datasets/HemanthTavva/deeplesion-balanced-2k | ~188 MB | 2,000 张 8-bit 预归一化样本 |
| Academic Torrents | https://academictorrents.com/details/… | ~220 GB | 备用镜像 |
下载建议:使用官方提供的
batch_download_zips.py脚本批量下载 56 个 zip 文件。下载后请核对 MD5_checksums.txt 中的校验值。解压后建议删除原始 zip 文件以节省磁盘空间(约 180 GB zip + ~250 GB 解压)。
§6.3 预处理管道
# ========================================
# DeepLesion 完整预处理管道
# ========================================
import numpy as np
from PIL import Image
def load_16bit_png(path):
"""加载 16-bit PNG 并转换为 HU 值"""
pixel = np.array(Image.open(path)).astype(np.float32)
hu = pixel - 32768.0 # 恢复 Hounsfield Unit
return hu
def apply_ct_window(hu, window_center=40, window_width=400):
"""应用 CT 窗宽窗位归一化"""
w_min = window_center - window_width // 2
w_max = window_center + window_width // 2
hu_clipped = np.clip(hu, w_min, w_max)
normalized = (hu_clipped - w_min) / (w_max - w_min)
return normalized
def load_3d_context(img_root, subfolder, key_slice, slice_range_str, spacing=None):
"""
加载病灶的 3D 上下文切片堆叠
slice_range_str 格式如 ''''''''''''''''103,115'''''''''''''''' → 加载切片 103 到 115
"""
start, end = map(int, slice_range_str.split('''''''''''''''',''''''''''''''''))
slices = []
for s in range(start, end + 1):
path = os.path.join(img_root, subfolder, f"{s}.png")
if os.path.exists(path):
hu = load_16bit_png(path)
normalized = apply_ct_window(hu)
slices.append(normalized)
if len(slices) == 0:
# Fallback: just load key slice
path = os.path.join(img_root, subfolder, f"{key_slice}.png")
hu = load_16bit_png(path)
slices = [apply_ct_window(hu)]
return np.stack(slices, axis=0) # [D, 512, 512]
def normalize_spacing(bbox_px, spacing_mm_px):
"""将像素坐标归一化为毫米"""
bbox_mm = bbox_px.copy()
bbox_mm[0] *= spacing_mm_px[0] # x
bbox_mm[1] *= spacing_mm_px[1] # y
bbox_mm[2] *= spacing_mm_px[0]
bbox_mm[3] *= spacing_mm_px[1]
return bbox_mm
# ===== 预处理流程示例 =====
def preprocess_pipeline(row, img_root):
"""对单行 DL_info.csv 数据执行完整预处理"""
# 1. 解析文件路径
fname = row[''''''''''''''''File_name'''''''''''''''']
subfolder = ''''''''''''''''_''''''''''''''''.join(fname.rsplit(''''''''''''''''_'''''''''''''''', 1)[0].split(''''''''''''''''_'''''''''''''''')[-3:])
key_slice = int(fname.rsplit(''''''''''''''''_'''''''''''''''', 1)[1].replace(''''''''''''''''.png'''''''''''''''', ''''''''''''''''''''''''''''''''))
# 2. 加载 3D 上下文
spacing = [float(x) for x in row[''''''''''''''''Spacing_mm_px_''''''''''''''''].split('''''''''''''''','''''''''''''''')]
volume = load_3d_context(img_root, subfolder, key_slice,
row[''''''''''''''''Slice_range''''''''''''''''], spacing)
# 3. 解析标注
bbox_px = np.array([float(x) for x in row[''''''''''''''''Bounding_boxes''''''''''''''''].split('''''''''''''''','''''''''''''''')])
bbox_mm = normalize_spacing(bbox_px, spacing)
return volume, bbox_px, bbox_mm
§6.4 框架加载
# ===== PyTorch DataLoader(推荐)=====
from torch.utils.data import DataLoader
dataset = DeepLesionDataset(''''''''''''''''./DeepLesion/DL_info.csv'''''''''''''''',
''''''''''''''''./DeepLesion/Images_png'''''''''''''''', split=''''''''''''''''train'''''''''''''''')
train_loader = DataLoader(dataset, batch_size=8, shuffle=True,
num_workers=4, pin_memory=True,
collate_fn=lambda batch: tuple(zip(*batch)))
# ===== TensorFlow DataLoader =====
import tensorflow as tf
def tf_parse_fn(row):
# ... (similar parsing logic)
return image, bbox
tf_dataset = tf.data.Dataset.from_tensor_slices(df.to_dict(''''''''''''''''list''''''''''''''''))
tf_dataset = tf_dataset.map(tf_parse_fn).batch(8).prefetch(tf.data.AUTOTUNE)
§6.5 常见坑点
⚠️ 坑点 1:像素值未减 32768 导致 HU 值错误(分类:预处理陷阱)
问题:图像以 uint16 格式存储,直接读取后的像素值范围是 [0, 65535],而非 CT 的 Hounsfield Unit。必须减去 32768 才能获得真实 HU 值(范围约 [-1024, 3071])。
症状:训练 loss 异常高、模型完全不收敛、输出结果与非 CT 图像特征相似。
解决:
hu = pixel.astype(np.float32) - 32768.0。如需窗宽窗位归一化,推荐软组织窗[-175, 275]或通用范围[-1024, 3071]。参考:readme.pdf §Introduction。
⚠️ 坑点 2:文件名路径拼接逻辑错误(分类:工程陷阱)
问题:DL_info.csv 的 File_name 列格式为
000001_01_01_109.png,实际文件结构为000001_01_01/109.png——需要将最后一个下划线替换为/。症状:
FileNotFoundError或加载到错误的图像。解决:使用
fname.rsplit(''''''''''''''''_'''''''''''''''', 1)[0]获取目录名,fname.rsplit(''''''''''''''''_'''''''''''''''', 1)[1]获取文件���。注意:是rsplit(''''''''''''''''_'''''''''''''''', 1)而不是split(''''''''''''''''_'''''''''''''''')然后取最后一部分——因为切片索引中不含下划线但患者/检查/系列��引合并时使用了下划线。参考:readme.pdf, DL_info.csv 第一节。
⚠️ 坑点 3:训练集无粗粒度病灶类型标签(分类:标签理解)
问题:Coarse_lesion_type 列在训练集中全为 -1,仅在验证集和测试集中有实际标注(1-8)。直接在训练集上做病灶分类会得到无意义的结果。
症状:训练集分类 loss 异常、模型输出始终预测同一个类别。
解决:(1) 目标检测任务不受影响——使用边界框(Bounding_boxes 列)而非类型标签;(2) 若需病灶分类,可加载 LesaNet 171 类语义标签(从 CADLab/LesaNet GitHub 获取);(3) 或仅在 val/test 集上评估分类性能。
⚠️ 坑点 4:病灶标注不完整(并非所有病灶都被标出)(分类:标签理解)
问题:PACS 书签只标记放射科医生当时认为有代表性的病灶,CT 图像中可能存在未被标注的病灶。这会导致模型在"遗漏标注"区域产生假阳性,但假阳性未必是真正的错误——可能是模型检测到了未被标注的真实病灶。
症状:模型在测试集上 FPs(假阳性)偏高,但目视检查发现部分 “FPs” 实际上是未被标注的真实病灶。
解决:(1) 使用 FROC 而非 mAP 作为主要评估指标;(2) 考虑使用 Lesion-Harvester(Cai et al., TMI 2021)等迭代挖掘未标注病灶的方法;(3) 在论文中明确讨论"不完整标注"对评估的影响。
参考:Yan et al. JMI 2018, §Limitations; Lesion-Harvester: Cai et al., IEEE TMI, 2021.
⚠️ 坑点 5:层间距差异导致 3D 各向异性(分类:预处理陷阱)
问题:CT 扫描的 xy 平面像素间距与 z 轴层间距差异巨大——xy 间距通常为 0.3–0.9 mm,而 z 轴层间距为 1–5 mm。直接使用 3D 卷积而不做重采样会导致严重的各向异性问题。
症状:3D CNN 性能不如 2D CNN(因为 z 轴分辨率严重不足),或 3D 模型在薄层 CT 上表现好但在厚层 CT 上急剧下降。
解决:(1) 使用 2.5D 方法(如 3DCE 的多切片特征融合)而非全 3D 卷积;(2) 若必须用 3D CNN,先做 z 轴插值重采样到统一间距;(3) 按层间距对数据分组,分析不同层间距下的性能差异。
参考:Yan et al., MICCAI 2018 (3DCE); Spacing_mm_px_ 列提供每张图像的精确间距。
⚠️ 坑点 6:部分书签测量的是正常结构而非病灶(分类:标签理解)
问题:根据官方文档,“少量书签实际上测量的是正常结构,如正常大小的淋巴结”。这些"伪病灶"在训练中会成为噪声标签。
症状:模型在正常淋巴结区域反复产生假阳性。
解决:(1) 手动标记的 Possibly_noisy 字段(35 处)只覆盖了已知问题中的一小部分;(2) 考虑对短径小于 10mm 的病灶进行过滤(正常淋巴结通常 < 10mm);(3) 使用标签平滑或噪声鲁棒损失函数(如 Generalized Cross Entropy)。
⚠️ 坑点 7:DICOM 窗宽窗位多样性导致 HU 范围不一致(分类:预处理陷阱)
问题:DL_info.csv 第 15 列提供的 DICOM 窗宽窗位因扫描协议而异——软组织窗、肺窗、骨窗的 HU 范围差��巨大。如果所有图像使用统一的窗宽窗位归一化,部分病灶可能无法被正确可视化。
症状:某些病灶类型(如肺结节在软组织窗下几乎不可见)的检测性能异常低。
解决:(1) 使用多窗口策略——将同一图像分别用软组织窗、肺窗、骨窗处理,作为三通道输入;(2) 3DCE 等方法使用通用窗口 [-1024, 3071] 作为预处理范围;(3) 按病灶类型分析最佳窗口设置。
§6.6 数据增强
| 增强方法 | 安全性 | 说明 |
|---|---|---|
| 随机水平翻转(RandomHorizontalFlip) | ✅ 安全 | CT 轴向切片左右翻转不改变解剖语义 |
| 随机旋转(±15°内) | ✅ 安全 | 小角度旋转模拟患者体位偏差 |
| 随机缩放(0.9–1.1×) | ⚠️ 谨慎 | 缩放改变了病灶的物理尺寸感知,可能影响尺寸敏感任务 |
| 随机亮度/对比度 | ✅ 安全 | 模拟不同扫描协议的 HU 差异 |
| 随机垂直翻转 | ❌ 禁止 | 上下翻转颠倒了解剖方向(左右 vs 前后) |
| 重度随机裁剪 | ❌ 禁止 | 可能切掉小病灶 |
§6.7 模型推荐
| 方法 | Backbone | 推荐场景 | 关键特性 | 参考 |
|---|---|---|---|---|
| 3DCE | VGG-16 + R-FCN | 入门基线,2D+3D 融合 | 3D 上下文增强,官方代码开源 | Yan et al., MICCAI 2018 |
| Faster R-CNN (3 slices) | ResNet-50 | 简单基线,资源有限 | 直接 3 通道输入,训练快速 | Yan et al., JMI 2018 |
| 3DCE_CS_Att | VGG-16 + 空间注意力 | 中等精度 | 上下文+空间注意力融合 | Li et al., MICCAI 2019 |
| MULAN | ResNet-50 + FPN | 多任务学习 | 检测+标注+分割联合训练 | Yan et al., MICCAI 2020 |
| FCOS | ResNeXt-101 | Anchor-free 检测 | 简化检测流程,对小病灶友好 | Xu et al., 2021 |
| P3D | 自监督 3D 预训练 | 当前 SOTA 候选 | 变维度 3D 预训练 | SOTA 2023 |
§6.8 计算资源建议
| 配置 | 最低要求 | 推荐配置 |
|---|---|---|
| GPU 显存 | 12 GB(batch_size=4) | ≥ 24 GB(batch_size=8–16, V100/A10) |
| 磁盘空间 | ~500 GB(下载 + 解压 + 预处理输出) | ~1 TB(含多版本和中间结果) |
| 单 epoch 训练时间 | ~2–4 小时(V100, Faster R-CNN) | ~6–8 小时(3DCE, 27 slices) |
| 完整训练(50 epochs) | ~4–8 天(单 GPU V100) | ~2–3 天(4×V100 分布式) |
§6.9 评估指标
# ========================================
# DeepLesion 标准评估指标:FROC 计算
# FROC = Free-response Receiver Operating Characteristic
# 核心指标:Sensitivity @ various FPs per image
# ========================================
import numpy as np
def compute_froc(all_boxes, all_gt_boxes, iou_threshold=0.5, fp_rates=[0.5, 1, 2, 4, 8, 16]):
"""
计算 FROC 灵敏度。
Args:
all_boxes: list of np.arrays, each [N, 5] (x1,y1,x2,y2,score)
all_gt_boxes: list of np.arrays, each [M, 4] (x1,y1,x2,y2)
iou_threshold: IoU 阈值(默认 0.5)
fp_rates: 评估的假阳性率列表(单位:per image)
Returns:
sensitivities: dict, {fp_rate: sensitivity}
"""
n_images = len(all_boxes)
sensitivities = {}
# 收集所有预测和真值
all_scores = []
all_tp_flags = []
for preds, gts in zip(all_boxes, all_gt_boxes):
if len(preds) == 0:
continue
scores = preds[:, 4]
order = np.argsort(-scores)
for idx in order:
all_scores.append(scores[idx])
# Check if this prediction matches any ground truth
max_iou = 0
for gt in gts:
iou = compute_iou(preds[idx, :4], gt)
max_iou = max(max_iou, iou)
all_tp_flags.append(1 if max_iou >= iou_threshold else 0)
all_scores = np.array(all_scores)
all_tp_flags = np.array(all_tp_flags)
order = np.argsort(-all_scores)
tp_cumsum = np.cumsum(all_tp_flags[order])
fp_cumsum = np.arange(1, len(order) + 1) - tp_cumsum
fp_per_image = fp_cumsum / n_images
for fp_rate in fp_rates:
idx = np.searchsorted(fp_per_image, fp_rate, side=''''''''''''''''right'''''''''''''''') - 1
if idx >= 0:
sensitivities[fp_rate] = tp_cumsum[idx] / sum(len(g) for g in all_gt_boxes)
else:
sensitivities[fp_rate] = 0.0
return sensitivities
def compute_iou(box1, box2):
"""计算两个边界框的 IoU"""
x1 = max(box1[0], box2[0])
y1 = max(box1[1], box2[1])
x2 = min(box1[2], box2[2])
y2 = min(box1[3], box2[3])
inter = max(0, x2 - x1) * max(0, y2 - y1)
area1 = (box1[2] - box1[0]) * (box1[3] - box1[1])
area2 = (box2[2] - box2[0]) * (box2[3] - box2[1])
union = area1 + area2 - inter
return inter / union if union > 0 else 0
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 选择偏倚 | 单一机构(NIH 三级转诊中心),患者群体可能偏向复杂/罕见病例 | 高 | 外部验证集评估泛化性;避免直接推广至社区医院场景 |
| 标注偏倚 | PACS 书签仅标记代表性病灶,小病灶和边界模糊的病灶可能被漏标 | 高 | 使用 FROC 而非 mAP;Lesion-Harvester 迭代挖掘 |
| 人群偏倚 | 年龄范围 0-157 岁,但缺乏种族/民族数据,无法评估人群代表性 | 中 | 量化年龄/性别维度的性能差异 |
| 设备偏倚 | 跨 20 年多种 CT 设备,层厚和成像协议差异大 | 中 | 按层间距分组分析;多窗口预处理 |
| 时序偏倚 | 1998-2016 数据涵盖不同年代,后续临床实践变化可能影响模型时效性 | 低 | 按时间段分组评估性能漂移 |
§7.2 标注质量
| 标注层面 | 评估 |
|---|---|
| RECIST 书签精度 | 临床级(放射科医生日常测量),但非专门为机器学习制作。像素级偏差在可接受范围(数像素)。 |
| 粗粒度 8 类标注 | 仅 val/test 集标注,划分主观(如"腹部"和"盆腔"边界模糊),训练集无类型标签。 |
| LesaNet 171 类语义标签 | NLP 自动提取,平均 AUC 0.9344,但本质是弱监督——并非所有标签都有金标准验证。 |
| 噪声标注 | 35 处已知噪声(手动查验),实际噪声量可能更高——部分书签测量正常结构而非病灶。 |
| 标注完整性 | 不完全——PACS 书签只标记代表性病灶,CT 图像中存在未被标注的病灶。 |
§7.3 泛化性讨论
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 外部机构 CT | 中-高 | 单中心训练数据,不同机构的扫描协议、人口构成、阅片习惯可能显著不同 |
| 不同 CT 层厚 | 中 | 3DCE 实验表明层间距变化显著影响检测性能——3DCE 在 27 切片配置下达 85.65%,但 9 切片仅 79.09% |
| 不同病灶类型 | 中 | 肺和纵隔病灶检测性能高(90%+),骨和软组织病灶检测性能低(70-80%) |
| 小病灶(< 10mm) | 高 | RECIST 书签偏向测量较大病灶,小病灶被漏标的概率更高;CPSNet 等方法专门设计了小病灶增强策略 |
| 急诊/创伤场景 | 高 | NIH 为三级转诊中心,急诊 CT 患者构成与本数据集有本质不同 |
§7.4 伦理考量
- 隐私保护:CT 图像和元数据均经过 HIPAA 安全港规则脱敏,患者索引为合成编号。但 CT 图像本身可能包含面部特征——尽管数据集已做匿名化处理,使用前仍需了解 CT 重建可能残留可识别信息。
- 知情同意:数据来自回顾性临床记录,获得 NIH 机构审查委员会(IRB)的知情同意豁免。这意味着原始患者未直接同意其数据用于 AI 训练。
- 公平性:缺乏种族/民族数据使得公平性评估无法直接进行。性别和年龄信息已提供,可用于性别偏倚分析。
- 军事/监控用途:数据集协议未禁止非医学用途,但研究者应注意病灶检测技术可能被用于非医学目的的伦理风险。
§7.5 公平性评估
# 按性别分组的病灶检测性能差异分析
gender_groups = df.groupby(''''''''''''''''Patient_gender'''''''''''''''')
for gender, group in gender_groups:
n_lesionevent-blocked= len(group)
avg_diameter = group[''''''''''''''''Lesion_diameters_Pixel_''''''''''''''''].apply(
lambda x: float(x.split('''''''''''''''','''''''''''''''')[0])
).mean()
print(f"Gender {gender}: {n_lesions} lesions, "
f"avg long diameter: {avg_diameter:.1f} px")
§7.7 DAIMS 24 项数据就绪度评估
| 编号 | 评估项目 | 得分 | 说明 |
|---|---|---|---|
| 1 | 数据集文档完整性 | ✅ | readme.pdf + JMI 2018 论文 + FAQ.pdf |
| 2 | 构建动机 | ✅ | 论文中清晰阐述"PACS 书签挖掘"范式 |
| 3 | 数据组成 | ✅ | DL_info.csv 18 列完整元数据 |
| 4 | 数据采集过程 | ✅ | PACS 挖掘管线详细文档化 |
| 5 | 预处理步骤 | ✅ | HU 转换、窗宽窗位、16-bit 存储格式文档化 |
| 6 | 推荐使用场景 | ✅ | 论文明确列出了检测、分类、检索、关系挖掘 |
| 7 | 数据划分 | ✅ | 官方患者级随机 train/val/test(70/15/15) |
| 8 | 数据集维护 | ✅ | v6 更新,LesaNet 标签增强,CADLab GitHub 持续维护 |
| 9 | 数据格式标准化 | ✅ | PNG 16-bit + CSV,广泛兼容 |
| 10 | 字段描述完整性 | ✅ | 18 列均详细文档化 |
| 11 | 标注质量验证 | ⚠️ | RECIST 书签为临床级但非专门制作;粗粒度类型仅 val/test;35 处已知噪声 |
| 12 | 缺失数据文档化 | ❌ | 未提供正式的缺失数据机制分析 |
| 13 | 标注者资质 | ⚠️ | 放射科医生(临床工作流),但无详细资质和人数 |
| 14 | 伦理审查 | ✅ | HIPAA 脱敏 + IRB 批准 |
| 15 | 知情同意 | ⚠️ | IRB 豁免,原始患者未直接授权用于 AI |
| 16 | 人口统计信息 | ⚠️ | 提供年龄和性别,无种族/民族 |
| 17 | 人群代表性 | ❌ | 单一机构三级转诊中心,不代表社区医院人群 |
| 18 | 时间跨度 | ✅ | 约 20 年,含纵向数据 |
| 19 | 地理代表性 | ❌ | 单一机构(NIH Bethesda),无多地域覆盖 |
| 20 | 偏倚分析 | ⚠️ | 在论文 Limitations 中讨论了主要偏倚,但未做定量分析 |
| 21 | 泛化性讨论 | ⚠️ | 论文讨论了外部泛化性,但未提供跨机构评估 |
| 22 | 可复现性 | ✅ | 官方代码开源(CADLab GitHub),标准评估协议 |
| 23 | 基准任务定义 | ✅ | 病灶检测(FROC)和病灶标注(multi-label AUC) |
| 24 | 数据更新机制 | ⚠️ | v6 新增语义标签,但无固定更新频率承诺 |
DAIMS 评分:16.5 / 24
评分解读:良好 (Good) — 距离优秀差 3.5 分,主要短板在人群代表性(单中心)和数据公平性维度。对你意味着什么:DeepLesion 的文档完整性和可复现性在公开医学影像数据集中属于上乘,但单中心来源和 PACS 书签标注偏倚是两个需要严肃对待的底线问题。建议在训练前执行以下操作:(1) 在至少一个外部 CT 数据集(如 LIDC-IDRI 肺结节、KiTS19 肾肿瘤)上验证模型迁移能力;(2) 按性别和年龄分群评估检测性能差异并报告;(3) 在论文 Limitations 中明确讨论 PACS 书签的"不完整标注"问题。DeepLesion 最适合作为通用病灶检测的预训练和基线对比平台,不应将其视为可直接部署的临床系统训练数据。
§7.8 外部验证矩阵
本矩阵仅记录有同行评审论文支撑的外部评估结果。
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部测试集变化 | 关键发现 |
|---|---|---|---|---|---|
| LIDC-IDRI (肺结节) | 多中心(美国 7 家) | 肺结节检测 | 灵敏度 ~85% | -3~5% ↓ | DeepLesion 在单一器官上的泛化性受器官分布长尾影响 |
| NIH Lymph Node(淋巴结) | NIH(美国) | 纵隔淋巴结检测 | 灵敏度 ~80% | -5~10% ↓ | 正常大小淋巴结易被误检为病灶 |
| 外部腹部 CT(多机构) | 多来源 | 腹部病灶检测 | mAP 下降明显 | 显著 ↓ | 腹部病灶外观多样性高,单中心训练泛化受限 |
§8 基准性能与生态
§8.1 排行榜
⚠️ 基准注意事项:不同论文使用的评估协议(FPs per image 级别、IoU 阈值、数据划分版本)可能不完全一致——某些论文使用官方划分(32,735 病灶)、某些移除了 35 处噪声后使用(32,700 病灶)。以下排行榜以官方测试集灵敏度为主要指标,具体 FPs 级别可能因论文而异,建议引用时查阅原始论文确认。
| 排名 | 模型 | 灵敏度(Sensitivity) | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | P3D | 88.55 | 2023 | 变维度自监督 3D 预训练 | — | — |
| 2 | DKMA-ULD | 87.16 | 2023 | 领域知识增强多头注意力通用检测器 | — | — |
| 3 | AlignShift | 86.83 | 2023 | 条件训练 + 边界映射图 | — | — |
| 4 | MP3D | 86.74 | 2024 | 有监督 3D 预训练 + 3D 上下文建模 | — | — |
| 5 | MELD | 86.6 | 2024 | 多异构标注数据集联合学习 | — | — |
| 6 | CPSNet | 80.5 (overall) | 2024 | 循环特征金字塔 + 扩张块 + 全局注意力 | Zhu et al., MTAP, 2024 | — |
| 7 | FCOS | 86.05 | 2021 | Anchor-free 单阶段检测器 | — | — |
| 8 | MULAN | 85.22 | 2020 | 检测+标注+分割多任务学习 | Yan et al., MICCAI 2020 | GitHub |
| 9 | MVP-Net | 83.64 | 2019 | 多视角 FPN + 位置感知注意力 | — | — |
| 10 | Improved RetinaNet | 82.36 | 2019 | 从弱 RECIST 标签生成稠密掩码 | — | — |
| 11 | 3DCE (27 slices) | 85.65 @ 4 FPs | 2018 | 3D 上下文增强 R-FCN | Yan et al., MICCAI 2018 | GitHub |
3DCE FROC 完整性能(官方数据划分,27 slices):
| FPs per image | 0.5 | 1 | 2 | 4 | 8 | 16 |
|---|---|---|---|---|---|---|
| 灵敏度 (%) | 62.48 | 73.37 | 80.70 | 85.65 | 89.09 | 91.06 |
§8.2 SOTA 总结
当前选型建议:
- 入门/复现:使用 3DCE (27 slices),官方代码开源、文档完善、社区广泛使用,灵敏度 85.65 @ 4 FPs。
- 精度优先:尝试 P3D(88.55)或 DKMA-ULD(87.16),利用自监督预训练或领域知识增强提升检测精度。
- 多任务需求:使用 MULAN,同时完成病灶检测、类型标注和分割三项任务。
- 资源受限:使用 FCOS 作为轻量 anchor-free 替代。
§8.3 官方评测协议
- 主指标:FROC(Free-response Receiver Operating Characteristic),灵敏度(Sensitivity)在各种 FPs per image 水���下评估
- 常用 FPs 级别:0.5, 1, 2, 4, 8, 16 per image
- IoU 阈值:0.5(标准设置,3DCE 等大多数论文使用)
- 数据划分:官方 DL_info.csv 的 Train_Val_Test 列(1/2/3)
- 测试集:4,833 张关键切片(移除 35 处噪声后为 4,817 张),4,912 个病灶(移除后约 4,877 个)
§8.4 相关数据集
| 数据集 | 关系类型 | 关联点 |
|---|---|---|
| LUNA16 | 互补 — 肺结节专项 | DeepLesion 的肺病灶可与之联合训练 |
| KiTS19 | 互补 — 肾肿瘤专项 | DeepLesion 的肾病灶分段评估 |
| LiTS | 互补 — 肝肿瘤专项 | DeepLesion 的肝病灶分段评估 |
| Lesion-Harvester | 衍生/拓展 | 从 DeepLesion 中迭代挖掘未被标注的病灶 |
| MEDL | 衍生/拓展 | 融合多个异构标注数据集(含 DeepLesion)用于通用病灶检测 |
§8.5 关键论文
- Yan, K., Wang, X., Lu, L., & Summers, R. M. (2018). DeepLesion: Automated mining of large-scale lesion annotations and universal lesion detection with deep learning. Journal of Medical Imaging, 5(3), 036501. — 数据集奠基论文,提出 PACS 书签挖掘范式和通用病灶检测任务。
- Yan, K., Wang, X., Lu, L., & Summers, R. M. (2018). Deep Lesion Graphs in the Wild: Relationship Learning and Organization of Significant Radiology Image Findings in a Diverse Large-scale Lesion Database. CVPR 2018. — 病灶间关系挖掘与组织。
- Yan, K., Bagheri, M., & Summers, R. M. (2018). 3D Context Enhanced Region-based Convolutional Neural Network for End-to-End Lesion Detection. MICCAI 2018. — 3DCE,3D 上下文增强检测器,DeepLesion 基准方法的官方实现。
- Yan, K., Peng, Y., Sandfort, V., Bagheri, M., Lu, Z., & Summers, R. M. (2019). Holistic and Comprehensive Annotation of Clinically Significant Findings on Diverse CT Images: Learning from Radiology Reports and Label Ontology. CVPR 2019 (Oral). — LesaNet,171 类细粒度病灶语义标签体系,AUC 0.9344。
- Li, Z., Zhang, S., Zhang, J., Huang, K., Wang, Y., & Yu, Y. (2019). Improving Deep Lesion Detection Using 3D Contextual and Spatial Attention. MICCAI 2019. — 3DCE_CS_Att,在 3DCE 基础上引入上下文和空间注意力。
- Yan, K., Cai, J., Zheng, Y., Harrison, A. P., Jin, D., Tang, Y., … & Lu, L. (2020). MULAN: Multitask Universal Lesion Analysis Network for Joint Lesion Detection, Tagging, and Segmentation. MICCAI 2020. — 检测+标注+分割多任务联合学习。
- Cai, J., Yan, K., Cheng, C. T., Xiao, J., Liao, C. H., Lu, L., & Harrison, A. P. (2021). Lesion-Harvester: Iteratively Mining Unlabeled Lesions and Hard-Negative Examples at Scale. IEEE TMI, 40(1), 59-70. — 迭代挖掘 DeepLesion 中未被标注的病灶。
- Xu, M., Huang, Y., He, L., Wang, P., Liu, H., Li, Z., & Harrison, A. P. (2021). Learning From Multiple Datasets With Heterogeneous and Partial Labels for Universal Lesion Detection in CT. IEEE TMI, 40(10), 2759-2770. — 融合多个异构标注数据集的通用病灶检测。
§8.6 社区活跃度
| 指标 | 数值(截至 2026-07) |
|---|---|
| Google Scholar 引用(主论文 JMI 2018) | 837+ |
| CADLab GitHub Star | 活跃维护,多子项目 |
| NIH Box 下载量 | 未公开统计 |
| Kaggle 子集 Notebook | 40+ public kernels |
| Papers with Code 基准任务 | 30+ 提交方法 |
§8.7 生态快照
| 资源 | 类型 | 链接 | 为什么值得关注 |
|---|---|---|---|
| CADLab/LesaNet | 工具库 | GitHub | 171 类病灶语义标签 + 预训练 LesaNet 模型(CVPR 2019 Oral) |
| CADLab/lesion_detector_3DCE | 官方基准 | GitHub | 3DCE 官方 PyTorch 实现,含数据加载、预处理和训练完整流程 |
| NIH DeepLesion Benchmark (HyperAI) | 排行榜 | HyperAI SOTA | 持续更新的 SOTA 排名(30+ 方法提交) |
| DeepLesion Balanced 2K (HuggingFace) | 快速验证 | HF Dataset | 2,000 张 8 类均衡采样的预处理子集,适合快速实验 |
| Foundation Cancer Image Biomarker | 预训练 | GitHub | 哈佛团队在 DeepLesion 上预训练的基础模型及复现代码 |
§9 相关资源与引用
§9.1 BibTeX 引用
@article{yan2018deeplesion,
title={DeepLesion: automated mining of large-scale lesion annotations
and universal lesion detection with deep learning},
author={Yan, Ke and Wang, Xiaosong and Lu, Le and Summers, Ronald M},
journal={Journal of Medical Imaging},
volume={5},
number={3},
pages={036501},
year={2018},
publisher={SPIE},
doi={10.1117/1.JMI.5.3.036501}
}
@inproceedings{yan2018deeplesion_graphs,
title={Deep lesion graphs in the wild: relationship learning and
organization of significant radiology image findings in a
diverse large-scale lesion database},
author={Yan, Ke and Wang, Xiaosong and Lu, Le and Zhang, Ling and
Harrison, Adam P and Bagheri, Mohammadhadi and Summers, Ronald M},
booktitle={Proceedings of the IEEE Conference on Computer Vision
and Pattern Recognition (CVPR)},
pages={92619270},
year={2018}
}
@inproceedings{yan2018_3dce,
title={3D context enhanced region-based convolutional neural network
for end-to-end lesion detection},
author={Yan, Ke and Bagheri, Mohammadhadi and Summers, Ronald M},
booktitle={International Conference on Medical Image Computing and
Computer-Assisted Intervention (MICCAI)},
pages={511519},
year={2018},
organization={Springer}
}
@inproceedings{yan2019lesanet,
title={Holistic and comprehensive annotation of clinically significant
findings on diverse CT images: learning from radiology reports
and label ontology},
author={Yan, Ke and Peng, Yifan and Sandfort, Veit and Bagheri,
Mohammadhadi and Lu, Zhiyong and Summers, Ronald M},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision
and Pattern Recognition (CVPR)},
pages={85158524},
year={2019}
}
§9.2 官方资源
| 资源 | 链接 |
|---|---|
| 官方下载(NIH Box) | https://nihcc.app.box.com/v/DeepLesion |
| 官方 GitHub(CADLab) | https://github.com/rsummers11/CADLab |
| 3DCE 代码 | https://github.com/rsummers11/CADLab/tree/master/lesion_detector_3DCE |
| LesaNet 代码+标签 | https://github.com/rsummers11/CADLab/tree/master/LesaNet |
| 原始论文(JMI 2018) | https://doi.org/10.1117/1.JMI.5.3.036501 |
| arXiv 预印本 | https://arxiv.org/abs/1710.01766 |
| Kaggle 子集 | https://www.kaggle.com/datasets/kmader/nih-deeplesion-subset |
§9.3 使用建议
如果在研究中使用 DeepLesion,请在论文中:(1) 引用 JMI 2018 主论文;(2) 注明数据集的 NIH Box 下载地址;(3) 在方法部分说明使用的是官方数据划分还是自定义划分;(4) 报告是否移除了 35 处噪声标注;(5) 明确说明病灶检测使用了哪种评估指标(Sensitivity @ X FPs, mAP, FROC 等)。
§10 AI 使用声明卡
§10.1 AI 模型使用
本 Wiki 页面由以下 AI 模型协助撰写:
- Claude (Anthropic):全文撰写、数据整理、代码生成、结构组织
- 用途:根据 v3.9 模板规范,集成多来源(JMI 2018 论文、NIH 官方 README、HyperAI 排行榜、HuggingFace 数据卡、LesaNet CVPR 2019 论文、3DCE MICCAI 2018 论文)的公开信息,生成 DAIMS 评估、排行榜表格、代码示例和坑点分析。
§10.2 AI 参与范围
- AI 参与:全文初稿撰写、数据字典编译、代码示例生成、DAIMS 评分
- 人工审核:千方病案医学编辑部交叉审核
§10.3 输入来源
- Yan et al., “DeepLesion: Automated Mining of Large-Scale Lesion Annotations and Universal Lesion Detection with Deep Learning”, JMI, 5(3), 036501, 2018
- NIH DeepLesion 官方 README.pdf (v6, 2019-05-13)
- NIH DeepLesion 官方 FAQ.pdf
- Yan et al., “3D Context Enhanced Region-based Convolutional Neural Network for End-to-End Lesion Detection”, MICCAI 2018
- Yan et al., “Holistic and Comprehensive Annotation…Lesion Annotation Network (LesaNet)”, CVPR 2019 (Oral)
- Yan et al., “Deep Lesion Graphs in the Wild”, CVPR 2018
- Li et al., “Improving Deep Lesion Detection Using 3D Contextual and Spatial Attention”, MICCAI 2019
- HyperAI 病灶检测排行榜 (Medical Object Detection on DeepLesion)
- HuggingFace DeepLesion 数据集卡片 (farrell236/DeepLesion)
- DatasetNinja DeepLesion 数据集概览
- Academic Torrents DeepLesion 数据集元���据
- Yan et al., “MULAN: Multitask Universal Lesion Analysis Network”, MICCAI 2020
- 千方病案 v3.9 AI-Ready 数据集 Wikipedia Schema 模板
§10.4 人工校验
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §2 医学背景(ICD-11/SNOMED CT 映射) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §3 数据规格(PACS 挖掘管道、RECIST 标注) | 千方病案医学编辑部 | 与官方文档交叉比对 | ✅ 已验证 |
| §4 数据结构(DL_info.csv 18 列字典) | 千方病案医学编辑部 | 与 readme.pdf §Annotations 比对 | ✅ 已验证 |
| §6 代码示例(PyTorch Dataset/预处理/FROC) | 千方病案医学编辑部 | 逻辑审查 | ✅ 已通过 |
| §7 质量评估(DAIMS 24 项 + 偏倚表) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜(SOTA + FROC 完整数据) | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
§10.5 AI 生成章节
- §6.1 快速上手代码
- §6.3 预处理管道代码
- §6.5 常见坑点分析
- §6.9 FROC 评估代码
- §7.5 公平性评估代码
- §7.7 DAIMS 评估
§10.6 最后人工审核
2026-07-29
页面状态:published(全部内容已完成审核并发布)
