信息速览
HC18 — 胎儿头围超声自动测量基准 AI-Ready Wikipedia
INFOBOX
| 数据集名称 | HC18 |
| 英文全称 | Automated measurement of fetal head circumference using 2D ultrasound images |
| 别名/简称 | HC18、Fetal Head Circumference Challenge、HC18 Grand Challenge |
| 疾病分类 | 胎儿生长发育评估(非疾病特异;涉及 ICD-11 编码 LD2F.1 胎儿生长受限 / LD20.0 小头畸形,详见 §2.1) |
| SNOMED CT | 275819002 Fetal head circumference measurement (observable entity) / 268442001 Fetal ultrasound scan (procedure)(详见 §2.1b) |
| 数据模态 | 二维灰阶超声(胎儿头部标准切面) |
| AI 任务类型 | 语义分割、椭圆拟合、头围回归、生物参数测量、孕龄估计、目标定位 |
| 样本总数 | 1,334 张图像(训练 999 / 测试 335),来自 551 名孕妇 |
| 数据大小 | 176.8 MB(四个文件合计:training_set.zip 132.9 MB + test_set.zip 43.5 MB + 两个 CSV 共 42.8 kB) |
| 数据格式 | PNG(灰度 800 × 540)+ CSV 元数据 |
| 许可证 | Creative Commons Attribution 4.0 International (CC-BY-4.0) |
| 访问级别 | 开放(Zenodo 直接下载,无需注册;官方评测需在 Grand Challenge 注册提交) |
| DUO 标签 | GRU, NRES |
| 语言 | 英文(文件名与 CSV 表头) |
| 首发日期 | 2018-07-27(Zenodo v1 / v2 同日发布);论文 2018-08-23 |
| 最后更新 | 2018-07-27(v2,此后未再更新) |
| 发布机构 | Radboud University Medical Center(荷兰奈梅亨) |
| 官方主页 | https://hc18.grand-challenge.org/ |
| 下载地址 | https://zenodo.org/record/1327317 |
| DOI | 10.5281/zenodo.1327317(数据集 v2)/ 10.1371/journal.pone.0200412(论文) |
| 引用次数 | 1,900+(Google Scholar,截至 2026-09;含方法论文与数据集被引合计) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 官方划分明确、标注一致、许可宽松、基准成熟;扣分项:测试集真值不公开导致本地无法复现官方指标、掩码需自行由椭圆环填充、无官方预处理脚本 |
| 页面状态 | published |
§0 E-E-A-T 信任声明与免责声明
§0.1 审核声明
- 医学审核者:[千方病案医学编辑部]交叉审核:§2 医学背景(胎儿头围测量的临床适应证、标准切面定义与孕龄估计边界)、§7 偏倚分析。
- 数据工程审核者:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline 和坑点。
- 审核日期:2026-09-05
§0.2 免责声明
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。HC18 以 CC-BY-4.0 发布,允许商业与非商业再利用,但必须保留署名并标明是否作出修改。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? HC18 是一份关于"给胎儿量头围"的超声图像数据集。怀孕期间做 B 超,医生会找到胎儿头颅的标准横切面,用仪器上的椭圆工具沿颅骨外缘描一圈,仪器立刻给出周长——这就是头围(Head Circumference,HC)。HC18 把 1,334 张这样的切面图像收集起来,由受训超声技师手工描出每张的颅骨轮廓交给算法学习,再用 335 张没有公开答案的图像去考算法。图像全部来自荷兰奈梅亨的一家大学医院,采集时间是 2014 年 5 月到 2015 年 5 月。
为什么重要? 头围是产科超声最核心的生物测量之一。孕早期用头臀长(CRL)估孕龄最准,但 13 周之后胎儿蜷曲、CRL 不再可靠,头围就接棒成为估孕龄和监测生长的主要依据。手工测量有两个老问题:操作者依赖性强,不同技师描出的椭圆能有肉眼可见的差异;且需要训练有素的技师,而医疗资源匮乏地区这类人才严重短缺。原始论文明确提出自动化测量对发展中国家具有实际价值。它也是超声图像分割领域少数同时覆盖孕早、中、晚三期的公开基准。
我能用它做什么? 最直接的用法是训练一个分割模型:输入超声图像、输出胎儿头部掩码,再从掩码拟合椭圆算出头围。更进一步可跳过分割直接回归头围数值,或研究椭圆拟合、轮廓端点到参数化的转换、超声去噪对测量精度的影响。数据集有明确的官方训练/测试划分,也提供了逐图像素物理尺寸,因此掩码上的像素周长可换算成毫米,与临床测量值直接比对。需要注意测试集没有公开真值,想拿到官方指标必须去 Grand Challenge 平台提交。
§1.1 摘要
HC18 由 Radboud University Medical Center 的 Thomas L. A. van den Heuvel、Dagmar de Bruijn、Chris L. de Korte 与 Bram van Ginneken 构建,2018 年 7 月 27 日以 CC-BY-4.0 许可发布于 Zenodo,同期在 Grand Challenge 平台上线同名挑战赛,方法论文于 2018 年 8 月 23 日发表于 PLOS ONE。
数据集共 1,334 张二维超声图像,全部为可测量头围的胎儿头部标准切面(standard plane),图像尺寸统一为 800 × 540 像素。数据采集自 551 名孕妇,时间跨度为 2014 年 5 月至 2015 年 5 月,设备为 GE Voluson E8 与 Voluson 730。官方划分为训练集 999 张与测试集 335 张;按孕周细分,训练/测试分别对应孕早期 165/55、孕中期 693/233、孕晚期 141/47。每张图像的像素物理尺寸记录在 CSV 中,范围为 0.052–0.326 mm——这个近 6 倍的跨度来源于技师为适配不同胎儿体型而调整的缩放。
标注方式是数据集最具辨识度的设计。训练集的每张图像都配有一个单像素宽的椭圆环(ellipse outline),由受训超声技师沿颅骨外缘勾画;与此对应的头围实测值(毫米)记录在 training_set_pixel_size_and_HC.csv 中。测试集真值由组织方保管,发布的 test_set_pixel_size.csv 仅含像素尺寸。这一"环而非面"的标注形态决定了几乎所有下游工作都必须先做一步几何转换——用洪水填充把 1 像素环变成实心区域,否则模型会学到一条极细的边界而不是头部区域。
评测协议同样是该数据集的独特之处。参赛者不提交掩码,而是提交一个 6 列 336 行的 CSV,每行描述一张测试图像对应的椭圆:文件名、中心坐标(mm)、两个半轴长度(mm)、角度(弧度)。官方排行榜报告四项指标——平均绝对差(mm)、平均 Dice、平均差(mm)、平均 Hausdorff 距离(mm)。原始论文提出的 CAD 系统采用 Haar-like 特征训练随机森林定位颅骨,再用 Hough 变换、动态规划与椭圆拟合提取头围。该 CAD 系统与参考孕龄的平均差在孕早、中、晚期分别为 0.6 ± 4.3、0.4 ± 4.7、2.5 ± 12.4 天,论文结论是其表现与资深超声技师相当。
§1.2 战略价值
维度一:分割基准与测量基准的双身份。 多数医学图像分割数据集止步于"像素级 Dice 好不好"。HC18 的评测口径强制参赛者把分割结果转换为具有物理量纲的临床测量值,并与技师手工测量直接比对毫米级误差。这使排行榜名次与临床可用性之间的鸿沟显著缩小:一个 Dice 97% 但椭圆拟合偏 5 mm 的系统在临床上毫无价值,而排行榜恰好能暴露这类失败。对研究"分割指标与下游任务指标脱节"的团队,HC18 是现成的实验台。
维度二:跨孕周泛化与小样本鲁棒性的天然测试床。 数据集覆盖孕早、中、晚三期,分层极不均衡——孕中期占训练集 69.4%,孕晚期仅 141 张。多项研究一致报告模型在孕中期最好、孕晚期边界误差增大。这使 HC18 成为研究"亚群不均衡下的分割退化"与"缩放导致的像素尺寸漂移"的高性价比素材,无需自建多中心队列即可复现真实的泛化失败模式。
维度三:极低的复现门槛。 全部数据仅 176.8 MB,以 CC-BY-4.0 发布,无需注册、无需签署数据使用协议、无凭证化流程。研究者可在几分钟内完成下载并跑通实验,不必像使用受控访问数据集那样等待数周审批。对教学与快速原型验证而言,这一特性具有实际意义。
§1.3 同类数据集横向对比
| 数据集 | 规模 | 模态 | 标注形态 | 核心任务 | 与 HC18 的差异化 |
|---|---|---|---|---|---|
| HC18 | 1,334 张 | 2D 灰阶超声 | 单像素椭圆环 + 头围实测值(mm) | 头部分割 / 头围回归 | 唯一同时覆盖孕早中晚三期且给出物理尺寸的公开 HC 基准 |
| Fetal Head Segmentation(多任务网络子集) | 999 张 | 2D 灰阶超声 | 轮廓 + 多任务标签 | 头围 / 腹围 / 股骨联合测量 | 复用 HC18 训练集并扩展多任务,规模不增 |
| FetReg | 3,300 帧 | 胎儿镜视频 | 胎盘血管分割 | 胎盘血管分割 | 模态为胎儿镜而非超声,任务完全不同 |
| FETS | 1,334 张(复用) | 2D 灰阶超声 | 脑部结构分割 | 多结构脑部分割 | 图像来源与 HC18 同源,任务从轮廓转向内部结构 |
| ACDC | 200 例 | 心脏 MRI | 心室分割掩码 | 心脏分割 | 模态与器官不同,可作为分割泛化对照 |
| CAMUS | 500 例 | 心脏超声 | 心室与心房分割 | 超声心动图分割 | 同为超声但与产科无关,可对照超声域内的迁移能力 |
表中提及的其他数据集,其站内词条由发布管线自动挂载互链。
§1.4 版本时间轴
| 日期 | 事件 | 版本 / 标识 |
|---|---|---|
| 2014-05 至 2015-05 | 数据采集窗口(Radboud UMC 产科) | 原始采集 |
| 2018-01-16 | 方法论文投稿 PLOS ONE | 投稿稿 |
| 2018-06-26 | 论文接收 | 接收稿 |
| 2018-07-27 | Zenodo v1 发布;同日 v2 发布 | 10.5281/zenodo.1322001 / 10.5281/zenodo.1327317 |
| 2018-08-23 | 论文正式发表 | PLoS ONE 13(8): e0200412 |
| 2018 年至今 | 挑战赛排行榜持续接收提交,未再发布数据修订 | v2 为最终版 |
§1.5 典型应用场景
- 胎儿头部分割模型训练与对比:作为超声分割的标准基准,用于评估 U-Net、V-Net、SegFormer、Swin-UNet 等架构在低对比度、强斑点噪声图像上的表现。
- 头围回归与椭圆拟合研究:绕过分割,直接从图像回归头围数值,或研究轮廓点到椭圆参数(中心、半轴、角度)的最优拟合策略。
- 超声去噪与增强方法评测:小波去噪、伽马校正、CLAHE 等预处理对下游测量误差的影响在多篇论文中被量化报告。
- 孕龄估计与胎儿生长监测:将预测头围代入 Hadlock 等生物测量公式估计孕龄,论文报告 CAD 系统与参考孕龄的平均差在孕早、中、晚期分别为 0.6 ± 4.3、0.4 ± 4.7、2.5 ± 12.4 天。
- 教学与复现性研究:规模适中(176.8 MB)、许可宽松、官方划分明确,适合作为医学图像分析课程与可复现性研究的实验素材。—
§2 医学背景
§2.1 ICD-11 编码映射
HC18 本身不是按疾病编码组织的数据集——它是按"解剖切面 + 生物测量"组织的。因此 ICD-11 映射的作用不是标注每张图像,而是界定该数据集测量结果可能服务的临床决策终点。
| 标签 | ICD-11 编码 | 中文名称 | 与头围测量的关系 |
|---|---|---|---|
| 胎儿生长受限 | LD2F.1 | 胎儿生长受限(Fetal growth restriction) | 头围低于同孕周参考值是评估要点之一 |
| 小头畸形 | LD20.0 | 小头畸形(Microcephaly) | 头围显著低于同孕周参考值即为核心诊断依据 |
| 脑积水 | 8A40 | 先天性脑积水(Congenital hydrocephalus) | 头围异常增大、脑室扩张的随访指标 |
| 巨大胎儿 | LD2F.0 | 巨大胎儿(Macrosomia) | 头围偏大是评估产程风险的参数之一 |
| 孕龄估计 | — | 不适用(非疾病实体) | 头围为 13 周后估测孕龄的主要生物测量 |
| 产前超声筛查 | — | 不适用(非疾病实体) | 标准切面获取与生物测量属筛查流程 |
§2.1b SNOMED CT 映射
| 标签 | SNOMED CT 码 | 术语(英文) | 用途 |
|---|---|---|---|
| 头围测量 | 275819002 | Fetal head circumference measurement (observable entity) | 数据集核心测量实体 |
| 胎儿超声 | 268442001 | Fetal ultrasound scan (procedure) | 采集过程编码 |
| 产科超声 | 16310003 | Ultrasonography of pregnant uterus (procedure) | 检查上下文 |
| 生物测量 | 410607003 | Fetal biometry (procedure) | 测量流程归类 |
| 标准切面 | 417485006 | Ultrasound scan of fetal head (procedure) | 图像获取时的解剖定位 |
| 孕龄 | 412726003 | Gestational age (observable entity) | 头围的下游临床用途 |
§2.2 疾病与测量背景
头围测量的临床逻辑是"横向比较 + 纵向追踪"。横向比较指把测得的头围与同孕周人群的参考曲线(如 Hadlock、INTERGROWTH-21st)对照,判断落在第几百分位;纵向追踪指连续多次检查观察生长速度是否放缓或骤增。头围显著低于同孕周参考值提示小头畸形或胎儿生长受限,显著高于参考值则需排查脑积水、巨大胎儿等情况。
孕龄估计是另一条主线。原始论文明确指出:头臀长(CRL)在 8+4 周至 12+6 周之间是估测孕龄最准确的测量,超过 13 周后 CRL 不再可靠,头围成为最准确的替代指标。若孕妇记不清末次月经时间,超声生物测量就是定孕龄和推算预产期的主要手段。
头围的测量规范同样被论文明确引用:应在头部横切面上测量,要求中央中线回声清晰、该中线在前三分之一处被透明隔腔(cavum septi pellucidi)中断、同时可见侧脑室前角与后角。这个切面即所谓"标准切面"(standard plane)。HC18 的 1,334 张图像全部是经人工筛选确认符合标准的切面——这一点既是数据质量的保证,也是一个必须意识到的偏倚:真实临床中大量采集帧并非标准切面,模型在本数据集上学到的能力不能直接迁移到自由采集流上。
头围测量本身存在固有的观察者间变异。原始论文通过让一位资深超声技师与一位医学研究者独立标注测试集来刻画这一变异:两者相对参考孕龄的平均差分别为 0.8 ± 2.6 与 1.6 ± 2.7 天(孕早期)、−0.0 ± 4.6 与 2.0 ± 4.8 天(孕中期)、1.9 ± 11.0 与 3.9 ± 13.7 天(孕晚期)。这组数字给出了自动化系统性能的合理上界参照。
§2.3 临床任务定义
| 任务类型 | 具体定义 | 输入 | 输出 | HC18 直接支持度 |
|---|---|---|---|---|
| 筛查 | 标准切面获取 + 头围测量,判断是否落在正常范围 | 2D 超声图像 | 头围(mm)+ 百分位 | 直接支持:图像即标准切面 |
| 诊断 | 小头畸形与脑积水的确诊 | 头围序列 + 影像 + 病史 | 诊断结论 | 间接支持:头围是诊断依据之一 |
| 分级 | 胎儿生长受限严重程度分级 | 多参数生物测量 | 分级 | 间接支持 |
| 预后 | 生长轨迹预测、分娩风险评估 | 纵向头围序列 | 风险估计 | 不直接支持:无纵向随访标签 |
| 质控 | 判断某帧是否为可测量的标准切面 | 2D 超声图像 | 是/否 | 不直接支持:数据集已预筛标准切面 |
| 测量自动化 | 给定标准切面自动输出头围 | 2D 超声图像 | 头围(mm)或椭圆参数 | 直接支持:核心任务 |
§2.4 患者人群
| 维度 | 取值 | 来源 |
|---|---|---|
| 来源 | Radboud University Medical Center 产科,荷兰奈梅亨 | MDPI Diagnostics 2022 论文 §3.2 |
| 时间 | 2014 年 5 月 – 2015 年 5 月 | Hugging Face HC18 数据集卡 |
| 年龄 | 未在数据发布中提供 | — |
| 性别 | 胎儿性别未提供;受检者为孕妇 | — |
| 种族 | 未在数据发布中提供(单中心荷兰队列) | — |
| 就医类型 | 常规产科超声检查(孕早、中、晚期均覆盖) | MDPI Diagnostics 2022 论文 §3.2 |
| 孕周分层 | 训练集 孕早 165 / 孕中 693 / 孕晚 141;测试集 55 / 233 / 47 | MDPI Diagnostics 2022 论文 Table 1 |
| 受检者数 | 551 名孕妇(训练集 999 张图像) | Hugging Face HC18 数据集卡 |
§2.5 临床价值
自动化头围测量的价值在两个方向上被论文明确论证。第一个方向是效率与一致性:手工勾画椭圆高度依赖操作者经验,图像本身又存在低对比度、边界模糊、斑点噪声等干扰,导致重复测量间的一致性问题。自动化系统若能稳定达到技师水平,就能减少扫描时间、提升测量的可复现性。第二个方向是可及性:论文明确指出自动化 HC 评估对训练有素超声技师严重短缺的发展中国家具有价值——在这些地区,让操作者用简化流程采集标准切面、由算法完成测量,是扩大产前筛查覆盖面的现实路径。
从基准研究的角度,HC18 的价值还在于它把"测量误差"这一临床可解释指标变成了排行榜上的第一公民。参加者提交的是椭圆参数而非掩码,排行榜首屏即展示平均绝对差(mm)——这迫使研究者直面"像素指标好看但毫米误差大"的问题。多个后续工作报告了 Dice 相近但毫米误差差异显著的结果,说明这种评测口径确实捕获了掩码指标遗漏的信息。
§2.6 标注金标准
| 维度 | 内容 |
|---|---|
| 划分 | 官方固定划分:训练集 999 张、测试集 335 张,无交叉 |
| 标注方式 | 受训超声技师沿颅骨外缘手工勾画单像素宽椭圆环;训练集另给出头围实测值(mm) |
| 标注者 | 训练集标注者为受训超声技师(单标注);测试集参考标准由一位资深超声技师与一位医学研究者独立完成 |
| 标注一致性 | 论文对测试集参考值给出人工标注者与参考孕龄的差异分布(资深技师 0.8 ± 2.6 / −0.0 ± 4.6 / 1.9 ± 11.0 天,医学研究者 1.6 ± 2.7 / 2.0 ± 4.8 / 3.9 ± 13.7 天,按孕早、中、晚期计) |
| 性质 | 专家手工标注,非自动生成;标注形态为几何轮廓而非像素级区域 |
| 真值可用性 | 训练集头围真值随数据发布;测试集真值由组织方保管,仅通过排行榜反馈 |
| 伦理 | 依照《赫尔辛基宣言》采集与匿名化,经 CMO Arnhem-Nijmegen 批准用于研究 |
§3 数据集规格
§3.0 版本抉择矩阵
HC18 的 Zenodo 记录有两个版本,两者同日(2018-07-27)发布,文件内容一致,仅 DOI 与记录元数据不同。因此版本抉择的实际意义在于"Hugging Face 镜像与官方 Zenodo 原始包之间如何取舍"以及"要不要做受检者级重划分"。
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 复现原始论文与官方排行榜结果 | Zenodo v2(10.5281/zenodo.1327317)+ Grand Challenge 提交 | 176.8 MB | 官方文件包与官方评测协议匹配,指标可直接对齐排行榜 |
| 只想快速训练一个分割模型 | Hugging Face MedOtter/HC18 |
179 MB | 已预生成实心掩码并解析出 subject_id 与 frame_idx,省去椭圆环填充与文件名解析 |
| 需要做受检者级划分以避免泄漏 | Hugging Face 镜像(含 subject_id)或本地解析文件名 |
179 MB | 官方划分不含受检者分组信息,自行划分必须先从文件名还原受检者 ID |
| 需要避免下载完整包(存储受限) | Zenodo 单文件下载(仅 training_set.zip + 对应 CSV) |
132.9 MB + 33.7 kB | 训练阶段不需要测试图像;官方测试真值本来也不在包内 |
| 引用规范要求 | Zenodo v1 DOI 10.5281/zenodo.1322001 或 v2 10.5281/zenodo.1327317 |
— | 官方页面引用的 DOI 为 v1,Hugging Face 卡引用 v2,论文正文兼容两者 |
§3.1 模态详情
| 维度 | 内容 |
|---|---|
| 成像模态 | 二维灰阶超声(B-mode) |
| 探头与系统 | GE Voluson E8、GE Voluson 730(凸阵腹部探头,产科预设) |
| 图像尺寸 | 800 × 540 像素(宽 × 高),全数据集统一 |
| 像素物理尺寸 | 0.052 – 0.326 mm(逐图不同,近 6 倍跨度) |
| 位深与通道 | 灰度单通道 PNG |
| 解剖区域 | 胎儿头部横切标准切面(含颅骨环、中线回声、透明隔腔) |
| 采集者 | 具备资质的超声技师(qualified sonographers) |
| 图像质量特征 | 存在斑点噪声、声影、混响伪影;部分图像颅骨边界模糊或椭圆不完整 |
§3.2 子集样本数
| 子集 | 图像数 | 受检者数 | 标注 | 头围真值 | 像素尺寸 CSV |
|---|---|---|---|---|---|
| 训练集(training set) | 999 | 551 名孕妇 | 单像素椭圆环(每图一个) | 提供(mm) | training_set_pixel_size_and_HC.csv |
| 测试集(test set) | 335 | 未单独披露 | 不发布 | 由组织方保管 | test_set_pixel_size.csv |
| 合计 | 1,334 | — | — | — | — |
按孕周的分层分布:
| 孕周分层 | 训练集 | 测试集 | 合计 |
|---|---|---|---|
| 孕早期(First trimester) | 165 | 55 | 220 |
| 孕中期(Second trimester) | 693 | 233 | 926 |
| 孕晚期(Third trimester) | 141 | 47 | 188 |
| 合计 | 999 | 335 | 1,334 |
§3.3 数据格式
| 文件 | 格式 | 体积 | 内容 |
|---|---|---|---|
training_set.zip |
ZIP(内含 PNG) | 132.9 MB | 999 张训练图像 + 999 个椭圆环标注图像 |
test_set.zip |
ZIP(内含 PNG) | 43.5 MB | 335 张测试图像(无标注) |
training_set_pixel_size_and_HC.csv |
CSV | 33.7 kB | 训练集每图的像素尺寸(mm)与头围(mm) |
test_set_pixel_size.csv |
CSV | 9.1 kB | 测试集每图的像素尺寸(mm) |
§3.4 存储大小与校验
| 项目 | 数值 |
|---|---|
| 解压前总大小 | 176.8 MB |
Zenodo v2 training_set.zip |
132.9 MB(md5 00eb8198b9a505b2b3a6dfc740382497) |
Zenodo v2 test_set.zip |
43.5 MB(md5 8402af5d137ef40a2888c1011ef3fe7e) |
Zenodo v2 training_set_pixel_size_and_HC.csv |
33.7 kB(md5 c0761518fece2bd2d2ad4218f2cd9777) |
Zenodo v2 test_set_pixel_size.csv |
9.1 kB(md5 8476dc198cc6542f26c57e87faeee033) |
| 解压后估算磁盘需求 | 约 0.5 GB(PNG 解压后 + 掩码副本 + 缓存) |
| 建议预留(含实验中间产物) | 5 GB |
§3.5 标注方式
HC18 的标注属于专家人工几何标注,而非像素级区域标注。理解这一点的工程后果比理解标注者资质更重要。
- 标注形态:单像素宽的闭合椭圆环(ring 或 outline),描在颅骨外缘。它不是填充区域,也不严格是数学意义上的解析椭圆——技师手工勾画,因此存在局部偏离理想椭圆的抖动。
- 从环到面:训练分割模型前必须把环转换为实心区域。主流做法是洪水填充(从图像角落起填充背景再取反),或以
scipy.ndimage.binary_fill_holes填充孔洞。V-Net、Res-U-Net、Mask R-CNN 系列论文均采用这一预处理。 - 从面到参数:官方评测要求输出椭圆参数。因此从掩码到最终提交之间还需要一步椭圆拟合(最小二乘、直接最小二乘或 Fitzgibbon 方法)。
- 头围真值来源:训练集 CSV 中的头围(mm)为技师测量值,是回归任务的直接监督信号。
- 测试集参考标准:由一位资深超声技师与一位医学研究者独立标注,论文给出了两者相对参考孕龄的差异分布,可视为标注一致性的间接度量。
§3.6 标注者资质与一致性
| 维度 | 内容 |
|---|---|
| 训练集标注者 | 受训超声技师(trained sonographer),单人标注每张图像 |
| 测试集标注者 | 一位资深超声技师(experienced sonographer)+ 一位医学研究者(medical researcher),独立完成 |
| 一致性证据 | 论文报告两者相对参考孕龄的平均差:资深技师 0.8 ± 2.6 / −0.0 ± 4.6 / 1.9 ± 11.0 天;医学研究者 1.6 ± 2.7 / 2.0 ± 4.8 / 3.9 ± 13.7 天(孕早、中、晚期) |
| 一致性解读 | 两位标注者在孕早期几乎无偏(0.8 与 1.6 天),在孕晚期标准差急剧放大(11.0 与 13.7 天),说明晚期头围测量的固有不确定性显著更高 |
| 观察者内一致性 | 数据发布未单独提供重复测量实验 |
| 一致性对用户的含义 | 任何在孕晚期声称亚毫米级头围精度的结果都应被审慎对待——人工参考标准本身在该亚群就更不确定 |
§3.7 采集周期与地域
| 维度 | 内容 |
|---|---|
| 采集开始 | 2014 年 5 月 |
| 采集结束 | 2015 年 5 月 |
| 采集地点 | 荷兰奈梅亨,Radboud University Medical Center 产科 |
| 地域覆盖 | 单中心(single-center),无多中心数据 |
| 设备 | GE Voluson E8、GE Voluson 730 |
| 伦理批准 | CMO Arnhem-Nijmegen(地区伦理委员会),研究用途授权 |
| 知情同意与匿名化 | 由具备资质的超声技师依照《赫尔辛基宣言》完成匿名化 |
§3.8 设备与采集参数
HC18 使用两台 GE 超声系统:Voluson E8 与 Voluson 730,型号未逐图标注。输出统一为 800 × 540 像素,逐图像素物理尺寸记录在 CSV 中,范围 0.052 至 0.326 mm,原因是技师为适配不同孕周胎儿的头部尺寸调整了缩放与深度——这也是像素尺度不可跨图复用(见 §6.5 坑点 4)的直接来源。采集模式为常规产科超声检查下的自由手扫查;具体探头型号、频率与增益设置未随数据发布。
§3.9 深度溯源链
| 层级 | 内容 |
|---|---|
| 原始来源 | Radboud UMC 产科 2014-05 至 2015-05 的常规产科超声检查 |
| 图像筛选 | 人工筛选出符合头围测量标准的胎儿头部标准切面(1,334 张) |
| 匿名化 | 采集时即由超声技师完成匿名化,去除直接标识信息 |
| 标注 | 训练集由受训技师勾画单像素椭圆环;测试集由资深技师与医学研究者独立标注 |
| 打包 | 划分为训练与测试两个 ZIP 包 + 两个 CSV 元数据文件 |
| 发布 | 2018-07-27 Zenodo(v1 与 v2,CC-BY-4.0) |
| 部署 | Grand Challenge 平台挑战赛(提交制评测) |
| 社区派生 | Hugging Face 镜像(MedOtter/HC18、Angelou0516/HC18)已预生成实心掩码并解析受检者 ID |
| 研究使用 | 被大量超声分割与生物测量论文用作主基准 |
§3.10 与挑战赛的绑定关系
HC18 的一个结构性特点是:数据集与挑战赛是同一件事的两面。这带来若干实际后果:官方指标只能通过 Grand Challenge 提交获得,不存在本地计算途径;335 张测试图像与真值被永久冻结,不随排行榜更新;平台支持查看历史某日的排行榜快照,便于对齐旧论文数值;组织方只提供数据与提交格式,不提供参考实现,基线需自行搭建;官方要求同时引用方法论文与数据集记录(Zenodo DOI)。这些约束解释了为何该数据集"文档透明但工程设施为零"(见 §7.7 评分)。
§4 数据结构
§4.0 目录树
官方 ZIP 解压后的目录结构如下。注意 training_set 目录中图像与标注图像是平铺在同一目录下、以文件名区分的。
hc18/
├── training_set.zip # 132.9 MB
│ └── training_set/ # 解压后,共 999 对(图像 + 标注),平铺同目录
│ ├── 000_HC.png # 原始超声图像
│ ├── 000_HC_Annotation.png # 单像素椭圆环标注(同编号)
│ ├── 010_HC.png # 同一受检者的第 1 帧
│ ├── 010_HC_Annotation.png
│ ├── 010_2HC.png # 同一受检者的第 2 帧(注意 _2 位置)
│ ├── 010_2HC_Annotation.png
│ └── ...
├── test_set.zip # 43.5 MB
│ └── test_set/ # 解压后,共 335 张,仅图像无标注
│ ├── 001_HC.png
│ └── ...
├── training_set_pixel_size_and_HC.csv # 33.7 kB
└── test_set_pixel_size.csv # 9.1 kB
training_set_pixel_size_and_HC.csv 的结构:
filename,pixel_size(mm),head_circumference(mm)
000_HC.png,0.110353,87.700000
001_HC.png,0.112727,96.500000
...
test_set_pixel_size.csv 的结构(无头围列):
filename,pixel_size(mm)
001_HC.png,0.108000
002_HC.png,0.115000
...
§4.1 DAIMS 字段字典
下表覆盖 HC18 的核心数据字段。需要强调:HC18 的"字段"分布在文件系统(图像与标注)与CSV 元数据两处,二者以 filename 为连接键。因此本字典按"逻辑记录"而非单一表组织。
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
filename |
string | 图像文件名,连接图像与 CSV 的唯一键;形如 NNN[_M]HC.png |
388_HC.png |
索引对齐、受检者 ID 解析 | 无(元数据) | 不存在缺失 | 训练集编号 000–805(含 _M 后缀),测试集 001–335 |
subject_id |
int | 受检者编号,由文件名前缀数字解析;相同 subject_id 表示同一次检查 |
388 |
受检者级划分、防泄漏分组键 | 解析规则需处理 _M 后缀 |
官方 CSV 未直接提供,需自解析 | 0–805(训练集) |
frame_idx |
int | 同一受检者的帧序号;无 _M 后缀时为 1 |
2(对应 010_2HC.png) |
多帧受检者的帧级聚合 | 后缀不连续,需按数字解析 | 无后缀即视为 1 | 1–4 |
image |
PNG(灰度 800×540) | 原始二维超声图像 | 388_HC.png |
分割与回归模型输入 | 斑点噪声、声影、边界模糊 | 不适用 | 8 位灰度 |
annotation_outline |
PNG(二值 800×540) | 训练集专属:单像素宽椭圆环标注 | 388_HC_Annotation.png |
轮廓监督、椭圆拟合 | 手工勾画抖动;极少数环不完整 | 测试集不存在此文件 | 0 / 255 |
mask_solid |
PNG(二值 800×540) | 非官方派生字段:由 outline 洪水填充得到的实心区域 | 填充后内部为 255 | 分割模型的标准监督信号 | 填充算法选择会改变边界像素归属 | 不适用 | 0 / 255 |
pixel_size_mm |
float | 单像素的物理边长(毫米),逐图不同 | 0.110353 |
像素量到毫米量的换算系数 | 由设备缩放决定,非测量误差 | 无缺失(两个 CSV 均含) | 0.052–0.326 |
head_circumference_mm |
float | 训练集专属:技师测量的头围真值(毫米) | 87.700000 |
回归监督信号、椭圆拟合误差评估 | 观察者间差异(孕晚期标准差最大) | 测试集不含此列 | 随孕周变化,约 65–100 以上 |
center_x_mm |
float | 提交格式字段:椭圆中心 x(毫米) | 72.378073183 |
官方评测输入之一 | 拟合误差 | 无 | 由像素尺寸换算 |
center_y_mm |
float | 提交格式字段:椭圆中心 y(毫米) | 60.803647248 |
官方评测输入之一 | 拟合误差 | 无 | 由像素尺寸换算 |
semi_axes_a_mm |
float | 提交格式字段:半长轴(毫米) | 32.482252220 |
官方评测输入之一 | 拟合误差 | 无 | 大于 0 |
semi_axes_b_mm |
float | 提交格式字段:半短轴(毫米) | 23.374422688 |
官方评测输入之一 | 拟合误差 | 无 | 大于 0 |
angle_rad |
float | 提交格式字段:椭圆旋转角(弧度,非度) | 0.061252332740 |
官方评测输入之一 | 单位误用是最常见错误 | 无 | 通常 −π/2 至 π/2 |
§4.2 标签分布、孕周构成与关键统计
HC18 没有分类标签,其"标签分布"体现为头围数值的分布与孕周构成。
| 统计维度 | 训练集 | 测试集 | 说明 |
|---|---|---|---|
| 图像总数 | 999 | 335 | 官方固定划分 |
| 孕早期占比 | 16.5% | 16.4% | 两划分分布高度一致,说明做了分层抽样 |
| 孕中期占比 | 69.4% | 69.6% | 主导亚群 |
| 孕晚期占比 | 14.1% | 14.0% | 训练样本最少的亚群 |
| 头围范围 | 随孕周变化,通常覆盖 65–100 以上毫米量级 | 未公开 | 训练集 CSV 可自行统计 |
| 多帧受检者 | 最大编号 805 对应 999 张图像,即约 194 张为多帧冗余 | 未见多帧 | 见 §6.5 坑点 3 |
§4.3 关键统计速查
| 指标 | 数值 |
|---|---|
| 图像分辨率 | 800 × 540 |
| 单图平均字节量(PNG) | 约 90–130 kB(依压缩比而定) |
| 像素物理尺寸跨度 | 0.052 – 0.326 mm,比值约 6.27 倍 |
| 换算示例 | 若像素尺寸为 0.1 mm,则 1 像素 = 0.1 mm;头围 300 像素约合 30 mm(须按每图实际尺寸计算) |
| 椭圆环线宽 | 1 像素 |
| 官方提交规格 | 336 行 × 6 列(1 表头行 + 335 数据行) |
§4.4 数据层级
受检者(subject_id,训练集编号 0–805)
└── 检查帧(frame_idx,1–4;同一次超声检查可产生多帧)
└── 图像(image,800 × 540 PNG)
└── 标注(annotation_outline,仅训练集;单像素椭圆环)
└── 派生掩码(mask_solid,非官方;洪水填充结果)
关键含义:受检者不是图像。999 张训练图像只对应约 806 个编号(0–805),同一编号的多帧图像"外观高度相似"。因此划分训练与验证集时必须以 subject_id 为分组键,否则验证集指标会因近重复图像而虚高。
§4.5 缺失值与信息性缺失
| 字段 | 缺失情况 | 性质 | 正确处理方式 |
|---|---|---|---|
head_circumference_mm(测试集) |
整列不存在 | 信息性缺失:真值被人为保管以维持挑战赛公平性 | 不得插补;只能通过 Grand Challenge 提交获得评测反馈 |
annotation_outline(测试集) |
整个文件不存在 | 信息性缺失:同上 | 不得用训练集标注伪造测试标签 |
subject_id |
官方 CSV 未提供 | 需派生:可从文件名前缀解析 | 自行解析并显式保存,用于分组划分 |
frame_idx |
官方 CSV 未提供 | 需派生:从 _M 后缀解析,无后缀为 1 |
解析后保存,用于多帧聚合策略 |
| 受检者人口学属性 | 年龄、性别、种族未发布 | 非信息性缺失(未采集或未发布) | 无法进行人口学亚组分析 |
pixel_size_mm |
无缺失 | — | 两个 CSV 均完整提供 |
§5 划分与使用建议
§5.1 官方划分
官方划分为一次性固定划分:训练集 999 张(含标注与头围真值)、测试集 335 张(仅图像与像素尺寸)。测试集真值由组织方保管,评测通过 Grand Challenge 平台的提交接口完成。
| 属性 | 训练集 | 测试集 |
|---|---|---|
| 图像数 | 999 | 335 |
| 标注 | 单像素椭圆环 | 无 |
| 头围真值 | 提供(mm) | 保管 |
| 用途 | 模型开发 | 官方评测 |
| 是否含受检者分组信息 | 否(需自解析) | 否 |
官方划分的一个优点是孕周分布在训练与测试之间高度一致(孕早 16.5% 对 16.4%,孕中 69.4% 对 69.6%,孕晚 14.1% 对 14.0%),说明组织方做了分层。这也意味着官方测试集不能用来评估跨孕周泛化——它和训练集同分布。
§5.2 社区惯例划分
社区实践中出现了若干种划分方式:
| 划分方式 | 比例 / 数量 | 说明 |
|---|---|---|
| 官方划分 | 999 / 335 | 用于对标排行榜 |
| 静态三分(Phase 0 惯例) | 70% / 15% / 15%(random_state=42) |
在训练集内部再切验证与留出集 |
| 时序划分(Phase 2 惯例) | 564 / 121 / 121(来自 806 个片段) | 按受检者编号时序切分,用于研究时间维度的泛化 |
| 社区复现(某次提交记录) | 80% / 15% / 5% | 训练、验证、测试,配合 216 × 320 输入尺寸 |
需要提醒:上述比例中,只有显式使用 subject_id 作为分组键的划分才避免了受检者级泄漏。按文件随机 train_test_split 的做法在社区代码中相当常见,它会带来指标虚高。
§5.3 划分策略建议与泄漏风险
核心结论:HC18 的默认划分不携带分组信息,必须自行构造受检者级划分。 泄漏有三条路径。
-
受检者级泄漏(最严重)。999 张训练图像对应约 806 个编号,其中约 194 张是与已有图像"同一次检查、高度相似"的额外帧。若按文件随机划分,同一受检者的近重复帧会同时出现在训练与验证两侧,验证集 Dice 会被系统性抬高几个百分点,而测试集表现无法复现。
-
像素尺度泄漏(隐蔽)。由于像素尺寸由技师按胎儿体型调整,同一受检者的多帧通常共享相近的像素尺寸。这意味着"像素尺寸"这一看似无害的元数据可以在分组划分不当时充当受检者指纹。若把
pixel_size_mm作为模型输入特征,模型可能学会通过尺寸识别受检者而非测量头围。 -
预处理泄漏(工程性)。归一化统计量、去噪参数、掩码填充阈值若在整个训练集上先算再划分,验证集信息会渗入训练流程。正确做法是先在训练子集上拟合统计量,再应用到验证子集。
推荐的划分代码(受检者级分组):
import re
from pathlib import Path
import pandas as pd
from sklearn.model_selection import GroupShuffleSplit
def parse_subject_and_frame(stem: str) -> tuple[int, int]:
"""从 HC18 文件名 stem 解析受检者 ID 与帧序号。
规则(依据官方文件名说明):
- '388_HC' -> (388, 1) 单帧
- '010_HC' -> (10, 1) 多帧受检者的第 1 帧
- '010_2HC' -> (10, 2) 多帧受检者的第 2 帧
注意:'HC' 前缀可能带数字(如 '2HC'),必须用正则而非 split('_')。
"""
m = re.match(r'^(\d+)(?:_(\d+))?HC$', stem)
if not m:
raise ValueError(f'无法解析文件名: {stem}')
return int(m.group(1)), int(m.group(2)) if m.group(2) else 1
meta = pd.read_csv('training_set_pixel_size_and_HC.csv')
meta.columns = ['filename', 'pixel_size_mm', 'head_circumference_mm']
meta['stem'] = meta['filename'].str.replace('.png', '', regex=False)
meta[['subject_id', 'frame_idx']] = meta['stem'].apply(
lambda s: pd.Series(parse_subject_and_frame(s)))
# 受检者级分组划分:同一 subject_id 绝不跨侧
gss = GroupShuffleSplit(n_splits=1, test_size=0.15, random_state=42)
train_idx, val_idx = next(gss.split(meta, groups=meta['subject_id']))
train_df, val_df = meta.iloc[train_idx], meta.iloc[val_idx]
assert set(train_df['subject_id']).isdisjoint(set(val_df['subject_id'])), '存在受检者级泄漏'
print(f'训练 {len(train_df)} 张 / 验证 {len(val_df)} 张;'
f'受检者 {train_df.subject_id.nunique()} / {val_df.subject_id.nunique()}')
§5.4 交叉验证建议
对于只有 999 张图像的数据集,单次划分的方差不可忽略。建议使用受检者级分层分组 K 折:
| 方案 | 配置 | 适用场景 |
|---|---|---|
| GroupKFold | 5 折,groups=subject_id |
常规模型选择 |
| StratifiedGroupKFold | 5 折,按孕周分层 + 受检者分组 | 需要保证每折孕周分布平衡 |
| 多随机种子重复 | 3 个种子 × 5 折 | 报告置信区间,避免单种子侥幸 |
| 留一受检者(LOSO) | 806 折(不可行) | 不推荐:计算成本过高且方差不降反升 |
关键是分层维度选孕周而非头围数值。按头围连续值分层会在分箱边界引入人为不连续,而孕周是数据的自然分层变量。
§5.5 外部验证建议
HC18 是单中心、双设备数据集。任何声称达到临床可用精度的模型都应补齐以下外部验证:
| 验证方向 | 具体做法 | 预期风险 |
|---|---|---|
| 跨设备 | 在非 GE 设备(如 Philips、Samsung、Mindray)采集的图像上测试 | 斑点噪声纹理与增益曲线不同,Dice 可能下降 |
| 跨中心 | 在另一个国家或地区的产科队列上测试 | 胎儿体型分布与人群差异 |
| 跨人群 | 在不同种族与体型孕妇队列上测试 | 头围参考曲线的人群差异 |
| 非标准切面 | 在未经过标准切面筛选的自由采集帧上测试 | 最关键的失效场景:数据集全部是预筛标准切面 |
| 跨孕周 | 单独报告孕晚期性能 | 该亚群训练样本仅 141 张,已知退化 |
| 观察者间一致性对照 | 与多位技师的测量结果比对并报告一致性区间 | 单点真值掩盖了测量不确定性 |
已有研究报告了在自建队列上的外部测试(如孟加拉国某诊断中心采集的 400 张 18–38 周图像,1024 × 768 像素,0.06–0.30 mm),这类工作正是针对单中心局限的合理补足。
§6 AI 就绪指南
§6.0 云端快速启动
若使用 Colab 或 Kaggle 等云端环境,可直接拉取 Hugging Face 镜像省去解压与掩码转换步骤。
# 方式 A:官方原始包(推荐用于对标官方评测)
wget https://zenodo.org/record/1327317/files/training_set.zip
wget https://zenodo.org/record/1327317/files/training_set_pixel_size_and_HC.csv
unzip -q training_set.zip -d data/
# 方式 B:Hugging Face 镜像(已含实心掩码与解析好的 subject_id)
pip install datasets -q
python -c "
from datasets import load_dataset
ds = load_dataset('MedOtter/HC18')
print(ds)
"
环境依赖:
pip install torch torchvision opencv-python scikit-learn pandas numpy pillow scipy
§6.1 快速上手
以下代码假设的目录结构、data_root 拼接关系与最小可用子集说明如下。
# 预期目录结构(解压后):
# <data_root>/training_set/ 000_HC.png 000_HC_Annotation.png 001_HC.png ...
# <data_root>/test_set/ 001_HC.png 002_HC.png ... (无标注)
# <data_root>/training_set_pixel_size_and_HC.csv
# <data_root>/test_set_pixel_size.csv
#
# data_root 拼接关系:
# 图像路径 = f"{data_root}/training_set/{stem}.png"
# 标注路径 = f"{data_root}/training_set/{stem}_Annotation.png"
# 元数据 = f"{data_root}/training_set_pixel_size_and_HC.csv"
# 其中 stem = 文件名去掉 '.png',例如 '000_HC'
#
# 最小可用子集:仅需 training_set/ 下的 40 对图像即可跑通端到端流程;
# test_set/ 无标注,本地只能做推理与可视化,无法计算官方指标。
import re
from pathlib import Path
import cv2
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
class HC18Dataset(Dataset):
"""HC18 胎儿头部超声分割数据集。
关键处理:官方标注是 1 像素宽的椭圆环,必须先填充为实心区域,
否则分割模型会退化为细线检测。
"""
def __init__(self, data_root: str, split: str = 'train',
input_hw: tuple[int, int] = (256, 384), return_meta: bool = False):
assert split in ('train', 'test')
self.data_root = Path(data_root)
self.split = split
self.input_hw = input_hw
self.return_meta = return_meta
if split == 'train':
meta = pd.read_csv(self.data_root / 'training_set_pixel_size_and_HC.csv')
meta.columns = ['filename', 'pixel_size_mm', 'head_circumference_mm']
self.img_dir = self.data_root / 'training_set'
else:
meta = pd.read_csv(self.data_root / 'test_set_pixel_size.csv')
meta.columns = ['filename', 'pixel_size_mm']
self.img_dir = self.data_root / 'test_set'
self.meta = meta
self.stems = [Path(f).stem for f in meta['filename']]
def __len__(self) -> int:
return len(self.stems)
@staticmethod
def ring_to_solid(ring_mask: np.ndarray) -> np.ndarray:
"""把 1 像素椭圆环填充为实心区域。
做法:从图像左上角(必为背景)洪水填充,取反后与原环并集。
等价于 scipy.ndimage.binary_fill_holes。
"""
h, w = ring_mask.shape
flood = ring_mask.copy()
cv2.floodFill(flood, np.zeros((h + 2, w + 2), np.uint8), (0, 0), 255)
return cv2.bitwise_or(ring_mask, cv2.bitwise_not(flood))
def _load_mask(self, stem: str):
p = self.img_dir / f'{stem}_Annotation.png'
if not p.exists():
raise FileNotFoundError(f'缺失标注文件: {p}')
ring = cv2.imread(str(p), cv2.IMREAD_GRAYSCALE)
_, ring = cv2.threshold(ring, 127, 255, cv2.THRESH_BINARY)
solid = self.ring_to_solid(ring)
solid = cv2.resize(solid, (self.input_hw[1], self.input_hw[0]),
interpolation=cv2.INTER_NEAREST)
return (solid > 127).astype(np.float32)
def __getitem__(self, idx: int):
stem = self.stems[idx]
img = cv2.imread(str(self.img_dir / f'{stem}.png'), cv2.IMREAD_GRAYSCALE)
if img is None:
raise FileNotFoundError(f'缺失图像文件: {stem}.png')
img = cv2.resize(img, (self.input_hw[1], self.input_hw[0]),
interpolation=cv2.INTER_LINEAR).astype(np.float32) / 255.0
img_t = torch.from_numpy(img).unsqueeze(0) # [1, H, W]
if self.split == 'test':
return img_t if not self.return_meta else (img_t, float(self.meta.iloc[idx]['pixel_size_mm']))
mask_t = torch.from_numpy(self._load_mask(stem)).unsqueeze(0) # [1, H, W]
if not self.return_meta:
return img_t, mask_t
return img_t, mask_t, {
'stem': stem,
'pixel_size_mm': float(self.meta.iloc[idx]['pixel_size_mm']),
'head_circumference_mm': float(self.meta.iloc[idx]['head_circumference_mm']),
}
if __name__ == '__main__':
ds = HC18Dataset('data', split='train')
img, mask, meta = ds[0]
print(f'图像 {tuple(img.shape)} 掩码 {tuple(mask.shape)} 头围 {meta["head_circumference_mm"]} mm')
dl = DataLoader(ds, batch_size=8, shuffle=True, num_workers=2)
batch_img, batch_mask, _ = next(iter(dl))
print(f'批图像 {tuple(batch_img.shape)} 批掩码 {tuple(batch_mask.shape)}')
§6.2 数据获取
| 资源 | 地址 | 体积 | 获取方式 |
|---|---|---|---|
| Zenodo v2(推荐) | https://zenodo.org/record/1327317 | 176.8 MB(4 文件) | 直接下载,无需注册 |
| Zenodo v1 | https://doi.org/10.5281/zenodo.1322001 | 176.8 MB(4 文件) | 直接下载,无需注册 |
| 训练图像包 | training_set.zip |
132.9 MB | Zenodo 单文件下载 |
| 测试图像包 | test_set.zip |
43.5 MB | Zenodo 单文件下载 |
| 训练元数据 | training_set_pixel_size_and_HC.csv |
33.7 kB | Zenodo 单文件下载 |
| 测试元数据 | test_set_pixel_size.csv |
9.1 kB | Zenodo 单文件下载 |
| Hugging Face 镜像 | https://huggingface.co/datasets/MedOtter/HC18 | 179 MB | load_dataset('MedOtter/HC18') |
| 挑战赛与排行榜 | https://hc18.grand-challenge.org/ | — | 注册后提交评测 |
# 完整下载与校验(含 md5 核对)
mkdir -p hc18_raw && cd hc18_raw
BASE=https://zenodo.org/record/1327317/files
wget ${BASE}/training_set.zip ${BASE}/test_set.zip \
${BASE}/training_set_pixel_size_and_HC.csv ${BASE}/test_set_pixel_size.csv
# 校验(md5 取自 Zenodo v2 记录页)
md5sum -c <<'EOF'
00eb8198b9a505b2b3a6dfc740382497 training_set.zip
8402af5d137ef40a2888c1011ef3fe7e test_set.zip
c0761518fece2bd2d2ad4218f2cd9777 training_set_pixel_size_and_HC.csv
8476dc198cc6542f26c57e87faeee033 test_set_pixel_size.csv
EOF
unzip -q training_set.zip && unzip -q test_set.zip
# 最小校验:确认文件数量、尺寸与元数据一致性
from pathlib import Path
import cv2
import pandas as pd
root = Path('hc18_raw')
imgs = sorted(root.glob('training_set/*.png'))
anns = [p for p in imgs if p.stem.endswith('_Annotation')]
print(f'训练图像 {len(imgs) - len(anns)} 张 / 标注 {len(anns)} 个') # 期望 999 / 999
print('图像尺寸', cv2.imread(str(imgs[0]), cv2.IMREAD_GRAYSCALE).shape) # 期望 (540, 800)
meta = pd.read_csv(root / 'training_set_pixel_size_and_HC.csv')
print('元数据行数', len(meta)) # 期望 999
print(f'像素尺寸 {meta.iloc[:, 1].min():.3f} 至 {meta.iloc[:, 1].max():.3f} mm') # 期望 0.052 至 0.326
§6.3 预处理全流程
HC18 的预处理有四步是必做的,缺任一步都会导致结果无法解释。
步骤 1:椭圆环转实心掩码。 这是 HC18 区别于其他分割数据集的核心步骤,实现见 §6.1 的 ring_to_solid。
步骤 2:像素尺寸对齐(毫米换算表)。 逐图保存 pixel_size_mm,所有以毫米为单位的指标都必须用它换算。可用以下片段快速核对分布:像素尺寸跨度应为 0.052 至 0.326 mm;且 pixel_size_mm 与头围真值应显著负相关(胎儿越大则缩放越小、像素越小),这一相关性正是坑点 4 与坑点 12 的物理来源。
import pandas as pd
meta = pd.read_csv('hc18_raw/training_set_pixel_size_and_HC.csv')
meta.columns = ['filename', 'pixel_size_mm', 'head_circumference_mm']
print(meta['pixel_size_mm'].describe())
print('跨度比值:', meta['pixel_size_mm'].max() / meta['pixel_size_mm'].min())
print('相关系数:', meta['pixel_size_mm'].corr(meta['head_circumference_mm']).round(3))
步骤 3:灰度归一化与去噪。 超声图像对比度低、斑点噪声强。文献中常用的做法包括小波去噪、伽马校正、CLAHE。注意去噪参数必须在训练子集上确定,不可用全量数据调参。
import cv2
import numpy as np
def normalize_ultrasound(img: np.ndarray) -> np.ndarray:
"""超声图像标准化:CLAHE 增强对比度 + 归一化到 [0,1]。
HC18 图像已经是 8 位灰度,无需彩色转换。
"""
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8, 8))
return clahe.apply(img).astype(np.float32) / 255.0
def denoise_wavelet(img: np.ndarray, level: int = 2) -> np.ndarray:
"""小波软阈值去噪(文献中报告的常用预处理,需 pip install PyWavelets)。"""
import pywt
coeffs = pywt.wavedec2(img.astype(np.float32), 'db4', level=level)
sigma = np.median(np.abs(coeffs[-1][0])) / 0.6745
threshold = sigma * np.sqrt(2 * np.log(img.size))
coeffs_thresh = [coeffs[0]] + [
tuple(pywt.threshold(c, threshold, mode='soft') for c in detail)
for detail in coeffs[1:]
]
return np.clip(pywt.waverec2(coeffs_thresh, 'db4'), 0, 255).astype(np.uint8)
import cv2
def resize_keep_ratio(img: np.ndarray, target_hw=(256, 384)) -> np.ndarray:
"""等比缩放到目标高度,宽度按原比例计算后居中裁剪或填充。
HC18 原图 800x540(宽 x 高),比例 1.481;256x384 比例 1.5,接近但不相等。
若直接 resize 到 (384, 256),两方向缩放系数不同,椭圆会变形。
"""
h, w = img.shape[:2]
th, tw = target_hw
new_w = int(round(w * th / h))
resized = cv2.resize(img, (new_w, th), interpolation=cv2.INTER_LINEAR)
if new_w >= tw:
x0 = (new_w - tw) // 2
return resized[:, x0:x0 + tw]
left = (tw - new_w) // 2
return cv2.copyMakeBorder(resized, 0, 0, left, tw - new_w - left,
cv2.BORDER_CONSTANT, value=0)
img = cv2.imread('hc18_raw/training_set/000_HC.png', cv2.IMREAD_GRAYSCALE)
print(resize_keep_ratio(img, (256, 384)).shape) # (256, 384)
§6.4 PyTorch DataLoader 完整实现
<details>
<summary>展开带增强与分组划分的 DataLoader 实现(含训练循环骨架)</summary>
"""HC18 训练前向流程:受检者级分组划分 + 训练增强。
目录预期:data/training_set/*.png, data/training_set_pixel_size_and_HC.csv
"""
import re
from pathlib import Path
import cv2
import numpy as np
import pandas as pd
import torch
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader
from sklearn.model_selection import GroupShuffleSplit
def parse_subject_frame(stem: str) -> tuple[int, int]:
m = re.match(r'^(\d+)(?:_(\d+))?HC$', stem)
if not m:
raise ValueError(f'无法解析: {stem}')
return int(m.group(1)), int(m.group(2)) if m.group(2) else 1
class HC18SegDataset(Dataset):
def __init__(self, records: pd.DataFrame, img_dir: Path,
input_hw=(256, 384), augment: bool = False):
self.records = records.reset_index(drop=True)
self.img_dir = Path(img_dir)
self.input_hw = input_hw
self.augment = augment
def __len__(self):
return len(self.records)
@staticmethod
def ring_to_solid(mask: np.ndarray) -> np.ndarray:
flood = mask.copy()
h, w = mask.shape
cv2.floodFill(flood, np.zeros((h + 2, w + 2), np.uint8), (0, 0), 255)
return cv2.bitwise_or(mask, cv2.bitwise_not(flood))
def _resize(self, arr, is_mask: bool):
interp = cv2.INTER_NEAREST if is_mask else cv2.INTER_LINEAR
return cv2.resize(arr, (self.input_hw[1], self.input_hw[0]), interpolation=interp)
def __getitem__(self, idx):
stem = self.records.iloc[idx]['stem']
img = cv2.imread(str(self.img_dir / f'{stem}.png'), cv2.IMREAD_GRAYSCALE)
ann = cv2.imread(str(self.img_dir / f'{stem}_Annotation.png'), cv2.IMREAD_GRAYSCALE)
img = self._resize(img, False).astype(np.float32) / 255.0
_, ann = cv2.threshold(ann, 127, 255, cv2.THRESH_BINARY)
ann = self._resize(self.ring_to_solid(ann), True)
if self.augment:
# 头部朝向本身多变,翻转安全;但必须同步作用于图像与掩码
if np.random.rand() < 0.5:
img, ann = np.fliplr(img).copy(), np.fliplr(ann).copy()
if np.random.rand() < 0.5:
img, ann = np.flipud(img).copy(), np.flipud(ann).copy()
if np.random.rand() < 0.4: # 亮度对比度抖动:模拟不同设备与增益
img = np.clip(img * np.random.uniform(0.85, 1.15)
+ np.random.uniform(-0.08, 0.08), 0, 1)
return (torch.from_numpy(img).unsqueeze(0).float(),
torch.from_numpy((ann > 127).astype(np.float32)).unsqueeze(0))
def build_loaders(data_root='data', batch_size=8, input_hw=(256, 384), seed=42):
root = Path(data_root)
meta = pd.read_csv(root / 'training_set_pixel_size_and_HC.csv')
meta.columns = ['filename', 'pixel_size_mm', 'head_circumference_mm']
meta['stem'] = meta['filename'].str.replace('.png', '', regex=False)
meta[['subject_id', 'frame_idx']] = meta['stem'].apply(
lambda s: pd.Series(parse_subject_frame(s)))
gss = GroupShuffleSplit(n_splits=1, test_size=0.15, random_state=seed)
tr_idx, va_idx = next(gss.split(meta, groups=meta['subject_id']))
tr, va = meta.iloc[tr_idx], meta.iloc[va_idx]
tr_dl = DataLoader(HC18SegDataset(tr, root / 'training_set', input_hw, augment=True),
batch_size=batch_size, shuffle=True, num_workers=2,
pin_memory=True, drop_last=True)
va_dl = DataLoader(HC18SegDataset(va, root / 'training_set', input_hw, augment=False),
batch_size=batch_size, shuffle=False, num_workers=2,
pin_memory=True)
return tr_dl, va_dl
if __name__ == '__main__':
device = 'cuda' if torch.cuda.is_available() else 'cpu'
tr_dl, va_dl = build_loaders('data')
def dice_loss(pred_logits, target, eps=1e-6):
prob = torch.sigmoid(pred_logits)
num = 2 * (prob * target).sum(dim=(1, 2, 3)) + eps
den = prob.sum(dim=(1, 2, 3)) + target.sum(dim=(1, 2, 3)) + eps
return 1 - (num / den).mean()
# 以任意 U-Net 实现替换(此处仅示意接口):
# model = UNet(1, 1).to(device); opt = torch.optim.AdamW(model.parameters(), lr=1e-4)
# 每个 batch 执行 loss = dice_loss(logits, mask) + BCEWithLogits(logits, mask)
# 然后 opt.zero_grad(); loss.backward(); opt.step()
print('DataLoader 构建完成:', len(tr_dl), '训练批 /', len(va_dl), '验证批')
</details>
§6.5 坑点(8 个)
⚠️ 坑点 1:1 像素椭圆环直接当掩码用(分类:标签理解)
问题:HC18 训练集的标注是单像素宽的椭圆环(ring),不是实心区域。若直接把它当作分割目标,正样本只占图像的极少数像素(一条细线),模型会学成"细线检测器":预测出的细线在环上的 Dice 看起来不低,但一旦用于计算面积或拟合椭圆就会崩溃。
症状:训练损失下降但预测结果是一条几乎不可见的细环;用预测掩码算出的头围远小于真值(因为环上的像素周长被当成了区域周长);验证集 Dice 在 0.3 至 0.6 之间徘徊且难以提升。
解决:
- 简单方法:用 OpenCV 从图像左上角(必为背景)洪水填充后取反,再与原环并集;或
scipy.ndimage.binary_fill_holes(ring > 127)一行完成(注意先二值化,浮点输入行为不确定)。见 §6.1 的ring_to_solid。- 进阶方法:不填充,直接以轮廓作为弱监督信号训练(contour-aware loss、boundary loss),或在轮廓上采样点做椭圆参数回归。
- SOTA 方法:走"轮廓转椭圆拟合"路线而非"区域转掩码"路线,多篇论文正是如此。
参考:https://huggingface.co/datasets/MedOtter/HC18(Mask Format 一节)
⚠️ 坑点 2:测试集没有真值,本地指标全是自说自话(分类:评估误用)
问题:官方只发布训练集的 999 个标注与头围真值;测试集的 335 张图像既无掩码也无头围。很多论文在"测试集"上报告 Dice 与毫米误差,实际上是自行从训练集里再切了一份留出集并沿用了官方命名,导致数字无法与排行榜对比。
症状:论文声称"在 HC18 测试集上达到 Dice 98%"却查不到对应的排行榜记录;同一模型在不同论文中的"测试集"定义互相矛盾;复现时无法用官方数据得到相同数字。
解决:
- 简单方法:在方法学部分显式声明你用的是"训练集内的受检者级留出集",并给出划分种子与代码。
- 进阶方法:若要报告官方测试集指标,必须走 Grand Challenge 提交流程(注册、生成 336 行 CSV、提交、记录排行榜数值与提交日期)。
- SOTA 方法:双轨报告——内部留出集给出受检者级划分的置信区间,官方测试集给出可对标的单次数值,并明确标注基准不可直接比较的原因(提交时间不同、评测规则可能微调)。
参考:https://hc18.grand-challenge.org/(Challenge 与 Submit 说明)
⚠️ 坑点 3:999 张图像不等于 999 个受检者——文件名编号只到 805(分类:数据泄漏)
问题:官方明确说明训练集有 999 张图像,但文件名编号最大只到 805;同一次超声检查产生的多帧图像被赋予了
010_HC.png与010_2HC.png这类名字,外观高度相似。按文件随机划分训练、验证、测试会让近重复帧跨侧,指标虚高。症状:验证集 Dice 比测试集与官方排行榜高 2 至 5 个百分点;换随机种子后指标波动很大;模型在"新受检者"上表现明显差于验证曲线所暗示的水平。
解决:
- 简单方法:用正则
^(\d+)(?:_(\d+))?HC$解析受检者 ID,用GroupShuffleSplit(groups=subject_id)划分。- 进阶方法:用
StratifiedGroupKFold同时保证孕周分层与受检者分组;对多帧受检者做帧级聚合(取均值或取质量最好的一帧)而不是把每帧当独立样本。- SOTA 方法:在论文中把"受检者数与图像数"分开报告(训练集 999 张、约 806 个编号),并显式给出分组泄漏检查断言。
参考:https://hc18.grand-challenge.org/(原文:“There are 999 images in the training set, but the filenames only go to 805”)
⚠️ 坑点 4:像素尺寸跨 6 倍,用固定尺度换算毫米必然出错(分类:预处理陷阱)
问题:每张图像的像素物理尺寸在 0.052 至 0.326 mm 之间变化,原因是技师为适配不同胎儿体型调整了缩放与深度。若在预处理时统一 resize 到固定尺寸再用一个"平均像素尺寸"换算毫米,头围误差会大到失去临床意义。
症状:模型在训练集上掩码 Dice 很高,但换算出的头围与真值的毫米误差异常大(可达数十毫米);误差与胎儿大小系统性相关(孕晚期误差最大);在同一批数据上用不同
pixel_size_mm值计算会得到完全不同的结论。解决:
- 简单方法:每次都从 CSV 读该图的
pixel_size_mm,按"像素长度乘以 pixel_size_mm"换算,绝不使用全局常量。- 进阶方法:把 resize 的尺度变化纳入换算——若把 800 × 540 改为 384 × 256,两方向缩放系数不同,须分别记录
sx = 384/800、sy = 256/540,换算为mm_x = px_x * pixel_size_mm / sx、mm_y = px_y * pixel_size_mm / sy,椭圆半轴按方向分别换算。- SOTA 方法:在数据管道里把
pixel_size_mm作为一等元数据随样本传递(见 §6.1 的return_meta开关),并在损失函数中直接对毫米误差优化(可微分的椭圆拟合层),让模型显式感知物理尺度。
参考:https://hc18.grand-challenge.org/(像素尺寸范围与 CSV 说明)
⚠️ 坑点 5:把掩码直接提交给排行榜——官方要的是椭圆参数(分类:评估误用)
问题:HC18 的提交协议要求 6 列 336 行的 CSV,字段为
filename,center_x_mm,center_y_mm,semi_axes_a_mm,semi_axes_b_mm,angle_rad;五个几何量中前四个单位是毫米,角度单位是弧度。提交分割掩码不符合协议,会被评测系统直接拒绝。症状:上传后评测报格式错误;或行数写成 335(漏了表头);或角度用度(degree)而非弧度,导致椭圆方向彻底错误、误差异常巨大;或坐标用像素而非毫米,误差数量级错 10 倍。
解决:
- 简单方法:先写表头,再逐行追加,最后断言
len(rows) == 336且每行 6 个字段。- 进阶方法:用 OpenCV 的
cv2.fitEllipse从掩码轮廓拟合椭圆,它返回((cx, cy), (d1, d2), angle_deg);注意它给的是直径与度,需除以 2 并转为弧度,且其角度定义与 HC18 协议的角度语义需核对(半轴 a 与 b 的约定不同会改变角度解释)。- SOTA 方法:绕过掩码,直接回归椭圆参数(如 RDHCformer 类方法),或用可微椭圆拟合把"掩码到参数"这一步纳入端到端训练,消除两阶段误差累积。
参考:https://hc18.grand-challenge.org/(Submission instructions)
⚠️ 坑点 6:孕晚期表现崩塌,但报告的是总体平均(分类:偏倚陷阱)
问题:孕中期占训练集的 69.4%(693/999),孕晚期仅 141 张。多项研究报告模型在孕中期最好、孕晚期边界误差增大。若只报告总体平均指标,会掩盖最需要关注的亚群退化。
症状:论文只给一个总体 Dice 与总体毫米误差;复现时在孕晚期图像上误差是总体均值的数倍;临床试用时对足月胎儿的测量结果不稳定。
解决:
- 简单方法:按孕周(或按头围真值分箱)分组报告指标,至少给出三期各自的均值与标准差。
- 进阶方法:对孕晚期做重采样或加权损失(
WeightedRandomSampler让 141 张晚期图像被更频繁采样),或采用按头围尺度归一化的相对误差指标而非绝对毫米误差。- SOTA 方法:多尺度输入与尺度感知归一化——把每张图按
pixel_size_mm重采样到统一的毫米级物理分辨率,从根上消除"孕晚期头部大、像素小"的尺度混杂;或引入尺度条件分支让模型显式知道当前物理尺度。
参考:MDPI Diagnostics 2022 Table 1(孕周分层);IEEE CCECE 2026 论文(“All models performed best in the second trimester and faced increased boundary errors in the third trimester”)
⚠️ 坑点 7:把超声的声影与混响当成可去噪的普通噪声(分类:预处理陷阱)
问题:超声图像的干扰分两类:斑点噪声(speckle,统计性、可部分抑制)与声影及混响(shadowing、reverberation,结构性、是解剖信息的一部分)。对整幅图无差别地做强去噪或强 CLAHE,会把声影边缘抹平,甚至制造出根本不存在的"颅骨边界",反而让椭圆拟合跑偏。
症状:去噪后视觉上更"干净",但 Dice 反而下降;部分图像上模型把声影边界当作颅骨轮廓,椭圆拟合到一个明显错误的区域;不同去噪强度下指标非单调变化。
解决:
- 简单方法:把去噪作为超参数在受检者级验证集上搜索,而不是默认全开;对 CLAHE 的
clipLimit做小范围网格(如 1.0、2.0、3.0)。- 进阶方法:用小波软阈值去噪只抑制高频散斑成分而保留低频结构(见 §6.3 的
denoise_wavelet),并与不去噪基线做配对比较。- SOTA 方法:在训练时用强增强(高斯噪声、模糊、亮度对比度抖动)让模型对噪声鲁棒,而不是在推理前做不可逆的滤波;文献中也有明确报告"原始图像训练优于去噪图像训练"的结果(U-Net + ResNet101 在原始数据上 Dice 96.00%,而 EfficientNet-B4 在去噪数据上 Dice 95.78%)。
参考:IEEE CCECE 2026;https://github.com/dola578/Head-Circumference-Measurement-Using-a-U-Net-Architecture-with-ResNet101-Backbone
⚠️ 坑点 8:用 Dice 挑模型,挑出的模型测不准头围(分类:评估误用)
问题:Dice 衡量区域重叠,头围衡量周长(毫米)。一个把椭圆整体放大 2% 的预测,Dice 仍可超过 0.99,但头围会偏大 2%(以 90 mm 头围计约 1.8 mm,已接近临床关注量级)。反之,边界系统性外扩与内缩的模型可能 Dice 相近而毫米误差差异显著。只看 Dice 选模型会导致选出一个"重叠很好但测量不准"的模型。
症状:验证集 Dice 0.97 以上,但换算头围的平均绝对差达到 3 至 5 mm;不同模型 Dice 只差 0.3 个百分点,毫米误差却差一倍;排行榜上 Dice 相近的名次毫米指标差距明显。
解决:
- 简单方法:模型选择时以"头围平均绝对差(mm)"为主指标,Dice 作为辅助指标同时报告。
- 进阶方法:从预测掩码拟合椭圆后计算椭圆周长(Ramanujan 近似:
π[3(a+b) − √((3a+b)(a+3b))])并换算毫米,直接与真值比较;或按官方协议计算四项指标(绝对差、Dice、差值、Hausdorff)。- SOTA 方法:训练时就用可微分的周长或椭圆参数估计层作为损失(而非纯分割损失),让优化目标与评测目标一致;参考 DAG V-Net 一类同时报告 Dice 97.93%、Hausdorff 1.29 ± 0.79 mm、HC 绝对差 1.77 ± 1.69 mm 的做法,把"分割质量"与"测量质量"分开量化。
参考:https://hc18.grand-challenge.org/evaluation/challenge/leaderboard/(四项指标并列展示)
§6.6 数据增强
安全可用:水平翻转与垂直翻转(胎儿头部朝向本身多变,翻转后仍是合理的标准切面,须同步作用于掩码)、小角度旋转(±15° 至 ±45°,旋转后头部朝向变化仍在合理范围,大角度需谨慎)、亮度与对比度抖动(模拟不同设备与增益设置)、高斯噪声与高斯模糊(模拟斑点噪声与分辨率差异,有助于缓解坑点 7)。
有条件使用:随机缩放必须同步修正 pixel_size_mm,否则毫米换算失真;弹性形变(ElasticTransform)与网格畸变(GridDistortion)过度形变会破坏颅骨的近椭圆形态,导致椭圆拟合真值不再成立,文献中虽有使用但强度需谨慎。
禁止使用:非等比 resize(x 与 y 缩放不同)会压扁椭圆,头围换算全部失真;裁剪头部区域后丢弃原尺寸信息会丢失 pixel_size_mm 与像素坐标的对应关系;随机擦除大面积区域可能抹掉颅骨轮廓本身,监督信号消失;生成式合成图像混入训练会引入未必符合物理的颅骨几何,污染毫米级测量目标。
§6.7 模型推荐
U-Net(原始,约 31M 参数)是最常用的基线,稳定但需调参,通常配合 Dice 与 BCE 损失。追求精度时,U-Net + ResNet101 编码器(60M 以上参数)在原始图像上报告 Dice 96.00%、ADF 1.91 mm;EfficientNet-B4 + 分割头(约 19M)报告 Dice 95.78%、ADF 2.02 mm(去噪图像);SegFormer-B0(约 3.7M)报告 Dice 95.90%、ADF 2.15 mm(去噪图像)。V-Net(约 45M)是论文中报告的 HC18 常用基线之一;DAG V-Net 追求 SOTA 精度,报告 Dice 97.93%、Hausdorff 1.29 ± 0.79 mm、HC 绝对差 1.77 ± 1.69 mm;RDHCformer 走回归路线跳过掩码,报告 MAE 1.72、ME 0.04。此外文献还报告了由 8 个 EfficientNetB0 分割模型构成的集成方案,以投票或平均换取稳定性。
§6.8 硬件需求
| 配置 | 输入尺寸 | 批大小 | 显存估算 | 单轮耗时估算 | 适用场景 |
|---|---|---|---|---|---|
| 仅 CPU | 128 × 192 | 4 | — | 数十分钟 | 流程调试 |
| 单卡 8 GB | 256 × 384 | 8 | 约 4 至 6 GB | 数分钟 | 主流训练 |
| 单卡 16 GB | 256 × 384 | 16 | 约 8 至 12 GB | 数分钟 | 高吞吐训练 |
| 单卡 24 GB | 512 × 768 | 8 | 约 15 至 20 GB | 十余分钟 | 高分辨率分割 |
| 单卡 24 GB | 256 × 384 | 32 | 约 18 GB | 更快 | 大 batch 稳定训练 |
说明:数据集仅 999 张训练图像,瓶颈通常在数据加载(每张 PNG 需读取、缩放、洪水填充)而非显存。建议 num_workers 不小于 4,并预先把填充后的掩码缓存为 .npy。
§6.9 评估指标代码
"""HC18 官方四项指标的本地实现。
注意:本地只能对训练集内的留出集计算这些指标。官方测试集指标
必须通过 Grand Challenge 提交获得。
"""
import csv
import numpy as np
def ellipse_circumference_ramanujan(a_mm: float, b_mm: float) -> float:
"""Ramanujan 第二近似公式:由椭圆半轴计算周长(毫米)。
a_mm 与 b_mm 为半长轴与半短轴(毫米),须先用 pixel_size_mm 换算。
比 2*pi*sqrt((a^2+b^2)/2) 精度更高,在 b/a 接近 1 时误差可忽略。
"""
h = ((a_mm - b_mm) ** 2) / ((a_mm + b_mm) ** 2)
return np.pi * (a_mm + b_mm) * (1 + 3 * h / (10 + np.sqrt(4 - 3 * h)))
def mask_to_ellipse_params(mask: np.ndarray, pixel_size_mm: float):
"""把实心二值掩码转换为 HC18 提交格式的椭圆参数(毫米与弧度)。
返回 (center_x_mm, center_y_mm, semi_a_mm, semi_b_mm, angle_rad)
"""
import cv2
contours, _ = cv2.findContours(
(mask > 0).astype(np.uint8), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
if not contours:
raise ValueError('掩码中未找到轮廓')
(cx, cy), (d1, d2), angle_deg = cv2.fitEllipse(max(contours, key=cv2.contourArea))
# cv2.fitEllipse 返回直径与角度(度),须转半径与弧度
return (cx * pixel_size_mm, cy * pixel_size_mm,
(d1 / 2) * pixel_size_mm, (d2 / 2) * pixel_size_mm,
np.deg2rad(angle_deg))
def dice_coefficient(pred: np.ndarray, target: np.ndarray, eps: float = 1e-6) -> float:
pred, target = pred.astype(bool), target.astype(bool)
inter = np.logical_and(pred, target).sum()
return float((2 * inter + eps) / (pred.sum() + target.sum() + eps))
def mask_to_hc_mm(mask: np.ndarray, pixel_size_mm: float) -> float:
"""由实心掩码计算头围(毫米):先拟合椭圆再算周长。
直接对掩码轮廓做像素周长统计在高斯拉长时会高估,
官方协议基于椭圆,因此先拟合再算周长以对齐官方口径。
"""
_, _, a, b, _ = mask_to_ellipse_params(mask, pixel_size_mm)
return ellipse_circumference_ramanujan(a, b)
def evaluate_batch(pred_masks, true_masks, pixel_sizes_mm, true_hc_mm):
"""批量计算四项指标:平均绝对差、Dice、平均差、Hausdorff 距离。"""
from scipy.spatial.distance import directed_hausdorff
abs_diffs, signed_diffs, dices, hausdorffs = [], [], [], []
for pred, true, psz, hc_true in zip(pred_masks, true_masks, pixel_sizes_mm, true_hc_mm):
hc_pred = mask_to_hc_mm(pred, psz)
abs_diffs.append(abs(hc_pred - hc_true))
signed_diffs.append(hc_pred - hc_true)
dices.append(dice_coefficient(pred, true))
p_pts, t_pts = np.argwhere(pred > 0), np.argwhere(true > 0)
if len(p_pts) and len(t_pts): # Hausdorff 在像素空间算后换算为毫米
hd = max(directed_hausdorff(p_pts, t_pts)[0],
directed_hausdorff(t_pts, p_pts)[0])
hausdorffs.append(hd * psz)
return {
'mean_abs_difference_mm': float(np.mean(abs_diffs)),
'mean_abs_difference_std': float(np.std(abs_diffs)),
'mean_dice': float(np.mean(dices)),
'mean_difference_mm': float(np.mean(signed_diffs)),
'mean_difference_std': float(np.std(signed_diffs)),
'mean_hausdorff_mm': float(np.mean(hausdorffs)),
}
def build_submission_csv(rows, out_path='submission.csv'):
"""生成官方提交文件:6 列 336 行(1 表头 + 335 数据行)。"""
header = ['filename', 'center_x_mm', 'center_y_mm',
'semi_axes_a_mm', 'semi_axes_b_mm', 'angle_rad']
with open(out_path, 'w', newline='') as f:
w = csv.writer(f)
w.writerow(header)
for r in rows:
w.writerow([r['filename']] + [f'{v:.9f}' for v in r['params']])
with open(out_path) as f:
n = sum(1 for _ in f)
assert n == 336, f'提交文件行数 {n} 不等于 336'
return out_path
§6.10 MLOps 笔记
| 事项 | 建议做法 |
|---|---|
| 数据版本 | 固定引用 Zenodo DOI;把 md5 校验写入 CI,防止静默换包 |
| 划分固化 | 把 subject_id 与划分结果写入 manifest 文件并纳入版本控制,保证实验可复现 |
| 指标记录 | 每次实验同时记录 Dice、毫米绝对差、Hausdorff 与孕周分组指标,只记 Dice 会掩盖退化 |
| 阈值选择 | 二值化阈值须在验证集上确定并冻结,不同阈值下的毫米误差差异显著 |
| 缓存 | 洪水填充后的掩码缓存为 .npy,避免每个 epoch 重复计算 |
| 推理产物 | 保留原始预测掩码、拟合椭圆参数与像素尺寸三元组,便于事后追溯误差来源 |
| 提交管理 | 记录每次 Grand Challenge 提交的时间戳、排行榜数值与所用模型版本,避免把两次提交同一模型的数值当作独立证据 |
| 监控 | 上线后按孕周分桶监控毫米误差,孕晚期单独设阈值告警 |
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解方式 |
|---|---|---|---|
| 单中心偏倚 | 全部数据来自荷兰奈梅亨一家医院 | 高 | 跨中心外部验证;明确声明适用域 |
| 设备偏倚 | 仅 GE Voluson E8 与 Voluson 730,型号未逐图标注 | 中高 | 无法事后缓解;用跨设备测试评估影响幅度 |
| 孕周不均衡 | 孕中期占训练集 69.4%,孕晚期仅 14.1% | 高 | 亚组报告、重采样、尺度归一化 |
| 选择偏倚(标准切面筛选) | 1,334 张全部为人工确认的标准切面,排除非标准帧 | 高 | 在自由采集帧上做外部验证;不可声称能处理任意帧 |
| 人口学偏倚 | 年龄、性别、种族未发布,无法评估 | 中 | 无法缓解;声明适用域为荷兰单中心人群 |
| 测量偏倚(观察者内) | 未发布重复测量实验 | 中 | 报告预测值与真值的差分布而非仅均值 |
| 标注几何偏倚 | 标注是技师手工椭圆环,不是严格的解析椭圆 | 中 | 拟合椭圆时预期存在固有小残差;勿把残差当模型误差 |
| 像素尺度混杂 | 缩放随胎儿大小调整,与目标变量相关 | 中高 | 按 pixel_size_mm 重采样到统一物理分辨率 |
| 多帧近重复 | 同一受检者多帧高度相似 | 中 | 受检者级分组划分 |
§7.2 标注质量
| 维度 | 评估 |
|---|---|
| 标注者资质 | 训练集为受训超声技师;测试集参考标准由资深超声技师与医学研究者独立完成 |
| 标注形态 | 单像素椭圆环,闭合性整体良好,但存在少数不完整椭圆(文献提及) |
| 一致性证据 | 论文报告两位标注者相对参考孕龄的平均差:孕早 0.8 ± 2.6 与 1.6 ± 2.7 天,孕中 −0.0 ± 4.6 与 2.0 ± 4.8 天,孕晚 1.9 ± 11.0 与 3.9 ± 13.7 天 |
| 质量亮点 | 测试集采用双人独立标注,且给出分布而非单点,透明度高于多数同类数据集 |
| 质量局限 | 训练集为单人标注,未提供观察者内重复测量;孕晚期不确定性明显更高 |
| 对训练的含义 | 模型在孕晚期不可能稳定优于"人工参考本身的不确定性";亚毫米级误差声明在该亚群缺乏意义 |
§7.3 泛化性风险
| 场景 | 失效风险 | 证据 |
|---|---|---|
| 换用非 GE 超声设备 | 高 | 斑点纹理与增益曲线不同;数据集仅含两种 GE 机型 |
| 其他国家的产科人群 | 中高 | 单中心荷兰队列;胎儿体型分布与头围参考曲线存在人群差异 |
| 非标准切面与自由采集帧 | 最高 | 数据集全部为人工筛选的标准切面,模型未见过不合格帧 |
| 孕晚期(第三孕期) | 高 | 训练样本仅 141 张;多篇论文报告该期边界误差增大 |
| 孕早期小目标 | 中 | 165 张训练图像,头部在图中占比小 |
| 低质量与低端设备图像 | 中高 | 训练图像来自高端设备;低端设备分辨率与噪声特征不同 |
| 胎儿畸形(如严重脑积水) | 高 | 数据集为标准切面正常形态,未见畸形病例报道 |
| 多胎妊娠 | 高 | 未报告多胎数据;两胎头部可能同帧出现 |
| 换用不同图像分辨率 | 中 | 原图统一 800 × 540,实际设备输出尺寸各异 |
§7.4 伦理与合规
| 维度 | 内容 |
|---|---|
| 伦理批准 | CMO Arnhem-Nijmegen(荷兰地区伦理委员会),授权数据用于研究 |
| 采集合规 | 依照《赫尔辛基宣言》由具备资质的超声技师采集并匿名化 |
| 去标识化 | 图像与元数据中不含姓名、出生日期、病历号;仅保留由文件名派生的数字编号 |
| 许可 | CC-BY-4.0,允许商业与非商业再利用,须署名并标明修改 |
| 重识别风险 | 未见于文献报道;超声胎儿图像本身不含面部识别特征 |
| 使用限制 | 须保留署名;用于临床决策前必须完成独立的临床验证与监管审批 |
| 风险提示 | 胎儿超声属敏感医疗数据,二次分发与再训练时应遵守当地数据保护法规 |
§7.5 公平性
HC18 未发布受检者的人口学属性(年龄、种族、社会经济状况),因此无法在数据集内部做公平性分析——这本身就是一个重要局限。任何关于"该模型对不同人群公平"的声明都缺乏证据支撑。只能做如下间接分析:按孕周分组报告指标(已知孕晚期退化明显)、按头围真值分箱报告绝对与相对误差(未系统报告,绝对误差通常随头围增大)、按人工质量评分分组(无公开标签)、按设备分组(无型号标签,无法分组)、跨地域比较(需外部队列)。
结论:HC18 在"资源匮乏地区可用性"这一公平性目标上提供了动机论证与基准工具,但自身无法验证该目标是否达成。这是该数据集最需要被后续工作补足的方向。
§7.6 数据漂移
| 漂移类型 | 是否存在 | 说明 |
|---|---|---|
| 时间漂移 | 否(数据已冻结) | 数据停在 2014 至 2015 采集窗口,2018 年发布后未更新 |
| 设备漂移 | 潜在 | 若临床部署换用新设备,训练分布与推理分布不一致 |
| 采集协议漂移 | 潜在 | 标准切面的定义与操作细节随指南更新可能变化 |
| 人群漂移 | 潜在 | 孕妇年龄结构、体型分布随时间变化 |
| 上游模型漂移 | 是 | 若使用预训练编码器,其训练数据与目标域差异会传导 |
| 标注口径漂移 | 否 | 标注已固化,不会随时间改变 |
监控建议:在生产环境中持续记录输入图像的像素尺寸分布、图像灰度直方图与预测头围分布;若相对训练集发生显著偏移,应触发模型复评。
§7.7 DAIMS 24 项数据就绪度评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | 图像为 800 × 540 统一尺寸的 PNG;元数据为 CSV,每行一条记录,无嵌套结构 |
| 2 | 唯一标识 | ✅ | filename 全局唯一且可解析出 subject_id 与 frame_idx,可作为连接键与分组键 |
| 3 | 特殊字符 | ✅ | 文件名仅含数字、下划线、字母(NNN[_M]HC.png);CSV 表头含括号 pixel_size(mm),读取时建议重命名 |
| 4 | 重复行 | ⚠️ | 无字面重复行,但存在近重复内容:同一受检者的多帧图像外观高度相似,约 194 张属此列 |
| 5 | 缺失编码 | ✅ | 测试集缺失为"整列不存在"而非填充值,语义清晰无歧义 |
| 6 | 标签标识 | ✅ | 训练集以独立文件 *_Annotation.png 存标注,以 CSV 列存头围,标签来源明确 |
| 7 | 罕见类分组 | ⚠️ | 无类别标签,但孕晚期(141 张)与孕早期(165 张)相对孕中期(693 张)属小样本亚群 |
| 8 | 偏倚评估 | ⚠️ | 单中心、双设备、标准切面预筛、人口学信息缺失;数据集自身未提供偏倚文档 |
| 9 | 数据字典 | ⚠️ | 官方页面描述字段含义但不提供机器可读字典;社区镜像补足了解析规则 |
| 10 | 信息性缺失解释 | ✅ | 测试集真值缺失的原因(维持挑战赛公平性)被官方明确说明,属信息性缺失 |
| 11 | 设备记录 | ❌ | 官方仅说明使用 GE Voluson E8 与 730,未逐图记录设备型号与采集参数 |
| 12 | 共线性 | ⚠️ | pixel_size_mm 与胎儿大小、孕周强相关(负相关),存在混杂;用作特征时需警惕 |
| 13 | 编码映射 | ✅ | 无疾病或诊断编码需映射;本 Wiki 使用的 ICD-11 与 SNOMED CT 编码为临床语境标注,不属原始数据 |
| 14 | 时间戳处理 | ✅ | 数据不含逐样本时间戳;仅发布采集窗口(2014-05 至 2015-05),无脱敏时间轴问题 |
| 15 | 划分建议 | ✅ | 官方提供固定训练与测试划分,且孕周分布可比(分层抽样) |
| 16 | 泄漏讨论 | ⚠️ | 官方未讨论受检者级泄漏风险;社区实践普遍需自行分组,是本数据集最大的实操陷阱 |
| 17 | 标签分布 | ✅ | 训练集头围真值在 CSV 中完整给出,可直接统计分布;测试集真值保管 |
| 18 | 测量偏倚 | ⚠️ | 训练集单人标注,未发布观察者内重复测量;孕晚期参考标准本身不确定性更高 |
| 19 | 外部验证建议 | ❌ | 官方未提供外部验证集或多中心数据,需使用者自建 |
| 20 | 版本记录 | ⚠️ | Zenodo 有 v1 与 v2 两个版本且同日发布,内容一致;官方未给出变更日志说明差异 |
| 21 | 预处理脚本 | ❌ | 官方未提供任何预处理或基线训练代码;椭圆环填充与尺寸转换均需自行实现 |
| 22 | 合规要求 | ✅ | CC-BY-4.0 许可明确,允许再利用,仅需署名;伦理批准与匿名化流程有据可查 |
| 23 | 多模态对齐 | ❌ | 数据仅含单一模态(2D 超声),无配对的其他模态可对齐 |
| 24 | 去标识化 | ✅ | 依照《赫尔辛基宣言》由资质技师匿名化,仅保留数字编号,无直接标识信息 |
DAIMS 评分:17.5 / 24
评分解读:良好——数据本身的标识、许可、划分与去标识化四项基础工程达到顶级水平,标签形态虽特殊但定义清晰、文档透明。扣分几乎全部集中在"官方未提供的周边设施":没有预处理脚本、没有基线代码、没有外部验证集、没有逐图设备记录、没有受检者分组信息。这些缺口并非数据质量问题,而是发布者有意把工程实现留给使用者(数据集与挑战赛绑定的典型形态)。
对你意味着什么:HC18 可以直接下载使用,但你接手的是一个"半成品原料"而非"即食餐"——四件事必须自己做。第一,把 1 像素椭圆环填充为实心掩码,官方不提供,不做这一步训练必然失败(见坑点 1)。第二,从文件名正则解析出 subject_id 并做受检者级划分,官方不提供分组字段,不做这一步验证指标会虚高 2 至 5 个百分点(见坑点 3)。第三,用逐图 pixel_size_mm 做毫米换算,且 resize 的 x 与 y 缩放系数不同时必须分别处理,不做这一步头围误差可达数十毫米(见坑点 4)。第四,明确测试集无真值,本地任何"测试集指标"都必须声明为自定义留出集,官方指标只能通过 Grand Challenge 提交获得(见坑点 2)。把四件事做完,HC18 就是一份质量过硬、可直接对标国际排行榜的基准;跳过任何一件,得到的都是一个自洽但与世界脱节的私有实验。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| 自建队列(Aalok,400 张 2D 超声,18 至 38 周,1024 × 768,0.06 至 0.30 mm) | Aalok Diagnostic and Hospital(孟加拉国达卡) | 胎儿头部分割与头围测量 | 论文报告在自建数据上完成流程验证并配以 XAI 可视化 | 与 HC18 内部不可直接比较 | 数据集多样性与胎儿体位差异是明确缺口;单中心训练模型跨队列部署仍需重新标注 |
| 跨孕周分层(HC18 内部亚组) | Radboud UMC | 头部分割 | 孕中期最佳,孕晚期边界误差增大 | 孕晚期相对孕中期退化 | 亚群不均衡导致的系统性退化,非随机噪声 |
| 跨输入预处理(原始对去噪) | 多机构(IEEE CCECE 2026) | 头部分割 | U-Net+ResNet101 原始数据 Dice 96.00% 与 ADF 1.91 mm;EfficientNet-B4 去噪数据 Dice 95.78% 与 ADF 2.02 mm | 原始数据不劣于去噪数据 | 去噪并非默认更优,需在验证集上决策 |
| 集成模型与单模型对比 | 多机构(MDPI Diagnostics 2022) | 头部分割 + 孕龄与体重预测 | 8 个 EfficientNetB0 分割模型集成后进入测量与回归阶段 | 集成提升稳定性 | 流程从分割延伸到孕龄与估计胎儿体重,说明头围是可复用的中间表征 |
§8 基准性能与生态
§8.1 排行榜与代表性结果
HC18 官方排行榜报告四项指标:平均绝对差(mm)± 标准差、平均 Dice(%)± 标准差、平均差(mm)± 标准差、平均 Hausdorff 距离(mm)± 标准差。据华为云官方报道,其 EI 医疗影像团队曾以 1.89 mm 平均绝对误差位列第一。
| 排名/来源 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 排行榜第一(媒体报道) | 华为云 EI 医疗影像分割模型 | 平均绝对差 1.89 mm | 2020 前后 | 融合 GAN、多尺度孔洞卷积与自定义损失,针对小样本与低对比度优化 | 华为云官方新闻稿(2020 前后),https://intl.huaweicloud.com/zh-cn/news/_ei_.html | 未公开 |
| 方法与数据集原始工作 | 原始 CAD 系统 | Dice 97%、绝对差 2.8 mm、平均差 0.6 mm、Hausdorff 1.32 mm | 2018 | Haar-like 特征 + 随机森林定位颅骨;Hough 变换 + 动态规划 + 椭圆拟合 | van den Heuvel TLA, de Bruijn D, de Korte CL, van Ginneken B. PLoS ONE 13(8): e0200412 (2018). DOI: 10.1371/journal.pone.0200412 | https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0200412 |
| — | DAG V-Net | Dice 97.93%、Hausdorff 1.29 ± 0.79 mm、HC 差 0.09 ± 2.45 mm、HC 绝对差 1.77 ± 1.69 mm | 2020 前后 | 注意力机制 + 深监督融入 V-Net | Zeng et al.(转引自 IEEE Xplore 综述文献) | 未公开 |
| — | RDHCformer | MAE 1.72、ME 0.04 | 2020 前后 | Transformer 与 CNN 融合 | Yang et al.(转引自 IEEE Xplore 综述文献) | 未公开 |
| — | U-Net + ResNet101 / EfficientNet-B4 / SegFormer-B0 | Dice 96.00% 与 ADF 1.91 mm;Dice 95.78% 与 ADF 2.02 mm;Dice 95.90% 与 ADF 2.15 mm | 2026 | 原始图像与去噪输入对比 + BCE 与 Dice 组合损失 + 形态学后处理 | Nur M Dola S, Liu Q, et al. Deep Learning for Automatic Fetal Head Circumference Measurement: A Comparative Study. CCECE 2026, 346–353. DOI: 10.1109/CCECE68150.2026.11610460 | https://github.com/dola578/Head-Circumference-Measurement-Using-a-U-Net-Architecture-with-ResNet101-Backbone |
| — | 残差 U-Net + 图像处理 | Dice 97.99%、平均 Hausdorff 0.56 mm | 2023 报告 | 残差 U-Net + 预处理链 | 转引自 International Journal of Innovations in Science & Technology, July 2024, Vol 6, Issue 3, p.1072 | 未公开 |
为何这些数值不可直接比较:一,评测集不同——部分工作使用官方测试集并通过平台提交,部分使用训练集内的自定义留出集;二,指标定义口径不同——有的报告"平均差"、有的报告"平均绝对差"、有的只报告 Dice,符号意义完全不同;三,预处理不同——去噪与不去噪、归一化方式、输入分辨率都会显著影响结果;四,提交时间不同——排行榜历史值可能随评测规则微调;五,部分数值转引自综述文献而非原始论文,中间可能存在转录误差。因此本表仅用于呈现"该任务可达的性能区间",不可作为严格排序依据。
§8.2 SOTA 总结与选型建议
综合已公开结果,HC18 上的头围测量性能大致收敛在以下区间。
| 指标 | 典型可达区间 | 备注 |
|---|---|---|
| Dice | 95% 至 98% | 优秀模型普遍在 97% 附近 |
| 平均绝对差(mm) | 1.7 至 2.8 | 排行榜领先结果约 1.89 mm |
| 平均差(mm) | 接近 0 | 有符号,用于检测系统性偏大或偏小 |
| 平均 Hausdorff 距离(mm) | 0.5 至 2.0 | 对边界局部错误敏感 |
选型建议:一,追求复现与稳定,从 U-Net + ResNet101 编码器起步,损失用 Dice 与 BCE 组合并配合形态学后处理,这是文献报告充分、代码可得性最好的路线;二,追求轻量部署,选 SegFormer-B0 或 EfficientNet-B4 系列,参数少且在去噪输入上表现与重型模型接近;三,追求极致精度,选 DAG V-Net 类方法(注意力加深监督)或集成策略,这类方法通常依赖精细的后处理与椭圆拟合;四,跳过分割做纯回归,RDHCformer 类方法报告了 MAE 1.72 的回归结果,适合不需要掩码的场景,但失去可解释的中间产物、误差归因更难;五,不要只优化 Dice(见坑点 8),应以毫米绝对差为主指标选择模型。
§8.3 评测协议
| 项目 | 官方要求 |
|---|---|
| 提交格式 | CSV 文件,6 列 336 行(首行表头) |
| 表头 | filename,center_x_mm,center_y_mm,semi_axes_a_mm,semi_axes_b_mm,angle_rad |
| 文件名格式 | 含 .png,如 001_HC.png |
| 单位 | 中心坐标与两个半轴为毫米;角度为弧度 |
| 数据行数 | 335(对应测试集 335 张图像) |
| 评测方式 | 提交后即时评测,结果自动显示于排行榜 |
| 报告指标 | 平均绝对差(mm)± 标准差、平均 Dice(%)± 标准差、平均差(mm)± 标准差、平均 Hausdorff 距离(mm)± 标准差 |
| 提交入口 | https://hc18.grand-challenge.org/ 的 Submit 标签页 |
| 本地复现性 | 不可复现:测试集真值由组织方保管,本地无法计算官方指标 |
§8.4 相关数据集
| 数据集 | 关系 | 差异 |
|---|---|---|
| FETS | 图像来源与 HC18 同源,任务转向胎儿脑部多结构分割 | 从"轮廓"转向"内部结构" |
| FetReg | 同为产科影像,模态为胎儿镜视频 | 任务为胎盘血管分割,与头围无关 |
| ACDC | 同为医学图像分割基准 | 器官(心脏)与模态(MRI)均不同 |
| CAMUS | 同为超声分割基准 | 器官(心脏)不同,但可对照超声域内的泛化行为 |
| MIMIC-III | 同属公开医疗数据集生态 | 模态为结构化 EHR,可对比数据治理成熟度的不同范式 |
§8.5 关键论文
-
van den Heuvel TLA, de Bruijn D, de Korte CL, van Ginneken B. Automated measurement of fetal head circumference using 2D ultrasound images. PLOS ONE 13(8): e0200412 (2018). DOI: 10.1371/journal.pone.0200412 — 原始方法论文。提出两阶段 CAD 系统(Haar-like 特征加随机森林定位颅骨,Hough 变换、动态规划与椭圆拟合提取头围),报告 CAD 与参考孕龄的平均差为 0.6 ± 4.3、0.4 ± 4.7、2.5 ± 12.4 天(孕早、中、晚期),结论是与资深超声技师表现相当。这是首个在覆盖全部孕周的大规模测试集上评估的自动化 HC 测量系统。
-
van den Heuvel TLA, de Bruijn D, de Korte CL, van Ginneken B. [Data set]. Zenodo (2018). DOI: 10.5281/zenodo.1327317 — 数据集正式发布记录(v2),CC-BY-4.0 许可,含训练包 132.9 MB、测试包 43.5 MB 与两个元数据 CSV。
-
Nur M Dola S, Liu Q, et al. Deep Learning for Automatic Fetal Head Circumference Measurement: A Comparative Study. CCECE 2026, 346–353. DOI: 10.1109/CCECE68150.2026.11610460 — 对比 U-Net+ResNet101、EfficientNet-B4、ViT、Swin-UNet、SegFormer-B0 在原始与去噪两种输入下的表现,报告 U-Net+ResNet101 在原始数据上达 Dice 96.00%、ADF 1.91 mm,并指出所有模型在孕中期最佳、孕晚期边界误差增大。
-
(MDPI Diagnostics 2022)Ensemble Transfer Learning for Fetal Head Analysis. Diagnostics 12(9): 2229. — 以 8 个 EfficientNetB0 分割模型集成完成头部分割,再从掩码拟合椭圆提取测量值并预测孕龄与估计胎儿体重。该文提供 HC18 的孕周分层统计(训练 165/693/141,测试 55/233/47)、采集设备与伦理信息,是本 Wiki §2.4 与 §3.7 的主要事实来源。
-
(IEEE Xplore 综述,2026)Fetal Ultrasound Monitoring Using MedSegDiff-V2–DUCKNet Ensemble Segmentation and Explainable Head Circumference Estimation — 汇总 DAG V-Net(Dice 97.93%、Hausdorff 1.29 ± 0.79 mm、HC 绝对差 1.77 ± 1.69 mm)与 RDHCformer(MAE 1.72、ME 0.04)等结果,并自建孟加拉国队列(400 张,18 至 38 周)用于外部验证,同时引入 Grad-CAM++ 类可解释性工具。
-
(PLOS ONE 与 PMC 2022)Segmentation-Based vs. Regression-Based Biomarker Estimation: A Case Study of Fetus Head Circumference Assessment from Ultrasound Images — 对比"先分割再测量"与"直接回归"两条路线,以 HC18 为实验集,是理解两条技术路线取舍的核心参考。
-
(Physica Medica 2021)Automatic fetal biometry prediction using a novel deep convolutional network architecture — 梳理头围自动化测量的方法谱系,将两阶段 CAD 与多任务 LinkNet、全卷积网络等方法纳入统一比较框架,并指出多数研究集中于胎儿头部分割,原因正是 HC18 的可得性。
-
(华为云官方报道,2020 前后)华为云 EI 获国际医学超声图像分割比赛第一 — 报告以 1.89 mm 平均绝对误差在 HC18 排行榜取得第一,并披露所提方法融合 GAN、多尺度孔洞卷积与自定义损失以应对小样本、低对比度与胎头边缘模糊;同时提到该挑战赛吸引 100 余所大学与科研机构参与。
§8.6 社区活跃度
| 维度 | 现状 |
|---|---|
| 挑战赛平台 | Grand Challenge 持续在线,排行榜支持按历史日期回溯查看 |
| Zenodo v2 记录 | 累计浏览 10,207 次、下载 13,979 次;唯一浏览 8,829 次、唯一下载 3,816 次(快照) |
| Hugging Face 镜像 | MedOtter/HC18 月度下载 130 次,总文件大小 179 MB;另有社区镜像提供中文说明 |
| 学术使用 | 超声分割与胎儿生物测量论文的高频基准,2020 至 2026 年间持续产出对比研究 |
| 代码可得性 | 官方不提供代码;社区有若干复现仓库(如 U-Net+ResNet101 的完整流程) |
| 讨论渠道 | 无官方论坛;经验散见于论文的失败尝试记录与代码仓库说明文档 |
| 已知失败尝试记录 | 社区记录显示 Focal loss、Tversky loss、Adam 与 AdamW、Nested UNet(UNet++)、Attention U-Net、多输入方案在部分复现中效果不佳,而 SGD 配合多步学习率衰减与 BCE 加 Dice 损失表现更稳定 |
§8.7 生态快照
| 资源 | 类型 | 链接 | Star 或热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| HC18 官方挑战赛主页 | 官方主页 | https://hc18.grand-challenge.org/ | — | 唯一的官方任务说明、数据描述与提交入口 |
| HC18 官方排行榜 | 排行榜 | https://hc18.grand-challenge.org/evaluation/challenge/leaderboard/ | — | 四项指标的权威对标来源,支持历史快照 |
| Zenodo 数据集 v2 | 数据集 | https://zenodo.org/record/1327317 | 下载 13,979 次 | 官方原始包,含 md5 校验值 |
| Zenodo 数据集 v1 | 数据集 | https://doi.org/10.5281/zenodo.1322001 | — | 官方页面引用的 DOI,引用规范备选 |
Hugging Face MedOtter/HC18 |
数据镜像 | https://huggingface.co/datasets/MedOtter/HC18 | 月度下载 130 次 | 已预生成实心掩码并解析 subject_id,省去两步工程 |
Hugging Face Angelou0516/HC18 |
数据镜像 | https://hf-mirror.com/datasets/Angelou0516/HC18 | — | 附带中文说明与字段表,便于快速理解数据结构 |
| 原始论文全文 | 论文 | https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0200412 | — | 必引文献,含标注协议与 CAD 系统细节 |
| U-Net + ResNet101 复现仓库 | 代码 | https://github.com/dola578/Head-Circumference-Measurement-Using-a-U-Net-Architecture-with-ResNet101-Backbone | — | 完整的去噪、掩码填充、训练与形态学后处理流程,可作工程起点 |
§9 相关资源与引用
§9.1 官方资源
| 资源 | 链接 |
|---|---|
| 挑战赛主页与数据说明 | https://hc18.grand-challenge.org/ |
| 排行榜 | https://hc18.grand-challenge.org/evaluation/challenge/leaderboard/ |
| Zenodo 数据集(v2) | https://zenodo.org/record/1327317 |
| Zenodo 数据集(v1) | https://doi.org/10.5281/zenodo.1322001 |
| 原始论文(PLOS ONE) | https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0200412 |
| Hugging Face 镜像 | https://huggingface.co/datasets/MedOtter/HC18 |
§9.2 教程与实践资源
| 资源 | 说明 |
|---|---|
| 官方数据描述页 | 字段含义、文件名规则、像素尺寸与提交格式的权威说明 |
| 社区复现仓库 | 提供从去噪到椭圆拟合的完整流水线,可作工程起点 |
| Hugging Face 数据集卡 | 给出训练与测试的字段表、掩码生成方式与解析规则 |
| 挑战赛排行榜历史 | 可按日期查看历史快照,用于对齐旧论文数值 |
§9.3 BibTeX 引用
@article{van_den_Heuvel_2018,
title = {Automated measurement of fetal head circumference using 2D ultrasound images},
volume = {13},
ISSN = {1932-6203},
url = {http://dx.doi.org/10.1371/journal.pone.0200412},
DOI = {10.1371/journal.pone.0200412},
number = {8},
journal = {PLOS ONE},
publisher = {Public Library of Science (PLoS)},
author = {van den Heuvel, Thomas L. A. and de Bruijn, Dagmar and de Korte, Chris L. and van Ginneken, Bram},
editor = {Reyes-Aldasoro, Constantino Carlos},
year = {2018},
month = aug,
pages = {e0200412}
}
@dataset{van_den_Heuvel_2018_dataset,
title = {Automated measurement of fetal head circumference using 2D ultrasound images},
DOI = {10.5281/zenodo.1327317},
url = {https://zenodo.org/record/1327317},
publisher = {Zenodo},
author = {van den Heuvel, Thomas L. A. and de Bruijn, Dagmar and de Korte, Chris L. and van Ginneken, Bram},
year = {2018},
month = jul,
note = {Version v2, licensed under CC-BY-4.0}
}
§9.4 引用指南
- 同时引用论文与数据集。官方要求引用方法论文(DOI 10.1371/journal.pone.0200412)与数据集记录(Zenodo DOI)。挑战赛语境建议使用官方页面引用的 v1 DOI(10.5281/zenodo.1322001);引用 Hugging Face 镜像时其数据集卡使用 v2 DOI(10.5281/zenodo.1327317)。
- 标明许可以与修改。CC-BY-4.0 要求署名并标明是否作出修改。若对图像做了去噪、重采样或裁剪,应在论文中说明。
- 报告指标时声明评测集。必须明确区分"官方测试集(通过 Grand Challenge 提交)“与"训练集内的自定义留出集”。
- 报告划分细节。若使用自定义划分,须给出随机种子、划分比例与分组键(是否为
subject_id)。 - 避免转引。本 Wiki 中标注为"转引"的性能数值(如 DAG V-Net、RDHCformer)来自综述文献,正式引用时应回溯原始论文。
§10 AI 使用声明卡
§10.1 AI 模型列表
| AI 模型 | 版本 | 参与日期 | 参与范围 |
|---|---|---|---|
| deep-model(WorkBuddy) | 2026-09 | 初稿生成:INFOBOX 数据汇编、§1 至 §9 结构化写作、§6 代码示例生成、§C JSON-LD 构建 | |
| WebSearch(多源检索) | 2026-09-18 | 6 组检索:官方挑战赛页面、Zenodo 记录与许可、原始论文、排行榜与 SOTA、社区坑点与复现记录、孕周分层与设备信息 |
§10.2 AI 参与范围
AI 参与范围:初稿生成 + 资料整理 + 代码生成 + 格式化排版。
AI 在本页面的工作中负责:(1) 从 HC18 Grand Challenge 官方页面、van den Heuvel 2018 原始论文、Zenodo 数据记录与社区镜像中整理结构化信息;(2) 生成 §6 的图像处理与 PyTorch 代码示例;(3) 系统化组织 §6.5 的 8 个坑点与 §7.1 偏倚表;(4) 执行 G1、G2、G3 排版规范检查与中英文格式标准化;(5) 构建 §C 统一 JSON-LD @graph。
AI 未参与的工作:数据采集、图像标注、任何模型训练或性能实测。本页面所有性能数字均来自公开文献或官方排行榜的转述,未由本页面作者独立复现。
§10.3 输入来源列表
- HC18 Grand Challenge 官方主页与排行榜。https://hc18.grand-challenge.org/ ; https://hc18.grand-challenge.org/evaluation/challenge/leaderboard/
- van den Heuvel TLA, de Bruijn D, de Korte CL, van Ginneken B. Automated measurement of fetal head circumference using 2D ultrasound images. PLOS ONE 13(8): e0200412 (2018). https://journals.plos.org/plosone/article?id=10.1371/journal.pone.0200412
- Zenodo 数据集记录 v2(含文件体积与 md5)及其 DataCite XML 导出(含许可与访问统计)。https://zenodo.org/record/1327317 ; https://zenodo.org/record/1327317/export/dcite4
- Zenodo 数据集记录 v1(CC-BY-4.0 许可确认与文件清单)。https://zenodo.org/record/1322001/export/xm
- Hugging Face 数据集卡
MedOtter/HC18(字段表、掩码格式、受检者与采集时间)与Angelou0516/HC18(许可与任务类别)。https://huggingface.co/datasets/MedOtter/HC18 ; https://huggingface.co/datasets/Angelou0516/HC18 - MDPI Diagnostics 2022 论文(孕周分层、设备型号、伦理批准、采集流程)。https://www.mdpi.com/2075-4418/12/9/2229
- IEEE CCECE 2026 论文(五种架构的 Dice 与 ADF 对比、孕周性能差异)。DOI: 10.1109/CCECE68150.2026.11610460
- IEEE Xplore 综述论文(DAG V-Net 与 RDHCformer 的 HC18 结果、外部验证队列)。https://xplorestaging.ieee.org/document/11606371
- Physica Medica 2021 论文(头围自动化测量的方法谱系)。https://www.physicamedica.com/article/S1120-1797(21)00243-X/fulltext
- GitHub 复现仓库(去噪、掩码填充、预处理与训练流程)。https://github.com/dola578/Head-Circumference-Measurement-Using-a-U-Net-Architecture-with-ResNet101-Backbone
- Hugging Face Space 数据集实现代码(椭圆环转实心掩码的标准实现与静态划分惯例)。https://huggingface.co/spaces/TarunSadarla2606/fetal-head-clinical-ai-api/blob/main/src/data/dataset.py
- 华为云官方报道(排行榜第一的 1.89 mm 平均绝对误差与参与机构规模)。https://intl.huaweicloud.com/zh-cn/news/_ei_.html
§10.4 人工校验表
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| §1 概览与 30 秒速览 | 千方病案医学编辑部 | 与官方页面及原始论文逐项比对 | ✅ 已通过 |
| §2 医学背景与编码映射 | 千方病案医学编辑部 | 临床语境交叉审核 | ✅ 已通过 |
| §3 数据集规格与版本矩阵 | 千方病案医学编辑部 | 与 Zenodo 记录文件清单及体积核对 | ✅ 已通过 |
| §4 数据结构与 DAIMS 字典 | 千方病案医学编辑部 | 数据工程交叉审核 | ✅ 已验证 |
| §5 划分策略与泄漏分析 | 千方病案医学编辑部 | 交叉审核并复核文件名解析规则 | ✅ 已通过 |
| §6 预处理 Pipeline 与代码 | 千方病案医学编辑部 | 代码逻辑审查与官方提交协议比对 | ✅ 已验证 |
| §6.5 八个坑点 | 千方病案医学编辑部 | 与官方说明、社区记录及论文 limitation 交叉核对 | ✅ 已通过 |
| §7 质量评估与 DAIMS 评分 | 千方病案医学编辑部 | 交叉审核 | ✅ 已通过 |
| §8 排行榜与引用数表述 | 千方病案医学编辑部 | 与原文及排行榜页面交叉比对 | ✅ 已验证 |
| §9 BibTeX 与引用指南 | 千方病案医学编辑部 | 与 DOI 元数据核对 | ✅ 已通过 |
| §C JSON-LD @graph | 千方病案医学编辑部 | Schema v3.9 字段逐项校验 | ✅ 已通过 |
§10.5 AI 生成章节标注
以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.1 至 §6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.5 公平性评估、§7.7 DAIMS 评估表与评分、§8.7 生态快照、§C JSON-LD。
以下章节以公开文献为唯一事实来源,不含 AI 推断:§2 医学背景、§3.6 标注者资质与一致性、§8.1 排行榜与代表性结果、§8.5 关键论文。
§10.6 最后人工审核日期
最后人工审核日期:2026-09-05
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- lisa2025 — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集 / 儿科
- bonbid-hie — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集 / 儿科
- brats-pediatric — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集 / 儿科
- us-nerve-seg — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
- echonet-pediatric — 共享标签:医学影像 / 医学图像分割 / 儿科
- segthor — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
- camus — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
- topaneu2026 — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
- cosas — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
- hbn-eeg — 共享标签:医学影像 / 儿科
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

