US Nerve Segmentation — 颈部超声臂丛神经分割 AI-Ready Wikipedia

Kaggle 2016 超声分割竞赛 · 5,635 张标注图 · Dice 基准 0.73226

来源 Kaggle(Ultrasound Nerve Segmentation 竞赛) url: https://www.kaggle.com/c/ultrasound-nerve-segmentation发布时间: 2026-09-18最后更新: 2026-09-25 阅读 23
US Nerve Segmentation — 颈部超声臂丛神经分割 AI-Ready Wikipedia

信息速览

数据集名称US Nerve Segmentation — 颈部超声臂丛神经分割 AI-Ready Wikipedia
数据类型5,635 张标注图,11,143 张超声图,2.3 GB TIFF,竞赛专用获取,Dice 0.73226
规模47 名受试者
接入方式Kaggle(Ultrasound Nerve Segmentation 竞赛) url: https://www.kaggle.com/c/ultrasound-nerve-segmentation
AI 就绪度

US Nerve Segmentation — 颈部超声臂丛神经分割 AI-Ready Wikipedia

INFOBOX

数据集名称 Ultrasound Nerve Segmentation(US Nerve Segmentation)
英文全称 Ultrasound Nerve Segmentation Challenge Dataset
别名/简称 US Nerve Segmentation、UNS、Kaggle Nerve Segmentation、神经超声分割
疾病分类 区域麻醉与疼痛介入相关解剖结构(ICD-11:8B93 周围神经损伤相关操作 / 8E43 神经阻滞操作等,详见 §2.1)
SNOMED CT 49649004 Brachial plexus structure / 35772009 Brachial plexus block / 413845009 Ultrasonography of neck(详见 §2.2)
数据模态 二维灰阶超声(B 模式)颈部横断帧序列 + 像素级二值分割掩码
AI 任务类型 语义分割(二值)、空掩码判别、类别不平衡学习、含噪标签鲁棒学习、实时轻量分割、辅助解剖定位
样本总数 11,143 张(训练 5,635 张带标注 / 测试 5,508 张无标注),来自 47 名受试者
数据大小 2.3 GB(16,780 个文件,官方数据页统计)
数据格式 TIFF(LZW 压缩,8 bit/pixel,580×420)+ CSV(像素级 RLE 掩码)
许可证 Subject to Competition Rules(竞赛规则约束);第三方汇总记为 Non-commercial, No Redistribution
访问级别 竞赛专用(需登录 Kaggle 并接受竞赛规则)
DUO 标签 NPUNCU, NCU
语言 英文(文件名与字段为英文,图像内容无文字)
首发日期 / 最后更新 2016-05-19(竞赛开赛并开放数据下载)/ 2016-08-19(竞赛结束,数据快照冻结)
发布机构 Kaggle(竞赛主办;赞助方为疼痛管理导管相关临床机构)
官方主页 / 下载地址 https://www.kaggle.com/c/ultrasound-nerve-segmentation (数据页:…/data)
DOI 无(第三方评测站明确标注无关联 DOI)
引用次数 无正式论文可计入被引(无 DOI、无数据论文;以 Kaggle 竞赛页面为唯一官方出处)
AI 就绪度评分 ⭐⭐(2/5)— 图像即取即用、社区复现极多;扣分项:无官方划分、约 40% 近重复帧标签冲突、测试集无标签、无 DOI 与无维护仓库
页面状态 published

§0 E-E-A-T 信任声明与免责声明

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(臂丛神经解剖锚定、ICD-11 与 SNOMED CT 映射、区域麻醉临床任务定义、金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(RLE 编码规范、受试者编号继承关系)、§5 数据划分策略(按受试者划分的必要性)、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

审核方式:交叉审核

利益冲突声明:千方病案医数集与 Kaggle、竞赛赞助方及任何参赛团队均无商业利益关联。本页面不销售 US Nerve Segmentation 数据集本身,仅提供 AI 就绪指南与学术信息服务。编辑者未接受 Kaggle 或竞赛赞助方的任何形式资助。

医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。

技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。US Nerve Segmentation 受 Kaggle 竞赛规则约束,下载前需登录 Kaggle 账号并接受竞赛规则;竞赛规则中关于非商业使用与禁止再分发的条款应以官方页面为准。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

§1.0 30 秒速览

这是什么? 这是一批颈部超声图像,每张图像上都标出了一小块形状不规则的区域——臂丛神经(Brachial Plexus)。超声图像本身是灰阶的、布满斑点噪声的,神经在其中的灰度与周围筋膜、肌肉差别很小,肉眼需要相当经验才能辨认。数据集共 11,143 张图像,其中 5,635 张有标注、5,508 张没有标注;标注不是画框,而是精确到像素的二值掩码,用游程编码(RLE)写在 CSV 里。

为什么重要? 它把「分割」这件看似技术化的事情逼到了两个极端。第一是极端不平衡:整张图里真正属于神经的像素只有约 1%,绝大多数像素是背景,模型只要全输出 0 就能拿到约 0.6 的 Dice 分数,比老老实实训练的标准 U-Net(常在 0.35-0.45)还高。第二是标签本身不可靠:官方承认采集机可能产生完全相同或高度相似的帧,社区量化出近重复帧中约 40% 存在标签冲突——同一张图,一次标有神经、一次标没有。因此它成了研究「怎么不被指标骗」和「怎么在有噪声标签下学习」的标准靶场。

我能用它做什么? 最典型的用法是练习语义分割的完整工程链路:解析 RLE、构建 Dataset、处理空掩码、设计能同时预测「有没有神经」和「在哪里」的双头损失、做后处理删小连通域。数据量小(2.3 GB)、图像小(580×420)、单卡即可训练,非常适合教学与消融实验。但请不要把它当作临床神经阻滞导航的验证集,它的标签噪声与受试者规模都不支持任何临床结论。

§1.1 摘要

US Nerve Segmentation 是 Kaggle 平台于 2016-05-19 至 2016-08-19 举办的同名竞赛所发布的数据集,任务是在颈部超声图像中对臂丛神经做像素级二值分割。竞赛目标是辅助疼痛管理中的区域麻醉导管置入:医师需要把导管送到神经附近,超声能实时看到解剖,但神经边界在灰阶图中并不清晰,若能自动高亮神经区域,就能降低操作对经验的依赖。

数据由竞赛赞助方回顾性导出 B 模式颈部超声帧,统一为 580×420 像素、8 bit/pixel、LZW 压缩 TIFF,命名遵循 subject_imageNum.tif,训练集受试者编号范围 1-47,每名约 120 帧。标注由受训标注员完成且仅在「确信存在臂丛标志」时标注,因此训练集出现大量空掩码——5,635 张中 3,312 张完全无前景。含神经帧约 2,323 张(检出率约 41%),前景像素占全集约 0.949%、占正样本内部约 2.3%。

评测采用逐图像 Dice 系数的平均值,并规定预测与真值同时为空时 Dice 记为 1——这一条定义是整场比赛的核心机制。它使「全预测空」成为强基线:全零提交即可得到约 0.6。官方私有榜按约 80% 测试数据计算,冠军 AbdulWahab 为 0.73226,第 10 名降至 0.71625——榜首到第 10 名仅差 0.016,说明在含噪标签与指标定义下尾部空间被极度压缩。

§1.2 战略价值分析

维度一:它是「指标定义决定研究结论」的教科书案例。 在绝大多数分割数据集上,Dice 从 0.35 提升到 0.73 意味着模型从几乎不可用变成接近可用;但在本数据集上,全零模型就有约 0.6,而精心训练的 U-Net 反而只有 0.35-0.45。原因有二:空-空 Dice 定义为 1,让 41% 的正样本率不再构成惩罚;约 40% 的近重复帧标签互相矛盾,模型对其中一半必须犯错。任何在本数据集上报告 Dice 的研究,若不说明是否存在性辅助头、如何处理空帧、如何清洗近重复样本,数字都不可比。

维度二:它提供了研究含噪标签与近重复样本的真实数据。 一般数据集只报告标注质量高,本数据集反过来——官方在数据页直接承认存在噪声、伪影与潜在标注错误且不修正,并承认采集机可能生成完全相同或高度相似的帧。社区随后给出可复现量化:以像素差 < 100 判定得到 63 组重复对,其中 52 组掩码不一致;放宽到 < 1000 得到 131 组,其中 107 组不一致。这为标签清洗、去重、标签平滑、协同教学(co-teaching)等方法提供了带真实冲突的二值分割数据。

维度三:小样本 + 小图像 = 极低的教学与实验成本。 2.3 GB、580×420 灰度、11,143 张,单张主流显卡即可完成完整训练与消融;社区实现覆盖 Keras、PyTorch、fastai 等多条技术栈,并公开了私有榜名次(如 VGG-16 系 UNet 私榜 0.70115,rank 38/973)。学生能在数小时内跑通「RLE 解析 → 训练 → 提交 → 看榜」的完整闭环。

§1.3 同类数据集横向对比

数据集 规模 模态 标注类型 与本数据集的差异化
US Nerve Segmentation 11,143 张(5,635 带标注) 颈部 B 模式超声 像素级二值掩码(RLE) 唯一以「极小前景 + 约 40% 近重复标签冲突 + 空-空 Dice=1」三重机制著称的分割基准;仅 47 名受试者,无元数据
BUSI(乳腺超声图像) 780 张 乳腺 B 模式超声 像素级掩码 + 良恶性分类 规模更小但带病理标签,可用于分割-分类多任务;类别分布与颈部解剖完全不同
CAMUS(心脏超声) 500 例 / 约 2,000 帧 心尖四腔心 B 模式 二值掩码(左室/左房/心肌) 结构边界清晰、前景占比高,不存在本数据集「全零即高分」的度量陷阱
MSD Task 09(脾脏 CT) 41 例 腹部 CT 体素级掩码 三维体数据、器官体积大,用于对比「前景占比」对 Dice 行为的影响
ISIC 2018(皮肤病变)/ BraTS(脑肿瘤 MRI) 10,015 张 / 约 1,251 例 皮肤镜彩色图像 / 多模态 MRI 像素级掩码 + 疾病分类 / 多区域掩码 前者彩色、前景显著、标签质量高,构成「标签干净 vs 标签含噪」的对照;后者多模态融合、前景占比中等,本数据集则逼近「单模态 + 极稀前景」的极端

横向要点:本数据集在同量级公开超声分割数据里,是**唯一一个「标签质量官方承认有问题、并且该问题可直接量化」**的条目。多数同类数据集的挑战在于获取门槛或标注成本,而 US Nerve Segmentation 的挑战在于「如何不被度量与噪声欺骗」。

§1.4 版本演进时间轴

时间 事件 说明
2016-05-19 竞赛开赛 Kaggle 开放「Ultrasound Nerve Segmentation」数据集下载与提交入口,奖池 100,000 美元(1st 50,000 / 2nd 30,000 / 3rd 20,000)
2016-08-11 首次提交与团队合并截止 后续新加入者不再计入排行榜排名
2016-08-18 最终提交截止 私有榜成绩以此前所选定的提交为准
2016-08-19 竞赛结束(数据冻结) 竞赛页面转为历史存档,官方此后未发布任何修订版本,当前仅存在 1.0 快照
2016-12-26 社区复盘博客发布 Raghakot 发布对全零基线约 0.6、UNet 0.35-0.45 的量化分析,成为后续引用最广的解读
2017 起 社区复现与镜像扩散 GitHub 出现大量 Keras/PyTorch 复现;Google Drive 镜像被用于规避 Kaggle 注册门槛
2020 前后 进入综述与基准引用高峰 综述给出多组 IoU 引用值(如 64.9%、72.0%、73.3%),被用于超声分割方法学对比
2025 数据集进入衍生汇总 被大型医学 AI 数据集合集收录,并出现 HuggingFace 镜像(gymprathap/Nerve-Ultrasound-Image-Segmentation,16,778 行 / 2.26 GB,许可为镜像自设)

时间轴要点:本数据集不存在多版本演进,只有 2016 年的单一快照;所有后续变化均来自社区(复现、镜像、引用),而非官方维护。这一点直接决定了 §3.0 的版本抉择结论。

§1.5 典型 AI 应用场景

  1. 二值语义分割入门与教学:数据集小、图像小、标注直接,适合作为 U-Net 系架构教学的第一个真实医学任务,重点在于让学生亲眼看到「Dice 高 ≠ 分割好」。
  2. 类别不平衡与空掩码处理研究:前景像素占比约 0.949%(全集)/ 约 2.3%(正样本内),空掩码占 3,312/5,635。可直接用于对比 Dice loss、Tversky loss、Focal loss、以及「存在性分类头 + 分割头」双头结构的效果差异。
  3. 含噪标签与近重复样本清洗:约 40% 近重复帧标签冲突,是检验 SSIM/像素差去重、标签平滑、样本重加权、协同教学等方法的真实场景。
  4. 实时/轻量超声分割:任务对延迟敏感(有研究以 15 帧/秒 vs 142 帧/秒对比 U-Net 与 LinkNet),数据集维度小,适合做移动端与嵌入式推理的精度-速度权衡实验。
  5. 度量方法学研究:以本数据集为反例,研究 Dice、IoU、边界距离指标在「空掩码 + 极端不平衡」条件下的行为差异与失衡量化。
  6. 迁移学习与预训练策略对比:ResNet10/18/34/50 编码器在本数据集上的公开对比(ResNet34 最优)可作为编码器深度与预训练来源是否匹配目标任务的教学素材。

§2 医学背景

§2.1 ICD-11 疾病分类锚定

本数据集的对象不是「疾病」,而是区域麻醉与疼痛介入治疗中的目标解剖结构——臂丛神经。因此 ICD-11 锚定落在「操作/干预」与「神经系统」两个分支上,而非某个诊断条目。

ICD-11 编码 中文名 英文名 与本数据集的关系
8B93 周围神经损伤(含医源性损伤) Injury of peripheral nerve 神经阻滞操作的潜在并发症;分割辅助定位的目标是把穿刺风险降到最低
8E43.0 神经阻滞(含区域麻醉) Nerve block 臂丛神经阻滞是数据集宣称的核心临床场景;神经可视化直接支撑该操作
8E43.Y 其他特指的神经阻滞 Other specified nerve block 肌间沟、锁骨上、腋路等不同入路的统称
MG30.6 慢性术后或创伤后疼痛 Chronic postsurgical or posttraumatic pain 留置式疼痛管理导管的主要适应症,也是赞助方的业务方向
XA1BL6 臂丛结构 Brachial plexus structure 解剖学实体锚定(ICD-11 扩展编码体系内)

要点:本数据集的标签是解剖结构而非病理,因此不存在阳性/阴性疾病的流行病学含义。任何把本数据集结果表述为「神经病变检出率」的说法都是对标签语义的误解。正样本率(约 41%)描述的是「标注员在该帧中确信看到臂丛标志的比例」,不是人群患病率。

§2.2 SNOMED CT 映射

标签/概念 ICD-11 SNOMED CT 码 术语(英文)
臂丛神经(分割目标) XA1BL6 49649004 Brachial plexus structure
臂丛神经阻滞(临床场景) 8E43.0 35772009 Brachial plexus block
颈部超声检查(采集手段) — 413845009 Ultrasonography of neck
超声引导下操作(通用场景) — 399128003 Ultrasound guided procedure
疼痛管理导管置入(延伸应用) 8E43.Y 23407004 Insertion of catheter for pain management
神经可视化(任务抽象) — 258250000 Nerve visualisation

映射说明:SNOMED CT 的 49649004 Brachial plexus structure 是本数据集分割目标的唯一准确对应;35772009 Brachial plexus block 描述临床用途而非图像内容,用于说明任务动机。颈部超声与超声引导操作两个概念用于刻画采集与使用场景,它们不是图像中的标注类别。本数据集只有 1 个前景类(臂丛神经)与 1 个背景类,不存在多类解剖标注。

§2.3 臂丛神经解剖与临床任务定义

解剖简介。 臂丛神经由 C5-C8 与 T1 神经根前支汇合而成,经斜角肌间隙、锁骨后方进入腋窝,分束支配整个上肢。在颈部横断面超声上,臂丛通常表现为一组低回声(偏暗)的圆形或椭圆形成束结构,周围环绕高回声神经外膜与筋膜;但在肌间沟与锁骨上区域,神经与筋膜、脂肪、肌肉的灰阶对比度低,加之斑点噪声与各向异性伪影,边界判定高度依赖操作者经验。

临床任务定义(按任务类型分层):

任务类型 具体表述 本数据集是否支持 说明
解剖定位/可视化 在超声帧中高亮臂丛神经区域 ✅ 完全支持 这是数据集唯一直接支持的任务
操作引导 为穿刺针路径规划提供实时叠加层 ⚠️ 部分支持 数据集无穿刺针、无空间标定、无实时视频流
筛查 / 诊断 / 分级 / 预后 神经病变检出、卡压损伤诊断分类、严重程度分级、阻滞成功率或并发症预测 ❌ 不支持 标签是解剖结构,仅有二值掩码;无病理诊断标签、无随访、无任何临床结局变量

关键限定: 官方任务表述是「对颈部超声图中的臂丛神经做像素级二值 mask 分割」,并明确要求算法对不含臂丛的帧输出空掩码。这意味着正确的任务建模是**「存在性判别 + 条件分割」的两阶段问题**,而非纯粹的像素分类。忽略存在性判别会导致模型在约 59% 的无神经帧上产生假阳性。

§2.4 患者人群特征

维度 内容 数据可得性
来源 竞赛赞助方的临床采集(疼痛管理导管相关机构) 机构名称未公开
采集时间 竞赛发布前完成回顾性导出(2016 年及以前) 精确年份未公开
受试者数 训练集 47 名(subject 编号 1-47),每名约 120 帧 ✅ 可得
测试集受试者 编号被隐去,且与训练集受试者无重叠 ✅ 可得(数量未公开)
年龄 / 性别 / 种族 / BMI 均未提供 ❌ 完全缺失
就医类型 未提供(可推断为拟行区域麻醉/疼痛介入的成人) ❌ 缺失
体位与扫查区域 肌间沟与锁骨上区域颈部横断扫查(由图像解剖推断) ⚠️ 需推断
操作者 未提供(同一受试者帧序列可推测为同一操作者单次检查) ❌ 缺失

人群说明: 47 名受试者、每人约 120 帧意味着这不是 47 例独立检查,而是若干次连续扫查的帧序列,同一受试者的相邻帧高度相似(近重复问题的来源)。由于没有任何人口学信息,本数据集无法支撑任何亚组公平性分析(见 §7.5)。

§2.5 临床价值

临床上, 超声引导下臂丛神经阻滞是上肢手术麻醉与术后镇痛的主流技术,难点不在穿刺技巧本身,而在于「看清神经在哪里」——神经在超声上是一团低回声结构,与周围结缔组织的对比度有时小于噪声幅度。若能实时高亮神经区域,可缩短操作时间、减少穿刺次数,从而降低神经损伤与血管内注射风险。本数据集的临床意图正是为「神经自动高亮」提供可训练的数据基础。

研究方法学上, 它的价值甚至更高。它是公开数据集中少有的、官方主动承认标签有缺陷的案例:数据页明确写明存在噪声、伪影和潜在标注错误且不修正,并写明采集机可能生成完全相同或高度相似的帧。这种坦诚使它可被合法用作「含噪标签」研究的基准。围绕它产生的分析——全零基线约 0.6、UNet 仅 0.35-0.45、近重复帧约 40% 标签冲突——已成为语义分割课程的常见反例。

必须明确的边界: 本数据集为回顾性单中心(或单一临床联盟)小规模采集,无前瞻性设计、无临床结局、无监管文档。任何模型在本数据集上的高性能都不能外推为临床可用性。

§2.6 金标准/参考标准

项目 内容
参考标准类型 人工像素级标注(专家培训标注员);非病理、非随访、非多专家裁决
标注形式 二值掩码,以 RLE(run-length encoding)写入 CSV,一张图一行
标注规则 仅在标注员「确信存在臂丛神经标志」时标注前景;否则为空掩码(pixels 为空字符串)
标注者资质 官方表述为「受过专家培训的标注员」;具体人数、资历、是否具备医师资质均未公开
标注一致性 无官方一致性报告(无 ICC/Kappa);社区替代量化:近重复帧约 40% 标签冲突
争议处理 官方声明个别错误不修正;无仲裁流程公开
划分方式 官方仅划分 train(带标注)与 test(无标注);test 受试者与 train 无重叠

金标准的三个结构性弱点:

  1. 置信度阈值偏差:只标注「确信看到」的帧,等价于在标签生成阶段引入了与解剖真实分布不一致的筛选。难以辨认神经的帧被统一编码为「无神经」而非「不确定」,使空掩码同时承载两种语义,模型无法区分。
  2. 无多专家复核:单一标注流程、无二次裁决,冲突无法被发现或消解,只能靠社区用近重复检测事后量化。
  3. 测试集永久无标签:5,508 张测试图从未公开真值,导致本数据集不存在可复用的官方评测集;任何后续研究的分数都必须说明其自建划分(见 §8.1)。

§3 数据集规格

§3.0 版本抉择矩阵

本数据集只有一个官方版本(2016 年竞赛快照,v1.0),因此版本抉择退化为「用哪一份拷贝、带哪些附加文件」。以下是实际使用中的三种拿到数据的方式及其取舍。

你的需求 推荐版本/来源 大小 理由
复现竞赛成绩、使用官方 RLE 标注 Kaggle 官方竞赛数据页(需登录并接受竞赛规则) 2.3 GB / 16,780 个文件 唯一权威来源;标注、文件名、测试集顺序均与排行榜一致,可比性最高
教学、快速原型,不想注册 Kaggle 社区 Google Drive 镜像 与原版一致的 TIFF + CSV 子集 门槛最低,被广泛用于课程;但镜像内容未经校验,需自行核对文件数(11,143 张图像)与 CSV 行数(5,635 行)
直接以 HuggingFace 数据集接口加载 gymprathap/Nerve-Ultrasound-Image-Segmentation 2.26 GB / 16,778 行 免注册、datasets 库一行加载;但许可被镜像自设为 creativeml-openrail-m,与原始竞赛规则冲突,不得据此认为可自由再分发
需要确定性、可审计的划分 官方数据 + 自行按 subject 划分 2.3 GB 官方无划分,必须自建;按受试者划分是唯一无泄漏的方案(详见 §5)
只做方法学对照、不需要完整数据 已清洗子集(如剔除无神经帧后的 2,323 张) 约 0.95 GB 文献中已有先例(低内存 CNN 研究即采用该子集,重采样至 128×256,80/20 划分)

版本抉择结论: 优先使用 Kaggle 官方页面获取数据,无论是否注册,都应保留原始 train/ 与 test/ 目录结构以及 CSV 原文件,不要在下载阶段做任何重命名或去重——所有清洗决策都应在可复现的脚本中完成,并记录被剔除的文件清单,否则无法与已发表的基准数字对齐。

§3.1 模态详细说明

维度 规格
成像模态 二维 B 模式(brightness mode)灰阶超声
解剖区域 颈部,肌间沟/锁骨上区域横断面扫查
目标结构 臂丛神经(brachial plexus, BP)
图像分辨率 固定 580×420 像素(宽×高),全数据集一致
位深 8 bit/pixel(256 级灰阶)
压缩 TIFF,LZW 无损压缩
色彩空间 单通道灰度(无彩色多普勒、无弹性成像、无造影)
时间维度 无(导出为独立静态帧,帧间时间戳未提供,帧率未知)
空间标定 无(无像素物理尺寸、无深度标尺、无探头型号记录)
标注通道 独立的二值掩码,以 RLE 存于 CSV,不嵌在 TIFF 中
附加信息 无 DICOM 头、无患者信息、无扫描参数(增益/频率/深度均未知)

对建模的含义: 单通道灰度 + 固定分辨率 + 无损压缩,使得这个数据集的 IO 层极其简单,几乎不需要格式转换;代价是没有任何可用于域适应或标定研究的元数据。想研究「不同探头/不同增益下的泛化」,本数据集无法支持。

§3.2 按子集样本数表

子集 图像数 标注 受试者 文件名格式 说明
训练集(总) 5,635 ✅ RLE 掩码 47 名(编号 1-47) subject_imageNum.tif 每名受试者约 120 帧
训练集(含臂丛) 2,323 ✅ 非空掩码 47 名 同上 检出率约 41%
训练集(空掩码) 3,312 ✅ 空字符串 47 名 同上 5,635 − 2,323 = 3,312,与独立统计一致
测试集 5,508 ❌ 无标注 未公开(与训练无重叠) imageNum.tif 文件名不含 subject 前缀
合计 11,143 5,635 有标注 47 名(已知部分) — 官方数据页另有 16,780 个文件的统计(含 CSV 等非图像文件)

数字一致性说明: 「5,635 + 5,508 = 11,143」与「训练 47 名受试者、每人约 120 帧(47×120 ≈ 5,640)」互相印证。另有一份独立统计称含神经图像约占 40%(与 41% 相符),神经面积平均约占图像 3.2%(与「正样本内前景占比约 2.3%」同量级但口径不同,引用时需注明来源,不可混用)。

§3.3 数据格式详情

文件/字段 格式 关键细节
train/*.tif TIFF(LZW 压缩,8 bit 灰度) 580×420;命名 subject_imageNum.tif
test/*.tif TIFF(同上) 580×420;命名 imageNum.tif,无 subject 前缀
train_masks.csv CSV 表头 img,pixels;img 为不含扩展名的文件名(如 1_1),pixels 为 RLE 字符串
sample_submission.csv CSV 表头 img,pixels;img 为 imageNum 形式(如 1),覆盖全部 5,508 张测试图
提交格式 CSV 每张测试图一行;pixels 为 RLE;无前景时留空

RLE 编码规则(官方定义,务必逐字理解): 像素编号从 1 开始,先自上而下、再自左向右——编号 1 对应坐标 (1,1),编号 2 对应 (2,1),即先沿列方向(y 增长)遍历,走完一列再进入下一列。编码串为「起始位置 长度 起始位置 长度 …」交替出现,均为 1-based,空格分隔。每张测试图必须恰好出现一次且顺序与 sample_submission.csv 一致。两集合均为空时 Dice 定义为 1。

§3.4 存储大小

项目 数值 来源
Kaggle 数据页标称大小 2.3 GB 官方数据页
Kaggle 数据页标称文件数 16,780 官方数据页(含图像与 CSV 等非图像文件)
数据集类型标注 tif / csv 官方数据页
HuggingFace 镜像统计 16,778 行 / 2.26 GB 第三方镜像(与官方统计相差 2 个文件,属打包差异)
单张图像估算 580×420×1 B ≈ 244 KB 未压缩;LZW 压缩后通常 < 100 KB 依分辨率与位深推算
训练子集(仅训练图 + CSV) 约 480 MB 量级 按 5,635 张 × 约 85 KB 估算
测试子集(仅测试图) 约 470 MB 量级 按 5,508 张 × 约 85 KB 估算

实操建议: 全部图像解压后仍不足 1 GB,可直接驻留内存做教学实验;若使用 HuggingFace 的 datasets 默认缓存,arrow 缓存会额外占用约 2-3 倍空间。

§3.5 标注方式

维度 内容
标注类型 人工全监督像素级二值分割;无自动生成成分
标注工具 未公开
标注流程 标注员经专家培训后逐帧判断;仅在确信臂丛标志存在时绘制前景轮廓
是否多标注者 未公开(无重复标注记录,无法计算标注者间一致性)
是否弱监督 否,为逐像素强标注;但标注覆盖面不完整,等价于一种「置信度筛选后的标注」
质量控制 官方承认存在噪声、伪影与潜在标注错误,且个别错误不修正;无第三方复核记录
标签语义 1 类前景(臂丛神经)+ 背景;无多类、无实例区分
近重复问题 官方承认采集机可能生成完全相同或高度相似的图像,导致同一解剖内容重复出现与标签冲突

§3.6 标注者资质与一致性

官方表述(数据页原文语义): 标注由「受过专家培训的标注员」完成,并且仅在标注员确信存在臂丛神经标志时进行标注。

已知信息的完整清单:

  • 有:标注者经过专家培训;存在「确信」这一主观阈值;错误不修正。
  • 无:标注者人数、专业背景(医师/技师/学生)、标注耗时、标注工具、是否盲法、是否交叉复核。
  • 无:任何定量一致性指标(Dice 或 Kappa 形式的标注者间一致性均未公布)。

社区可获得的替代量化(非官方,引用须标注来源):

量化项 数值 来源
近重复对标签不一致比例 约 40% Raghakot 2016 复盘
像素差 < 100 的重复组 63 组,其中 52 组掩码不一致 cygnus77 复现仓库
像素差 < 1000 的重复组 131 组,其中 107 组掩码不一致 cygnus77 复现仓库
SSIM > 0.99 判定的近重复剔除后 剩余可用训练集明显缩小 rnklee 复现仓库

结论: 本数据集的标注一致性不可由官方文档直接回答,只能通过近重复检测间接推断。上表三组数字相互独立但结论一致:约四成的近重复样本标注矛盾。这是任何在本数据集上训练模型的人都必须先处理的问题(见 §6.5 坑点 1 与坑点 2)。

§3.7 采集周期

项目 内容
竞赛周期 2016-05-19 至 2016-08-19(约 3 个月);首次提交与团队合并截止 2016-08-11,最终提交截止 2016-08-18
数据采集期 竞赛发布前的回顾性导出;精确年份与时间段未公开
时间覆盖标注 temporalCoverage 记为 2016/2016(指竞赛年份,非患者检查年份)
是否连续监测 否,为静态帧导出;帧间时间间隔与帧率未知

重要提示: 数据集的「2016 年」是竞赛发布年份,不是患者就诊年份。若在研究中需要时间维度分析(如年代漂移),本数据集无法支持——既无检查日期,也无患者编号到时间的映射,仅有 1-47 的受试者序号。

§3.8 地域覆盖

项目 内容
覆盖国家/地区 美国(依竞赛赞助方所在地推断)
机构数与城市/医院 未公开;按「47 名受试者 + 统一设备导出规格」推断为单一临床联盟内的少数中心
人群代表性 / 多中心泛化支持 无法评估(无人口学数据);不支持——无中心标识,无法做跨中心划分
地理标签字段 无

限制说明: 任何声称在本数据集上验证了「跨机构泛化」的说法都缺乏依据。若要评估泛化,只能借助外部数据(见 §7.8)或自行采集。

§3.9 采集设备规格

项目 内容 可得性
设备厂商与型号 / 频率 / 增益 / 深度 / 焦区 未公开 ❌
探头类型 由图像几何推断为高频线阵探头(颈部浅表结构常规配置) ⚠️ 推断
成像模式 B 模式灰阶 ✅
输出分辨率 580×420(设备端导出规格,全数据集一致) ✅
图像存储 TIFF,8 bit,LZW 压缩 ✅
DICOM 元数据 未包含(剥离) ✅(确认剥离)
设备一致性 从统一分辨率与统一命名规则推断为同一套导出流程;无法确认是否同一台机器 ⚠️ 推断
伪影记录 官方承认存在噪声与伪影,但无逐图标注 ⚠️ 部分

建模含义: 因为没有设备与参数记录,无法评估设备域漂移,也无法把模型失败归因到具体成像条件。

§3.10 深度溯源链

层级 内容 证据强度
原始临床现场 赞助方临床机构为拟行区域麻醉/疼痛导管置入的患者做颈部超声扫查 由竞赛描述推断
帧导出 从超声机导出为 580×420、8 bit、LZW 压缩 TIFF 官方数据页(格式)
受试者编号化 以 subject_imageNum.tif 命名,subject 1-47,剥离全部患者标识 官方数据页(命名规则)
标注 专家培训的标注员逐帧绘制二值掩码,仅标注确信帧 官方数据页(标注说明)
RLE 化 掩码转为 RLE 写入 train_masks.csv 官方数据页(提交/标注格式)
数据集发布 Kaggle 竞赛页发布 train(带标注)/ test(无标注) 官方数据页
测试集切分 受试者级切分,test 与 train 受试者无重叠,test 编号隐去 官方数据页
竞赛运行 2016-05-19 至 2016-08-19,私有榜按约 80% 测试数据计算 官方竞赛页
冻结 竞赛结束后未发布任何修订版本,无官方维护仓库 无官方仓库可查

溯源断点提示: 链条在「原始临床现场 → 帧导出」之间存在不可验证的断层:无法确认帧是如何被挑选出来的,也无法确认 47 名受试者如何选入(连续病例还是便利样本)。这两个未知量直接限制了选择偏倚评估(见 §7.1)。


§4 数据结构详解

§4.0 目录结构预览

从 Kaggle 官方页面或镜像下载解压后,目录结构如下。请特别注意:CSV 中的 img 字段不含扩展名,而 TIFF 文件名带扩展名;同时 train 与 test 的文件名前缀规则不同。

us-nerve-seg/                          # 解压根目录(官方压缩包 2.3 GB / 16,780 个文件)
├── train/                             # 5,635 张带标注训练图
│   ├── 1_1.tif ... 1_120.tif           # subject=1,约 120 帧;580×420, 8 bit, LZW
│   ├── 2_1.tif ... 47_120.tif          # 受试者编号最大为 47
├── test/                              # 5,508 张无标注测试图
│   ├── 1.tif ... 5508.tif              # 仅帧序号,无 subject 前缀
├── train_masks.csv                    # 表头 img,pixels;5,635 行数据
│   # img 列为不含扩展名的文件名,如 "1_1"(注意:不是 "1_1.tif")
│   # pixels 列为 RLE 字符串,如 "3 4 12 6 ...";无前景时该字段为空字符串
├── sample_submission.csv              # 表头 img,pixels;5,508 行
│   # img 列为测试帧序号(如 "1");提交时必须保持行顺序完全一致
└── (可选) nervelargefile/             # 部分社区镜像会多带一份重复目录,需自行识别

# 典型的错误目录假设(务必避免):
#   ✗ train_masks.csv 的 img 列写成 "1_1.tif"(带扩展名)
#   ✗ 假设 test/ 下文件名也带 subject 前缀
#   ✗ 假设 CSV 行数等于 11,143(实际只有 5,635 行训练标注)

最小可用子集建议: 仅需 train/ 目录中的受试者 1-40 加上 train_masks.csv 即可开展完整训练与验证(保留 41-47 作为本地留出集,可复现社区对 41-47 分布差异的观察)。测试集在自查阶段可以完全不用,因为无真值;若要模拟提交,可用 sample_submission.csv 的格式在自建验证集上评估。

§4.1 DAIMS 标准化字段描述表

下表按 DAIMS 八列格式描述本数据集的核心「表」:train_masks.csv(标注表)与 train/、test/(图像表)。由于数据以文件为主、CSV 为辅,字段字典同时覆盖两类实体。

字段名 类型 说明 示例值 AI 用途 观测误差 信息性缺失编码 取值范围
train_masks.img 字符串 训练图标识,为不含扩展名的文件名,编码 subject_imageNum 1_1 与 TIFF 关联的主键;可解析出受试者编号 无(主键,唯一) 不适用(主键不可缺失) {1..47}_{1..120} 形式
train_masks.pixels 字符串(空格分隔整数序列) 臂丛神经二值掩码的 RLE 编码;交替为「起始位置 长度」,1-based,自左向右逐列编号 3 4 12 6 20 2 解码为二值掩码以计算损失与 Dice 编码本身无误差,但语义有噪声:约 40% 近重复帧标签冲突 空字符串 = 该帧无前景(非缺失,而是明确的阴性标注) 起始位置 ∈ [1, 243,600],长度 ≥ 1,序列长度为偶数
train/<filename>.tif 图像文件 训练图;580×420、8 bit、LZW 压缩灰度 TIFF 1_1.tif 模型输入 超声斑点噪声、声影、各向异性伪影均未标注 不适用 像素强度 0-255
subject(从文件名派生) 整数 受试者编号,由 img 前缀解析 1 → 1 划分依据:必须按此字段做 GroupSplit 无 不适用 1-47
frame_index(从文件名派生) 整数 同受试者内的帧序号 1_120 → 120 可用于时序/序列建模与近重复检测顺序假设 无 不适用 约 1-120
has_nerve(从 pixels 派生) 布尔 是否存在前景;由 pixels 是否为空推导 空字符串 → False 辅助分类头的监督信号;处理空掩码问题的关键字段 存在假阴性(「看不清」被编码为 False) 不适用(派生字段) True / False,训练集中 True 占 2,323/5,635 ≈ 41%
test/<filename>.tif 图像文件 测试图;同名规格,无标注,文件名不含 subject 1.tif 仅用于生成提交;无真值 同上 不适用 像素强度 0-255
sample_submission.img 字符串 提交行标识,为测试帧序号 1 提交流程与格式校验 无 不适用 1-5508
foreground_pixels(派生统计) 整数 单图前景像素数;由 RLE 长度求和 2,684(最小)/ 6,976(中位)/ 17,439(最大,原始单位) 用于样本加权、异常检测 依赖标注质量;最小值非 0 说明「有前景帧」内部的体积跨度大 无前景帧可记为 0 0 或 [2,684, 17,439](原始单位)
foreground_ratio(派生统计) 浮点 前景占比;含神经帧内约 2.3%,全集约 0.949% 0.023 决定损失函数选择与重加权策略 统计口径随分母选择而变,引用需注明 无前景帧为 0 [0, 0.032 量级]

§4.2 标签分布统计

统计项 数值 占比 来源
训练图总数 5,635 100% 官方/汇总
含臂丛(非空掩码) 2,323 41.2% 汇总统计
空掩码(无前景) 3,312 58.8% 由 5,635 − 2,323 得出,与独立统计一致
含神经图像占比(另一口径) — 约 40% 独立复现仓库
前景像素占全集比例 — 约 0.949% Stanford CS230 项目报告
前景像素占正样本比例 — 约 2.3% Stanford CS230 项目报告
平均神经面积占图像比例(另一口径) — 约 3.2% 独立复现仓库

关于两个前景占比口径的差异: 0.949%(全集)与 2.3%(正样本内)之比为 1 : 2.42,与正样本率 41% 自洽(0.949% ÷ 41.2% ≈ 2.3%)。而「约 3.2%」的口径明显偏高,可能来自不同的掩码定义或图像集合。引用时必须标明来源,不要把三者混为「约 1-3%」这样的模糊区间——分母定义比数字本身更重要。

标注体积分布(原始单位): 最小 2,684 / 中位 6,976 / 最大 17,439,跨度约 6.5 倍。这意味着同一类目标在不同帧中的大小差异显著,对 Dice 的行为有直接影响:Dice 对小目标更敏感(一个像素的错误在小目标上扣分更多),因此大体积帧上的表现通常显著优于小体积帧,评估时应按体积分层报告。

§4.3 关键统计与描述性指标

指标 数值 计算方式
平均每受试者帧数 约 120 5,635 ÷ 47 ≈ 119.9
训练/测试图像比 约 1.02 : 1 5,635 : 5,508
正样本率 约 41% 2,323 ÷ 5,635
全零提交期望 Dice 约 0.6 59% 的帧空-空得 1,41% 的帧得 0,但因空-空规则与测试集分布略有偏差
冠军私榜成绩 / 第 10 名 / 榜首到第 10 名差距 0.73226 / 0.71625 / 0.01601 官方私有榜(约 80% 测试数据)
竞赛提交总量 14,316 次 官方竞赛页
参赛规模 1,593 名参赛者 / 922 支队伍 / 1,022 名参与者 官方竞赛页(另一第三方记录称 923 队,属快照时点差异)

统计解读: 榜首到第 10 名的差距仅 0.016,而他们与「全零基线」的差距是 0.13 左右。这说明排行榜上部的区分度主要来自处理空帧与标签噪声的能力,而不是神经边界刻画的精细程度提升。另一个直接推论是:在这个数据集上,0.01 的 Dice 差异通常不具备方法学显著性,不宜作为「A 方法优于 B 方法」的主要证据。

§4.4 数据层级关系(受试者 → 帧)

本数据集只有两级实体,与 EHR 或 DICOM 的三级/四级结构不同,理解这一点对划分策略至关重要。

受试者 (subject, 1-47)                    ← 划分的原子单位(不可拆分)
   └── 帧序列 (frame, 每人约 120 帧)        ← 模型训练的基本样本
          ├── 图像: train/{subject}_{n}.tif   (580×420, 8 bit, LZW)
          └── 掩码: train_masks.csv 中 img="{subject}_{n}" 对应的 pixels
   注意:同一受试者的相邻帧高度相似 → 帧级随机划分必然泄漏(见 §5.3)

测试侧(无受试者标识):
   测试帧 (frame, 1-5508)                  ← 只有单层,无 subject 前缀
      └── 图像: test/{n}.tif ;真值: 从未公开

层级含义的三条实用结论:

  1. 划分只能按受试者做。 同一受试者的约 120 帧来自同一次扫查,解剖结构、探头位置、增益设置几乎相同,帧间相似度极高。若按帧随机划分,验证集会与训练集共享几乎相同的图像,验证分数会被系统性高估。
  2. 近重复不仅存在于受试者内部,也跨受试者。 官方承认采集机可能生成完全相同或高度相似的帧,实践中近重复对被观察到跨越不同 subject 编号,这也是社区在按受试者划分之外还要额外做去重的原因。
  3. 测试集无法复现受试者级划分。 由于 test 文件名不含 subject,任何「模拟官方划分」的尝试都只能做到帧级近似,这也是为什么后续研究者普遍改用自建的受试者级划分(如 80/20)并明确声明。

§4.5 缺失值情况与信息性缺失编码

本数据集没有传统意义上的表结构缺失值,但存在三种语义上的信息性缺失,处理方式直接影响建模正确性。

情形 编码方式 语义 正确处理 错误处理
帧中不含臂丛(含「确实没有」与「看不清」两种情况) pixels 为空字符串 明确阴性 + 不确定的混合 作为空掩码监督;额外训练存在性分类头;评估时按空-空规则计分 直接删除这些帧 → 丢失 59% 数据,并使模型在无神经帧上大量假阳性
受试者编号(测试集) 文件名不含前缀 不可恢复的信息性缺失 承认无法按受试者划分测试集,改用自建划分 假设测试帧顺序即受试者顺序 → 完全错误
患者人口学与设备参数 未采集/未发布 结构性缺失 在论文局限章节明确声明;不做亚组分析 用其他数据集的分布填补 → 制造未声明的假设
帧内时间戳与帧序关系 未提供(仅文件名中的序号) 部分缺失 序号可当作弱顺序信号用于近重复检测 把序号当作真实时间间隔 → 时序建模结论不可靠

信息性缺失编码总原则: 本数据集的空掩码是信息性的(它告诉你这帧没有可见神经),而不是「数据没采到」。因此它必须被保留在训练集中并作为一类明确的监督信号;与之相对,测试集的受试者编号是被有意隐去的(保护隐私),属于不可恢复的屏蔽性缺失,只能用自建划分绕过,不能尝试推断。


§5 数据划分与使用建议

§5.1 官方数据划分

项目 内容
官方划分形式 train(5,635 张,带 RLE 标注)/ test(5,508 张,无标注)
划分单位 受试者级——官方明确说明训练与测试受试者无重叠
测试集评分方式 私有榜按约 80% 测试数据计算;公有榜使用剩余约 20%
测试真值公开性 从未公开,永久不可获得
是否提供验证集 否——官方只提供 train 与 test,无独立验证集
是否可复现划分 不可——test 无 subject 标识,无法重建受试者级切分

官方划分的三个后果:

  1. 后续研究无法在官方测试集上评估,因为真值不存在。所有「在 US Nerve Segmentation 上达到 Dice X」的表述必须附带自建划分的说明。
  2. 官方划分本身是干净的受试者级切分,这一点值得肯定;但因为它不可复现,实际上无法被后继工作继承。
  3. 竞赛期间参赛者可自行从 train 中切分验证集,而大量参赛者采用了帧级随机切分,导致排行榜名次与真实泛化能力之间存在系统性偏差(见 §5.3)。

§5.2 推荐划分策略

首选方案:受试者级 80/20 划分(可复现版本)。

  1. 解析全部训练文件名,提取 subject 编号,得到 47 个唯一值。
  2. 固定随机种子,将 47 个受试者打乱后划分——推荐 37 名训练 / 10 名验证(约 79%/21%)。
  3. 训练集约 4,440 帧,验证集约 1,195 帧,正样本率应分别接近 41%,划分后请核对。
  4. 在验证集上评估时,同时报告「全集 Dice」与「仅非空帧 Dice」两个数字——前者可与竞赛榜单对比,后者反映真正的分割能力。

关于受试者 41-47 的特殊处理: 社区曾报告受试者 41-47 的行为与官方测试集分布不一致,因此一个实用技巧是把 41-47 完全留出作为「最严格本地测试集」,用 1-40 做训练与调参。这能暴露模型在分布偏移下的脆弱性。

备选方案对比表:

划分方案 泄漏风险 可复现性 与榜单可比性 推荐场景
帧级随机 80/20 ❌ 极高(同受试者帧跨集) 高 名义可比,实际高估 不建议任何严肃用途
受试者级 80/20(固定种子) ✅ 无 高(需公开种子与脚本) 需说明,与榜单不可直接比 首选,通用
留出受试者 41-47 作测试 ✅ 无 高 不可比 压力测试与分布偏移研究
5 折受试者级交叉验证(可按正样本率分层) ✅ 无 中(需公开折分配) 不可比 小样本下的稳健评估;正样本率波动较大时的推荐做法

§5.3 数据泄漏风险防御

泄漏源一:同受试者相邻帧(最严重)。 同一受试者约 120 帧来自一次连续扫查,相邻帧的图像差异常常小于标注差异。若按帧随机划分,验证集里会有大量与训练集几乎相同的图像,Dice 会被高估到 0.85 以上的量级,而这是任何实际操作中都达不到的。防御方式只有一个:按 subject 分组划分。

泄漏源二:跨受试者的近重复帧。 官方承认采集机可能生成完全相同或高度相似的图像。实践中的检测方法(按从简到繁):

  1. 快速筛查:对每对图像计算平均绝对像素差(或均方误差),差值 < 100 视为近重复,< 1000 视为疑似。社区实证:差值 < 100 的 63 组中有 52 组掩码不一致;差值 < 1000 的 131 组中有 107 组不一致。
  2. 结构相似性:用 SSIM > 0.99 作为阈值做近重复判定,把冲突样本整组剔除。已有复现表明剔除后剩余可用训练集明显缩小——这本身说明问题的严重程度。
  3. 感知哈希:对图像做缩小 + DCT 后取中值哈希,配合汉明距离阈值做近重复聚类,效率远高于逐对比较,适合快速清洗整个训练集。
  4. 处理策略:对近重复冲突组,可选择(a)整组剔除;(b) 保留多数标签、丢弃少数;© 保留全部但使用标签平滑;(d) 保留全部并在损失中对冲突组降权。必须做的是「保证整组落在同一划分内」,否则同一张图的两种标签会分别出现在训练与验证集,泄漏仍然存在。

泄漏源三:预处理统计量的跨集计算。 若用全数据集(含验证集)的均值/方差做标准化,虽然影响较小(本数据集为单通道灰度,强度分布相对稳定),但仍应在训练集上统计后再套用到验证集,这是工程规范而非可选项。

泄漏源四:超参数选择的反复窥视。 竞赛场景下,参赛者会用公有榜反复试错(公有榜占约 20% 测试数据),这等价于在公有榜上过拟合。私有榜成绩与公有榜的落差正是这一泄漏的体现。在自建实验中也应避免反复用同一验证集做设计决策。

§5.4 交叉验证建议

小样本(47 名受试者)+ 高帧间冗余的结构,使交叉验证在本数据集上尤为必要,但必须满足两个条件:

  1. 按受试者分组:使用 GroupKFold 或 StratifiedGroupKFold,groups=subject。
  2. 折内正样本率均衡:受试者之间的正样本率差异可能较大,用分层分组折(StratifiedGroupKFold)按 has_nerve 分层,可避免某一折几乎没有正样本。

推荐配置: 5 折受试者级分层分组交叉验证。每折训练集约 37-38 名受试者、验证集约 9-10 名。报告结果时应给出每折 Dice 的均值与标准差,而不是单一折的数字——在 47 名受试者的规模下,折间标准差往往达到 0.02-0.05,大于方法间的典型差异(榜单上第 1 名与第 10 名仅差 0.016)。这意味着单折实验得出的「方法更优」结论极不稳定。

额外建议: 若计算资源允许,做 2-3 个不同随机种子的 5 折重复,报告种子间的波动。这能有力支撑「差异是否显著」的判断。

§5.5 外部验证

本数据集没有任何官方外部验证集,也没有多中心数据。可行路径有三类:在本地采集的颈部超声上测试迁移模型(需伦理审批,无公开基准可横向比较);使用已发表的第三方数据集对照(如自建 340 张三人标注数据集,文献中已有 U-Net IoU 68.50%、LinkNet 66.27% 的对照,但标注协议与图像规格可能不同);跨数据集零样本迁移(如 BUSI 或心脏超声,解剖与任务差异过大,结果只能说明「不外推」)。

结论: 本数据集的定位是方法学基准,不是临床验证集。若研究目标是「证明神经分割在临床上可用」,必须使用前瞻性、多中心、带临床结局的数据;本数据集只能用于证明「某个算法改进在此基准上有效」。论文中混用这两种表述是常见的严重夸大。


§6 AI 就绪指南

§6.0 云端快速启动

本数据集规模极小(2.3 GB,全部解压后不足 1 GB),无需专用云容器,任何具备 GPU 的 Notebook 环境均可在 10 分钟内跑通端到端流程。依赖安装:pip install numpy pandas pillow scikit-image scikit-learn torch torchvision tqdm(Keras/TF 路线将 torch 换为 tensorflow 即可)。

目录结构预期(本文档所有代码均假设此布局):
  {data_root}/train/           # 5,635 张训练图 {subject}_{n}.tif
  {data_root}/test/            # 5,508 张测试图 {n}.tif(无标注)
  {data_root}/train_masks.csv  # 表头 img,pixels
  {data_root}/sample_submission.csv

拼接关系: os.path.join(data_root, "train", f"{img}.tif")
  其中 img 来自 train_masks.csv 的 img 列(不含 .tif 后缀)
最小可用子集: 仅 train/ 目录 + train_masks.csv(约 480 MB,可常驻内存迭代)
  → test/ 在自查阶段不需要(无真值,仅提交排行榜时使用)

§6.1 快速上手

以下代码从零开始完成「读取 CSV → 解析 RLE → 加载图像 → 构建受试者级划分 → 跑通一个 epoch」的最小闭环。复制到 Notebook 中可直接运行,唯一需要修改的是 data_root。

# ============================================================
# US Nerve Segmentation 快速上手(最小可运行闭环)
# 预期目录: {data_root}/train/*.tif + {data_root}/train_masks.csv
# 运行前提: pip install numpy pandas pillow scikit-learn torch tqdm
# ============================================================
import os
import numpy as np
import pandas as pd
from sklearn.model_selection import GroupShuffleSplit

data_root = "/path/to/us-nerve-seg"          # ← 唯一需要修改的地方
IMG_W, IMG_H = 580, 420                       # 全数据集固定分辨率

# 1. 读取标注表并派生受试者编号
masks = pd.read_csv(os.path.join(data_root, "train_masks.csv"))
masks["subject"] = masks["img"].str.split("_").str[0].astype(int)   # img 形如 "1_1"
masks["frame"] = masks["img"].str.split("_").str[1].astype(int)
# 空字符串 = 该帧无前景(这是明确的阴性标注,不是缺失值)
masks["has_nerve"] = masks["pixels"].notna() & (masks["pixels"].astype(str).str.len() > 0)

print(f"训练图总数: {len(masks)}")                       # 期望 5,635
print(f"含臂丛帧数: {masks['has_nerve'].sum()}")          # 期望约 2,323(41%)
print(f"受试者数: {masks['subject'].nunique()}")          # 期望 47

# 2. RLE 编解码(务必与官方定义逐字一致)
#    官方编号: 1-based, 先自上而下(沿列方向 y 增长)再自左向右
#    编号 1 = (1,1),编号 2 = (2,1),即先走第 1 列全部 420 个像素
def rle_decode(rle_str, shape=(IMG_H, IMG_W)):
    """官方 RLE → 二值掩码 (H, W),0/1 uint8。空串返回全 0。"""
    if not isinstance(rle_str, str) or len(rle_str.strip()) == 0:
        return np.zeros(shape, dtype=np.uint8)
    s = np.asarray(rle_str.split(), dtype=np.int64)
    starts, lengths = s[0::2] - 1, s[1::2]          # 转 0-based
    img = np.zeros(shape[0] * shape[1], dtype=np.uint8)
    for st, ln in zip(starts, lengths):
        img[st:st + ln] = 1
    # 关键: 官方顺序是「先列后行」→ 按列优先 reshape 后转置
    return img.reshape(shape[1], shape[0]).T

def rle_encode(mask):
    """二值掩码 (H, W) → 官方 RLE 字符串。全 0 返回空串。"""
    flat = mask.T.reshape(-1)                        # 转回列优先一维序
    if flat.sum() == 0:
        return ""
    diff = np.diff(np.concatenate([[0], flat, [0]]))
    starts = np.where(diff == 1)[0] + 1              # 转 1-based
    ends = np.where(diff == -1)[0] + 1
    return " ".join(f"{s} {e - s}" for s, e in zip(starts, ends))

# 自检: 编解码往返一致性(务必在正式训练前运行一次)
sample = masks.loc[masks["has_nerve"], "pixels"].iloc[0]
m = rle_decode(sample)
assert rle_encode(m) == sample, "RLE 编解码不自洽,请检查列优先顺序"
print(f"RLE 往返校验通过; 前景像素 {int(m.sum())}")

# 3. 按受试者划分(禁止按帧随机划分,否则严重泄漏)
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
train_idx, val_idx = next(gss.split(masks, groups=masks["subject"]))
tr, va = masks.iloc[train_idx], masks.iloc[val_idx]
assert not (set(tr["subject"]) & set(va["subject"])), "受试者出现交集,划分错误"
print(f"训练 {len(tr)} 帧 / {tr['subject'].nunique()} 名受试者, 正样本率 {tr['has_nerve'].mean():.3f}")
print(f"验证 {len(va)} 帧 / {va['subject'].nunique()} 名受试者, 正样本率 {va['has_nerve'].mean():.3f}")

§6.2 数据获取流程

步骤 操作 备注
1 打开竞赛数据页 https://www.kaggle.com/c/ultrasound-nerve-segmentation/data 需登录 Kaggle 账号
2 点击 “I Understand and Accept” 接受竞赛规则 许可为 “Subject to Competition Rules”
3 下载 train.zip 与 test.zip(或完整包) 官方标称 2.3 GB / 16,780 个文件
4 解压后校验文件数:train 目录应有 5,635 个 .tif,test 应有 5,508 个 数量不符说明解压不完整
5 校验 CSV:train_masks.csv 应有 5,635 行数据,sample_submission.csv 应有 5,508 行 用 wc -l 或 pandas 读入后核对
6 (可选)记录数据快照的下载日期与校验和 便于论文中声明数据版本
# 方式一: Kaggle CLI(推荐,可脚本化)
pip install kaggle   # 将 API token 放到 ~/.kaggle/kaggle.json 后:
kaggle competitions download -c ultrasound-nerve-segmentation -p ./data
cd ./data && unzip -q ultrasound-nerve-segmentation.zip && cd ..

# 下载后的自检(在解压目录内运行)
echo "train 图像数: $(find ./train -name '*.tif' | wc -l)"   # 期望 5635
echo "test  图像数: $(find ./test  -name '*.tif' | wc -l)"   # 期望 5508
python -c "import pandas as pd; \
  m=pd.read_csv('train_masks.csv'); s=pd.read_csv('sample_submission.csv'); \
  print('train_masks:', len(m), '| sample_submission:', len(s))"
# 不注册 Kaggle 的替代路径(HuggingFace 镜像)—— 注意许可差异
# 镜像: gymprathap/Nerve-Ultrasound-Image-Segmentation (2.26 GB, 16,778 行)
# 警告: 该镜像许可被自设为 creativeml-openrail-m,与原始竞赛规则冲突,
#       仅建议用于教学演示,论文中请引用官方竞赛页而非镜像。
from datasets import load_dataset
ds = load_dataset("gymprathap/Nerve-Ultrasound-Image-Segmentation")
print(ds)   # 检查 split 与列名是否包含 image / label(掩码)

获取渠道对比小结: Kaggle 官方渠道是唯一权威来源,适合论文与可复现研究;社区 Google Drive 镜像门槛最低,适合课程与快速原型,但内容未经校验;HuggingFace 镜像加载最方便,但许可被改写,不得据其认为可自由再分发。

§6.3 预处理 Pipeline

本数据集的预处理集中在四件事:RLE 解码、尺寸调整、标准化、以及近重复样本的识别与处置。前两件是标准动作,第三件可做可不做(强度分布稳定),第四件是本数据集特有的、不可省略的步骤。

# ============================================================
# 预处理 Pipeline(按序执行)
# 输入: {data_root}/train/*.tif + train_masks.csv
# 输出: 经清洗与划分后的训练/验证数据 + 清洗日志
# ============================================================
import os, json, glob
import numpy as np
import pandas as pd
from PIL import Image
from skimage.metrics import structural_similarity

# ---------- 步骤 1: 读取图像为 float32 数组 ----------
def load_image(path, size=(256, 384)):
    """读取灰度 TIFF 并缩放到 256x384(保持 580x420 宽高比)。
    若追求榜单级精度,请改为 (420, 580) 并提高显存预算。"""
    im = Image.open(path).convert("L")           # 强制单通道灰度
    im = im.resize((size[1], size[0]), Image.BILINEAR)
    return np.asarray(im, dtype=np.float32) / 255.0

# ---------- 步骤 2: 掩码缩放必须最近邻(禁用双线性) ----------
def resize_mask(mask, size=(256, 384)):
    """双线性会把 0/1 变成 0.3/0.7 之类的小数,
    再二值化时产生大量伪边缘,Dice 会莫名下降。"""
    im = Image.fromarray(mask.astype(np.uint8) * 255)
    im = im.resize((size[1], size[0]), Image.NEAREST)
    return (np.asarray(im) > 127).astype(np.uint8)

# ---------- 步骤 3: 近重复检测(本数据集特有,务必执行) ----------
def ssim_neardup_groups(img_paths, threshold=0.99, verbose=True):
    """用 SSIM 对图像做近重复聚类。全量两两比较是 O(n^2):
    5,635 张约 1,587 万次比较,在 96x64 缩略图上单次约 0.2 ms,约需 50 分钟。
    若需更快: 先用 8x8 感知哈希预筛,只对候选对算 SSIM。"""
    thumbs = {p: np.asarray(Image.open(p).convert("L").resize((96, 64)), dtype=np.uint8)
              for p in img_paths}
    groups, used, paths = [], set(), sorted(img_paths)
    for i, p in enumerate(paths):
        if p in used:
            continue
        group = [p]
        for q in paths[i + 1:]:
            if q not in used and structural_similarity(
                    thumbs[p], thumbs[q], data_range=255) >= threshold:
                group.append(q); used.add(q)
        if len(group) > 1:
            groups.append(group)
        used.add(p)
        if verbose and i % 500 == 0:
            print(f"  已处理 {i}/{len(paths)},近重复组 {len(groups)}")
    return groups

# ---------- 步骤 4: 冲突组处置 ----------
def resolve_conflicts(masks_df, groups, strategy="majority"):
    """返回 (保留的 img 列表, 日志)。strategy: 'drop_group' 整组剔除 /
    'majority' 保留多数(推荐)/ 'keep_all' 全保留(须配合标签平滑)"""
    key = masks_df.set_index("img")["has_nerve"].to_dict()
    log, keep = [], []
    for g in groups:
        names = [os.path.splitext(os.path.basename(p))[0] for p in g]
        labels = [key.get(n, None) for n in names]
        pos = sum(1 for v in labels if v)
        neg = sum(1 for v in labels if v is not None) - pos
        log.append({"group_size": len(g), "pos": pos, "neg": neg})
        if strategy == "majority":
            keep += [n for n, v in zip(names, labels) if v is (pos >= neg)]
        elif strategy == "keep_all":
            keep += names
    return keep, log

# ---------- 步骤 5: 组装并保存清洗日志 ----------
def build_clean_index(data_root, masks_df, clean_imgs=None):
    """生成最终索引表,含路径、subject、has_nerve、前景比。"""
    df = masks_df.copy()
    if clean_imgs is not None:
        df = df[df["img"].isin(set(clean_imgs))].reset_index(drop=True)
    df["path"] = df["img"].map(lambda x: os.path.join(data_root, "train", x + ".tif"))
    df["subject"] = df["img"].str.split("_").str[0].astype(int)
    df["fg_ratio"] = df["pixels"].map(
        lambda s: (np.asarray(str(s).split(), dtype=np.int64)[1::2].sum()
                   / (580 * 420)) if isinstance(s, str) and s.strip() else 0.0)
    print(f"清洗后样本数 {len(df)},正样本率 {df['has_nerve'].mean():.3f}")
    return df

# 完整执行
# groups = ssim_neardup_groups(sorted(glob.glob(os.path.join(data_root,'train','*.tif'))))
# keep, log = resolve_conflicts(masks, groups, strategy='majority')
# df = build_clean_index(data_root, masks, keep)
# json.dump(log, open('near_dup_log.json','w'), ensure_ascii=False, indent=2)

Pipeline 设计要点回顾:

  1. 掩码缩放必须最近邻——这是本数据集最常见的隐性错误,Dice 会无端损失 0.02-0.05。
  2. 近重复清洗必须记录日志——否则无法解释为什么样本数从 5,635 降到某个数字,也无法与他人复现对齐。
  3. 标准化非必需——单通道灰度、强度分布稳定,除以 255 已足够;不必强求 ImageNet 均值方差(那是三通道自然图像的统计量)。
  4. 不要在预处理阶段丢弃空掩码帧——它们是辅助分类头的关键监督信号,删掉会引入 59% 的采样偏倚。

§6.4 框架加载(PyTorch Dataset 与 DataLoader)

# ============================================================
# PyTorch Dataset + DataLoader 完整实现
# 依赖: torch, torchvision, numpy, pandas, PIL, scikit-learn
# ============================================================
import os
import numpy as np
import pandas as pd
import torch
from torch.utils.data import Dataset, DataLoader
from PIL import Image
from sklearn.model_selection import GroupShuffleSplit

IMG_H, IMG_W = 256, 384          # 训练分辨率(原始为 420x580)
MEAN, STD = 0.5, 0.25            # 灰度归一化参数(按训练集统计后可替换)

def rle_decode(rle_str, shape=(420, 580)):
    if not isinstance(rle_str, str) or len(rle_str.strip()) == 0:
        return np.zeros(shape, dtype=np.uint8)
    s = np.asarray(rle_str.split(), dtype=np.int64)
    starts, lengths = s[0::2] - 1, s[1::2]
    img = np.zeros(shape[0] * shape[1], dtype=np.uint8)
    for st, ln in zip(starts, lengths):
        img[st:st + ln] = 1
    return img.reshape(shape[1], shape[0]).T

class NerveDataset(Dataset):
    """返回 (image, mask, has_nerve):image (1,H,W) float32 已归一化;
    mask (1,H,W) 取值 {0,1};has_nerve 标量 {0,1},供存在性辅助头使用。"""

    def __init__(self, df, data_root, size=(IMG_H, IMG_W), augment=False):
        self.df, self.data_root = df.reset_index(drop=True), data_root
        self.size, self.augment = size, augment

    def __len__(self):
        return len(self.df)

    def __getitem__(self, idx):
        row = self.df.iloc[idx]
        # 1) 图像: 单通道灰度,双线性缩放
        img_path = os.path.join(self.data_root, "train", row["img"] + ".tif")
        image = Image.open(img_path).convert("L")
        image = image.resize((self.size[1], self.size[0]), Image.BILINEAR)
        # 2) 掩码: 先按原始尺寸解码 RLE,再最近邻缩放(顺序不可颠倒)
        mask = rle_decode(row["pixels"], shape=(420, 580))
        m = Image.fromarray(mask * 255).resize((self.size[1], self.size[0]), Image.NEAREST)
        mask = (np.asarray(m) > 127).astype(np.float32)
        # 3) 转 Tensor
        image = (np.asarray(image, dtype=np.float32) / 255.0 - MEAN) / STD
        image = torch.from_numpy(image).unsqueeze(0)      # (1, H, W)
        mask = torch.from_numpy(mask).unsqueeze(0)        # (1, H, W)
        # 4) 增强(仅训练): 水平翻转有效,弹性形变与大幅旋转无益
        if self.augment and torch.rand(1).item() < 0.5:
            image = torch.flip(image, dims=[2]); mask = torch.flip(mask, dims=[2])
        has_nerve = torch.tensor([1.0 if mask.sum() > 0 else 0.0])
        return image, mask, has_nerve

def build_loaders(data_root, masks_csv="train_masks.csv",
                  batch_size=32, num_workers=4, seed=42):
    """构建受试者级划分的 train/val DataLoader。"""
    df = pd.read_csv(os.path.join(data_root, masks_csv))
    df["subject"] = df["img"].str.split("_").str[0].astype(int)
    df["has_nerve"] = df["pixels"].notna() & (df["pixels"].astype(str).str.len() > 0)
    gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=seed)
    tr_idx, va_idx = next(gss.split(df, groups=df["subject"]))
    tr_df, va_df = df.iloc[tr_idx], df.iloc[va_idx]
    tr_ds = NerveDataset(tr_df, data_root, augment=True)
    va_ds = NerveDataset(va_df, data_root, augment=False)   # 验证集严禁增强
    tr_loader = DataLoader(tr_ds, batch_size=batch_size, shuffle=True,
                           num_workers=num_workers, pin_memory=True, drop_last=True)
    va_loader = DataLoader(va_ds, batch_size=batch_size, shuffle=False,
                           num_workers=num_workers, pin_memory=True)
    print(f"train {len(tr_ds)} 样本 ({tr_df['subject'].nunique()} 受试者) | "
          f"val {len(va_ds)} 样本 ({va_df['subject'].nunique()} 受试者)")
    return tr_loader, va_loader

# 使用示例
# tr_loader, va_loader = build_loaders(data_root)
# for images, masks, has_nerve in tr_loader:
#     print(images.shape, masks.shape, has_nerve.shape)   # (B,1,256,384) x3
#     break

DataLoader 配置要点:

参数 建议值 理由
batch_size 16-64(原始分辨率下 8-16) 图像小,显存压力低;batch 大有助于稳定 Dice 损失
num_workers 4-8 TIFF 解码受 IO 限制,多进程可显著提速
pin_memory True 有 GPU 时加速 H2D 拷贝
drop_last 训练集 True 避免最后一个小 batch 的 Dice 统计不稳
shuffle 训练 True / 验证 False 验证集顺序固定便于复现与可视化
augment 仅训练集 验证集增强会导致指标不可比

§6.5 常见坑点

⚠️ 坑点 1:全零预测就能拿 0.6,指标高但模型没用(分类:评估误用)

问题:官方规定两集合均为空时 Dice 定义为 1,导致约 41% 的正样本率不再构成惩罚,全零提交即可获得约 0.6,远高于标准 U-Net 直训的 0.35-0.45。不理解这一机制会得出「我的模型比基线差」或「0.6 已经很不错」的错误结论。
症状:loss 正常下降但验证 Dice 停在 0.35-0.45 不动;排行榜上大量选手分数在 0.6 附近甚至更高,而自己的模型更低;可视化后发现模型几乎全部输出空掩码。
解决:1) 简单方法:先跑一次全零基线并把 0.6 记入实验记录,此后所有分数都必须与「全零基线」并列报告;2) 进阶方法:同时报告全集 Dice 与仅非空帧 Dice(只在 has_nerve=True 的帧上计算),后者才反映真实分割能力,典型数值比前者低 0.1-0.2,并报告空帧假阳性率;3) SOTA 方法:引入存在性分类头,把任务建模为「是否含神经」+「在哪儿」的双头问题,用联合损失——纯 Dice 优化会退化为全零,必须由分类头提供梯度信号。
参考:https://raghakot.github.io/2016/12/26/Ultrasound-nerve-segmentation-challenge-on-Kaggle.html ;https://github.com/raghakot/ultrasound-nerve-segmentation

⚠️ 坑点 2:约 40% 的近重复帧标签互相矛盾(分类:标签理解)

问题:官方承认采集机可能生成完全相同或高度相似的图像。社区量化显示近重复对中约 40% 存在标签冲突——同一张图一次标有神经、一次标没有。模型对这类冲突样本中的一半必然犯错,Dice 上限被结构性压低。
症状:训练 loss 无法降到很低,始终存在一批「怎么训都错」的样本;某张图的预测与掩码完全相反,但训练集中相似的图却标着相反标签;SSIM > 0.99 检测后发现大量近重复组。
解决:1) 简单方法:用平均绝对像素差粗筛——差值 < 100 视为近重复、< 1000 视为疑似;社区实证 < 100 的 63 组中 52 组掩码不一致,< 1000 的 131 组中 107 组不一致,可直接复现;2) 进阶方法:用 SSIM > 0.99 聚类(见 §6.3 代码),对冲突组执行「整组剔除」或「保留多数标签、丢弃少数」,无论哪种策略都必须保证整组落在同一划分内,否则两种标签会分别进入训练与验证集,造成泄漏;3) SOTA 方法:不删样本而改用抗噪训练——标签平滑(把 0/1 软化为 0.05/0.95)、对冲突组降权、或协同教学(co-teaching)让小网络互相筛选干净样本,并把清洗日志落盘。
参考:https://github.com/cygnus77/nerve-segmentation ;https://github.com/rnklee/ultrasound-nerve-segmentation/blob/main/README.md

⚠️ 坑点 3:按帧随机划分 = 严重数据泄漏(分类:数据泄漏)

问题:同一受试者的约 120 帧来自一次连续扫查,相邻帧的图像差异常常小于标注差异。按帧随机划分会让验证集与训练集共享大量几乎相同的图像,验证 Dice 被系统性高估。
症状:验证 Dice 达到 0.85 以上,远超官方榜单冠军 0.73226;一旦按受试者重新划分,分数骤降到 0.6-0.7;模型在自建验证集上优异但在任何新数据上崩溃。
解决:1) 简单方法:从文件名前缀解析 subject,用 GroupShuffleSplit(groups=df['subject']) 划分,并断言两集合 subject 无交集——这是本数据集唯一正确的基础划分方式;2) 进阶方法:用 StratifiedGroupKFold,以 has_nerve 分层、subject 分组做 5 折,保证每折正样本率接近 41%,报告每折均值与标准差而非单折结果;3) SOTA 方法:在受试者级划分上叠加跨受试者近重复清洗(近重复对可能跨越不同 subject),公开随机种子与清洗脚本,并把社区观察到分布异常的受试者 41-47 整体留出作压力测试集。
参考:https://www.kaggle.com/c/ultrasound-nerve-segmentation/data/ ;https://github.com/raghakot/ultrasound-nerve-segmentation

⚠️ 坑点 4:RLE 的行列顺序写反(分类:预处理陷阱)

问题:官方定义像素编号「先自上而下、再自左向右」,编号 1 对应 (1,1)、编号 2 对应 (2,1),本质是列优先。习惯用 row-major 视角写 reshape(H, W) 会得到转置或错位掩码,Dice 随机化。
症状:解码掩码形状看似合理,但可视化时呈条带状或与神经位置完全不符;提交分数接近随机;编解码往返校验不通过。
解决:1) 简单方法:做往返自检——任取一条已知 RLE,解码后再编码,比较字符串是否完全一致;§6.1 提供了可直接使用的 rle_decode / rle_encode 与断言;2) 进阶方法:记住唯一正确的转换——一维序号 reshape(W, H) 后 .T(列优先 → 行优先),编码时反向 mask.T.reshape(-1),并用已知掩码写单元测试纳入 CI;3) SOTA 方法:完全绕开 RLE——预处理阶段一次性把全部 RLE 解码为 PNG 掩码并缓存,之后只读 PNG,从根上消除编码歧义并显著提速 IO。
参考:https://www.kaggle.com/c/ultrasound-nerve-segmentation/data/ ;https://github.com/cygnus77/nerve-segmentation

⚠️ 坑点 5:无脑删除空掩码帧(分类:偏倚陷阱)

问题:看到 3,312/5,635 张图没有前景,直觉是「删掉可以提升训练效率」。但官方明确要求算法对无神经帧输出空掩码,删除等于丢掉 59% 的数据,并让模型在无神经帧上大量假阳性。
症状:有神经帧上 Dice 看起来很漂亮,但在完整验证集(含空帧)上评估时掉到 0.5 以下;可视化时模型在明显没有神经的帧上画出大块掩码。
解决:1) 简单方法:保留空帧,用样本重加权(正样本更高权重)或分层采样缓解不平衡,基线实验务必在完整验证集上评估;2) 进阶方法:加二分类「存在性」头与分割头共享编码器,联合损失 L = L_dice + λ·L_bce_exist(λ 常用 0.1-1.0),推理时存在性概率低于阈值即输出空掩码——文献中改进 U-Net 加入 RNN 上下文与存在性辅助损失后 Dice 达 0.6490,比原始方法高 0.06;3) SOTA 方法:采用「检测—分割」两阶段结构;若只在 2,323 张含神经子集上训练,必须明确声明这一口径使结果不能与全集口径的数字直接比较。
参考:https://ieeexplore.ieee.org/document/8999615/keywords ;https://stage.prophy.ai/article/143425541-Segmentation-of-Ultrasound-Brachial-Plexus-Based-on-U-Net/

⚠️ 坑点 6:掩码缩放用了双线性插值(分类:预处理陷阱)

问题:把 580×420 掩码缩放到 256×384 时若与图像共用 BILINEAR 插值,0/1 二值会被插值成 0.3、0.7 之类的小数,再阈值化会产生伪边缘与孤立像素,Dice 无端下降。
症状:训练一开始 Dice 就比社区报告值低 0.02-0.05,缩小分辨率时更明显;掩码边缘出现锯齿和碎点;反解 RLE 提交时出现大量长度为 1 的游程。
解决:1) 简单方法:掩码一律用 Image.NEAREST 或 cv2.INTER_NEAREST,缩放后做一次 > 127 重新二值化——图像可用双线性,掩码必须最近邻,二者不可混用同一 resize 函数;2) 进阶方法:优先「先解码到原始尺寸,再最近邻缩放」,并在 __getitem__ 里断言 set(np.unique(mask)) <= {0, 1},把错误挡在数据层;3) SOTA 方法:直接在高分辨率上训练(或使用保持分辨率的架构),避免任何掩码缩放,仅在推理/提交时按原始尺寸生成 RLE。
参考:https://github.com/rnklee/ultrasound-nerve-segmentation/blob/main/README.md ;https://github.com/OverFlow7/Ultrasound-Nerve-Segmentation

⚠️ 坑点 7:后处理不是可选项,但也不能乱做(分类:工程陷阱)

问题:神经区域是单连通、边界平滑的小目标,模型输出常带孤立斑点与边缘毛刺。不做后处理会白丢分数;过度腐蚀或过强开运算会把本就稀薄的神经区域整块抹掉。
症状:提交分数比本地验证低一截;不同后处理参数下分数波动 0.01-0.02;小体积神经帧(体积下界约 2,684 原始单位)被后处理完全清除,这些帧 Dice 直接归零。
解决:1) 简单方法:只做两件最安全的事——二值化后做一次核很小的中值/高斯平滑再阈值化,并删除面积小于阈值的连通域(取掩码体积下界的 1/10 至 1/5);社区实测可带来约 0.004(自测)至约 0.02(调参后)的私榜增益;2) 进阶方法:把连通域阈值做成按预测体积自适应——先由存在性头判断该帧是否有神经,有则只保留最大连通域并做形态学闭运算填小孔,在空帧占比高时收益最大;3) SOTA 方法:将后处理超参纳入验证集调优,在受试者级交叉验证上报告后处理前后的差值,并记录各超参对空帧假阳性率的影响。
参考:https://github.com/Simoncarbo/Ultras-Sound-Nerve-Segmentation---Kaggle.git ;https://github.com/cygnus77/nerve-segmentation

⚠️ 坑点 8:照搬自然图像的增强策略(分类:预处理陷阱)

问题:超声图像是斑点噪声主导的灰阶图,其强度分布与自然图像、CT、MRI 都不同。从 ImageNet 或通用分割任务搬来的增强策略(强旋转、弹性形变、色彩抖动、CutOut)在本任务上可能有害;同时本数据集的方向语义固定(颈部横断面),大幅旋转不符合解剖先验。社区实测:弹性形变帮助很小,水平翻转有效,更大角度的旋转/平移反而阻碍收敛。
症状:加入增强后验证 Dice 反而下降或训练收敛变慢;不同 epoch 之间指标波动异常大;模型对左右翻转的解剖不对称性变得敏感(例如学到「神经总在左侧」这类虚假线索)。
解决:1) 简单方法:只用水平翻转(左右镜像符合颈部解剖的左右对称性),概率 0.5;先跑通无增强基线,再逐个加入增强并观察验证集变化;2) 进阶方法:谨慎使用小幅旋转(±10° 以内)与亮度/对比度抖动(模拟不同增益设置),禁用弹性形变与随机裁剪,所有增强必须同步作用于图像与掩码且掩码变换后要重新二值化;3) SOTA 方法:用「解剖感知」的增强——沿扫查方向的轻微平移(模拟探头微动)、按受试者的强度直方图做归一化迁移,而不是用通用颜色抖动,并把增强配置纳入消融表,明确报告每项增强带来的验证集变化。
参考:https://github.com/raghakot/ultrasound-nerve-segmentation ;https://github.com/rnklee/ultrasound-nerve-segmentation/blob/main/README.md

§6.6 数据增强

增强操作 安全性 推荐参数 理由
水平翻转 ✅ 安全 p = 0.5 颈部横断面左右近似对称,社区实测有效
小幅旋转 ⚠️ 谨慎 ±10° 以内 更大角度被社区报告为阻碍收敛
小幅平移 ⚠️ 谨慎 ±5% 图像尺寸 模拟探头微动;幅度过大会移出目标
亮度/对比度抖动 ⚠️ 谨慎 ±10% 模拟不同增益设置,但本数据集无增益记录,依据不足
高斯噪声 / 斑点噪声 ⚠️ 谨慎 σ 很小 图像本身已是斑点噪声主导,叠加可能破坏纹理
弹性形变 ❌ 危险 — 社区实测对该任务帮助很小甚至有害
随机裁剪 ❌ 危险 — 神经体积小(前景占比约 2.3%),裁剪极易把目标裁掉
大角度旋转 / 垂直翻转 ❌ 危险 — 破坏颈部横断面的方向先验,导致解剖语义错误
色彩抖动 / CutOut / CutMix ❌ 危险 — 单通道灰度图无色彩空间;CutOut 可能切掉唯一的小目标
增强实现原则: 图像与掩码必须使用同一随机变换(在 __getitem__ 内以一次随机决策同时作用于两者);掩码经几何变换后必须重新二值化;验证集与测试集禁止任何增强。

§6.7 模型推荐

模型 输入分辨率 预期 Dice(自建划分,全集口径) 显存需求 适用场景
全零基线 — 约 0.60 0 必跑的参照,用于校准所有指标解读
标准 U-Net(论文默认配置) 原图 约 0.35-0.45 4-6 GB 反面教材:说明直接优化 Dice 会退化
U-Net + 存在性辅助头 原图或 256×384 0.65 量级(文献报告 0.6490) 6-8 GB 首选基线,解决退化问题
VGG-16 编码器 UNet 原图 0.70115(私榜 rank 38/973,35 epoch) 8-12 GB 竞赛级复现基线
ResNet34 + DeepLabV3+ 原图 五折集成私榜约 0.72 8-12 GB 私榜最优配置之一,解码器改进带来约 0.1 提升
ResNet34 编码器(对比 10/18/50) 原图 优于 ResNet10/18/50 8-12 GB 编码器深度消融的推荐配置
LinkNet 原图 IoU 66.27%(自建 340 张数据集对照) 4-6 GB 高吞吐场景(142 帧/秒 vs U-Net 15 帧/秒)

选型建议: 教学/入门用 U-Net + 存在性辅助头、256×384 分辨率,单卡 30 分钟内出结果;追求复现榜单用 ResNet34 + DeepLabV3+ 五折受试者级集成配合后处理;追求推理速度用 LinkNet 类结构(吞吐提升近 10 倍);方法学研究则必须保留标准 U-Net 作为「失败对照」。

§6.8 计算资源需求

场景 GPU 显存 训练时长(估) 说明
教学原型(256×384,U-Net + 辅助头,20 epoch) 单卡 T4 / GTX 1660 4-6 GB 20-40 分钟 数据全量载入内存后几乎无 IO 瓶颈
标准训练(原图,ResNet34 + DeepLabV3+,50 epoch) 单卡 RTX 3060 及以上 8-12 GB 2-4 小时 5 折交叉验证则乘以 5
竞赛级五折集成 单卡 RTX 3090 / A5000 16-24 GB 8-15 小时 含后处理调参与提交生成
仅 CPU 推理/演示 无 — 单图 < 1 s(小模型) 适合部署演示

资源要点: 本数据集是公开医学分割数据集中对硬件要求最低的一档——单张消费级显卡即可完成全部实验,甚至可在 Colab 免费层完成教学级训练。存储方面原始数据 2.3 GB、解压后 < 1 GB、缓存 PNG 掩码额外约 0.2 GB。瓶颈不在算力而在数据清洗与评估口径设计的时间投入。

§6.9 评估指标

# ============================================================
# 评估指标(必须与官方口径一致,并额外报告无空洞版本)
# ============================================================
import numpy as np
import torch

def dice_coef(pred, target, eps=1e-7):
    """单样本 Dice。官方规则: 两集合均为空时 Dice 记为 1。"""
    pred, target = (pred > 0.5).astype(np.float32), target.astype(np.float32)
    inter = (pred * target).sum()
    if pred.sum() == 0 and target.sum() == 0:
        return 1.0                              # 官方定义,务必保留此分支
    return (2 * inter + eps) / (pred.sum() + target.sum() + eps)

def iou_coef(pred, target, eps=1e-7):
    """单样本 IoU。两集合均为空时按惯例记为 1。"""
    pred, target = (pred > 0.5).astype(np.float32), target.astype(np.float32)
    inter = (pred * target).sum()
    union = pred.sum() + target.sum() - inter
    return 1.0 if union == 0 else (inter + eps) / (union + eps)

@torch.no_grad()
def evaluate(model, loader, device="cuda"):
    """返回 全集 Dice / 仅非空帧 Dice / IoU / 空帧假阳性率。
    前者可与竞赛榜单口径对比,后者才反映真实分割能力。"""
    model.eval()
    d_all, d_pos, i_all = [], [], []
    fp_empty, n_empty = 0, 0
    for images, masks, has_nerve in loader:
        logits = model(images.to(device))
        preds = (torch.sigmoid(logits) > 0.5).cpu().numpy()
        masks_np = masks.numpy()
        for i in range(preds.shape[0]):
            p, t = preds[i, 0], masks_np[i, 0]
            d_all.append(dice_coef(p, t)); i_all.append(iou_coef(p, t))
            if t.sum() > 0:
                d_pos.append(dice_coef(p, t))
            else:
                n_empty += 1; fp_empty += int(p.sum() > 0)
    return {
        "dice_full": float(np.mean(d_all)),
        "dice_pos_only": float(np.mean(d_pos)) if d_pos else float("nan"),
        "iou_full": float(np.mean(i_all)),
        "empty_frame_fp_rate": fp_empty / max(n_empty, 1),
        "n_total": len(d_all), "n_pos": len(d_pos), "n_empty": n_empty,
    }

# 解读示例: dice_full=0.68, dice_pos_only=0.50, empty_frame_fp_rate=0.30
#   → 模型在含神经帧上分割仍不理想(0.50),且空帧上有 30% 假阳性;
#     仅看 dice_full 会误以为模型已接近榜单水平。

指标使用规范(本数据集特有):

报告项 是否必须 说明
全集 Dice ✅ 必须 与竞赛榜单可比,但会被空帧「免费分数」抬高
仅非空帧 Dice ✅ 强烈建议 反映真实分割能力,通常比全集低 0.1-0.2
IoU ⚠️ 可选 本数据集基准多用 Dice;引用文献中的 IoU 时注意口径差异
空帧假阳性率 ✅ 强烈建议 直接暴露「模型是否学会输出空掩码」
按体积分层的 Dice ⚠️ 可选 掩码体积跨度约 6.5 倍,分层报告能揭示小目标上的失败
每折标准差 ✅ 交叉验证时必须 47 名受试者规模下折间波动大,单折结果不可靠

§6.10 MLOps 笔记

环节 建议 理由
数据版本 记录下载日期与文件数校验(5,635 / 5,508),并保存 train_masks.csv 的哈希 官方无 DOI、无版本号,唯一可追溯的就是快照本身
清洗与划分可复现 近重复组列表、冲突样本清单、被剔除文件、subject → fold 映射表全部落盘为 JSON,固定随机种子 样本数变化必须可解释;官方无划分,自建划分必须可被第三方精确重建
指标口径 训练日志固定输出 4 个数字(全集 Dice / 非空帧 Dice / IoU / 空帧假阳性率) 单一 Dice 在本数据集上会误导决策
模型检查点 按「非空帧 Dice」而非「全集 Dice」选择最佳权重 全集 Dice 会被空帧主导,选出的可能是在正样本上更差的模型
提交格式 生成后逐行校验:行数与 sample_submission.csv 一致、顺序一致、RLE 与实际掩码往返一致 格式错误会直接判 0,且难以察觉
监控漂移 无外部数据源可监控;建议监控「预测非空率」与训练集正样本率(约 41%)的偏离 预测非空率突然升高通常意味着模型退化为过分割
复现声明 论文中必须写明:自建划分方式、清洗策略、是否使用官方原始分辨率、是否后处理 本数据集无统一评测协议,缺一项则结果不可比

§7 质量评估与局限性

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解方式
选择偏倚(受试者) 仅 47 名受试者,来自单一临床联盟;无纳入标准说明,可能为便利样本 🔴 高 视为方法学基准而非人群代表样本;不做任何人群推断
选择偏倚(帧) 仅标注「确信存在臂丛标志」的帧,难辨识帧被统一编码为无神经,标签分布反映标注员置信度而非真实解剖 🔴 高 用存在性分类头显式建模「有/无/不确定」;报告空帧假阳性率
标签噪声与重复计数 官方承认存在噪声、伪影与潜在标注错误且不修正;采集机可能生成完全相同或高度相似的帧,同一解剖内容被多次计入,等效于样本量虚高 🔴 高 近重复检测与清洗(SSIM > 0.99 或像素差阈值)、标签平滑、冲突组整组降权或剔除,并落盘清洗日志
人口学缺失偏倚 无年龄、性别、BMI、种族信息,无随访与临床结局,无法评估亚组差异或任何预后相关价值 🔴 高 明确声明不支持公平性审计与预后研究;不做亚组结论
设备与协议偏倚 无探头型号、频率、增益、深度记录;无法评估设备域漂移与采集协议差异 🟠 中高 明确声明外推限制;跨设备泛化须另采数据验证
单模态/单解剖区域偏倚 仅 B 模式灰度、仅颈部肌间沟与锁骨上区域、仅臂丛神经 🟠 中 定位为单模态单区域基准,不宣称多模态或其他解剖部位能力
分布偏移(受试者 41-47) 社区报告受试者 41-47 的行为与官方测试分布不同 🟠 中 将其整体留出作压力测试集,单独报告该子集表现
度量偏倚 空-空 Dice = 1 的规则使全零基线约 0.6,指标与实际分割质量解耦 🔴 高 同时报告仅非空帧 Dice、空帧假阳性率、按体积分层结果
参数量化偏倚 正样本率 41% 与前景占比 0.949%/2.3% 存在多套口径,混用会误导 🟡 中 引用时必须注明分母定义与来源

§7.2 标注质量评估

可用证据的完整梳理:

证据项 内容 来源性质
官方自评 存在噪声、伪影与潜在标注错误;个别错误不修正;采集机可能生成完全相同或高度相似的图像 官方数据页
标注者 经专家培训的标注员;仅在确信存在 BP 标志时标注 官方数据页
社区量化(冲突率) 近重复对中约 40% 标签不一致 2016 年社区复盘
社区量化(分组计数) 像素差 < 100:63 组中 52 组不一致;< 1000:131 组中 107 组不一致 复现仓库
社区量化(去重代价) SSIM > 0.99 去重后剩余可用训练集明显缩小 复现仓库
一致性指标 无任何官方 ICC / Kappa / Dice 报告 —

综合判断: 本数据集的标注质量属于「专家参与但无质量控制闭环」的层级。其最突出的问题是近重复帧的标签矛盾——在普通数据集里重复图像通常标签一致、只是冗余,而在这里重复暴露了标注的不确定性。从建模角度看,这意味着 Dice 的可达上限被结构性压低:任何模型都无法同时在两张几乎相同却标签相反的图像上都正确。这也解释了为什么榜单第 1 名(0.73226)到第 10 名(0.71625)只差 0.016——剩余误差的很大一部分是不可学习的噪声。

使用建议: 若研究目标涉及标注质量本身,本数据集是极好的素材;若目标是「逼近某个精度上限」,请先做近重复清洗并声明策略,否则报告的分数不可解释。

§7.3 泛化性讨论

场景 失效风险 证据
换到其他临床中心的数据 🔴 极高 无多中心数据、无中心标识;综述引用的多组独立 IoU(64.9% / 72.0% / 73.3%)彼此差异大,说明结果强烈依赖划分与数据子集
换到其他超声设备/探头或采集协议 🔴 极高 无设备型号与成像参数记录,无法做域适应研究;深度、增益、探头压力均会影响神经可见性与灰度
换到其他神经(如坐骨神经、股神经)或其他身体部位 🔴 高 仅臂丛标注,解剖先验(位置、形态、回声特征)完全不同;模型可能依赖「扇形视窗中的固定位置」而非纹理特征
实时临床引导场景 🔴 高 数据集为静态帧,无时序、无标定、无穿刺针信息
与病理或结局相关的任务 🔴 极高 数据集完全不支持(无随访、无结局)
同分布内的自建划分(受试者级) 🟢 低 这是唯一被支持的使用方式;社区复现分数集中(私榜 0.69-0.73)印证内部稳定性

泛化性结论: 本数据集是一个封闭的方法学靶场——在内部按正确方式评估时结果稳定且可复现,但对任何形式的外部迁移几乎不提供保障。论文中应避免「泛化性好」「鲁棒性强」等表述,除非配合自采的多中心数据。

§7.4 伦理考量

条目 评估
患者隐私 图像为去标识化帧,无姓名、无日期、无医院标识、无 DICOM 头;仅保留 1-47 的受试者序号。官方未发布正式去标识化报告,但释放帧中无烧录文字,实践中无法回溯身份
知情同意 未公开说明;通常假定赞助方已获得覆盖「用于算法研究」的同意,但本数据集无任何公开文档确认
伦理审查 无 IRB 声明、无伦理批号公开
商业利益 竞赛奖金总额 100,000 美元,赞助方为疼痛管理导管相关商业机构,存在将公开数据转化为商业产品研发的动机
双用途风险 低——任务为解剖结构分割,不涉及武器、监控或人群预测
数据再分发 竞赛规则限制再分发;社区镜像(Google Drive、HuggingFace)的合法性存疑,其中 HuggingFace 镜像还擅自改写了许可
临床误用风险 🟠 中高——若直接以本数据集训练的模型输出作为神经阻滞临床导航依据,可能造成伤害。本页面在 §1、§2、§7 多处明确禁止此类外推

合规建议: 使用前应(1)确认竞赛规则中关于非商业使用与再分发的条款;(2)不转发数据本身,只转发官方获取链接;(3)在方法章节明确声明未做临床验证。

§7.5 公平性评估

结论:本数据集不支持公平性评估。 这不是评估结果,而是数据缺失导致的评估不可能。

公平性维度 所需字段 本数据集是否具备 可否用代理变量推断
年龄 患者年龄或年龄段 ❌ 否——图像中无骨龄、无解剖成熟度标注
性别 患者性别 ❌ 部分可猜(颈部解剖与体表标志),但不可靠且不应用于结论
体型/BMI 身高体重 ❌ 否——皮下脂肪厚度可影响声学穿透,但无法量化
种族/族裔 自述种族 ❌ 否
机构/地区 采集中心标识 ❌ 否——仅 1-47 的受试者序号,与地理无关
设备与操作者 设备型号、操作者身份与年限 ❌ 否——仅知分辨率统一

可以做的替代分析: 按受试者分组评估模型误差分布,观察是否存在某些受试者系统性表现极差(例如受试者 41-47 被社区报告为分布异常)。这在方法学上等价于「按受试者做误差分解」,可揭示站点/个体层面的异质性,但不等于人口学意义上的公平性分析——不能据此声称「模型对某类人群更公平」。若论文需要公平性结论,必须换用带人口学字段的超声数据集,或在本地采集中补齐这些字段。

§7.6 数据漂移提示

漂移类型 是否存在 说明与应对
时间/设备/协议漂移 无法评估 无检查日期(仅 2016 发布年份)、无型号与成像参数、无协议文档;不同受试者间的扫查深度与角度差异不可量化
标签漂移 已知存在 官方承认部分图像完全相同或高度相似,标签可能矛盾;这不是时间漂移,而是标注一致性缺陷
受试者间漂移 ✅ 已观察到 社区报告受试者 41-47 的行为与官方测试分布不同;建议将其留出做压力测试
使用侧漂移 🔴 高危 模型在 2016 年的数据上训练,若用于今日的设备与协议,输入分布必然改变;本数据集无法帮助诊断这类漂移
下游任务漂移 🔴 高危 原任务的商业动机(疼痛管理导管)若变化,标签的语义价值也会改变;本数据集无版本更新机制

监控建议: 部署任何基于本数据集的模型时,应监控三个量——(1)输入灰度直方图与训练集分布的距离(如 KL 散度);(2)预测非空率(训练集基准约 41%);(3)预测掩码体积中位数(训练集基准 6,976 原始单位)。三者任一显著偏离即触发重新评估。

§7.7 DAIMS 24 项数据就绪度评估

# 检查项 状态 说明
1 宽格式/长格式 ✅ 图像以文件存储、标注以 CSV 长表(img,pixels)存储,结构清晰无歧义
2 唯一标识 ⚠️ 训练集 subject_imageNum 可唯一标识;但测试集无受试者标识,仅帧序号,无法重建受试者级唯一键
3 特殊字符 ✅ 文件名仅含数字与下划线;RLE 为空格分隔整数,无编码风险
4 重复行 ❌ 官方承认存在完全相同或高度相似的图像;社区量化近重复对中约 40% 标签冲突,等效于重复行且内容矛盾
5 缺失编码 ✅ 空掩码用空字符串明确表示,语义统一,不存在 NA/空串混用
6 标签标识 ✅ 每张训练图在 CSV 中恰好一行,可完整覆盖 5,635 张;标签为二值掩码,无类别歧义
7 罕见类分组 ❌ 前景像素占比仅约 0.949%(全集)/ 约 2.3%(正样本内),且掩码体积跨度约 6.5 倍;无罕见类分组或分层标注
8 偏倚评估 ❌ 无官方偏倚评估文档;无人口学、无设备、无中心信息,无法开展定量偏倚分析
9 数据字典 ⚠️ 官方仅给出字段名与 RLE 规则,无正式数据字典;本页面 §4.1 提供了补充字典
10 信息性缺失解释 ⚠️ 空掩码的「不确定 vs 确实没有」两种语义未做区分,属未解释的信息性缺失
11 设备记录 ❌ 无探头型号、频率、增益、深度记录;仅知输出为 580×420、8 bit、LZW TIFF
12 共线性 ➖ 不适用(图像数据集,无表格型特征共线性问题)
13 编码映射 ➖ 不适用(无 ICD/SNOMED 编码字段;本页面 §2 的映射为学术补充而非数据字段)
14 时间戳处理 ❌ 无检查日期、无帧时间戳、无帧率;文件名序号仅为弱顺序信号
15 划分建议 ❌ 官方无验证集、无划分文档;测试集真值永久缺失,划分不可复现
16 泄漏讨论 ⚠️ 官方声明训练与测试受试者无重叠(正确的受试者级切分),但未讨论同受试者相邻帧与跨受试者近重复的泄漏风险
17 标签分布 ✅ 正样本 2,323 / 空掩码 3,312(41% / 58.8%)清晰可得;前景占比有多套口径,需注明分母
18 测量偏倚 ❌ 无测量学信息(无标定、无重复测量、无操作者记录),无法评估测量偏倚
19 外部验证建议 ❌ 无任何外部验证集或跨中心数据;官方未给出验证建议
20 版本记录 ⚠️ 仅有 2016 单一快照,无版本号、无变更日志;快照本身即为最终版本
21 预处理脚本 ⚠️ 无官方预处理脚本或基线代码;社区实现分散在多个 GitHub 仓库,无统一标准
22 合规要求 ❌ 许可表述为「Subject to Competition Rules」,含义模糊;第三方汇总记为非商业禁再分发,另有文献称「无使用限制」,三种表述冲突;无 DOI
23 多模态对齐 ➖ 不适用(单一模态,无配对模态数据)
24 去标识化 ⚠️ 图像已剥离 DICOM 头与患者标识,仅保留受试者序号;但无正式去标识化报告,仅有「无烧录文字」这一实践性保证

DAIMS 评分:9.0 / 24

评分解读:偏低(不足 40%)——数据本身「干净、小而规整」(唯一标识部分可用、缺失编码统一、标签分布清晰),但文档、划分、合规与偏倚评估四项集体缺位。4 个 ✅ 集中在数据格式层面,9 个 ⚠️ 中的多数是「部分信息有、关键部分没有」,5 个 ❌ 集中在治理层面(重复行、偏倚、设备、划分、合规),另有 3 项 ➖ 为不适用的表格型检查。这一分布精确刻画了它的性质:是一个非常优秀的算法练习场,而不是一个合格的工程数据资产。

对你意味着什么:如果你是研究者或工程师,需要把上面的评分翻译成具体动作——

  1. 收到数据后第一件事是去重,不是训练。用 MAE < 100 / < 1000 做粗筛、SSIM > 0.99 做聚类,把冲突组整组处理并落盘日志。跳过这一步,你后面所有分数都不可信(对应 #4、#10)。
  2. 划分必须自己写,并且必须按受试者。用 GroupShuffleSplit(groups=subject) 或 StratifiedGroupKFold,公开种子与折映射表。官方没有划分可用(对应 #15、#16、#21)。
  3. 不要把测试集当作评测集——它没有真值,永远不会发布。所有报告的分数都必须写明是自建划分上的结果(对应 #15)。
  4. 合规上保守行事:默认「非商业、不再分发」,只转发官方链接;若使用社区镜像,不要把镜像自设的许可当作原始许可(对应 #22)。
  5. 不要做人口学或公平性结论(对应 #8);不要声称跨设备/跨中心泛化(对应 #11、#19)。
  6. 报告指标时至少给 4 个数字:全集 Dice、仅非空帧 Dice、IoU、空帧假阳性率。单一 Dice 在这个数据集上会被空帧「免费分数」严重误导(对应 #7、#17)。

§7.8 外部验证矩阵

本数据集没有官方的外部验证集(测试集真值从未公开),因此下表中「外部」指的是本数据集之外、由第三方独立开展并已发表的评估。所有条目均来自公开可查的同行评审文献或稳定的第三方仓库说明。

外部数据集/场景 来源机构 评估任务 性能指标 相对内部测试集变化 关键发现
自建 340 张三人标注颈部超声集 IEEE 论文(独立采集) 臂丛神经二值分割 U-Net IoU 68.50% / LinkNet 66.27% 不可与 Kaggle 私榜直接比较(IoU vs Dice、数据集不同) 自建集上 U-Net 精度更高但速度仅 15 帧/秒,LinkNet 达 142 帧/秒——揭示了本任务中精度-吞吐的真实权衡,而这在静态榜单上完全看不到
剔除无神经帧后的 2,323 张子集(低内存 CNN 研究) IEEE 论文 低内存条件下的臂丛分割 以重采样至 128×256、80/20 划分(1,858/465)评估 口径改变:从集合 5,635 缩至正样本子集,Dice 定义随之变化 证明「只在含神经帧上训练」是小内存场景的可行路径,但该研究的分数不能与全集口径的榜单数字并列比较
综述汇总的多项独立评估(U-Net 路线) 综述论文(2025 前后) 臂丛神经分割 Y. Wang et al. 2021:5,635 张、420×580、U-Net,IoU 64.9%;J. van Boxtel et al. 2021:9,541 张、U-Net,IoU 72.0% 分散在不同数据量与分辨率设定上 同一数据集上的 IoU 报告值可相差 7 个百分点以上,且「9,541 张」这一图像数明显不等于官方 5,635 训练图,说明后续研究普遍使用自建的扩充或重划分口径——跨论文比较极其危险
综述汇总(CNN 路线) 综述论文 臂丛神经分割 C. Liu et al. 2018:5,271 张、425×575、CNN,IoU 73.3% 图像数 5,271 与官方 5,635 不一致 再次印证图像数与分辨率口径差异普遍存在;引用这些数字时必须同时引用其数据设定
Kaggle 竞赛私榜(官方唯一权威"外部"参照) Kaggle 官方 臂丛神经二值分割 冠军 0.73226;第 10 名 0.71625 — 约 80% 测试数据上计算;全零基线约 0.6。竞赛结束后测试真值从未公开,该榜无法被后继研究复现或续写

矩阵的三条结论:

  1. 没有真正的跨机构外部验证。 上表中的「外部」都是同一数据的不同切法或独立小规模采集,不存在「在 A 中心训练、在 B 中心验证」的研究。这直接限制了任何泛化性声明的强度。
  2. 口径差异比方法差异更大。 IoU 从 64.9% 到 73.3%、图像数从 5,271 到 9,541,说明后续文献对「这个数据集是什么」本身就存在不同理解。引用这些数字时,必须连同其图像数、分辨率、指标定义一起引用。
  3. 本数据集的可靠外部锚点只有官方榜单。 0.73226(冠军)与约 0.6(全零基线)是两个稳固的可引用数字,其余都应带口径说明。

§8 基准性能与生态

§8.1 排行榜

官方私有榜前十(约 80% 测试数据)

排名 模型/参赛者 性能(mean Dice) 年份 关键技术 完整引用 代码
1 AbdulWahab 0.73226 2016 未公开技术细节(参赛者私有方案) Kaggle, 2016, Ultrasound Nerve Segmentation Leaderboard. https://kaggle.com/c/ultrasound-nerve-segmentation/leaderboard —
2 DavidGbodiOdaibo 0.72982 2016 未公开技术细节 同上 —
3 serg14 0.72898 2016 未公开技术细节 同上 —
4 Team Jetlag 0.72511 2016 未公开技术细节 同上 —
5 nagadomi 0.72499 2016 未公开技术细节 同上 —
6 bobutis 0.72338 2016 未公开技术细节 同上 —
7 SYSU_洪荒之力 0.72184 2016 未公开技术细节 同上 —
8 newell 0.72142 2016 未公开技术细节 同上 —
9 Guido Zuidhof 0.71680 2016 未公开技术细节 同上 —
10 Vladimir Iglovikov 0.71625 2016 未公开技术细节 同上 —

注:前十名共跨越 0.016 分(0.73226 → 0.71625),且全部未公开方法细节——本榜单只能作为水平参照,不构成可复现的技术路线。

关键基线(非榜单,但必须并列理解)

参照系 性能 说明 引用
全零预测(输出全空掩码) 约 0.60 由「空-空 Dice = 1」与约 41% 正样本率共同决定 Raghakot, 2016 社区复盘
标准 U-Net(原始配置直接优化 Dice) 0.35-0.45 低于全零基线,是本数据集最著名的反直觉现象 Raghakot, 2016
VGG-16 系 UNet(35 epoch) 0.70115(私榜 rank 38/973) 社区可复现基线 OverFlow7 复现仓库
ResNet34 + DeepLabV3+ 五折集成 约 0.72(私榜) 解码器改进相对 U-Net 带来约 0.1 提升;ResNet34 编码器优于 ResNet10/18/50 rnklee 复现仓库
Hypercolumns 方案 0.691(rank 57/923) 第三方记录,称参赛队伍为 923 支 Simoncarbo 复现仓库
改进 U-Net(RNN 上下文 + 存在性辅助损失) 0.6490(比原始方法高 0.06) 学术改进路线,非竞赛配置 Prophy 收录论文

⚠️ 数值可比性警告(必读):上表数字不可直接互相比较,原因有四——

  1. 公开榜 vs 私有榜:私榜按约 80% 测试数据计算,公榜用其余约 20%,两者数值不可混用。
  2. 训练数据口径不同:部分参赛者使用外部超声数据做预训练,部分只用官方 5,635 张;同一分数在不同数据条件下含义不同。
  3. 是否使用测试集信息不同:竞赛允许对测试图像做无监督适配(如伪标签、BN 统计更新),这会显著影响分数。
  4. 评测集不可复现:测试集真值从未公开,所有竞赛分数都无法被第三方重跑验证;后续学术论文(如 IoU 64.9%/72.0%/73.3%)使用的是自建划分,与榜单口径不同。

正确的引用方式:引用榜单数字时写「Kaggle 2016 私有榜第 1 名 0.73226」;引用学术数字时写「XX et al., YYYY 在其自建的 N 张、H×W 划分上报告 IoU Z%」。绝不要写「本数据集 SOTA 为 0.73226」——那会被理解为存在一个可复现的官方评测集,而事实上没有。

§8.2 SOTA 总结与选型建议

目标 推荐方案 预期水平 关键条件
教学/入门 U-Net + 存在性辅助头,256×384 分辨率 全集 Dice 0.6 量级 必须按受试者划分,必须同时报告仅非空帧 Dice
复现竞赛水平 ResNet34 + DeepLabV3+,五折受试者级集成 全集 Dice 0.72 量级 需要近重复清洗与后处理(平滑 + 删小连通域)
高吞吐部署 LinkNet 或轻量 U-Net IoU 66% 量级 @ 142 帧/秒 速度优先,精度可接受小幅下降
标签噪声研究 任意骨干 + 标签平滑/降权/协同教学 取决于噪声建模策略 必须以近重复冲突组为实验对象并公开清洗日志
方法学对照 标准 U-Net(原始配置)作失败基线 0.35-0.45 用于说明「纯 Dice 优化会退化」这一现象

三点选型提醒: 解码器的收益远大于编码器微调(DeepLabV3+ 相对 U-Net 解码器带来约 0.1 提升,而 ResNet10→50 的差异远小于此);存在性建模不是可选项(任何不处理「有无神经」的纯分割方案都会退化为全零预测);后处理收益稳定但有限(约 0.004 至约 0.02),不要指望它拯救一个未解决退化问题的模型。

§8.3 官方评测协议

项目 官方规定
指标 mean Dice coefficient(逐图像计算后取平均);预测与真值均为空时 Dice 记为 1
提交格式 CSV,每张测试图一行,img,pixels;pixels 为 RLE
RLE 像素编号 1-based,先自上而下、再自左向右(编号 1 = (1,1),编号 2 = (2,1))
提交完整性 每张测试图必须恰好出现一次,顺序与 sample_submission.csv 一致
公有榜 / 私有榜 公有榜约 20% 测试数据;私有榜约 80%,为最终排名依据
时间节点 首次提交/团队合并截止 2016-08-11;最终提交截止 2016-08-18;竞赛结束 2016-08-19
数据使用限制 竞赛规则允许使用外部数据(需声明);允许对测试图像做无监督使用
当前可用性 竞赛已结束,提交入口关闭;测试真值从未公开,协议不可复现
数据集 模态 规模 与本数据集的关系
BUSI(乳腺超声图像数据集) 乳腺 B 模式超声 780 张 同为超声分割/分类,但规模更小且带良恶性病理标签;适合做「分割 + 分类」联合任务对照
CAMUS(心脏超声数据集) 心尖四腔心超声 500 例 / 约 2,000 帧 同模态但前景占比高、边界清晰,可对比「前景占比」对 Dice 行为的影响
MSD(Medical Segmentation Decathlon) 多模态(CT/MRI) 2,633 例(10 任务) 提供标准的体素级评测流程,可作为「有官方划分」的对照
ISIC 2018(皮肤病变分割) 皮肤镜彩色图像 10,015 张 标签质量高、前景显著,与本数据集构成「干净标签 vs 含噪标签」对照
BraTS(脑肿瘤分割)/ KiTS(肾脏肿瘤分割) MRI / 腹部 CT 历年累计约千例 / 300 例 多区域或多模态标注;KiTS 带官方划分与在线评测,是「本数据集所缺的那类工程化」的代表

§8.5 关键论文与社区文献

  1. Montoya A., Sterling D., Hasnin, kaggle446, shirzad, Cukierski W., yffud. (2016). Ultrasound Nerve Segmentation [Competition]. Kaggle. 本数据集的唯一官方出处;官方 BibTeX 署名即为以上七位。贡献:定义任务、指标、RLE 格式与评测流程,并明确声明标注仅针对确信含臂丛的帧。无 DOI。https://www.kaggle.com/c/ultrasound-nerve-segmentation
  2. Ronneberger O., Fischer P., Brox T. (2015). U-Net: Convolutional Networks for Biomedical Image Segmentation. MICCAI. DOI: 10.1007/978-3-319-24574-4_28. 本数据集上使用最广的骨干架构来源。贡献:提供编码器-解码器 + 跳连的标准分割范式,也是理解「标准 U-Net 反而低于全零基线」这一现象的参照点。
  3. Stanford CS230 (2020). Ultrasound Nerve Segmentation Project Report. 贡献:给出本数据集上最常被引用的前景占比统计——全集约 0.949%、正样本内约 2.3%、空掩码 3,312 张。https://cs230.stanford.edu/projects_spring_2020/reports/38846660.pdf
  4. Raghakot. (2016). Ultrasound nerve segmentation challenge on Kaggle [Blog]. 贡献:引用最广的社区复盘,首次系统量化「全零基线约 0.6」与「标准 U-Net 0.35-0.45」的反差,并指出近重复帧约 40% 标签冲突与「需引入存在性分类头」的结论。https://raghakot.github.io/2016/12/26/Ultrasound-nerve-segmentation-challenge-on-Kaggle.html
  5. Liu C. et al. (2018) / Wang Y. et al. (2021) / van Boxtel J. et al. (2021)(均经综述收录). 贡献:分别报告 IoU 73.3%(5,271 张、425×575、CNN)、64.9%(5,635 张、420×580、U-Net)、72.0%(9,541 张、U-Net),共同暴露了后续研究在图像数与分辨率口径上与官方的不一致。https://europepmc.org/article/view/PMC12758884/table/jmu.jmu_61_24-t005/version/1
  6. 低内存 CNN 臂丛分割研究 (IEEE, 2020). 贡献:采用剔除无神经帧后的 2,323 张子集、重采样至 128×256、80/20 划分(1,858/465),证明资源受限条件下的可行性,并展示「口径改变导致分数不可比」的实例。https://ieeexplore.ieee.org/document/8999615/keywords
  7. U-Net with RNN context and existence loss (Prophy 收录). 贡献:报告 Dice 0.6490、相对原始方法提升 0.06,是「存在性辅助损失」路线的关键证据,对应 §6.5 坑点 1 与坑点 5 的 SOTA 解法。https://stage.prophy.ai/article/143425541-Segmentation-of-Ultrasound-Brachial-Plexus-Based-on-U-Net/
  8. 自建 340 张三人标注数据集的 12 模型对比 (IEEE, 2022). 贡献:同一评估条件下对比 12 个模型,报告 U-Net IoU 68.50%(15 帧/秒)与 LinkNet 66.27%(142 帧/秒),为「精度 vs 吞吐」权衡提供直接证据。https://ieeexplore.ieee.org/document/9849660/keywords

§8.6 社区活跃度

指标 数值 来源/时间
竞赛参赛者 1,593 名参赛者 / 1,022 名参与者 / 922 支队伍 官方竞赛页(快照时点)
提交总量 14,316 次 官方竞赛页
奖金总额 100,000 美元(1st 50,000 / 2nd 30,000 / 3rd 20,000) 官方竞赛页
竞赛存续期 2016-05-19 至 2016-08-19 官方竞赛页
竞赛后活跃度 中——持续被综述与方法学论文引用,但无官方维护;无官方仓库 持续观察
社区实现 分散在多个 GitHub 仓库(Keras / PyTorch / fastai 路线均有) GitHub
争议/讨论焦点 全零基线约 0.6 的指标合理性、近重复帧标签冲突、测试集无真值 社区博客与仓库 README

活跃度判断: 本数据集属于「竞赛期极热、赛后退潮为长期教学素材」的类型。竞赛期间 922 支队伍、14,316 次提交说明参与度很高;赛后官方零维护,但因为它同时具备「小规模」「指标有陷阱」「标签有噪声」三个特点,仍被持续用于教学与含噪学习研究。它的价值不随时间衰减,但也不会获得任何更新、修复或扩展。

§8.7 生态快照

资源 类型 链接 Star / 规模(截至 2026-09) 推荐理由
Kaggle 官方竞赛页(含数据与方法讨论) 官方 https://www.kaggle.com/c/ultrasound-nerve-segmentation 922 支参赛队伍 / 14,316 次提交 唯一权威出处;数据、评测协议、榜单与讨论均在此
raghakot/ultrasound-nerve-segmentation GitHub 代码 https://github.com/raghakot/ultrasound-nerve-segmentation 社区 Keras 实现,含存在性分类头 「全零基线与 U-Net 退化」的最佳入门解读,代码可直接运行
cygnus77/nerve-segmentation GitHub 代码 https://github.com/cygnus77/nerve-segmentation 社区 PyTorch 实现 + 近重复量化脚本 提供 63 组 / 131 组近重复冲突的可复现统计,是去重工作的直接参照
rnklee/ultrasound-nerve-segmentation GitHub 代码 https://github.com/rnklee/ultrasound-nerve-segmentation 社区实现,含 SSIM 去重与 DeepLabV3+ 复盘 同时提供「标签清洗代价」与「解码器改进收益」两条关键证据
OverFlow7/Ultrasound-Nerve-Segmentation GitHub 代码 https://github.com/OverFlow7/Ultrasound-Nerve-Segmentation VGG-16 系 UNet 复现 给出可对照的竞赛季基线(私榜 0.70115,rank 38/973)
Simoncarbo/Ultras-Sound-Nerve-Segmentation—Kaggle GitHub 代码 https://github.com/Simoncarbo/Ultras-Sound-Nerve-Segmentation---Kaggle 社区实现 + 后处理调参记录 后处理增益(约 0.004-0.02)与 Hypercolumns 方案记录的来源
jwliao1209/Ultrasound-Nerve-Segmentation GitHub 代码 https://github.com/jwliao1209/Ultrasound-Nerve-Segmentation 社区实现,附镜像说明 记录社区 Google Drive 镜像的使用方式(便利性与合规风险并存)
gymprathap/Nerve-Ultrasound-Image-Segmentation HuggingFace 数据集镜像 https://huggingface.co/datasets/gymprathap/Nerve-Ultrasound-Image-Segmentation 16,778 行 / 2.26 GB 免注册、可一行加载;注意其自设许可与原始竞赛规则冲突
openmedlab/Awesome-Medical-Dataset 数据集汇总 https://github.com/openmedlab/Awesome-Medical-Dataset/blob/main/resources/UNS.md 医学数据集索引 提供本数据集的第三方规模与标签统计(5,635/5,508、2,323 正样本等)
ultrasound-open-access.nidusai.ca 第三方评测站 https://ultrasound-open-access.nidusai.ca/ 独立评测记录 明确标注「无关联 DOI」,并记录受试者编号范围 1-47

§9 相关资源与引用

§9.1 官方资源

资源 链接 说明
竞赛主页 / 数据页 https://www.kaggle.com/c/ultrasound-nerve-segmentation 竞赛描述、时间线、奖金与规则;下载入口、文件清单、标注与 RLE 格式说明、官方质量声明
排行榜 https://www.kaggle.com/c/ultrasound-nerve-segmentation/leaderboard 公有榜与私有榜成绩;私有榜按约 80% 测试数据计算
讨论区 https://www.kaggle.com/c/ultrasound-nerve-segmentation/discussion 参赛者关于指标、空掩码与近重复的讨论

§9.2 教程与社区资源

资源 链接 用途
Raghakot 复盘博客 https://raghakot.github.io/2016/12/26/Ultrasound-nerve-segmentation-challenge-on-Kaggle.html 理解全零基线 0.6 与 U-Net 0.35-0.45 的最佳入门材料
Keras 实现仓库 https://github.com/raghakot/ultrasound-nerve-segmentation 存在性分类头实现范式
近重复量化仓库 https://github.com/cygnus77/nerve-segmentation 去重脚本与冲突组统计
DeepLabV3+ 复盘仓库 https://github.com/rnklee/ultrasound-nerve-segmentation SSIM 去重与解码器对比
Stanford CS230 报告 https://cs230.stanford.edu/projects_spring_2020/reports/38846660.pdf 前景占比等关键统计的来源

§9.3 引用指南

若需引用本页面描述的数据集,请使用官方竞赛条目(Kaggle 未提供 DOI):

@misc{ultrasound-nerve-segmentation,
  author       = {Anna Montoya and DJ Sterling and Hasnin and kaggle446 and
                  shirzad and Will Cukierski and yffud},
  title        = {Ultrasound Nerve Segmentation},
  year         = {2016},
  howpublished = {Kaggle Competition},
  publisher    = {Kaggle},
  note         = {Competition held 2016-05-19 to 2016-08-19; no DOI assigned},
  url          = {https://kaggle.com/competitions/ultrasound-nerve-segmentation}
}

若需引用本页面的分析框架与整理内容:

@misc{qianfanghub_us_nerve_seg,
  author       = {千方病案医学编辑部},
  title        = {US Nerve Segmentation(神经超声分割)AI-Ready Wikipedia},
  year         = {2026},
  publisher    = {千方病案医数集},
  note         = {医学审核与数据工程交叉审核;审核日期 2026-09-05},
  url          = {https://www.qianfanghub.com/ai-ready-dataset/us-nerve-seg/537}
}

引用注意事项:

  1. 不要给本数据集编造 DOI。第三方评测站明确标注其无关联 DOI;任何带 DOI 的引用都是错误的。
  2. 报告性能时必须写明口径:私有榜 Dice 还是自建划分 Dice、图像数、分辨率、是否使用存在性辅助头、是否做后处理、是否去重。
  3. 不要把全零基线 0.6 当作「有意义的下限」而与其他数据集的随机基线类比,它是本数据集特有的指标定义产物。
  4. 引用前景占比时注明来源与分母:0.949%(全集)、2.3%(正样本内)、3.2%(另一独立口径)三者不可混用。

§10 AI 使用声明卡

§10.1 AI 模型使用

项目 内容
内容生成 大型语言模型辅助撰写初稿与结构化整理
事实核验 全部硬事实以 FACTS.md 记录的公开来源为准逐条比对
代码生成 §6 全部 Python 代码由 AI 生成,经逻辑审查与接口一致性检查
图表与公式 仅使用 Markdown 表格与文本示意,未生成图像类内容
人工介入范围 结构设计、事实取舍、医学表述审核、合规判断均由人工完成

§10.2 AI 参与范围

AI 在本页面的工作中负责:(1) 从 Kaggle 官方竞赛页、数据页、排行榜、社区复盘博客与 GitHub 复现仓库中整理结构化信息,并逐条落到 FACTS.md;(2) 生成 §6 的 RLE 编解码、近重复检测、Dataset/DataLoader 与评估指标代码;(3) 系统化组织 §6.5 的 8 个坑点与 §7.1 偏倚表;(4) 将 §7.7 的 DAIMS 24 项检查逐项映射到本数据集的真实证据;(5) 执行 G1/G2/G3 排版规范检查与中英文格式标准化;(6) 构建 §C 统一 JSON-LD @graph。

§10.3 输入来源

# 来源 类型 用途
1 https://www.kaggle.com/c/ultrasound-nerve-segmentation 官方竞赛页 竞赛时间线、奖金、参赛规模、任务定义、标注规则
2 https://www.kaggle.com/c/ultrasound-nerve-segmentation/data/ 官方数据页 数据规模、文件格式、命名规则、标注质量声明、许可
3 https://kaggle.com/c/ultrasound-nerve-segmentation/leaderboard 官方排行榜 私有榜前十成绩与私有榜计算方式
4 https://github.com/openmedlab/Awesome-Medical-Dataset/blob/main/resources/UNS.md 第三方数据集汇总 训练/测试图像数、正样本帧数、掩码体积统计
5 https://cs230.stanford.edu/projects_spring_2020/reports/38846660.pdf 学术课程报告 前景像素占比(0.949% / 2.3%)、空掩码帧数
6 https://raghakot.github.io/2016/12/26/Ultrasound-nerve-segmentation-challenge-on-Kaggle.html 社区复盘博客 全零基线约 0.6、U-Net 0.35-0.45、近重复约 40% 标签冲突
7 https://github.com/cygnus77/nerve-segmentation 社区复现仓库 近重复组量化(63/52、131/107)、格式细节、增强结论
8 https://github.com/rnklee/ultrasound-nerve-segmentation/blob/main/README.md 社区复现仓库 SSIM > 0.99 去重、DeepLabV3+ 增益约 0.1、编码器对比、前景占比约 3.2%
9 https://github.com/OverFlow7/Ultrasound-Nerve-Segmentation 社区复现仓库 VGG-16 系 UNet 私榜 0.70115(rank 38/973)
10 https://github.com/Simoncarbo/Ultras-Sound-Nerve-Segmentation---Kaggle.git 社区复现仓库 Hypercolumns 0.691(57/923)、后处理增益约 0.004-0.02
11 https://github.com/jwliao1209/Ultrasound-Nerve-Segmentation 社区复现仓库 Google Drive 镜像使用情况
12 https://huggingface.co/datasets/gymprathap/Nerve-Ultrasound-Image-Segmentation 第三方镜像 镜像规模(16,778 行 / 2.26 GB)与许可差异
13 https://ultrasound-open-access.nidusai.ca/ 第三方评测站 无 DOI 的明确记录、受试者编号范围 1-47
14 https://europepmc.org/article/view/PMC12758884/table/jmu.jmu_61_24-t005/version/1 综述论文(经 PMC) Wang 2021(IoU 64.9%)、van Boxtel 2021(IoU 72.0%)、Liu 2018(IoU 73.3%)
15 https://ieeexplore.ieee.org/document/8999615/keywords 同行评审论文 2,323 张子集、128×256 重采样、80/20 划分(1,858/465)
16 https://ieeexplore.ieee.org/document/9849660/keywords 同行评审论文 自建 340 张三标注集上 12 模型对比(U-Net 68.50% / LinkNet 66.27%)
17 https://stage.prophy.ai/article/143425541-Segmentation-of-Ultrasound-Brachial-Plexus-Based-on-U-Net/ 论文收录页 改进 U-Net(RNN 上下文 + 存在性损失)Dice 0.6490
18 https://selectdataset.com/dataset/8901a9f6def94dfd1ba3e8c439be1a86/general-medical-ai-gmai-vl-5.5m 第三方汇总 许可记为 Non-commercial, No Redistribution
19 https://pmc.ncbi.nlm.nih.gov/articles/PMC12264189 同行评审文献 「通过 Kaggle 公开可得、无使用限制」这一与规则冲突的表述

§10.4 人工校验表

内容模块 审核者 审核方式 审核状态
§1 概览与规模数字(5,635 / 5,508 / 11,143 / 47 名受试者) 千方病案医学编辑部 与 Kaggle 官方数据页及第三方汇总交叉比对 ✅ 已验证
§2 医学背景(臂丛解剖、ICD-11 与 SNOMED CT 映射、临床任务定义) 千方病案医学编辑部 交叉审核 + 解剖学表述审查 ✅ 已通过
§3 数据集规格(格式、分辨率、位深、标注协议) 千方病案医学编辑部 与官方数据页及社区仓库交叉比对 ✅ 已验证
§4 数据结构(RLE 规则、目录树、字段字典) 千方病案医学编辑部 依官方 RLE 定义逐条复核代码与字段说明 ✅ 已通过
§5 划分与泄漏风险 / §6 代码示例与 8 个坑点 千方病案医学编辑部 交叉审核;逻辑审查 + 与社区失败模式比对 ✅ 已通过
§7 质量评估、DAIMS 24 项与评分 千方病案医学编辑部 逐项对照 FACTS 证据链审核 ✅ 已通过
§8 排行榜与基准数字表述 千方病案医学编辑部 与官方排行榜及复现仓库交叉比对 ✅ 已验证
§9 引用与 BibTeX 千方病案医学编辑部 与官方竞赛页署名逐字核对 ✅ 已验证
§C JSON-LD @graph 千方病案医学编辑部 Schema v3.9 字段逐项校验 ✅ 已通过

§10.5 AI 生成章节标注

以下章节由 AI 生成初稿并经人工审核:§1.0 30 秒速览、§3.0 版本抉择矩阵、§6.0-§6.4 代码示例、§6.5 八个坑点、§6.9 评估指标代码、§7.7 DAIMS 评估表与评分、§7.8 外部验证矩阵、§8.7 生态快照、§C JSON-LD。

§10.6 最后审核

最后一次人工审核日期:2026-09-05

页面状态:published(全部内容已完成审核并发布)



相关数据集导航

以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:

  • pengwin — 共享标签:医学影像 / 医学图像分割 / 骨骼肌肉影像 / 挑战赛数据集
  • verse-spine — 共享标签:医学影像 / 医学图像分割 / 骨骼肌肉影像 / 挑战赛数据集
  • hc18 — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
  • segthor — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
  • ctspine1k — 共享标签:医学影像 / 医学图像分割 / 骨骼肌肉影像
  • camus — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
  • topaneu2026 — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
  • cosas — 共享标签:医学影像 / 医学图像分割 / 挑战赛数据集
  • chase-db1 — 共享标签:医学影像 / 医学图像分割 / 骨骼肌肉影像
  • hrf — 共享标签:医学影像 / 医学图像分割 / 骨骼肌肉影像

导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

返回 AI-Ready 数据集