信息速览

FracAtlas — 全身 X 光骨折多任务图谱 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | 骨折图谱 FracAtlas |
|---|---|
| 英文全称 | FracAtlas: A Dataset for Fracture Classification, Localization and Segmentation of Musculoskeletal Radiographs |
| 别名/简称 | FracAtlas |
| 疾病分类 | ICD-11 第 22 章损伤:NC12(肩或上臂骨折)、NC32(前臂骨折)、NC53(腕或手水平骨折)、NC72(股骨骨折);ICD-10 对应 S42/S52/S62/S72/S82 系列 |
| SNOMED CT | 363179006(Fracture of bone,形态学轴;FracAtlas 原始标注不含 SNOMED 编码,映射为编辑部补充) |
| 数据模态 | 全身 X 光平片(JPG,8-bit 灰度) |
| AI 任务类型 | 图像分类、目标定位(检测)、实例分割 |
| 样本总数 | 4,083 张(骨折 717 / 非骨折 3,366;922 个骨折实例) |
| 数据大小 | 约 323 MB |
| 数据格式 | JPG + COCO JSON / VGG JSON / YOLO / PASCAL VOC + CSV |
| 许可证 | CC BY 4.0 |
| 访问级别 | 开放(免注册直接下载) |
| DUO 标签 | NRES(无限制使用,须署名) |
| 语言 | 英语(标注与文档) |
| 首发日期 | 2023-04-25(FigShare 上线);论文 2023-08 刊出 |
| 最后更新 | 2026-06(FigShare 在线修订,截至 2026-09) |
| 发布机构 | 伊斯兰理工大学(IUT, Gazipur)、联合国际大学(UIU, Dhaka),孟加拉国 |
| 官方主页 | https://github.com/XLR8-07/FracAtlas |
| 下载地址 | https://doi.org/10.6084/m9.figshare.22363012 |
| DOI | 10.1038/s41597-023-02432-4(论文);数据集 DOI 10.6084/m9.figshare.22363012 |
| 引用次数 | 39+(Prophy 引用聚合,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 四格式标注、官方划分与转换脚本齐备;扣分项:实例标注仅覆盖 717 张骨折图、无患者级元数据与患者级划分 |
| 页面状态 | published |
§0 E-E-A-T 与可信度声明
医学审核:[千方病案医学编辑部]交叉审核:§2 医学背景(骨折影像学基础、ICD-11 与 SNOMED CT 映射、流行病学)、§7 偏倚分析。
数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。FracAtlas 采用 CC BY 4.0 许可,可免注册直接下载,复制、分发与改编均被允许,但使用时须注明原始出处并引用 Abedeen et al. (2023)。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 30 秒速览
这是什么? FracAtlas 是一个免费的全身 X 光骨折数据集,收录了 4,083 张手、腿、髋、肩四个部位的放射影像,其中 717 张确认存在骨折。它的特别之处在于"一份数据、三种标注":每张图有全局分类标签(骨折/非骨折),每处骨折还有像素级掩码(勾勒骨折区域轮廓)和边界框(框出骨折位置),共计 922 处骨折实例,全部由 2 名放射科医师和 1 名骨科医师协作完成人工标注。
为什么重要? 骨折是最常见的创伤性疾病之一,X 光又是成本最低的影像诊断手段,但开发骨折 AI 需要同时具备"分类、定位、分割"三重标注的公开数据集长期缺位——此前多数研究使用不公开的私有数据,社区难以公平比较。FracAtlas 以 CC BY 4.0 许可免注册发布,填补了这一空白,成为骨折检测领域最常用的公开基准之一。
我能用它做什么? 训练骨折自动初筛模型(分类)、骨折病灶检测框(定位)或精确到像素的病灶勾画(分割);研究类别不平衡(骨折:非骨折约 1:4.7)下的训练技巧;评测标注格式转换工具链。它适合研究、教学与原型开发,但不能直接用于临床诊断——官方基线的检测 mAP 仅约 56%-59%,且尚未见到同行评审的外部人群验证结果。
§1.1 摘要
FracAtlas 由孟加拉国伊斯兰理工大学(IUT)与联合国际大学(UIU)团队构建,于 2023 年 8 月发表于 Nature 旗下开放期刊 Scientific Data。团队在 2021-2022 年间从孟加拉国 3 所医院与诊断中心收集了 14,068 张常规 X 光 DICOM 影像,为脱敏将影像转为 JPG 并丢弃全部元数据,再由医生监督过滤出手、腿、髋、肩四部位的 4,083 张图像。标注采用两阶段人机协同流程:先用开源平台 makesense.ai 由 2 名放射科医师独立标记每张图的骨折存在性、数量与位置,分歧影像交由骨科医师仲裁,掩码再经 medical officer 复核。主标注格式为 COCO JSON(多边形掩码),官方脚本将其转换为 VGG JSON(无损)、YOLO 与 PASCAL VOC(有损)格式,并以 CSV 提供全局标签。技术验证部分使用 YOLOv8s 与 YOLOv8s-seg 在骨折子集(574/82/61 划分)上建立了定位与分割基线:检测框 mAP@0.5 为 56.2%,掩码 mAP@0.5 为 58.9%。
§1.2 战略价值
多任务基准的稀缺性。 在 FracAtlas 之前,公开 X 光数据集要么只支持分类(如 ChestX-ray14 约 112,000 张胸片仅含胸部疾病标签),要么规模小且缺少像素级标注;多数骨折 AI 论文依赖私有数据,SOTA 比较无法复现。FracAtlas 把分类、定位、分割三任务的标注统一到同一批影像上,让"同一数据、同一划分、同一指标"的横向比较首次成为可能,这也是它在骨折检测文献中被广泛采用为核心基准的直接原因。
低门槛的真实世界数据。 数据来自南亚中等收入国家的常规放射科工作流,设备为 Fujifilm 与 Philips 两大主流品牌,年龄跨度 8 个月到 78 岁,比欧美单中心精英数据集更贴近基层医疗的影像质量与人群结构。对研究资源有限的团队,323 MB 的体积、免注册下载与笔记本级训练环境(官方基线在 RTX 3070 8GB 上完成)意味着极低的复现成本,是入门医疗影像多任务学习的理想起点。
这两点合起来决定了 FracAtlas 在生态中的独特位置:它不是最大的、也不是标注最精的,却是缺陷密度最低的入门教材——它的每一个短板(无元数据、类别失衡、小目标、版本漂移)都有据可查、可复现、可绕过,使用者踩坑后能沿官方材料追根溯源。对教学场景而言,"已知缺陷的完整清单"比"没有缺陷"更有价值。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注类型 | 差异化定位 |
|---|---|---|---|---|
| FracAtlas | 4,083 张(922 个骨折实例) | 全身肌骨 X 光 | 分类+定位+分割三重标注 | 唯一同时提供三任务标注的开放骨折数据集 |
| MURA | 40,561 张(14,863 项研究、11,184 名患者) | 上肢肌骨 X 光 | 二元异常标签(研究级) | 规模大但仅支持研究级分类,无病灶级掩码 |
| VinDr-CXR | 18,000 张 | 胸部 X 光 | 15 类胸部发现(框级) | 胸科专用,不覆盖四肢骨折 |
| ChestX-ray14 | 约 112,000 张 | 胸部 X 光 | 14 类胸部疾病标签 | 大规模胸片分类,无定位/分割标注 |
来源:各数据集官方论文;ChestX-ray14 规模引自 FracAtlas 论文 对既有数据集的综述表。
读表要点:规模数字不能横向直接换算"含金量"——MURA 的 40,561 张是"研究"级的重复计数(同一患者多张片),其患者数仅 11,184;FracAtlas 的 4,083 张则几乎全部是独立影像记录。另一个关键差异在标注层级:MURA 与 ChestX-ray14 停留在图像级标签,VinDr-CXR 到框级,FracAtlas 则提供了像素级掩码——在"每个样本携带多少监督信号"这一维度上,FracAtlas 的信息密度是同表中最高的一档。
§1.4 版本时间轴
| 时间 | 事件 | 说明 |
|---|---|---|
| 2023-04-25 | FigShare 数据集首次上线 | 首个公开版本,含 images/Annotations/utilities 与 dataset.csv |
| 2023-06 | GitHub 代码仓库建立 | 训练与预测 Notebook(YOLOv8s / YOLOv8s-seg)开源 |
| 2023-08-05 | 论文刊出于 Scientific Data 10:521 | 定义 4,083 张、922 实例的论文口径 |
| 2026-06-13 | FigShare 记录最新修订 | 页面注明发布后数据有修改,计数以数据集为准(当前描述为 4,073 张) |
§1.5 典型应用场景
- 急诊骨折初筛辅助:以分类头输出骨折概率,对阴性批量影像做低风险分诊,减轻放射科医师阅片负担。
- 骨折病灶检测与勾画:用定位框提示阅片注意力区域,用分割掩码量化病灶范围,辅助教学与报告生成。
- 类别不平衡方法论研究:骨折:非骨折约 1:4.7 的真实失衡比例,是检验 focal loss、重采样、难例挖掘等方法的天然试验台。
- 小目标实例分割基准:骨折实例平均仅占画面 0.89% 面积,适合评估高分辨率特征保持与多尺度检测策略。
- 标注格式工具链评测:同一份标注以 COCO/VGG/YOLO/VOC 四格式发布,可直接用于验证格式转换脚本的无损性。
- 医疗 AI 教学沙盘:规模小到可以整库放讲义、缺陷却足够典型(不平衡、小目标、版本漂移、泄漏面),是把"数据集审计"教给学生的高性价比教材——本文 8 个坑点可直接作为课程实验清单。
- 归因与可信 AI 研究:单类任务、单器官影像、小模型即可跑通的组合,让 Grad-CAM/EigenCAM 等可解释性方法的审计实验在单卡笔记本上就能完成(社区已有公开先例,见坑点 6)。
§2 医学背景
§2.1 疾病编码映射表
FracAtlas 原始标注不含任何疾病编码,仅提供解剖部位与骨折二值标签;下表为本编辑部为检索与互操作目的补充的标准术语映射,编码依据 WHO ICD-11 浏览器(MMS v2025-01)。
| 部位标签 | ICD-11 编码 | ICD-10 参考 | 术语(中文/英文) |
|---|---|---|---|
| 肩部扫描 | NC12(肩或上臂骨折) | S42 系列 | 肩或上臂骨折 / Fracture of shoulder or upper arm |
| 手部扫描 | NC32(前臂骨折,含 NC32.5 桡骨下端);NC53(腕或手水平骨折) | S52、S62 系列 | 前臂骨折 / Fracture of forearm;腕或手水平骨折 / Fracture at wrist or hand level |
| 腿部扫描 | 膝或小腿损伤段(NC80 系列,编码见 WHO 浏览器) | S82 系列 | 胫腓骨/踝部骨折 / Fracture of lower leg |
| 髋部扫描 | NC72(股骨骨折,隶属髋或大腿段 NC70-NC7Z) | S72 系列 | 股骨骨折 / Fracture of femur |
§2.1b SNOMED CT 映射表
| 标签 | ICD-11 | SNOMED CT | 术语说明 |
|---|---|---|---|
| 骨折(总标签 fractured) | 第 22 章 NC 系列 | 363179006 | Fracture of bone(骨骨折),属形态学轴概念,各部位骨折均为其下位概念 |
| 肩部骨折 | NC12 | 363179006 层级下按解剖部位细分 | 原始数据无部位级诊断标签,需二次标注才能映射到细分概念 |
| 前臂/腕手骨折 | NC32、NC53 | 363179006 层级下细分 | 手部扫描常含桡骨远端(成人最常见骨折部位之一) |
| 股骨骨折 | NC72 | 363179006 层级下细分 | 含股骨颈、转子间等经典亚型位置 |
§2.2 疾病简介与流行病学
骨折(fracture)指骨的连续性或完整性中断,多由创伤、应力积累或骨强度下降(骨质疏松)引起,是最常见的肌肉骨骼系统损伤。X 光平片因其廉价、快速、可及,是全球特别是中低收入国家骨折诊断的一线手段;但阅片依赖经验,基层医院漏诊与延时诊断并不少见,这正是计算机辅助诊断(CAD)的核心动机。全球负担层面,GBD 2019 系统分析估计 2019 年全球新发骨折约 1.78 亿例(Wu et al., 2021, Lancet Healthy Longevity, DOI 10.1016/S2666-7568(21)00172-0),其中髋部骨折在老年人群中致死致残负担最重。FracAtlas 覆盖的手部(含桡骨远端)、腿部与髋部恰是临床上骨折最高发的区域之一,其 8 个月至 78 岁的年龄跨度也让数据集同时包含儿童骨骺与老年骨质疏松骨两类"影像学陷阱"。
从阅片实践看,骨折 X 光诊断有三个对 AI 有意义的特征:一是"低发病率、高后果"——急诊影像中骨折阳性率通常低于筛查场景的想象,漏诊代价却很高,因此模型价值集中在"提示可疑区"而非"下诊断";二是"多视角互证"——临床常规对可疑部位拍摄正侧位双视角,这也是 FracAtlas 设计 multiscan 标记的临床来源,模型若能利用同图多视角信息可降低假阴性;三是"隐匿性骨折"——无明显移位的细微骨折线在低质量 DR 片上易被忽略,这类难例正是像素级掩码标注比单纯框标注更具训练价值的场景。
§2.3 临床任务定义
| 任务 | 临床问题 | FracAtlas 对应能力 | 输出形式 |
|---|---|---|---|
| 筛查(分类) | 这张片子里有没有骨折? | 全局标签 fractured 0/1 | 图像级二分类概率 |
| 诊断定位(检测) | 骨折在哪里? | 每实例边界框(YOLO/PASCAL VOC 格式) | 实例级矩形框 |
| 病灶勾画(分割) | 骨折区域的精确范围? | 每实例多边形掩码(COCO/VGG 格式) | 像素级掩码 |
需要强调:FracAtlas 不提供骨折形态学分型(横行、斜行、螺旋、粉碎等)、移位程度或稳定性判断标签,这些更细的临床任务需要社区在掩码基础上二次标注或结合外部数据。
三个任务在临床价值链上依次递进:分类决定"要不要细看",定位决定"看哪里",分割决定"范围多大"。FracAtlas 把三者放在同一批影像上,使"分类模型给候选 → 检测模型给区域 → 分割模型给定量"的级联研究成为可能;也正因如此,三个任务各自需要不同的评估协议与划分策略(详见 §5 与坑点 3),把三套指标压进一张对比表是常见的方法论错误。
§2.4 患者人群表
| 维度 | 内容 | 来源 |
|---|---|---|
| 来源机构 | Lab-Aid Medical Center(Brahmanbaria)、Anupam General Hospital and Diagnostic Center(Bogra)、Prime Diagnostic Center(Barishal) | 论文 Methods |
| 采集时间 | 2021-2022 年 | 同上 |
| 年龄 | 8 个月-78 岁 | 同上 |
| 性别(全数据集) | 约 62% 男 / 38% 女 | 同上 |
| 性别(异常/骨折研究) | 85.4% 男 / 14.6% 女 | 同上 |
| 种族 | 未披露(来源国为孟加拉国) | — |
| 就诊类型 | 常规放射科检查(论文未细分门诊/急诊比例) | — |
§2.5 临床价值
对放射科医师而言,骨折 X 光初筛工作量大、重复度高,且夜间急诊疲劳状态下的漏诊风险显著;一个可靠的分类模型可承担"阴性预筛"角色,把注意力集中到阳性与可疑片上。对骨科教学,实例级掩码让"骨折线在哪里、范围多大"变得可量化,可用于建设交互式阅片教学库。对医疗 AI 工程,FracAtlas 提供了稀缺的"同一影像、三级标注"结构,支持多任务联合训练研究——例如用分割监督增强定位、用定位线索提升分类,这类多任务协同实验在其他公开骨折数据上难以开展。
价值陈述里最容易高估与低估的部分需要各说一句:容易高估的是"辅助诊断"闭环——本库的 61 张官方测试图与无外部验证现状,支撑不起"可替代第二读片人"级别的结论;容易低估的是"工程基座"价值——四格式标注、划分清单、转换脚本与笔记本级复现成本的组合,让一个多任务医学影像管线(数据→训练→评估→监控)能在两周内从零搭完,这种"全链条可跑通"的完整性在公开医学数据中并不多见。
§2.6 标注金标准对照表
| 维度 | FracAtlas 的做法 | 说明 |
|---|---|---|
| 标注划分 | 分类标签覆盖全部 4,083 张;实例标注仅 717 张骨折图 | 非骨折图无标注文件属设计而非缺失 |
| 标注方式 | 人工多边形掩码 + 矩形框(makesense.ai 平台) | COCO JSON 为主格式,脚本转换衍生格式 |
| 标注者 | 2 名放射科医师独立标注,骨科医师仲裁分歧 | 双标+仲裁的三级流程 |
| 质控性质 | 掩码由 medical officer 全量复核 | 论文未报告标注者间一致性系数(如 kappa) |
这张表回答的是"标注从哪里来";它没有回答的"标注有多准"需要使用者自行验证(抽样复标方案见 §7.2)。把两件事分开,是评估任何医学数据集标注质量的基本功:流程设计合理不等于标签正确,而一致性系数缺失也不必然意味着标签不可靠——只是可靠性目前无法被第三方审计。
§3 数据集规格
§3.0 版本抉择矩阵
FracAtlas 存在官方 FigShare 版与多个第三方镜像,且官方版本在论文发表后有过修订,选择时须谨慎:
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 复现论文基线 / 正式研究 | FigShare 官方 ZIP | 323 MB | 与论文同源,含 utilities 转换脚本与 Fracture Split 划分;注意下载后重算样本数(页面描述为 4,073 张,与论文 4,083 存在差异) |
| Python 快速实验 | HuggingFace yh0701/FracAtlas_dataset | 约 323 MB | 提供 datasets 加载脚本,直接产出图像+标注对;第三方维护,其许可字段标注有误,勿引用其许可 |
| 临时浏览/教学演示 | Kaggle 镜像 | 约 343 MB | 免配置浏览;目录被改名且许可标注不一致,不建议用于正式发表 |
| YOLO 目录结构训练 | 官方仓库自行转换 | — | 用 dataset.csv + COCO JSON 按官方 574/82/61 或自定义划分生成 images/labels 目录 |
§3.1 模态详情
单一模态:数字 X 光摄影(DR)肌骨平片。影像以 8-bit JPG 发布,灰度动态范围固定为 0-255;原始 DICOM 的窗宽窗位、像素间距、采集参数等元数据在脱敏阶段被整体丢弃,因此无法进行窗位重调或任何涉及物理尺度的测量。拍摄视角分为正位(frontal,2,503 张)、侧位(lateral,1,492 张)与斜位(oblique,418 张),396 张图像在同一画面内包含同一器官的两个视角(multiscan)。
对惯用 DICOM 的工作流(如 pydicom 读窗宽窗位、RescaleSlope 校准),JPG 版意味着管线起点必须重写:预处理只剩下"读 JPG + 几何缩放 + 灰度归一化"三步,所有依赖物理量(mm、HU、曝光参数)的特征工程在本库上均不可实施。这一限制换来的回报是零配置门槛——无需安装 DICOM 解析栈,任何能读图片的语言都能消费整个数据集。
§3.2 按子集样本数表
| 子集 | 图像数 | 骨折图 | 非骨折图 | 骨折实例数 |
|---|---|---|---|---|
| 手部 | 1,538 | 437 | 1,101 | 混计于总量 |
| 腿部 | 2,272 | 263 | 2,009 | 混计于总量 |
| 髋部 | 338 | 63 | 275 | 混计于总量 |
| 肩部 | 349 | 63 | 286 | 混计于总量 |
| 合计 | 4,083 | 717 | 3,366 | 922 |
注:部位计数之和大于 4,083 是因为 4,497 个部位标记允许一图含多个部位(mixed);一图最多含 5 处骨折实例。
上表是构建分层评估的基础:髋部与肩部的骨折图各只有 63 张,即使做 80/20 划分,测试侧也仅 12-13 张,任何部位级结论都只具方向性参考价值。若研究目标包含"按部位报告性能",更稳妥的做法是对四个部位分别做 5 折交叉验证,以均值±标准差的形式呈现,并明确标注髋/肩两组的置信区间宽度。
§3.3 格式表
| 内容 | 格式 | 位置 | 用途 |
|---|---|---|---|
| 影像 | JPG(8-bit 灰度) | images/Fractured、images/Non_fractured | 全部任务输入 |
| 分割主标注 | COCO JSON | Annotations/COCO JSON | 实例分割(多边形掩码) |
| 分割备份 | VGG JSON | Annotations/VGG JSON | 由 COCO 无损转换 |
| 定位标注 | YOLO TXT | Annotations/YOLO | 检测(含 classes.txt,单一类 fractured) |
| 定位标注 | PASCAL VOC XML | Annotations/PASCAL VOC | 检测(由 YOLO 转换) |
| 全局标签 | dataset.csv | 根目录 | 分类任务(12 列 0/1 标签) |
| 官方划分 | train/valid/test.csv | utilities/Fracture Split | 复现论文基线(仅骨折图) |
| 转换脚本 | Jupyter Notebook | utilities | coco2yolo、yolo2voc |
四格式并存的正确消费方式:把 COCO JSON 当作唯一事实来源,其余三个格式视为"官方预生成的快照"——需要 VGG/YOLO/VOC 时优先用官方 Notebook 从 COCO 现转(保证与自家任务的对齐),标注只读 COCO(保证小实例坐标不被中间格式量化侵蚀),详见坑点 4 的定量分析。
§3.4 存储大小
官方 ZIP 总大小 323 MB(FigShare;Dataset Ninja 测得 323.57 MB),解压后因标注多格式冗余约占 1.2-1.5 倍空间。训练侧无需额外缓存:4,083 张 JPG 可整库载入内存做缓存训练(8-bit JPG 平均单张约 79 KB),是真正的"笔记本友好"数据集。
对存储敏感的场景还有两条裁剪路径:只做分类时,images/ 与 dataset.csv 两个部分即可覆盖全部需求(标注目录可整段跳过);只做检测/分割时,下载后可删除 VGG JSON 与 PASCAL VOC 两个衍生格式目录(约占标注体积大半),仅保留 COCO JSON 作为唯一事实来源(坑点 4)。
§3.5 标注方式
人工标注,三角色流水线:2 名放射科医师逐张独立判断骨折有无、数量与部位;二人结果一致的影像直接采纳,数量或位置存在分歧的影像提交骨科医师独立复标并三方比对仲裁;随后全部掩码由 medical officer 逐一复核。标注在开源平台 makesense.ai 上完成,掩码以 COCO 多边形格式落盘,允许同一影像内多个实例掩码重叠。论文未报告标注者间一致性统计量(如 Cohen’s kappa),这是评估标注可靠度时的一个已知信息缺口。
复刻该流程时的三条减损建议:
- 仲裁环节只送"数量或位置分歧"的影像(官方口径),不要把全部影像送第三人——成本翻倍而增益有限;
- 复核环节按"低置信掩码优先"排序抽样,把复核人力集中在细碎、多实例的图上;
- 记录每位标注者的标注时长与分歧率,为后续估计标签噪声率留下第一手材料。
§3.6 标注者资质
标注者为执业放射科医师(论文表述为 expert radiologists,“each with years of experience in the field”),仲裁者为骨科专科医师,复核者为 medical officer。团队未披露标注者的具体年资、人数上限之外的细节与一致性指标;使用者应将标签质量视为"专家级但未量化",在构建高利害应用时自行抽样复标验证。
§3.7 采集周期
2021 年至 2022 年连续采集,覆盖约两年常规临床工作流;无季节分层说明。采集与标注的整体时间线:2021-2022 采集 → 2023 年初清洗与标注 → 2023-04-25 FigShare 上线 → 2023-08-05 论文发表。
时间维度的两个使用提示:其一,14,068 张原始 DICOM 的采集发生在临床工作流内(非研究专用队列),意味着检查适应症、投照条件与急诊占比均不可追溯,论文亦未提供逐图日期;其二,从采集完成到正式发表间隔约一年,这段时间世界范围内没有任何新 COVID 相关或设备迭代冲击被记录进数据,使用者在时间外推(如"模型可服务到 2030 年")时应保持克制。
§3.8 地域覆盖
单一国家(孟加拉国)三所医院与诊断中心,分布于 Brahmanbaria、Bogra、Barishal 三地(多数影像来自 Lab-Aid Medical Center)。无高收入国家数据,无多国多中心覆盖;跨地域泛化是该数据集的明确边界,使用时应在论文 limitation 中主动声明。
三地覆盖了城市的不同层级:Bogra 与 Barishal 为地级市,Brahmanbaria 为县级行政中心,这一组合使数据贴近南亚二级医疗市场的真实影像条件——设备较旧、摆位标准化程度低于大型教学医院,但恰恰是许多发展中国家部署 CAD 系统的现场条件。把这种"基层影像美学"当作缺陷还是特性,取决于使用者的目标场景;若目标是高流量三甲医院,域差距需额外评估。
§3.9 设备规格
采集设备为 Fujifilm 与 Philips 两个品牌的 X 光机(论文未披露具体型号与逐图设备记录)。双品牌来源带来的分辨率、噪声与对比度差异已包含在数据中,可用于粗粒度的设备鲁棒性检验,但无法做严格的设备维度分层实验。
工程上的连带影响有二:其一,JPG 发布版已在采集端经过厂商各自的处理链(均衡、降噪参数不可知),复现时不要叠加激进的二次锐化或对比度拉伸;其二,若模型在自家院内设备上部署,先做小样本直方图对齐或域适配评估,确认噪声纹理差异未引入系统性假阳性,再进入全量验证。
§3.10 深度溯源链
3 所孟加拉国医院/诊断中心(2021-2022)
→ 14,068 张 DICOM 原始扫描
→ DICOM→JPG 转换脱敏(元数据丢弃 + 任意命名,IREB/BMRC 伦理批准)
→ 医生监督过滤(剔除胸/颅/脊柱,保留手/腿/髋/肩 4,083 张)
→ 2 名放射科医师独立标注(makesense.ai)
→ 骨科医师仲裁分歧影像
→ medical officer 全量复核掩码
→ COCO JSON 主格式落盘(dataset.csv 全局标签同步生成)
→ 官方 Notebook 转换为 VGG JSON / YOLO / PASCAL VOC
→ FigShare 公开发布(CC BY 4.0,2023-04-25)
§4 数据结构
§4.0 目录树
以下为官方 ZIP 解压后的结构(依据 论文 Fig. 6 与 FigShare 描述):
FracAtlas/
├── images/
│ ├── Fractured/ # 717 张骨折图像
│ │ ├── IMG0000009.jpg # 文件名 = IMG + 7 位零填充序号
│ │ └── ...
│ └── Non_fractured/ # 3,366 张非骨折图像
│ └── ...
├── Annotations/
│ ├── COCO JSON/ # 分割主标注(仅骨折图,多边形掩码)
│ ├── VGG JSON/ # 由 COCO 无损转换
│ ├── YOLO/ # 逐图 txt + classes.txt(单类 fractured)
│ └── PASCAL VOC/ # 逐图 xml(由 YOLO 转换)
├── utilities/
│ ├── coco2yolo.ipynb # COCO → YOLO 转换
│ ├── yolo2voc.ipynb # YOLO → PASCAL VOC 转换
│ └── Fracture Split/
│ ├── train.csv # 官方训练集(574 张骨折图)
│ ├── valid.csv # 官方验证集(82 张骨折图)
│ └── test.csv # 官方测试集(61 张骨折图)
└── dataset.csv # 4,083 行全局标签表(分类任务主表)
§4.1 DAIMS 字段字典
dataset.csv 每行对应一张影像,核心字段如下(8 列字典,取值范围除注明外均为 0/1,1=存在):
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| image_id | string | 影像唯一标识(IMG+7 位数字) | IMG0000009 | 主键、文件对齐 | 无(生成规则统一) | 无缺失 | IMG0000000-IMG9999999 |
| fractured | int | 是否含骨折(分类主标签) | 1 | 二分类标签 | 依赖双人标注+仲裁,论文未报 kappa | 无(0 为明确阴性) | 0/1 |
| fracture_count | int | 骨折实例数 | 2 | 实例数回归/校验 | 与掩码数需人工对齐 | 无(0=无骨折) | 0-5 |
| hand / leg / hip / shoulder | int | 四个解剖部位存在标记 | leg=1 | 部位分层评估 | 一图可多部位同时为 1 | 无 | 0/1 |
| mixed | int | 一图含多个部位 | 0 | 识别多部位复杂影像 | — | 无 | 0/1 |
| multiscan | int | 同图含同一器官多视角 | 0 | 泄漏控制(划分需整图处理) | — | 无 | 0/1 |
| hardware | int | 含骨科内固定物 | 1 | 偏倚审计(金属伪影捷径) | — | 无 | 0/1 |
| frontal / lateral / oblique | int | 拍摄视角标记 | frontal=1 | 视角分层评估 | 一图可多视角 | 无 | 0/1 |
| segmentation | COCO 多边形 | 骨折实例像素轮廓(仅骨折图) | [[x1,y1,…]] | 实例分割监督 | 有损转换时丢失 | 结构性缺失(非骨折图无此字段) | 坐标数组 |
| bbox | COCO 框 | 骨折实例边界框(仅骨折图) | [x, y, w, h] | 检测监督 | 由掩码推导 | 结构性缺失 | 像素坐标 |
§4.2 标签分布
| 标签维度 | 分布 | 比例 |
|---|---|---|
| 骨折 vs 非骨折 | 717 vs 3,366 | 约 17.6% vs 82.4%(≈1:4.7) |
| 骨折图视角 | 正位 438 / 侧位 325 / 斜位 45 | 61.1% / 45.3% / 6.3%(一图可多视角,和>717) |
| 非骨折图视角 | 正位 2,065 / 侧位 1,167 / 斜位 373 | 一图可多视角 |
| 实例数/骨折图 | 1-5 处,共 922 处 | 平均约 1.29 处/图 |
| 内固定物 | 99 张含 hardware | 约 2.4% |
| 多视角同图 | 396 张 multiscan | 约 9.7% |
§4.3 关键统计
- 骨折实例平均占画面面积约 0.89%(Dataset Ninja 统计),属典型小目标分割问题。
- 手部是影像数最多的部位(1,538 张,37.7%),髋部最少(338 张,8.3%);各部位骨折阳性率差异大:手 28.4%、腿 11.6%、髋 18.6%、肩 18.1%(据论文部位计数计算)。
- 官方骨折子集划分:train 574(80%)/ valid 82(12%)/ test 61(8%)。
- 无患者标识列:同一患者多次检查无法识别,也无法构建患者级划分。
对这组数字做一次"体检式"解读:手部 28.4% 的阳性率是腿部(11.6%)的 2.4 倍,意味着"部位"本身就是强预测特征——若模型从部位标记或图像外观反推部位,再由部位推断骨折概率,即可拿到可观的"虚指标"。审计方法:训练一个只用部位列的空模型,看其 AUROC;真实模型的表现减去这个基线的差距,才是影像内容本身的贡献。
§4.4 数据层级
数据集(4,083 张)
└── 影像级(image)= dataset.csv 一行 = 一个 JPG 文件
├── 全局标签(fractured、部位、视角、hardware、multiscan)
└── 实例级(instance,仅骨折图)× 1-5
├── 多边形掩码(COCO segmentation)
└── 边界框(bbox)
与 CT/MRI 数据集"患者→检查→序列→切片"四级层级不同,FracAtlas 只有两级,且缺患者级节点——这是使用时最重要的结构差异。
这个两级结构的直接推论:任何"以患者为中心"的分析(如同一患者随访对比、疗效评估、重复检查去重)在本库上都不可实施;同时它也把"患者级划分"这类防泄漏手段从工程选项变成了不可能选项(§5.3)。在设计实验前先把这两条写进研究计划,比跑完模型再发现要省一个完整迭代周期。
§4.5 缺失值与信息性缺失
| 情形 | 表现 | 处理建议 |
|---|---|---|
| 非骨折图无标注文件 | COCO/VGG/YOLO/VOC 目录中查不到对应文件 | 结构性设计:无标注=无实例,检测/分割管道须注册空标签负样本 |
| 无年龄/性别/患者 ID 列 | dataset.csv 12 列均为影像属性 | 元数据在脱敏阶段整体丢弃,属不可恢复缺失;分层评估需外部数据 |
| 实例掩码无部位级诊断 | 掩码只有 fractured 一个类别 | 无法直接做骨折分型任务 |
| 无缺失编码列 | 0/1 均为真实值 | 不存在 -1/NaN 式信息性缺失编码 |
本库的缺失模式属于"结构性缺失"而非"随机缺失":非骨折图无实例标注、所有图无年龄性别,两者都源自发布设计而非数据事故。识别这一区别很重要——结构性缺失不会引入统计偏差(不存在"缺失与否依赖未知变量"的问题),但会限制分析维度;随机缺失则需要插补或加权处理。FracAtlas 的缺失全部落在前者,因此正确的应对是"调整研究问题"而非"填补数据"。
§5 划分与使用建议
§5.0 划分速览表
| 任务 | 划分来源 | 样本构成 | 是否官方 | 注意事项 |
|---|---|---|---|---|
| 定位/分割 | utilities/Fracture Split 三表 | 仅 717 张骨折图,574/82/61 | ✅ 官方 | 评估集仅 61/82 张,指标方差大 |
| 分类 | 无官方划分,自行分层随机 | 全量 4,083 张 | ❌ 需自制 | 必须以 fractured 分层并公开种子 |
| 多任务联合 | 需自行构建联合划分表 | 4,083 张(实例标注仅骨折子集) | ❌ 需自制 | 同一图跨任务归属必须一致 |
§5.1 官方划分
官方仅在技术验证中划分了 717 张骨折图:train 574(80%)/ valid 82(12%)/ test 61(8%),随机划分,划分清单存于 utilities/Fracture Split/ 三个 CSV。该划分服务于定位与分割基线,不含任何非骨折图。
§5.2 社区惯例划分
分类任务没有官方划分。社区常见做法是对全量 4,083 张按 70/15/15 或 80/10/10 随机分层(以 fractured 与部位标签做分层键)。由于非骨折图占 82.4%,任何划分都必须用分层抽样,否则验证集阳性率会剧烈波动。
# 分类任务的分层划分示例(可直接运行)
import pandas as pd
from sklearn.model_selection import train_test_split
df = pd.read_csv("FracAtlas/dataset.csv")
df["primary_region"] = df[["hand", "leg", "hip", "shoulder"]].idxmax(axis=1)
df["stratify_key"] = df["fractured"].astype(str) + "_" + df["primary_region"]
train_df, temp_df = train_test_split(
df, test_size=0.30, stratify=df["stratify_key"], random_state=42)
val_df, test_df = train_test_split(
temp_df, test_size=0.50, stratify=temp_df["stratify_key"], random_state=42)
for name, part in [("train", train_df), ("valid", val_df), ("test", test_df)]:
print(name, len(part),
f"阳性率 {part['fractured'].mean():.1%}") # 各折阳性率应都在 17.6% 附近
按上述脚本划分后,三个子集的阳性率都应落在 17%-18% 区间;若偏差超过 2 个百分点,优先检查 stratify 键是否包含 rare 部位组合导致的稀疏分层问题,可将部位并回"骨折/非骨折"单键再试。
§5.3 泄漏风险(重点)
- multiscan 近泄漏:396 张图像在同一画面内包含同一器官的正/侧双视角。若把同一影像的"两个视角"当作两张独立图切分(部分第三方重打包版本确实如此),同一解剖结构会同时出现在训练与测试集中,造成乐观偏差。整图处理即可规避。
- 无患者级划分:数据集无患者 ID,无法排除"同一患者多张片分属训练与测试"的隐性泄漏;论文亦未说明去重策略。这是结构性限制,报告结果时应声明。
- 文件夹名即标签:Fractured/Non_fractured 目录名本身携带标签,若第三方镜像改过目录名(Kaggle 版将 Non_fractured 改为 not fractured),硬编码路径的管道会静默失效——务必以 dataset.csv 的 fractured 列为准而非目录结构。
§5.4 交叉验证建议
分类任务推荐分层 5 折交叉验证(键 = fractured × 主部位),每折内再从训练部分切 10% 做早停验证;定位/分割沿用官方 574/82/61 或在 717 张内做 5 折。跨实验比较时固定随机种子并公开划分索引。
# 分层 5 折交叉验证骨架(分类任务)
from sklearn.model_selection import StratifiedKFold
import numpy as np
skf = StratifiedKFold(n_splits=5, shuffle=True, random_state=42)
X = df["image_id"].to_numpy()
y = df["stratify_key"].to_numpy() # 复用 §5.2 构造的分层键
for fold, (tr_idx, va_idx) in enumerate(skf.split(X, y), start=1):
print(f"fold {fold}: train {len(tr_idx)} / valid {len(va_idx)}, "
f"valid 阳性 {y[va_idx].mean():.1%}")
# 每折训练后记录指标,最终报告 mean ± std 而非单折最好成绩
注意 5 折方差本身就是重要信号:官方测试集只有 61 张骨折图,单点指标波动可达数个百分点,任何"提升 2 个点"的论文级主张都应附上跨折方差或置信区间才有说服力。
§5.5 外部验证建议
在孟加拉国以外人群上验证前,可先用 MURA 上肢影像做跨库迁移测试(注意 MURA 是研究级异常标签而非骨折标签,只能做趋势性对比);正式临床主张(如敏感性、特异性)必须在前瞻性或至少院外独立数据上验证,且按年龄段分层报告——儿童骨骺与老年骨面粗糙是论文自述的两类高误判场景。
§5.6 划分登记卡
无论采用哪种划分,建议随实验发布一张"划分登记卡",把可复现要素一次说清:
| 字段 | 示例填写 | 说明 |
|---|---|---|
| 划分类型 | 官方 Fracture Split / 自制分层随机 | 二选一并注明来源文件 |
| 样本清单 | train.csv / valid.csv / test.csv 的 SHA-256 | 锁死具体 ID 集合 |
| 随机种子与库版本 | random_state=42,scikit-learn 1.5 | 任何自制划分必填 |
| 分层键 | fractured × primary_region | 与代码一致 |
| multiscan 处理 | 整图保留,不拆视角 | 见 §5.3 泄漏条款 1 |
| 负样本策略 | 分类含全部 3,366 张;检测按 1:2 混入 | 见坑点 1 |
| 阳性率核对 | train 17.6% / valid 17.3% / test 18.0% | 划分后立即填写 |
这张卡的成本只有十分钟,却能让"复现失败"从玄学变成一行 diff 能定位的工程问题。
§6 AI 就绪指南
§6.0 云端快速启动(如适用)
FracAtlas 无官方云端托管,但 323 MB 的体积适合任何免费 Colab 会话:挂载 Google Drive 或直接用 §6.2 的脚本从 FigShare 流式下载,CPU 亦能在数分钟内完成解压与索引构建。HuggingFace 镜像提供 datasets 脚本加载,在 Kaggle/Colab 内无需手动维护目录,但训练前仍建议按 §6.2 的对账脚本核实样本数——镜像的版本与官方 ZIP 的修订节奏并不同步。
§6.1 快速上手
以下代码块假定 data_root 指向解压后的 FracAtlas 根目录(即包含 images/、Annotations/、utilities/、dataset.csv 的那层目录);最小可用子集是 dataset.csv(4,083 行,秒级加载)加 Fractured 子目录(717 张,含全部实例标注)。
# 目录结构预期:
# data_root/
# dataset.csv
# images/{Fractured,Non_fractured}/*.jpg
# Annotations/COCO JSON/*.json (注意目录名含空格,路径须加引号)
# utilities/Fracture Split/{train,valid,test}.csv
# data_root 与磁盘目录的拼接关系:所有路径 = Path(data_root) / 相对路径
import pandas as pd
from pathlib import Path
data_root = Path("FracAtlas")
df = pd.read_csv(data_root / "dataset.csv") # 4,083 行全局标签
print(df["fractured"].value_counts()) # 预期: 0→3,366 / 1→717
# 30 秒拿到第一张图和它的掩码
import json, glob
coco_files = glob.glob(str(data_root / "Annotations" / "COCO JSON" / "*.json"))
print(f"共 {len(coco_files)} 个 COCO 标注文件") # 兼容逐图/合并两种布局
§6.2 数据获取
| 途径 | 链接 | 流程 | 大小 |
|---|---|---|---|
| FigShare 官方(首选) | https://doi.org/10.6084/m9.figshare.22363012 | 打开页面 → Download all,或用下方脚本 | 323 MB |
| HuggingFace 镜像 | https://huggingface.co/datasets/yh0701/FracAtlas_dataset | load_dataset 脚本加载 | 约 323 MB |
| Kaggle 镜像 | https://www.kaggle.com/datasets/orvile/fracatlas | kaggle datasets download | 约 343 MB |
# 通过 FigShare API 程序化下载(免注册、免 token)
import requests
ARTICLE_ID = 22363012
meta = requests.get(f"https://api.figshare.com/v2/articles/{ARTICLE_ID}", timeout=30).json()
for f in meta["files"]:
print(f["name"], f"约 {f['size'] / 1e6:.1f} MB", f["download_url"])
with requests.get(f["download_url"], stream=True, timeout=60) as r, open(f["name"], "wb") as out:
for chunk in r.iter_content(chunk_size=1 << 20):
out.write(chunk)
# 下载后解压: unzip FracAtlas.zip -d FracAtlas
下载后先跑健全性对账(对应坑点 2),任何数字对不上就停在这里,不要带着疑问开训:
# sanity_check.py —— 下载后必跑的一次性对账脚本
import json
from pathlib import Path
root = Path("FracAtlas")
import pandas as pd
csv_ids = set(pd.read_csv(root / "dataset.csv")["image_id"].astype(str))
print("dataset.csv 行数:", len(csv_ids)) # 论文口径 4,083
for sub in ("Fractured", "Non_fractured"):
files = {p.stem for p in (root / "images" / sub).glob("*.jpg")}
print(f"images/{sub}: {len(files)} 张") # 论文口径 717 / 3,366
print(f" 与 CSV 差集: {len(csv_ids ^ files)} 个") # 应为 0
coco = list((root / "Annotations" / "COCO JSON").glob("*.json"))
n_inst = 0
for fp in coco:
data = json.loads(fp.read_text(encoding="utf-8"))
n_inst += len(data.get("annotations", []))
print("COCO 文件数:", len(coco), "实例总数:", n_inst) # 论文口径 922
§6.3 预处理全流程
格式转换 → 清洗 → 标准化 → 增强的完整链路。核心步骤:把 COCO 多边形解码为二值掩码、统一缩放到 600 px(官方基线输入尺寸)、灰度单通道归一化。
import numpy as np
import cv2
import pandas as pd
from pathlib import Path
from pycocotools import mask as maskUtils
def load_image(data_root: Path, image_id: str, fractured: int) -> np.ndarray:
"""按 dataset.csv 标签拼路径读图——不要信任目录名(镜像可能改名)。"""
sub = "Fractured" if fractured == 1 else "Non_fractured"
img = cv2.imread(str(data_root / "images" / sub / f"{image_id}.jpg"), cv2.IMREAD_GRAYSCALE)
assert img is not None, f"缺图: {image_id}"
return img
def coco_to_mask(height: int, width: int, segmentation: list) -> np.ndarray:
"""COCO 多边形 → 二值掩码(多实例取并集)。"""
rles = maskUtils.frPyObjects(segmentation, height, width)
return maskUtils.decode(maskUtils.merge(rles)).astype(np.uint8)
def preprocess(img: np.ndarray, size: int = 600) -> np.ndarray:
img = cv2.resize(img, (size, size), interpolation=cv2.INTER_AREA)
img = img.astype(np.float32) / 255.0 # 8-bit JPG → [0,1]
return (img - 0.5) / 0.5 # 归一化到 [-1,1]
def split_ids(data_root: Path, split: str) -> pd.DataFrame:
"""官方骨折子集划分;CSV 无表头约定,取第一列即可。"""
df = pd.read_csv(data_root / "utilities" / "Fracture Split" / f"{split}.csv")
return df.iloc[:, 0].astype(str).str.replace(".jpg", "", regex=False)
§6.4 PyTorch DataLoader 完整代码
先安装依赖:pip install torch pandas pycocotools opencv-python-headless。Dataset 类同时返回图像与实例掩码,兼容"逐图一个 JSON"与"单文件全量"两种 COCO 布局(官方目录为逐图布局)。
<details>
<summary>点击展开完整 Dataset + DataLoader 代码(约 70 行)</summary>
import json
import torch
import pandas as pd
import numpy as np
from pathlib import Path
from torch.utils.data import Dataset, DataLoader
from pycocotools import mask as maskUtils
class FracAtlasSegDataset(Dataset):
"""FracAtlas 骨折实例分割数据集(仅 717 张骨折图像)。
目录结构预期(data_root 指向解压根目录):
data_root/images/Fractured/*.jpg
data_root/Annotations/COCO JSON/*.json 目录名含空格
data_root/utilities/Fracture Split/{train,valid,test}.csv
"""
def __init__(self, data_root: str, split: str = "train", size: int = 600):
self.root = Path(data_root)
self.size = size
ids = self._load_split(split)
self.anns = self._index_coco()
self.items = [i for i in ids if i in self.anns] # 仅保留有实例标注的图
def _load_split(self, split: str) -> list:
df = pd.read_csv(self.root / "utilities" / "Fracture Split" / f"{split}.csv")
col = df.iloc[:, 0].astype(str)
return col.str.replace(".jpg", "", regex=False).tolist()
def _index_coco(self) -> dict:
"""扫描 COCO JSON 目录,返回 image_id -> (height, width, annotations)。"""
index = {}
for fp in (self.root / "Annotations" / "COCO JSON").glob("*.json"):
data = json.loads(fp.read_text(encoding="utf-8"))
for img in data.get("images", []):
iid = str(img["file_name"]).replace(".jpg", "")
index[iid] = (img["height"], img["width"],
[a for a in data.get("annotations", [])
if a.get("image_id") == img["id"]])
return index
def __len__(self) -> int:
return len(self.items)
def __getitem__(self, idx: int):
iid = self.items[idx]
h, w, anns = self.anns[iid]
img = cv2.imread(str(self.root / "images" / "Fractured" / f"{iid}.jpg"),
cv2.IMREAD_GRAYSCALE)
img = cv2.resize(img, (self.size, self.size), interpolation=cv2.INTER_AREA)
img = torch.from_numpy(img).float().unsqueeze(0) / 255.0
mask = np.zeros((h, w), dtype=np.uint8)
for a in anns:
rles = maskUtils.frPyObjects(a["segmentation"], h, w)
mask |= maskUtils.decode(maskUtils.merge(rles)).astype(np.uint8)
mask = torch.from_numpy(
cv2.resize(mask, (self.size, self.size),
interpolation=cv2.INTER_NEAREST)).long()
return img, mask
if __name__ == "__main__":
ds = FracAtlasSegDataset("FracAtlas", split="train") # 预期 574 张
loader = DataLoader(ds, batch_size=8, shuffle=True, num_workers=4)
for imgs, masks in loader:
print(imgs.shape, masks.shape) # [8,1,600,600] [8,600,600]
break
</details>
分类任务的 Dataset 更简单:读 dataset.csv,按 fractured 列拼路径取图,返回 (img, label),建议用 sklearn.model_selection.train_test_split 按 fractured 分层抽样生成自己的划分。
§6.5 坑点 8 个
⚠️ 坑点 1:非骨折图没有任何标注文件,检测管道会把负样本整批丢掉(分类:标签理解)
问题:COCO/VGG/YOLO/VOC 四个标注目录只覆盖 717 张骨折图,3,366 张非骨折图既无实例标注也无官方划分。直接用标注目录枚举样本会把全部负样本排除在训练与评估之外,检测器的"虚高召回"完全建立在错误样本集上。
症状:训练集只有 717 张图;验证 mAP 看似正常,但模型上线后在正常片上疯狂误报——因为它从没学过"什么是阴性"。
解决:
- 简单方法:以 dataset.csv 的 fractured 列为唯一样本清单;fractured=0 的图在检测/分割管道中登记为空标签样本(空 annotations 数组),参与训练与评估。
- 进阶方法:分类与检测两条管道分开划分——分类用全量 4,083 张分层划分,检测/分割沿用官方 574/82/61;不要用一套划分同时服务两类任务再互相对比。
- SOTA 方法:把非骨折图作为负样本以 1:2~1:3 的比例混入检测训练(每 batch 采样),并用 focal loss 抑制背景类主导;评估时补报"图级假阳性率"指标。
参考:FracAtlas 论文 Data Records 一节(“These files contain annotations only for images that have fractures”)。
⚠️ 坑点 2:版本漂移——论文 4,083 张,FigShare 现行页面 4,073 张(分类:工程陷阱)
问题:FigShare 页面明确注明"自论文发表后数据集有修改,计数可能与论文不一致,以数据集为准",且致谢了外部贡献者;同时 Kaggle/HuggingFace 镜像存在目录改名(Non_fractured → not fractured)与文件数不一致(如 8,169 个文件的重打包版)。
症状:复现论文表格时样本数对不上;同一脚本在官方 ZIP 与 Kaggle 镜像上跑出不同结果,甚至因目录名不匹配直接报 FileNotFoundError。
解决:
- 简单方法:只从官方 FigShare DOI 下载;解压后先跑一个健全性脚本,打印 dataset.csv 行数、两个图像子目录文件数、COCO JSON 数量,再开始训练。
- 进阶方法:以 dataset.csv 的 image_id 为主键做三表对账(CSV ↔ 图像文件 ↔ 标注文件),把对不上的 ID 落盘成 exclusion 清单并写进实验记录。
- SOTA 方法:把下载的 ZIP 做 SHA-256 固化进数据版本卡(DVC 或 MLflow artifact),实验配置里记录"下载日期 + DOI + 校验和",杜绝跨版本比较。
参考:FigShare 页面修订说明、Kaggle 镜像结构差异。
⚠️ 坑点 3:官方划分只覆盖骨折图,用它评估分类任务=作弊(分类:评估误用)
问题:utilities/Fracture Split 的 574/82/61 划分仅包含 717 张骨折图,是为定位/分割基线设计的。若用它训练"骨折 vs 非骨折"分类器,所有非骨折图都不存在,报告的准确率毫无意义。
症状:分类准确率 100% 或训练集里根本找不到 Non_fractured 图片路径;论文对比表中分类与检测指标来自不同样本集却放在一起比较。
解决:
- 简单方法:分类任务自行分层划分全量 4,083 张(70/15/15,键 = fractured × 主部位),并公开随机种子与划分索引。
- 进阶方法:仿照官方比例在骨折子集内做 5 折交叉验证报告均值±标准差,另在全量划分上单独报告分类指标,两套结果分表呈现。
- SOTA 方法:采用"分类全量 + 检测骨折子集"的双头多任务训练时,用图像 ID 级联合划分表锁死三个任务的 train/val/test 归属,任何图像跨任务的归属必须一致。
参考:论文 Technical Validation(“The fractured images were randomly split into 80% (574) training, 12% (82) validation and 8% (61) test images”)。
⚠️ 坑点 4:COCO→YOLO→VOC 链式转换有损,小掩码经不起两次转手(分类:预处理陷阱)
问题:官方主标注是 COCO 多边形;YOLO 与 PASCAL VOC 是从 COCO 有损转换而来(VOC 又是从 YOLO 二次转换)。骨折实例平均只占画面 0.89% 面积,逐级取整与坐标量化会持续侵蚀小目标边界。
症状:同一实例在 VOC 标注里的框比 COCO 掩码外接框大几个像素;训练 YOLO 时用 VOC 标注与用 COCO 转出的 YOLO 标注 mAP 差异不可忽略;超小实例在某些格式里退化成 1-2 像素宽的退化框。
解决:
- 简单方法:一切任务从 COCO JSON 读起;需要 YOLO 格式时用官方 coco2yolo.ipynb 现场生成,不要从 VOC 反向转换。
- 进阶方法:训练高分辨率分割(>600 px 输入)时跳过预先 resize,改在 Dataset 内对掩码坐标按缩放比例同步变换,避免整数坐标取整叠加。
- SOTA 方法:直接以 COCO 多边形为 ground truth 训练(如 Mask2Former 支持 polygon 输入),评测时统一用 COCO mask IoU,彻底绕开中间格式。
参考:论文 Data labeling 一节(“allows conversions that are lossy to other annotation formats like YOLO annotation and Pascal VOC”)。
⚠️ 坑点 5:1:4.7 类别不平衡 + 82.4% 多数类,Accuracy 是最危险的指标(分类:偏倚陷阱)
问题:717 骨折 vs 3,366 非骨折。一个"永远预测非骨折"的模型就有约 82.4% 准确率;第三方汇总显示,ImageNet 预训练的 EfficientNetB0/MobileNetV2/ResNet50 在此设置下骨折类精确率低至 0.23-0.27、召回 0.38-0.53。
症状:验证集 accuracy 高达 90%+ 但骨折类 F1 低于 0.5;混淆矩阵里骨折类被系统性判成阴性;不同论文报告的"95%+ 准确率"根本不可比。
解决:
- 简单方法:报告 fractured 类的 precision/recall/F1、AUROC 与 AUPRC(不平衡下 AUPRC 远比 AUROC 敏感),准确率只作参考。
- 进阶方法:加权交叉熵(权重 = 1/类频率)或 focal loss(gamma=2)+ 分层采样保证每 batch 阳性比例不低于 25%。
- SOTA 方法:重采样 + 轻量架构(部分研究显示在小数据上领域定制 CNN 优于深层迁移模型)+ 概率校准(temperature scaling),并按骨折/非骨折阈值扫描选工作点。
参考:Emergent Mind FracAtlas 主题页汇总的第三方实验、IEEE 相关研究对失衡的讨论。
⚠️ 坑点 6:99 张内固定物影像会教模型走捷径(分类:偏倚陷阱)
问题:dataset.csv 的 hardware 列标出 99 张含骨科内固定物(钢钉、钢板)的影像。金属内固定物与"曾经骨折"强相关,模型极易学到"看见金属伪影就预测骨折"的捷径,而非真正的骨折线特征。
症状:Grad-CAM 热图集中在金属伪影区而非骨折线;在 hardware=1 的测试子集上指标虚高,去除 hardware 影像后指标骤降;部署到无内固定物人群时表现骤变。
解决:
- 简单方法:按 hardware 列分层评估,单独报告 hardware 子集与非 hardware 子集的指标差异。
- 进阶方法:训练时对 hardware 影像做过采样并把 hardware 作为辅助标签做多任务正则,迫使模型分离"金属伪影"与"骨折线"两种特征。
- SOTA 方法:用 Grad-CAM/EigenCAM 做归因审计(社区已有在 FracAtlas 上用 EigenCAM 审计 YOLOv8m 的先例),人工确认热图落在骨性结构上后再上报性能。
参考:FracAtlas 论文 hardware 标签说明、2024 年 EigenCAM 归因研究。
⚠️ 坑点 7:跨论文 mAP 不可比——划分、阈值、版本三重不一致(分类:评估误用)
问题:官方基线在 82 张验证图上以 IoU 0.5 报告 mAP@0.5;后续研究有的用 61 张测试集,有的自划 7:2:1,有的换了 YOLO 版本与输入尺寸,有的把 multiscan 拆成两图。同一张表里 56.2%、58.9%、59.5% 三个数字出自不同协议。
症状:新方法"超过官方基线 3 个点"的结论在换用官方划分后消失;复现他人数字时怎么调参都对不上。
解决:
- 简单方法:任何对比实验先核对三要素——划分清单(哪个 CSV)、输入尺寸(官方 600 px)、IoU 阈值(0.5 还是 0.5:0.95)。
- 进阶方法:只在官方 574/82/61 上与官方基线比;自设划分时同时报告官方划分结果作为锚点。
- SOTA 方法:发布代码时附划分索引与评测配置(mmdet/ultralytics config 文件),引用他人结果时注明"原始协议"而非混合榜单。
参考:论文 Table 2 与验证协议、官方仓库训练配置。
⚠️ 坑点 8:JPG 化抹掉了全部物理元数据,儿科与老年影像是隐藏雷区(分类:工程陷阱)
问题:为脱敏将 DICOM 转 JPG,窗宽窗位、像素间距、年龄性别全部丢失。论文自述两个影像学陷阱:<8 岁儿童的骨骺线在低骨密度下呈现类似骨折的分离影,>50 岁的骨面粗糙也易被误判为骨折——而模型既拿不到年龄,也无法重调窗位。
症状:训练好的模型在儿童片上假阳性爆炸;试图用 HU 值/物理测量做特征工程时发现根本无此信息;把模型用到含大量儿科片的本院数据时指标骤降且无法分层归因。
解决:
- 简单方法:接受"无元数据"现实,所有涉及年龄的主张(如"儿科表现良好")都禁止在这套数据上做出。
- 进阶方法:部署前在自带年龄标签的院内数据上做分层校准,识别儿童与老年子集的假阳性率漂移。
- SOTA 方法:把 FracAtlas 当作"成人为主的多任务预训练源",在目标科室数据上做小样本微调 + 分年龄段阈值校准;论文级对比时把"无儿科分层能力"写进 limitation。
参考:论文 Distribution analysis 一节的年龄影响讨论、Code availability 中 DICOM→JPG 说明。
§6.6 数据增强
| 类别 | 操作 | 说明 |
|---|---|---|
| ✅ 安全 | 水平/垂直平移 ≤5%、旋转 ≤10°、亮度对比度抖动、CLAHE、高斯噪声(模拟 DR 噪声) | 不破坏骨折线形态与解剖方位 |
| ✅ 安全 | 掩码同步几何变换 | 所有空间增强必须同步作用于掩码与框 |
| ❌ 危险 | 大幅随机裁剪(cutout 骨折区) | 平均 0.89% 面积的小实例可能被整个裁掉,标签失真 |
| ❌ 危险 | 弹性形变/强扭曲 | 会伪造或抹平骨折线,改变病理形态 |
| ❌ 危险 | 90°/180° 旋转与垂直翻转 | 破坏解剖方位与重力性征象(如液平面语义),定位任务慎用 |
| ⚠️ 谨慎 | 水平镜像翻转 | 影像本身可行,但会交换左右侧位语义,若后续接部位分类头需同步调整标签 |
增强策略的总体原则:FracAtlas 的骨折实例平均只占画面 0.89% 面积,任何"全局变换"都可能以低概率把实例移出画面或模糊其纹理,因此增强强度应以"实例级可观测性"为准——在引入新增强后,抽 20 张增强样本人工确认骨折线仍清晰可辨,再放行进入训练。这个十分钟的人工检查能拦住大部分"增强后指标悄悄下降"的隐性回归。
§6.7 模型推荐
| 任务 | 推荐模型 | 理由 |
|---|---|---|
| 分类 | EfficientNet-B0 / ResNet18(配合加权采样) | 小数据集上轻量骨干 + 领域定制头优于深层迁移模型 |
| 定位 | YOLOv8s(官方基线)/ YOLO11s | 官方权重与配置可直接复现;单类检测对小数据友好 |
| 分割 | YOLOv8s-seg(官方基线)/ U-Net + ResNet34 骨干 | 官方基线可复现;U-Net 便于小目标上采样设计 |
| 多任务研究 | 共享骨干 + 分类/检测/分割三头 | FracAtlas 的三重标注为多任务联合训练提供了稀缺条件 |
选型时的三条经验法则:第一,"官方基线可用"本身就是选型权重最高的一项——YOLOv8s 系在 FracAtlas 上的配置、权重与训练脚本全部公开,从它出发做增量改进远比从零搭建省时;第二,轻量骨干在小数据上不只省算力,还降低过拟合面,EfficientNet-B0 一类的模型配合加权采样往往比大型 ViT 更稳;第三,若做多任务联合训练,先给三个头设定损失权重探测实验(各头单独训练的损失均值作为归一化基准),避免分割头(损失量级最大)吞掉分类头的梯度信号。
§6.8 硬件需求
| 配置 | 显存 | 能做什么 | 参考耗时 |
|---|---|---|---|
| CPU(16 GB 内存) | — | 数据索引、格式转换、分类推理 | 全库扫描数分钟 |
| 笔记本 GPU(RTX 3070 8 GB) | 8 GB | 完整复现官方 YOLOv8s / YOLOv8s-seg 基线 | 官方 30 epochs 于笔记本完成 |
| 单卡 24 GB(如 RTX 4090) | 24 GB | 600 px 以上高分辨率分割、多任务联合训练、批量消融 | 单实验约数小时 |
官方基线的训练环境即为一台 Windows 笔记本(Nvidia RTX 3070 8 GB + AMD Ryzen 5900HX),COCO 预训练权重、30 epochs、输入 600 px——这是该数据集"低成本可复现"的直接证据。
§6.9 评估指标代码
import numpy as np
import torch
def dice_score(pred: torch.Tensor, target: torch.Tensor, eps: float = 1e-7) -> float:
"""二值掩码 Dice 系数;pred/target 均为 {0,1} 张量。"""
pred, target = pred.bool(), target.bool()
inter = (pred & target).sum().item()
return (2.0 * inter) / (pred.sum().item() + target.sum().item() + eps)
def iou_score(pred: torch.Tensor, target: torch.Tensor, eps: float = 1e-7) -> float:
pred, target = pred.bool(), target.bool()
inter = (pred & target).sum().item()
union = (pred | target).sum().item()
return inter / (union + eps)
def per_image_report(logits: torch.Tensor, gts: torch.Tensor, thr: float = 0.5) -> dict:
"""在验证集上逐图计算 Dice/IoU 的均值(空掩码图单独统计)。"""
dices, ious = [], []
for logit, gt in zip(logits.sigmoid() > thr, gts):
if gt.sum() == 0 and logit.sum() == 0:
continue # 双空图不计入(或按协议计 1)
dices.append(dice_score(logit, gt))
ious.append(iou_score(logit, gt))
return {"dice": float(np.mean(dices or [0])), "iou": float(np.mean(ious or [0]))}
# 检测 mAP 建议直接用官方协议:ultralytics val 或 torchmetrics MeanAveragePrecision(IoU 0.5)
分类任务在 1:4.7 失衡下必须报告 AUROC 与 AUPRC(对应坑点 5):
import numpy as np
from sklearn.metrics import (roc_auc_score, average_precision_score,
precision_recall_fscore_support)
def classification_report(y_true: np.ndarray, proba: np.ndarray,
thr: float = 0.5) -> dict:
"""y_true: {0,1} 数组;proba: 骨折类概率。失衡场景以 AUPRC 为主指标。"""
pred = (proba >= thr).astype(int)
p, r, f1, _ = precision_recall_fscore_support(
y_true, pred, average="binary", zero_division=0)
return {
"auroc": roc_auc_score(y_true, proba),
"auprc": average_precision_score(y_true, proba), # 0.176 为随机基线
"precision@thr": p, "recall@thr": r, "f1@thr": f1,
"prevalence": float(np.mean(y_true)),
}
解读要点:AUPRC 的随机基线等于阳性率(本库约 0.176),AUROC 的随机基线是 0.5——两个指标的分母逻辑完全不同,跨论文比较时必须确认对方报的是哪一个。
§6.10 MLOps 笔记
- 数据版本:以 FigShare DOI + ZIP SHA-256 锁定数据版本;FigShare 在线修订会使样本数漂移(4,083 → 4,073 线索),每次下载必须重新对账(见坑点 2)。
- 实验配置:把划分 CSV、输入尺寸 600、IoU 阈值 0.5 写进配置文件随代码入库;对比实验拒绝口头协议。
- 监控:上线后监控骨折阳性率、hardware 影像占比与图像分辨率分布三个漂移哨兵指标,任一漂移超 20% 触发再评估。
- 合规:CC BY 4.0 只要求署名,但产品化仍须独立临床验证;在模型卡中注明"训练数据源自孟加拉国 3 中心,未经外部人群验证"。
把上述要点落成最小可行的版本管理清单:
| 管理对象 | 工具建议 | 登记内容 |
|---|---|---|
| 数据版本 | DVC / MLflow artifact | DOI、下载日期、ZIP SHA-256、健全性对账输出 |
| 划分索引 | Git + 划分登记卡(§5.6) | 三表 CSV 哈希、种子、分层键 |
| 训练配置 | Hydra / YAML 配置文件 | 输入尺寸、epochs、损失权重、增强开关 |
| 评估产物 | MLflow / W&B | 指标 JSON(含 AUPRC、mAP@0.5)、混淆矩阵 |
| 漂移哨兵 | 定时任务 + 阈值告警 | 阳性率、hardware 占比、分辨率分布 |
模型卡至少回答四个问题:训练数据版本是什么、官方/自制划分用了哪套、非骨折负样本如何注册(坑点 1)、外部验证目前做到哪一步。这四项缺任何一项,模型交接给他人时都会立刻退化为"黑箱"。
§7 质量评估与局限性
§7.1 已知偏倚表
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 类别不平衡 | 717 骨折 vs 3,366 非骨折(约 1:4.7) | 高 | focal loss / 加权采样;以 AUPRC 为主指标 |
| 地理与人群偏倚 | 单一国家 3 中心,无多国覆盖 | 高 | 外部验证前置;论文 limitation 声明 |
| 性别偏倚 | 异常研究中 85.4% 为男性 | 中 | 分性别评估;避免"全人群"性能声明 |
| 设备偏倚 | 仅 Fujifilm 与 Philips 两品牌 | 中 | 跨设备子集评估;部署前设备适配测试 |
| 年龄盲区 | 无年龄元数据,儿童骨骺/老年骨面误判风险论文自述 | 中 | 禁止儿科性能主张;外部数据分层校准 |
| 硬件捷径 | 99 张含内固定物影像与骨折强相关 | 低-中 | hardware 分层评估 + 归因审计(坑点 6) |
上表的严重程度评级基于三个因素:效应可被工程手段消除的程度、对最终性能声明的影响面、以及官方论文是否已主动披露。类别不平衡与地理偏倚评级"高",因为它们同时影响训练动力学与外部效度且无法在数据内修复;硬件捷径评级"低-中",因为 hardware 列的存在使该偏倚完全可审计、可分层规避——一个偏倚是否危险,首要变量不是强度而是可见性。
§7.2 标注质量
三级人工流水线(2 名放射科医师独立标注 → 骨科医师仲裁 → medical officer 复核掩码)在公开数据集中属于高规格流程;论文自述"逐张人工核查无身份信息"也覆盖了脱敏质控。但需注意:论文未报告标注者间一致性系数(kappa/ICC),第三方 Dataset Ninja 统计到的标注对象数(1,844)与论文口径(922 实例)不一致,提示第三方转换链可能存在重复计数。使用者应自行抽样 50-100 张复标,估计阳性标签的噪声率后再用于高利害实验。
一个务实的自检抽样方案:按部位分层抽 60 张(每部位 15 张,其中骨折图 10 张),由一名有骨科经验的医师独立复标骨折有无与数量,与官方标注比对。数量分歧率若超过 5%,说明标签噪声已与官方基线的提升幅度同量级,此时跨论文比较都应在"同一复标后的干净子集"上进行才有意义。
§7.3 泛化性
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 跨人群(非南亚) | 高:肤色不影响 X 光,但骨密度、体型、疾病谱差异显著 | 单国来源;后续论文 limitations 明确指出地理偏倚 |
| 跨设备(非 Fujifilm/Philips) | 中-高:DR 处理链差异改变噪声与对比度 | 论文仅披露两品牌,无逐图设备记录 |
| 儿科(<8 岁) | 高:骨骺线酷似骨折线 | 论文 Distribution analysis 自述 |
| 老年(>50 岁) | 中-高:骨面粗糙易误判 | 论文 Distribution analysis 自述 |
| 内固定物术后片 | 中:金属伪影主导特征 | hardware 子集仅 99 张,覆盖不足 |
§7.4 伦理
采集经机构研究伦理委员会(IREB)依据孟加拉国医学研究委员会(BMRC)框架批准,由联合国际大学 IREB 管理;数据发布取得来源机构许可,受试者(成人及未成年人监护人)在诊断启动时知情同意;全部 DICOM 元数据在脱敏阶段销毁,发布前逐张人工核查无身份信息。数据以 CC BY 4.0 完全开放,无 DUO 限制类条款(本页 DUO 标签 NRES 为编辑部按许可条款归纳)。
需要说明的边界:数据集的开放许可以"研究与教育用途"为伦理批准语境,使用者若计划二次分发、商业化或部署到临床工作流,应自行评估是否需要重新取得来源机构同意——原始批准文件不随数据发布,论文中亦未公开具体批号。知情同意在急诊场景下按孟加拉国常规临床流程取得,是否覆盖"数据可用于开源发布"这一具体用途,论文未逐条说明,这是合规链上无法从公开材料完全闭合的一环,引用时应如实转述论文口径而非扩大解释。
§7.5 公平性
性别维度:全集约 62% 男 / 38% 女,骨折子集 85.4% 男,模型可能对女性骨折表现欠佳,值得分层审计。年龄维度:数据覆盖 8 个月-78 岁但无逐图年龄,无法做公平性审计——这本身是公平性评估的障碍。地域维度:全部来自孟加拉国,对其他人群的外推需在目标人群数据上重新校准。
性别失衡的构成值得进一步拆解:85.4% 的男性占比出现在"异常/骨折研究"子集,可能与当地劳动创伤的性别结构有关,而非标注偏倚——这属于人群流行病学特征被数据集如实继承的情形。对使用者的实操含义是:若目标部署场景的性别结构不同(如以骨质疏松性骨折筛查为主的门诊,女性占比高),训练分布与部署分布的错位会直接体现在假阴性率上,部署前必须用目标场景数据重估各性别子集的敏感性与特异性。
§7.6 数据漂移
JPG 压缩与设备处理链差异已内置于数据;时间维度上 2021-2022 的采集窗口不覆盖 DR 设备迭代与临床流程变化。部署监控建议跟踪:骨折阳性率(基线 17.6%)、hardware 占比(2.4%)、multiscan 占比(9.7%)与图像分辨率分布,任一指标漂移超 20% 时触发复核。
四个哨兵指标各有含义:阳性率漂移通常反映就诊人群或分诊政策变化,会同时改变模型的查准与查全权衡点;hardware 占比上升提示术后复查片增多,可能激活坑点 6 的捷径特征;multiscan 占比变化暗示拍摄流程改变,影响双视角利用策略;分辨率分布漂移最隐蔽,600 px 固定输入的模型对原始分辨率迁移敏感,建议同时记录"长边小于 800 px 的图像占比"作为细粒度信号。
§7.7 DAIMS 24 项数据集元信息框架评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | dataset.csv 每图一行、12 列标签齐整 |
| 2 | 唯一标识 | ✅ | image_id = IMG + 7 位序号,全局唯一 |
| 3 | 特殊字符 | ✅ | 纯 ASCII 文件名,无空格与 Unicode 陷阱 |
| 4 | 重复行 | ✅ | 主键唯一,无重复行 |
| 5 | 缺失编码 | ✅ | 0/1 均为真实语义,无 -1/NaN 式编码 |
| 6 | 标签标识 | ⚠️ | 实例标签仅覆盖 717 张骨折图,非骨折无标注文件 |
| 7 | 罕见类分组 | ⚠️ | 髋/肩各仅 63 张骨折图,部位细分后样本更稀薄 |
| 8 | 偏倚评估 | ⚠️ | 论文披露性别失衡,但无逐图人口学元数据支撑系统评估 |
| 9 | 数据字典 | ✅ | 论文 + FigShare 页面对 12 列字段有完整定义 |
| 10 | 信息性缺失解释 | ⚠️ | 元数据缺失(年龄/性别/患者 ID)未逐字段说明恢复可能性 |
| 11 | 设备记录 | ⚠️ | 仅品牌级描述(Fujifilm/Philips),无逐图设备字段 |
| 12 | 共线性 | ✅ | 标签为二值属性,无共线性风险 |
| 13 | 编码映射 | ✅ | COCO↔VGG↔YOLO↔VOC 官方脚本与转换链清晰 |
| 14 | 时间戳处理 | ✅ | 无时间列(采集期 2021-2022 整体披露),无时区陷阱 |
| 15 | 划分建议 | ✅ | 官方 Fracture Split 三表 + 本文 §5 补充分类划分策略 |
| 16 | 泄漏讨论 | ⚠️ | multiscan 与无患者 ID 的泄漏风险论文未讨论(本文 §5.3 补齐) |
| 17 | 标签分布 | ✅ | 论文详列部位/视角/类别分布并配图 |
| 18 | 测量偏倚 | ⚠️ | JPG 8-bit 化与双品牌设备的量化影响未实测 |
| 19 | 外部验证建议 | ✅ | 论文与后续文献一致建议外部验证;本文 §5.5/§7.8 给出路径 |
| 20 | 版本记录 | ⚠️ | FigShare 在线修订导致计数与论文不一致,版本粒度粗 |
| 21 | 预处理脚本 | ✅ | utilities 转换 Notebook + 官方训练/预测 Notebook 齐全 |
| 22 | 合规要求 | ✅ | CC BY 4.0 + IREB/BMRC 批准 + 知情同意链完整 |
| 23 | 多模态对齐 | ✅ | 单模态数据集,不适用(无跨模态对齐需求) |
| 24 | 去标识化 | ✅ | DICOM→JPG 元数据销毁 + 任意命名 + 人工核查 |
DAIMS 评分:20 / 24(✅×16 + ⚠️×8 + ❌×0)
评分解读:20/24 属于"结构优秀、元数据贫血"的典型画像。扣分项全部集中在无法通过工程手段弥补的先天限制:无逐图人口学与设备元数据(#8/#10/#11)、实例标签覆盖不全(#6)、版本管理粗放(#20)以及论文未讨论的泄漏面(#16)。这些 ⚠️ 不是数据集的错误,而是其"隐私优先、规模克制"设计决策的必然代价。
对你意味着什么:可以把 FracAtlas 当作骨折多任务研究的可靠基座直接开箱(数据字典清晰、格式齐备、划分可复现),但有三件事必须在实验设计阶段就写进计划:第一,任何按年龄/性别/设备的分层主张都需要外部数据支撑,本库做不到;第二,检测与分割管道必须自己把 3,366 张非骨折图注册为负样本(坑点 1),否则评估集就是错的;第三,每次重新下载都要重算样本数并固化校验和,FigShare 的在线修订会让你的"4,083"悄悄变成"4,073"。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| (暂无公开同行评审外部验证) | — | — | — | — | 截至 2026-09,未检索到在独立外部机构数据上评估 FracAtlas 训练模型的同行评审结果;已有研究(含官方技术验证与 2024 年 XAI 研究)均在 FracAtlas 内部划分上评估 |
| MURA(建议路径,尚未见于同行评审报告) | Stanford ML Group | 上肢异常检测迁移对比 | — | — | MURA 为研究级异常标签而非骨折标签,仅适合趋势性跨库对比,不能替代真实外部验证 |
上表的空白行本身就是重要信息:截至 2026-09,围绕 FracAtlas 的论文产出集中在方法改进与可解释性分析,尚无在独立外部机构数据上验证其模型性能的同行评审报告。对以"可部署"为目标的使用者,这一空白意味着任何性能数字都应被视为"域内上限"而非"临床预期",外部验证的样本量、阳性率与设备构成需要在立项阶段一并规划。
§8 基准性能与生态
§8.1 排行榜
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | YOLOv8m + EigenCAM(检测) | mAP@0.5 59.5% | 2024 | YOLOv8m 检测 + 逐层特征归因 | 《Diving Deep into Bone Anomalies on the FracAtlas Dataset Using Deep Learning and Explainable AI》(2024),见 AMiner 收录页 | 未公开检索到官方仓库 |
| 2 | YOLOv8s-seg(官方基线,掩码) | mask mAP@0.5 58.9% | 2023 | YOLOv8s-seg,COCO 预训练,30 epochs,600 px | Abedeen et al., 2023, Scientific Data 10:521. DOI 10.1038/s41597-023-02432-4 | 官方 Notebook |
| 3 | YOLOv8s(官方基线,检测框) | box mAP@0.5 56.2% | 2023 | YOLOv8s,COCO 预训练,30 epochs,600 px | Abedeen et al., 2023, Scientific Data 10:521. DOI 10.1038/s41597-023-02432-4 | 官方 Notebook |
数值不可直接比较的原因:三个数字出自不同协议——官方两个基线在 82 张验证图上评估,2024 年 XAI 研究的划分与评估配置未完全公开;掩码与检测框的 mAP 度量对象不同;官方划分仅含骨折图。把它们排成"榜单"只反映量级趋势,不构成严格比较。
§8.2 SOTA 总结与选型建议
公开结果的绝对水平不高(mAP@0.5 约 56%-59%),这真实反映了任务难度:小目标(平均 0.89% 面积)、类别不平衡与有限规模(574 张训练图)三重压力叠加。选型建议:追求可复现基线选 YOLOv8s 系(官方 Notebook 直接跑通);追求小数据分类性价比选轻量骨干 + 领域定制头(第三方实验显示深层 ImageNet 迁移模型在失衡设置下反而吃亏);追求分割精度优先在 COCO 掩码上做高分辨率训练而非依赖有损转换格式(坑点 4)。
对"这份榜单还能涨多少"的判断:提升空间大概率来自三处——把非骨折负样本引入检测训练(官方基线未做)、把 600 px 输入提升到 1,000 px 以上(小目标分辨率是硬瓶颈)、以及用多视角互证处理 396 张 multiscan 影像。相反,单纯更换更大骨干网络的边际收益有限:574 张训练图撑不起高容量模型的优化空间,这也是小数据医学影像的普遍规律。
§8.3 评测协议
官方协议要素:骨折子集随机 80/12/8 划分(574/82/61);输入 600 px;COCO 预训练;30 epochs;定位指标为 box precision/recall/mAP@IoU 0.5,分割指标另含 mask precision/recall/mAP@0.5;评估在验证集上完成。复现时逐项对齐,任何偏离(输入尺寸、划分、阈值)都须在报告中显式声明。
| 协议要素 | 官方设定 | 偏离后果 |
|---|---|---|
| 划分 | utilities/Fracture Split(574/82/61) | 换成自划集后与官方数字不可比(坑点 7) |
| 输入尺寸 | 600 px | 提升到 1,000 px 以上对 0.89% 面积的小目标常有显著增益,但会"白赢"官方基线 |
| 预训练权重 | COCO 预训练 YOLOv8 | 换成其他预训练源后差距难以归因 |
| 训练轮数 | 30 epochs | 更长训练在 574 张训练图上有过拟合风险,须报告验证曲线 |
| IoU 阈值 | 0.5 | 换成 0.5:0.95 后数值会大幅下降,并非模型变差 |
| 评估集 | 82 张验证图 | 61 张测试集与验证集指标不可互换引用 |
对照这张表逐项打勾后,你的结果才有资格写进"与官方基线可比"的句子里。
§8.4 相关数据集
| 数据集 | 规模 | 任务 | 与 FracAtlas 的关系 |
|---|---|---|---|
| MURA | 40,561 张上肢 X 光 | 研究级异常分类 | 大规模互补源;无病灶级标注 |
| VinDr-CXR | 18,000 张胸片 | 15 类胸部发现框标注 | 模态相邻但疾病域不同 |
| ChestX-ray14 | 约 112,000 张胸片 | 14 类胸部疾病 | 大规模分类源,不含骨折 |
| 原发性骨肿瘤放射影像数据集 | 见原文 | 分类+定位+分割 | 2025 年 Sci Data 发布的多任务标注同类结构(DOI 10.1038/s41597-024-04311-y) |
§8.5 关键论文 Top 6
- Abedeen et al., 2023, Scientific Data 10:521. DOI 10.1038/s41597-023-02432-4 — FracAtlas 原始论文,定义数据、标注协议与 YOLOv8 基线。
- Ronneberger et al., 2015, MICCAI, LNCS 9351:234-241. DOI 10.1007/978-3-319-24574-4_28 — U-Net,医学分割事实标准骨干,FracAtlas 分支工作的常用基座。
- Jocher et al., 2023, Ultralytics YOLOv8(开源软件,github.com/ultralytics/ultralytics)— 官方基线所用检测/分割框架。
- Rajpurkar et al., 2018, arXiv:1712.06957 — MURA,最大公开肌骨 X 光异常数据集,跨库验证的参考源。
- Nguyen et al., 2022, Scientific Data 9:429. DOI 10.1038/s41597-022-01498-w — VinDr-CXR,放射科医师级框标注的大型胸片集,标注工程参照。
- 《A Radiograph Dataset for the Classification, Localization, and Segmentation of Primary Bone Tumors》, 2025, Scientific Data 12:88. DOI 10.1038/s41597-024-04311-y — 骨肿瘤影像上的同构三任务数据集,多任务标注设计的后继范例。
§8.6 社区活跃度
论文引用 39+ 次(Prophy 聚合,截至 2026-09),施引文献延续至 2026 年(含 BMC Medical Informatics and Decision Making 2026、Scientific Reports 2025 等)。第三方生态活跃:HuggingFace 与 Kaggle 均有维护中的镜像(Kaggle 主要镜像浏览约 2,900 次、下载约 860 次,截至 2026-09);Dataset Ninja 于 2026-05 提供了完整可视化统计页。官方 GitHub 仓库的社区分支仍有提交记录(最近可见 2025-09)。
§8.7 生态快照
| 资源 | 类型 | 链接 | 热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| FigShare 官方数据 | 数据托管 | https://doi.org/10.6084/m9.figshare.22363012 | 权威来源 | 唯一以官方 DOI 背书的下载点 |
| 官方 GitHub 仓库 | 代码 | https://github.com/XLR8-07/FracAtlas | 论文配套 | Train/Pred Notebook 一键复现基线 |
| HuggingFace 镜像 | 数据加载 | https://huggingface.co/datasets/yh0701/FracAtlas_dataset | 活跃维护 | datasets 脚本化加载最省事 |
| Kaggle 镜像 | 数据镜像 | https://www.kaggle.com/datasets/orvile/fracatlas | 浏览约 2,900 次 | 免配置浏览与教学演示 |
| Dataset Ninja 统计页 | 可视化 | https://datasetninja.com/frac-atlas | 2026-05 更新 | 类平衡与目标尺寸统计一目了然 |
| Scientific Data 论文 | 文献 | https://www.nature.com/articles/s41597-023-02432-4 | 开放获取 | 全部协议细节的唯一权威出处 |
§9 相关资源与引用
§9.1 官方资源
- 数据下载(官方 DOI):https://doi.org/10.6084/m9.figshare.22363012
- 官方代码仓库(训练/预测 Notebook):https://github.com/XLR8-07/FracAtlas
- 原始论文(开放获取):https://www.nature.com/articles/s41597-023-02432-4
- PubMed 收录页(PMID 37543626):https://pubmed.ncbi.nlm.nih.gov/37543626/
- 标注平台 makesense.ai:https://github.com/SkalskiP/make-sense
- 基线框架 Ultralytics YOLOv8:https://github.com/ultralytics/ultralytics
- 掩码解析工具 pycocotools:https://github.com/ppwwyyxx/cocoapi(Python 版)
- 第三方可视化统计:https://datasetninja.com/frac-atlas
§9.2 BibTeX 完整引用
@article{Abedeen_2023,
title = {{FracAtlas}: A Dataset for Fracture Classification, Localization and Segmentation of Musculoskeletal Radiographs},
author = {Iftekharul Abedeen and Md. Ashiqur Rahman and Fatema Zohra Prottyasha and Tasnim Ahmed and Tareque Mohmud Chowdhury and Swakkhar Shatabda},
year = {2023},
month = {aug},
journal = {Scientific Data},
publisher = {Springer Science and Business Media LLC},
volume = {10},
number = {1},
doi = {10.1038/s41597-023-02432-4},
url = {https://doi.org/10.1038/s41597-023-02432-4}
}
§9.3 引用指南
FracAtlas 采用 CC BY 4.0 许可:复制、分发、改编与商用均被允许,唯一强制义务是署名。任何使用该数据集的成果都应引用上方 BibTeX(作者亦鼓励公开代码与模型以促进可复现研究);若在产品或二次发布中使用,建议同时注明数据 DOI(10.6084/m9.figshare.22363012)与所用版本下载日期。
署名义务的四条实操规则:
- 引用位置:论文正文的数据集首次出现处与实验设置节各引一次;演示系统、开源仓库在 README 首屏注明。
- 改写声明:若对数据做了重标、裁剪或格式重打包,必须声明"基于 FracAtlas 修改"并列出修改内容,不能以原名冒充自有数据集。
- 版本追溯:FigShare 存在在线修订,标注所用版本的下载日期(如"downloaded 2026-09")可避免审稿阶段对不上样本数的尴尬。
- 商标与背书边界:CC BY 4.0 不授予用原作者或机构名义做宣传的权利——“经某大学认证"式表述超出了许可范围,只能陈述"数据由该团队发布”。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 模型/工具 | 用途 | 版本 |
|---|---|---|
| 千方病案写作模型(fast-model) | 全文初稿生成与结构化整理 | 2026-09 快照 |
| WebSearch 检索工具 | 事实核实(10 次检索,覆盖论文/镜像/基准/术语) | 2026-09 |
§10.2 AI 参与范围
AI 参与了资料检索汇总、初稿撰写与格式规范化;事实核查清单(FACTS.md)、章节结构与全部数字的来源绑定由编辑部审校流程负责。所有结论性表述以原始论文与官方数据页为准。
§10.3 输入来源列表
- Abedeen et al., 2023, Scientific Data 10:521. DOI 10.1038/s41597-023-02432-4. https://www.nature.com/articles/s41597-023-02432-4
- PubMed 收录页, PMID 37543626. https://pubmed.ncbi.nlm.nih.gov/37543626/
- FigShare 数据页, DOI 10.6084/m9.figshare.22363012. https://figshare.com/articles/dataset/The_dataset/22363012
- 官方代码仓库. https://github.com/XLR8-07/FracAtlas
- ResearchGate 论文全文镜像. https://www.researchgate.net/publication/372940656
- Dataset Ninja 统计页. https://datasetninja.com/frac-atlas
- HuggingFace 数据集卡 yh0701/FracAtlas_dataset. https://huggingface.co/datasets/yh0701/FracAtlas_dataset
- Kaggle 镜像(orvile/fracatlas). https://www.kaggle.com/datasets/orvile/fracatlas
- Kaggle 镜像(shyamgupta196/fracatlas). https://www.kaggle.com/datasets/shyamgupta196/fracatlas
- Emergent Mind FracAtlas 主题页. https://www.emergentmind.com/topics/fracatlas-dataset
- 2024 年 EigenCAM 归因研究收录页. https://www.aminer.org/pub/668cc01201d2a3fbfc1b7cd7/
- IEEE 相关研究(偏倚与失衡讨论). https://ieeexplore.ieee.org/document/11153815
- AuntMinnie 报道(2023-08-09). https://boardreview.auntminnie.com/index.aspx?itemID=140875&sec=log
- Prophy 引用聚合页. https://www.prophy.ai/article/170835864/
- ICD-11 术语页(findacode/mrlabtest 等). https://www.findacode.com/icd-11/block-1416283029.html 、 https://www.mrlabtest.com/ICD11/injuries-to-the-hip-or-thigh/
- WHO ICD-11 官方门户. https://icd.who.int/en
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与规模数字 | 千方病案医学编辑部 | 与论文摘要/FigShare 页逐项比对 | ✅ 已通过/已验证 |
| §2 医学背景与术语映射 | 千方病案医学编辑部 | ICD-11/SNOMED 编码经 WHO 门户与二级术语源核对 | ✅ 已通过/已验证 |
| §3-§5 数据规格与划分 | 千方病案医学编辑部 | 与论文 Data Records/Methods 对照 | ✅ 已通过/已验证 |
| §6 就绪指南与 8 坑点 | 千方病案医学编辑部(数据工程) | 基于官方文档、镜像差异与第三方实验报告整理 | ✅ 已通过/已验证 |
| §7 DAIMS 与质量评估 | 千方病案医学编辑部 | 24 项逐条溯源 | ✅ 已通过/已验证 |
| §8-§10 基准、引用与声明 | 千方病案医学编辑部 | 引用条目逐条打开核对 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
本页全部章节由 AI 辅助生成初稿;其中 §1.0 速览、§6.5 坑点与 §7.7 DAIMS 解读为 AI 基于核实事实的编辑性综合,经人工审校后发布。
§10.6 最后人工审核日期
2026-09-05
页面状态:published(全部内容已完成审核并发布)
§C 机器可读元数据(JSON-LD)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- rsna-bone-age — 共享标签:医学影像 / X光影像 / 骨骼肌肉影像
- mura — 共享标签:医学影像 / X光影像 / 骨骼肌肉影像
- grazpedwri-dx — 共享标签:医学影像 / X光影像 / 骨骼肌肉影像
- vindr-spinexr — 共享标签:医学影像 / X光影像 / 骨骼肌肉影像
- shenzhen-tb — 共享标签:医学影像 / X光影像
- cxr-cardiomegaly — 共享标签:医学影像 / X光影像
- cxr-phone — 共享标签:医学影像 / X光影像
- oai — 共享标签:医学影像 / 骨骼肌肉影像
- chexpert — 共享标签:医学影像 / X光影像
- nih-chestx-ray14 — 共享标签:医学影像 / X光影像
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
