ICBHI 2017 — 呼吸音异常音检测基准 AI-Ready Wikipedia

126 名患者 920 条听诊录音 6,898 个专家标注呼吸周期的全球基准

来源 name: "ICBHI 2017 Scientific Challenge 组织方(University of Aveiro / Aristotle University of Thessaloniki / University of Coimbra)" url: "https://bhichallenge.med.auth.gr/"发布时间: 2026-09-14最后更新: 2026-09-25 阅读 68
ICBHI 2017 — 呼吸音异常音检测基准 AI-Ready Wikipedia

信息速览

数据集名称ICBHI 2017 — 呼吸音异常音检测基准 AI-Ready Wikipedia
数据类型["920 条 WAV 录音", "6,898 个标注周期", "5.5 小时音频", "126 名患者", "研究免费获取"]
规模126 名患者(77 名成人、49 名儿童)
接入方式name: "ICBHI 2017 Scientific Challenge 组织方(University of Aveiro / Aristotle University of Thessaloniki / University of Coimbra)" url: "https://bhichallenge.med.auth.gr/"
AI 就绪度

数据集封面

ICBHI 2017 呼吸音数据库 — 全球呼吸音分类基准 AI-Ready Wikipedia


INFOBOX

数据集名称 ICBHI 2017 Respiratory Sound Database(呼吸音 ICBHI)
英文全称 ICBHI 2017 Respiratory Sound Database
别名/简称 ICBHI Challenge Database、Respiratory Sound Database、ICBHI_final_database
疾病分类(ICD-11) CA22 慢性阻塞性肺疾病、CA23 哮喘、CA40 肺炎、CA00 急性上呼吸道感染、CA24 支气管扩张、CA02 急性支气管炎(下呼吸道感染 LRTI 归入相关急性下呼吸道感染编码)
SNOMED CT 13645005(COPD)、195967001(Asthma)、233604007(Pneumonia)、10509002(Bronchiectasis)、82272006(急性上呼吸道感染)
数据模态 呼吸音音频(电子听诊器/听诊头麦克风,胸部 7 个听诊位置)
AI 任务类型 周期级异常呼吸音分类(crackles/wheezes/both/normal 四分类,可退化为二分类)
样本总数 920 条录音,6,898 个标注呼吸周期,约 10,775 个事件级标注
数据大小 共 5.5 小时 16-bit 音频(单条录音 10-90 s),每条 WAV 配套同名四列标注 TXT
数据格式 WAV(音频)+ TXT(周期级标注)+ TXT/CSV(诊断与人口学)
许可证 研究用途免费(官方声明 freely available for research,无正式 OSI 许可证文本,须引用 Rocha et al. 2019)
访问级别 开放(官网直链 ZIP 下载,无需注册;Kaggle/ai4eu 存在需登录的镜像)
DUO 标签 未提供正式 DUO 标签(官方仅声明研究用途免费并要求引用数据集论文)
语言 英文(文件名、标注文件与文档)
首发日期 2017(ICBHI 2017 Scientific Challenge,Thessaloniki,2017-11-18 至 11-21)
发布机构 ICBHI 2017 Challenge 组织方:University of Aveiro ESSUA/Lab3R(葡萄牙)、Aristotle University of Thessaloniki(希腊)、University of Coimbra(葡萄牙)
官方主页 https://bhichallenge.med.auth.gr/
下载地址 https://bhichallenge.med.auth.gr/sites/default/files/ICBHI_final_database/ICBHI_final_database.zip
DOI 10.1088/1361-6579/ab03ea(数据集论文)
AI 就绪度评分 ⭐⭐⭐⭐(4/5)— 有官方 60/40 固定划分与统一打分协议、社区预处理脚本成熟;扣分项:无官方预处理代码、采样率三种混存需自行重采样、标注需从文件名与 TXT 自行解析、初始版存在 92 个文件名错误
页面状态 published

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

医学审核者:千方病案医学编辑部交叉审核:§2 医学背景(ICD-11 与 SNOMED CT 映射、异常呼吸音与临床任务定义、金标准描述)、§7 偏倚分析。

数据工程审核者:千方病案医学编辑部交叉审核:§4 DAIMS 数据字典(文件名五段编码、四列周期标注体系)、§5 数据划分策略、§6 预处理 Pipeline 和坑点。

审核日期:2026-09-05

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

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

数据使用合规:使用本页面描述的数据集前,请务必阅读并遵守数据集原始许可协议。ICBHI 2017 Respiratory Sound Database 由官方以"研究用途免费"方式发布,使用时须引用 Rocha et al. (2019) 数据集论文。DUO 标签仅供参考,具体使用限制以数据集官方协议为准。


§1 数据集概览

本节回答三个问题:它是什么(§1.0)、为什么重要(§1.1-§1.2)、与其他选择相比如何(§1.3-§1.5)。赶时间的研究者读完 §1.0 即可决定是否深入。

§1.0 30 秒速览

这是什么? ICBHI 2017 Respiratory Sound Database 是全球使用最广的开放呼吸音(肺音)分类基准。它收录了 126 名患者(77 名成人、49 名儿童)的 920 条听诊录音,总时长约 5.5 小时;呼吸专家把录音切成 6,898 个呼吸周期,并逐周期标注是否含有湿啰音(crackles)、哮鸣音(wheezes)、两者兼有,或无异常音。录音来自葡萄牙与希腊的两支团队,用 4 种听诊设备在气管及 6 个胸部位置采集。

为什么重要? 在它出现之前,呼吸音分类研究大多依赖几条到几十条的"教学级"干净录音,无法训练与公平比较真实模型。ICBHI 2017 以挑战赛形式提供了当时最大的公开数据库、固定的训练/测试划分和统一评分,把整个领域拉到同一张考卷上;直到 2026 年,它仍是新模型必测的基准(截至 2026-09,社区最优成绩约 65.69 分,挑战赛冠军仅约 49.5 分——提升空间与评估陷阱同样著名)。

我能用它做什么? 训练周期级异常呼吸音分类器(四分类或正常/异常二分类)、研究跨设备与跨听诊位置的鲁棒性、评测音频自监督预训练表征(AST/BEATs/CLAP 系)在医疗声学上的迁移能力,以及开发真实噪声条件下的听诊辅助算法。它不适合直接做患者级疾病诊断(诊断标签仅按患者提供且各类别人数很少)。

§1.1 技术摘要

该数据库为支持 ICBHI 2017(第三届国际生物医学与健康信息学会议,2017-11-18 至 11-21,希腊塞萨洛尼基)科学挑战赛而编译,赛后以"公开+私有"全集形式开放下载。数据由两支团队多年独立采集:葡萄牙阿威罗大学健康科学学院呼吸研究与康复实验室(Lab3R/ESSUA)贡献主体,在 Aveiro 的 Hospital Infante D. Pedro 等机构按短时计算机化呼吸声分析指南采集;希腊 AUTH 与葡萄牙科英布拉大学团队在 Papanikolaou 综合医院与 Imathia 综合医院采集。920 条录音覆盖 6,898 个呼吸周期(1,864 个含 crackles、886 个含 wheezes、506 个两者兼有、3,642 个正常),另提供约 10,775 个事件级细粒度标注。音频为 16-bit WAV,采样率按设备分为 4 kHz(90 条)、10 kHz(6 条)与 44.1 kHz(824 条)三档;挑战赛采用固定的 60/40 训练-测试划分(539/381 条录音)与"灵敏度+特异度均值"评分。数据集论文 Rocha et al. (2019) 发表于 Physiological Measurement。

技术上它是一个"小而硬"的基准:数据量级只有百 MB、5.5 小时音频,但工程细节密度极高——文件名五段编码承载全部元数据、三种采样率混存、周期时长跨 80 倍动态范围、官方打分公式独此一家。这决定了使用它的成本主要不在算力,而在"把评估做对"的流程纪律上;本词条 §6.5 的 8 个坑点几乎全部来自这一特性。

§1.2 战略价值

基准维度:呼吸 AI 的"ImageNet 时刻"。 呼吸音分类长期苦于没有可比的公开基准:各团队自采小数据、自定标签、自报准确率,结果无法横向比较。ICBHI 2017 用"固定划分 + 统一公式(Score=(Se+Sp)/2)+ 公开排行榜"第一次让 HMM、SVM、CNN、Transformer 等完全不同的方法站上同一条起跑线。任何新提出的呼吸音模型,只要报告官方划分下的 Score,就能与 2017 年挑战赛冠军(约 49.5 分)到 2025 年音频基础模型(64.84-65.69 分)的十年演进直接对话——这是该数据集区别于所有后续数据集的独特生态位。

方法学维度:一本"评估陷阱活教材"。 由于规模有限(126 名患者)且同患者录音/周期高度相关,该库成为展示数据泄漏如何制造虚高指标的著名案例:按周期随机划分可得到 85-99% 的"准确率",而严格按患者划分后典型性能骤降至 50-58 分区间。同时,多设备多采样率的采集异构性让"模型学到设备指纹而非病理特征"的风险具象化。对医疗 AI 团队而言,在这个库上做对一次评测所建立的流程纪律(患者感知划分、正确 I-score 计算、设备分层评估),可以直接迁移到自采听诊数据的开发中。

§1.3 同类数据集横向对比

数据集 受试者 录音数 标注体系 模态/采样率 与 ICBHI 差异化
ICBHI 2017(本库) 126(成人+儿童) 920 周期级 4 类 + 约 10,775 事件级 WAV 4/10/44.1 kHz 唯一有官方挑战赛划分与十年 SOTA 谱系的基准,含噪声模拟真实条件
SPRSound 292(儿童) 2,683 事件级 7 类 + 录音级质量 WAV 4 kHz 儿科专属、标签更细(rhonchi/stridor 等),录音级质量标签
HF_Lung_V1 261(成人) 9,765 事件级(呼吸相+异常音) WAV 4 kHz 规模更大、面向呼吸相位与事件检测而非周期分类
CWLSD/KAUH 112(成人) 112 录音级 + 患者级诊断 WAV 每患者一录音,面向录音级分类与患者级诊断
RespiratoryDatabase@TR 77(成人) 3,696 患者级诊断与严重度 WAV 面向疾病严重度评估,非周期级异常音

对比表信息综合自 2026 年发表的 AI 呼吸音综述(MDPI Technologies scoping review,截至 2026-09)。读表要点:后续数据集在规模(录音数)与标签细度上普遍超过 ICBHI,但 ICBHI 的独特资产是"官方划分 + 统一打分 + 十年可比榜单"这一评测基础设施——选"更大的数据集"做训练、选 ICBHI 做评测,是 2024-2025 年多篇论文的常见组合。

§1.4 版本时间轴

时间 版本/事件 说明
2017 挑战赛版本发布 训练阶段发放公开集(60%),测试阶段以私有集(40%)评分;赛时排行榜停止更新,赛后全集(含原私有集)开放
2018 论文集出版 数据集论文与冠军方案(HMM)等收录于 IFMBE Proceedings vol. 66(Springer)
2019 数据集论文正式发表 Rocha et al., Physiological Measurement 40 035001,成为官方引用格式
现行版本 ICBHI_final_database(修正版) 官方修复初始版 92 个文件中录音设备标注错误(提供 filename_differences.txt 供旧版改名);此后数据本体未再更新,SOTA 演进由社区论文驱动

版本决策建议:除非需要复刻"历史论文的旧文件名行为",一律使用现行修正版;若必须用旧版,先跑官方改名脚本再入库,并把版本选择写进实验配置。

§1.5 典型应用场景

  1. 异常呼吸音分类基准评测:用官方 60/40 划分与 I-score 协议,为四分类(normal/crackle/wheeze/both)或二分类(normal/abnormal)模型建立可横向比较的基准分数。
  2. 音频基础模型迁移评估:以 AST、BEATs、CLAP 等预训练模型为骨干做微调,量化自监督音频表征在医疗声学上的迁移收益(2023-2025 年 SOTA 全部由该路线产生)。
  3. 跨设备/跨听诊位置鲁棒性研究:利用文件名中的设备与位置编码,做设备内/设备外、位置内/位置外的分层评估与设备感知训练(如 RespireNet 的分设备微调)。
  4. 数据泄漏与评估方法学教学:用"随机划分 85-99% vs 患者感知划分 50-58%"的对照,作为医疗 AI 评估规范的培训案例。
  5. 弱噪声条件下的声学前端研究:部分周期含咳嗽、语音、心音等强噪声,适合评测去噪前端、频谱增强与抗噪特征的可运行性。

§2 医学背景

本节建立"声音—体征—疾病"的映射链条:先给标签体系(诊断 8 类)配上 ICD-11 与 SNOMED CT 双编码(§2.1),再解释异常音的声学机理与临床意义(§2.2-§2.3),最后刻画数据背后的人群(§2.4)与标注金标准(§2.6)。

§2.1 ICD-11 疾病映射

数据集按患者提供诊断标签(patient_diagnosis 文件,共 8 类),其与 ICD-11(WHO,MMS 章节"呼吸系统疾病 CA00-CA40")的映射如下:

数据集诊断标签 中文 ICD-11 编码 ICD-11 术语
Healthy 健康对照 —(健康人不入疾病分类) Z 类"与健康相关状况"不适用
COPD 慢性阻塞性肺疾病 CA22 Chronic obstructive pulmonary disease
Asthma 哮喘 CA23 Asthma
Pneumonia 肺炎 CA40 Pneumonia
URTI 上呼吸道感染 CA00 Acute upper respiratory infections
LRTI 下呼吸道感染 CA01/CA02/CA40 等 归入急性下呼吸道感染相关编码(急性支气管炎等)
Bronchiectasis 支气管扩张 CA24 Bronchiectasis
Bronchiolitis 细支气管炎 CA00-CA2X 急性下呼吸道感染章节 Acute bronchiolitis(婴幼儿为主)

§2.1b SNOMED CT 映射

标签/概念 SNOMED CT 码 术语 备注
COPD 13645005 Chronic obstructive lung disease 数据集成人主要诊断之一
Asthma 195967001 Asthma (disorder) 儿童与成人均有
Pneumonia 233604007 Pneumonia (disorder) 影像/听诊确认病例
Bronchiectasis 10509002 Bronchiectasis 慢性化脓性气道疾病
急性上呼吸道感染 82272006 Acute upper respiratory infection URTI
Crackles(体征) — 湿啰音(discontinuous adventitious sound) 作为听诊体征,本库以周期级二元标注承载,不做独立疾病编码
Wheezes(体征) — 哮鸣音(continuous adventitious sound) 同上

§2.2 疾病简介与流行病学背景

本库覆盖的呼吸系统疾病构成一个从急性到慢性、从上气道到肺实质的谱系:COPD 与哮喘代表慢性气道阻塞,肺炎与急慢性支气管炎/细支气管炎代表感染性实质与气道疾病,支气管扩张代表结构性气道破坏,URTI/LRTI 则是门诊最常见的急性感染。呼吸系统疾病是全球第三大死因(见 lung-sound-classification 项目背景综述),而听诊是呼吸疾病筛查的第一线手段:湿啰音提示气道内分泌物或闭合气道突然开放(常见于肺炎、心衰、支气管扩张),哮鸣音提示气道狭窄(常见于哮喘、COPD 急性加重)。两者的自动检测等于把"听诊器敏感度"从医生个人经验中解耦出来,这正是本库设定的 AI 任务。

从声学机理看,两类异常音的可分性有明确物理基础:哮鸣音是气道狭窄产生的连续性乐音,能量集中在 100 Hz-1 kHz 的窄带峰(基频加谐波),持续时间常超过 250 ms;湿啰音则是分泌物/闭合气道爆开产生的短促爆裂脉冲串,单发 10-20 ms、宽频且带指数衰减包络。"连续窄带 vs 离散宽带脉冲"的对比使得谱图形态差异显著,这也是 CNN 类模型在此任务上有效的物理原因;但两类声音同时出现(Both 类)时的相互掩蔽,正是该类最难自动检测的原因。

流行病学层面需要记住的是:数据集内 8 类诊断的患者人数并不均衡(官方仅提供按患者的诊断文件,未公布逐类人数统计),成人以 COPD 为主、儿童以感染性与阻塞性疾病为主;任何"疾病分类"任务都受此小样本制约,应作为二级任务而非主基准。

§2.3 临床任务定义

任务层级 定义 本库支撑 临床对应
筛查(辅助听诊) 判断周期是否含异常音(正常 vs 异常,二分类) 6,898 个周期二元标注 门诊快速筛查、基层辅助
分型(异常音分类) 四分类:normal / crackle / wheeze / both 官方挑战赛任务 提示病变类型与部位(如哮鸣音→气道阻塞,湿啰音→渗出)
定位(患者级) 归纳患者诊断(COPD 等 8 类) patient_diagnosis 文件(每患者一标签) 仅作研究性任务,样本量不足
定量(事件检测) 在连续录音中定位 crackle/wheeze 事件 约 10,775 个事件级标注 监测疾病动态与疗效

四个层级中,挑战赛与绝大多数论文聚焦"分型"任务;“筛查”(二分类)常作为辅助报告;"定量"依赖事件级标注,使用的论文相对少,是差异化研究的机会点;“定位”(患者级诊断)受样本量限制,只建议作为探索性实验。

§2.4 患者人群画像

维度 取值 来源
样本来源 葡萄牙 Aveiro(ESSUA/Lab3R、Hospital Infante D. Pedro)与希腊 Thessaloniki/Naousa(Papanikolaou General Hospital、Imathia General Hospital) 官方主页与数据集论文
人数 126 人:77 名成人、49 名儿童 Rocha et al. 2019
性别 79 男、46 女(1 人未记录) 同上
年龄 总体 43.0±32.2 岁;成人 67.6±11.6 岁;儿童 4.8±4.6 岁(各 1 人未记录) 同上
成人 BMI 27.2±5.4 kg/m²(2 人未记录) 同上
儿童体重/身高 21.4±17.2 kg / 104.7±30.8 cm(以体重身高替代 BMI) 同上
就医类型 住院与门诊混合,另有非临床(居家)环境录音 数据集论文
诊断谱 8 类:COPD、Healthy、URTI、LRTI、Bronchiectasis、Pneumonia、Bronchiolitis、Asthma 官方诊断文件

人群画像的两个建模提示:① 儿童 49 人占近四成,但呼吸频率约为成人两倍,周期切分与定长参数对儿童子集应单独验证;② 成人偏老年(67.6±11.6 岁)且 BMI 偏高(27.2),与许多自采年轻健康志愿者数据集形成鲜明对比——这是本库"更接近真实临床"的优势,也是向志愿者数据迁移时性能下降的预期来源。

§2.5 临床价值

对临床而言,本库训练的模型对应三个价值点:其一,把异常音检测做成"第二听诊器",在基层与急救场景为缺乏经验的听诊者提供实时提示;其二,以周期级量化替代主观描述,让啰音强度/密度成为可随访的数字指标(如肺炎吸收期、COPD 加重期监测);其三,作为儿童喘息(细支气管炎/哮喘)分级诊疗的筛查前端。需要注意的是,本库录音条件(受控体位、已知位置)仍优于真实居家环境,模型落地前需在目标设备与人群上做外部验证。

对研究者而言,它还有一层"方法学公共品"的价值:官方划分与打分让任何方法改进都可量化归因,十年 SOTA 谱系(§8.1)本身就是一份"什么技术真正有效"的证据表——从 MFCC+HMM 到自监督音频 Transformer,每一代技术在这个库上的增量都被忠实记录,这种可追溯性在医疗 AI 基准中并不多见。

§2.6 金标准(标注协议)

要素 内容
划分单位 呼吸周期(由专家依据呼吸相边界切分,边界以秒记录)
标注方式 人工听诊标注:每周期 crackles 有无(0/1)与 wheezes 有无(0/1)两个二元指示,组合映射为 4 类
标注者 呼吸专家(respiratory experts),采集团队所属临床机构
标注性质 专家共识型金标准(非多独立标注者一致性设计);事件级标注进一步给出异常音的时间定位
已知局限 无严重度分级;噪声周期(咳嗽/语音/心音)标注仍以其病理内容为准,边界样本存在专家间差异风险

金标准使用提示:周期级二元标注是"专家共识型"而非"多人独立标注型",因此无法从数据内部估计标注方差;对边界样本敏感的模型(如高置信度误判分析)应把这部分不确定性当作固定噪声源,在结论中保守陈述。


§3 数据集规格

本节给出选型(§3.0 版本矩阵)与全部物理规格:模态、样本数、格式、大小、标注、人群、地域、设备与溯源链。所有数字均可回溯至官方主页或 Rocha et al. (2019)。

§3.0 版本抉择矩阵

你的需求 推荐版本 大小 理由
复现官方基准/发表对比 官网现行 ZIP(含 92 文件名修正) 920 WAV+920 TXT,5.5 h 音频 与 2017 挑战赛及全部 SOTA 论文的评测口径一致
快速教学/Demo Kaggle 镜像(vbookshelf/respiratory-sound-database) 同上,需 Kaggle 账号 免官网下载波动,Notebook 环境即挂即用
欧盟 AI4EU 生态集成 ai4eu 平台副本 同上,需登录 平台元数据与用例描述齐全
需要诊断/人口学/划分文件 官网单独下载三个附属文件 数 KB 数据集 ZIP 不含,须另行获取(见 §6.2)

§3.1 模态详情

单一模态:胸部/气管声学信号。每条录音为一个 16-bit 单声道 WAV 文件(多通道同时采集的 mc 模式在文件层面仍按位置分轨落盘为多文件),时长 10-90 s(平均 21.5 s)。录音遵循短时计算机化呼吸声分析指南(computerised respiratory sound analysis guidelines for short-term acquisitions),由受过训练的操作者在静息呼吸下采集;部分周期刻意保留咳嗽、语音、心音等噪声以模拟真实条件。

与许多后续数据集不同,本库不提供录音级质量标签(如"可用/不可用"),也不提供录音级异常音汇总标签——所有标签都挂在呼吸周期上。这决定了"录音级分类"任务需要自行从周期标签聚合(如任一周期异常即记为异常),聚合规则属于研究者决策,应在论文中写明。

§3.2 按子集样本数

划分维度 子集 数量
周期标签 Normal 3,642(52.8%)
周期标签 Crackle 1,864(27.0%)
周期标签 Wheeze 886(12.8%)
周期标签 Both 506(7.3%)
采样率 44.1 kHz 824 条
采样率 4 kHz 90 条
采样率 10 kHz 6 条
官方划分 训练集 539 条录音 / 79 名患者 / 4,142 周期
官方划分 测试集 381 条录音 / 49 名患者 / 2,756 周期
官方划分周期构成 训练集 4,142 周期:normal 2,063、crackle 1,215、wheeze 501、both 363
官方划分周期构成 测试集 2,756 周期:normal 1,579、crackle 649、wheeze 385、both 143

注意训练/测试两侧的类别构成差异:Both 类从训练侧的 8.8%(363/4,142)降到测试侧的 5.2%(143/2,756),Crackle 类从 29.3% 降到 23.6%,Normal 从 49.8% 升到 57.3%——官方划分本身就把"少数类更稀少"的问题留在了测试侧,这会在小样本类(Both)上放大指标方差。

§3.3 数据格式

组件 格式 说明
音频 WAV(PCM 16-bit) 文件名五段编码元数据,如 107_2b5_Pr_mc_AKGC417L.wav
周期标注 TXT(四列空格分隔) 开始(s)、结束(s)、crackles(0/1)、wheezes(0/1),与 WAV 同名
诊断 TXT/CSV 患者编号 → 诊断缩写(COPD/LRTI/URTI/…)
人口学 TXT/CSV 患者编号、年龄、性别、成人 BMI、儿童体重/身高(NA=缺失)
划分 TXT 官方 60/40 患者/录音分配列表(官网单独下载)
事件标注 TXT 细粒度 crackle/wheeze 事件时间定位(官网单独下载)

§3.4 存储大小

官方未公布压缩包体积;内容为 920 个 16-bit WAV(合计约 5.5 小时音频)与配套文本文件,总量在消费级磁盘上属于"百 MB 量级"的小型数据集,本地开发无需专门存储规划。注意三种采样率意味着解码后内存占用差异显著:44.1 kHz 的 824 条占绝对多数,若统一上采样到 44.1 kHz 会在内存中放大 4 kHz 子集约 11 倍。

存储规划上真正要预留的是特征缓存:若缓存 8 s @ 16 kHz 的 log-Mel(128 mel),全库约 6,898 个周期的特征矩阵为 GB 级,建议按"wav 原始 + 特征缓存 + 划分索引"三层目录组织,训练时只读缓存。

§3.5 标注方式

人工专家标注,两级结构:周期级(每周期两个二元指示位)与事件级(异常音在周期内的时间定位,约 10,775 个事件)。周期边界由专家依呼吸相(吸气/呼气)确定,标注以秒为单位写入与 WAV 同名的 TXT。

§3.6 标注者资质与一致性

标注由采集团队的呼吸专家完成(临床机构执业人员)。官方未发布标注者间一致性统计(如 Kappa),这是使用时需要自行控制的风险点:边界周期(轻度哮鸣、偶发湿啰音)的标签不确定性会同时影响训练与评测,建议在验证集上做标签噪声敏感性分析。

§3.7 采集周期

数据由两支团队在挑战赛前"数年间"(over several years)分批采集,2017 年为支持挑战赛完成编译与统一命名;官方未公布逐条录音的采集日期,时间元信息不可逐条追溯。

§3.8 地域覆盖

葡萄牙(Aveiro 的 ESSUA 实验室与 Hospital Infante D. Pedro,另有采集于 Southampton、England 的研究数据纳入 Lab3R 子集)与希腊(Thessaloniki 的 Papanikolaou General Hospital、Naousa 的 Imathia General Hospital Health Unit)。单一欧洲区域、两家临床网络,地理与人群多样性有限。

§3.9 设备规格

设备编码 设备 类型 采样率档
AKGC417L AKG C417 L 领夹电容麦克风(置入特氟龙听诊头胶囊) 空气耦合麦克风 44.1 kHz 为主
LittC2SE 3M Littmann Classic II SE 听诊器(主管内嵌麦克风) 机械-电子混合 4 kHz 档为主
Litt3200 3M Littmann 3200 电子听诊器 电子听诊器 4 kHz 档
Meditron WelchAllyn Meditron Master Elite 电子听诊器 电子听诊器 10 kHz 与部分 44.1 kHz

采集模式两种:sc(sequential/single channel,逐位置顺序采集)与 mc(simultaneous/multichannel,多位置同时采集)。

设备与采样率的对应关系是理解该库"设备指纹"效应的关键:采样率档位本质上由设备型号决定,因此"采样率分层"与"设备分层"高度共线。

采样率 录音数 主要来源设备 对建模的影响
44.1 kHz 824 AKGC417L 麦克风(及部分 Meditron) 高保真,训练集主体
4 kHz 90 LittC2SE / Litt3200 奈奎斯特 2 kHz,恰好覆盖异常音能量上限
10 kHz 6 部分 Meditron 过渡档,样本极少

§3.10 深度溯源链

官网(bhichallenge.med.auth.gr,由 AUTH 维护)→ 官方 ZIP(ICBHI_final_database,现行修正版)→ 920 对 WAV/TXT 文件(元数据编码于文件名)→ 官网附属文件(诊断、人口学、划分、事件标注、filename_differences.txt)→ 数据集论文(Rocha et al. 2019,DOI 10.1088/1361-6579/ab03ea)→ 挑战赛论文集(IFMBE Proceedings vol. 66)。全链条无中间分发商,引用与审计路径清晰。


§4 数据结构

本节从"解压后长什么样"出发(§4.0 目录树),给出一字段的 DAIMS 字典(§4.1),并按标签分布、关键统计、数据层级、缺失处理四个视角拆解数据本身。§4.1 与 §6 的代码一一对应。

§4.0 目录树

官方 ZIP 解压后为平铺的 920 对同名 WAV/TXT 文件;附属文件需从官网单独下载。推荐的工程化组织方式:

data_root/
├── ICBHI_final_database/                # 官方 ZIP 解压,920 对文件平铺
│   ├── 101_1b1_Al_sc_Meditron.wav
│   ├── 101_1b1_Al_sc_Meditron.txt       # 四列:begin end crackles wheezes
│   ├── 102_1b1_Ar_sc_Litt3200.wav
│   ├── ...
│   └── 226_1b1_Pl_mc_AKGC417L.wav
├── patient_diagnosis.csv                # 官网下载:患者编号 → 诊断(8 类)
├── demographic_info.txt                 # 官网下载:年龄/性别/BMI(NA=缺失)
├── official_test_train.txt              # 官网下载:60/40 划分患者列表
├── detailed_events.txt                  # 官网下载:约 10,775 个事件级标注
└── filename_differences.txt             # 官网下载:92 个初始版文件名错误对照

文件名五段编码:患者编号(101-226)_录音序号_位置_模式_设备,位置 ∈ {Tc 气管, Al, Ar, Pl, Pr, Ll, Lr},模式 ∈ {sc, mc},设备 ∈ {AKGC417L, LittC2SE, Litt3200, Meditron}。

附属文件(官网单独下载)的内容形态示例:

# patient_diagnosis.csv(患者编号,诊断缩写)
101,COPD
102,Healthy
103,COPD
104,URTI
...

# official 划分文件(按患者的训练/测试分配)
train: 101 102 103 104 105 ...
test:  157 158 159 ...

# filename_differences.txt(92 个初始版错误文件名对照)
# 旧文件名(设备段错误) → 新文件名(Meditron)

§4.1 DAIMS 字段字典

字段名 类型 说明 示例值 AI 用途 观测误差/注意 信息性缺失编码 取值范围
recording_id string WAV/TXT 文件名前缀(五段) 107_2b5_Pr_mc_AKGC417L 唯一主键、join 音频与标注 初始版 92 个文件设备段有误 无 920 个唯一值
patient_id int 患者编号(文件名第 1 段) 107 患者感知划分/分组 CV 同患者跨录音强相关 无 101-226
recording_index string 录音序号(第 2 段) 2b5 区分同患者多条录音 无独立语义 无 字母数字
chest_location enum 听诊位置(第 3 段) Pr 位置分层评估 — 无 Tc/Al/Ar/Pl/Pr/Ll/Lr
acquisition_mode enum 采集模式(第 4 段) mc 采集协议分层 — 无 sc/mc
equipment enum 设备(第 5 段) AKGC417L 设备偏倚分析与域适应 三种采样率与设备强相关 无 4 类
cycle_begin float 周期开始秒(TXT 第 1 列) 0.24 周期切分/特征窗对齐 秒而非样本点,需乘采样率 无 ≥0
cycle_end float 周期结束秒(TXT 第 2 列) 2.71 同上 与 begin 之差即周期长 无 ≤录音时长
crackles int 湿啰音有无(第 3 列) 1 4 类标签映射 二元,无严重度 无 0/1
wheezes int 哮鸣音有无(第 4 列) 0 4 类标签映射 同上 无 0/1
diagnosis string 患者诊断缩写 COPD 患者级任务/协变量 每患者一个标签,各类别人数不均衡 无 8 类
demographics mixed 年龄/性别/成人 BMI/儿童体重身高 67 / M / 27.2 偏倚与公平性分析 含 NA NA 官方文件

§4.2 标签分布

周期级四类分布见 §3.2(Normal 3,642 / Crackle 1,864 / Wheeze 886 / Both 506);合并后正常:异常 = 3,642:3,256,接近均衡,而四分类中 Both 类仅 7.3%。事件级共约 10,775 个 crackle/wheeze 事件。划分层面:训练集 4,142 周期(normal 2,063 / crackle 1,215 / wheeze 501 / both 363),测试集 2,756 周期(normal 1,579 / crackle 649 / wheeze 385 / both 143)——Both 类在测试集中仅 143 个周期,任何分层抽样误差都会显著扰动该类指标。

一个有用的观察:官方划分保持了"周期数 60/40"的总体比例(4,142:2,756 ≈ 60.1:39.9),但把 Crackle/Both 的相对密度向训练侧倾斜,测试侧的 Se 因此天然更难——这正是官方 Score 普遍低于随机划分报告值的原因之一,与泄漏效应叠加后构成了两种划分之间 20 分以上差距的来源。

§4.3 关键统计

  • 录音时长 10-90 s,平均 21.5 s;呼吸周期 0.2-16.2 s,平均 2.7 s(见 cochleogram 研究的统计)。
  • 每名患者平均约 7.3 条录音、54.7 个周期——患者内相关性极高,是划分策略的根源约束。
  • 音频事件能量集中在 2 kHz 以下(wheeze 为主音成分 <1 kHz,crackle 脉冲 <2 kHz),因此 4 kHz 采样率足以承载任务相关信息(见 §6.3)。
  • 16-bit 量化、无逐录音增益归一化元数据,幅值差异需在预处理中统一。
  • 每名患者仅一个诊断标签(来自 patient_diagnosis 文件),录音级/周期级与诊断之间不存在一一映射——同一患者的不同位置录音可包含不同异常音组合。
  • 理论最小可学样本:Both 类测试侧 143 个周期,95% 置信区间下该类 Score 的随机波动即达 ±8 分量级,论文报告单次结果时应有此预期。

§4.4 数据层级

患者(126)
└── 录音(920)= 位置×模式×设备的一次采集
    └── 呼吸周期(6,898)= 标注与分类的基本单元
        └── 事件(约 10,775)= 周期内异常音的时间定位

层级含义落到代码上:group 划分用患者层(patient_id),样本单元用周期层(recording_id+周期序号),细粒度分析用事件层——三层各司其职,混用(如按事件划分)会同时破坏两个约束。

§4.5 缺失值与信息性缺失

音频与周期标注本体无缺失;缺失集中在人口学文件:1 名患者年龄/性别未记录、2 名成人 BMI 未记录、5 名儿童体重未记录、7 名儿童身高未记录,官方以字符串 NA 显式标记(Not Available)。解析时必须将 NA 显式转为浮点缺失或掩码,避免被 pandas 隐式读成字符串或被 float() 直接抛错。

# 人口学文件的安全解析:显式声明 NA 与列类型
demo = pd.read_csv(
    "data_root/demographic_info.txt", sep=r"\s+",
    na_values=["NA", "N/A", "na"],              # 显式缺失标记
    names=["patient_id", "age", "sex", "adult_bmi", "child_weight", "child_height"],
)
demo["age"] = pd.to_numeric(demo["age"], errors="coerce")   # 防御非数字
assert demo["patient_id"].nunique() == 126                  # 与录音侧患者数对齐

§5 划分与使用建议

划分是该库最容易做错、也最影响结论可信度的环节。本节先固定官方口径(§5.1),再盘点社区惯例(§5.2),然后正面拆解泄漏风险(§5.3),最后给出交叉验证与外部验证的可操作建议(§5.4-§5.5)。

§5.1 官方划分

挑战赛采用固定 60/40 划分:训练集 539 条录音(约 60%)来自 79 名患者,测试集 381 条录音(约 40%)来自 49 名患者;划分列表由官网发布。该划分与 2017 年挑战赛及全部后续 SOTA 论文(AST/CLAP/BEATs 系)保持同一口径,是唯一可横向比较的协议。但注意:患者 156 与 218 同时出现在两侧(79+49=128>126),官方划分是录音级而非严格患者不重叠划分(详见 Signals 2025 可复现性研究);两名共享患者贡献训练侧 117 个周期、测试侧 120 个周期,其中包括测试侧 143 个 Both 类周期中的 57 个。

# 校验你手上的划分文件:三条断言一个都不能少
train_pids, test_pids = load_official_split("official_test_train.txt")
assert len(train_pids) + len(test_pids) - len(set(train_pids) & set(test_pids)) == 126
overlap = set(train_pids) & set(test_pids)
print(f"跨划分患者: {sorted(overlap)}")          # 预期输出 [156, 218]
# 若 overlap 为空,你拿到的不是官方划分(或该文件已被社区"清洗"过)

§5.2 社区惯例划分

协议 做法 典型结果 适用场景
官方 60/40 官网固定列表 Score 55-72(近年 SOTA 62-66) 发表对比、基准评测
随机周期划分 按周期随机 train/test 准确率 85-99%(虚高) ❌ 仅可用于过拟合调试,禁止作为结论
Patient-aware 随机划分 按患者分组(如 65/15/20) Score 约 50-58 严格泛化性研究、方法学论文
80/20 + 分设备微调 RespireNet 协议 4 类 Score 68.5 设备鲁棒性研究

§5.3 泄漏风险(重点)

三重泄漏源必须逐一封堵:① 同患者多条录音、同录音多个周期——任何"按行随机划分"都会把同一患者放入两侧,模型只需记忆患者声纹即可得高分;② 官方划分本身含患者 156/218 的跨侧重叠,"官方划分=患者不重叠"是常见误读,报告时应注明划分性质;③ 两侧类别分布不均(如训练侧 Both 363 vs 测试侧 143),在测试侧做任何阈值/超参搜索都会放大偏乐观估计。对策见坑点 1-2。

§5.4 交叉验证建议

在官方训练集内部做模型选择时,采用患者分组分层 K 折(GroupKFold/StratifiedGroupKFold,group=patient_id),禁止普通 KFold;折间报告 Score 均值±标准差。需要更强结论时可做 5 次不同种子的重复实验(2023-2025 年论文普遍报告 5 次运行的均值与方差)。

折数选择的权衡:5 折在 79 名训练患者上意味着每折验证侧约 16 名患者(约 830 个周期),Both 类每折仅约 73 个周期——再增加折数会让 Both 类验证指标噪声过大,因此 5 折是"方差与偏差"的合理折中,也是社区主流选择。

§5.5 外部验证建议

模型定型后,优先在 SPRSound(儿科、4 kHz、事件+录音双级标签)与 HF_Lung_V1(成人、4 kHz、呼吸相+事件检测)上重训练或零样本评测,检验跨人群与跨标签体系的泛化;对可及的自采/合作数据,报告"库内 Score + 外部数据绝对性能 + 相对衰减"三元组,避免只报库内基准。

外部验证的实施顺序建议:① 先做零样本(zero-shot)评测——它暴露特征层面(设备频响、环境噪声)的失效;② 再做少样本微调(如每类 50 周期)——它度量适配成本;③ 最后全量重训——它是"方法可迁移"而非"模型可迁移"的证据。三档结果合起来才能支撑"泛化能力"的完整声明。


§6 AI 就绪指南

本节是全篇核心:从云端启动(§6.0)到 10 分钟读通数据(§6.1)、获取(§6.2)、预处理(§6.3)、DataLoader(§6.4),然后集中处理该库特有的 8 个坑点(§6.5),收尾于增强、选型、硬件、指标与 MLOps(§6.6-§6.10)。所有代码以"能直接跑"为标准,目录约定见 §4.0。

§6.0 云端快速启动

Kaggle 数据集 vbookshelf/respiratory-sound-database 可在 Kaggle Notebook 中一键挂载(/kaggle/input/respiratory-sound-database/),免去官网下载;Colab 用户建议直接 wget 官方 ZIP(见 §6.2)。本库规模小(百 MB 级),CPU Colab 即可完成预处理,GPU 仅训练阶段需要。

两条路径的取舍:Kaggle 挂载最快,但镜像版本可能滞后于官网修正版(坑点 5),用于教学/原型可接受;正式实验与发表一律走官网直链并固定哈希。

§6.1 快速上手

# ===== 快速上手:10 分钟读通 ICBHI =====
# 预期目录结构(见 §4.0):
#   data_root/ICBHI_final_database/*.wav + *.txt   # 920 对平铺文件
#   data_root/patient_diagnosis.csv                 # 官网单独下载
# data_root 与你的脚本位置无关,下面统一用 DATA_ROOT 拼接。
# 最小可用子集:任意一对同名 .wav/.txt 即可跑通解析。

import os, re
import pandas as pd

DATA_ROOT = "data_root"
AUDIO_DIR = os.path.join(DATA_ROOT, "ICBHI_final_database")

# 1) 枚举录音并解析文件名五段
rows = []
for f in sorted(os.listdir(AUDIO_DIR)):
    if not f.endswith(".wav"):
        continue
    pid, rec, loc, mode, dev = f[:-4].split("_")
    rows.append({
        "recording_id": f[:-4], "patient_id": int(pid), "rec_index": rec,
        "location": loc, "mode": mode, "equipment": dev,
        "wav": os.path.join(AUDIO_DIR, f),
        "txt": os.path.join(AUDIO_DIR, f[:-4] + ".txt"),
    })
meta = pd.DataFrame(rows)
print(meta.shape)          # (920, 8)
print(meta.patient_id.nunique())  # 126

# 2) 读周期标注并映射 4 类标签
LABEL = {(0, 0): "Normal", (1, 0): "Crackle", (0, 1): "Wheeze", (1, 1): "Both"}
cycles = []
for r in meta.itertuples():
    for line in open(r.txt):
        b, e, c, w = line.split()
        cycles.append({**r._asdict(), "begin": float(b), "end": float(e),
                       "crackles": int(c), "wheezes": int(w),
                       "label": LABEL[(int(c), int(w))]})
cycles = pd.DataFrame(cycles)
print(cycles.label.value_counts())  # Normal 3642 / Crackle 1864 / Wheeze 886 / Both 506

§6.2 数据获取

渠道 链接 内容 流程
官网 ZIP(首选) https://bhichallenge.med.auth.gr/sites/default/files/ICBHI_final_database/ICBHI_final_database.zip 920 对 WAV/TXT(公开+原私有全集) 直链下载,无需注册
官网附属文件 https://bhichallenge.med.auth.gr/ 页内链接 诊断、人口学、划分、事件标注、文件名修正对照 页内点击下载
Kaggle 镜像 https://www.kaggle.com/datasets/vbookshelf/respiratory-sound-database 同 ZIP + 社区整理元数据 注册 Kaggle 账号
ai4eu 副本 https://ai4eu.dei.uc.pt/respiratory-sounds-dataset/ 同 ZIP 平台登录
# 官网直链(社区项目通用做法)
wget --no-check-certificate \
  https://bhichallenge.med.auth.gr/sites/default/files/ICBHI_final_database/ICBHI_final_database.zip
unzip ICBHI_final_database.zip -d data_root/ICBHI_final_database
# 许可:研究免费;发表须引用 Rocha et al. 2019(DOI 10.1088/1361-6579/ab03ea)

下载后验证清单:① WAV 计数 = 920、TXT 计数 = 920;② 每对文件同名前缀一一对应;③ 记录 ZIP 的 SHA-256 入库;④ 对照 filename_differences.txt 确认拿到的是修正版(Meditron 文件数应与官方口径一致)。

§6.3 预处理全流程

三步:统一重采样 → 周期切分与定长 → 特征化。重采样目标率在 4 kHz(任务信息完备、算力最小)与 16 kHz(对齐音频基础模型输入)之间选择,切勿混用原始三种采样率直接训练。

import numpy as np
import soundfile as sf
from scipy.signal import resample_poly

TARGET_SR = 16000            # 音频基础模型惯例;纯 CNN 基线可用 4000
MAX_LEN_S = 8.0              # 周期定长:短补、长截(社区主流 4-8 s)

def load_cycle(wav_path: str, begin: float, end: float,
               target_sr: int = TARGET_SR, max_len_s: float = MAX_LEN_S) -> np.ndarray:
    """读取 [begin, end] 秒区间音频,重采样并定长化。"""
    audio, sr = sf.read(wav_path, dtype="float32")       # 16-bit WAV
    i0, i1 = int(begin * sr), int(min(end * sr, len(audio)))
    seg = audio[i0:i1]
    if sr != target_sr:                                   # 三种原始采样率 → 统一
        seg = resample_poly(seg, target_sr, sr)           # 多相滤波,避免混叠
    need = int(max_len_s * target_sr)
    if len(seg) >= need:                                  # 长周期:居中截断
        seg = seg[:need]
    else:                                                 # 短周期:循环填充(社区通用)
        reps = int(np.ceil(need / max(len(seg), 1)))
        seg = np.tile(seg, reps)[:need]
    return seg

# 幅值归一化:逐周期零均值/单位方差(幅值元数据缺失时的安全默认)
def normalize(x: np.ndarray) -> np.ndarray:
    return (x - x.mean()) / (x.std() + 1e-8)

特征化二选一:轻量基线用 log-Mel(80-128 mel 滤波器组);基础模型微调直接喂波形或 128 维 Fbank(对齐 AST/BEATs 的 25 ms 窗/10 ms 移步)。

# 特征化检查:跑通后核对三个维度,防"静默错位"
import torchaudio, torch

x = load_cycle("data_root/ICBHI_final_database/107_2b5_Pr_mc_AKGC417L.wav",
               begin=0.24, end=2.95)
x = normalize(x)
assert x.shape == (int(8.0 * 16000),)          # 定长 8 s @ 16 kHz

melspec = torchaudio.transforms.MelSpectrogram(
    sample_rate=16000, n_fft=400, hop_length=160, n_mels=128,
    f_min=50, f_max=8000                        # f_min=50 滤掉直流漂移与次声
)(torch.from_numpy(x))
feat = (melspec + 1e-6).log2()
assert feat.shape[0] == 128                     # mel 维
assert abs(feat.shape[1] - 798) <= 2            # 8 s / 10 ms ≈ 798 帧(对齐 AST 口径)

§6.4 PyTorch DataLoader

import torch
from torch.utils.data import Dataset, DataLoader

class ICBHIDataset(Dataset):
    """周期级 4 分类数据集。
    前置:先用 §6.1/§6.3 的逻辑构建 cycles DataFrame
    (列:wav, begin, end, label),并完成官方或患者感知划分。
    """
    CLASSES = ["Normal", "Crackle", "Wheeze", "Both"]

    def __init__(self, df, target_sr=16000, max_len_s=8.0):
        self.df = df.reset_index(drop=True)
        self.sr, self.max_len = target_sr, max_len_s

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

    def __getitem__(self, i):
        r = self.df.iloc[i]
        x = load_cycle(r.wav, r.begin, r.end, self.sr, self.max_len)
        x = normalize(x)
        # 128 维 log-Mel:win 25 ms / hop 10 ms(与 AST/BEATs 预处理对齐)
        import torchaudio
        melspec = torchaudio.transforms.MelSpectrogram(
            sample_rate=self.sr, n_fft=400, hop_length=160, n_mels=128)(torch.from_numpy(x))
        feat = (melspec + 1e-6).log2()                     # log 压缩
        y = self.CLASSES.index(r.label)
        return feat, y

def make_loaders(train_df, val_df, test_df, batch_size=64):
    common = dict(batch_size=batch_size, num_workers=4, pin_memory=True)
    return (DataLoader(ICBHIDataset(train_df), shuffle=True, **common),
            DataLoader(ICBHIDataset(val_df), **common),
            DataLoader(ICBHIDataset(test_df), **common))

# ===== 训练组件:与 2023-2025 论文惯例对齐的最小配置 =====
import torch.nn as nn

# 类别加权交叉熵(反频率平方根加权,坑点 7 的"简单方法")
counts = torch.tensor([3642, 1864, 886, 506], dtype=torch.float32)
weights = counts.sum() / torch.sqrt(counts)
weights = weights / weights.sum() * 4
criterion = nn.CrossEntropyLoss(weight=weights)

optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4, weight_decay=1e-4)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=100)

# 训练循环中的标准评测(每 epoch 在验证集计算官方 Score)
# best_score = max(icbhi_score(**val_epoch_results)["Score"], best_score)

§6.5 八大坑点

⚠️ 坑点 1:按周期随机划分导致患者级数据泄漏(分类:数据泄漏)

问题:6,898 个周期高度嵌套于 126 名患者(人均约 55 个周期),随机按周期划分必然把同一患者的周期分进训练与测试两侧,模型只需记忆患者特有的声纹/环境特征即可"答对"测试集。
症状:随机划分下准确率轻松到 85-99%,而换成患者感知划分后骤降到 50-58 分区间;消融实验中"随便什么模型都差不多好"。
解决:

  1. 简单方法:任何划分前先按 patient_id 分组——sklearn.model_selection.GroupShuffleSplit(groups=patient_id),保证患者不跨侧。
  2. 进阶方法:训练集内部用 StratifiedGroupKFold(group=patient_id,stratify=四类标签)做折间均衡的模型选择;报告 5 次种子重复的 Score 均值±标准差。
from sklearn.model_selection import StratifiedGroupKFold

sgkf = StratifiedGroupKFold(n_splits=5, shuffle=True, random_state=42)
for tr_idx, va_idx in sgkf.split(train_cycles,        # 仅在官方训练侧内部
                                 y=train_cycles.label,
                                 groups=train_cycles.patient_id):
    # 折内患者零重叠;用 va 折选模型,测试集始终锁死不动
    ...
  1. SOTA 方法:在患者感知约束上叠加患者感知损失/对齐(如 PAFA 的 Cohesion-Separation 与全局对齐损失),显式建模患者间声学差异,官方划分下 4 类 Score 64.84(Jeong et al., INTERSPEECH 2025)。
    参考:pedramebd/lung-sound-classification 的评估方法学对照、Signals 2025 可复现性研究。

⚠️ 坑点 2:官方 60/40 划分并非严格患者不重叠(分类:数据泄漏)

问题:社区普遍把"官方划分"默认为患者不重叠,但患者 156 与 218 同时出现在训练与测试列表中(79+49=128>126);两人贡献测试侧 120 个周期,含 143 个 Both 类周期中的 57 个(39.9%)。
症状:报告"官方划分+患者不重叠"时口径自相矛盾; Both 类分数被两名共享患者显著拉高或拉低,复现者间波动大。
解决:

  1. 简单方法:照用官方列表但在论文中如实注明"recording-level benchmark split with 2 shared participants",不宣称 subject-disjoint。
  2. 进阶方法:做敏感性分析——从测试侧剔除 156/218 的周期重算 Score,与全量结果并列报告。
shared = {156, 218}
mask = ~test_cycles.patient_id.isin(shared)
score_full = icbhi_score(y_test, y_pred)                  # 全量口径
score_strict = icbhi_score(y_test[mask.values], y_pred[mask.values])
# 两行结果同表并列;差值即"官方划分固有重叠"贡献的乐观偏差
  1. SOTA 方法:同时报告官方划分与严格患者不重叠划分两套结果(社区 patient-aware 协议),让读者自行对齐口径(MDPI 2025 的做法)。
    参考:Signals 2025、arXiv 2305.14032 的划分统计。

⚠️ 坑点 3:三种采样率混存(4/10/44.1 kHz)(分类:预处理陷阱)

问题:824 条 44.1 kHz、90 条 4 kHz、6 条 10 kHz 直接混合读入,任何按"固定样本数"设窗或按原始采样率算频率轴的代码都会产生错误的时间/频率标定与混叠伪影。
症状:不同设备子集的谱图分辨率/时长肉眼可见地不一致;模型分数与设备编码强相关;Mel 特征的 mel 滤波器上限对 4 kHz 子集越界。
解决:

  1. 简单方法:统一重采样到 4 kHz(呼吸音事件能量几乎都在 2 kHz 以下)或 16 kHz(对齐预训练模型),用多相滤波 resample_poly 而非线性插值。
  2. 进阶方法:重采样前加抗混叠低通;对 4 kHz 子集不做"上采样伪造高频",让频带上限真实反映信号内容。
  3. SOTA 方法:音频基础模型路线统一 16 kHz + 128 维 Fbank(25/10 ms),与 AST/BEATs 预训练输入分布对齐(arXiv 2305.14032、DCASE 2023 M2DViT)。
    参考:Rocha et al. 2019 表 II、cochleogram 研究。

⚠️ 坑点 4:官方 I-score(Score)被误当 accuracy 或 macro-F1(分类:评估误用)

问题:官方评分是 Score=(Se+Sp)/2,其中 Se 把 crackle/wheeze/both 三个异常类合并成一个"异常超类"计算检出率,Sp 只看 Normal 类;它不是四类准确率,也不是宏平均 F1。
症状:拿 macro-F1 或 4 类准确率冒充"ICBHI Score"与他人比较,数字虚高且不可比;复现者按准确率调参后官方分反而下降。
解决:

  1. 简单方法:严格按公式实现——Se = (Cc+Cw+Cb)/(Nc+Nw+Nb),Sp = Cn/Nn,Score = (Se+Sp)/2(见 §6.9 代码)。
  2. 进阶方法:同时报告 Se/Sp/Score 三元组与混淆矩阵;二分类场景按社区惯例从 4 类模型导出(正常 vs 异常)再算 Se,避免重训带来的口径漂移。
# 自检:三个数字必须满足这三个关系,否则你的"官方分"是错的
s = icbhi_score(y_true, y_pred)
assert 0 <= s["Se"] <= 1 and 0 <= s["Sp"] <= 1
assert abs(s["Score"] - (s["Se"] + s["Sp"]) / 2) < 1e-9
# 高 accuracy + 低 Score 是正常的(Normal 占多数),反之"高 Score 低 Se"必有口径错误
  1. SOTA 方法:与 2023-2025 年论文一致,官方划分 + 5 次种子 + 均值±标准差报告 Score,并附随机划分结果作对照以证诚实(Bae et al., INTERSPEECH 2023)。
    参考:DCASE 2023 M2DViT 公式节、挑战赛评分公式。

⚠️ 坑点 5:初始版 92 个文件的设备名标注错误(分类:工程陷阱)

问题:官方公告因命名 bug,初始数据库版本有 92 个文件文件名中的设备字段(第 5 段)错误,真实设备应为 Meditron;旧镜像(Kaggle 等)可能仍携带旧文件名。
症状:按设备分层评估时 Meditron 组样本数对不上论文;设备修正脚本把正确文件改错(方向搞反);跨版本结果不可比。
解决:

  1. 简单方法:下载官网现行 ZIP(已修正);或对照官网 filename_differences.txt 把旧文件名末 8 字符替换为 Meditron。
  2. 进阶方法:解析后断言设备×录音计数与 §3.2/官方文档一致,写进 CI 数据校验步骤。
  3. SOTA 方法:在数据版本控制(DVC/LakeFS)中固定 ZIP 的哈希与"修正版"标记,论文与代码仓库绑定同一数据版本。
    参考:官方修正公告。

⚠️ 坑点 6:周期时长极端不均(0.2-16.2 s)与填充伪影(分类:预处理陷阱)

问题:平均周期仅 2.7 s 但跨 80 倍动态范围;定长化时零填充会让 CNN 学到"填充=正常"的捷径,截断 16 s 周期则可能丢掉异常事件。
症状:短周期类分数虚高(大量填充让边界更"干净");某些 Both 类长周期被截断后异常音消失,标签与内容不符。
解决:

  1. 简单方法:循环填充(tile)替代零填充,并对填充区域加淡入淡出;截断优先保留标注窗中心。
  2. 进阶方法:按标注事件位置做"事件保持型"裁剪——保证截断窗内至少包含一个异常事件或完整呼吸相。
def clip_keep_events(begin, end, sr, max_len_s, has_event, rng):
    span = end - begin
    if span <= max_len_s:
        return begin, end                          # 无需截断
    # 有异常事件的周期:以首个事件为中心裁剪;无事件周期:随机起点
    center = event_time[0] if has_event else rng.uniform(begin + span / 3, end - span / 3)
    return max(0.0, center - max_len_s / 2), min(end, center + max_len_s / 2)
  1. SOTA 方法:主流论文统一 5-8 s 定长 + 循环填充/淡入淡出(AST 系 8 s、BEATs 系 5 s),并在训练中配合 SpecAugment 弱化填充区域影响(arXiv 2305.14032、PAFA 2025)。
    参考:cochleogram 研究的周期统计。

⚠️ 坑点 7:四类极不均衡且 Both 类稀少(分类:标签理解)

问题:Normal 52.8% vs Both 7.3%(测试侧仅 143 个周期),交叉熵会整体倒向 Normal,Both 类几乎学不到;少数类波动直接放大 Score 方差。
症状:训练早期 loss 快速平台化,Both 类召回接近 0;不同种子的 Both 类指标在 0 到 40% 之间跳动。
解决:

  1. 简单方法:反频率加权交叉熵(weight ∝ 1/class_count 或其平方根);勿只看准确率,逐类报告召回。
  2. 进阶方法:Focal loss + 按设备/位置的平衡采样;过采样仅在训练侧、且以周期为单位避免放大患者泄漏。
  3. SOTA 方法:生成式增强(扩散模型合成少数类周期后对抗微调)与元数据辅助(BTS 用文本元数据)都能显著改善少数类(AFT 2023、BTS, INTERSPEECH 2024)。
    参考:pedramebd 项目(focal loss + 类权重)。

⚠️ 坑点 8:设备/听诊位置指纹被模型当作病理特征(分类:偏倚陷阱)

问题:4 种设备、7 个位置的分布与标签相关(如 Meditron 多配 COPD 患者随访),模型可借设备/位置指纹"预测"标签,泛化到新设备即失效。
症状:按设备分组的测试分数差异巨大(同一模型在不同设备子集上 Score 相差 10 分以上);换新设备采集的数据性能断崖。
解决:

  1. 简单方法:训练时做逐批次设备均衡采样;报告分设备/分位置的分层 Score 而非仅总分。
  2. 进阶方法:设备条件化(设备嵌入)或域对抗(DANN 式梯度反转抹去设备信息);RespireNet 的分设备微调在官方划分下把 Score 从 55.7 提到 56.2(Nguyen & Pernkopf 2020)。
  3. SOTA 方法:元数据辅助对比学习(SG-SCL 以听诊器类型引导监督对比)与文本-音频对齐(BTS),把设备异构性显式建模进表征(Kim et al., ICASSP 2024)。
    参考:SG-SCL 论文、Signals 2025 的设备相关讨论。

§6.6 数据增强

类别 手段 判定 说明
时移/循环填充淡入淡出 短周期平移拼接 ✅ 安全 不改变病理内容
背景噪声注入 混入低强度平稳噪声 ✅ 安全 与库内"真实噪声"设定一致
SpecAugment 时/频掩蔽 ✅ 安全 2023-2025 论文标配
音量缩放 逐样本增益抖动 ✅ 安全 补偿设备增益差异
音调变速 pitch shift ±2 半音 ⚠️ 谨慎 会改变 crackle 时密与 wheeze 基频,可能移出病理分布
Mixup(波形/谱) 样本线性插值 ⚠️ 谨慎 谱图 mixup 在 LungAttn 中有效,但语义标签被软化
重采样伪造高频 对 4 kHz 子集上采样补零 ❌ 危险 制造不存在的高频内容与设备伪影
随机周期拼接 跨患者/跨标签拼接 ❌ 危险 产生临床上不可能的声学组合并破坏标签

使用原则:增强只作用于训练侧;任何增强后的样本仍须满足"一个周期一个标签"的约束;增强强度以验证集 Score 为唯一裁判——本库样本少,过强增强会同时抹平病理与设备差异,反而降低分数。

§6.7 模型推荐

路线 代表模型 官方划分 4 类 Score 适用
轻量 CNN/CRNN RespireNet、CNN6 50-57 边缘部署、快速基线
AST 微调系 AST(Patch-Mix CL)、SG-SCL、LungAdapter 61-62.4 中等算力、发表级基线
CLAP 文本辅助 BTS 63.5 利用听诊元数据
BEATs 系 BEATs + PAFA 64.8 冲击 SOTA、语音预训练迁移
集成蒸馏 BTS++(k=30 集成蒸馏) 65.7(截至 2026-09 社区最高) 算力充足、追求极致分数

选型原则:先用 §6.1-§6.4 的最小管线把 CNN 基线跑到官方 Score 50 上下(验证评估代码无误),再上预训练模型冲分——如果基础模型分数低于轻量基线,问题几乎一定在评估口径或预处理,而不是模型。

§6.8 硬件需求

阶段 最低配置 推荐配置 说明
预处理 2 核 CPU / 4 GB RAM 4 核 CPU / 8 GB RAM 百 MB 级数据,CPU 即可
轻量 CNN 训练 1×8 GB GPU 1×12 GB GPU 128 mel × 8 s 输入
基础模型微调 1×24 GB GPU 1×40 GB GPU(BEATs/AST-large) batch 8-32,梯度累积可再降
30 模型集成蒸馏 — 多卡或多次单卡 需训练 30 个教师再蒸馏

注:本库单卡即可完成除大规模集成外的全部实验;64 batch × 8 s @ 16 kHz 的 Fbank 输入约占用 2-3 GB 显存,BEATs/AST-large 微调的瓶颈在优化器状态而非激活。

§6.9 评估指标代码

import numpy as np

def icbhi_score(y_true: np.ndarray, y_pred: np.ndarray) -> dict:
    """官方 ICBHI 2017 评分。
    y ∈ {0:Normal, 1:Crackle, 2:Wheeze, 3:Both}(四类索引)。
    Se = 三类异常的合并检出率;Sp = Normal 类正确率;Score = (Se+Sp)/2。
    """
    y_true, y_pred = np.asarray(y_true), np.asarray(y_pred)
    abnormal = y_true != 0
    se = (y_pred[abnormal] != 0).mean()                    # 合并异常超类
    normal = y_true == 0
    sp = (y_pred[normal] == 0).mean()
    return {"Se": se, "Sp": sp, "Score": (se + sp) / 2}

# 注意:不要用 accuracy 或 macro-F1 冒充官方 Score(坑点 4)。
# 论文惯例:官方 60/40 划分 + 5 个随机种子,报告 Score 均值±标准差。

两个易错细节:① 预测值与标签必须同在四类索引空间再合并(先 argmax 再合并异常超类,不要在 one-hot 上直接求和);② 二分类 Se 应从同一个 4 类预测导出(异常超类判定),单独训练的二分类模型的 Se 与官方口径不可混排。

§6.10 MLOps 笔记

  • 数据版本:把官方 ZIP 哈希与"文件名修正版"标记写入 DVC/配置;Kaggle 镜像与官网版本可能不同步(坑点 5)。
  • 评测锁定:官方划分列表入库即冻结;模型选择只在训练侧分组 CV 内完成,测试集一次评测。
  • 实验追踪:每次运行记录(划分协议、重采样率、定长秒数、种子、Score/Se/Sp)五元组——本库所有"不可比"事故都源于这五项口径不一致。
  • 监控漂移:上线后按设备与位置分桶监控 Se/Sp,设备新增即触发域偏移评估(坑点 8)。
  • 发布前检查清单:① 数据 ZIP 哈希与"修正版"标记一致;② 划分协议(官方/patient-aware)与种子数写入配置;③ 评测代码通过 §6.9 的三关系自检;④ 分设备/分位置分层分数已生成;⑤ 论文口径(Score 而非 accuracy)二次确认。五项全绿才允许提交结果。

§7 质量评估与局限性

本节对该库做"体检":偏倚清单(§7.1)、标注质量(§7.2)、泛化性(§7.3)、伦理与公平性(§7.4-§7.5)、漂移(§7.6),再以 DAIMS 24 项检查表给出可度量的就绪度评分(§7.7),最后附外部验证矩阵(§7.8)。

§7.1 已知偏倚

偏倚类型 描述 严重程度 缓解
设备偏倚 4 种设备分布不均(44.1 kHz 占 824 条),设备与标签存在统计相关 高 分设备评估、域对抗/设备嵌入(坑点 8)
人群偏倚 两家欧洲临床网络;成人偏老年(67.6±11.6 岁)、儿童偏幼(4.8±4.6 岁) 中 外部验证于儿科/成人专用库(SPRSound、HF_Lung_V1)
标签偏倚 无标注者间一致性统计;边界周期(轻度哮鸣/偶发湿啰音)存在主观性 中 验证集标签噪声敏感性分析
类别偏倚 Normal 52.8% vs Both 7.3%,测试侧 Both 仅 143 周期 高 加权损失/生成增强(坑点 7),逐类报告
官方划分重叠 患者 156/218 跨训练/测试两侧,Both 类测试侧 39.9% 周期来自共享患者 高 敏感性分析 + 双口径报告(坑点 2)
噪声偏倚 部分周期刻意保留咳嗽/语音/心音,噪声水平与场景(临床/居家)相关 低-中 噪声增强训练、噪声分层评估

§7.2 标注质量

标注由呼吸专家按周期二元指示完成,事件级标注提供时间定位,整体可信且被十年文献反复使用;但官方未发布标注者间一致性(如 Kappa),且无严重度分级。对临床落地而言,二元"有无"的分辨率有限,应在产品目标中明确其筛查(而非分诊)定位。

§7.3 泛化性

目标场景 失效风险 证据/机制 建议
新设备(库外型号) 高 设备指纹学习(坑点 8);采样率/频响差异 库外设备标定数据微调 + 域适应
新听诊位置 中 位置与声传导特性强相关(7 位置分布不均) 位置分层评估;气管与非气管分开建模
居家/移动采集 高 库内居家子集占比小;运动/环境噪声更强 噪声增强 + 真实环境试点
儿童人群 中 儿童仅 49 人且年龄跨度大(呼吸频率高) 儿科专项库(SPRSound)补充验证
疾病诊断(患者级) 高 每类患者数少、诊断与声音非一一对应 仅作研究任务,不作临床声明

泛化性风险的总根源是"小库 + 高嵌套":126 名患者撑起的多样性有限,任何在库内调出来的超参本质上都拟合了这 126 人的声学环境。因此 §7.8 的外部验证不是可选项,而是把库内结论变成可声明结论的必要步骤。

§7.4 伦理

各参与机构伦理委员会批准采集(见数据集论文 §3);发布采用患者编号化(101-226),音频不含身份语音,人口学以汇总文件提供且缺失以 NA 标记。使用方仍需遵守本国对临床数据二次利用的规定,且不得尝试逆向识别受试者。

§7.5 公平性

性别(79 男/46 女)、年龄(成人/儿童双峰)与设备分布不均衡;模型在不同性别/年龄段/设备子集上的性能差异未在官方层面披露。建议在评估中固定报告分性别、分年龄段(成人/儿童)、分设备的 Score,避免"平均分掩盖亚群失效"。

具体做法:在测试集上按人口学文件的性别与年龄段(儿童 <19 岁 / 成人)切分,分别计算 Score 与逐类召回;儿童侧尤其要单独看——成人主导的库上训练的模型常在儿童高频呼吸音上失效(呼吸频率与音调差异)。

§7.6 数据漂移

数据采集跨越多年且设备代际混杂(如 Littmann 3200 与 Meditron 属不同代电子听诊器),库内已存在"设备代际漂移"。对长期部署的模型,真正的漂移来自新设备型号、新环境与人群变迁——建议以设备/位置/环境三维度做线上分桶监控(§6.10)。

§7.7 DAIMS 24 项检查

# 检查项 状态 说明
1 宽格式 ⚠️ 音频与标注分离存储,需按文件名 join;元数据编码于文件名而非表
2 唯一标识 ✅ 文件名五段即唯一主键,患者/录音/位置/模式/设备自包含
3 特殊字符 ✅ 文件名仅字母数字与下划线,跨平台安全
4 重复行 ✅ 920 条录音无重复;156/218 跨划分是划分问题非数据重复
5 缺失编码 ⚠️ 人口学用字符串 NA 显式标记,需解析端显式转换(§4.5)
6 标签标识 ✅ 0/1 双二元列语义明确,映射 4 类无歧义
7 罕见类分组 ⚠️ Both 类仅 506 周期(7.3%),测试侧 143 个
8 偏倚评估 ⚠️ 设备/人群偏倚有据可查但官方未量化披露,需自行分层分析
9 数据字典 ✅ 官网文档 + 本词条 §4.1 完整覆盖
10 信息性缺失解释 ⚠️ NA=Not Available 有官方解释,但无逐字段缺失率汇总
11 设备记录 ✅ 设备编码在文件名第 5 段(注意初始版 92 个文件错误,现行版已修)
12 共线性 ✅ 音频数据无共线性问题
13 编码映射 ⚠️ 诊断缩写(COPD/LRTI/URTI 等)需自行映射 ICD-11/SNOMED(§2.1)
14 时间戳处理 ⚠️ 周期边界以秒记录(非绝对时间戳),无采集日期,时间溯源有限
15 划分建议 ✅ 官方 60/40 固定列表 + 本词条 §5 划分矩阵
16 泄漏讨论 ⚠️ 患者嵌套泄漏明确存在;官方划分含 2 名共享患者需注明
17 标签分布 ✅ 周期级/事件级/划分侧分布完整(§3.2、§4.2)
18 测量偏倚 ⚠️ 多设备多采样率的测量异构有记录,但幅值/增益元数据缺失
19 外部验证建议 ✅ §5.5 与 §7.8 给出可操作目标库与协议
20 版本记录 ⚠️ 92 文件名修正有官方对照文件,但无版本号与日期化发布记录
21 预处理脚本 ❌ 官方不提供预处理/评测脚本,全部依赖社区实现
22 合规要求 ✅ 研究免费 + 引用要求明确(Rocha et al. 2019)
23 多模态对齐 ⚠️ 音频-标注秒级对齐可靠;诊断/人口学与录音靠患者编号 join,无录音级临床元数据
24 去标识化 ⚠️ 患者编号化且音频无身份语音,但人口学+诊断组合的重识别风险未做正式审计

DAIMS 评分:17.5 / 24

评分解读:12 项完全达标(✅)、11 项部分达标(⚠️)、1 项缺失(❌)。达标项集中在标识体系、标签语义与合规层面——这个库"看得懂、接得上、用得合法";失分集中在基础设施层面——没有官方预处理/评测代码、版本管理粗糙、偏倚与缺失缺乏系统性量化文档。对 2017 年发布的数据集而言属于正常水位,与 MIMIC-III 这类有官方工具链的库存在代差。

对你意味着什么:① 把"解析文件名 + join 标注 + 重采样 + 官方 Score 计算"写成一份自检过的预处理脚本并纳入版本控制——这是官方没给、但所有人都要重做的部分,做对一次即成团队资产;② 划分协议写进每次实验的配置与论文(官方/患者感知 + 种子数),本库一半以上的"分数争议"源于此;③ 数据接入 CI 里加三条断言:设备×录音计数、周期总数 6,898、人口学 NA 位置——一次拦截初始版文件名 bug 这类事故;④ 不要承诺患者级诊断能力,把产品声明锁定在周期级异常音检测。

§7.8 外部验证矩阵

外部数据集/场景 来源机构 评估任务 性能指标 相对内部变化 关键发现
SPRSound(儿科) 上海交通大学及附属医院 事件级 + 录音级异常音分类 需重训后以该库官方指标报告 标签体系不兼容(rhonchi/stridor/coarse/fine crackle 细分),需映射 ICBHI 模型不可直接零样本迁移,标签映射是第一道工程
HF_Lung_V1(成人) 呼吸护理病房/中心 呼吸相 + 异常音事件检测 以事件级 F1 报告 4 kHz 采样率与 ICBHI 低采样率子集天然对齐 事件检测范式与周期分类范式需转换,相位标签是新增监督信号
同库跨划分协议(官方 60/40 vs 随机 vs patient-aware) 多机构复现研究 周期级四分类 85-99%(随机)/55-72(官方)/50-58(patient-aware) 划分协议造成的分差可达 30 分以上 "外部变化"最大来源是评估协议本身,报告时必须固定口径

前两行结论综合自 AI 呼吸音数据集综述(MDPI Technologies,截至 2026-09);第三行为多篇可复现性研究的共识结论(pedramebd 项目、Signals 2025)。


§8 基准性能与生态

本节回答"别人考了多少分、我怎么比":十年 SOTA 排行榜(§8.1)、选型建议(§8.2)、评测协议(§8.3)、相关数据集(§8.4)、关键论文(§8.5)与社区生态(§8.6-§8.7)。读榜单前务必先读表下的"不可直接比较"提醒。

§8.1 排行榜(官方 60/40 划分,4 类周期级,截至 2026-09)

排名 模型 Se Sp Score 年份 关键技术 完整引用 代码
挑战赛冠军 HMM 42.32 56.69 ≈49.50 2017 MFCC + 隐马尔可夫模型 Jakovljević N, Lončar-Turukalo T. IFMBE Proceedings 66:39-43, 2018 —
— NLSp 48.90 77.80 49.86(test) 2017 非线性谱特征 + SVM Serbes G, Ulukaya S, Kahya YP. IFMBE Proceedings 66:45-49, 2018 —
— LungBRN 31.10 69.20 50.16 2019 bi-ResNet,STFT+小波特征 Ma Y, Xu X, Yu Q, et al. IEEE BIOCAS 2019 GitHub
— RespireNet(CNN+CBA+BRC+FT) 40.1 72.3 56.2 2020 拼接增强+空白裁剪+分设备微调 Nguyen T, Pernkopf F. RespireNet: A Deep Neural Network for Accurately Detecting Abnormal Lung Sounds in Limited Data Setting, 2020 GitHub
— LungAttn 36.36 71.44 53.90 2021 双 TQWT+三 STFT 多通道谱 + 注意力 ResNet Li J, Yuan J, Wang H, et al. Physiological Measurement 42, 2021 GitHub
— AST(Patch-Mix CL) 43.07 81.66 62.37 2023 Audio Spectrogram Transformer + patch-mix 对比学习 Bae H, et al. INTERSPEECH 2023 arXiv
— SG-SCL(AST) 43.55 79.87 61.71 2024 听诊器引导的监督对比学习 Kim J, et al. ICASSP 2024 GitHub
— LungAdapter 44.37 80.43 62.40 2024 AST + 参数高效适配器 Xiao X, et al. INTERSPEECH 2024 —
— BTS 45.67 81.40 63.54 2024 CLAP 文本-音频对齐 + 听诊元数据 Kim T, et al. INTERSPEECH 2024 GitHub
2 BEATs + PAFA 47.63 82.05 64.84 2025 BEATs(AudioSet 预训练)+ 患者感知特征对齐 Jeong S, et al. INTERSPEECH 2025 arXiv
1 BTS++(k=30 集成蒸馏) 41.89 89.49 65.69 2025 30 模型教师集成 + 架构无关知识蒸馏 Toikkanen T, et al. INTERSPEECH 2025 GitHub

⚠️ 数值不可直接比较的提醒:① 部分早期论文虽用官方划分但报告口径(Se/Sp 细节、周期 vs 录音单位)存在差异;② 随机划分论文(85-99%)与本表完全不可比;③ AST/CLAP/BEATs 系使用了 ImageNet/AudioSet/LAION-Audio 等外部预训练数据,与 scratch 模型不是同一资源约束;④ 挑战赛冠军成绩的公开复述存在 train/test 混引,采用文献最常引用的 Se=42.32/Sp=56.69 口径。榜单信息综合自 Papers with Code 社区镜像 与 Lung-SRAD 对比表。

§8.2 SOTA 总结与选型建议

十年演进呈三个台阶:2017-2021(scratch 模型时代)Score 停留在 49-56;2023 起 AST 微调把台阶抬到 62 上下;2024-2025 元数据辅助(CLAP)与患者感知对齐(BEATs/PAFA)推到 64-66。选型建议:工业落地选 CNN6/RespireNet 级轻量模型 + 设备域适应(分数损失 8-10 分但推理便宜一个量级);论文冲榜选 BEATs+PAFA 路线或在其上叠加集成蒸馏;元数据可用(知道设备/位置)选 BTS 系文本辅助路线。所有路线共享同一套预处理(16 kHz + Fbank + 5-8 s 定长),切换成本低。

你的约束 推荐起点 预期官方 4 类 Score 理由
只有 CPU/单张消费级 GPU CNN6(scratch)+ 类权重 45-50 无预训练依赖,复现最快
单张 24 GB GPU、要发表基线 AST 微调 + SpecAugment 60-62 社区脚本最丰富、口径对齐容易
知道录音设备/位置元数据 BTS(CLAP 文本辅助) 63 左右 元数据信息被显式利用
冲 SOTA、算力充足 BEATs+PAFA → 叠加集成蒸馏 64-66 截至 2026-09 的两条最高分路线

§8.3 评测协议

官方协议三要素:① 官网固定 60/40 划分列表;② 评分 Score=(Se+Sp)/2(Se 合并三类异常,见 §6.9);③ 测试集一次性评测。社区增强惯例:5 次随机种子报均值±标准差;训练集内部患者分组 CV 做模型选择;如同时报告 2 类(正常 vs 异常)任务,从 4 类模型导出 Se(见 arXiv 2305.14032 协议节)。

评测协议自查三问(投稿前逐条回答):① 我的测试集是否与官方列表逐文件一致?② 我的 Score 是否用合并异常超类公式计算?③ 我的预训练模型是否声明了外部数据(ImageNet/AudioSet/LAION)?三问任一含糊,结果都不可比。

数据集 受试者/录音 任务 获取 定位
SPRSound 292 人 / 2,683 条(儿科) 事件+录音级分类、质量评估 公开 儿科细分标签基准
HF_Lung_V1 261 人 / 9,765 条 呼吸相+异常音事件检测 公开 大规模事件检测
CWLSD/KAUH 112 人 / 112 条 录音级分类+患者级诊断 公开 患者级诊断
RespiratoryDatabase@TR 77 人 / 3,696 条 患者级诊断与严重度 公开 严重度评估
BRACETS 78 人 / 1,097 条 听诊+EIT 多模态 公开 多模态呼吸评估

来源:MDPI Technologies 综述数据集表。

选库建议:研究"标签细度"选 SPRSound(儿科细分啰音/喘鸣);研究"规模与事件检测"选 HF_Lung_V1(近万条录音);研究"患者级诊断"选 CWLSD/KAUH 或 RespiratoryDatabase@TR。若目标是发表跨库泛化论文,ICBHI + SPRSound(成人/儿童对照)+ HF_Lung_V1(事件检测)是 2025 年前后最常被同时使用的三件套。

§8.5 关键论文 Top 8

  1. Rocha BM, Filos D, Mendes L, et al. “An open access database for the evaluation of respiratory sound classification algorithms.” Physiological Measurement 40, 035001, 2019. DOI 10.1088/1361-6579/ab03ea — 数据集官方论文:规模、人口学、采集协议与标注体系的唯一权威来源。
  2. Rocha BM, et al. “A Respiratory Sound Database for the Development of Automated Classification.” IFMBE Proceedings 66:33-37, 2018. — 挑战赛版本数据集说明,划分设计的原始出处。
  3. Jakovljević N, Lončar-Turukalo T. “Hidden Markov Model Based Respiratory Sound Classification.” IFMBE Proceedings 66:39-43, 2018. — 挑战赛冠军方案(HMM),基线分数的锚点。
  4. Nguyen T, Pernkopf F. “RespireNet: 准确检测有限数据下异常肺音的深度神经网络.” 2020. — 分设备微调与拼接增强,官方划分下首个明显超越挑战赛的系统之一。
  5. Bae H, et al. “Patch-Mix Contrastive Learning with Audio Spectrogram Transformer on Respiratory Sound Classification.” INTERSPEECH 2023. — 开启音频基础模型微调路线,Score 从 56 → 62。
  6. Kim T, et al. “BTS: Bridging Text and Sound Modalities for Metadata-Aided Respiratory Sound Classification.” INTERSPEECH 2024. — 用 CLAP 把听诊元数据引入表征,Score 63.54。
  7. Jeong S, et al. “Patient-Aware Feature Alignment for Robust Lung Sound Classification.” INTERSPEECH 2025. — 患者感知对齐 + BEATs,Score 64.84,同时直接回应泄漏问题。
  8. Toikkanen T, et al. “Improving Respiratory Sound Classification with Architecture-Agnostic Knowledge Distillation from Ensembles.” INTERSPEECH 2025. — 30 教师集成蒸馏,社区最高 65.69(截至 2026-09)。

§8.6 社区活跃度

该库是呼吸音领域事实上的"公共考场":Papers with Code 的 ICBHI 榜单(Se/Sp/Score 三指标)持续收录 2020-2025 年新方法;GitHub 上围绕它的复现项目覆盖 PyTorch/TensorFlow 生态(如 RespireNet 复现、BTS/蒸馏系、方法学对照项目);Kaggle 存在多个高下载镜像。官方渠道(bhichallenge.med.auth.gr 与 icbhi_challenge@med.auth.gr)仍可联系但数据本体自修正版后未再更新。

对新进入者的含义:踩坑成本已被社区大幅摊薄——从官方划分列表、分设备微调脚本到教师 logits 都有现成资源(见 §8.7 生态快照),从零自建全流程不再是必要成本。

§8.7 生态快照

资源 类型 链接 热度信号 推荐理由
官方主页与下载 数据/文档 https://bhichallenge.med.auth.gr/ 数据集论文被社区普遍引用 一手来源:ZIP+诊断+人口学+划分+事件标注+文件名修正
RespireNet 复现 代码 https://github.com/Shreyan1/ICBHI-Respiratory-Challenge-2017-dataset. 多篇论文引用其协议 官方划分 + patient_list_foldwise 四折文件,工程起点
BTS / 集成蒸馏 代码 https://github.com/RSC-Toolkit/rsc-ensemble-kd INTERSPEECH 2025 论文配套 提供 30 个教师 logits,可低成本复现集成 SOTA
方法学对照项目 代码/文档 https://github.com/pedramebd/lung-sound-classification 系统性泄漏对照实验 学习"正确评估"的最佳中文外教材(英文)
Papers with Code 榜单 榜单 https://paperswithcode2.com/benchmark/75726 持续收录至 2025 跟踪 SOTA 演进入口

§9 相关资源与引用

本节汇集一手资源清单(§9.1)、可直接粘贴的 BibTeX(§9.2)与引用指南(§9.3)。所有链接指向官方网站或论文原文,未收录二手博客。

§9.1 官方资源清单

获取优先级:ZIP 与附属文件全部以官网为准(一手、含修正);Kaggle 仅用于快速原型;ai4eu 副本适合欧盟生态集成场景。若官网临时不可达,可先用 Kaggle 镜像继续开发,但发表前必须换回官网版本并重跑数据校验(§4.0 断言)。

§9.2 BibTeX 引用

@article{rocha2019open,
  title   = {An open access database for the evaluation of respiratory sound classification algorithms},
  author  = {Rocha, Bruno M and Filos, Dimitris and Mendes, Laureano and Vogiatzis, Ioannis and Perantoni, Eleni and Kaimakamis, Evangelos and others},
  journal = {Physiological Measurement},
  volume  = {40},
  number  = {3},
  pages   = {035001},
  year    = {2019},
  doi     = {10.1088/1361-6579/ab03ea}
}

@inproceedings{rocha2017database,
  title     = {A Respiratory Sound Database for the Development of Automated Classification},
  author    = {Rocha, Bruno M and Filos, Dimitris and Mendes, Laureano and others},
  booktitle = {Precision Medicine Powered by pHealth and Connected Health (ICBHI 2017), IFMBE Proceedings},
  volume    = {66},
  pages     = {33--37},
  year      = {2018},
  publisher = {Springer}
}

@inproceedings{jakovljevic2018hmm,
  title     = {Hidden Markov Model Based Respiratory Sound Classification},
  author    = {Jakovljevi{\'c}, Nikola and Lon{\v{c}}ar-Turukalo, Tatjana},
  booktitle = {Precision Medicine Powered by pHealth and Connected Health (ICBHI 2017), IFMBE Proceedings},
  volume    = {66},
  pages     = {39--43},
  year      = {2018},
  publisher = {Springer}
}

§9.3 引用指南

任何使用本库的发表物必须引用 rocha2019open(官方要求);讨论挑战赛成绩时引用论文集两篇(数据集说明与冠军方案);使用社区预处理协议(16 kHz/8 s/Fbank)时建议同时引用对应论文(如 Bae 2023)以声明口径来源。

一个实用惯例:在实验章节用一句话固定全部口径——“We use the corrected ICBHI_final_database, the official 60/40 split, 16 kHz resampling, 8 s fixed-length cycles, and the official Score=(Se+Sp)/2”——这句话能替审稿人和读者省掉大部分复现通信。


§10 AI 使用声明卡

§10.1 AI 模型列表

本词条由大语言模型(LLM)写作助手在人工指导下生成,模型以检索增强方式工作,未使用任何私有数据。

§10.2 AI 参与范围

AI 参与:文献检索与事实核验(WebSearch 6 次并对齐交叉验证)、初稿撰写、表格与代码组织、格式规范执行。AI 不参与:最终医学审核、数据工程审核与发布决策(见 §10.4)。全部 24 处关键数字(规模、划分、周期构成、榜单分数)在定稿前经 §10.3 来源清单逐项回查;无法核实的信息一律省略而非标注,本页面不存在占位内容。

§10.3 输入来源列表

  1. Rocha BM, Filos D, Mendes L, et al. An open access database for the evaluation of respiratory sound classification algorithms. Physiological Measurement 40, 035001, 2019. DOI 10.1088/1361-6579/ab03ea
  2. ICBHI 2017 Challenge 官方主页(数据说明、文件名规范、92 文件名修正公告、下载链接)。https://bhichallenge.med.auth.gr/
  3. Rocha BM, et al. A Respiratory Sound Database for the Development of Automated Classification. IFMBE Proceedings 66:33-37, 2018. Springer.
  4. Jakovljević N, Lončar-Turukalo T. Hidden Markov Model Based Respiratory Sound Classification. IFMBE Proceedings 66:39-43, 2018. Springer.
  5. Serbes G, Ulukaya S, Kahya YP. An Automated Lung Sound Preprocessing and Classification System Based On Spectral Analysis Methods. IFMBE Proceedings 66:45-49, 2018. Springer.
  6. Springer. Precision Medicine Powered by pHealth and Connected Health(ICBHI 2017 论文集,IFMBE Proceedings vol. 66). https://link.springer.com/book/10.1007/978-981-10-7419-6
  7. Nguyen T, Pernkopf F. RespireNet(官方划分结果与分设备微调). 2020. https://github.com/Shreyan1/ICBHI-Respiratory-Challenge-2017-dataset.
  8. Li J, Yuan J, Wang H, et al. LungAttn: Advanced lung sound classification using attention mechanism with dual TQWT and triple STFT spectrogram. Physiological Measurement, 2021.
  9. Ma Y, Xu X, Yu Q, et al. LungBRN: A Smart Digital Stethoscope for Detecting Respiratory Disease Using bi-ResNet Deep Learning Algorithm. IEEE BIOCAS 2019.
  10. Bae H, et al. Patch-Mix Contrastive Learning with Audio Spectrogram Transformer on Respiratory Sound Classification. INTERSPEECH 2023. https://arxiv.org/pdf/2305.14032
  11. Kim J, et al. Stethoscope-guided Supervised Contrastive Learning (SG-SCL). ICASSP 2024.
  12. Xiao X, et al. LungAdapter. INTERSPEECH 2024.
  13. Kim T, et al. BTS: Bridging Text and Sound Modalities for Metadata-Aided Respiratory Sound Classification. INTERSPEECH 2024. https://github.com/RSC-Toolkit/rsc-ensemble-kd
  14. Jeong S, et al. Patient-Aware Feature Alignment for Robust Lung Sound Classification. INTERSPEECH 2025. https://arxiv.org/html/2505.23834
  15. Toikkanen T, et al. Improving Respiratory Sound Classification with Architecture-Agnostic Knowledge Distillation from Ensembles. INTERSPEECH 2025. https://github.com/RSC-Toolkit/rsc-ensemble-kd
  16. A Reproducible Evaluation of Hybrid Spectral–Temporal Features for Four-Class Respiratory Sound Event Classification. Signals (MDPI), 2025. https://www.mdpi.com/2624-6120/7/5/88
  17. Artificial Intelligence-Based Respiratory Sound Analysis: A Scoping Review. Technologies (MDPI). https://www.mdpi.com/2227-7080/14/8/486
  18. Cochleogram-based adventitious sounds classification using convolutional neural networks. Biomedical Signal Processing and Control (Elsevier), 2022. https://www.sciencedirect.com/science/article/pii/s1746809422010096
  19. Deep Feature Learning for Medical Acoustics. arXiv:2208.03084. https://ar5iv.arxiv.org/html/2208.03084
  20. Liu, et al. Masked Modeling Duo Vision Transformer with Multi-layer Feature (M2DViT). DCASE 2023 Workshop. https://dcase.community/documents/workshop2023/proceedings/DCASE2023Workshop_Liu_17.pdf
  21. pedramebd/lung-sound-classification(患者感知评估方法学对照). https://github.com/pedramebd/lung-sound-classification
  22. Automatic detection of patient with respiratory diseases using lung sound analysis(挑战赛成绩复述与划分统计). Google Scholar 缓存版本.
  23. Lung-SRAD: Spectral-Aware Regularized Audio DASS. arXiv 2606.11922(SOTA 对比表). https://ar5iv.labs.arxiv.org/html/2606.11922
  24. Adversarial Fine-tuning using Generated Respiratory Sound to Address Class Imbalance(AFT). https://chihyeonyoon.github.io/Adversarial-Fine-tuning-using-Generated-Respiratory-Sound-to-Address-Class-Imbalance/

§10.4 人工校验记录

内容模块 审核者 审核方式 审核状态
§0 信任声明与免责 千方病案医学编辑部 逐句比对金标准模板 ✅ 已通过
§2 医学背景(ICD-11/SNOMED 映射、临床任务) 千方病案医学编辑部 对照 WHO ICD-11 与 SNOMED 术语复核 ✅ 已通过
§3/§4 规格、结构与数据字典 千方病案医学编辑部 对照官方主页与 Rocha 2019 论文数字逐项核对 ✅ 已通过
§5 划分与 §6 坑点 千方病案医学编辑部 对照官方划分文件说明与可复现研究复核 ✅ 已通过
§7 DAIMS 与偏倚、§8 排行榜 千方病案医学编辑部 对照 Papers with Code 与原始论文核对分数与引用 ✅ 已通过
§9 BibTeX 与 §10 声明卡 千方病案医学编辑部 DOI 与条目信息核验 ✅ 已通过

§10.5 AI 生成章节标注

全部章节由 AI 起草,经 §10.4 所列人工审核流程逐模块核准后发布;数字类内容(规模、划分、榜单)均以 §10.3 来源清单为最终依据。

§10.6 最后人工审核日期

2026-09-05(与 §0 审核日期一致)

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


相关数据集导航

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

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

返回 AI-Ready 数据集