信息速览
RANZCR CLiP 是一场为期三个月的 Kaggle 竞赛留下的数据资产,全称 Catheter and Line Position Challenge。它要求算法看着一张胸片,回答一个在影像科每天都有人问、却长期没有公开标签的问题:病人身上的管子,插到位了没有。
它标的东西很窄:气管插管、鼻胃管、中心静脉导管,外加一列只记「有没有」的 Swan-Ganz 导管。它不标肺炎、不标结节、不标气胸。整个数据集的价值不在于规模,而在于它把「管端停在哪一节椎体旁边」这种过去只存在于放射科医师脑子里的判断,拆成了可以计算的十一列零和一。
有两件事必须先纠正,否则后面全部会读歪。第一,这些胸片不是澳大利亚或新西兰的病人,影像全部来自美国 NIH 公开的 ChestX-ray14,澳新提供的是标注者与标注规范;第二,十一列里没有胸腔引流管,官方为了压低任务复杂度,明确把它排除在外。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全称 | RANZCR CLiP — Catheter and Line Position Challenge |
| 主办 | 澳大利亚与新西兰放射学会(RANZCR),会址悉尼 |
| 影像来源 | 美国 NIH ChestX-ray14,NIH 临床中心采集 |
| 标注来源 | 澳新两地 29 名放射科医师,MD.ai 平台 |
| 训练规模 | 30,083 张胸片,3,791 名患者,年龄中位数 49 岁 |
| 影像级标注 | 50,612 条阳性标记,平均每张约 1.7 条 |
| 分割标注 | 17,999 条管端掩码 |
| 标签数量 | 11 列二值,覆盖四类器械 |
| 判定档位 | 正常 / 临界 / 异常,鼻胃管另加「成像不全」 |
| 任务形式 | 多标签二分类,逐列算 AUC 再平均 |
| 公开测试 | 3,582 张,标签不公开 |
| 隐藏测试 | 约 1.4 万张,仅竞赛期间可提交评分 |
| 数据体积 | 13.13 GB,33,699 个文件 |
| 竞赛周期 | 2020-12-14 开赛,2021-03-16 截止 |
| 参赛规模 | 8,335 人报名,1,547 支队伍,28,112 次提交 |
| 奖金 | 五万美元,冠军 1.6 万 |
| 许可 | 竞赛规则,非商业使用,禁止再分发与再识别 |
| 论文 | Scientific Data,DOI 10.1038/s41597-021-01066-8 |
§1 它到底是什么
1.1 一句话:它标的是「器物停在哪」,不是「组织长成什么」
绝大多数胸片数据集在回答同一类问题:这片肺里有没有异常密度。答案落在肺实质,落在结节、浸润、积液、气胸这些组织学或病理生理学的对象上。标签的语义是「病」。
RANZCR CLiP 换了一个对象。它关心的是外来器物——一根塑料管——的末端投影落在哪两节肋骨之间。这个末端本身不是病变,它甚至不该出现在一个健康人的胸片里。它之所以成为标注对象,是因为位置错了会死人:鼻胃管误入气道,官方引用的文献给出的比例是最高百分之三,其中四成出现并发症;气管插管在手术室外置入时,位置不当的比例可达四分之一。这些数字都写在竞赛页的说明里,是用来解释「为什么要做这件事」的。
所以这份数据的语义坐标是「医源性风险」,不是「疾病」。这个差别决定了很多下游用法:它不适合当作疾病分类的预训练语料,但非常适合当作医疗安全质控模型的监督源。前者问「这人病了吗」,后者问「这套操作做对了吗」。
| 对照项 | 疾病型胸片集 | 本数据集 |
|---|---|---|
| 标注对象 | 肺实质、胸膜、纵隔的异常 | 外来器物的管端位置 |
| 标签语义 | 存在某种病理 | 某种操作是否到位 |
| 典型任务 | 分类、检测、分割病灶 | 多标签分类、管端定位 |
| 错误代价 | 漏诊、延误治疗 | 管端过深或过浅、穿孔、误吸 |
| 对应科室 | 放射诊断 | 重症、急诊、麻醉、护理质控 |
1.2 三条最常见的错误期待
第一条是把「十一类」理解成「十一种管子」。实际只有四类器械,其中三类各拆成三个档位,一类只有存在性。真正被反复计数的对象是「档位」,不是「器械种类」。
第二条是把它当成有序回归问题。三个档位确实有顺序——正常、临界、异常——但官方发布的是三个独立二值列,不是一列有序标签。有人会用 argmax 把三列压回一档,这一步在数学上可行,代价是丢掉「一张片同时有两条导管、状态不同」的情形,而那恰恰是临床上最需要提醒的场景。
第三条是以为它自带疾病标签。它没有。要疾病标签,只能回到上游的 ChestX-ray14,按 StudyInstanceUID 把两边接起来,而这一步会引入新的泄漏风险,详见 §5。
1.3 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 |
|---|---|
| 要做 ICU 置管后的自动复核,判断要不要叫医师回来看片 | 提供三档位置判定作为监督信号,正负样本都有真实分布 |
| 手上只有院内几百张带管胸片,想先做预训练 | 三万张的量级足以训出一个可迁移的编码器,再在院内小样本上微调 |
| 想研究「标注定义如何影响模型行为」 | 同一批像素有官方书面定义与三档判定,是现成的定义敏感性实验材料 |
| 要做管端分割,但缺乏像素级标注 | 近一万八千条掩码可直接用于分割预训练 |
| 想论证某个模型在「器物类目标」上的表现 | 与病灶类任务形成对照,可写进讨论一节 |
| 需要核对某篇论文用的到底是哪一批胸片 | 与 ChestX-ray14 的 StudyInstanceUID 可直接对齐验证 |
1.4 不适合谁:四条边界
如果你的需求是「训练一个能看出肺炎的模型」,它给不了你任何病灶标签,去用 CheXpert 或 VinBigData 那类带病灶标注的集子。
如果你的需求是「评估某家医院的置管质量」,它给不了你院内数据,也代表不了你的病人群体——影像来自美国一家联邦医院,标注者是澳新的放射科医师,两端都不在你的机构里。
如果你的需求是「拿到一批可以商用的训练数据」,它给不了你商用授权。竞赛规则写的是非商业使用,且禁止再分发。
如果你的需求是「覆盖全部类型的管线」,它给不了你胸腔引流管、起搏导线、体外膜肺的插管。官方只做了三类加一个存在性标记。
§2 数据构成与规格
2.1 三个规模口径,先说清哪个是哪个
「这个数据集有多少张图」这个问题没有单一答案,取决于问的是哪一层。
第一层是官方宣传口径:竞赛页写「用四万张图像训练和测试你的模型」,致谢段写标注团队「标注了超过四万次检查」。这是整个标注工程的覆盖面。
第二层是可下载的训练集:train.csv 有三万零八十行,对应三万零八十张 JPEG,来自三千七百九十一名患者。这是唯一有标签、能直接用来训练的部分,也是论文里反复出现的那个数。
第三层是测试:公开测试集三千五百八十二张,随竞赛数据一起下发但不给标签;隐藏测试集约 1.4 万张,只在竞赛期间用于评分,从未公开。
三个数字之间存在一处官方自身的不一致。三万零八十加三千五百八十二加约一万四千 约等于四万八千,明显超过「四万」的宣传口径;而数据页又写隐藏测试集「约为公开测试的四倍」。竞赛讨论区里有人直接追问过这个矛盾,组织方没有给出统一解释,只回复了关于定义与任务拆分的内容。处理办法很简单:引用规模时只引 train.csv 的行数,那是唯一能被任何人复核的数字;宣传口径与隐藏测试规模一律标注为「官方表述,未公开可核」。
| 口径 | 数字 | 有无标签 | 能否复核 |
|---|---|---|---|
| 宣传覆盖面 | 约四万次检查 | — | 否,仅官方表述 |
| 训练集 | 三万零八十张 | 有,11 列 | 是,train.csv 行数 |
| 公开测试 | 3,582 张 | 无 | 是,sample_submission.csv 行数 |
| 隐藏测试 | 约 1.4 万张 | 无,从不公开 | 否 |
| 患者数 | 三千七百九十一名 | — | 论文给出,可由 PatientID 去重复核 |
2.2 字段字典
train.csv 只有十三列,是这份数据里最不需要解释的部分:一个影像标识、一个患者标识、十一个标签。train_annotations.csv 只有三列,存的是管端掩码。
| 字段 | 所在文件 | 类型 | 含义 |
|---|---|---|---|
| StudyInstanceUID | train.csv / sample_submission.csv / train_annotations.csv | 字符串 | DICOM 检查实例号,与 JPEG 文件名一一对应 |
| PatientID | train.csv | 字符串 | 患者级不透明标识,同一患者的多张片共用 |
| ETT - Abnormal | train.csv | 0/1 | 气管插管管端异常 |
| ETT - Borderline | train.csv | 0/1 | 气管插管管端临界 |
| ETT - Normal | train.csv | 0/1 | 气管插管管端正常 |
| NGT - Abnormal | train.csv | 0/1 | 鼻胃管管端异常 |
| NGT - Borderline | train.csv | 0/1 | 鼻胃管管端临界 |
| NGT - Incompletely Imaged | train.csv | 0/1 | 鼻胃管成像不全,无法判定 |
| NGT - Normal | train.csv | 0/1 | 鼻胃管管端正常 |
| CVC - Abnormal | train.csv | 0/1 | 中心静脉导管管端异常 |
| CVC - Borderline | train.csv | 0/1 | 中心静脉导管管端临界 |
| CVC - Normal | train.csv | 0/1 | 中心静脉导管管端正常 |
| Swan Ganz Catheter Present | train.csv | 0/1 | 片上存在 Swan-Ganz 导管 |
| label | train_annotations.csv | 字符串 | 该条掩码属于十一列中的哪一列 |
| data | train_annotations.csv | 字符串 | 掩码的行程编码,按「起点 长度」成对排列 |
这里有一个命名上的历史包袱需要交代:论文正文把鼻胃管写作 NET(nasoenteric tube,鼻肠管),Kaggle 的列名写作 NGT(nasogastric tube,鼻胃管)。两者指的是同一组标注,只是学科习惯不同——放射科更倾向于用「鼻肠管」覆盖幽门后置管的情形,竞赛页面沿用了更常见的「鼻胃管」。看到论文表格的 NET 与 CSV 的 NGT 不一致时,不要以为是两套标签。
2.3 一条记录的完整解剖
取 train.csv 里任意一行,它的信息量是这样的:一个三十几位的 DICOM 实例号、一个患者号、十一个 0 或 1。没有年龄、没有性别、没有设备型号、没有采集日期、没有体位描述。整份数据把「影像之外的上下文」压到了最低。
这种极简带来一个直接后果:所有分层分析都只能靠 PatientID 去做。想看模型在不同人群上的表现,没有年龄可用;想控制设备差异,没有厂商字段。上游 ChestX-ray14 本身也只有年龄、性别与几个视图相关的粗字段,而且那些字段并不随本数据集一起下发。
一段最省事的读取代码长这样,它同时把十一列的实际阳性数打出来,顺手验证列名有没有拼写差异。
#-- 只依赖 pandas,读完就能看到 11 列各自的正样本数
import pandas as pd
LABELS = [
"ETT - Abnormal", "ETT - Borderline", "ETT - Normal",
"NGT - Abnormal", "NGT - Borderline", "NGT - Incompletely Imaged", "NGT - Normal",
"CVC - Abnormal", "CVC - Borderline", "CVC - Normal",
"Swan Ganz Catheter Present",
]
df = pd.read_csv("train.csv")
missing = [c for c in LABELS if c not in df.columns]
print("缺列:", missing)
print("影像数:", len(df), " 患者数:", df["PatientID"].nunique())
print("每张片平均阳性数:", round(df[LABELS].sum(axis=1).mean(), 3))
for c in LABELS:
print(f"{c:28s} {int(df[c].sum()):6d} {df[c].mean():.3%}")
跑完会看到两个有用的数:一是每张片平均阳性数约 1.7,说明绝大多数胸片只命中一到两列;二是十一列的阳性率从千分之三到七成不等,跨度三个数量级。
2.4 十一列的实际分布
| 列名 | 阳性数 | 占训练集的比例 | 备注 |
|---|---|---|---|
| CVC - Normal | 21,323 | 70.9% | 含 Swan-Ganz 自动带入的部分 |
| CVC - Borderline | 8,460 | 28.1% | 位置可接受但理想上应调整 |
| ETT - Normal | 7,240 | 24.1% | 含全部气管造口病例 |
| NGT - Normal | 4,799 | 16.0% | 管端距胃食管交界十厘米以上 |
| CVC - Abnormal | 3,198 | 10.6% | 过深、异位、成环 |
| NGT - Incompletely Imaged | 2,748 | 9.1% | 片内管段不足,无法判定 |
| ETT - Borderline | 1,138 | 3.8% | 偏高或偏低但未越界 |
| Swan Ganz Catheter Present | 830 | 2.8% | 只记存在,不判位置 |
| NGT - Borderline | 530 | 1.8% | 越过交界但不足十厘米 |
| NGT - Abnormal | 267 | 0.9% | 入气道或在食管内成环 |
| ETT - Abnormal | 79 | 0.26% | 管端在隆突及以下或过高 |
这张表最该被记住的是最后一行。79 例,占千分之二点六。整个竞赛的评价指标是十一列 AUC 的算术平均,这意味着「ETT - Abnormal」这一列在总分里的权重,与占了七成样本的「CVC - Normal」完全相同。一个模型只要在这一列上排序能力差一点,总分就会被拖下去;而三千张的验证集里,这一列的正样本只有个位数,AUC 的方差极大。这是理解这份数据所有排行榜波动的钥匙。
2.5 目录结构与落盘形态
下载后是一个平铺的结构:train/ 下三万零八十三个 JPEG,test/ 下三千五百八十二个 JPEG,三个 CSV,外加两套 TFRecord。整包 13.13 GB、33,699 个文件,是竞赛数据页给出的统计。
TFRecord 的存在值得单独说一句。它是给代码竞赛准备的——提交时不允许联网,也不允许读取竞赛数据目录之外的东西,于是把 JPEG 与标签预打包成定长记录,省掉每个 Notebook 重新解码的时间。对今天的使用者,TFRecord 基本没有价值:你要做的是自己的预处理,直接用 JPEG 更灵活。
| 路径 | 内容 | 数量级 |
|---|---|---|
train/ |
训练用 JPEG,文件名即 StudyInstanceUID | 三万零八十三个 |
test/ |
公开测试 JPEG,无标签 | 三千五百八十二个 |
train.csv |
十三列标签表 | 三万零八十行 |
sample_submission.csv |
十一列全零的提交模板 | 三千五百八十二行 |
train_annotations.csv |
管端掩码,行程编码 | 一万七千九百九十九条 |
train_tfrecords/ |
训练集打包版本 | 若干分片 |
test_tfrecords/ |
公开测试集打包版本 | 若干分片 |
2.6 与同类胸片资源的字段差异
把库里几份胸片集并排看,字段密度的差别一目了然。疾病型数据集通常有十几个到二十几个疾病列,外加年龄性别;本数据集只有十一列,且全部围绕器械。
| 资源 | 标签对象 | 列数量级 | 是否有文本 | 是否可商用 |
|---|---|---|---|---|
| ChestX-ray14 | 十四种胸部异常 | 十四列 | 无 | 是,公开许可 |
| CheXpert | 十四种观察项,含不确定档 | 十四列三态 | 有报告 | 研究用途 |
| VinBigData | 二十二类局部病灶,带框 | 框级 | 无 | 依渠道而定 |
| 本数据集 | 四类器械的位置档位 | 十一列二值 | 无 | 否,竞赛规则 |
| MIMIC-CXR | 报告文本加十四类弱标签 | 十四列 | 有报告 | 凭证化访问 |
值得注意的是「不确定」这一档的处理方式差异。CheXpert 把不确定作为独立的三态之一,训练时可以屏蔽;本数据集把「说不准」显式变成了一列——NGT - Incompletely Imaged 就是「因为片子没拍全,所以判不了」。这是一个很务实的设计:它把「成像不足」与「位置异常」分开了,避免把拍不全的片子硬塞进正常或异常。
§3 身份层:这批影像到底是谁的
3.1 一次反向操作:不拍新片,重标旧片
常规的数据集建设路径是:找医院、调影像、写规范、组织标注。RANZCR CLiP 走的是另一条路——影像用现成的,标注从零做。
具体做法写在论文里:先用一个在 MIMIC-CXR 上训练的模型,从 ChestX-ray14 里筛出疑似含导管或管线的胸片,把候选范围从十一万张压到几万张;再把这些片子交给放射科医师逐张判定。也就是说,模型只负责「这张片有没有管子」这一层粗筛,所有关于「管子位置对不对」的判断都是人工做的。
这个设计省掉的是影像采集与伦理审批——ChestX-ray14 本身已经公开、已经去标识、已经有 IRB 豁免的基础。论文对此的表述很直接:两个源数据集都是公开的,因此 IRB 批准被豁免。换来的是标注成本:五万条影像级标注加一万八千条像素级勾画,由二十九名医师分摊。
3.2 患者数与片数:一人近八张
平均每位患者 7.9 张胸片。这个比例远高于一般胸片集——ChestX-ray14 整体是三十万张对应三万余名患者,比例接近十比一,但那是全部住院与门诊影像的混合。
七点九这个数说明这批人是「反复拍片的人」:插了管的重症患者,往往一天一张甚至一天数张床旁片,用来确认管端没有移位。这批影像因此天然带有时间序列结构——同一个 PatientID 下的多张片,很可能记录的是同一根管子在不同时点的位置。这是一个被严重低估的用法:它让「管端随时间的漂移」成为可研究的对象,而不只是静态分类。
同时它也是一个陷阱。同一患者的片子高度相似,若按影像随机划分训练与验证,模型可以靠记住病人而不是学会判位置来刷分。论文没有讨论划分方案,竞赛也没公布;这件事只能由使用者自己做。
3.3 去标识做了什么,没做什么
去标识是继承来的,不是这一轮做的。论文的原话是:所用的两个源数据集都经过预先去标识。本数据集没有额外公布自己的去标识流程,也没有随数据下发 DICOM 头。
实际落到手上的信息只有两个标识:StudyInstanceUID 与 PatientID。前者是 DICOM 的检查实例号,本身不含姓名或日期;后者是不透明的患者编号。图像像素层面,ChestX-ray14 当年做过文字区域遮蔽处理,但那是上游的事,本数据集没有重新处理,也没有公布处理清单。
需要提醒的一点:JPEG 转换会丢弃 DICOM 里的所有元数据,包括设备参数、曝光条件、采集时间。这意味着用这份数据做「设备相关性」或「时间趋势」分析是不可能的,不是难,是字段根本不存在。
3.4 边界:它代表不了澳新人群
这是最容易被写错的一条。标注者来自墨尔本与悉尼的几家医院——皇家墨尔本医院、Alfred 医院、Monash 医院、东部健康等,论文作者单位也都在这几处。但影像来自美国马里兰州的 NIH 临床中心。
于是这份数据有两套地理属性,且方向相反:影像代表的是美国联邦医院的重症人群,标注代表的是澳新放射科医师的判断习惯。任何一句「这反映了澳大利亚的置管实践」都是错的,正确的说法是「这反映了澳新放射科医师如何判定美国一家医院影像上的管端位置」。
这个区分在方法学上不是吹毛求疵。当你要论证模型的跨机构泛化能力时,影像来源决定你能不能声称「跨人群」,标注来源决定你能不能声称「跨阅片者」。这份数据能支持后者,不能支持前者。
§4 标签层:三档判定是怎么切出来的
4.1 四个解剖地标
整套标注规范建立在四个地标上,全部可以在正位胸片上目测定位:隆突(左右主支气管下壁的交点)、主动脉弓上缘(主动脉结的顶)、腔房交界(右心缘与中间支气管下缘的交点)、胃食管交界(左膈内侧缘)。
为了让医师不需要拿尺子量,规范把距离换算成了肋骨:上胸区「两根后肋」约等于三点五厘米,下胸区「四根后肋」约等于十厘米。论文配了三张示意图专门讲这个换算,因为它是整套定义里最容易出现观察者差异的一步。
| 地标 | 用于 | 判定要点 |
|---|---|---|
| 隆突 | 气管插管 | 管端必须在隆突之上,越界即异常 |
| 主动脉弓上缘 | 气管插管、中心静脉导管 | 管端高于此处为正常下限的参照 |
| 腔房交界 | 中心静脉导管 | 管端应在其上方,越过即进入右房 |
| 胃食管交界 | 鼻胃管 | 管端需越过此界十厘米以上才算正常 |
4.2 气管插管:三档,外加一条造口特例
正常:管端在主动脉弓上缘之上,或距隆突超过两根后肋。
临界:管端低于主动脉弓,或距隆突不足两根后肋(偏低);或高出隆突两倍「两根后肋」即约七厘米(偏高)。
异常:管端位于隆突水平或以下,或高至第一胸椎水平及以上。
造口特例:所有气管造口导管一律记入「ETT - Normal」。这一条需要单独记,因为它意味着这一列里混入了生理上完全不同的一类器物——造口管本来就短,不存在「管端距隆突几厘米」的问题,但规范选择把它们统一归入正常。做细分研究时,这一列不是纯净的气管插管集合。
「ETT - Abnormal」只有 79 例,正是这套定义的直接结果。管端越过隆突是插得太深,属于必须立刻处理的错误,临床上发生率本来就低;而「偏高」这一侧的容错被放宽到了七厘米,大量轻微偏高被归入了临界而不是异常。定义的保守性,直接决定了这一列只有两位数样本。
4.3 鼻胃管:四档,多出来的一档是「拍不全」
正常:管端距胃食管交界十厘米以上。
临界:管端越过交界但不足十厘米,或管身在胃内打折。
异常:管端位于气管支气管肺系统内,或停在胃食管交界以上的食管内,或路径上成环、卷曲。
成像不全:片内可见的管段不足以判断位置。规范补充了一条细则——如果管端跑出了片外,但片内可见的管段超过十厘米,仍算作信息充分,判为正常。
第四档是这份数据设计上最聪明的地方。胸片是床旁拍的,视野常常切掉膈下,鼻胃管的末端经常就在片外。硬判会制造大量假阳性,直接丢弃会浪费样本,于是单独设一档把「证据不足」显式表达出来。做模型时,这一列的正确用法不是去预测它,而是拿它当掩码——预测其他三列时把这一部分样本降权或剔除。
4.4 中心静脉导管:三档,覆盖范围比字面宽
正常:管端投影于上腔静脉,位于主动脉弓上缘以下、腔房交界以上,且管身与血管壁夹角小于四十五度。
临界:沿预期路径但停在近端上腔静脉;或在上腔静脉内但夹角大于四十五度;或略低于腔房交界但管端仍在右房上三分之一以内。
异常:管端低于右房上三分之一;未沿预期路径;路径上成环或打折;异位于奇静脉、胸内静脉、主动脉或血管外。
这里的「CVC」是个宽口径概念。论文明确写出,CVC 这一类包含输液港、Hickman 导管、普通中心静脉导管与 PICC。也就是说,一列「CVC - Normal」背后至少有四种器物,它们的入路、长度、正常位置各不相同,却被压进同一个判定框架。做细分时必须知道这一点。
4.5 Swan-Ganz 那一列为什么不算位置标签
第十一列叫「Swan Ganz Catheter Present」,只有一个含义:片上有没有这根导管。它不判位置,理由写在论文里——Swan-Ganz 通常经中心静脉鞘置入,本身位置随鞘走,单独判它意义不大。
更关键的一条规则是:所有带 Swan-Ganz 的片子,被自动标记为「CVC - Normal」。这是一条约定,不是一次判定。它解释了为什么 CVC 三列的阳性数之和会超过影像总数,也解释了为什么「CVC - Normal」这一列不能直接当作「中心静脉导管位置正常」的独立证据——里面有一部分是自动填充的。
| 器械家族 | 列数 | 阳性合计 | 与影像数的关系 |
|---|---|---|---|
| 气管插管 | 3 | 8,457 | 小于影像数,部分片子无插管 |
| 鼻胃管 | 4 | 8,344 | 小于影像数,部分片子无鼻胃管 |
| 中心静脉导管 | 3 | 32,981 | 大于影像数,存在多管并存与自动填充 |
| Swan-Ganz | 1 | 830 | 独立存在性标记 |
4.6 标签不互斥,这是结构而不是瑕疵
不少人看到三档就会默认它们是 one-hot:一张片只能属于正常、临界、异常之一。数据不支持这个假设。CVC 三列合计三万二千九百八十一,比三万零八百零三的总影像数还多,唯一解释是同一张片可以同时命中同一家族的两列——比如病人身上有两条中心静脉导管,一条位置正常、一条过深。
这不是标注错误,是任务设定:每一列独立判定,一列一个二分类头。理解这一点会直接影响损失函数的选择:用 softmax 会强制三档互斥,等于把一个合法情形判成非法;用逐列 sigmoid 才对。
4.7 一万八千条掩码:被低估的那一半
一万七千九百九十九条人工勾画的管端掩码,是这份数据里最容易被忽略的部分。它只覆盖一部分训练样本,官方说明是「作为额外信息提供」,不参与评分。
但它的价值在竞赛之后反而上升了。分类任务已经有大量现成方案,管端分割却缺乏公开数据;近一万八千条掩码足够训一个可用的管端检测器,而管端位置一旦能定位成坐标,三档判定就可以退化成几何计算——量一下管端到隆突的像素距离,再除以肋骨间距,判定就不再依赖黑箱。
竞赛里的高分方案大多走了这条路:先用掩码训分割或强监督教师模型,再把中间特征蒸馏给分类学生模型。这个思路在赛后写成的复盘里被反复提到,也是这份数据对方法学的实际贡献。
§5 交付层:怎么取、怎么读、怎么用
5.1 三道门
第一道是账号。数据页不登录只能看到文件名清单与体积,看不到内容。
第二道是规则同意。页面写明「要查看这些数据,你需要同意竞赛规则」,点击后账号才获得下载权限。同意的是竞赛规则全文,其中包含非商业使用与禁止再分发的条款。
第三道是竞赛形态。这是一场代码竞赛,隐藏测试集只在提交时可见,任何下载路径都拿不到它。
三道门叠加的结果是:训练集与公开测试集可下载,隐藏测试集永久不可得,且整份数据的使用范围被规则限定。
5.2 下载与校验
Kaggle 提供命令行工具,认证后可以按竞赛名拉取。下载完先数文件,比看进度条可靠。
#-- 配置令牌后按竞赛名拉取;先确认目录为空,避免半包覆盖
pip install --quiet kaggle
mkdir -p ranzcr && cd ranzcr
kaggle competitions download -c ranzcr-clip-catheter-line-classification -q
unzip -q ranzcr-clip-catheter-line-classification.zip
printf 'train jpg: '; ls train | wc -l
printf 'test jpg: '; ls test | wc -l
printf 'csv 行数: '; wc -l < train.csv
du -sh .
跑完应该看到训练 JPEG 三万零八十三个、测试 JPEG 三千五百八十二个、train.csv 三万零八十行(含表头)。三个数只要有一个对不上,说明包没下完整,重下比排查快。
5.3 解码管端掩码
train_annotations.csv 的 data 列是行程编码,格式为「起点 长度 起点 长度」,起点从 1 开始计数。解码后是一张与原图同尺寸的二值掩码。
#-- 行程编码按列优先展开;若结果看起来被转置,把 order 换成 "C" 再试一次
import numpy as np
import pandas as pd
from PIL import Image
def rle_decode(rle: str, shape, order: str = "F") -> np.ndarray:
s = rle.split()
starts = np.asarray(s[0::2], dtype=np.int64) - 1
lengths = np.asarray(s[1::2], dtype=np.int64)
flat = np.zeros(shape[0] * shape[1], dtype=np.uint8)
for st, ln in zip(starts, lengths):
flat[st:st + ln] = 1
return flat.reshape(shape, order=order)
ann = pd.read_csv("train_annotations.csv")
row = ann.iloc[0]
img = Image.open(f"train/{row['StudyInstanceUID']}.jpg")
h, w = img.size[1], img.size[0]
mask = rle_decode(row["data"], (h, w))
print(row["label"], mask.shape, int(mask.sum()))
解码后做一次目视检查是必要的:把掩码叠加到原图上,看它是否正落在管身上。这一步能同时验证编码方向、宽高顺序与是否需要对 JPEG 做缩放。官方说明影像已上采样到原始分辨率,但不同来源的片子尺寸并不统一,逐张读 Image.size 比假设一个固定尺寸安全。
5.4 按患者分组划分
这是整份数据上最容易出错、也最影响结论的一步。同一患者平均近八张片,随机划分会让近似的片子同时出现在训练与验证两侧。
#-- 按 PatientID 分组做五折,保证同一患者的片子只落在一侧
import pandas as pd
from sklearn.model_selection import GroupKFold
LABELS = [
"ETT - Abnormal", "ETT - Borderline", "ETT - Normal",
"NGT - Abnormal", "NGT - Borderline", "NGT - Incompletely Imaged", "NGT - Normal",
"CVC - Abnormal", "CVC - Borderline", "CVC - Normal",
"Swan Ganz Catheter Present",
]
df = pd.read_csv("train.csv")
gkf = GroupKFold(n_splits=5)
for fold, (tr, va) in enumerate(gkf.split(df, groups=df["PatientID"])):
a, b = df.iloc[tr], df.iloc[va]
overlap = set(a["PatientID"]) & set(b["PatientID"])
rare = int(b["ETT - Abnormal"].sum())
print(f"fold {fold}: 训练 {len(a)} 验证 {len(b)} 患者重叠 {len(overlap)} 稀有列正样本 {rare}")
输出里「患者重叠 0」是必须看到的;「稀有列正样本」那一列会让你立刻明白为什么五折交叉验证在这份数据上不稳——有些折的验证集里,异常插管只有个位数样本。
5.5 三个工程坑
第一个坑是把 test/ 当成有标签的验证集。它没有标签,sample_submission.csv 是十一列全零的模板,拿它算指标只会得到零。要用验证集,只能自己从 train.csv 里切。
第二个坑是假设所有 JPEG 同尺寸。上游 ChestX-ray14 的影像尺寸并不完全统一,虽然多数是方形,但缩放与填充策略不同会直接改变管端的相对位置,进而影响以肋骨间距为尺度的判定。
第三个坑是在提交环境里联网。竞赛当时禁止提交 Notebook 访问网络,很多人把预训练权重写成了下载链接,本地跑得通、提交就失败。今天不再受这条限制,但如果你要复现当年的排行榜成绩,这个约束仍然成立。
§6 与库内条目的关系
这份数据在库内的位置很特殊:它是唯一一个标签对象是「器物」而不是「组织」的胸片集。围绕它的互链有三条轴。
第一条是影像同源轴。它的像素来自 ChestX-ray14,而库内没有收录 ChestX-ray14 本身;能间接对接的是同样源自 MIMIC 体系的 mimic-cxr,两者在病例维度上不重叠,但同属美国重症人群的胸片,适合做跨库一致性讨论。
第二条是任务范式轴。chexpert 代表「观察项三态标注」,vinbigdata-cxr 代表「病灶框标注」,siim-acr-pneumothorax 代表「单病种像素标注」,本数据代表「器物位置标注」。四者构成一条从「有没有病」到「操作对不对」的谱系,横向对比时能说清标签语义的差异。
第三条是可用性与许可轴。openi-iu-xray、medpix-nlm 是教学型资源,规模小、许可宽松;本数据规模大、许可收紧。做选型时这两端经常被放在一起比。
| 库内条目 | 与本数据的关系 | 什么时候该转过去 |
|---|---|---|
| vinbigdata-cxr | 同为胸片,但标的是病灶框 | 需要病灶定位而非器物判定 |
| chexpert | 同为多标签,但标的是观察项三态 | 需要疾病标签、且能接受不确定档 |
| mimic-cxr | 同源体系的重症胸片,带报告 | 需要文本监督或时间序列 |
| openi-iu-xray | 教学型胸片,规模小 | 只需要少量示例、要宽松许可 |
| medpix-nlm | 病例教学库,带图注 | 需要典型病例对照阅读 |
| padchest | 西班牙语区胸片,标签更杂 | 需要跨语种、跨人群对照 |
| siim-acr-pneumothorax | 单病种像素标注 | 做气胸分割 |
| radqa | 放射报告问答 | 需要文本侧任务 |
检索路径建议是:先按「标签对象」筛——要器物还是要病灶;再按「许可」筛——能不能商用;最后才看规模。倒过来做,很容易被三万张这个数字吸引,落地时才发现授权过不去。
§7 质量评估与局限性
7.0 阅读本节前需要知道的一件事
用评价疾病数据集的尺子来量它,会得出完全错误的结论。
疾病数据集的常见评价维度是:类别覆盖是否全面、阳性率是否接近人群患病率、标注是否经过病理金标准确认。这三条放在本数据上全部不适用——它本来就不打算覆盖疾病,阳性率由「插管病人里出错的概率」决定而不是人群患病率,而管端位置没有病理金标准,只有专家共识。
正确的评价框架应该问三件事:定义是否可复现、标注者之间是否一致、类别不平衡是否被诚实披露。这三条它都做了正面回应,代价是另外三件事它做不到:没有临床结局随访、没有跨机构验证、没有独立的第三方复核。
7.1 五维评分
| 维度 | 评价 | 依据 |
|---|---|---|
| 定义清晰度 | 高 | 四个解剖地标加肋骨换算,论文配图逐条说明 |
| 标注一致性 | 中高 | 三成双标、一成三标,Dawid-Skene 合并,抽检分歧约一成五 |
| 类别平衡性 | 低 | 最稀列与最密列相差两个数量级 |
| 可复现性 | 中 | 数据可下载,但预处理脚本只公开了一部分 |
| 许可友好度 | 低 | 非商业、禁止再分发,无开放许可替代入口 |
7.2 定义本身是可争议的
「管端应停在隆突上方两厘米」这类说法在教科书里有,但没有全球统一数值。论文自己承认了这一点:导管的最佳位置没有单一定义,观察者的感知能力与经验差异会带来变异。
更麻烦的是体位。大量床旁片存在旋转、吸气不足、非标准投照,论文的原话是「这让严格套用定义变得困难,标注者被要求在这些情况下使用临床判断」。一旦引入「临床判断」,定义的可复现性就打折了。
第三层是投影本身。胸片是三维物体的二维投影,长度会被系统性低估。论文对此的判断很坦率:正因为如此,他们采用的定义偏保守,用它训练出来的模型在真实场景里很可能偏高敏感度——也就是更容易报「异常」。这句话对部署很重要:一个在这份数据上训练到 AUC 零点九七的模型,放到临床上大概率会多报,而不是少报。
7.3 一致性是怎么做出来的
流程值得完整复述一遍,因为它是这份数据最扎实的部分。
每位标注者先接受三十分钟培训,培训内容是定义与示例片;标注过程中持续抽检,发现与定义不符就反馈;标注者彼此看不到对方结果。约三成的片子由两人独立标注,一成由三人标注。合并用改进的 Dawid-Skene 模型——一种同时估计「每条标签的真值」与「每个标注者的可靠性」的迭代方法。
合并结果抽了 5,100 条交给资深标注者复核,分歧率约一成五。这一成五没有再迭代,而是被当作金标准反过来再训一次模型,最终高可靠度的标注者被允许单人标注剩余片子。
这里有一个必须诚实指出的取舍:允许高可靠度标注者单人标注,等于用历史表现替代了即时复核。它提高了效率,也让「单人标注的那部分样本没有第二双眼睛」成为事实。论文没有公布这部分占比,只公布了双标与三标的占比。
7.4 类别不平衡的具体后果
十一列 AUC 取算术平均,是官方指标。这个指标对稀有列极其敏感。
设想一个模型在十列上做到零点九八,在「ETT - Abnormal」上只有零点八五。算术平均下来是零点九六八。看起来还不错。但那一列的验证样本可能只有几十个正例,AUC 的置信区间宽到正负零点一。换句话说,排行榜上零点零零一的差距,很可能完全落在噪声里。
这也解释了赛后复盘里一个反复出现的观察:前排队伍的分差极小,很多方案在私有榜上大幅换位。不是模型不稳,是指标在稀有列上的方差太大。
| 列 | 阳性率 | 3,000 张验证集的期望正例 | 对该列 AUC 的稳定程度 |
|---|---|---|---|
| CVC - Normal | 70.9% | 约 2,100 | 稳定 |
| ETT - Normal | 24.1% | 约 720 | 稳定 |
| NGT - Abnormal | 0.9% | 约 27 | 波动明显 |
| ETT - Abnormal | 0.26% | 约 8 | 极不稳定 |
7.5 外部验证矩阵
| 验证类型 | 是否做过 | 说明 |
|---|---|---|
| 同源留出 | 是 | 竞赛的隐藏测试集,同属 ChestX-ray14 筛选池 |
| 跨机构 | 否 | 全部影像来自单一联邦医院 |
| 跨阅片者 | 部分 | 二十九名标注者构成内部多样性,但没有独立机构复核 |
| 与临床结局对照 | 否 | 无随访、无并发症记录 |
| 与器械金标准对照 | 否 | 无透视、无术后确认 |
这张表的读法是:它能证明「模型学会了这批标注者的判断」,不能证明「模型能在别的医院替代医师」。
7.6 DAIMS 就绪度自查
按 DAIMS 的常见检查项过一遍,能看出它离「可直接进入生产流程」还有多远。数据能否直接加载:能,JPEG 加 CSV,没有专有格式。标识是否唯一:能,StudyInstanceUID 一图一号。是否有官方划分:有,训练与测试固定,但患者级隔离未公开。是否有数据字典:有,十一列的名字本身就带语义,论文另给了定义。是否有许可声明:有,但只有竞赛规则一种形态。是否有预处理文档:部分,论文描述了上采样与转 JPEG,但没有发布完整脚本。是否可追溯原始采集:能追到 ChestX-ray14,但追不到具体检查日期与设备。是否有版本号:没有,竞赛数据页不设版本,这一点与 PhysioNet 类资源差别很大。
倒数第二项值得展开。可追溯性的断点在 JPEG 转换:一旦转成 JPEG,曝光参数、设备型号、采集时间全部消失,而这些恰恰是判断「这张片为什么拍得不好」的关键。做质量归因研究时,这个断点无法绕过。
7.7 它为何能持续
一个竞赛数据集在赛后通常会慢慢失效:链接失效、无人维护、逐渐被更新的集子取代。这一份没有,原因有三层。
第一层是需求刚性。置管位置复核是每天发生的操作,不是研究选题。只要还有中心静脉导管被插进去,就有人需要自动判位。这个需求不会因为某个数据集过时而消失。
第二层是替代品的缺失。论文里有一句判断很关键:MIMIC-CXR 与 ChestX-ray14 里确实含导管,但「目前没有公开的标签描述这些导管的存在或位置」。五年过去,这句话大体仍然成立——公开的、带管端位置标签的胸片集,仍然只有这一份。
第三层是机构承载。它不是某个博士生的毕业作品,而是澳新放射学会以学会名义推动的项目,背后还有 MD.ai 提供标注工具、Kaggle 提供分发。学会有持续维护的动机:置管安全是它的专业议题。
三层叠加的结果是:即使数据页最终下线,它已经被几十篇论文引用、被上百个 Notebook 复现,事实上成了这个细分任务的标准基准。
§8 生态位与历史
8.1 时间线
2020 年 12 月 14 日开赛,2021 年 3 月 8 日截止报名与组队,3 月 16 日最终提交截止。同年 10 月 29 日,数据描述论文在 Scientific Data 上线。
这个顺序值得注意:论文比竞赛晚了七个月。也就是说,在论文可引用之前,已经有上千支队伍在用这份数据,引用只能指向竞赛页面。这解释了为什么早期文献里对它的引用格式五花八门,有的引 Kaggle,有的引竞赛名,有的直接引数据页 URL。
8.2 竞赛留下了什么
8,335 人报名,1,854 人实际参与,1,547 支队伍,28,112 次提交,五万美元奖金分给前七名。
比名次更有价值的是赛后公开的方案。它们共同确认了一件事:在这份数据上,纯分类不够,把管端先定位出来再判档位,效果明显更好。这条经验后来被广泛迁移到其他「器物检测」类任务上——比如确认喂养管、确认引流管、确认起搏导线。
竞赛还留下了一个副产品:公开 Notebook 里大量的数据探索代码,成为后续使用者理解十一列分布的事实参考。这也带来一个问题,很多人直接抄了探索结论却没核对口径,于是「三万张」「四万张」「四万八千张」在不同文章里混用,见 §2.1。
8.3 在胸片公开集谱系里的位置
| 代际 | 代表资源 | 主要贡献 | 本数据的位置 |
|---|---|---|---|
| 第一代 | ChestX-ray14 | 证明弱监督可做多标签 | 建立在它之上 |
| 第二代 | CheXpert、MIMIC-CXR | 引入不确定档与报告文本 | 未使用文本 |
| 第三代 | VinBigData、RSNA 系列 | 医师逐例画框 | 不用框,用掩码与档位 |
| 第四代 | 多中心、多模态集 | 跨机构泛化 | 单中心,未进入 |
| 旁支 | 本数据集 | 把标签对象换成器物 | 这一支几乎没有同类 |
最后一行是它真正的生态位。它不是第四代的一员,也不是第三代的一个变体,而是另开了一支:标签对象从「组织」换成了「器物」。这一支目前成员极少,公开可用的只有它。
8.4 社区的两个稳定用法
第一个是分类基线。直接用十一列训多标签模型,报逐列 AUC 与平均值。这条路门槛最低,也是绝大多数引用它的论文的做法。
第二个是分割辅助。先用一万八千条掩码训管端分割,再拿分割结果做几何判定,或者把分割特征蒸馏进分类器。这条路在竞赛里被证明有效,在赛后研究中被反复复用。
还有第三种正在成形:把它当作「操作质量」标签源,与院内数据联调,做置管后的自动预警。这条路目前缺少公开的落地报告,主要障碍是许可——非商业条款让医院的信息化厂商很难直接使用。
8.5 为什么没有第二个同类数据集
一个自然的疑问是:既然需求这么刚性,为什么五年过去没有出现竞品。
原因大概是标注成本的结构。疾病标签可以靠报告文本弱监督,几万张片的标签几乎免费;管端位置没法从报告里可靠抽取——报告里写「管端位置良好」的比例不高,写了也未必描述具体位置。于是只能靠医师逐张看,一张片几十秒,三万张就是几百小时的人力。没有学会级别的组织能力,做不动。
第二个原因是器械种类太多。这份数据只做了三类,就已经需要二十九名医师、四轮一致性迭代。要做全,成本会翻几倍。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一步 | 第二步 | 不要做 |
|---|---|---|---|
| 算法研究者 | 读论文的标签定义一节 | 按患者分组切验证集 | 别用随机划分报指标 |
| 临床信息化团队 | 核对许可是否覆盖你的场景 | 在院内小样本上做外部验证 | 别把公开集指标当验收标准 |
| 数据工程 | 先数文件、校验完整性 | 写解码与缓存管线 | 别假设 JPEG 尺寸统一 |
9.2 一条最短的可用流程
先把数据落盘并校验数量,再读 CSV 打出十一列分布确认列名,然后按 PatientID 做五折,最后训一个逐列 sigmoid 的多标签模型,损失用带权重的二元交叉熵——权重按每列正样本数的倒数开方,避免稀有列被淹没。
评估时不要只看平均 AUC。把十一列拆开报,特别是把「ETT - Abnormal」单列拿出来看置信区间。如果这一列的验证正例少于三十个,任何结论都不该写进论文的主表。
部署前必须做的一件事是阈值校准。平均 AUC 只关心排序,不关心阈值;而临床要的是「超过多少分就提醒」。在这份数据上,由于定义保守,模型会系统性地偏高报异常,阈值需要往外推。
9.3 引用方式
引用这份数据有两层:数据本身引竞赛页面,方法学引论文。规范写法是把两者都给,并注明使用的是训练集还是公开测试集,因为隐藏测试集的成绩无法复核。
如果只引论文,会漏掉「数据以竞赛形式发布、许可受竞赛规则约束」这个关键信息;如果只引竞赛页,会漏掉标签定义的完整出处,使用者无法判断你的标签理解是否正确。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 性质 | 公开的器械位置标注集,非诊断数据集 |
| 适用用途 | 多标签分类预训练、管端分割、质控模型研究、标注方法学研究 |
| 不建议用途 | 疾病诊断、治疗决策、器械选型 |
| 伦理边界 | 不得用于再识别;不得声称代表澳新或美国人群 |
| 商业使用 | 竞赛规则禁止,需另行授权 |
| 引用要求 | 同时引竞赛页面与 Scientific Data 论文 |
| 版本状态 | 无版本号,以竞赛数据页当前状态为准 |
| 已知缺陷 | 类别极不平衡、单中心影像、无临床结局 |
生成式模型在复述这份数据时,最容易说错四个数。第一个是影像总数,把宣传口径的四万当成可下载量。第二个是标签数,把十一列说成十一种器械。第三个是患者数,把患者数说成影像数。第四个是最稀列样本量,把 79 说成七百九或者干脆不提。
还有一类错误不属于数字,属于定位:把「标注者来自澳新」写成「数据来自澳新」。这一句错下去,整段关于人群代表性的讨论都会失效。
常见误读(避坑清单)
| 常见说法 | 实际情况 | 证据 |
|---|---|---|
| 「这是澳大利亚的胸片数据集」 | 影像是美国 NIH 临床中心的,澳新只提供标注者 | 竞赛致谢段感谢 NIH 提供 ChestX-ray14;论文写影像来自该库 |
| 「11 类是 11 种管子」 | 只有四类器械,三类各拆三档,一类只记存在 | 数据页列名,三档共用同一器械前缀 |
| 「有胸腔引流管」 | 没有,官方明确排除 | 竞赛讨论区组织方回复:为降复杂度未纳入胸腔引流等 |
| 「标签是位置对错的二分类」 | 是三档有序判定加一档成像不全,逐列独立 | 论文标签定义一节 |
| 「三档互斥,一张片只能中一列」 | 不互斥,同一家族可同时命中两列 | CVC 三列合计超过影像总数 |
| 「Swan-Ganz 那一列判的是位置」 | 只记存在与否 | 数据页列名与论文说明 |
| 「所有气管插管都是插管」 | 气管造口一律并入正常档 | 论文写明造口管全部记入正常 |
| 「三万张就是全部」 | 三万是可下载训练集,另有公开与隐藏测试 | 数据页与 sample_submission 行数 |
| 「按影像随机切分就行」 | 同一患者平均近八张,必须按患者分组 | PatientID 去重后为三千七百九十一 |
| 「许可是 CC BY 之类可以商用」 | 竞赛规则,非商业,禁止再分发 | 竞赛规则 Data Access 段原文 |
| 「测试集有标签可以自评」 | 公开测试集无标签,隐藏集从不公开 | sample_submission 为全零模板 |
| 「标注是模型生成的」 | 模型只做预筛,位置判定全部人工 | 论文方法节与致谢的标注者名单 |
FAQ
Q1:这批胸片是澳大利亚或新西兰的病人吗?
不是。影像全部来自美国 NIH 公开发布的 ChestX-ray14,采集于 NIH 临床中心。澳新提供的是二十九名标注者与一套书面判定规范。把影像来源与标注来源混为一谈,是引用这份数据时最高频的错误。
Q2:11 个标签里到底有没有胸腔引流管?
没有。十一列是三档气管插管、四档鼻胃管、三档中心静脉导管,加一列 Swan-Ganz 存在性。组织方在竞赛讨论区明确说过,为降低任务复杂度,没有纳入胸腔引流管等其他管线。
Q3:三档判定和「在体内 / 不在体内」是什么关系?
完全不同的判据。「在不在体内」是存在性判断,而这套标签假设器械已经在体内,判的是管端相对解剖地标停得合不合适。正常、临界、异常三档对应的是「不用动」「最好调整」「必须立刻调整」,是处置紧迫度,不是有无。
Q4:为什么最稀的一列只有 79 例?
因为定义保守。气管插管越过隆突才算异常,而「偏高」这一侧放宽到了隆突上方约七厘米,大量轻微偏高被归入临界档。定义的宽严直接决定了样本量,这不是抽样偏差。
Q5:能不能只用它训一个通用的胸片编码器?
可以,但要清楚它学到的是「器物」特征。三万张的量级足够训一个可迁移的骨干,不过由于影像全部来自单一机构,学到的纹理与设备特征也单一。用作预训练起点可以,用作泛化性证据不行。
Q6:训练集和测试集在患者层面隔离吗?
官方没有公布。train.csv 提供 PatientID,你能确认训练集内部有三千七百九十一名患者;但公开测试集与隐藏测试集的患者构成从未披露。稳妥做法是假设未隔离,自己从训练集里切一份按患者分组的验证集,所有结论以它为准。
Q7:图像有 DICOM 头吗?
没有。全部是 JPEG,DICOM 元数据在转换时被丢弃。设备型号、曝光参数、采集时间都取不到。需要这些字段时,只能回到上游 ChestX-ray14 按 StudyInstanceUID 关联,且上游本身也不含完整设备参数。
Q8:分割掩码覆盖多少张图?
论文给的是一万七千九百九十九条掩码,条数不等于张数——一张片可以有多条器械的掩码。官方没有公布被覆盖影像的确切数量,只说是一部分训练样本。做分割任务时按条数规划,不要按张数。
Q9:现在还能下载吗?
数据页仍在,文件清单与体积可见,但下载需要登录 Kaggle 并接受竞赛规则。隐藏测试集从来不提供。如果所在机构无法接受「非商业使用、禁止再分发」这两条,就没有合规的获取路径。
Q10:为什么排行榜前几名的分差那么小?
因为指标是十一列 AUC 的算术平均,其中一列的正样本只占千分之二点六。这一列在验证集上的 AUC 方差极大,模型能力之外的因素占比很高。分差小不等于水平接近,只说明指标的分辨率到了极限。
附录 A:标注类别全表
| 序号 | 列名 | 器械 | 档位 | 阳性数 | 判据摘要 |
|---|---|---|---|---|---|
| 1 | ETT - Abnormal | 气管插管 | 异常 | 79 | 管端在隆突及以下,或高至第一胸椎 |
| 2 | ETT - Borderline | 气管插管 | 临界 | 1,138 | 低于主动脉弓,或距隆突不足两根后肋,或高出约七厘米 |
| 3 | ETT - Normal | 气管插管 | 正常 | 7,240 | 管端在主动脉弓上缘之上;含全部气管造口 |
| 4 | NGT - Abnormal | 鼻胃管 | 异常 | 267 | 入气道、停在食管内、路径成环 |
| 5 | NGT - Borderline | 鼻胃管 | 临界 | 530 | 越过胃食管交界但不足十厘米,或胃内打折 |
| 6 | NGT - Incompletely Imaged | 鼻胃管 | 证据不足 | 2,748 | 片内管段不足以判断;管端出片但可见超十厘米者除外 |
| 7 | NGT - Normal | 鼻胃管 | 正常 | 4,799 | 管端距胃食管交界十厘米以上 |
| 8 | CVC - Abnormal | 中心静脉导管 | 异常 | 3,198 | 过深至右房下三分之二、异位、成环、血管外 |
| 9 | CVC - Borderline | 中心静脉导管 | 临界 | 8,460 | 近端上腔静脉、夹角过大、略入右房上部 |
| 10 | CVC - Normal | 中心静脉导管 | 正常 | 21,323 | 上腔静脉内、弓下交界上、夹角小于四十五度;含 Swan-Ganz 自动带入 |
| 11 | Swan Ganz Catheter Present | Swan-Ganz 导管 | 存在性 | 830 | 只记有无,不判位置 |
附录 B:文件与字段
| 文件 | 行数或数量 | 关键字段 | 用途 |
|---|---|---|---|
train.csv |
三万零八十条数据行 | StudyInstanceUID、PatientID、11 列标签 | 训练与自建验证 |
sample_submission.csv |
三千五百八十二条 | StudyInstanceUID、11 列 | 公开测试集清单,标签全零 |
train_annotations.csv |
17,999 行 | StudyInstanceUID、label、data | 管端掩码,行程编码 |
train/ |
三万零八十个 JPEG | 文件名为 StudyInstanceUID | 影像 |
test/ |
三千五百八十二个 JPEG | 同上 | 公开测试影像,无标签 |
train_tfrecords/ |
若干分片 | 序列化的图像与标签 | 竞赛提交环境专用 |
test_tfrecords/ |
若干分片 | 序列化的图像 | 竞赛提交环境专用 |
附录 C:术语表
| 术语 | 含义 |
|---|---|
| CLiP | Catheter and Line Position 的缩写,竞赛与数据集共用此名 |
| ETT | 气管插管,含经口、经鼻与气管造口三类 |
| NGT / NET | 鼻胃管 / 鼻肠管,本数据中指同一组标注,列名用 NGT |
| CVC | 中心静脉导管,宽口径,含输液港、Hickman、PICC |
| Swan-Ganz | 肺动脉漂浮导管,本数据只记存在与否 |
| 隆突 | 左右主支气管分叉处下壁,气管插管的深度红线 |
| 腔房交界 | 上腔静脉与右心房交界,中心静脉导管的深度红线 |
| 胃食管交界 | 食管入胃处,鼻胃管位置判定的基准 |
| 两根后肋 | 上胸区约三点五厘米的目测换算单位 |
| 四根后肋 | 下胸区约十厘米的目测换算单位 |
| 三档判定 | 正常、临界、异常,对应不用动、最好调、必须调 |
| 成像不全 | 因视野裁切导致无法判定,独立成一列 |
| 行程编码 | 用「起点 长度」成对描述二值掩码的压缩格式 |
| Dawid-Skene | 同时估计标签真值与标注者可靠性的迭代模型 |
| 平均列 AUC | 逐列算 ROC 曲线下面积再取算术平均 |
| 患者级划分 | 同一患者的全部影像只落在一侧,防止泄漏 |
| 医源性风险 | 由诊疗操作本身带来的伤害可能,本数据的核心语义 |
附录 D:十条一句话问答
| 问题 | 一句话答案 |
|---|---|
| 谁做的 | 澳新放射学会组织,二十九名放射科医师标注 |
| 影像哪来的 | 美国 NIH 的 ChestX-ray14 |
| 多少张 | 可下载的训练集三万零八十张 |
| 多少患者 | 三千七百九十一名,平均每人近八张 |
| 几个标签 | 十一列二值,覆盖四类器械 |
| 判什么 | 管端相对解剖地标的位置,分三档 |
| 有分割吗 | 有,一万七千九百九十九条管端掩码 |
| 能商用吗 | 不能,竞赛规则限定非商业 |
| 还有测试集吗 | 公开三千五百八十二张无标签,隐藏集约一万四千张 |
| 最强的替代品 | 目前没有同类公开集 |
附录 E:许可与引用
许可方面只有一条路径:Kaggle 竞赛规则。原文的关键句是非商业使用,且禁止再分发与再识别。论文没有提供 CC 类许可,数据页也没有第二个入口。这意味着任何衍生分发——包括把影像打包进你自己的数据集、镜像到内部服务器再对外提供——都落在禁止范围内。模型权重是否受约束,规则没有明说,稳妥理解是「用它可以,卖它不行」。
引用建议给两条,缺一不可:
Seah J, Law M, Culliton P, Dowd S. RANZCR CLiP - Catheter and Line Position
Challenge. Kaggle; 2020. https://www.kaggle.com/competitions/
ranzcr-clip-catheter-line-classification
Tang JSN, Seah JCY, Zia A, et al. CLiP, catheter and line position dataset.
Scientific Data. 2021;8. doi:10.1038/s41597-021-01066-8
第一条给数据出处与许可,第二条给标签定义的方法学依据。只引第二条会漏掉使用约束,只引第一条会让使用者无法核对标签语义。
编辑说明
事实核验集中在 2026 年 10 月 29 日,来源为 Kaggle 竞赛概览页、数据页、规则页与讨论区,Scientific Data 论文(DOI 10.1038/s41597-021-01066-8,PMID 34711836)全文,以及若干赛后公开方案的说明。未下载任何影像,因此本篇不含分布统计,也不含需要全量数据才能得出的数字。
规模采用「可核口径优先」原则:30,083 取自 train.csv 行数与论文,三千五百八十二取自 sample_submission 行数,隐藏测试规模只写官方表述的约数。官方宣传的四万与三者相加的差异未被调和,已在 §2.1 说明,未做取舍性改写。
标签的中英文命名差异(论文 NET 与 CSV 的 NGT)按「同一组标注的两种习惯」处理,未视为两套标签。
许可部分只复述规则原文的关键限定,未对「模型权重是否受约束」给出确定性结论,因为这属于法律解释而非页面事实。
与库内 vinbigdata-cxr、chexpert、mimic-cxr 等篇的分工是任务范式层与数据层,若同一数字在不同篇出现不一致,以官方页面原文为准。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- spr-xray-age — 共享标签:医学影像 / X光影像 / 图像分类 / 挑战赛数据集
- chexpert — 共享标签:医学影像 / X光影像 / 图像分类
- nih-chestx-ray14 — 共享标签:医学影像 / X光影像 / 图像分类
- image-embeddings-mimic-cxr — 共享标签:医学影像 / X光影像 / 图像分类
- mimic-cxr-jpg — 共享标签:医学影像 / X光影像 / 图像分类
- acouslic-ai — 共享标签:医学影像 / 图像分类 / 挑战赛数据集
- cxr-lt — 共享标签:医学影像 / X光影像 / 图像分类 / 挑战赛数据集
- rsna-series — 共享标签:医学影像 / X光影像 / 挑战赛数据集
- padchest — 共享标签:医学影像 / X光影像 / 图像分类
- brax — 共享标签:医学影像 / X光影像 / 图像分类
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
需要更高工程化程度或合规出域的商业版本?
当前展示的公开版本适用于学术研究与原型验证。千方医数集依托三甲医院直采网络,提供经专家标注、符合伦理合规的专病数据集交易服务。

