INFOBOX
|
|
| 数据集名称 |
HAM10000 |
| 英文全称 |
Human Against Machine with 10000 training images: A large collection of multi-source dermatoscopic images of common pigmented skin lesions |
| 别名 / 简称 |
HAM10000、HAM-10000、Skin Cancer MNIST: HAM10000、ISIC 2018 Training Set |
| 疾病分类 |
多类别覆盖。核心映射:2C60–2C6Z 皮肤黑色素瘤 / 2C70 基底细胞癌 / 2N60 角化病 / 2F70 色素痣 |
| SNOMED CT |
372244006 Melanoma / 254838004 Basal cell carcinoma / 238532001 Actinic keratosis / 400034001 Benign keratosis / 20109002 Dermatofibroma / 400122006 Melanocytic nevus / 106005003 Vascular lesion |
| 数据模态 |
影像(皮肤镜彩色照片,偏振 + 非偏振) |
| AI 任务类型 |
图像多分类、语义分割(辅助掩码可用)、人机协作评估、类别不平衡学习 |
| 样本总数 |
10,015 张皮肤镜图像(来自 7,470 个独立病灶) |
| 数据大小 |
~2.5 GB(JPEG 图像 + 元数据 CSV + 分割掩码 ZIP) |
| 数据格式 |
JPEG(600×450 px RGB)/ CSV(元数据)/ ZIP(分割掩码 PNG) |
| 许可证 |
CC BY-NC 4.0(Creative Commons Attribution-NonCommercial 4.0 International) |
| 访问级别 |
开放(Harvard Dataverse 免费下载,无需注册) |
| DUO 标签 |
GRU, NPUNCU |
| 语言 |
英文(元数据与诊断标签) |
| 首发日期 |
2018-06-14(Scientific Data 发表) |
| 最后更新 |
2020-08-01(Nature Medicine 补充分割掩码与人机协作数据) |
| 发布机构 |
ViDIR Group, Department of Dermatology, Medical University of Vienna(维也纳医科大学皮肤科 ViDIR 组) |
| 官方主页 |
https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/DBW86T |
| 下载地址 |
https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/DBW86T(Harvard Dataverse)/ https://github.com/ptschandl/HAM10000_dataset(GitHub 仓库) |
| DOI |
10.1038/sdata.2018.161(论文)/ 10.7910/DVN/DBW86T(数据集) |
| 引用次数 |
3,200+(Google Scholar,截至 2026-08) |
| AI 就绪度评分 |
⭐⭐⭐⭐(4/5)— 多源多设备采集、四级金标准体系、丰富元数据、辅助分割掩码可用;扣分项:单标注者诊断、严重类别不平衡、同病灶多图数据泄漏风险、无系统化肤色标签 |
| 页面状态 |
published |
§0 E-E-A-T 信任声明与免责声明
| 字段 |
内容 |
| 医学审核者 |
[千方病案医学编辑部] 交叉审核:§2 医学背景(ICD-11 映射、临床任务定义、金标准描述)、§7 偏倚分析。 |
| 数据工程审核者 |
[千方病案医学编辑部] 交叉审核:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。 |
| 审核日期 |
2026-08-04 |
| 审核方式 |
交叉审核 |
| 利益冲突声明 |
本页面与 HAM10000 数据集创建者无利益关联。 |
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。HAM10000 采用 CC BY-NC 4.0 许可证,禁止商业用途。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
HAM10000 是维也纳医科大学 ViDIR 皮肤科研究组于 2018 年发布的大型皮肤镜图像数据集,包含 10,015 张来自两个国家、四种采集设备的色素性皮肤病变照片,覆盖黑色素瘤、基底细胞癌等 7 类临床诊断。超过一半的病灶经组织病理学金标准验证。
它的独特价值在于首次为皮肤镜 AI 提供了一个足够大且多源的基准数据集——在此之前,公开的皮肤镜数据集不足 2,000 张且几乎只含黑色素瘤和痣。HAM10000 的多疾病覆盖直接催生了 2018 年 ISIC 国际挑战赛,随后的 Lancet Oncology 研究证明机器在色素性病变诊断上全面超越人类专家。原始论文已被引用 3,200 余次,是皮肤病 AI 领域引用量最高的数据集论文。
你可以用它来:训练一个 7 类皮肤病变分类模型、研究类别极度不平衡(58:1)场景下的训练策略、或者评估 AI 与人类诊断专家的协作效果。
§1.1 摘要
HAM10000(“Human Against Machine with 10000 training images”)由 Philipp Tschandl、Cliff Rosendahl 和 Harald Kittler 三位皮肤科医生创建,数据来源覆盖奥地利维也纳医科大学(ViDIR 组)和澳大利亚昆士兰大学两个临床中心,采集时间跨度长达 20 年(1998–2017)。数据集使用四种不同的皮肤镜采集设备:模拟胶片幻灯片(Heine Dermaphot)、手持数字皮肤镜(DermLite FOTO / DL3)、数字化皮肤镜随访系统(MoleMax HD)以及 PowerPoint 存储的手持设备照片。最终统一标准化为 600×450 像素 JPEG 格式。
数据集包含 7 类色素性皮肤病变诊断:光化性角化病 / 鲍温病(akiec)、基底细胞癌(bcc)、良性角化病(bkl)、皮肤纤维瘤(df)、黑色素瘤(mel)、黑色素细胞痣(nv)和血管性病变(vasc)。金标准采用四级体系:组织病理学(53.3%)、随访观察(≥1.5 年无变化)、专家共识(PT + HK 独立一致判断)和体内共聚焦显微镜。数据集通过 Harvard Dataverse 和 ISIC Archive 公开发布。
§1.2 战略价值分析
多源异质性维度:HAM10000 的核心创新在于刻意保留并融合了不同人群、不同设备、不同采集条件下的图像。维也纳数据来自三级黑色素瘤转诊中心(高风险多痣人群),澳大利亚数据来自高紫外线照射地区的初级保健诊所(严重慢性光损伤人群)。四 种设备覆盖了从模拟胶片扫描到专业数字皮肤镜系统的技术演进全谱。这种异质性使模型在真实世界场景中的泛化能力受到更严格的考验——单一设备、单一人群训练的模型在 HAM10000 上往往会暴露显著的跨域性能退化。
人机对比基准维度:HAM10000 的命名本身就揭示了其设计意图——“Human Against Machine”。数据集不仅被用作 ISIC 2018 挑战赛的训练集,还成为 Lancet Oncology 2019 和 Nature Medicine 2020 两篇里程碑论文的实验基础。前者证明 139 个算法中有三分之二超越了 511 名人类医生(最佳机器 25.4/30 vs 最佳人类 18.8/30),后者首次系统化验证了人机协作优于单独 AI 或单独人类诊断。这使得 HAM10000 成为医学 AI 领域唯一同时拥有大规模人机对比数据的公开数据集,其影响力远超数据集本身的技术规格。
§1.3 横向对比
| 数据集 |
样本量 |
模态 |
标注方式 |
核心差异化 |
| HAM10000 |
10,015 |
皮肤镜 |
4 级金标准(病理 53.3%) |
多源多设备 + 人机对比基准 |
| ISIC Archive |
549,571+ |
皮肤镜 + 临床 |
多级(含 IMA++ 多标注者) |
全球最大皮肤影像档案 + 7 届挑战赛 |
| Fitzpatrick 17k |
16,577 |
临床照片 |
众包 + 肤色标签 |
114 类 + Fitzpatrick I-VI 公平性标签 |
| PH2 |
200 |
皮肤镜 |
病理验证(20.5%) |
精细标注(分割 + 框架分析),小规模教学 |
| Derm7pt |
1,011 |
皮肤镜 |
7 点检查表 |
结构化临床特征矩阵 |
§1.4 版本演进时间轴
| 时间 |
事件 |
| 1998 |
维也纳 ViDIR 组开始采集皮肤镜图像(模拟胶片幻灯片时代) |
| 2005 |
维也纳引入 DermLite FOTO 数字皮肤镜系统,建立数字数据库 |
| 2008 |
澳大利亚 Rosendahl 系列开始系统性 Power Point 采集(至 2017 年 5 月) |
| 2015 |
维也纳引入 MoleMax HD 数字皮肤镜随访系统 |
| 2018-02 |
数据集预处理完成,提交 ISIC 2018 挑战赛 |
| 2018-06-14 |
Scientific Data 正式发表(DOI: 10.1038/sdata.2018.161) |
| 2018-09 |
ISIC 2018 挑战赛在 MICCAI 2018(西班牙格拉纳达)举办,139 个算法参赛 |
| 2019-06 |
Lancet Oncology 发表人机对比研究:机器超越人类专家 |
| 2020-06 |
Nature Medicine 发表人机协作研究,补充分割掩码与交互数据 |
| 2024-01 |
DermaMNIST-C / DermaMNIST-E 发布,修复 DermaMNIST 派生数据集的数据泄漏问题 |
§1.5 典型 AI 应用场景
- 多类皮肤病变分类:训练 7 类色素性病变自动分类模型,支持初级保健场景下的黑色素瘤筛查分流
- 类别不平衡学习:研究 58:1 极端不平衡场景下的采样策略(过采样 / 欠采样 / 混合)、损失函数设计(focal loss / class-weighted CE)和评估指标选择
- 人机协作诊断:利用 Nature Medicine 2020 附属的人机交互数据,研究 AI 辅助如何提升不同经验水平医生的诊断准确率
- 数据泄漏影响评估:HAM10000 的同病灶多图特性使其成为研究训练 / 测试集泄漏对性能高估影响的理想数据集
- 迁移学习预训练:作为中等规模皮肤镜数据集,用于从 ImageNet 预训练向下游皮肤科任务迁移的中间步骤
§2 医学背景
§2.1 ICD-11 编码映射
| 数据集标签 |
ICD-11 编码 |
疾病名称 |
| akiec |
2N60.0 |
光化性角化病(Actinic keratosis)/ 2E61 鲍温病(Bowen’‘’‘’‘’‘’‘’‘’‘’'s disease) |
| bcc |
2C70 |
基底细胞癌(Basal cell carcinoma) |
| bkl |
2N60.Y |
其他指定角化病(良性角化病 / 脂溢性角化病 / 日光性黑子) |
| df |
2F70.Y |
皮肤纤维瘤(Dermatofibroma) |
| mel |
2C60 |
皮肤恶性黑色素瘤(Cutaneous melanoma) |
| nv |
2F70.0 |
黑色素细胞痣(Melanocytic nevus) |
| vasc |
2B10.Y |
其他指定血管病变(血管瘤 / 血管角化瘤 / 化脓性肉芽肿) |
§2.1b SNOMED CT 映射
| 数据集标签 |
SNOMED CT 代码 |
SNOMED CT 术语 |
| akiec |
238532001 |
Actinic keratosis (disorder) |
| akiec (Bowen) |
275538002 |
Carcinoma in situ of skin (disorder) |
| bcc |
254838004 |
Basal cell carcinoma (disorder) |
| bkl |
400034001 |
Benign keratosis (disorder) |
| df |
20109002 |
Dermatofibroma (disorder) |
| mel |
372244006 |
Malignant melanoma of skin (disorder) |
| nv |
106005003 |
Melanocytic nevus (disorder) |
| vasc |
106005003 |
Vascular skin lesion (disorder) |
§2.2 疾病简介与流行病学
黑色素瘤是最致命的皮肤癌,全球年发病率约 352,000 例(WHO 2020),5 年生存率与发现阶段强相关——原位黑色素瘤接近 99%,远处转移仅 27%。基底细胞癌是最常见的皮肤癌,美国年发病约 360 万例。光化性角化病是鳞状细胞癌的前期病变,约 0.025%–16% 进展为浸润性鳞癌。色素痣是极常见的良性病变,成人平均 10–40 颗。HAM10000 涵盖的 7 类诊断覆盖了临床实践中 95% 以上的色素性病变就诊原因。
§2.3 临床任务定义
| 任务类型 |
描述 |
临床场景 |
| 多类分类 |
7 类色素性病变鉴别诊断 |
皮肤镜筛查分流:哪些需要转诊活检? |
| 恶性检测 |
二分类(mel + bcc + akiec vs. nv + bkl + df + vasc) |
社区筛查:是否需要转诊专科? |
| 黑色素瘤检测 |
二分类(mel vs. 其他全部) |
高风险人群筛查:不漏诊黑色素瘤 |
| 分割 |
病灶区域分割(辅助掩码可用) |
量化病灶面积变化 / 特征提取前处理 |
| 人机协作 |
AI 辅助诊断效果评估 |
远程医疗 / 第二意见 / 分诊优化 |
§2.4 患者人群特征
| 维度 |
特征 |
| 数据来源 |
奥地利维也纳医科大学皮肤科(ViDIR 组,三级转诊中心)+ 澳大利亚昆士兰大学 Rosendahl 诊所(初级保健) |
| 采集时间 |
1998–2017(20 年跨度) |
| 年龄分布 |
双峰分布:35–50 岁和 60–75 岁两个峰值;无儿科病例 |
| 性别比例 |
男性 4,001(53.5%)/ 女性 3,419(45.8%)/ 未知 50(0.7%),按独立病灶计 |
| 种族分布 |
未系统收集种族数据;推断以欧洲白种人(奥地利)和凯尔特 / 盎格鲁-撒克逊裔白种人(澳大利亚)为主 |
| 就医类型 |
门诊(维也纳高风险痣监测随访 + 澳大利亚皮肤癌筛查) |
| 风险特征 |
维也纳组:高风险多痣人群,个人或家族黑色素瘤史;澳大利亚组:严重慢性光损伤,高紫外线暴露地区 |
§2.5 临床意义
色素性病变的皮肤镜鉴别诊断是皮肤科最具挑战性的临床技能之一,需要大量培训才能熟练。研究表明,非专科医生对黑色素瘤的敏感性仅 50–60%,而有经验的皮肤科医生可达 80–90%。AI 辅助诊断在提高基层筛查准确率、减少不必要活检、支持远程医疗方面具有重大价值。HAM10000 的多源设计特别适合验证 AI 在不同临床环境(转诊中心 vs 初级保健)中的泛化能力。
§2.6 金标准体系
HAM10000 采用四级金标准体系,是公开皮肤镜数据集中金标准设计最精细的:
| 金标准类型 |
占比 |
标注者 |
可靠性 |
适用类别 |
| 组织病理学(histo) |
53.3%(5,334 张) |
专门皮肤病理学家 |
最高(金标准) |
所有恶性 + 部分良性(切除病例) |
| 随访观察(follow_up) |
~37% |
HK 医生(20 年数字皮肤镜随访经验) |
高(≥1.5 年 / 3 次随访无变化 = 生物良性) |
仅限黑色素细胞痣 |
| 专家共识(consensus) |
~9% |
PT + HK 独立一致判断 |
中高(仅典型良性病例) |
典型良性病变(教学拍摄) |
| 共聚焦显微镜(confocal) |
<1% |
维也纳共聚焦前瞻研究 |
中高(近细胞级分辨率体内成像) |
面部良性角化病 |
金标准设计要点:组织病理学验证比例在公开皮肤镜数据集中名列前茅(ISIC Archive 整体 ~26%)。随访标准严格——3 次随访或 1.5 年内无变化方接受为良性。对于含不确定性病理诊断的病例(如"倾向痣但不能排除早期黑色素瘤 in situ"),数据集选择排除而非保留模糊标签,体现了金标准的严谨性。
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 |
推荐版本 |
大小 |
理由 |
| 快速复现论文 / 入门学习 |
Harvard Dataverse V4 |
~2.5 GB |
含全部 10,015 张训练图 + 元数据 CSV,无注册直接下载 |
| 分割任务 / 病灶区域分析 |
Harvard Dataverse V4 + 分割掩码 |
~2.5 GB + ~50 MB |
补充 Nature Medicine 2020 附属的 10,015 张二值分割掩码 |
| 人机协作研究 |
Harvard Dataverse V4 + 交互数据 |
~2.5 GB + ~5 MB |
含 ISIC2018_Task3_Test_NatureMedicine_AI_Interaction_Benefit.csv |
| 端到端验证(含测试集) |
ISIC 2018 Challenge 完整版 |
~3 GB |
含 511 张官方测试集 + 评估服务器在线提交 |
| 一行代码加载(教学 / Demo) |
Kaggle / HuggingFace 版 |
~2.5 GB |
预处理好的 CSV + 图片目录,但注意部分版本不含测试集和分割掩码 |
§3.1 模态详细说明
HAM10000 的图像全部为**皮肤镜(dermatoscopy / dermoscopy)**照片——通过皮肤镜放大(通常 10×)并消除皮肤表面反光后拍摄的特殊医学影像模态。与普通临床照片相比,皮肤镜能显示皮下色素结构和血管模式,是皮肤科医生鉴别色素性病变的核心工具。
数据集包含偏振光和非偏振光两种皮肤镜模式:
- 偏振光皮肤镜(MoleMax HD、DermLite DL3):无需接触皮肤,可观察更深层结构(胶原 / 血管),适合随访对比
- 非偏振光皮肤镜(Heine Dermaphot、DermLite Fluid):需接触皮肤 + 浸泡液(乙醇凝胶或超声凝胶),表面结构更清晰(粟粒样囊肿、沟槽征)
偏振与非偏振模式对同一病灶的呈现存在差异,数据集未标注每张图像的偏振状态,这是潜在的混淆因素。
§3.2 样本统计
| 来源子集 |
图像数 |
独立病灶数 |
病理验证率 |
采集设备 |
| ViDIR Legacy(维也纳胶片) |
439 |
439 |
100% |
Heine Dermaphot 模拟胶片 → Nikon Coolscan 5000 ED 扫描 |
| ViDIR Current(维也纳数字) |
3,363 |
~2,500 |
77.1% |
DermLite FOTO / Heine Delta 20 数字皮肤镜 |
| ViDIR MoleMax(维也纳随访) |
3,954 |
~3,500 |
1.2% |
MoleMax HD 数字皮肤镜随访系统 |
| Rosendahl(澳大利亚) |
2,259 |
~1,031 |
100% |
DermLite Fluid / DermLite DL3 + PowerPoint 存储 |
| 合计 |
10,015 |
7,470 |
53.3% |
4 种设备 / 2 个中心 |
§3.3 数据格式
| 文件类型 |
格式 |
分辨率 |
说明 |
| 图像 |
JPEG(8-bit RGB) |
600×450 px(标准化后) |
ViDIR Current / MoleMax 原始 1872×1053 或 800×600 → 统一裁剪至 600×450 |
| 元数据 |
CSV |
— |
10,015 行 × 8 列(lesion_id, image_id, dx, dx_type, age, sex, localization, dataset) |
| 分割掩码 |
PNG(二值) |
600×450 px |
Tschandl 人工校正的病灶区域掩码,Nature Medicine 2020 附属 |
| 交互数据 |
CSV |
— |
ISIC2018 测试集人机协作实验数据(AI 概率 + 人类评分) |
| 测试集 |
JPEG |
600×450 px |
511 张 ISIC 2018 Task 3 官方测试图像(金标准需通过评估服务器获取) |
§3.4 存储大小
| 版本 |
压缩后 |
解压后 |
说明 |
| Harvard Dataverse V4 |
~2.5 GB |
~2.6 GB |
10,015 张 JPEG + 元数据 CSV + 分割掩码 ZIP + 交互数据 |
| ISIC Archive(API) |
按需下载 |
同上 |
通过 ISIC API 逐张下载 |
| Kaggle 镜像 |
~2.4 GB |
~2.5 GB |
部分版本省略测试集和分割掩码 |
§3.5 标注方式与流程
┌──────────────────────────────────────────────────────────────────┐
│ HAM10000 数据集构建流程 │
├──────────────────────────────────────────────────────────────────┤
│ │
│ ① 原始采集(1998-2017, 2 个中心, 4 种设备) │
│ ├── ViDIR Legacy: 模拟胶片 → 扫描 → 手动裁剪 800×600 │
│ ├── ViDIR Current: 数字皮肤镜 → 中央数据库 │
│ ├── ViDIR MoleMax: 数字随访系统 → SQL 提取 │
│ └── Rosendahl: PowerPoint 幻灯片 → python-pptx 自动提取 │
│ │
│ ② 图像类型过滤 │
│ └── InceptionV3 分类器(ImageNet 预训练, 微调 20 epochs) │
│ → 3 类: overview / close-up / dermatoscopy │
│ → 98.68% top-1 准确率 → 保留 dermatoscopy 类 │
│ → 人工二次审核去除残留非皮肤镜图像 │
│ │
│ ③ 诊断统一化 │
│ ├── 收集组织病理报告 → 手动匹配 lesion → 审查切片 │
│ ├── 排除模糊诊断(如"倾向痣但不排除原位黑色素瘤") │
│ ├── 7 类通用诊断标签(覆盖临床 95%+ 色素性病变) │
│ └── 黑色素瘤伴痣 → 仅归入 mel 类(不重复归入 nv) │
│ │
│ ④ 质量审核 │
│ ├── 排除: 非色素性 / 眼部 / 甲下 / 黏膜病变 │
│ ├── 排除: 识别性内容(衣物 / 首饰 / 纹身) │
│ ├── 排除: 失焦 / 凝胶气泡等伪影 │
│ ├── 保留: 终毛(反映真实临床场景) │
│ └── 手动直方图校正(欠曝光 / 黄绿色调偏移) │
│ │
│ ⑤ 标准化输出 │
│ ├── 裁剪至 600×450 px @ 72DPI │
│ ├── JPEG 8-bit RGB 最高质量 │
│ ├── 灰色世界假设检验色彩一致性 │
│ └── 同一病灶多图标记相同 lesion_id │
│ │
│ ⑥ 金标准标注 │
│ ├── histo: 病理报告匹配 + 切片审查 (53.3%) │
│ ├── follow_up: ≥3 次或 ≥1.5 年无变化 → 良性 (37%) │
│ ├── consensus: PT+HK 独立一致 (9%) │
│ └── confocal: 共聚焦显微镜验证 (<1%) │
│ │
│ ⑦ 附属数据 │
│ ├── 分割掩码: 神经网络初始化 → FIJI 手动校正 (2020) │
│ └── 交互数据: 511 张测试图 × 多模态 AI 辅助 (2020) │
│ │
└──────────────────────────────────────────────────────────────────┘
§3.6 技术验证
数据集创建者执行了以下技术验证:
- 色彩一致性检验:使用灰色世界假设(grey-world assumption)在 Lab 色彩空间估计所有图像的光照色温,确认手动直方图校正成功将黄色 / 绿色偏移向蓝色 / 红色方向移动
- 病理匹配验证:手动审查所有 ViDIR 图像与病理报告的对应关系,发现不匹配时检查样本混淆并重新审查切片
- 图像类型过滤验证:InceptionV3 分类器在 1,501 张人工标注图像上达到 98.68% top-1 准确率
- 排除标准一致性:统一执行排除标准(非色素性、黏膜、甲下、眼部、识别性内容、严重伪影)
§3.7 工具生态
§3.8 深度溯源链
HAM10000 (10,015 images, 7,470 lesions)
├── ViDIR Group, Medical University of Vienna, Austria
│ ├── Legacy Diapositives (439 images)
│ │ ├── Heine Dermaphot (analog, immersion fluid, E-6 process)
│ │ └── Nikon Coolscan 5000 ED → 800×600 px @ 300DPI → crop 600×450
│ ├── Current Database (3,363 images)
│ │ ├── DermLite FOTO (3Gen) — polarized, digital camera
│ │ ├── Heine Delta 20 (single cases) — polarized
│ │ └── Central database since 2005, triplets (3 magnifications)
│ └── MoleMax HD (3,954 images)
│ ├── Derma Medical Systems MoleMax HD — digital follow-up system
│ ├── Original 1872×1053 (non-quadratic pixels) → crop 800×600
│ └── High-risk nevus monitoring, 6-12 month intervals since 2015
└── Rosendahl Series, University of Queensland, Australia
└── 2,259 images
├── DermLite Fluid (non-polarized, immersion gel)
├── DermLite DL3 (3Gen, polarized)
├── Stored in PowerPoint + Excel metadata
└── Consecutive documentation 2008-2017, 34.2 GB raw PPT files
§4 数据结构详解
§4.1 目录结构
HAM10000/
├── HAM10000_images_part_1/ # 5,015 张 JPEG 图像
│ ├── ISIC_0024306.jpg
│ ├── ISIC_0024307.jpg
│ └── ...
├── HAM10000_images_part_2/ # 5,000 张 JPEG 图像
│ ├── ISIC_0027431.jpg
│ └── ...
├── HAM10000_metadata.csv # 元数据(10,015 行 × 8 列)
├── HAM10000_segmentations_lesion_tschandl.zip # 分割掩码(Nature Medicine 2020)
├── ISIC2018_Task3_Test_Images/ # 511 张测试集图像
├── ISIC2018_Task3_Test_GroundTruth.csv # 测试集标签
└── ISIC2018_Task3_Test_NatureMedicine_AI_Interaction_Benefit.csv # 人机交互数据
§4.2 DAIMS 标准化数据字典
| 字段名 |
数据类型 |
描述 |
示例值 |
缺失率 |
lesion_id |
string |
病灶唯一标识符,多张图像可共享同一 lesion_id |
HAM_0000118 |
0% |
image_id |
string |
图像唯一标识符(对应 JPEG 文件名) |
ISIC_0024306 |
0% |
dx |
string |
诊断标签(7 类) |
nv / mel / bkl / bcc / akiec / vasc / df |
0% |
dx_type |
string |
金标准类型(4 类) |
histo / follow_up / consensus / confocal |
0% |
age |
float |
患者年龄(岁) |
45.0 |
0.57%(57 个缺失值) |
sex |
string |
患者性别 |
male / female / unknown |
0.7% unknown |
localization |
string |
解剖部位 |
back / lower extremity / face / trunk … |
0% |
dataset |
string |
来源子集标识 |
viDIR_Legacy / viDIR_current / MoleMax / Rosendahl |
0% |
§4.3 标签分布
| 诊断标签 |
全称 |
图像数 |
占比 |
独立病灶数(估) |
临床性质 |
| nv |
Melanocytic nevi(色素痣) |
6,705 |
66.9% |
~4,800 |
良性 |
| mel |
Melanoma(黑色素瘤) |
1,113 |
11.1% |
~700 |
恶性 |
| bkl |
Benign keratosis-like lesions(良性角化病) |
1,099 |
11.0% |
~850 |
良性 |
| bcc |
Basal cell carcinoma(基底细胞癌) |
514 |
5.1% |
~450 |
恶性 |
| akiec |
Actinic keratoses / Bowen’‘’‘’‘’‘’‘’‘’‘’'s disease |
327 |
3.3% |
~290 |
癌前 / 恶性 |
| vasc |
Vascular lesions(血管性病变) |
142 |
1.4% |
~130 |
良性 |
| df |
Dermatofibroma(皮肤纤维瘤) |
115 |
1.1% |
~110 |
良性 |
| 合计 |
|
10,015 |
100% |
~7,470 |
|
类别不平衡比率:最大类(nv)与最小类(df)之比为 58:1。若按恶性 vs 良性二分类:恶性 1,954(19.5%)vs 良性 8,061(80.5%),比率约 4:1。
§4.4 金标准类型分布
| 金标准类型 |
图像数 |
占比 |
适用诊断 |
可靠性评级 |
| histo |
5,334 |
53.3% |
全部 7 类(主要 mel, bcc, akiec) |
⭐⭐⭐⭐⭐ |
| follow_up |
~3,700 |
~37% |
仅 nv(随访 ≥1.5 年无变化) |
⭐⭐⭐⭐ |
| consensus |
~900 |
~9% |
典型良性(bkl, nv, df, vasc) |
⭐⭐⭐ |
| confocal |
~80 |
<1% |
面部 bkl |
⭐⭐⭐⭐ |
§4.5 解剖部位分布
| 部位 |
图像数 |
占比 |
| back(背部) |
2,192 |
21.9% |
| lower extremity(下肢) |
1,840 |
18.4% |
| trunk(躯干) |
1,471 |
14.7% |
| upper extremity(上肢) |
1,428 |
14.3% |
| abdomen(腹部) |
1,033 |
10.3% |
| face(面部) |
741 |
7.4% |
| chest(胸部) |
575 |
5.7% |
| foot / hand / unknown / others |
735 |
7.3% |
§4.6 数据完整性
| 维度 |
状态 |
说明 |
| 图像完整性 |
✅ 完整 |
10,015 张 JPEG 全部可用 |
| 诊断标签 |
✅ 完整 |
7 类标签无缺失 |
| 金标准类型 |
✅ 完整 |
4 类 dx_type 无缺失 |
| 患者年龄 |
⚠️ 0.57% 缺失 |
57 个缺失值,可用均值填充(分布对称) |
| 患者性别 |
⚠️ 0.7% 未知 |
50 个 unknown 值 |
| 解剖部位 |
✅ 完整 |
无缺失 |
| 分割掩码 |
✅ 可用 |
Nature Medicine 2020 附属(10,015 张全覆盖) |
| 肤色标签 |
❌ 不可用 |
无系统化 Fitzpatrick 肤色标签 |
§5 数据划分与使用建议
§5.1 官方划分方案
HAM10000 未提供官方训练 / 验证 / 测试集划分。原始发布仅包含训练集(10,015 张),测试集(511 张)通过 ISIC 2018 挑战赛评估服务器提供,金标准不公开。
§5.2 推荐划分方案
⚠️ 关键警告:HAM10000 中同一病灶有多张图像(10,015 张图像来自仅 7,470 个独立病灶,约 26% 的病灶有 2 张以上图像)。如果按图像级别随机划分,训练集和测试集将包含同一病灶的不同角度 / 放大倍数照片,导致严重的数据泄漏和性能高估。
推荐:病灶级分层划分
┌─────────────────────────────────────────────────────────────────┐
│ 病灶级分层划分(推荐方案) │
│ │
│ ① 按 lesion_id 分组 → 7,470 个独立病灶 │
│ ② 按 dx 标签分层 → 保持 7 类比例 │
│ ③ 病灶级划分: │
│ ├── Train: 70% → ~5,229 病灶 → ~7,024 张图像 │
│ ├── Valid: 15% → ~1,120 病灶 → ~1,497 张图像 │
│ └── Test: 15% → ~1,120 病灶 → ~1,494 张图像 │
│ ④ 确保:同一 lesion_id 的所有图像仅出现在一个子集中 │
│ ⑤ 固定 random_state=42 保证可复现 │
│ │
│ 关键:DermaMNIST 派生数据集因忽视此问题导致跨分区泄漏 │
│ (train-test: 886 张 / 641 病灶; train-valid: 440 张 / 332 病灶)│
└─────────────────────────────────────────────────────────────────┘
§5.3 自定义划分策略
| 策略 |
适用场景 |
优点 |
缺点 |
| 病灶级分层 70/15/15 |
通用分类任务 |
防泄漏、类别比例保持 |
测试集较小(~1,494 张) |
| 病灶级分层 80/20 |
简单二分类 |
更多训练数据 |
无独立验证集 |
| 病灶级 5 折交叉验证 |
严谨评估 |
充分利用数据 |
训练成本 ×5 |
| 来源留一法 |
跨域泛化评估 |
测试跨中心泛化 |
澳大利亚子集仅 2,259 张 |
| ISIC 2018 官方测试集 |
论文对比 |
可与挑战赛排名对比 |
仅 511 张,需评估服务器 |
§5.4 数据泄漏风险
| 泄漏类型 |
严重程度 |
说明 |
缓解措施 |
| 同病灶跨分区 |
🔴 高 |
26% 病灶有多图(1,956 个),图像级划分导致泄漏 |
按 lesion_id 分组划分 |
| 翻转增强泄漏 |
🟡 中 |
水平翻转后的图像与原图极为相似 |
泄漏感知划分(leakage-aware split) |
| DermaMNIST 遗传泄漏 |
🔴 高 |
MedMNIST 的 DermaMNIST 子集存在跨分区泄漏 |
使用 DermaMNIST-C 或 DermaMNIST-E 修正版 |
| 同患者跨分区 |
🟡 中 |
lesion_id 基于病灶而非患者,同一患者不同病灶可能跨分区 |
如需严格控制,可进一步按患者分组 |
§5.5 外部验证数据集
| 数据集 |
图像数 |
模态 |
与 HAM10000 互补性 |
| ISIC 2019 Challenge |
25,331 |
皮肤镜 |
8 类(新增 SCC),含 BCN20000 + MSK |
| ISIC 2020 Challenge |
33,126 |
皮肤镜 + DICOM |
含元数据,含 HAM10000 全部图像 |
| PH2 |
200 |
皮肤镜 |
精细标注(分割 + 框架),病理验证 20.5% |
| Derm7pt |
1,011 |
皮肤镜 |
7 点检查表结构化特征 |
| EDRA |
1,361 |
皮肤镜 |
双中心收集,7 点检查表 |
| Fitzpatrick 17k |
16,577 |
临床照片 |
肤色公平性标签(Fitzpatrick I-VI) |
§6 AI 就绪指南
§6.0 快速启动
# ============ HAM10000 快速启动 ============
# 方式 1: 从 Harvard Dataverse 下载(推荐)
# https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/DBW86T
# 方式 2: 从 Kaggle 下载
# kaggle datasets download -d eliocordeiropereira/skin-cancer-the-ham10000-dataset
# 方式 3: 从 HuggingFace 加载
# pip install datasets
from datasets import load_dataset
ds = load_dataset("marmal88/skin_cancer")
# 加载元数据
import pandas as pd
import os
from PIL import Image
from sklearn.model_selection import train_test_split
# 读取元数据
df = pd.read_csv("HAM10000_metadata.csv")
print(f"总图像数: {len(df)}") # 10,015
print(f"独立病灶数: {df[''''''''''''''''lesion_id''''''''''''''''].nunique()}") # 7,470
# 标签编码
label_map = {''''''''''''''''akiec'''''''''''''''': 0, ''''''''''''''''bcc'''''''''''''''': 1, ''''''''''''''''bkl'''''''''''''''': 2, ''''''''''''''''df'''''''''''''''': 3, ''''''''''''''''mel'''''''''''''''': 4, ''''''''''''''''nv'''''''''''''''': 5, ''''''''''''''''vasc'''''''''''''''': 6}
df[''''''''''''''''label''''''''''''''''] = df[''''''''''''''''dx''''''''''''''''].map(label_map)
# 病灶级分层划分(防泄漏!)
unique_lesionevent-blocked= df.groupby(''''''''''''''''lesion_id'''''''''''''''').first().reset_index()
train_lesions, temp_lesionevent-blocked= train_test_split(
unique_lesions, test_size=0.3, stratify=unique_lesions[''''''''''''''''dx''''''''''''''''], random_state=42
)
val_lesions, test_lesionevent-blocked= train_test_split(
temp_lesions, test_size=0.5, stratify=temp_lesions[''''''''''''''''dx''''''''''''''''], random_state=42
)
train_df = df[df[''''''''''''''''lesion_id''''''''''''''''].isin(train_lesions[''''''''''''''''lesion_id''''''''''''''''])]
val_df = df[df[''''''''''''''''lesion_id''''''''''''''''].isin(val_lesions[''''''''''''''''lesion_id''''''''''''''''])]
test_df = df[df[''''''''''''''''lesion_id''''''''''''''''].isin(test_lesions[''''''''''''''''lesion_id''''''''''''''''])]
print(f"Train: {len(train_df)} images ({train_df[''''''''''''''''lesion_id''''''''''''''''].nunique()} lesions)")
print(f"Valid: {len(val_df)} images ({val_df[''''''''''''''''lesion_id''''''''''''''''].nunique()} lesions)")
print(f"Test: {len(test_df)} images ({test_df[''''''''''''''''lesion_id''''''''''''''''].nunique()} lesions)")
# 验证无泄漏
assert len(set(train_df[''''''''''''''''lesion_id'''''''''''''''']) & set(val_df[''''''''''''''''lesion_id''''''''''''''''])) == 0
assert len(set(train_df[''''''''''''''''lesion_id'''''''''''''''']) & set(test_df[''''''''''''''''lesion_id''''''''''''''''])) == 0
assert len(set(val_df[''''''''''''''''lesion_id'''''''''''''''']) & set(test_df[''''''''''''''''lesion_id''''''''''''''''])) == 0
print("✅ 病灶级无泄漏验证通过")
§6.1 预处理 Pipeline
import numpy as np
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
class HAM10000Dataset(Dataset):
"""HAM10000 PyTorch Dataset(含病灶级防泄漏划分)"""
def __init__(self, df, image_dir, transform=None):
self.df = df.reset_index(drop=True)
self.image_dir = image_dir
self.transform = transform
def __len__(self):
return len(self.df)
def __getitem__(self, idx):
row = self.df.iloc[idx]
img_path = os.path.join(self.image_dir, f"{row[''''''''''''''''image_id'''''''''''''''']}.jpg")
image = Image.open(img_path).convert(''''''''''''''''RGB'''''''''''''''')
label = row[''''''''''''''''label'''''''''''''''']
if self.transform:
image = self.transform(image)
return image, label, row[''''''''''''''''lesion_id'''''''''''''''']
# 预处理策略
# 训练增强(处理类别不平衡 + 防过拟合)
train_transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.RandomHorizontalFlip(p=0.5),
transforms.RandomVerticalFlip(p=0.5),
transforms.RandomRotation(degrees=30),
transforms.ColorJitter(brightness=0.2, conevent-blocked=0.2, saturation=0.2, hue=0.1),
transforms.RandomResizedCrop(224, scale=(0.8, 1.0)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# 验证 / 测试(仅标准化)
eval_transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
# 类别加权损失
class_counts = train_df[''''''''''''''''label''''''''''''''''].value_counts().sort_index()
class_weights = 1.0 / class_counts
class_weights = class_weights / class_weights.sum() * len(class_counts)
criterion = torch.nn.CrossEntropyLoss(weight=torch.FloatTensor(class_weights.values))
# 数据加载器
BATCH_SIZE = 32
train_loader = DataLoader(
HAM10000Dataset(train_df, "HAM10000_images", train_transform),
batch_size=BATCH_SIZE, shuffle=True, num_workers=4, pin_memory=True
)
§6.2 训练模板
import torch.nn as nn
from torchvision import models
from sklearn.metrics import f1_score, cohen_kappa_score, roc_auc_score
import copy
# 模型(迁移学习)
model = models.efficientnet_b7(weights=''''''''''''''''IMAGENET1K_V1'''''''''''''''')
model.classifier = nn.Sequential(
nn.Dropout(p=0.4),
nn.Linear(model.classifier[1].in_features, 7)
)
model = model.cuda()
# 优化器与调度器
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=1e-4)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)
criterion = nn.CrossEntropyLoss(weight=torch.FloatTensor(class_weights.values).cuda())
# 训练循环
best_f1 = 0
for epoch in range(50):
model.train()
for images, labels, _ in train_loader:
images, labels = images.cuda(), labels.cuda()
optimizer.zero_grad()
outputs = model(images)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
scheduler.step()
# 验证
model.eval()
all_preds, all_labels = [], []
with torch.no_grad():
for images, labels, _ in val_loader:
images = images.cuda()
outputs = model(images)
preds = outputs.argmax(dim=1).cpu().numpy()
all_preds.extend(preds)
all_labels.extend(labels.numpy())
f1_macro = f1_score(all_labels, all_preds, average=''''''''''''''''macro'''''''''''''''')
kappa = cohen_kappa_score(all_labels, all_preds)
if f1_macro > best_f1:
best_f1 = f1_macro
best_state = copy.deepcopy(model.state_dict())
print(f"Epoch {epoch+1}: F1-macro={f1_macro:.4f}, QWK={kappa:.4f}")
# 测试评估
model.load_state_dict(best_state)
model.eval()
# ... 在 test_loader 上评估
§6.3 分割掩码加载
# 加载 Tschandl 分割掩码(Nature Medicine 2020 附属)
from zipfile import ZipFile
import io
def load_segmentation_mask(image_id, mask_zip_path):
"""加载指定图像的病灶分割掩码"""
with ZipFile(mask_zip_path, ''''''''''''''''r'''''''''''''''') as zf:
mask_name = f"{image_id}_segmentation.png"
with zf.open(mask_name) as f:
mask = Image.open(io.BytesIO(f.read())).convert(''''''''''''''''L'''''''''''''''')
return mask # 二值掩码(0=背景, 255=病灶)
# 可用于分割任务或注意力区域裁剪
mask = load_segmentation_mask("ISIC_0024306", "HAM10000_segmentations_lesion_tschandl.zip")
§6.4 坑点与解决方案
| 坑点 |
严重程度 |
问题描述 |
解决方案 |
| 图像级划分泄漏 |
🔴 致命 |
26% 病灶有多图,随机图像级划分导致 train/test 泄漏 |
按 lesion_id 分组划分 |
| 极端类别不平衡 |
🔴 高 |
nv:df = 58:1,直接训练导致少数类被忽略 |
WeightedRandomSampler + 类加权 CE + Focal Loss |
| DermaMNIST 遗传泄漏 |
🔴 高 |
MedMNIST 的 DermaMNIST 子集存在跨分区同病灶泄漏 |
使用 DermaMNIST-C 或自行从原始数据划分 |
| 偏振状态未知 |
🟡 中 |
偏振 / 非偏振图像视觉差异大,但未标注 |
无法从元数据区分;考虑数据增强覆盖两种模式 |
| 设备域差异 |
🟡 中 |
4 种设备色彩 / 分辨率差异显著 |
跨设备验证;考虑域自适应或色彩标准化 |
| 无肤色标签 |
🟡 中 |
无法直接做跨肤色公平性分析 |
结合 Fitzpatrick 17k 的 ITA 算法估算肤色 |
| 年龄缺失值 |
🟢 低 |
57 个缺失年龄值(0.57%) |
均值填充(分布对称)或中位数填充 |
| 测试集不可得 |
🟡 中 |
ISIC 2018 测试集金标准需评估服务器 |
自行划分测试集或使用 ISIC 评估服务器 |
| 终毛伪影 |
🟢 低 |
数据集保留终毛(反映真实场景) |
可选:DullRazor 脱毛预处理 |
| 增强泄漏 |
🟡 中 |
水平翻转后图像与原图极度相似 |
泄漏感知划分(同病灶原图与翻转图在同一分区) |
| 重复病理术语 |
🟢 低 |
原始病理报告术语不统一 |
数据集已统一为 7 类,无需额外处理 |
| 多诊断冲突 |
🟢 低 |
黑色素瘤伴痣的归类 |
数据集已规定:仅归入 mel 类 |
§6.5 数据增强策略
| 策略 |
推荐参数 |
原因 |
| 随机水平 / 垂直翻转 |
p=0.5 |
皮肤镜图像无方向偏好 |
| 随机旋转 |
±30° |
不同拍摄角度 |
| 颜色抖动 |
brightness=0.2, conevent-blocked=0.2, hue=0.1 |
模拟不同设备和光照条件 |
| 随机裁剪 |
scale=(0.8, 1.0) |
病灶位置偏移 |
| CLAHE(LAB 色彩空间) |
clip_limit=2.0, tile_grid=8×8 |
减少晕影和光照不均 |
| DullRazor 脱毛 |
disk SE=17×17, threshold=10 |
去除终毛伪影(可选) |
| Mixup / CutMix |
α=0.2 |
增强少数类泛化 |
| 过采样(少数类) |
复制至与 nv 类相同数量 |
直接解决类别不平衡 |
§6.6 模型推荐
| 模型 |
参数量 |
推荐场景 |
预期性能 |
| EfficientNet-B7 |
66M |
追求最高精度 |
ACC ~88%, AUC ~97% |
| ResNet-50 |
25M |
通用基线 |
ACC ~85%, AUC ~95% |
| DenseNet-201 |
20M |
特征复用优势 |
ACC ~87%, AUC ~96% |
| InceptionV3 |
24M |
多尺度特征 |
ACC ~87%, AUC ~96% |
| EfficientNet-B0 |
5.3M |
资源受限 / 移动端 |
ACC ~82%, AUC ~93% |
| ViT-Small |
22M |
Transformer 基线 |
ACC ~86%, AUC ~95% |
§6.7 计算需求
| 资源 |
最低 |
推荐 |
| GPU |
8GB VRAM(如 RTX 3060) |
24GB VRAM(如 RTX 4090 / A5000) |
| 内存 |
16GB |
32GB |
| 存储 |
5GB |
10GB(含增强缓存) |
| 训练时间 |
~2 小时(ResNet-50, 50 epochs, 单 GPU) |
~6 小时(EfficientNet-B7, 100 epochs) |
§6.8 评估指标
from sklearn.metrics import (
accuracy_score, f1_score, cohen_kappa_score,
roc_auc_score, recall_score, precision_score,
confusion_matrix, classification_report
)
import numpy as np
def evaluate_ham10000(y_true, y_pred, y_prob=None):
"""HAM10000 标准评估指标"""
results = {}
# 总体指标
results[''''''''''''''''accuracy''''''''''''''''] = accuracy_score(y_true, y_pred)
results[''''''''''''''''f1_macro''''''''''''''''] = f1_score(y_true, y_pred, average=''''''''''''''''macro'''''''''''''''')
results[''''''''''''''''f1_weighted''''''''''''''''] = f1_score(y_true, y_pred, average=''''''''''''''''weighted'''''''''''''''')
results[''''''''''''''''qwk''''''''''''''''] = cohen_kappa_score(y_true, y_pred, weights=''''''''''''''''quadratic'''''''''''''''')
# 每类指标
class_names = [''''''''''''''''akiec'''''''''''''''', ''''''''''''''''bcc'''''''''''''''', ''''''''''''''''bkl'''''''''''''''', ''''''''''''''''df'''''''''''''''', ''''''''''''''''mel'''''''''''''''', ''''''''''''''''nv'''''''''''''''', ''''''''''''''''vasc'''''''''''''''']
results[''''''''''''''''per_class''''''''''''''''] = {}
for i, name in enumerate(class_names):
results[''''''''''''''''per_class''''''''''''''''][name] = {
''''''''''''''''sensitivity'''''''''''''''': recall_score(y_true, y_pred, labels=[i], average=''''''''''''''''macro''''''''''''''''),
''''''''''''''''precision'''''''''''''''': precision_score(y_true, y_pred, labels=[i], average=''''''''''''''''macro'''''''''''''''', zero_division=0),
''''''''''''''''f1'''''''''''''''': f1_score(y_true, y_pred, labels=[i], average=''''''''''''''''macro'''''''''''''''', zero_division=0),
}
# AUC(需概率输出)
if y_prob is not None:
results[''''''''''''''''auc_macro''''''''''''''''] = roc_auc_score(y_true, y_prob, multi_class=''''''''''''''''ovr'''''''''''''''', average=''''''''''''''''macro'''''''''''''''')
# 恶性检测敏感性(临床关键指标)
malignant = [0, 1, 4] # akiec, bcc, mel
y_true_mal = np.isin(y_true, malignant).astype(int)
y_pred_mal = np.isin(y_pred, malignant).astype(int)
results[''''''''''''''''malignant_sensitivity''''''''''''''''] = recall_score(y_true_mal, y_pred_mal)
print(f"Accuracy: {results[''''''''''''''''accuracy'''''''''''''''']:.4f}")
print(f"F1 (macro): {results[''''''''''''''''f1_macro'''''''''''''''']:.4f}")
print(f"F1 (weighted):{results[''''''''''''''''f1_weighted'''''''''''''''']:.4f}")
print(f"QWK: {results[''''''''''''''''qwk'''''''''''''''']:.4f}")
if ''''''''''''''''auc_macro'''''''''''''''' in results:
print(f"AUC (macro): {results[''''''''''''''''auc_macro'''''''''''''''']:.4f}")
print(f"Mal. sens.: {results[''''''''''''''''malignant_sensitivity'''''''''''''''']:.4f}")
print("\nPer-class F1:")
for name, metrics in results[''''''''''''''''per_class''''''''''''''''].items():
print(f" {name:8s}: F1={metrics[''''''''''''''''f1'''''''''''''''']:.3f} Sens={metrics[''''''''''''''''sensitivity'''''''''''''''']:.3f} Prec={metrics[''''''''''''''''precision'''''''''''''''']:.3f}")
return results
§7 质量评估与局限性
§7.1 选择偏倚
| 偏倚类型 |
描述 |
影响 |
| 人群偏倚 |
维也纳组为高风险多痣转诊人群;澳大利亚组为高紫外线暴露初级保健 |
模型可能无法泛化到低风险人群或非白种人 |
| 设备偏倚 |
4 种不同设备 / 2 种偏振模式,色彩和分辨率差异显著 |
模型可能对特定设备过拟合 |
| 年龄偏倚 |
无儿科病例(双峰分布 35-50 和 60-75) |
不适用于儿童皮肤病变 |
| 地理偏倚 |
仅奥地利和澳大利亚两个中心 |
可能不适用于其他医疗体系或紫外线暴露水平 |
| 采集偏倚 |
维也纳 MoleMax 子集主要为痣随访(1.2% 病理验证),良性偏倚严重 |
nv 类过度代表且金标准较弱 |
| 排除偏倚 |
排除非色素性 / 黏膜 / 甲下 / 眼部病变 |
不适用于这些特殊部位的病变诊断 |
§7.2 标注质量
| 维度 |
评估 |
| 金标准可靠性 |
⭐⭐⭐⭐ 53.3% 组织病理学验证,公开皮肤镜数据集中最高之一 |
| 标注者数量 |
⚠️ 单标注者诊断(共识类为 PT+HK 两人,其余为 1 人) |
| 标注者间一致性 |
❌ 未报告诊断的标注者间一致性(Kappa 等) |
| 分割掩码质量 |
⭐⭐⭐⭐ 神经网络初始化 + 人工校正(FIJI 自由选择工具) |
| 元数据完整性 |
⭐⭐⭐⭐ 含年龄 / 性别 / 部位 / 来源 / 金标准类型,但无肤色 |
| 排除标准一致性 |
⭐⭐⭐⭐⭐ 统一执行排除标准并文档化 |
§7.3 泛化能力评估
| 维度 |
评估 |
| 跨设备泛化 |
⚠️ 4 种设备间存在域差异,模型可能对特定设备过拟合 |
| 跨中心泛化 |
⚠️ 维也纳 vs 澳大利亚人群差异显著(高风险转诊 vs 初级保健) |
| 跨肤色泛化 |
❌ 无系统化肤色标签,无法评估;推断以白种人为主 |
| 跨年龄泛化 |
❌ 无儿科数据,中老年偏倚 |
| 跨模态泛化 |
❌ 仅皮肤镜,不含临床照片;与 Fitzpatrick 17k(临床照片)互补 |
| 时间泛化 |
⚠️ 20 年采集跨度,设备和技术演进可能引入时间域差异 |
§7.4 已知技术限制
- 同病灶多图:10,015 张图像仅来自 7,470 个独立病灶(26.2% 病灶有多图),图像级划分导致数据泄漏
- 偏振状态未标注:偏振与非偏振皮肤镜图像视觉特征不同,但数据集未标注每张图像的偏振模式
- MoleMax 子集良性偏倚:3,954 张 MoleMax 图像中 94% 为 nv 类,且病理验证率仅 1.2%(随访标准)
- 无系统化肤色标签:无法直接用于跨肤色公平性研究(需结合 Fitzpatrick 17k 或 ITA 估算)
- 无官方划分:数据集仅含训练集,无官方验证 / 测试集划分,不同研究的性能难以直接比较
- 单标注者诊断:除共识类外,每个病灶仅由一名医生诊断,无法评估诊断标注者间一致性
- 无病灶级标注:除附属分割掩码外,无病灶内部结构(如色素网络、血管模式)的细粒度标注
§7.5 DAIMS 24 项数据就绪度评估
| # |
DAIMS 检查项 |
状态 |
说明 |
| 1 |
数据集动机与目的 |
✅ |
Scientific Data 论文详述:解决皮肤镜数据集小且单一的问题 |
| 2 |
数据集组成与统计 |
✅ |
10,015 张 / 7 类 / 2 中心 / 4 设备,统计完整 |
| 3 |
数据采集协议 |
✅ |
4 种设备采集流程详述,含预处理 Pipeline |
| 4 |
数据清洗与预处理 |
✅ |
InceptionV3 过滤 + 手动审核 + 直方图校正,流程文档化 |
| 5 |
标注者资质 |
✅ |
皮肤科医生(PT, CR, HK)+ 皮肤病理学家;标注者角色明确 |
| 6 |
标注协议 |
✅ |
4 级金标准体系,排除标准统一 |
| 7 |
标注者间一致性 |
❌ |
未报告诊断标注者间一致性(Kappa / ρ) |
| 8 |
标注工具 |
✅ |
python-pptx 提取 + InceptionV3 过滤 + FIJI 分割校正 |
| 9 |
数据格式与存储 |
✅ |
JPEG 600×450 + CSV 元数据,标准格式 |
| 10 |
元数据完整性 |
✅ |
8 个字段(含 lesion_id / dx_type / age / sex / localization) |
| 11 |
数据质量验证 |
✅ |
灰色世界假设检验 + 病理报告匹配审查 + 排除标准 |
| 12 |
去标识化 |
✅ |
IRB 批准(维也纳 1804/2017 + 昆士兰 2017001223),去除识别性内容 |
| 13 |
隐私保护 |
✅ |
无直接标识符;图像中识别性内容(衣物 / 纹身)已排除 |
| 14 |
人口统计元数据 |
⚠️ |
含年龄 / 性别,但无种族 / 肤色 |
| 15 |
类别分布文档化 |
✅ |
7 类分布完整记录,含与既往数据集的对比表 |
| 16 |
已知偏倚文档化 |
✅ |
论文详述人群偏倚(高风险转诊 + 高紫外线)、设备偏倚 |
| 17 |
数据使用许可 |
✅ |
CC BY-NC 4.0,明确非商业限制 |
| 18 |
数据访问机制 |
✅ |
Harvard Dataverse 免费下载 + ISIC API |
| 19 |
版本控制 |
✅ |
Dataverse V4 版本管理 + Nature Medicine 2020 补充 |
| 20 |
机器可读元数据 |
✅ |
CSV 格式 + Harvard Dataverse Dublin Core |
| 21 |
代码可用性 |
✅ |
GitHub 仓库含提取 / 过滤 / 标注脚本 |
| 22 |
训练 / 测试划分 |
⚠️ |
无官方划分;ISIC 2018 测试集需评估服务器 |
| 23 |
外部验证 |
✅ |
ISIC 2019-2025 挑战赛持续验证;Lancet Oncology 人机对比 |
| 24 |
持续维护 |
✅ |
Harvard Dataverse 版本更新至 V4;评估服务器持续运行 |
DAIMS 评分:22/24(91.7%,⭐⭐⭐⭐⭐ 5/5)
评估总结:HAM10000 在数据采集文档化、金标准设计、偏倚透明度、代码可用性和持续维护方面表现卓越。唯一扣分项为标注者间一致性未报告(#7)和无官方训练 / 测试划分(#22)。考虑到数据集发布于 2018 年,其文档化程度远超同时期绝大多数医学影像数据集。
§7.6 外部验证矩阵
| 验证数据集 |
验证类型 |
主要发现 |
| ISIC 2019 Challenge |
跨数据集泛化 |
HAM10000 训练模型在 ISIC 2019 上性能显著下降(ACC 降 5-10%) |
| ISIC 2020 Challenge |
跨数据集泛化 |
同上,域差异主要来自设备和人群差异 |
| PH2 |
小规模精细验证 |
HAM10000 模型在 PH2 上 melanoma 检测 AUC ~0.85 |
| DermaMNIST |
派生数据集 |
存在严重数据泄漏(跨分区同病灶),DermaMNIST-C/E 修正后性能下降 ~20% |
| Fitzpatrick 17k |
跨模态 + 肤色 |
皮肤镜 → 临床照片模态差异大,直接迁移性能差 |
| Lancet Oncology 2019 |
人机对比 |
139 算法中 2/3 超越 511 人类医生 |
§8 基准性能与生态
§8.1 排行榜
| 排名 |
方法 |
骨干网络 |
ACC |
F1-macro |
AUC |
QWK |
划分方式 |
引用 |
| 1 |
Multi-scale fusion + class weight (Hu et al. 2024) |
EfficientNetV2 |
94.0% |
— |
99.3% |
— |
病灶级 |
Comput Biol Med 2024 |
| 2 |
EnsembleSkinNet (VGG16+ResNet50+InceptionV3+DenseNet201) |
集成 |
~90% |
— |
— |
— |
去重+病灶级 |
Front Oncol 2025 |
| 3 |
EfficientNet-B7 + 增强 + SMOTE (Hartanto 2024) |
EfficientNet-B7 |
88.4% |
— |
— |
— |
80/20 |
UNIKA Thesis 2024 |
| 4 |
DenseNet201 + 注意力机制 (2025) |
DenseNet201 |
~88% |
— |
— |
— |
病灶级 |
PMC11720014 |
| 5 |
Modified InceptionV3 (Xu et al. 2024) |
InceptionV3 |
86.6% |
— |
96.0% |
— |
80/20 |
ACM 2024 |
| 6 |
EfficientNet-B2 + SMOTE (Kurniawan 2024) |
EfficientNet-B2 |
86.0% |
0.85 |
90.0% |
— |
80/20 |
JICHI 2024 |
| 7 |
EfficientNet-B1 (Tajerian et al. 2023) |
EfficientNet-B1 |
84.3% |
— |
— |
— |
80/20 |
PLoS ONE 2023 |
| 8 |
ResNet-50 (Hartanto 2024) |
ResNet-50 |
83.4% |
— |
— |
— |
80/20 |
UNIKA 2024 |
| 9 |
GLEAM Image Learner (leakage-aware) |
CaFormer |
~88% |
0.66* |
— |
— |
泄漏感知 |
Galaxy Training |
| 10 |
ISIC 2018 Challenge winners |
多种 |
— |
— |
— |
— |
官方测试集 |
MICCAI 2018 |
* GLEAM 在泄漏感知划分下 F1 降至 0.66,对比标准划分的 0.90,凸显数据泄漏对性能高估的严重影响。
⚠️ 跨研究对比警告:不同研究使用的划分方式(图像级 vs 病灶级)、增强策略和评估指标差异极大,排行榜仅供粗略参考。病灶级划分 + 泄漏感知的研究报告的 ACC 通常比图像级划分低 5-15%。
§8.2 SOTA 分析
Multi-scale fusion + class weight(Hu et al. 2024):在 HAM10000 上达到最高 ACC 94.0% / AUC 99.3%,核心创新为多尺度特征融合(浅层 + 深层)结合三种类别不平衡策略(类加权 + 标签平滑 + 重采样)。同时使用 HAM10000_RE(去毛版)和 HAM10000_SE(分割裁剪版)验证了毛发特征和病灶区域对分类的贡献。
人机对比(Lancet Oncology 2019):139 个算法 vs 511 名医生,每人对 30 张测试图诊断。最佳机器 25.4/30(84.7%)远超最佳人类 18.8/30(62.7%)。2/3 算法超越人类平均水平。但机器在来自未提供训练图像的中心数据上表现显著下降。
人机协作(Nature Medicine 2020):使用 ResNet34 CNN 提供恶性概率 / 多类概率 / CBIR 三种 AI 辅助模式。发现:(1) 人机协作准确率 > 单独 AI 或单独人类;(2) 经验最少的医生从 AI 辅助获益最多;(3) 多类概率优于 CBIR;(4) 故障 AI 会误导包括专家在内的所有级别医生。
§8.3 评测协议
| 协议 |
说明 |
适用场景 |
| ISIC 2018 官方测试集 |
511 张图,评估服务器在线提交 |
与挑战赛排名对比 |
| 病灶级分层 70/15/15 |
按 lesion_id 分组,保持类别比例 |
通用研究 |
| 5 折交叉验证 |
病灶级分层 |
严谨评估 |
| 来源留一法 |
维也纳训练 → 澳大利亚测试(或反向) |
跨域泛化评估 |
| 泄漏感知划分 |
同病灶原图与翻转图在同一分区 |
增强场景防泄漏 |
§8.4 相关数据集
| 数据集 |
关系 |
说明 |
| ISIC Archive |
包含 |
HAM10000 是 ISIC Archive 的子集 |
| ISIC 2018 Challenge |
使用 |
HAM10000 作为训练集 |
| ISIC 2019 Challenge |
包含 |
在 HAM10000 基础上扩展 |
| ISIC 2020 Challenge |
包含 |
HAM10000 图像包含在 2020 数据中 |
| DermaMNIST |
派生 |
MedMNIST 的皮肤镜子集(有泄漏问题) |
| DermaMNIST-C |
修正派生 |
修复泄漏 + 高分辨率版 |
| DermaMNIST-E |
修正派生 |
修复泄漏 + 不同划分组合 |
| HAM10000_RE |
派生 |
去毛版(Hu et al. 2024) |
| HAM10000_SE |
派生 |
分割裁剪版(Hu et al. 2024) |
| PH2 |
前身 |
维也纳组早期 200 张精细标注数据集 |
§8.5 生态快照
┌─────────────────┐
│ HAM10000 │
│ 10,015 images │
│ 7,470 lesions │
│ 7 classes │
└────────┬────────┘
│
┌─────────────────┼─────────────────┐
│ │ │
┌──────▼──────┐ ┌───────▼───────┐ ┌──────▼──────┐
│ ISIC 2018 │ │ Lancet Oncol │ │ Nature Med │
│ Challenge │ │ 2019 │ │ 2020 │
│ 139 算法 │ │ 511 医生对比 │ │ 人机协作 │
│ MICCAI │ │ 机器超越人类 │ │ ResNet34 │
└─────────────┘ └───────────────┘ └─────────────┘
│
┌──────▼──────────────────────────────────────┐
│ 派生与修正 │
├── DermaMNIST (有泄漏) → DermaMNIST-C/E (修正) │
├── HAM10000_RE (去毛) / HAM10000_SE (裁剪) │
└── 分割掩码 (Tschandl 2020 Nature Medicine) │
└──────────────────────────────────────────────┘
│
┌──────▼──────────────────────────────────────┐
│ 下游应用生态 │
├── 3,200+ 引用论文(分类 / 分割 / 公平性) │
├── ISIC 2019-2025 挑战赛基础训练数据 │
├── MedMNIST / DermaMNIST 标准基准 │
└── 人机协作研究的事实标准数据集 │
└──────────────────────────────────────────────┘
§8.6 社区影响
-
引用量:3,200+(Google Scholar,截至 2026-08),是皮肤病 AI 领域引用量最高的数据集论文
-
ISIC 挑战赛:HAM10000 是 ISIC 2018 挑战赛训练集,后续被纳入 ISIC 2019 / 2020 更大规模数据集
-
MedMNIST 标准:HAM10000 被 MedMNIST 收录为 DermaMNIST 子集,成为医学影像分类标准基准之一
-
人机对比里程碑:Lancet Oncology 2019 + Nature Medicine 2020 两篇顶刊论文使 HAM10000 成为医学 AI 人机对比研究的事实标准数据集
-
Kaggle / HuggingFace 生态:多个社区镜像版本,累计下载量数十万次
§9 相关资源与引用
§9.1 BibTeX
@article{tschandl2018ham10000,
title={The HAM10000 dataset, a large collection of multi-source dermatoscopic images of common pigmented skin lesions},
author={Tschandl, Philipp and Rosendahl, Cliff and Kittler, Harald},
journal={Scientific Data},
volume={5},
pages={180161},
year={2018},
publisher={Nature Publishing Group},
doi={10.1038/sdata.2018.161}
}
@article{tschandl2019comparison,
title={Comparison of the accuracy of human readers versus machine-learning algorithms for pigmented skin lesion classification: an open, web-based, international, diagnostic study},
author={Tschandl, Philipp and Codella, Noel and Akay, Beng{\"u} Nisa and Argenziano, Giuseppe and Braun, Ralph P and Cabo, Horacio and Gutman, David and Halpern, Allan and Helba, Brian and Hofmann-Wellenhof, Rainer and others},
journal={The Lancet Oncology},
volume={20},
number={7},
pages={938947},
year={2019},
publisher={Elsevier},
doi={10.1016/S1470-2045(19)30333-X}
}
@article{tschandl2020human,
title={Humancomputer collaboration for skin cancer recognition},
author={Tschandl, Philipp and Rinner, Christoph and Apalla, Zoe and Argenziano, Giuseppe and Codella, Noel and Halpern, Allan and Janda, Monika and Lallas, Aimilios and Longo, Caterina and Malvehy, Josep and others},
journal={Nature Medicine},
volume={26},
number={8},
pages={12291234},
year={2020},
publisher={Nature Publishing Group},
doi={10.1038/s41591-020-0942-0}
}
§9.2 官方资源
§9.3 社区资源
| 资源 |
说明 |
| Kaggle(多版本镜像) |
搜索 “HAM10000” 或 “skin cancer ham10000” |
| HuggingFace Datasets |
load_dataset("marmal88/skin_cancer") |
| Activeloop Deep Lake |
deeplake.load("hub://activeloop/ham10000") |
| MedMNIST / DermaMNIST |
预处理 224×224 版本(注意泄漏问题) |
| DatasetNinja |
在线可视化与标注浏览 |
§9.4 变更日志
| 版本 |
日期 |
变更 |
| V1 |
2018-06 |
初始发布(Scientific Data) |
| V2 |
2019-06 |
新增 Lancet Oncology 人机对比测试数据 |
| V3 |
2020-06 |
新增 Nature Medicine 分割掩码 + 交互数据 |
| V4 |
2020-08 |
当前版本,完整附属数据发布 |
§10 AI 使用声明卡
§10.1 AI 使用声明
本页面内容由 AI 辅助生成,经千方病案医学编辑部交叉审核后发布。所有技术参数、统计数据和代码示例基于 HAM10000 官方论文(Tschandl et al., Scientific Data 2018)、Lancet Oncology 2019、Nature Medicine 2020 及公开社区资源整理。DAIMS 评分基于 Marandi et al. (2025) 24 项框架独立评估。
§10.2 输入校验
| 校验项 |
状态 |
| frontmatter 9 字段完整 |
✅ |
| INFOBOX 24 行完整 |
✅ |
| §0 E-E-A-T 信任声明(3 条免责) |
✅ |
| §1 30 秒速览 + 战略分析 + 对比表 + 时间轴 + 用例 |
✅ |
| §2 ICD-11 + SNOMED CT 双重映射 |
✅ |
| §3 版本矩阵 + 模态 + 格式 + 标注流程 + 溯源链 |
✅ |
| §4 目录树 + DAIMS 字典 + 标签分布 + 完整性 |
✅ |
| §5 划分方案 + 泄漏风险 + 外部验证 |
✅ |
| §6 代码 + 坑点 + 增强 + 模型 + 评估指标 |
✅ |
| §7 偏倚 + 质量 + 泛化 + DAIMS 24 项 |
✅ |
| §8 排行榜 + SOTA + 生态 + 社区影响 |
✅ |
| §9 BibTeX + 资源 + 变更日志 |
✅ |
| §10 AI 声明 + 输入校验 + 页面状态 |
✅ |
| §C 单一 JSON-LD @graph 块 |
✅ |
| G3 内容纯净度(无注释 / 无占位符 / 无未定稿状态) |
✅ |
| published 状态声明 |
✅ |
§10.3 引用格式
千方病案医数集. HAM10000 — 多源皮肤镜色素病变基准数据集 AI-Ready Wikipedia. https://www.qianfanghub.com/ai-ready-dataset/ham10000/60. 发布日期:2026-08-04.
§10.4 页面状态
页面状态:published