信息速览

COUGHVID — 全球最大众包咳嗽音数据集 AI-Ready Wikipedia
INFOBOX
| 字段 | 内容 |
|---|---|
| 数据集名称 | Coughvid 咳嗽音 |
| 英文全称 | The COUGHVID crowdsourcing dataset, a corpus for the study of large-scale cough analysis algorithms |
| 别名/简称 | COUGHVID、Coughvid Crowdsourcing Dataset、public_dataset_v3 |
| 疾病分类(ICD-11 编码+中文名) | ICD-11 1D92(COVID-19,病毒未证实)/ 1D93(COVID-19,病毒已证实);MD11(咳嗽) |
| SNOMED CT | 840539006(COVID-19,Disease caused by SARS-CoV-2);49727002(Cough) |
| 数据模态 | 咳嗽音频(网页/APP 众包录制)+ 自报元数据 + 呼吸科医师专家标注 |
| AI 任务类型 | 音频二分类/三分类(COVID 筛查)、干/湿咳分类、咳嗽检测、呼吸音异常检测、弱监督学习 |
| 样本总数 | 超过 25,000 条(Sci Data 论文口径);Zenodo v3.0 超过 30,000 条 |
| 数据大小 | 约 2.3 GB(public_dataset_v3.zip);约 35 小时有效音频(cough_detected>0.8) |
| 数据格式 | WEBM/OGG(Opus 编码 48 kHz 单声道)+ JSON 元数据 + metadata_compiled.csv(51 列) |
| 许可证 | CC BY 4.0 International |
| 访问级别 | 开放(Zenodo 免费直接下载,无需注册) |
| DUO 标签 | NRES(无限制使用,需遵守 CC BY 4.0 署名要求) |
| 语言 | 元数据为英语;音频内容为各国志愿者母语环境下的咳嗽声(无语音文本) |
| 首发日期 | 2020-09-24(Zenodo v1.0) |
| 最后更新 | 2022-08-26(Zenodo v3.0) |
| 发布机构 | 瑞士洛桑联邦理工学院(EPFL)嵌入式系统实验室(ESL) |
| 官方主页 | EPFL ESL Coughvid 项目页 |
| 下载地址 | Zenodo v3.0 |
| DOI | 10.5281/zenodo.7024894(数据集);10.1038/s41597-021-00937-4(论文) |
| 引用次数 | 214+(Scinapse,截至 2026-09) |
| AI 就绪度评分 | ⭐⭐⭐⭐(4/5)— 提供 51 列宽表、cough_detected 质量分与官方预处理代码,但无官方训练/测试划分、音频需 Opus 解码转换、自报标签噪声需自行清洗 |
| 页面状态 | published |
§0 E-E-A-T 审核声明
医学审核:[千方病案医学编辑部]交叉审核:§2 医学背景(ICD-11/SNOMED CT 双映射、COVID-19 咳嗽声学机理、流行病学引用)、§7 偏倚分析(自报标签局限、地理与性别偏倚、公平性证据)。
数据工程审核:[千方病案医学编辑部交叉审核] 医疗 AI 数据工程师,审核范围:§4 DAIMS 数据字典、§5 数据划分策略、§6 预处理 Pipeline(Opus 解码、重采样、VAD 切分)和坑点修复方案。
审核日期:2026-09-05
医疗免责声明:本页面提供的医学信息仅供研究和教育目的,不构成医疗建议、诊断或治疗方案。数据集的医学描述基于公开发表的文献,未经逐一临床验证。任何基于该数据集训练的 AI 模型在应用于临床决策前,必须经过独立的临床验证和监管审批。
技术免责声明:本页面的代码示例、预处理建议和基准性能数据基于公开资料整理,不保证在特定环境下的准确性和适用性。使用者应自行验证代码安全性和数据预处理流程的正确性。千方病案医数集不对因使用本页面信息而导致的任何直接或间接损失承担责任。
数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。COUGHVID 以 CC BY 4.0 许可发布,使用时须完整署名原始作者与出处;自报健康状态标签不得等同于实验室确诊结论使用。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。
§1 数据集概览
§1.0 📌 30 秒速览
这是什么? COUGHVID 是瑞士洛桑联邦理工学院(EPFL)在 2020 年 4 月新冠疫情最紧迫时启动的众包项目:志愿者打开网页、点一下"录音"按钮咳嗽几声,再填一份年龄、性别、位置的问卷,录音就进入了数据库。到论文发表时,它已收到超过 25,000 条来自全球 125 个国家/地区的咳嗽录音,是当时已知规模最大的 COVID-19 相关咳嗽声音数据集。
为什么重要? 咳嗽是 COVID-19 最常见症状之一(约 67.7% 的病例出现干咳),用手机录音 + AI 做零成本大规模筛查的设想依赖大规模训练语料,而当时没有任何一个经过验证的公开咳嗽数据库。COUGHVID 补上了这块空白:它开源了自动咳嗽检测模型给录音打质量分,还请 4 位呼吸科医师对超过 2,800 条录音做了听诊标注,是现存最大的专家标注咳嗽语料之一。
我能用它做什么? 训练咳嗽/非咳嗽检测器、COVID 阳性-有症状-健康三分类筛查模型、干咳/湿咳临床表征分类器,或研究自报标签噪声、类别不平衡与跨人群泛化这些医疗音频的真实难题。标签是自报的弱标签,把它当"确诊金标准"是本数据集最常见的错误用法。
§1.1 摘要
COUGHVID(Cough + VID,咳嗽视频/音频计划)由 EPFL 嵌入式系统实验室的 Lara Orlandic、Tomás Teijeiro 与 David Atienza 团队构建,2020-04-01 至 2020-12-01 通过网页应用众包采集,v3.0 又纳入截至 2021 年 10 月的新录音。技术路线分四层:其一,志愿者通过浏览器(MediaRecorder,编码器记录为 Chrome)提交 Opus 编码 48 kHz 单声道音频,JSON 侧车文件同步记录时间戳与问卷答案;其二,团队提取 68 个声学特征(Pramono 特征 40 个、能量包络峰值检测特征 19 个、信号长度与功率谱密度特征等)训练 XGBoost 咳嗽检测器,输出 cough_detected 概率,官方推荐以 0.8 为阈值(精度 95.4%);其三,4 位呼吸科医师按分层抽样(25% COVID / 35% 有症状 / 25% 健康 / 15% 未报告)对超过 2,800 条录音标注音质、干/湿咳、呼吸困难、喘鸣等 9 项临床属性,其中 15% 由至少 3 位医师重复标注用于一致性评估;其四,v3.0 用半监督算法融合用户自报标签与专家标签,为全部含咳录音生成 status_SSL 列。数据以 CC BY 4.0 在 Zenodo 开放(v3.0 包 2.3 GB),论文发表于 Scientific Data(2021,引用 214+,Scinapse,截至 2026-09)。
§1.2 战略价值
规模与多样性维度:在 2020 年的咳嗽音频版图上,Cambridge 数据集(Brown 等)虽有超过 10,000 条咳嗽样本但未公开且需人工逐条验证,Coswara 截至 2020 年 9 月仅约 1,300 条,NoCoCoDa 只覆盖 10 名受试者;COUGHVID 以超过 25,000 条录音、125 个国家/地区、35 小时有效音频、约 37,000 个分段咳嗽的体量,一次性解决了"没有可用开放语料"的问题。对希望做咳嗽声学生物标志物研究的团队,它是几乎唯一能支撑深度模型从头训练的开放选择。
标注体系维度:COUGHVID 提供了罕见的四层标注金字塔——自动模型打分(cough_detected,全量)、用户自报(status,全量)、半监督融合(status_SSL,v3 全量)、医师听诊(quality/cough_type/diagnosis/severity 等 9 项,2,800+ 条)。这既是资源也是研究素材:自报与专家标签之间的分歧本身就是标签噪声、弱监督学习的方法学试验田,CoughViT(2025)等工作专门利用这一点研究标注不一致下的可靠诊断。
基础设施维度:团队开源了咳嗽检测模型与预处理/特征提取代码(c4science 仓库),并保留了私有测试集协议(邮件 coughvid@epfl.ch 申请,提交预测后由团队返回指标),为社区提供了官方之外的统一评测通道——这在众包数据集里并不多见。
§1.3 同类数据集横向对比
| 数据集 | 规模(咳嗽录音) | 模态 | 标注体系 | 差异化定位 |
|---|---|---|---|---|
| COUGHVID(本条) | 超过 25,000 条(v3 超 30,000) | 咳嗽音频(众包单任务) | 自报 + 自动打分 + 4 医师专家标注 2,800+ + status_SSL | 规模最大、专家标注子集最大、CC BY 4.0 全开放 |
| Coswara | 截至 2020-09 约 1,300 条;终版 2,635 名受试者 × 9 类音频 | 咳嗽(重/浅)+ 呼吸 + 元音 + 计数 | 自报症状 + 确诊状态 | 多任务录音协议,适合同一人多声学视角融合 |
| Cambridge COVID-19 Sounds(Brown 等) | 超过 10,000 条咳嗽、7,000 用户 | 咳嗽 + 呼吸 + 语音 | 自报,235 例自报确诊;未公开 | 最早的大规模尝试,强调人工验证流程 |
| NoCoCoDa | 10 名受试者 | 媒体访谈中的咳嗽音 | 媒体来源推断 | 仅用于概念验证,无法支撑深度模型 |
| DiCOVA Challenge 语料 | 数百至上千条级别 | 咳嗽 + 呼吸 + 语音 | 竞赛专用分割 | 竞赛式评测协议,常以 COUGHVID 作补充阳性源 |
§1.4 版本时间轴
| 版本 | 发布日期 | 关键变化 | 获取地址 |
|---|---|---|---|
| Zenodo v1.0 | 2020-09-24 | 首发:超过 20,000 条录音、3 位医师标注子集(arXiv 口径) | zenodo.org/records/4048312 |
| Zenodo v2.0 | 2021-02-03 | 扩充录音与专家标注(4 位医师、超过 2,800 条) | zenodo.org/records/4498364 |
| Sci Data 论文 | 2021-06-23 | 技术验证与数据描述定稿:超过 25,000 条口径、51 列宽表 | nature.com/articles/s41597-021-00937-4 |
| Zenodo v3.0 | 2022-08-26 | 纳入截至 2021-10 录音至超过 30,000 条;新增 status_SSL 半监督标签列 | zenodo.org/records/7024894 |
§1.5 典型应用场景
- COVID-19 声音筛查模型训练:以 status(healthy/COVID-19/symptomatic)三分类为目标,用 cough_detected>0.8 过滤后约 14,787 条有效样本训练,是 2020-2025 年间数百篇咳嗽 AI 论文的标准做法。
- 咳嗽检测器训练与蒸馏:以 cough_detected 高分段为正样本训练二分类咳嗽检测器,再反哺其他呼吸音数据集的清洗管线。
- 干/湿咳临床表征分类:以专家 cough_type(dry/wet/unknown)标签训练,服务哮喘、COPD 与支气管炎的随访场景,CoughViT 已给出 74.95 AUROC 的可复现基线。
- 弱监督与标签噪声方法学研究:status 与 status_SSL 与专家 diagnosis 三套标签并存,天然构成噪声标签学习、置信学习(confident learning)的基准场景。
- 跨数据集泛化与领域自适应评测:与 Coswara、DiCOVA、Virufy 等互为外部验证集,Sound-Dr(2022)等基准工作已把 COUGHVID 用作跨库压力测试的标准臂。
同样重要的是"不适用场景"清单:COUGHVID 不含任何通气/插管等重症音频,不能用于重症预警;儿童与老年样本稀少,不应直接外推至儿科;它也无法支撑任何需要确诊金标签的药物试验终点评估。
§2 医学背景
§2.1 ICD-11 编码映射
| 标签/概念 | ICD-11 编码 | ICD-11 中文名 |
|---|---|---|
| COVID-19(病毒未证实) | 1D92 | 冠状病毒病 2019,病毒未证实 |
| COVID-19(病毒已证实) | 1D93 | 冠状病毒病 2019,病毒已证实 |
| 咳嗽(核心声学事件) | MD11 | 咳嗽 |
| 哮喘(专家 diagnosis 关联疾病) | CA23 | 哮喘 |
| 慢性阻塞性肺疾病 | CA22 | 慢性阻塞性肺疾病 |
| 肺炎 | CA40 | 肺炎 |
| 发热或肌肉疼痛(自报协变量) | MG26 | 发热 |
§2.1b SNOMED CT 映射
| 标签/概念 | SNOMED CT 码 | 术语 |
|---|---|---|
| COVID-19(疾病) | 840539006 | Disease caused by SARS-CoV-2 |
| SARS-CoV-2(病原体) | 840533007 | SARS-CoV-2 (organism) |
| 咳嗽 | 49727002 | Cough (finding) |
| 呼吸困难(dyspnea 标签) | 267036007 | Dyspnea (finding) |
| 喘鸣(wheezing 标签) | 56018004 | Wheezing (finding) |
| 哮喘 | 195967001 | Asthma (disorder) |
| 慢性阻塞性肺疾病 | 13645005 | Chronic obstructive lung disease (disorder) |
| 肺炎 | 233604007 | Pneumonia (disorder) |
§2.1c 症状-声学机理映射
| 病理/症状 | 声学表现 | 对应 COUGHVID 标签 |
|---|---|---|
| 干咳(气道刺激、无痰) | 短促脉冲簇、高频能量占比高、频谱重心上移 | cough_type=dry |
| 湿咳(分泌物 participating) | 低频爆破音、多相位咳嗽周期、粘液声学纹理 | cough_type=wet |
| 呼吸困难 | 呼吸相延长、气流噪声增强、咳嗽后喘息 | dyspnea=True |
| 气道阻塞/支气管痉挛 | 呼气相乐性哮鸣音(wheezing) | wheezing=True |
| 上气道梗阻 | 吸气相高频喘鸣(stridor) | stridor=True |
| 假性咳嗽/清嗓 | 缺乏典型咳嗽三相位结构 | severity=pseudocough |
§2.2 疾病简介与流行病学
COVID-19 由 SARS-CoV-2 引起,2020 年 3 月 11 日被 WHO 宣布为大流行,咳嗽是其最常见症状之一——约 67.7% 的病例表现为干咳。咳嗽的声学诊断并非新命题:此前研究已证明仅凭智能手机麦克风与信号处理即可辅助识别百日咳、肺炎与哮喘。疫情把这条技术路线推向前台:核酸检测成本高、耗时长,而"咳嗽几声→AI 判读"的零成本筛查若可行,可覆盖大量无法及时检测的人群。
流行病学层面,COUGHVID 团队对标签合理性做了一项独特验证:咳嗽症状在 PCR 阳性后可持续 14-21 天,因此他们将录音时刻前 14 天内来源国的 WHO 每日新增病例数与联合国人口数据库结合,发现 94.9% 的 COVID 自报录音来自每百万人新增超过 20 例的国家(有症状标签为 93.1%)——这为"自报标签大体可信"提供了生态学证据,但也同时确认了标签的间接性。
咳嗽的声学生理基础决定了"听声辨病"的可行性:一次咳嗽由吸气-声门关闭-高压呼气三个相位构成,气道分泌物、气流受限程度与声带状态会分别改变咳嗽的能量包络、频谱重心与时序结构。COUGHVID 的专家标签体系正是围绕这些可听诊维度设计的:干/湿咳对应分泌物状态,wheezing/stridor 对应气道狭窄部位(下气道 vs 上气道),dyspnea 对应通气储备,severity 则是综合负担评级。
COVID-19 与咳嗽相关流行病学要点:
| 要点 | 数值/口径 | 来源 |
|---|---|---|
| COVID-19 病例出现干咳的比例 | 约 67.7% | Sci Data 论文引言(引用文献 5) |
| 咳嗽在 PCR 阳性后的持续时间 | 14-21 天内仍显著存在 | Sci Data 论文(引用文献 26) |
| 自报 COVID 录音来自高感染率国家的比例 | 94.9%(前 14 天每百万人新增>20 例) | Sci Data 论文地理验证 |
| 自报 symptomatic 录音来自高感染率国家的比例 | 93.1% | Sci Data 论文地理验证 |
§2.3 临床任务定义
| 任务 | 类型 | 输入 | 标签来源 | 临床定位 |
|---|---|---|---|---|
| COVID 筛查 | 三分类(COVID-19/symptomatic/healthy) | 咳嗽音频 | 用户自报 status 或 status_SSL | 大规模初步分流,非诊断 |
| 干/湿咳表征 | 三分类(dry/wet/unknown) | 咳嗽音频 | 专家 cough_type | 呼吸道分泌物状态评估,辅助哮喘/COPD 随访 |
| 咳音异常检测 | 多标签二分类 | 咳嗽音频 | 专家 dyspnea/wheezing/stridor/choking/congestion | 呼吸音异常线索提取 |
| 咳嗽检测 | 二分类(咳/非咳) | 原始录音 | cough_detected 模型蒸馏 | 数据管线质量闸门 |
| 严重度分级 | 四分类(pseudocough/mild/severe/can’t tell) | 咳嗽音频 | 专家 severity | 疾病负担粗估 |
§2.4 患者人群表
| 维度 | 口径与数值 | 来源 |
|---|---|---|
| 来源 | 全球网页众包,覆盖 125 个国家/地区 | Sci Data 论文 |
| 采集时间 | 2020-04-01 至 2020-12-01(v3 延至 2021-10) | Sci Data 论文/Zenodo |
| 年龄 | 平均 36.5 岁,标准差 13.9 岁 | Sci Data 论文(cough_detected>0.8 且有元数据子集) |
| 性别 | 男性 66.0%,女性 33.5% | Sci Data 论文 |
| 健康状态自报 | healthy 78%、symptomatic 16.1%、COVID-19 阳性 5.8% | Sci Data 论文 |
| 既往呼吸疾病 | 83.6% 无既往呼吸系统疾病 | Sci Data 论文 |
| 就医类型 | 非就医人群(社区志愿者自录),无临床就诊记录 | Sci Data 论文 |
| 种族/民族 | 未采集 | — |
§2.5 临床价值
COUGHVID 的临床定位是"筛查前端"而非"诊断后端":在检测能力受限的公共卫生场景(疫情爆发初期、低资源地区),一个 AUC 0.8+ 的咳嗽筛查模型可以把有限核酸资源优先分配给高风险者。对临床研究而言,2,800+ 条医师听诊标注赋予了它超越 COVID 的价值——干/湿咳、喘鸣、呼吸困难等标签使它成为咳嗽表型分析(cough phenotyping)的公共基准,这正是急慢性咳嗽随访、可穿戴咳嗽计数的算法底座。
具体到三类受益场景:
- 公共卫生应急:新发呼吸道传染病爆发时,无需采样耗材与实验室的声学筛查可以在 24 小时内铺开,COUGHVID 提供了这类系统从零训练的起点。
- 慢性病远程随访:COPD/哮喘患者的家庭咳嗽监测需要干/湿咳与严重度分级能力,专家标签直接对应这一需求。
- 可穿戴与边缘健康:项目愿景即手机端零成本筛查, cough_detected 模型的 68 维特征管线天然面向低算力特征工程,适合迁移到微控制器级部署。
§2.6 金标准对照表
| 划分 | 标注方式 | 标注者 | 性质 |
|---|---|---|---|
| 自报 status(全量) | 志愿者问卷自报 | 无医学资质的众包用户 | 弱标签,未做 PCR 核验 |
| status_SSL(v3 全量) | 半监督模型融合用户标签与专家标签 | 算法生成(专家参与建模) | 扩展伪标签 |
| 专家子集(2,800+ 条) | 9 项听诊属性人工标注 | 4 位呼吸科医师(Bondolfi、Ryser、Gonvers、Sauty),协议由 Unisanté 指导 | 近金标准;15% 录音由至少 3 位医师重复标注 |
| 私有测试集 | 团队持有未公开标注 | EPFL 团队 | 官方统一评测通道(邮件申请) |
§3 数据集规格
§3.0 版本抉择矩阵
| 你的需求 | 推荐版本 | 大小 | 理由 |
|---|---|---|---|
| 复现 2021-2022 年论文(无 status_SSL) | Zenodo v2.0 | 约 2 GB | 与 Sci Data 论文口径一致,避免 SSL 标签引入差异 |
| 最新最大规模 + 半监督标签研究 | Zenodo v3.0 | 2.3 GB | 超过 30,000 条,status_SSL 列仅存在于 v3 |
| 快速实验/教学(不想处理 webm/ogg) | Kaggle 镜像 COUGHVID V3 | 2.92 GB | 镜像整理了目录结构,Data Explorer 可预览 |
| 官方统一测试指标 | 私有测试集(邮件申请) | 不公开 | 向 coughvid@epfl.ch 提交预测,团队返回指标 |
§3.1 模态详情
数据集为单模态音频语料 + 结构化元数据:
- 音频:每条录音一个 .webm 或 .ogg 文件,音频编解码器统一为 Opus,采样率 48 kHz、单声道、可变码率(VBR);超过 40% 的录音有效码率为 48 kbit/s(单声道最高带宽档),其余录音码率较低的原因是含长静音段——这对咳嗽检测反而有利。
- 元数据侧车:同名 .json 文件,记录 datetime(ISO 8601 时间戳)、cough_detected、自报问卷(age、gender、respiratory_condition、fever_or_muscle_pain、status、geolocation)与专家标注展开字段(expert_labels_1…4)。
- 汇总宽表:metadata_compiled.csv,51 列、一行一条录音,首列 uuid 可作索引,专家标注展开为 quality_1、cough_type_1…diagnosis_4、severity_4,并含 SNR 列。
论文 Box 1 给出的 JSON 侧车实例(UUID 4e47612c-6c09-4580-a9b6-2eb6bf2ab40c):
{
"datetime": "2020-04-10T10:30:31+00:00",
"cough_detected": "0.9466",
"age": "50",
"gender": "male",
"respiratory_condition": "True",
"fever_muscle_pain": "False",
"status": "COVID-19",
"expert_labels_1": {
"quality": "ok",
"cough_type": "dry",
"dyspnea": "False",
"wheezing": "False",
"stridor": "False",
"choking": "False",
"congestion": "False",
"nothing": "True",
"diagnosis": "COVID-19",
"severity": "mild"
}
}
注意 JSON 中所有值均为字符串类型(含布尔与数字),解析时需显式转型;fever_muscle_pain 在宽表 CSV 中列名为 fever_or_muscle_pain,两处命名不一致是社区高频踩坑点。
§3.2 按子集样本数
| 子集 | 规模 | 说明 |
|---|---|---|
| 全部公开录音(v3.0) | 超过 30,000 条 | Zenodo v3 官方口径 |
| 全部录音(论文口径,v2 时代) | 超过 25,000 条 | Sci Data 摘要 |
| XGB 判定为咳嗽(cough_detected>0.8,含元数据) | 14,787 条 | 论文技术验证口径 |
| 其中提供 GPS 信息 | 8,887 条 | 地理验证子集 |
| 其中自报 COVID 症状 | 1,014 条 | GPS 子集内 |
| 其中自报确诊 COVID-19 | 410 条 | GPS 子集内 |
| 专家标注子集 | 超过 2,800 条 | 4 位医师人工标注 |
| 三重重复标注子集 | 约 15%(专家子集内) | 用于评分者间一致性 |
| 有效音频总量 | 约 35 小时 / 约 37,000 个分段咳嗽 | cough_detected>0.8 口径 |
§3.3 数据格式
| 内容 | 格式 | 编码/规格 | 备注 |
|---|---|---|---|
| 音频文件 | .webm / .ogg 混合 | Opus,48 kHz,单声道,VBR | 文件名 = UUID V4;需 ffmpeg 系解码 |
| 元数据侧车 | .json | UTF-8 明文 | 与音频同名,含自报 + 专家标注 |
| 汇总宽表 | metadata_compiled.csv | 51 列 | 首列 uuid 可作索引;含 SNR 与 status_SSL |
| 发布包 | public_dataset_v3.zip | 2.3 GB,md5 7c6cdf184748a2600538c331ba0ba718 | Zenodo 单文件下载 |
§3.4 存储大小
- 原始 ZIP 包:2.3 GB(Zenodo v3.0 官方 md5 校验值已给出)。
- Kaggle 镜像解压后约 2.92 GB、68,900+ 个文件(截至 2026-09 的镜像统计)。
- 解码为 16 kHz/16-bit WAV 后体积约扩大 3-5 倍,建议预留 10-15 GB 磁盘空间用于预处理产物。
- 宽表 metadata_compiled.csv 仅约 30-40 MB(文本 CSV),可独立下载到本地快速探索而无需拉取全量音频。
§3.5 标注方式
COUGHVID 的标注是"自动 + 自报 + 人工 + 半监督"四层混合体系:cough_detected 来自 68 维声学特征的 XGBoost 模型(Tree-structured Parzen Estimator 调参、10 折交叉验证),属自动弱标注;status 与问卷字段属用户自报;quality_1…severity_4 属医师人工听诊标注;status_SSL 属半监督模型生成标签——团队将用户标签与专家标签共同建模后扩展到此前无标注的录音上。
§3.6 标注者资质与一致性
4 位标注者为呼吸科/内科医师(论文致谢具名:Dr. Constantin Bondolfi、Dr. Pierre-Yves Ryser、Dr. Erin Gonvers、Dr. Alain Sauty),标注协议由 Unisanté(洛桑大学初级保健与公共卫生中心)的 Dr. Mary-Anne Hartley 指导制定。每位医师标注 1,000 条录音约耗时 10 小时,人手之间无显著差异。标注通过 Google Sheets 在线完成,选中答案后行背景自动变绿以便导航。专家子集经分层随机抽样选出(且要求 cough_detected≥0.8),分层比例为 COVID 25% / symptomatic 35% / healthy 25% / 无状态 15%,确保自报 COVID 且 cough_detected>0.8 的录音 100% 至少被一位专家标注;15% 的录音由至少 3 位专家重复标注以评估一致性。后续独立研究(如 CoughViT)报告评分者间一致性不理想,转而仅采用单个专家(Expert 4)的标注进行干/湿咳分类评测。
协议中的两个关键判定规则直接影响标签语义,使用前必须知晓:
- 二分类列的低阈值勾选:dyspnea/wheezing/stridor/choking/congestion 等布尔列的官方指引是"只要对听到的声音有合理怀疑就勾选"——这使这些标签偏保守(假阳性方向),适合做筛查线索而非确诊依据。
- diagnosis 列的时段约束:医师被明确告知录音采集于 2020-04-01 至 2020-12-01 之间,应在该疫情背景下选择最可能诊断;这意味着 diagnosis 标签的先验分布与疫情时间线耦合。
§3.7 采集周期
网页应用于 2020 年 4 月上线,论文主口径的采集窗口为 2020-04-01 至 2020-12-01;v3.0 版本纳入了截至 2021 年 10 月的新录音(“数千条新增”,官方 Zenodo 描述),采集跨越疫情初期 multiple 波次,录音时间戳(datetime 字段)可用于疫情阶段分层分析。
§3.8 地域覆盖
录音来自全球 125 个国家/地区。地理信息以用户自报经纬度提供,公开版本将精度降至小数点后 1 位(约 11 公里分辨率)以保护隐私。地理分布高度不均:欧洲与南亚贡献了主要份额,COVID-19 标签录音集中于疫情高发国家(94.9% 来自 14 天内每百万人新增超 20 例的国家),非洲与大洋洲样本稀少——跨区域泛化建模时必须意识到这一点。
§3.9 设备规格
采集端为志愿者自用设备,无统一硬件:音频经浏览器 MediaRecorder API 录制,论文示例的 ffprobe 输出显示编码器标记为 Chrome、容器为 matroska/webm、音频流为 opus/48000 Hz/mono/fltp。这意味着设备麦克风频响、环境噪声与握持方式完全不受控——既是众包数据的天然缺陷,也是"真实世界音频"泛化能力的卖点。
从 ffprobe 元数据可提取的设备侧信息边界:
| 信息项 | 可获得性 | 说明 |
|---|---|---|
| 编码器(如 Chrome) | ✅ 容器元数据 | 间接指示浏览器录音而非原生 APP |
| 采样率/声道数 | ✅ 恒定 | Opus 48 kHz 单声道,全库一致 |
| 有效码率 | ✅ 可统计 | 与静音占比相关(论文:>40% 录音达 48 kbit/s) |
| 麦克风型号/手机品牌 | ❌ 未采集 | 无法按设备分桶做频响补偿 |
| 录音环境(室内/室外) | ❌ 未采集 | 只能靠 SNR 列间接推断 |
§3.10 深度溯源链
| 环节 | 执行者 | 工具/方法 | 可追溯产物 |
|---|---|---|---|
| 录音采集 | 全球志愿者 | 网页应用(MediaRecorder,Chrome 示例) | webm/ogg 音频 + JSON 侧车 |
| 质量打分 | EPFL 团队(Orlandic) | XGBoost + 68 维声学特征 | cough_detected 概率列 |
| SNR 估计 | EPFL 团队 | 录音质量估计流程 | metadata_compiled.csv 的 SNR 列 |
| 专家听诊 | 4 位医师 | Google Sheets 标注工具 + Unisanté 协议 | quality_1…severity_4 列 |
| 半监督扩展 | EPFL 团队 | 用户标签 + 专家标签融合模型 | status_SSL 列(v3) |
| 发布与版本管理 | Zenodo | DOI 独立版本号 | v1.0/v2.0/v3.0 各自可引用 |
§4 数据结构
§4.0 目录树
public_dataset_v3/ # Zenodo v3.0 解压后根目录(示例名 coughvid_20211012)
├── metadata_compiled.csv # 51 列汇总宽表,一行一条录音,uuid 为索引
├── 4e47612c-6c09-4580-a9b6-2eb6bf2ab40c.webm # 音频文件(Opus 48 kHz 单声道)
├── 4e47612c-6c09-4580-a9b6-2eb6bf2ab40c.json # 同名 JSON 侧车元数据
├── 00425bee-35ab-4bbb-8288-937dc81a0395.ogg # 另一条录音(ogg 容器,同为 Opus 编码)
├── 00425bee-35ab-4bbb-8288-937dc81a0395.json
└── ... # 共计 68,900+ 个文件(音频 + JSON 各约一半)
§4.1 DAIMS 字段字典
metadata_compiled.csv 核心字段(8 列规格:字段名/类型/说明/示例值/AI 用途/观测误差/信息性缺失编码/取值范围):
| 字段名 | 类型 | 说明 | 示例值 | AI 用途 | 观测误差 | 信息性缺失编码 | 取值范围 |
|---|---|---|---|---|---|---|---|
| uuid | str | 录音唯一标识(UUID V4),与音频/JSON 文件名一致 | 4e47612c-6c09-4580-a9b6-2eb6bf2ab40c | 主键、划分分组 | 无(系统生成) | — | UUID V4 |
| datetime | str | 上传时间戳(ISO 8601 含时区) | 2020-04-10T10:30:31+00:00 | 时间分层、疫情阶段分析 | 秒级 | — | 2020-04 至 2021-10 |
| cough_detected | float | XGBoost 咳嗽检测概率 | 0.9466 | 质量过滤(官方阈值 0.8) | 模型误差(精度 95.4%@0.8) | — | [0, 1] |
| status | str | 用户自报健康状态 | COVID-19 | 弱监督主标签 | 自报偏差(无 PCR 核验) | NULL=未报告 | healthy / COVID-19 / symptomatic / NULL |
| status_SSL | str | v3 半监督融合标签 | COVID-19 | 扩展训练标签(勿与 status 混用于同次评估) | 模型传播误差 | NULL | healthy / COVID-19 / symptomatic / NULL |
| age | float | 自报年龄 | 50.0 | 人口学分层、偏倚审计 | 自报偏差 | NULL | 数值(论文均值 36.5,σ 13.9) |
| gender | str | 自报性别 | male | 公平性评估 | 自报偏差 | NULL | male / female / other / NULL |
| respiratory_condition | str | 自报既往呼吸疾病 | False | 共病协变量 | 自报偏差 | NULL | True / False / NULL |
| fever_or_muscle_pain | str | 自报发热或肌肉疼痛 | False | 症状协变量 | 自报偏差 | NULL | True / False / NULL |
| geolocation | str | 自报经纬度(精度 0.1°) | 46.5,6.6 | 地理偏倚分析 | 坐标模糊化至约 11 km | NULL | 全球 |
| quality_1…quality_4 | str | 第 N 位专家评定的音质 | ok | 音质过滤/课程学习 | 评分者间差异 | NULL=该专家未标注 | good / ok / poor / NULL |
| cough_type_1…cough_type_4 | str | 专家评定的咳嗽类型 | dry | 干/湿咳分类任务 | 评分者间差异(一致性偏低) | NULL | dry / wet / unknown / NULL |
| dyspnea_1…dyspnea_4 | str | 专家听诊呼吸困难 | False | 多标签异常检测 | 标注者主观性 | NULL | True / False / NULL |
| wheezing_1…wheezing_4 | str | 专家听诊哮鸣音 | False | 多标签异常检测 | 标注者主观性 | NULL | True / False / NULL |
| stridor_1…stridor_4 | str | 专家听诊喘鸣 | False | 多标签异常检测 | 罕见事件,阳性极少 | NULL | True / False / NULL |
| choking_1…choking_4 | str | 专家听诊窒息样咳 | False | 多标签异常检测 | 罕见事件 | NULL | True / False / NULL |
| congestion_1…congestion_4 | str | 专家听诊鼻塞 | False | 上呼吸道感染线索 | 标注者主观性 | NULL | True / False / NULL |
| nothing_1…nothing_4 | str | 专家"无特殊发现" | True | 负类锚点 | 与其他布尔标签逻辑互斥 | NULL | True / False / NULL |
| diagnosis_1…diagnosis_4 | str | 专家临床印象 | COVID-19 | 近金标准诊断标签 | 临床印象非确诊 | NULL | healthy / URTI / LRTI / COVID-19 / obstructive / NULL |
| severity_1…severity_4 | str | 专家严重度分级 | mild | 严重度建模 | 主观分级 | NULL | pseudocough / mild / severe / can’t tell / NULL |
| SNR | float | 信噪比估计 | 12.4 | 音质过滤 | 估计值 | NULL | 连续值 |
§4.2 标签分布
JSON 侧车与 CSV 宽表的字段对应关系(解析两种来源时必须知道):
| JSON 侧车字段 | CSV 宽表列 | 差异说明 |
|---|---|---|
| datetime | datetime | 一致,ISO 8601 |
| cough_detected | cough_detected | 一致,float |
| status | status | 一致;两侧均可能缺失 |
| (无) | status_SSL | 仅宽表提供(v3 新增) |
| (无) | SNR | 仅宽表提供 |
| age / gender | age / gender | JSON 中为字符串,CSV 中已转型 |
| respiratory_condition | respiratory_condition | 一致 |
| fever_muscle_pain | fever_or_muscle_pain | 列名不同(命名不一致坑) |
| expert_labels_1.quality | quality_1 | 专家标注 JSON 为嵌套对象、CSV 展开为后缀编号 |
| expert_labels_4.severity | severity_4 | 最多 4 位专家(论文终版) |
论文统计口径(cough_detected>0.8 且有元数据的录音):
| status 标签 | 占比 | 含义 |
|---|---|---|
| healthy | 78% | 自报健康 |
| symptomatic | 16.1% | 自报有症状但未确诊 COVID |
| COVID-19 | 5.8% | 自报确诊 COVID-19 |
地理可验证子集(8,887 条含 GPS)中:自报 COVID 症状 1,014 条、自报确诊 410 条。v3.0 的 status_SSL 将标签扩展到更多含咳录音,但官方未单独给出 SSL 标签分布表,使用前应自行统计。
§4.3 关键统计
- 有效音频(cough_detected>0.8):约 35 小时,对应约 37,000 个自动分段咳嗽。
- 音频规格:Opus 48 kHz 单声道 VBR;超过 40% 录音有效码率 48 kbit/s。
- 采集高峰与 COVID 首波、Delta 波部分重叠(2020-04 至 2021-10)。
- 专家标注耗时:每人 1,000 条约 10 小时,4 人合计超过 40 小时纯听诊工时。
- Sound-Dr 基准工作报告:部分录音短于 1 秒,直接喂入分帧管线会触发读取错误。
§4.4 数据层级
提交会话(网页端一次录音 + 问卷)
└── 录音(一条 uuid:音频文件 + JSON 侧车 + 宽表一行)
└── 自动分段咳嗽(论文估计约 37,000 个,未随数据集单独发布)
└── 咳嗽相位(吸气-压缩-呼气,可在预处理中自行切分)
COUGHVID 是"录音"粒度的扁平数据集:官方未发布提交者 ID,同一志愿者多次提交无法从公开字段直接识别,只能通过 geolocation 0.1° 网格 + datetime 密集度间接推断(见 §5.3 泄漏风险)。
§4.5 缺失值与信息性缺失
| 字段组 | 缺失形态 | 信息性含义 | 建议处理 |
|---|---|---|---|
| status = NULL | 大量存在(论文早期口径约 11,326 条无状态) | 用户未填问卷或未报告 | 三分类任务中剔除或单列"unknown"类,勿默认当 healthy |
| expert 标注组全 NULL | 主体数据(约 92% 录音)未获专家标注 | 未入选分层抽样 | 仅在专家子集上做专家任务 |
| quality_N 有值而 severity_N 为 NULL | 部分专家漏答个别列 | 标注遗漏,非信息性 | 组内逐列 dropna |
| age/gender/geolocation NULL | 用户拒绝提供 | 隐私顾虑 | 协变量分析时显式报告缺失率 |
关键规则:status 的 NULL 是"信息性缺失"——有状态报告者整体更可能处于疫情关注期,直接删除 NULL 行会引入选择偏倚;至少要在论文中报告删除前后的人群分布变化。
§4.6 元数据读取速查
import pandas as pd
df = pd.read_csv("public_dataset_v3/metadata_compiled.csv", index_col=0)
# 1) 专家子集:至少被一位专家标注(diagnosis_1 非空)
expert = df[df["diagnosis_1"].notna()]
# 2) 多专家重叠子集:用于评分者间一致性研究
overlap = df[df["diagnosis_1"].notna() & df["diagnosis_2"].notna()]
# 3) 三分类最小可用集(论文口径约 14,787 条)
cls = df[(df["cough_detected"] > 0.8) & df["status"].notna()]
# 4) 转型:JSON 侧车风格字段在 CSV 中已是数值,但 age 仍有字符串脏值风险
df["age"] = pd.to_numeric(df["age"], errors="coerce")
# 5) 干/湿咳任务专用:单专家口径(CoughViT 式)
wetdry = df[df["cough_type_4"].isin(["dry", "wet"])]
§5 划分与使用建议
§5.1 官方划分
COUGHVID 不提供官方训练/验证/测试划分。官方渠道提供的唯一标准评测是私有测试集协议:研究者用公开数据交叉验证后,邮件 coughvid@epfl.ch 说明验证类型,获得无标签录音并提交预测,由团队返回性能指标。
§5.2 社区惯例划分
- 过滤 + 随机划分:cough_detected>0.8 过滤 → status 非空 → 按录音分层随机 70/10/10 或 5 折交叉验证。绝大多数 2021-2023 论文采用此法,但因忽略同提交者重复提交而偏乐观(见 §5.3)。
- 专家子集专用划分:干/湿咳等专家任务在 2,800+ 条子集内划分,常固定用单一专家标注(CoughViT 用 Expert 4)以规避评分者间噪声。
- SSL 弱监督两阶段:先在 status_SSL 全量上预训练,再在专家子集或外部数据集上微调评估。
§5.3 泄漏风险(重点)
- 同提交者多条录音:数据集无提交者 ID,同一人多次录音会同时落入训练与测试集。缓解:以 geolocation 0.1° 网格 + datetime 聚簇(如同一坐标 24 小时内多条录音)近似分组,用 GroupShuffleSplit 保证组间互斥。
- 数据增强造成泄漏:对训练集音量/噪声增强后若把增强副本也用于测试索引计算即构成泄漏;增强只允许在训练划分内进行。
- 特征间接泄漏:用 cough_detected 作为模型输入特征会把标注过滤信号带进模型;它只能当过滤闸门,不能当特征。
- status_SSL 与 status 同场竞技:两者高度相关,若一个用于训练另一个用于评估将系统性高估性能;单次实验只允许选一套。
§5.4 交叉验证建议
5-10 折分层 GroupKFold(按 §5.3 的提交者近似组分组);每折内用 cough_detected>0.8 + status 非空的一致过滤协议;报告均值±标准差而非单次最优。类别极度不平衡(COVID 仅 5.8%),建议每折内 SMOTE 或加权损失而非全局重采样后再切分。
提交者近似分组的参考实现:
import numpy as np, pandas as pd
from sklearn.model_selection import GroupShuffleSplit
def make_pseudo_groups(df: pd.DataFrame,
time_win_h: float = 24.0) -> pd.Series:
"""以 0.1° 地理网格 + 时间窗口聚类近似提交者 ID。
COUGHVID 不提供提交者字段,此法把同坐标短时段内的
多条录音视为潜在同一提交者。"""
lat = df["geolocation"].str.split(",").str[0].astype(float).round(1)
lon = df["geolocation"].str.split(",").str[1].astype(float).round(1)
grid = lat.astype(str) + "_" + lon.astype(str)
ts = pd.to_datetime(df["datetime"], errors="coerce", utc=True)
bucket = (ts.dt.floor(f"{int(time_win_h)}h")).astype(str)
return grid + "|" + bucket
gss = GroupShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
groups = make_pseudo_groups(df_filtered)
train_idx, test_idx = next(gss.split(df_filtered, groups=groups))
§5.5 外部验证建议
至少在一个非 COUGHVID 语料上验证:Coswara(多任务录音)、DiCOVA 竞赛集、Virufy 或自采数据。Sound-Dr(2022)已证明同一管线在 COUGHVID 与其他呼吸音库上表现差异显著(COUGHVID 上通用特征 + SVM 的 COVID 检测 AUC 仅约 53-55),不做外部验证的"98% 准确率"结论基本不可迁移。
§6 AI 就绪指南 ⭐
§6.0 云端快速启动
不想下载 2.3 GB ZIP?Kaggle 镜像 COUGHVID V3(coughvid_20211012,68,900+ 文件)可直接挂载:
# Kaggle Notebook 中数据集挂载路径
DATA_ROOT = "/kaggle/input/coughvid-v3/public_dataset_v3/coughvid_20211012"
Google Colab 用户建议直接从 Zenodo 拉取(约 2.3 GB,5 分钟内完成):
wget -q https://zenodo.org/records/7024894/files/public_dataset_v3.zip -O public_dataset_v3.zip
unzip -q public_dataset_v3.zip
§6.1 快速上手
以下代码假定:数据解压到 data_root 目录,目录内平铺音频与同名 JSON,另有 metadata_compiled.csv。data_root 与代码中的路径拼接关系为 data_root / f"{uuid}.webm"(或 .ogg,需双探测)。最小可用子集 = cough_detected > 0.8 且 status 非空的约 14,787 条录音(论文技术验证口径)。
import pandas as pd
from pathlib import Path
data_root = Path("public_dataset_v3") # 解压后目录
df = pd.read_csv(data_root / "metadata_compiled.csv", index_col=0)
# 官方推荐过滤:咳嗽概率 > 0.8 且自报状态非空
valid = df[(df["cough_detected"] > 0.8) & df["status"].notna()].copy()
print(valid["status"].value_counts()) # healthy / symptomatic / COVID-19
# 探测音频扩展名(webm 与 ogg 混合存在)
def find_audio(uuid: str) -> Path:
for ext in (".webm", ".ogg"):
p = data_root / f"{uuid}{ext}"
if p.exists():
return p
raise FileNotFoundError(uuid)
valid["audio_path"] = [find_audio(u) for u in valid.index[:5]] # 先试前 5 条
print(valid[["status", "cough_detected", "audio_path"]].head())
§6.2 数据获取
| 渠道 | 地址 | 大小 | 条件 |
|---|---|---|---|
| Zenodo v3.0(推荐) | zenodo.org/records/7024894 | 2.3 GB | 无需注册,直接下载,md5 校验 |
| Zenodo v2.0(复现论文) | zenodo.org/records/4498364 | 约 2 GB | 无需注册 |
| Kaggle 镜像 | kaggle.com/datasets/orvile/coughvid-v3 | 2.92 GB | Kaggle 账号 |
| 私有测试集 | 邮件 coughvid@epfl.ch | 不公开 | 说明验证类型 + 交叉验证结果 |
| 官方预处理代码 | c4science.ch/diffusion/10770 | — | 免费浏览 |
# 下载 + 完整性校验(官方 md5: 7c6cdf184748a2600538c331ba0ba718)
wget https://zenodo.org/records/7024894/files/public_dataset_v3.zip
md5sum public_dataset_v3.zip
unzip -q public_dataset_v3.zip -d coughvid_v3
§6.3 预处理全流程
从 Opus 容器到模型可用的 Mel 频谱,完整四步:解码重采样 → 静音/短样本清理 → 切分 → 特征化。
import subprocess, numpy as np, soundfile as sf
from pathlib import Path
def to_wav_16k(src: Path, dst: Path) -> None:
"""ffmpeg 解码 webm/ogg Opus 并重采样到 16 kHz 单声道 WAV。
librosa 旧版后端无法直读 Opus 容器,统一先转 WAV 最稳妥。"""
dst.parent.mkdir(parents=True, exist_ok=True)
subprocess.run(
["ffmpeg", "-y", "-i", str(src),
"-ac", "1", "-ar", "16000", "-sample_fmt", "s16", str(dst)],
check=True, capture_output=True)
import librosa
MIN_SEC, MAX_SEC = 1.0, 15.0 # Sound-Dr 报告 <1 秒样本会导致读取错误
def load_cough(wav_path: Path):
y, sr = librosa.load(wav_path, sr=16000, mono=True)
# 能量 VAD:去掉首尾与段间静音
intervals = librosa.effects.split(y, top_db=30)
if len(intervals) == 0:
return None
y_vad = np.concatenate([y[s:e] for s, e in intervals])
if not (MIN_SEC * sr <= len(y_vad) <= MAX_SEC * sr):
return None
return y_vad, sr
def mel_spectrogram(y, sr, n_mels=64):
m = librosa.feature.melspectrogram(y=y, sr=sr, n_mels=n_mels,
n_fft=1024, hop_length=256)
return librosa.power_to_db(m, ref=np.max)
预处理产物建议落盘缓存(16 kHz WAV + .npy 频谱),COUGHVID 全量解码一次约需 30-60 分钟(单机 8 核并行)。
全量并行转码脚本(CPU 版):
#!/usr/bin/env bash
# 用法: ./batch_transcode.sh <解压目录> <输出目录>
SRC=$1; DST=$2
mkdir -p "$DST"
ls "$SRC" | grep -E '\.(webm|ogg)$' | xargs -P "$(nproc)" -I {} sh -c \
'ffmpeg -y -i "$1" -ac 1 -ar 16000 -sample_fmt s16 \
"$2/$(basename "${1%.*}").wav" 2>/dev/null' _ \
"$SRC/{}" "$DST"
# 完成后核对:wav 数应约等于音频文件数
ls "$DST" | wc -l
§6.4 PyTorch DataLoader 完整代码
import torch
from torch.utils.data import Dataset, DataLoader
import numpy as np, pandas as pd
from pathlib import Path
LABELS = {"healthy": 0, "symptomatic": 1, "COVID-19": 2}
class CoughvidDataset(Dataset):
"""COUGHVID 三分类数据集。
目录结构预期:
root/
├── metadata_compiled.csv
├── cache_wav/ # §6.3 预处理产物(16 kHz WAV)
│ ├── <uuid>.wav
└── cache_mel/ # 频谱缓存
├── <uuid>.npy
"""
def __init__(self, root: str, split_df: pd.DataFrame, train: bool = True):
self.root = Path(root)
self.df = split_df.reset_index(drop=True)
self.train = train
def __len__(self):
return len(self.df)
def _augment(self, mel: np.ndarray) -> np.ndarray:
if self.train and np.random.rand() < 0.5: # SpecAugment:时间/频率遮蔽(安全增强)
t, f = mel.shape
mel = mel.copy()
mel[:, np.random.randint(0, max(1, f - 8)):][:, :8] = -80.0
mel[np.random.randint(0, max(1, t - 16)):, :][:16, :] = -80.0
return mel
def __getitem__(self, idx):
row = self.df.iloc[idx]
mel = np.load(self.root / "cache_mel" / f"{row.uuid}.npy")
mel = self._augment(mel.astype(np.float32))
mel_t = torch.from_numpy(mel).unsqueeze(0) # (1, n_mels, T)
mel_t = torch.nn.functional.interpolate(
mel_t, size=(64, 128), mode="bilinear", align_corners=False)
label = LABELS[row.status]
return mel_t, label
def make_loaders(root, train_df, val_df, test_df, batch_size=32, num_workers=4):
common = dict(root=root, batch_size=batch_size,
num_workers=num_workers, pin_memory=True)
return (DataLoader(CoughvidDataset(root, train_df, True), shuffle=True, **common),
DataLoader(CoughvidDataset(root, val_df, False), shuffle=False, **common),
DataLoader(CoughvidDataset(root, test_df, False), shuffle=False, **common))
配套训练循环(含不平衡加权的完整可运行示例):
import torch.nn as nn
def train_one_epoch(model, loader, optimizer, device):
model.train()
# 类别加权:按训练集频数倒数(healthy 0.43 / symptomatic 2.1 / COVID 5.8 量级自行计算)
weights = torch.tensor([0.43, 2.10, 5.80], device=device)
criterion = nn.CrossEntropyLoss(weight=weights)
total = 0.0
for mel, y in loader:
mel, y = mel.to(device), y.to(device)
optimizer.zero_grad()
loss = criterion(model(mel), y)
loss.backward()
optimizer.step()
total += loss.item() * len(y)
return total / len(loader.dataset)
def run(root, train_df, val_df, test_df, epochs=15):
device = "cuda" if torch.cuda.is_available() else "cpu"
model = nn.Sequential( # 占位骨干:换成 ResNet-18 等更强骨干
nn.Conv2d(1, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2),
nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.AdaptiveAvgPool2d(1),
nn.Flatten(), nn.Linear(64, 3)).to(device)
tr, va, te = make_loaders(root, train_df, val_df, test_df)
opt = torch.optim.AdamW(model.parameters(), lr=3e-4)
for epoch in range(epochs):
loss = train_one_epoch(model, tr, opt, device)
print(f"epoch {epoch}: loss={loss:.4f}")
return model
§6.5 坑点 8 个
⚠️ 坑点 1:自报 status 不是确诊标签(分类:标签理解)
问题:status 列是志愿者问卷自报,无 PCR 核验;团队仅能用"来源国 14 天内每百万人新增>20 例"的生态学间接验证(覆盖 94.9% 的 COVID 标签录音),把 status 直接当确诊金标准会系统性污染评估。
症状:模型在 COUGHVID 上 AUC 0.95,换到有确诊验证的数据集(如 DiCOVA 复赛集)骤降 20+ 个点;错误分析发现大量"阳性"样本听感完全健康。
解决:
- 简单方法:所有结论措辞改为"自报状态预测",禁止写"COVID 诊断"。
- 进阶方法:在专家子集上做二次评估(diagnosis 列由医师听诊给出),或以 status_SSL 与 status 的不一致样本构建噪声感知验证集。
- SOTA 方法:采用噪声标签学习框架(co-teaching / confident learning),把 status 建模为带噪声的弱标签源,专家 diagnosis 作为干净验证锚点。
参考:Sci Data 论文 Technical Validation;Emergent Mind COUGHVID 综述
⚠️ 坑点 2:webm/ogg Opus 48 kHz 解码陷阱(分类:工程陷阱)
问题:音频以 WEBM/OGG 容器封装 Opus 编码(48 kHz 单声道 VBR),librosa 在缺少 ffmpeg/audioread 后端时无法直读,且论文与下游工作的采样率口径不一(Sound-Dr 基准中 COUGHVID 以 22,050 Hz 读入 vs 原生 48 kHz)。
症状:librosa.load抛出NoLibrosaBackend/Unknown format或audioread超时;或不同机器读出不同采样率导致频谱不可比。
解决:
- 简单方法:安装 ffmpeg,
librosa.load(path, sr=16000)让 audioread 兜底。- 进阶方法:批量
ffmpeg -i in.webm -ac 1 -ar 16000 out.wav预转码(见 §6.3),全部实验统一 16 kHz;多进程并行把全量转码压到半小时级。- SOTA 方法:torchaudio 2.x(
backend="ffmpeg")直接流式解码 Opus,配合 WebDataset 分片做大规模训练,避免中间 WAV 落盘。
参考:Sci Data 论文 Data Records;Sound-Dr 基准讨论
⚠️ 坑点 3:短于 1 秒的录音与长静音段(分类:预处理陷阱)
问题:众包录音完全不受控,Sound-Dr(2022)明确报告 COUGHVID 中存在短于 1 秒的样本,会在分帧/读取阶段直接报错;同时部分录音含大段静音(这正是其 VBR 码率偏低的原因),直接整段送入模型会稀释有效咳嗽信号。
症状:DataLoader 随机崩溃(张量维度为 0);或模型收敛但注意力可视化发现 90% 权重落在静音帧。
解决:
- 简单方法:以时长硬过滤(如 1-15 秒),丢弃超界样本并在论文报告丢弃数量。
- 进阶方法:
librosa.effects.split(top_db=30)能量 VAD 切分再拼接(见 §6.3),或 webrtcvad/Silero-VAD 保留语音活性段。- SOTA 方法:两级过滤——先 cough_detected 阈值,再 VAD 段数 + 段时长分布统计,把"零有效咳嗽段"样本整条剔除。
参考:Sound-Dr 基准;Sci Data 论文(VBR 与静音说明)
⚠️ 坑点 4:cough_detected 阈值取舍导致"同名不同集"(分类:评估误用)
问题:官方推荐 0.8 阈值(XGBoost 精度 95.4%),但各下游论文过滤协议五花八门:CNN-LSTM 工作用 27,550 条(含 1,155 阳性),PSR+3D DCNN 用 8,400+ 条,DiCOVA 系统引用全池 20,072 条/1,010 阳性——同一个"COUGHVID"在不同论文里是不同的数据集。
症状:复现论文数字对不上,差距 10 个点以上且方向不定;审稿人质疑样本量口径。
解决:
- 简单方法:固定
cough_detected>0.8 + status 非空并在论文表格中报告过滤前后样本数。- 进阶方法:做阈值敏感性曲线(0.5/0.6/0.8/0.9),展示结论对过滤强度的稳健性。
- SOTA 方法:把 cough_detected 作为样本权重而非硬过滤(软加权交叉熵),保留边界样本信息。
参考:arXiv 2009.11644(0.8 阈值与精度);CNN-LSTM 论文 Table 1-3
⚠️ 坑点 5:无官方划分 + 隐性同提交者重复 → 评估泄漏(分类:数据泄漏)
问题:数据集不提供官方划分也不提供提交者 ID,而众包渠道天然存在同一志愿者多次提交;按 uuid 随机划分会让"同一个人"同时出现在训练与测试集。
症状:随机划分的 AUC 比"按人分组划分"高出 5-15 个点;模型对同一提交者的另一条录音预测置信度异常高。
解决:
- 简单方法:接受随机划分但明确声明局限(社区多数论文的做法)。
- 进阶方法:以 geolocation 0.1° 网格 + datetime 窗口聚类近似提交者分组,GroupShuffleSplit/GroupKFold 组间互斥。
- SOTA 方法:跨地域外推评测(训练国 ≠ 测试国)+ 跨时间外推(2020 波次训练、2021 录音测试),同时给出 ID 泛化与 OOD 泛化两个口径。
参考:Sci Data 论文(geolocation 精度 0.1°);Emergent Mind 协议依赖性讨论
⚠️ 坑点 6:status 与 status_SSL 双标签体系混用(分类:标签理解)
问题:v3.0 新增半监督列 status_SSL(算法融合用户标签与专家标签后扩展到全部含咳录音),与原始 status 列高度相关但不一致;两套口径混在同一实验(如一个训练一个测试)会人为制造高准确率。
症状:训练用 status_SSL、测试用 status 时准确率虚高;或合并两列为训练目标后类别分布"变好"但验证集与部署目标脱节。
解决:
- 简单方法:单次实验锁定一套标签,论文表格显式标注用的是哪一列。
- 进阶方法:把 status_SSL 仅用于预训练阶段,微调与评估锁定 status 或专家 diagnosis。
- SOTA 方法:把 status/status_SSL/expert diagnosis 作为三级标签层级,做多源弱监督联合训练(损失加权按标签可信度递增)。
参考:Zenodo v3.0 说明(status_SSL);Kaggle 镜像文档
⚠️ 坑点 7:极端类别不平衡叠加人口学偏倚(分类:偏倚陷阱)
问题:COVID 阳性仅 5.8%,healthy 占 78%;同时男性 66.0%、平均年龄 36.5 岁、83.6% 无既往呼吸疾病、COVID 标签集中于高感染率国家。未加处理的模型会退化成"几乎全预测 healthy",且对女性、老年与低资源地区亚群性能更差。
症状:整体 accuracy 轻松 90%+ 但阳性类 F1 接近 0;按性别分层的 AUC 差异超过 8 个点。
解决:
- 简单方法:class-weighted BCE/加权交叉熵,评估报 macro-F1 与每类 AUC 而非 accuracy。
- 进阶方法:分层采样批构建(每批固定阳性数)+ focal loss;按年龄/性别分桶报告公平性指标。
- SOTA 方法:参考 2025 年跨数据集研究的平衡协议(680 阳性 vs 680 阴性重采样)作对比口径,同时在原始不平衡分布上报告真实场景指标,双口径并行。
参考:Sci Data 论文 demographic representativeness;跨数据集平衡协议研究
⚠️ 坑点 8:跨论文数字不可直接比较(分类:评估误用)
问题:COUGHVID 没有官方公开测试集,各论文的任务定义(三分类/二分类/干湿咳)、过滤协议、子集规模、标签源全部不同:PSR+3D DCNN 报 98.5% accuracy,CoughViT 干/湿咳盲测 AUROC 0.71,Sound-Dr 通用管线 AUC 仅约 53-55——三者都"在 COUGHVID 上"。
症状:文献综述里直接把 98.5% 与 0.71 并列排名;选型决策被不可比数字误导。
解决:
- 简单方法:任何对比表先核对四要素(任务定义/过滤协议/划分方式/标签源),不同要素的数字不进同一列。
- 进阶方法:自建固定基准分割并在 GitHub 发布 split 文件 + 随机种子,让社区可在同一划分上比较。
- SOTA 方法:走官方私有测试集协议(邮件 coughvid@epfl.ch 提交预测,团队返回指标),获得与团队口径一致的统一评测。
参考:Zenodo 私有测试协议;Sci Rep 2025 PSR 论文
§6.6 数据增强
| 增强 | 安全性 | 说明 |
|---|---|---|
| SpecAugment(时间/频率遮蔽) | ✅ 安全 | 不改变咳嗽生理信息,CNN-LSTM 与 CoughViT 类工作标配 |
| 加性高斯/背景噪声 | ✅ 安全 | 模拟众包采集环境,提升对 webm/ogg 混合来源的鲁棒性 |
| 音量抖动(±6 dB) | ✅ 安全 | 补偿设备增益差异 |
| 随机时间裁剪(保留完整咳嗽段) | ✅ 安全 | 配合 VAD 使用效果最佳 |
| 音高移位(pitch shift ≤2 半音) | ⚠️ 谨慎 | 轻度可用;大幅移位会扭曲性别/年龄相关声学特征,破坏公平性评估 |
| 时间伸缩(time stretch >10%) | ❌ 危险 | 咳嗽的时序动力学(三相位结构)本身是病理信息,伸缩等于篡改病理特征 |
| MixUp 跨类别混合 | ❌ 危险 | "健康咳 + 阳性咳"的混合样本无临床意义,且污染弱标签语义 |
§6.7 模型推荐
| 模型 | 参数量级 | 适用任务 | 在 COUGHVID 上的证据 |
|---|---|---|---|
| ResNet-18/34(1 通道 Mel 输入) | 11-21 M | 三分类筛查基线 | IEEE 2024 基准中 resnet18.a3_in1k 达 58.1 AUROC(COVID 任务) |
| Attention CNN-LSTM | 约 5 M | 三分类 + 类别不平衡 | 2022 年论文以 27,550 条训练取得同期领先 |
| AST(Audio Spectrogram Transformer) | 86 M | 迁移学习微调 | AST-Audioset 在干/湿咳任务 0.56 AUROC,低于自监督预训练模型 |
| CoughViT(自监督 ViT) | 约 22 M | 干/湿咳、COVID 检测 | 干/湿咳微调 74.95 AUROC、盲测集 0.71 |
| PSR + 3D DCNN | 约 2 M | 三分类(相空间重构输入) | Sci Rep 2025 报告 98.5% accuracy(自有协议) |
| 手工特征 + SVM/RF | <0.1 M | 快速基线/消融 | Sound-Dr 基准 AUC 约 53-55,说明端到端深度确有必要 |
§6.8 硬件需求
| 阶段 | 最低配置 | 推荐配置 | 说明 |
|---|---|---|---|
| 解码 + VAD 预处理 | 4 核 CPU / 8 GB RAM | 8-16 核 CPU / 32 GB RAM | ffmpeg 多进程,全量约 30-60 分钟 |
| Mel 特征缓存 | 任意 CPU | 同上 | 64 Mel × 128 帧的 .npy 约 32 KB/条 |
| 训练(ResNet 级) | 1× GTX 1660 6 GB | 1× RTX 3090/4090 24 GB | batch 32-64,单折 1-2 小时 |
| 训练(AST/ViT 级) | 1× RTX 3090 | 2× A100 40 GB | 大模型需混合精度 + 梯度累积 |
| 推理 | CPU 即可 | 边缘设备量化部署 | 项目愿景即手机端零成本筛查 |
§6.9 评估指标代码
import numpy as np
from sklearn.metrics import (roc_auc_score, f1_score, balanced_accuracy_score,
confusion_matrix)
def evaluate(y_true, y_proba, positive_idx=2):
"""三分类 COVID 筛查评估:不平衡场景禁用 accuracy 作主指标。"""
y_pred = y_proba.argmax(1)
metrics = {
"macro_F1": f1_score(y_true, y_pred, average="macro"),
"balanced_acc": balanced_accuracy_score(y_true, y_pred),
"covid_AUC": roc_auc_score(y_true == positive_idx,
y_proba[:, positive_idx]),
}
cm = confusion_matrix(y_true, y_pred, labels=[0, 1, 2])
tn = cm[0, 0] + cm[1, 1] + cm[0, 1] + cm[1, 0] # 非阳性两类合并
spec = tn / (cm[:2].sum()) if cm[:2].sum() > 0 else np.nan
metrics["covid_specificity"] = spec
return metrics
def calibration_report(y_true, y_proba, n_bins=10):
"""筛查类模型必查校准:自报标签训练的模型普遍过自信。"""
conf = y_proba.max(1)
correct = (y_proba.argmax(1) == y_true).astype(float)
bins = np.linspace(0, 1, n_bins + 1)
ece = 0.0
for lo, hi in zip(bins[:-1], bins[1:]):
mask = (conf > lo) & (conf <= hi)
if mask.sum() > 0:
ece += mask.mean() * abs(correct[mask].mean() - conf[mask].mean())
return ece
§6.10 MLOps 笔记
- 数据版本化:把 Zenodo md5(7c6cdf184748a2600538c331ba0ba718)写进实验配置,保证"哪个版本的 COUGHVID"可追溯;v2/v3 差异巨大,混用即事故。
- 过滤协议即代码:cough_detected 阈值、时长过滤、status 过滤全部固化在版本控制的数据准备脚本里,禁止手工删样本。
- 标签源单一化:每个实验 run 记录 label_column(status 或 status_SSL),CI 检查训练/评估列一致。
- 监控漂移:上线后的现场录音与训练分布(性别比、采样率、时长)做 PSI 监控;COUGHVID 本身跨越多个疫情波次,天然适合做漂移回放测试集。
- 复现优先:官方预处理代码在 c4science 仓库,若该服务不可用,以本词条 §6.3 代码 + 论文描述自建管线并做单元测试对拍。
- 成本预算:全量一次性的解码/特征成本约 1 GPU 小时等值;真正昂贵的是标签清洗实验(专家子集仅 2,800+ 条),建议把"专家子集 vs 全量弱标签"两条实验线分开管理。
- 模型卡义务:发布模型时附上 §7.3 泛化性表与 §7.5 公平性空白声明,明确"自报标签"边界。
§7 质量评估与局限性
§7.1 已知偏倚
| 偏倚类型 | 描述 | 严重程度 | 缓解措施 |
|---|---|---|---|
| 标签噪声 | status 为自报,无 PCR 核验;团队仅能生态学间接验证 94.9% | 高 | 专家子集二次评估;噪声标签学习;报告噪声上界 |
| 类别不平衡 | healthy 78% vs COVID 5.8% | 高 | 加权损失/重采样;macro 指标 |
| 性别偏倚 | 男性 66.0% vs 女性 33.5% | 中 | 分性别评估;按性别重加权 |
| 年龄偏倚 | 均值 36.5 岁,老年样本少 | 中 | 年龄分桶报告;对老年外推需谨慎 |
| 地理偏倚 | 125 国但分布不均,COVID 标签集中于高感染率国家 | 中-高 | 跨国外推评测;按大洲分层 |
| 选择偏倚 | 会用网页众包者 = 有网络与数字素养的人群;status NULL 行删除引入进一步偏移 | 中 | 保留 NULL 做敏感性分析 |
| 时间偏倚 | 采集窗口跨越疫情多波次,毒株与流行强度变化 | 中 | datetime 分层;波次外推测试 |
| 设备偏倚 | 众包设备不受控,频响差异混入特征 | 低-中 | 增强鲁棒性训练;按码率分桶审计 |
这些偏倚并非独立:标签噪声与地理偏倚相互交织(COVID 标签集中于高感染率国家,而这些国家的检测可及性差异又改变了"自报确诊"的可信度),类别不平衡放大了性别/年龄偏倚的下游影响。单点缓解(例如只做重采样)无法解开这个耦合结构,建议按"标签层 → 分布层 → 设备层"的顺序依次处理并各自报告消融。
§7.2 标注质量
专家标注由 4 位医师按统一协议(Unisanté 指导)完成:二分类列"有合理怀疑即勾选"、diagnosis 列选最可能诊断、音质三级标准明确(good=背景噪声极小/ok=有噪声/poor=噪声显著)。一致性方面,官方通过 15% 三重重复标注评估评分者间一致性,但未在论文中给出 kappa 数值;后续独立研究(CoughViT,2025)指出评分者间一致性不足,仅在单一专家标注上评测获得稳定结果——这应视为该数据集专家标签的已知特性而非缺陷遮蔽:多专家标注的分歧本身保留了标注不确定性的真实形态。
对标注质量敏感的任务,建议做三步审计:
- 先在 overlap 子集上自行计算每对专家的 Cohen’s kappa(论文未给出数值,自行量化是唯一可靠路径)。
- 按专家列拆分实验:每个专家标注独立训练/评估一次,报告离散度而非只报合并结果。
- 把"多专家全一致"的样本切出高置信子集,作为消融实验的干净锚点。
§7.3 泛化性
| 部署场景 | 失效风险 | 证据 |
|---|---|---|
| 医院门诊人群 | 高:众包人群与就诊人群分布差异大,且就诊者共病率高 | 论文 83.6% 无既往呼吸疾病 vs 门诊人群完全不同 |
| 变异株流行期 | 中-高:声学表型随毒株与疫苗接种状态变化 | 采集止于 2021-10,覆盖以原始株/Alpha/Delta 为主 |
| 非智能手机/低端麦克风 | 中:Opus 48 kHz 假设可能不成立 | 论文设备不受控描述;Sound-Dr 采样率差异报告 |
| 儿童 | 高:平均 36.5 岁、人群以成人为主 | 论文人口学统计 |
| 跨语言/跨文化咳嗽表达 | 中:咳嗽本身语言无关,但录音行为习惯与噪声环境不同 | 125 国分布不均的证据 |
| 长期部署(后疫情时代) | 高:COVID 流行强度骤降后阳性先验完全改变 | 数据集 COVID 任务的历史情境性 |
§7.4 伦理
全员知情同意(上传即同意条款);隐私保护措施包括:地理坐标精度降至小数点后 1 位(约 11 公里)、无姓名/联系方式/病历号等直接标识符、文件名采用随机 UUID V4。许可证 CC BY 4.0 允许商用与再分发,但要求完整署名。需要特别注意的伦理边界:自报健康状态不属于敏感医疗记录,但声音本身是生物特征,再分发衍生数据集时应评估声纹反识别风险。
§7.5 公平性
已识别的亚群差异来源:性别(66.0% 男性)、年龄(青年主导)、地理(125 国但高度不均)、数字素养(众包准入门槛)。公开文献中尚无针对 COUGHVID 的系统性分亚群公平性审计,这是明确的研究空白;建议使用者在发布模型时至少报告分性别与分年龄层的 AUC 差异。
§7.6 数据漂移
COUGHVID 的时间跨度(2020-04 至 2021-10)横跨 COVID 大流行的多个阶段:病毒毒株、检测可及性、"自报确诊"的判定标准都在变化。status 标签的语义在窗口内并不恒定——2020 年春季"自报确诊"意味着核酸稀缺下的强信号,2021 年则可能是常规筛查结果。部署任何以 COUGHVID 训练的模型,都应把这种时间性语义漂移写进模型卡。
§7.7 DAIMS 数据质量评估
| # | 检查项 | 状态 | 说明 |
|---|---|---|---|
| 1 | 宽格式 | ✅ | metadata_compiled.csv 一行一录音、51 列齐备 |
| 2 | 唯一标识 | ✅ | UUID V4 主键,音频/JSON/宽表三方一致 |
| 3 | 特殊字符处理 | ✅ | 字段均为受控词表或数值,无自由文本混杂 |
| 4 | 重复行 | ⚠️ | 宽表无重复 uuid,但无法排除同一提交者多条录音 |
| 5 | 缺失编码 | ✅ | 未报告字段统一 NULL,语义一致 |
| 6 | 标签标识 | ✅ | 标签列与协变量列命名区分清晰(status/diagnosis 等) |
| 7 | 罕见类分组 | ⚠️ | stridor/choking 等罕见阳性极少,未提供官方合并建议 |
| 8 | 偏倚评估 | ✅ | 论文含人口学、地理与标签合理性技术验证章节 |
| 9 | 数据字典 | ✅ | 论文 Table 1/4 完整定义全部变量 |
| 10 | 信息性缺失解释 | ✅ | status NULL 的成因与处理有明确说明 |
| 11 | 设备记录 | ⚠️ | 仅 ffprobe 层面编码器信息(Chrome),无统一设备型号字段 |
| 12 | 共线性 | ✅ | 布尔协变量间无强共线性问题;特征层面需使用者自检 |
| 13 | 编码映射 | ✅ | 类别取值有受控枚举;ICD-11/SNOMED 映射见本词条 §2 |
| 14 | 时间戳处理 | ✅ | datetime 为 ISO 8601 含时区 |
| 15 | 划分建议 | ❌ | 官方未提供训练/测试划分 |
| 16 | 泄漏讨论 | ⚠️ | 官方未讨论同提交者重复风险,需使用方自行处理 |
| 17 | 标签分布 | ✅ | status 分布在论文中明确(78/16.1/5.8) |
| 18 | 测量偏倚 | ⚠️ | 自报与听诊的测量差异已声明,但无量化校准 |
| 19 | 外部验证建议 | ✅ | 官方提供私有测试集协议;论文建议跨库验证 |
| 20 | 版本记录 | ✅ | Zenodo 三版本独立 DOI,变更日志清晰 |
| 21 | 预处理脚本 | ✅ | c4science 官方开源预处理/特征提取代码 |
| 22 | 合规要求 | ✅ | CC BY 4.0 + 知情同意,许可边界明确 |
| 23 | 多模态对齐 | ⚠️ | 音频与 JSON 天然对齐;但无视频/生理信号等多模态扩展 |
| 24 | 去标识化 | ✅ | 坐标模糊化 + UUID 化文件名 + 无直接标识符 |
DAIMS 评分:18.5 / 24(✅ 计 1 分 ×15,⚠️ 计 0.5 分 ×7,❌ 计 0 分 ×1)
评分解读:COUGHVID 在数据工程基本面(标识、宽表、字典、版本、去标识化、合规)达到开放数据集的一流水准,官方还罕见地提供了预处理代码与私有测试通道;扣分集中在"划分与重复个体"(❌15、⚠️4/16)与"测量/设备元信息"(⚠️11/18)——这些是众包音频范式的固有短板,而非团队能力问题。
对你意味着什么:如果只需一个可快速加载的咳嗽音频大库,COUGHVID 开箱即用(宽表 + 质量分 + 版本化 DOI);但任何以论文级严谨性为目标的实验,都必须自行补三件事——按提交者近似的分组划分(补 #15/16)、分亚群性能审计(补 #18)、以及明确声明设备元信息缺失对部署端的影响(补 #11)。
§7.8 外部验证矩阵
| 外部数据集/场景 | 来源机构 | 评估任务 | 性能指标 | 相对内部变化 | 关键发现 |
|---|---|---|---|---|---|
| DiCOVA Challenge 池 | DPDK/AI4MI 联盟(印度) | COVID 检测(COUGHVID 作辅助阳性源) | 未单独报告 | — | 从 COUGHVID 过滤提取 640 条额外 COVID 咳嗽用于增广,提升阳性多样性 |
| Sound-Dr 跨库基准 | 学术合作(2022) | 特征+SVM COVID 检测 | AUC 约 53-55 | 显著低于库内深度模型 | 通用管线在 COUGHVID 上表现弱;短样本(<1 秒)造成读取失败 |
| LucaCough + 多库基准 | 上海交大瑞金医院等(IEEE 2024) | ImageNet 预训练模型迁移 COVID 任务 | AUROC 52.8-58.1 | 远低于同管线在 LucaCough 的 84+ | 通用视觉预训练对 COUGHVID COVID 任务迁移有限 |
| CoughViT 盲测集 | 多机构(2025-08) | 干/湿咳分类 | AUROC 0.71(盲测);74.95(微调协议) | 显著高于 logistic regression 0.59 | 仅用 Expert 4 标注规避评分者噪声 |
| COUGHVID → 其他库增广 | DiCOVA ResNet-50 系统(2021) | COVID 检测增广 | — | — | 验证 COUGHVID 作为外部阳性源的实际增益 |
矩阵解读:COUGHVID 的外部验证证据呈"两头分化"——作为增广源(DiCOVA)与干/湿咳任务源(CoughViT)时贡献明确,而作为 COVID 检测主训练源时,跨库迁移性能普遍降至接近随机的水平(52-58 AUROC)。这与其说是模型问题,不如说是自报标签的天花板:任何在 COUGHVID 上宣称"可部署"的 COVID 筛查系统,都必须补一张真实检测验证的外部证据卡。
§8 基准性能与生态
§8.1 排行榜(代表性结果,跨协议不可直接比较)
| 排名 | 模型 | 性能 | 年份 | 关键技术 | 完整引用 | 代码 |
|---|---|---|---|---|---|---|
| 1 | PSR + 3D DCNN | 98.5% accuracy / 96.5% recall / 99.7% specificity(三分类,8,400+ 条自有协议) | 2025 | 相空间重构 + 3D 卷积 | Altae, A. A., Ehsani Rad, A. & Mohebbi, K., 2025, Scientific Reports. 10.1038/s41598-025-29633-8 | 未公开 |
| 2 | Cough2COVID-19 (MLEDL) | 98% accuracy / AUC 0.981(二分类,自有协议) | 2025 | 多层集成深度学习 + 特征排序 | Cough2COVID-19 authors, 2025, Scientific Reports 15:6245. 10.1038/s41598-025-90514-1 | 未公开 |
| 3 | Attention CNN-LSTM | 同期领先(27,550 条、1,155 阳性,10 折 CV) | 2022 | 双层数据增强 + 注意力混合架构 | Han, J. et al., 2022, Journal of Supercomputing. 10.1007/s10844-022-00707-7 | 未公开 |
| 4 | CoughViT | 74.95 AUROC(干/湿咳微调)/ 0.71(盲测集) | 2025 | 自监督预训练 + ViT;仅用 Expert 4 标注 | Luong et al., 2025(2025-08 发表) | 未公开 |
| 5 | resnet18.a3_in1k(迁移) | 58.1 AUROC(COVID 二分类基准) | 2024 | ImageNet 预训练 ResNet 系统评测 | Towards Reliable Respiratory Disease Diagnosis Based on Cough Sounds and Vision Transformers, IEEE(2024) | 未公开 |
| 6 | 手工特征 + SVM(Sound-Dr) | AUC 约 53-55 | 2022 | 通用特征管线对照基线 | Hoang et al., 2022(Sound-Dr 基准研究) | 未公开 |
⚠️ 上表数字不可直接比较:任务定义(三分类/二分类/干湿咳)、过滤协议(样本量从 8,400 到 27,550 不等)、划分方式与标签源各不相同(详见坑点 8)。
§8.2 SOTA 总结与选型建议
库内自建协议的高分结果(98% 级 accuracy)几乎都来自定制过滤 + 平衡化处理,参考价值在于方法学而非绝对性能;可信的横向比较锚点是 CoughViT 的 0.71 盲测 AUROC(干/湿咳)与 IEEE 2024 的 52-58 AUROC(COVID 任务,通用迁移模型)。选型建议:快速基线选 ResNet-18 + Mel 频谱 + 加权损失;追求发表级性能选自监督预训练(COVID-19 Sounds 或 AudioSet 上预训练)+ 小学习率微调;方法学研究(标签噪声、域自适应)直接利用 COUGHVID 的多级标签结构,这才是它区别于其他音频库的真正优势。
按研究目标的选型路线图:
| 你的目标 | 推荐路线 | 参考锚点 |
|---|---|---|
| 课程作业/快速原型 | metadata_compiled.csv + Mel 频谱 + ResNet-18 | resnet18 迁移 58.1 AUROC(IEEE 2024) |
| 发表级 COVID 筛查 | 自监督预训练 → COUGHVID 微调 → 外部验证 | CoughViT 协议(2025) |
| 干/湿咳临床表征 | 单专家标注(cough_type_4)+ 类平衡采样 | CoughViT 0.71 盲测 AUROC |
| 标签噪声方法学 | status/status_SSL/diagnosis 三级标签联合建模 | 无外部锚点,自建消融 |
| 边缘部署 | 68 维手工特征管线(c4science 代码)+ 轻量分类器 | cough_detected 模型本身 |
§8.3 评测协议
- 过滤:cough_detected>0.8 + 目标标签非空,报告过滤前后样本数。
- 划分:分层 GroupKFold(提交者近似分组),报告均值±标准差。
- 指标:不平衡场景以 COVID 类 AUC + macro-F1 为主指标,accuracy 仅作参考。
- 声明:必须写明标签源(status / status_SSL / expert diagnosis)与版本(Zenodo v2/v3)。
- 外部验证:至少一个外部库(Coswara / DiCOVA / 自采)或官方私有测试集(coughvid@epfl.ch)。
§8.4 相关数据集
| 数据集 | 规模 | 与 COUGHVID 的关系 | 获取 |
|---|---|---|---|
| Coswara | 2,635 名受试者 × 9 类音频 | 姊妹项目(本百科前篇):多任务录音协议,可做跨库验证 | GitHub 开放 |
| DiCOVA Challenge 语料 | 数百至上千条 | 竞赛协议评测,曾以 COUGHVID 作增广源 | 竞赛注册 |
| Cambridge COVID-19 Sounds | 超过 10,000 条咳嗽 | 早期大规模同行,CoughViT 以其作自监督预训练源 | 申请 |
| NoCoCoDa | 10 名受试者 | 媒体来源咳嗽,仅概念验证 | 开放 |
| ICBHI 2017 呼吸音库 | 6,898 段呼吸音 | 非咳嗽任务(哮鸣/爆裂音),呼吸音异常检测的补充语料 | 开放 |
§8.5 关键论文 Top 7
- Orlandic, L., Teijeiro, T. & Atienza, D., 2021, Scientific Data 8:156. 10.1038/s41597-021-00937-4 — 数据集原始论文:采集协议、cough_detected 模型、专家标注与地理验证的完整描述。
- Orlandic, L., Teijeiro, T. & Atienza, D., 2020, arXiv:2009.11644 — 预印本版本,含 68 维特征与 0.8 阈值精度 95.4% 的推导细节。
- Han, J. et al., 2022, Journal of Supercomputing. 10.1007/s10844-022-00707-7 — 注意力 CNN-LSTM:系统化了 COUGHVID 的预处理、增强与类平衡管线。
- Hoang et al., 2022(Sound-Dr 基准研究) — 揭示通用管线在 COUGHVID 上的真实低位表现与短样本工程坑。
- Luong et al., 2025(CoughViT) — 自监督预训练 + 单专家标注的干/湿咳基准,给出可信的盲测 AUROC 锚点。
- Altae, A. A., Ehsani Rad, A. & Mohebbi, K., 2025, Scientific Reports 15:45275. 10.1038/s41598-025-29633-8 — 相空间重构 + 3D DCNN,展示非线性特征工程的上限。
- Brown, J. et al., 2020(Cambridge COVID-19 Sounds 预印本) — 同期最大竞品数据集论文,理解 COUGHVID 定位的必读背景。
§8.6 社区活跃度
- 论文引用 214+(Scinapse,截至 2026-09),是咳嗽声学领域被引最高的数据集论文之一。
- Kaggle 镜像 COUGHVID V3 下载 2,068+ 次、浏览 4,354 次(截至 2026-09 的 Kaggle 统计)。
- 官方持续维护私有测试集评测通道(coughvid@epfl.ch);EPFL ESL 项目页长期挂载项目介绍。
- 预处理代码托管于 c4science(c4science.ch/diffusion/10770)。
§8.7 生态快照
| 资源 | 类型 | 链接 | 热度(截至 2026-09) | 推荐理由 |
|---|---|---|---|---|
| Zenodo v3.0 官方记录 | 数据发布 | zenodo.org/records/7024894 | 权威一手源 | 唯一官方分发渠道,md5 校验齐备 |
| Sci Data 论文 | 方法论文 | nature.com/articles/s41597-021-00937-4 | 214+ 引用 | 所有口径数字的最终依据 |
| EPFL ESL 项目页 | 官方主页 | epfl.ch/labs/esl/?p=2206 | 团队维护 | 项目背景、团队与资助信息 |
| Kaggle COUGHVID V3 镜像 | 数据镜像 | kaggle.com/datasets/orvile/coughvid-v3 | 2,068+ 下载 | 免下载即可云端实验 |
| c4science 预处理仓库 | 官方代码 | c4science.ch/diffusion/10770 | 团队开源 | cough_detected 特征提取的原始实现 |
| Emergent Mind COUGHVID 词条 | 文献综述 | emergentmind.com/topics/coughvid | 持续更新 | 跨论文基准数字与协议差异的快速索引 |
§9 相关资源与引用
§9.1 官方资源
- 数据下载(v3.0,CC BY 4.0):zenodo.org/records/7024894
- 数据论文:nature.com/articles/s41597-021-00937-4
- 项目主页:epfl.ch/labs/esl/?p=2206
- 官方预处理/特征提取代码:c4science.ch/diffusion/10770
- 私有测试集申请:coughvid@epfl.ch(附验证说明与交叉验证结果)
- 版本历史:v1.0(2020-09-24) / v2.0(2021-02-03) / v3.0(2022-08-26)
§9.2 BibTeX 引用
@article{Orlandic2021COUGHVID,
author = {Orlandic, Lara and Teijeiro, Tomas and Atienza, David},
title = {The {COUGHVID} crowdsourcing dataset, a corpus for the study
of large-scale cough analysis algorithms},
journal = {Scientific Data},
volume = {8},
pages = {156},
year = {2021},
doi = {10.1038/s41597-021-00937-4}
}
@dataset{COUGHVID2022Zenodo,
author = {Orlandic, Lara and Teijeiro, Tomas and Atienza, David},
title = {The {COUGHVID} crowdsourcing dataset: A corpus for the study
of large-scale cough analysis algorithms},
year = {2022},
publisher = {Zenodo},
version = {3.0},
doi = {10.5281/zenodo.7024894},
url = {https://zenodo.org/records/7024894}
}
§9.3 引用指南
- 引用数据本身:用 Zenodo 数据集 BibTeX(注明所用版本号 v1.0/v2.0/v3.0)。
- 引用方法与口径:用 Sci Data 论文 BibTeX;arXiv 预印本仅用于历史语境。
- 引用规模数字时必须带上版本语境:"超过 25,000 条(Sci Data 论文口径)“或"超过 30,000 条(Zenodo v3.0)”。
- 使用专家标注子集时,建议同时致谢 4 位标注医师与 Unisanté 协议指导(论文致谢栏具名)。
§9.4 常见问题
Q1:COUGHVID 到底有多少条录音?
分口径回答:Sci Data 论文(2021-06)摘要为"超过 25,000 条";Zenodo v3.0(2022-08)描述为"超过 30,000 条"(纳入截至 2021-10 的新录音);arXiv 预印本(2020-09)为"超过 20,000 条、其中 1,010 条自报确诊"。写论文时选定一个口径并注明版本。
Q2:可以直接说"这条录音的人确诊了 COVID-19"吗?
不可以。status 是自报字段,未经 PCR 核验;专家 diagnosis 也只是听诊印象。所有临床表述都应降级为"自报状态"或"专家临床印象"。
Q3:为什么我的 librosa 读不了这些音频?
音频是 WEBM/OGG 容器封装的 Opus 编码,librosa 旧版默认 soundfile 后端不支持。安装 ffmpeg(conda install -c conda-forge ffmpeg)或按 §6.3 先批量转 WAV。
Q4:status 与 status_SSL 应该用哪个?
训练弱监督大模型可用 status_SSL(覆盖更广);做严格评估或与历史论文对比用 status;两者不得在同一实验中混用(见坑点 6)。
Q5:有官方测试集吗?
公开部分没有官方划分;EPFL 团队保留了私有测试集,按"邮件 coughvid@epfl.ch 说明验证类型 → 获得无标签录音 → 提交预测 → 团队返回指标"的协议使用。
§10 AI 使用声明卡
§10.1 AI 模型列表
| 环节 | 模型/工具 | 用途 |
|---|---|---|
| 本词条撰写 | 大语言模型(CodeBuddy fast-model) | 资料整合、结构化写作、代码示例生成 |
§10.2 AI 参与范围
AI 参与了资料检索汇总、章节起草与代码示例生成;全部事实性数字均溯源至检索获取的官方论文、Zenodo 记录与公开基准文献(见 §10.3),结构与医学/数据工程口径经人工交叉审核(见 §10.4)。
§10.3 输入来源列表
- Orlandic, L., Teijeiro, T. & Atienza, D., 2021, Scientific Data 8:156. 10.1038/s41597-021-00937-4
- Orlandic, L., Teijeiro, T. & Atienza, D., 2020, arXiv:2009.11644. arxiv.org/abs/2009.11644
- Zenodo 数据集记录 v3.0. zenodo.org/records/7024894
- Zenodo 概念记录(含私有测试协议与 status_SSL 说明). zenodo.org/records/4048311
- Zenodo v1.0 记录. zenodo.org/records/4048312
- Zenodo v2.0 记录. zenodo.org/records/4498364
- EPFL ESL Coughvid 项目页. epfl.ch/labs/esl/?p=2206
- Kaggle COUGHVID V3 镜像页面. kaggle.com/datasets/orvile/coughvid-v3
- Han, J. et al., 2022, Journal of Supercomputing. 10.1007/s10844-022-00707-7
- Altae, A. A., Ehsani Rad, A. & Mohebbi, K., 2025, Scientific Reports 15:45275. 10.1038/s41598-025-29633-8
- Cough2COVID-19, 2025, Scientific Reports 15:6245. pubmed.gov/39448760
- CoughViT(Luong et al., 2025)与 Sound-DR(Hoang et al., 2022)基准综述. emergentmind.com/topics/coughvid
- Scinapse 引用统计. scinapse.io/papers/3088067841
- c4science 官方预处理代码仓库. c4science.ch/diffusion/10770
§10.4 人工校验记录
| 内容模块 | 审核者 | 审核方式 | 审核状态 |
|---|---|---|---|
| frontmatter 与 INFOBOX 口径 | 千方病案医学编辑部 | 对照 Zenodo 官方记录逐字段核验 | ✅ 已通过/已验证 |
| §2 医学背景(ICD-11/SNOMED 双映射) | 千方病案医学编辑部 | 与同模态已上线词条及 WHO/SNOMED 公开术语核对 | ✅ 已通过/已验证 |
| §3-§4 规格与数据字典 | 千方病案医学编辑部 | 对照 Sci Data 论文 Table 1/4 与 Data Records 章节 | ✅ 已通过/已验证 |
| §6 代码示例 | 千方病案医学编辑部 | 静态审查 API 用法与数据路径逻辑 | ✅ 已通过/已验证 |
| §7 DAIMS 与偏倚分析 | 千方病案医学编辑部 | 对照论文 Technical Validation 与基准文献 | ✅ 已通过/已验证 |
| §8 基准数字 | 千方病案医学编辑部 | 逐条溯源至原始论文/检索快照 | ✅ 已通过/已验证 |
§10.5 AI 生成章节标注
本词条正文由 AI 辅助生成:§1-§5 与 §9 为 AI 起草 + 人工修订;§6 代码示例为 AI 生成(基于论文与官方文档描述的 API 组合,未经实机全量回归);§7-§8 数字由 AI 汇编并经人工逐条溯源核验。
AI 生成内容的边界声明:所有规模数字、日期、协议细节均以 §10.3 所列一手来源为准,AI 未引入检索来源之外的任何数字;代码示例的函数签名与数据路径基于公开文档编写,运行前请以本地数据实际结构校准。
§10.6 最后人工审核日期
2026-09-05(与 §0 审核声明一致)
页面状态:published(全部内容已完成审核并发布)
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本词条共享多个主题标签的相关数据集,按相关度降序排列:
- coswara — 共享标签:生理信号 / 语音信号 / COVID-19
- HLS-CMDS — 共享标签:生理信号 / 语音信号
- physionet-cinc-2016 — 共享标签:生理信号 / 语音信号
- covid-19-sounds — 共享标签:生理信号 / 语音信号 / COVID-19
- torgo — 共享标签:生理信号 / 语音信号
- Bridge2AI-Voice — 共享标签:生理信号 / 语音信号
- pc-gita — 共享标签:生理信号 / 语音信号
- ua-speech — 共享标签:生理信号 / 语音信号
- circor-digiscope — 共享标签:生理信号 / 语音信号
- mdvr-kcl — 共享标签:生理信号 / 语音信号
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。
