SleepFM-Clinical数据基础:BAS、RESP、EKG、EMG四大模态如何对应多导睡眠图?

【免费下载链接】sleepfm-clinical

项目地址: https://gitcode.com/gh_mirrors/sl/sleepfm-clinical
点击查看 免费下载

SleepFM-Clinical 是发表在 Nature Medicine 上的多模态睡眠基础模型 SleepFM 的开源实现。它把多导睡眠图(Polysomnography,PSG)中的生理信号统一组织成 BAS、RESP、EKG、EMG 四大模态,并从中学习可预测疾病风险的睡眠表征。这篇文章带你快速搞懂:这四个缩写分别对应 PSG 里的哪些通道、为什么这样分组,以及它们在代码中是如何落地的 🧭

PSG 多导睡眠图:睡眠分析的"金标准"数据源

PSG 是睡眠医学中的金标准检测手段,一晚上会同时记录脑电、心电、呼吸、肌电等多路信号。不同医院、不同设备的电极摆放方式(montage)和通道命名千差万别——有的叫 EEG F3-A2,有的叫 C3-M2,有的干脆只写 EEG。

这正是 SleepFM 设计四大模态的原因:

  • 统一命名混乱:把成百上千种通道写法归类到 4 个模态,屏蔽设备差异;
  • 容错处理:某台设备缺某一类信号时,模型依然可以训练(对比学习 leave-one-out 模式);
  • 下游灵活:睡眠分期主要看 BAS,呼吸暂停主要看 RESP,疾病预测则四路信号一起上。

预训练数据规模:超过 585,000 小时 PSG 记录、约 65,000 名受试者(见 README.md)。

BAS 脑电模态:睡眠分期的"主角"

BAS = Basic(脑/眼信号组),对应 PSG 中的脑电(EEG)与眼电(EOG)通道,是判定睡眠阶段的核心依据。

信号类型典型通道名(channel_groups.json 中的写法)临床意义
脑电 EEGF3、C4、O1:M2、EEG F3-A2区分 Wake / N1 / N2 / N3 / REM
眼电 EOGEOG(L)、EOG(R)、LOC、ROC、E1、E2识别 REM 期快动眼与清醒期眼动
参考电极A1、A2、M1、M2耳垂/乳突参考,用于导联命名

睡眠分期的标签体系就在 sleepfm/preprocessing/preprocessing.py 中:{'Wake': 0, 'Rem': 1, 'N1': 2, 'N2': 3, 'N3': 4, 'Artifact': 5}。

RESP 呼吸模态:发现睡眠呼吸暂停的关键

RESP = Respiratory(呼吸信号组),覆盖呼吸努力、气流、血氧和鼾声,是判断睡眠呼吸暂停综合征(OSA)的核心模态。

  • 呼吸努力带:Chest、Thorax、Abd、RIP Thorax、ABDOMEN —— 胸/腹带,判断"有努力但无气流"的阻塞性事件;
  • 气流信号:Nasal Pressure、NASAL P、AIRFLOW、NasalAC —— 鼻压/热敏气流;
  • 血氧与脉搏:SpO2、SaO2、TcSpO2、Pulse、PPG、Heart Rate —— 捕捉夜间血氧下降(AHI 评分依赖它);
  • 鼾声与温度:Snore、MIC、Oral Therm —— 辅助标记鼾声事件。

预处理脚本中定义了呼吸事件编码(sleepfm/preprocessing/preprocessing.py):

flow_events = {'Central Apnea': 1, 'Mixed Apnea': 2,
              'Obstructive Apnea': 3, 'Hypopnea': 4, 'RERA': 5}

EKG 心电模态:通往心血管风险的窗口

EKG = Electrocardiogram(心电组),对应 PSG 中的 ECG 通道,如 ECG、ECG II、ECG I、ECG L 等。

心电看似"与睡眠无关",但夜间心律失常、心率变异性与全因死亡、心梗、心衰、房颤等风险高度相关。论文中 SleepFM 在 130 种疾病上取得 C-Index ≥ 0.75,其中心梗 0.81、心衰 0.80、房颤 0.78,EKG 模态功不可没。疾病预测的 PheCode 标签映射见 sleepfm/configs/label_mapping.csv。

EMG 肌电模态:捕捉睡眠中的身体活动

EMG = Electromyography(肌电组),包括颌肌、腿部和肢体肌电:

子类典型通道名用途
下颌肌电Chin、CHIN、Chin:Chin2、LChinREM 期肌张力消失的判据之一
腿部肌电LEG(L)、LEG(R)、LLEG、RLEGEMG周期性肢体运动(PLM)检测
肢体肌电Arms-L、Arm-R、Foot-L体动与异常运动监测

腿肌电事件在预处理中被编码为 {'P-Marker': 1, 'I-Marker': 2, 'LM Body position': 3, 'LM Resp': 4},用于区分周期性肢体运动与觉醒反应。

代码落地:channel_groups.json 通道字典

四大模态的"名字词典"集中在 sleepfm/configs/channel_groups.json:

  • BAS:517 个通道名条目(约 345 个去重后)
  • RESP:149 个条目
  • EKG:52 个条目
  • EMG:249 个条目

数据加载时,sleepfm/models/dataset.py 会逐一比对 HDF5 文件中的通道名,把匹配到的通道划入对应模态;若某模态一个通道都没匹配到,该文件会被剔除,保证四模态齐全。

采样与通道数在预训练配置 sleepfm/configs/config_set_transformer_contrastive.yaml 中定义:

BAS_CHANNELS: 10
RESP_CHANNELS: 7
EKG_CHANNELS: 2
EMG_CHANNELS: 4
sampling_duration: 5    # 分钟
sampling_freq: 128       # Hz
patch_size: 640
modality_types: ["BAS", "RESP", "EKG", "EMG"]

也就是说,每条训练样本 = 4 个模态 ×(各自的通道数)× 5 分钟 @ 128Hz 的信号块。不同文件通道数不同怎么办?collate_fn 用零填充 + mask 对齐到同一 batch,让模型天然适应各种 montage。

数据流转:从 .EDF 原始文件到模型输入

完整的数据管道是三步:

  1. 预处理:sleepfm/preprocessing/preprocessing.py 把 .EDF 文件重采样、低通滤波、标准化后写入 .HDF5(可用 preprocessing/preprocessing.sh 一键执行);
  2. 对比预训练:sleepfm/pipeline/pretrain.py 用 leave-one-out 对比学习(随机遮挡一个模态,让其余模态互相学习)训练 SetTransformer,得到 sleepfm/checkpoints/model_base/best.pt;
  3. 微调/评估:睡眠分期(finetune_sleep_staging.py)与疾病预测(finetune_diagnosis_coxph.py)分别复用该表征,微调权重在 sleepfm/checkpoints/model_sleep_staging/ 与 sleepfm/checkpoints/model_diagnosis/。

快速上手:仓库自带的 Demo 数据

想亲手看看数据长什么样,可以直接打开 notebooks/demo.ipynb,配套数据都在 notebooks/demo_data/:

数据集划分文件为 sleepfm/configs/dataset_split.json,训练时按 train/validation/test 三组 HDF5 路径取数。

总结:一张图看懂 PSG 数据四模态

模态全称核心信号主要服务任务
🧠 BASBrain/EyeEEG、EOG睡眠分期(Wake/REM/N1/N2/N3)
🫁 RESPRespiratory胸腹带、鼻气流、SpO2、鼾声呼吸暂停与低通气事件
❤️ EKGECG心电导联心血管与全因死亡风险预测
💪 EMGElectromyography颌/腿/肢体肌电REM 判定、PLM、体动

一句话记忆:BAS 管"睡没睡熟",RESP 管"呼吸顺不顺",EKG 管"心脏扛不扛得住",EMG 管"身体动没动"。四大模态经 channel_groups.json 统一命名、填充对齐后进入 SetTransformer,最终让 SleepFM 成为横跨睡眠分期与疾病预测的基础模型 ✅

【免费下载链接】sleepfm-clinical

项目地址: https://gitcode.com/gh_mirrors/sl/sleepfm-clinical
点击查看 免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值