The Bitbrain Open Access Sleep (BOAS) dataset — 100 人 128 夜 Micromed 临床 PSG 与干电极头带同步记录

OpenNeuro ds005555:西班牙 Bitbrain 公司发布的开放睡眠数据集——每夜同时录 Micromed Brain Quick Plus Evolution 临床多导睡眠图与 Bitbrain 前额干电极头带(AF7/AF8 + IMU + PPG),三名技师独立按 AASM 判读、≥2 人一致取共识标签,附官方深度学习模型生成的 stage_ai 标签,CC0 公共领域

来源 OpenNeuro ds005555 BIDS 结构:Micromed 临床 PSG 与 Bitbrain 干电极头带 EDF 双机同步,256 Hz,30 s epoch 的 stage_hum/stage_ai 事件标签发布时间: 2026-10-17最后更新: 2026-10-20 阅读 43
The Bitbrain Open Access Sleep (BOAS) dataset — 100 人 128 夜 Micromed 临床 PSG 与干电极头带同步记录

信息速览

数据集名称The Bitbrain Open Access Sleep (BOAS) dataset — 100 人 128 夜 Micromed 临床 PSG 与干电极头带同步记录
数据类型生理信号数据,时序数据,人工标注,原始数据
规模100 名健康志愿者(128 夜,sub-1 至 sub-128;20 人重复入组,含 2 夜 12 人、3 夜 8 人)
接入方式OpenNeuro ds005555 BIDS 结构:Micromed 临床 PSG 与 Bitbrain 干电极头带 EDF 双机同步,256 Hz,30 s epoch 的 stage_hum/stage_ai 事件标签
AI 就绪度

INFOBOX — BOAS 一屏速览

维度 内容
本质 同一夜、同一人身上两套设备同步录的睡眠数据集:临床 PSG(金标准)× 消费级干电极头带
出处 OpenNeuro ds005555,Bitbrain Technologies(西班牙萨拉戈萨)发布,2024-10-03 上线
规模 128 夜 / 100 人(sub-1…sub-128,20 人重复入组);1,414 文件;≈33.5 GiB
采样 256 Hz,PSG 参考 M1 左乳突,工频 50 Hz,整夜单文件(sub-1 为 27,459 s)
设备 A Micromed Brain Quick Plus Evolution PSG:F3/F4/C3/C4/O1/O2 + EOG + 颏 EMG + 呼吸带 + 热敏 + 鼻压 + 脉搏/血氧
设备 B Bitbrain 干电极头带:AF7/AF8 两导 EEG + 六轴 IMU + PPG
标签 3 名技师独立按 AASM v2.2 判读 → ≥2 人一致取共识(stage_hum);三人全不一致由第 4 人裁决
AI 标签 官方深度学习模型交叉验证产出(stage_ai),PSG 与头带各自独立训练
官方成绩 人机一致率 87.13%(PSG)/ 86.71%(头带);v1.0.0 旧值为 87.08% / 86.64%
编码 0 W|1 N1|2 N2|3 N3|4 REM|8 PSG 掉线(仅人工)|-2 伪迹/缺失(仅 AI)
许可 CC0 1.0——公共领域,无署名义务,可商用可再分发
主论文 Esparza-Iaizzo et al., Comput Biol Med 2026;205:111560,CC BY-4.0
库内互链 sleep-edf(73)、isruc-sleep(262)、mass(272)、shhs(282)、mros-sleep(292)、mesa-sleep(302)、nch-sleep(1013)、bidsleep-dataset(1004)、cinc-2018-sleep-arousal

BOAS(Bitbrain Open Access Sleep)解决的是一个困扰可穿戴睡眠监测行业近十年的问题:当一只头带说自己判断出「你此刻处在 N2」,我们凭什么相信它? 传统做法是拿头带结果去比另一只头带,或者拿厂商自报的准确率做宣传。BOAS 的做法更直接——在同一夜的同一个受试者头上,同时戴上临床级多导睡眠图(PSG)和消费级干电极头带,让两套设备录下同一段生理过程,然后用三名技师独立判读的 PSG 共识标签作为裁判。

只要两套设备同时开录,后续所有比较都变成同源对照:信号漂移、体位改变、觉醒次数、卧室环境噪声全部同步,唯一差异就是「采集技术」。这种设计在库内睡眠数据集里是稀缺品:sleep-edf 有 PSG 也有干电极化的 Cassette 子集,却不是同一夜双设备;mesa-sleep 有干电极 EEG 子集,但那是按设备分开记录;bidsleep-dataset 的动机最接近(Apple Watch + Dreem2 对照),但它的参考 EEG 是 Dreem2 头带而非临床 PSG。

导语读法三则:

  1. 只想知道能拿它干什么:看 §1 十问十答与 §5 任务卡,三分钟决定要不要下载。
  2. 准备做可穿戴验证:直接跳 §4 与 §6.3——头带标签「-2」占比这件事会改变你的实验设计。
  3. 关心它与库内其他睡眠库的区别:看 §9 家族图谱与 §10.4 消歧表,避免拿错数据。

§0 导读:这个数据集解决什么问题

0.1 一句话定位

BOAS 是一份同夜双设备睡眠数据:128 个夜晚,每一夜都同时有一份 Micromed 临床多导睡眠图(polysomnography, PSG)和一份 Bitbrain 前额干电极头带的脑电记录(headband EEG)。PSG 侧带有三名技师独立判读后取共识的 AASM 睡眠分期标签,头带侧带有官方模型自动生成的分期标签。它是「可穿戴 EEG 到底能不能替代临床 PSG」这一问题的公开对照底本。

0.2 它要回答的三个问题

问题 BOAS 给出的证据形态
头带的自动分期离临床金标准有多远? 同一夜配对信号 + 官方交叉验证一致率(87.13% / 86.71%)
同一个算法用 PSG 训练、用头带测试,性能如何衰减? 两套设备同一份人工共识标签框架下的可迁移性比较
干电极在真实居家的整夜长程中稳定性如何? 头带原始信号 + 逐 epoch 的 -2 伪迹/缺失标记,可量化「有效时长」

0.3 它不是的东西(先排除三种误解)

  1. 不是睡眠障碍队列。受试者从普通人群中招募,明确排除严重神经/精神疾病史、近期严重健康事件、孕期哺乳期、精神类药物使用者。它不是另一个 SHHS 或 MrOS——那里的人群带心血管与呼吸事件标注,可用于 OSA 患病率研究;BOAS 的受试者按健康志愿者处理。
  2. 不是 128 个独立个体。128 是夜数,唯一受试者 ID(pid)只有 100 个。按 sub 编号随机切分会把同一个人的两夜分到训练与测试两侧,产生泄漏。
  3. 不是挑战赛数据集。没有排行榜、没有隐藏测试集、没有官方评分脚本。想复现「官方一致率」必须自己实现交叉验证协议,且论文与 README 的协议描述粒度有限。

0.4 谁该认真看这份条目

  • 做单通道/双通道睡眠分期的算法团队:这是目前最干净的「临床 vs 干电极」配对公开集之一。
  • 做可穿戴产品验证的工程团队:可以作为内部评测的第三方公开底本,避免只用自采数据讲故事。
  • 做跨数据集泛化研究的研究者:BOAS 的 256 Hz/EDF/BIDS 与 PhysioNet 系(200 Hz/WFDB)不同源,天然构成一个域偏移测试点。
  • 写系统综述/数据资源综述的临床研究者:本条目 §9 的家族图谱可直接作为睡眠公开数据集分类框架的草稿。

0.5 阅读路径(按角色分流)

你是算法工程师          → §2 规格 → §3 标注 → §5 任务 → §7 评估 → §10 坑点 → 附录 C/D
你是临床睡眠医生        → §1 速览 → §4 数据质量 → §9 家族图谱 → §10.4 消歧 → 附录 A
你是数据工程/平台       → §6 获取 → 附录 B 目录树 → 附录 F 下载骨架 → §10 坑点
你是 PI,评估是否可用   → §0 → §8 生态 → §11 总结 → 附录 J 一页速查卡

§1 数据集速览:十问十答

Q1:它叫什么?有没有别名?
官方全称 The Bitbrain Open Access Sleep (BOAS) dataset;OpenNeuro 数据集名为 Bitbrain Open Access Sleep Dataset;数据集编号 ds005555。中文语境常写作「Bitbrain 开放睡眠数据集」。库内 slug 为 boas-bitbrain。

Q2:谁发布的、什么时候?
Bitbrain Technologies(西班牙萨拉戈萨)神经科学部发布,8 位署名作者;OpenNeuro 记录创建于 2024-10-03,首个快照 v1.0.0 于 2024-10-14 发布,当前最新快照 v1.1.3(2026-08-31)。

Q3:有多少数据?
128 夜、100 名受试者;1,414 个文件;压缩前总量 35,921,406,441 字节(约 33.5 GiB)。每夜两份 EDF(PSG + 头带)加若干侧车文件。

Q4:信号有哪些?
PSG 侧最多 11 类通道:六导脑电(F3/F4/C3/C4/O1/O2)、眼电、颏肌电、胸腹呼吸带、热敏气流、鼻压气流、脉搏、心跳、血氧。头带侧:两导前额脑电(AF7/AF8 附近)、六通道 IMU(加速度 3 + 陀螺 3)、一路 PPG。

Q5:采样率多少?
256 Hz,全部通道统一;PSG 参考电极为 M1(左乳突);工频 50 Hz(欧洲电网)。

Q6:标签是怎么来的?
三名睡眠技师互相独立按 AASM v2.2 判读 PSG,每个 30 s epoch 取至少两人一致的标签为共识(stage_hum);三人全不一致时由第四名判读者裁决。

Q7:有没有 AI 标签?
有。Bitbrain 深度学习模型用交叉验证分别训练,产出 PSG 版与头带版 stage_ai。头带信号只有 stage_ai,没有人工共识标签。

Q8:官方成绩如何?
README 与 OpenNeuro 页面:PSG 人机一致率 87.13%,头带 86.71%。v1.0.0 早期 README 写的是 87.08% / 86.64%,两套数字并存(见 §10 坑点 4)。

Q9:能商用吗?
可以。许可为 CC0 1.0 公共领域奉献,无署名义务、无用途限制。这也是它相对 PhysioNet 系(多为 ODC-By 或受限许可)在商业场景下的显著优势。

Q10:怎么下载?
三条路:网页逐文件下载、openneuro-cli(推荐整库)、DataLad(GitHub OpenNeuroDatasets/ds005555 + datalad get)。EDF 为 annex 对象,直接 clone GitHub 仓库只会得到符号链接,必须 get 才拿到真实数据。

1.1 十问十答之外的三个数字

数字 含义 为什么重要
915 sub-1 的整夜 epoch 数(30 s × 915 ≈ 7.6 h) 单夜有效时长的量级参考
677 / 915 sub-1 头带 stage_ai = -2 的 epoch 数 头带有效分期仅约四分之一
127 participants.tsv 中有年龄/BMI 记录的行数 128 行里 1 行(sub-128)年龄与 BMI 为 n/a

§2 数据构成与规格

2.1 目录结构与文件命名

数据集遵循 BIDS(Brain Imaging Data Structure)的 EEG 扩展。每个受试者一个目录,每个 acq(采集设备)一组文件:

ds005555/
├── dataset_description.json
├── participants.tsv                 # participant_id / age / sex / bmi / pid
├── participants.json
├── README
├── sub-1/
│   ├── sub-1_scans.tsv
│   └── eeg/
│       ├── sub-1_task-Sleep_acq-psg_channels.tsv
│       ├── sub-1_task-Sleep_acq-psg_eeg.edf
│       ├── sub-1_task-Sleep_acq-psg_eeg.json
│       ├── sub-1_task-Sleep_acq-psg_events.json
│       ├── sub-1_task-Sleep_acq-psg_events.tsv
│       ├── sub-1_task-Sleep_acq-headband_channels.tsv
│       ├── sub-1_task-Sleep_acq-headband_eeg.edf
│       ├── sub-1_task-Sleep_acq-headband_eeg.json
│       ├── sub-1_task-Sleep_acq-headband_events.json
│       └── sub-1_task-Sleep_acq-headband_events.tsv
└── sub-2/ ... sub-128/            # 结构同上

命名里三个实体值得记住:task-Sleep 是唯一任务名;acq-psg / acq-headband 区分设备;文件名尾缀 _eeg.edf 只是 BIDS EEG 扩展的固定后缀——PSG 的 EOG、EMG、呼吸信号也全在同一份 _eeg.edf 里,这一点常让第一次用 BIDS 处理多导睡眠图的人踩坑。

2.2 participants.tsv 逐字段说明

字段 含义 实测情况
participant_id sub-1 … sub-128 128 行
age 年龄(岁) 18–82,均值 42.0,SD 19.0;1 行为 n/a
sex 性别 F 76 / M 52
bmi 体质指数 18.3–33.3,均值 23.9,SD 3.2;1 行为 n/a
pid 唯一受试者编号 仅 100 个唯一值

pid 是这份数据集最容易被忽略的一列。sub-83、sub-84、sub-87、sub-88、sub-96、sub-97、sub-98、sub-99 各有 3 夜;另有 12 个 pid 各有 2 夜。做交叉验证时,划分单位必须是 pid 而不是 sub。

2.3 通道组与缺省设计

README 用「通道组」描述信号,而不是承诺固定通道表:

通道组 通道名 说明
PSG_EEG PSG_F3, PSG_F4, PSG_C3, PSG_C4, PSG_O1, PSG_O2 六导临床脑电
PSG_EOG PSG_EOG 或 PSG_EOGL + PSG_EOGR 单通道时为双极导出;双通道时各对左乳突
PSG_EMG PSG_EMG 颏下两电极双极导出的单通道
PSG_BELTS PSG_ABD, PSG_THOR 腹部与胸部呼吸带
PSG_THER PSG_THER 热敏电阻气流
PSG_CAN PSG_CAN 鼻压气流
PSG_PPG PSG_PULSE, PSG_BEAT, PSG_SPO2 脉搏、心搏、血氧饱和度
HB_EEG HB_1, HB_2 头带干电极,约位于 AF7 / AF8
HB_IMU HB_IMU_1 … HB_IMU_6 加速度三轴 + 陀螺三轴
HB_PULSE HB_PULSE 头带 PPG 脉搏

关键句式(README 原文语义):Not all recordings contain data from all available sensors——不是每次记录都佩戴了全部传感器。因此 channels.tsv 必须逐夜读取,不能把 sub-1 的通道表当作全局模板。

2.4 侧车 JSON 里的一致性小问题

以 sub-1 为例,PSG 侧车 _eeg.json 记录:

{
  "EEGChannelCount": 11,
  "EEGReference": "M1 (left mastoid)",
  "InstitutionName": "Bitbrain Technologies",
  "Manufacturer": "Micromed",
  "ManufacturersModelName": "SD plus",
  "PowerLineFrequency": 50,
  "RecordingDuration": 27459,
  "SamplingFrequency": 256,
  "TaskName": "Sleep"
}

三处需要留意:

  1. EEGChannelCount: 11 把 EOG/EMG/呼吸/热敏也都算成了「EEG」通道——这是把整份 PSG 塞进 BIDS EEG 模板的必然结果,不代表真有 11 导脑电。
  2. ManufacturersModelName 写的是 “SD plus”,而 README 写 Brain Quick Plus Evolution。两者是同一厂商(Micromed)不同层级的型号/软件命名,条目正文以 README 的完整型号为主,侧车字段并存(见 §10 坑点 5)。
  3. SoftwareFilters: "n/a"——数据未做软件滤波,下载后需自行处理 50 Hz 工频与慢漂移。

2.5 事件表结构

PSG 事件表 7 列,头带事件表 6 列:

列 PSG 头带 说明
onset ✓ ✓ epoch 起始秒
duration ✓ ✓ 恒为 30
begsample ✓ ✓ 起始样点
endsample ✓ ✓ 结束样点
offset ✓ ✓ 恒为 0(FieldTrip BIDS 导出残留)
stage_hum ✓ ✗ 三人共识分期
stage_ai ✓ ✓ 模型自动分期

offset 字段全为 0 且带注释说明是 FieldTrip 导出产物,属无害冗余,但做严格 BIDS 校验时会触发提示(OpenNeuro 页面显示该数据集有数千条 BIDS 警告)。

2.6 规模速查表

项 值 来源
夜数 128 README / summary.subjects
唯一受试者 100 participants.tsv 的 pid 去重
文件数 1,414 OpenNeuro 快照 summary
总量 35,921,406,441 B OpenNeuro 快照 summary
采样率 256 Hz 侧车 json
epoch 长度 30 s events 侧车 json
单夜时长示例 27,459 s sub-1 PSG 侧车
单夜 epoch 数示例 915 sub-1 PSG 事件表

§3 标注体系:三技师共识如何产出

3.1 标注流程

        PSG 整夜记录(256 Hz,EDF)
                  │
        ┌─────────┴─────────┐
        │                   │
   技师 1              技师 2              技师 3
   (独立判读)        (独立判读)        (独立判读)
        └─────────┬─────────┘
                  │
        逐 epoch 比对(30 s 粒度)
                  │
     ┌────────────┴────────────┐
     │                          │
 ≥2 人一致 → 共识标签        三人全不同 → 提交技师 4 裁决
     │                          │
     └────────────┬─────────────┘
                  │
          stage_hum(PSG 事件表)
                  │
      ┌───────────┴────────────┐
      │                        │
 训练/推理模型(PSG)      直接沿用为头带的「目标」参考
      │                        │
   stage_ai(PSG 事件表)   头带模型训练 → stage_ai(头带事件表)

四个角色分工必须分清:

  • 技师 1–3:独立判读,不知道彼此结果,这是保共识有效性的前提。
  • 技师 4:只在「三人全不一致」时介入,属于仲裁者而非第四独立判读。
  • 官方模型:用共识标签训练,其输出是 stage_ai,是模型结果而非金标准。

3.2 为什么用共识而不是单人或多数表决

单人判读的问题是有个体偏好:有人偏保守(多判 N1),有人偏激进(早判 REM)。三人共识 + 仲裁的结构把这类偏好压到边界 epoch 上,代价是标签不再代表任何单一判读者的真实序列。

AASM 睡眠判读的技师间一致率本身就不高。README 引用 Danker-Hopfe 等(2009)与 Rosenberg & Van Hout(2013),给出约 82% 的期望一致率(v1.0.0 早期 README 写 85%,见 §10 坑点 6)。这意味着:在人类之间就存在十几个百分点的分歧,任何模型的 87% 一致率高攀到「超过人类」的解读都需要谨慎。

3.3 编码字典

值 含义 出现在哪
0 Wake 清醒 两侧
1 N1 非快速眼动 1 期 两侧
2 N2 非快速眼动 2 期 两侧
3 N3 非快速眼动 3 期(慢波睡眠) 两侧
4 REM 快速眼动 两侧
8 PSG 掉线(如上厕所断开) 仅 stage_hum
-2 伪迹与缺失数据 仅 stage_ai

8 与 -2 的设计是这份数据集最容易被误用的地方:它们都表示「这个 epoch 不该参与训练」,但语义不同——8 是脑电记录本身断了,-2 是信号存在但被模型判断为不可信(运动伪迹、电极接触不良等)。两者都必须 mask 掉,不能当作第七类。

3.4 sub-1 实例解剖:人工标签分布

以 sub-1 的 PSG 事件表(915 epoch)为例:

类别 epoch 数 占比
W (0) 200 21.9%
N1 (1) 57 6.2%
N2 (2) 398 43.5%
N3 (3) 172 18.8%
REM (4) 87 9.5%
8(掉线) 1 0.1%

同一夜 stage_ai(PSG 侧)比对:

类别 人工 AI 差异方向
W 200 251 AI 多判 51
N1 57 39 AI 少判 18
N2 398 368 AI 少判 30
N3 172 160 AI 少判 12
REM 87 97 AI 多判 10

这一夜体现出一个典型模式:AI 把清醒判多了、把 N1 判少了。N1 是整夜最难的一类——它没有纺锤波、没有慢波、眼动又比 REM 弱,仅凭脑电很难与清醒低电压混合频率区分。这与 MDPI Sensors 2025 那篇基于 BOAS 的单通道研究报告的结论一致:Wake/N2/N3 各类指标约 80%,REM 约 70%,N1 准确率跌到 37%。

3.5 头带侧的标签现实

以 sub-1 的头带事件表(同样 915 epoch)为例,stage_ai 分布:

类别 epoch 数 占比
-2(伪迹/缺失) 677 74.0%
W 79 8.6%
N1 1 0.1%
N2 96 10.5%
N3 62 6.8%
REM 0 0%

这不是数据损坏,而是干电极头带在整夜佩戴下的真实表现:电极接触阻抗随翻身、出汗、滑移变化,大量 epoch 被判为不可用。如果直接拿全部 915 epoch 计算头带与 PSG 的一致率,结果会被 74% 的 -2 稀释到毫无意义。正确做法是先按 stage_ai != -2 取出有效 epoch,再在有效子集上与 stage_hum 对齐比较,并同时报告「有效 epoch 覆盖率」这一指标。

3.6 标注粒度的四个层级

层级 含义 BOAS 是否提供
原始判读 每位技师的独立序列 ✗(未发布)
共识 三人 ≥2 一致 ✓ stage_hum
仲裁 三人全分歧时的第四人裁决 ✓(并入 stage_hum,无独立字段)
模型 官方模型输出 ✓ stage_ai

没有发布每位技师的独立判读序列,这意味着无法直接计算「本数据集内部的技师间一致性」——只能引用 README 给出的文献区间(82%/85%)。想做「标签不确定性建模」的研究者需要自己重新判读一部分 epoch 或换用带多判读标签的数据集。

§4 数据质量与已知偏差

4.1 四类质量风险

风险 具体表现 影响
通道不齐 各夜 channels.tsv 不同 固定通道集的脚本会崩
头带缺失 -2 比例高(sub-1 为 74%) 有效样本远少于 128×915
掉线 stage_hum = 8 需 mask,且集中出现意味夜间中断
未滤波 SoftwareFilters: n/a 直接计算频带功率会被 50 Hz 严重污染

4.2 人群偏差

  • 年龄跨度大(18–82,SD 19):这是优点也是风险。优点是可研究年龄对睡眠结构的影响;风险是按年龄分布切分会造成训练/测试分布漂移。
  • 性别不均衡(F 76 / M 52):女性占比近六成,不影响分期标签本身,但影响任何以性别为协变量的分析。
  • BMI 偏高者少:均值 23.9、最大 33.3,没有 BMI > 35 的样本,不能用于肥胖相关睡眠呼吸障碍的建模。
  • 健康筛选:排除严重神经/精神疾病、近期严重健康事件、孕期、精神类药物使用者。这意味着数据里不会有严重睡眠障碍的极端形态(如重度 OSA 的反复觉醒、发作性睡病的快速 REM 入侵)。

4.3 设备偏差

偏差 PSG 侧 头带侧
电极类型 湿电极(导电膏) 干电极
电极位置 标准 10-20(F3/C3/O1…) 前额 AF7/AF8
参考 左乳突 M1 厂商默认(侧车未明确记录)
佩戴 技师操作 受试者自戴
脱落风险 低 高(夜间滑移)
记录条件 实验室/临床 居家(自施测)

前额电极与中央/枕区电极看到的脑电不同:慢波在额区更突出,α 节律在枕区更突出。头带只有前额两导,在判读 W(α 节律为主)与 REM(需眼电)时信息天然不足。这是设备位置决定的物理限制,不是算法能弥补的。

4.4 时间偏差

  • 数据集创建于 2024-10,最新快照 2026-08。期间版本变化包含文件数从 258(v1.1.0)回到 1,414(v1.1.3)的波动,说明维护在持续进行。
  • 跨版本引用必须锁定 DOI:10.18112/openneuro.ds005555.v1.0.0 与 …v1.1.3 是两个不同的可引用对象。

4.5 质量自检清单(拿到数据后先跑)

  1. participants.tsv 的 pid 去重计数是否为 100。
  2. 每个 sub 目录是否恰好两份 EDF、四份侧车 TSV/JSON。
  3. 每夜 channels.tsv 列出哪些通道组,与后续脚本期望是否一致。
  4. 每夜 PSG 事件表的 stage_hum 中 8 占比;头带事件表 stage_ai 中 -2 占比。
  5. PSG 与头带事件表的行数是否相同(同整夜应为相同 epoch 数)。
  6. EDF 文件头里的实际采样率是否 256 Hz、通道数是否与 channels.tsv 一致。

§5 任务定义与使用场景

5.1 五个标准任务

T1 五分类整夜分期(PSG → PSG)
输入 PSG 单导或多导信号,输出每 30 s 一个 W/N1/N2/N3/REM。这是最基础的任务,与 sleep-edf、ISRUC 的做法可直接对照。

T2 头带单/双导分期(headband → headband)
只用 HB_1/HB_2(必要时加 IMU、PPG),在头带有效 epoch 上训练与评估。这是 BOAS 最具特色的任务。

T3 跨设备迁移(PSG 训练 → 头带测试)
用 PSG 数据训练、头带数据测试,衡量域偏移。注意两者电极位置与阻抗特性都不同,这个任务的分数天然低于 T1/T2。

T4 设备验证(头带 → PSG 金标准)
把 T2 的预测结果与 stage_hum 对齐,在有效 epoch 子集上计算一致率、Cohen’s kappa 与逐类 F1。这是产品评测视角的任务。

T5 伪迹判据建模(-2 的成因分析)
把 stage_ai = -2 当作弱标签,研究什么样的信号形态会被判为不可用。这是 BOAS 独有的任务,因为只有它同时给出「信号 + 逐 epoch 可用性判断」。

5.2 任务难度排序(经验判断)

易 ─────────────────────────────────────────────── 难
T1 五分类(PSG)   <   T2 头带分期   <   T4 设备验证   <   T5 伪迹建模   <   T3 跨设备迁移
      │                  │                │                │                 │
   标注充足            有效样本少        需对齐两表        弱标签           域差异最大

5.3 使用场景对照

场景 推荐任务 需要额外做的事
训练一个公开可比的睡眠分期基线 T1 按 pid 分组交叉验证;报告宏平均 F1 与 kappa
验证一款头带的算法 T4 只用 stage_ai != -2 的 epoch;同时报告覆盖率
研究干电极长程稳定性 T5 把 -2 的时间分布画出来,找滑移规律
做域自适应研究 T3 同时报告 oracle(在头带上训练)与零样本迁移两个基线
做论文数据集章节 全部 引用时锁 DOI 版本,注明 100 人而非 128 人

§6 获取与许可

6.1 许可条款

许可证为 CC0 1.0 Universal(公共领域奉献)。三个快照的 description.License 字段均为 CC0。这意味着:

  • 可以商用、可以再分发、可以修改、可以不做署名;
  • 无「仅学术用途」限制,这在睡眠数据里相当少见——SHHS、MrOS、MESA 走 NSRR 申请制,ISRUC 需要填写申请,MASS 需向作者请求;
  • 仍建议标注出处与 DOI,便于他人复现。

6.2 三条获取路径

路径 A:OpenNeuro 网页
打开 https://openneuro.org/datasets/ds005555/versions/1.1.3,按 sub 目录逐一下载。适合只要几夜做实验的小规模需求。

路径 B:openneuro-cli(推荐)

# 安装
pip install openneuro-py

# 整库下载到本地目录
openneuro download --dataset ds005555 ./boas

# 只取部分受试者
openneuro download --dataset ds005555 ./boas --include sub-1 sub-2 sub-3

路径 C:DataLad

datalad install https://github.com/OpenNeuroDatasets/ds005555.git
cd ds005555
# 此时只有元数据,EDF 是 annex 符号链接
datalad get sub-1/eeg/*.edf

第 C 条路最容易踩坑:git clone 得到的目录里 EDF 只有 200 字节左右的符号链接,真实内容不在此。

6.3 版本链与 DOI

快照 时间 文件数 体积(字节) DOI
v1.0.0 2024-10-14 1,414 35,921,406,226 10.18112/openneuro.ds005555.v1.0.0
v1.1.0 2025-02-13 258 35,913,660,946 10.18112/openneuro.ds005555.v1.1.0
v1.1.3 2026-08-31 1,414 35,921,406,441 10.18112/openneuro.ds005555.v1.1.3

v1.1.0 的文件数骤降到 258 而体积几乎不变,说明该版本是元数据层的小改(annex 对象未变),不代表数据被删减。引用时建议锁 v1.1.3。

6.4 主论文

主论文为 Esparza-Iaizzo M., Sierra-Torralba M., Klinzing J.G., Minguez J., Montesano L., López-Larraz E., Automatic sleep scoring for real-time monitoring and stimulation in individuals with and without sleep apnea, Computers in Biology and Medicine 2026;205:111560,DOI 10.1016/j.compbiomed.2026.111560,CC BY-4.0 开放获取。

注意标题里的 “individuals with and without sleep apnea”:论文的分析人群包含 OSA 患者,但 BOAS 数据集本身是健康志愿者。两者不是同一人群,引用时不能把论文摘要里的 OSA 结论套到 BOAS 数据上。

§7 评估协议与基准

7.1 官方评估口径(README 层)

官方给出的数字只有两个:PSG 87.13%、头带 86.71% 的人机一致率。这里必须把三个词拆开:

词 指什么 常见误读
一致率(match) stage_ai 与 stage_hum 逐 epoch 相同的比例 被读成「准确率」,但在类别不均衡时两者不等价
人 stage_hum,三人共识 被读成「临床金标准绝对真值」
机 官方模型在交叉验证折外的预测 被读成「在独立测试集上的性能」

README 只写「cross-validation procedure」,没有给出折数、分组方式、是否按 pid 分组的细节。这是复现时最大的不确定项。

7.2 为什么「一致率」在类别不均衡下会误导

N2 在多数整夜里占四成以上。一个把所有 epoch 都判成 N2 的模型,在 sub-1 上也能拿到约 43% 的一致率;如果某夜 N2 占比更高,这个数字还会往上走。因此只报一致率不足以说明模型好坏,必须同时给出:

  • 逐类精确率/召回率/F1(尤其 N1 与 REM);
  • Cohen’s kappa 或加权 kappa(对类别分布做校正);
  • 混淆矩阵(看清错误流向哪个类);
  • 有效 epoch 覆盖率(头带侧尤其关键)。

7.3 建议评估协议模板

协议:BOAS 五分类睡眠分期评估

1. 数据切分
   - 按 pid 分组做 5 折交叉验证(GroupKFold(groups=pid))
   - 128 夜 → 100 组,确保同一人的多夜不跨折

2. 标签清洗
   - stage_hum:剔除 8(掉线)
   - stage_ai(评估端):剔除 -2(伪迹/缺失)
   - 头带侧:仅保留 stage_ai != -2 的 epoch 参与指标计算

3. 预处理
   - 50 Hz 陷波 + 0.3–35 Hz 带通(睡眠分期常用范围)
   - 按 30 s epoch 切分,不做跨 epoch 混合

4. 指标
   - 主指标:宏平均 F1(五类)
   - 辅指标:Cohen's kappa、逐类召回率、混淆矩阵
   - 报告口径:均值 ± 标准差(跨折)
   - 同时报告有效 epoch 覆盖率

5. 基线
   - 多数类基线(全判 N2)
   - 单特征阈值基线(以 delta 功率比判 N3)
   - 若与他人比较,须注明对方是否使用同一 pid 分组

7.4 第三方已发表的 BOAS 使用结果

来源 年份 使用方式 关键结果
Esparza-Iaizzo et al., Comput Biol Med 2026 官方模型,PSG 与头带各自交叉验证 87.13% / 86.71%
MDPI Sensors 25(19):6021 2025 仅用 F4–F3 单通道,0.2–44 Hz 带通 + 50 Hz 陷波,5 s 窗 + mRMR 特征选择 W/N2/N3 约 80%,REM 约 70%,N1 准确率降至 37%
MDPI Applied Sciences 16(16):8164 2026 选取 31 名受试者(要求 EEG+EOG+PPG 齐全且质量达标),层次多模态 多模态融合优于单模

这三组结果放在一起能看出一个规律:前端越"窄"(单通道、干电极、无眼电),N1 与 REM 的损失越集中。Sensors 那篇的 37% N1 准确率不是算法失败,而是前额单通道信息量不足的直接体现。

7.5 与其他数据集基准不可直接横向比较

数据集 采样率 通道 epoch 评分口径
BOAS 256 Hz 6 导 EEG + 多生理 30 s 一致率(自报)
sleep-edf 100 Hz Fpz-Cz / Pz-Oz 30 s 常见为 accuracy / MF1
ISRUC-Sleep 200 Hz 多导 30 s 常见为 kappa / MF1
SHHS 125 Hz C4-A1 / C3-A2 30 s 常见为 MF1 / accuracy
MASS 多变 多变 30 s 常见为 kappa

采样率、参考电极、通道数、标签来源(单人 vs 共识)全都不同。把 BOAS 的 87% 与 sleep-edf 上的 85% 并排写进表格,是这类综述最常见的错误。

7.6 评测时的四个诚实性要求

  1. 报 pid 分组:若用了随机按 sub 切分,必须在方法里明说,因为这会显著抬高分数。
  2. 报 -2 处理方式:是剔除、是当独立类、还是插值填充,三种处理得到的数字不可比。
  3. 报预处理:是否陷波、带宽多少、是否做了 epoch 级归一化。
  4. 报版本:v1.0.0 与 v1.1.3 的引用不同,且早期文献引用的是 v1.0.0 的数字(87.08%/86.64%)。

§8 生态与影响

8.1 发布方的位置

Bitbrain 是一家西班牙神经科技公司,主业是干电极 EEG 硬件(头带、帽式)与神经科学软件。BOAS 是它对「开放数据」这一策略的一次投入:把自家硬件的原始数据与竞品(Micromed 临床 PSG)的同步记录一起公开,用 CC0 释放。

这个选择有商业逻辑:公开对照数据能降低客户验证成本,也能把自家算法的一致性数字放在阳光下。对研究者而言,好处是不用签数据使用协议;风险是数据只覆盖厂商自家硬件形态。

8.2 学术引用链

时间 文献 角色
2015 Berry et al., AASM Manual v2.2 判读规则依据
2009 Danker-Hopfe et al., J Sleep Res 18:74-84 技师间一致率参考
2013 Rosenberg & Van Hout, JCSM 9:81-87 AASM 一致性项目参考
2026 Esparza-Iaizzo et al., Comput Biol Med 205:111560 数据集主论文
2025 MDPI Sensors 25(19):6021 第三方使用(特征工程路线)
2026 MDPI Appl Sci 16(16):8164 第三方使用(多模态路线)

8.3 与「可穿戴验证」这一研究脉络的关系

可穿戴睡眠验证研究长期受制于一个结构性难题:没有公开的同步金标准。厂商内部有配对数据但不公开;公开数据集要么只有 PSG(无头带),要么只有头带(无 PSG)。BOAS 把两者放在同一夜里,直接补上了这个缺口。

同类尝试还有:

  • bidsleep-dataset:Apple Watch 心率/加速度 + Dreem2 EEG,参考设备仍是消费级头带;
  • mesa-sleep:居家 PSG + 部分干电极 EEG 子集,但设备与记录方式不同;
  • PAP/PSG 配对研究(多为单中心小样本,未公开原始数据)。

BOAS 的独特性在于参考端是临床级 Micromed PSG,这一点目前没有等量替代品。

8.4 下游可能的用法

  1. 头带算法的公开基线:任何声称「干电极分期准确率 X%」的产品,都可以被要求在同一份 BOAS 上复现。
  2. 干电极信号质量研究:-2 标记提供了罕见的逐 epoch 可用性标注。
  3. 实时闭环刺激研究:主论文标题里的 “real-time monitoring and stimulation” 指向睡眠中的实时干预(如慢波增强),BOAS 的低延迟单文件结构适合此类实验的离线预演。
  4. 跨设备域自适应:PSG 与头带的配对为无监督域适应提供了天然的源域/目标域。

8.5 局限与影响边界

  • 单一厂商硬件,无法代表整个干电极市场;
  • 健康志愿者人群,无法代表临床睡眠障碍人群;
  • 西班牙单中心,文化与作息外推需谨慎;
  • 128 夜规模在深度学习时代偏小,更适合验证而非从零训练大模型。

§9 与库内条目的关系

9.1 睡眠数据集家族图谱

                     临床 PSG(多导、湿电极、技师判读)
                                   │
        ┌──────────────┬───────────┼────────────┬──────────────┐
        │              │           │            │              │
   sleep-edf(73)   ISRUC(262)   MASS(272)    SHHS(282)     MrOS(292)
   单通道为主      临床睡眠室    多中心汇总   大型队列      老年男性队列
        │              │           │            │              │
        └──────────────┴───────────┴────────────┴──────────────┘
                                   │
                          ┌────────┴────────┐
                          │                 │
                    MESA(302)          NCH(1013)
                  居家+干电子集        儿科 PSG+EHR
                          │
                    ★ BOAS(本条目)
              同夜 PSG × 干电极头带同步
                          │
              ┌───────────┴────────────┐
              │                        │
     bidsleep-dataset(1004)      cinc-2018-sleep-arousal
     Apple Watch + Dreem2        逐样本唤醒检测(非分期)

9.2 逐条关系说明

条目 rid 与本条目的关系 关键差异
sleep-edf(73) 73 同域最常被引用的分期基准 只有 PSG 与「干电极化」的 Cassette 子集,非同夜双设备;100 Hz
isruc-sleep(262) 262 临床 PSG 分期对照 睡眠室记录、单人多夜,无消费级头带
mass(272) 272 多中心整夜 PSG 汇总 通道与采样率跨中心不一致,不适合做设备对照
shhs(282) 282 大型居家 PSG 队列 心血管终点导向,人群非健康筛选
mros-sleep(292) 292 老年男性居家 PSG 人群极窄(老年男性),不可外推
mesa-sleep(302) 302 含干电极 EEG 子集 干电极与 PSG 分开记录,不是同步
nch-sleep(1013) 1013 儿科 PSG + EHR 儿童人群,标签与成人不可直接比较
capsleep(1072) 1072 CAP 周期标注 关注微结构(A 相/B 相),不是五分类分期
bidsleep-dataset(1004) 1004 动机最接近(消费设备 vs 参考 EEG) 参考端是 Dreem2 头带,非临床 PSG
hmc-sleep-staging(654) 654 分期标签数据集 规模与设备不同,无配对头带
cinc-2018-sleep(493) 493 同域挑战赛 逐样本唤醒检测,任务不同
cinc-2018-sleep-arousal 同轮交付 同域、同一挑战赛的另一编目角度 事件检测(arousal),非整夜分期
openneuro(100) 100 托管平台条目 平台层,非数据集

9.3 检索路径建议

  • 目标「睡眠分期 + 可穿戴」→ 本条 + sleep-edf + bidsleep-dataset;
  • 目标「临床 PSG 大样本」→ SHHS + MASS + MrOS + ISRUC;
  • 目标「睡眠微结构事件」→ cinc-2018-sleep-arousal + capsleep;
  • 目标「儿科睡眠」→ nch-sleep。

9.4 与 openneuro 平台条目的关系

库内的 openneuro(rid=100)是平台条目,描述的是 OpenNeuro 这一托管服务本身。BOAS 是该平台上 1,000 多个数据集中的一个具体实例。两者的互链应写成「平台 → 实例」而非「同域数据集」。

§10 避坑清单:十个已踩过的坑

坑点 1:把 128 当成 128 个人

症状:按 sub-1..sub-128 随机划分训练/测试,报告一个漂亮的高分。
原因:participants.tsv 里 20 个 pid 有 2–3 夜,随机划分会把同一个人的两夜分到两侧。
对策:GroupKFold(groups=participants['pid']);论文里写明分组单位是 pid,不是 sub。

坑点 2:把头带的 -2 当成第七类

症状:混淆矩阵出现 7 个类,-2 类的 F1 奇高。
原因:-2 是「伪迹或缺失」标记,不是睡眠阶段。sub-1 头带里它占 74%。
对策:训练与评估前一律 mask 掉;报告指标时同时给出「有效 epoch 覆盖率」。

坑点 3:把头带的 stage_ai 当成人工标签

症状:拿头带 stage_ai 与 PSG stage_hum 算「人机一致率」,然后说这是「头带人工判读的准确性」。
原因:头带没有人工共识标签,只有 stage_ai。v1.0.0 早期 README 有一句「共识标签沿用到头带」,容易让人误以为头带有人工标签。
对策:头带侧任何「标签」都是模型输出;比较时必须说明是「模型 vs 模型」还是「模型 vs 人」。

坑点 4:官方一致率的两套数字混用

症状:文中写 87.13%,参考文献里却出现 87.08%,审稿人质疑。
原因:现行 README/OpenNeuro 页面是 87.13% / 86.71%;v1.0.0 早期 README 及若干镜像站是 87.08% / 86.64%。第三方论文(MDPI 两篇)引的是后者。
对策:以引用版本为准并注明;若同时提及,写成「87.13%(v1.0.0 为 87.08%)」。

坑点 5:设备型号两个名字

症状:写论文时发现 README 说「Brain Quick Plus Evolution」,侧车 json 说「SD plus」,不知该写哪个。
原因:前者是厂商产品系列名,后者是软件/固件层面的型号字符串,两者指同一套 Micromed 采集系统。
对策:正文写完整产品名,脚注说明侧车字段;不要因此认为是不同设备。

坑点 6:技师间一致率 82% 还是 85%

症状:引言里写「人类判读一致率约 85%」,与现行 README 的 82% 不符。
原因:v1.0.0 写 85%,现行写 82%,引用的文献相同(Danker-Hopfe 2009;Rosenberg & Van Hout 2013)。
对策:以现行 82% 为主,注明版本差异;引用文献时直接给文献本身的数字。

坑点 7:直接 git clone 得到空数据

症状:git clone https://github.com/OpenNeuroDatasets/ds005555.git 后 EDF 只有 200 来字节。
原因:EDF 是 DataLad annex 对象,仓库里只存符号链接。
对策:用 datalad install + datalad get,或直接用 openneuro-cli download。

坑点 8:假设通道表固定

症状:脚本按 sub-1 的 11 通道解析,跑到 sub-50 报错。
原因:README 明确「不是每次记录都含全部传感器」,各夜 channels.tsv 不同。
对策:先读 channels.tsv,按通道名取列,不按列序号。

坑点 9:把 PSG 的 EOG/EMG 当成 EEG

症状:做脑电预处理时把 PSG_EOG、PSG_EMG 一并送进带通滤波与 ICA。
原因:这些通道在 channels.tsv 里的 type 列被标成 EEG(BIDS EEG 模板的副作用),EEGChannelCount: 11 也强化了这个误解。
对策:按通道名(PSG_ 前缀 + 语义后缀)而非 type 列区分信号类别。

坑点 10:忽略 epoch 数量一致性的核对

症状:对齐 PSG 与头带标签时出现错位,越到后半夜偏差越大。
原因:两表理论上行数相同(同一整夜同一 epoch 网格),但若某侧记录提前开始/结束导致行数不同,按下标合并会整体错位。
对策:合并前先断言两表 onset 序列完全相同,或在 onset 上做 merge 而非按下标拼接。

§11 总结

11.1 三句话总结

  1. BOAS 是同夜双设备睡眠数据的少数公开样本:128 夜、100 人,临床 Micromed PSG 与 Bitbrain 干电极头带同步,CC0 释放。
  2. 它的核心价值在对照设计而不在规模:同源同步让「设备差异」成为唯一变量,为可穿戴睡眠算法提供了难得的公开评测底本。
  3. 它的主要风险在标签语义:头带只有模型标签没有人工标签、-2 占比极高、128 夜不等于 128 人——三处不搞清就必然误用。

11.2 适合谁

  • 需要公开基线验证头带/干电极分期算法的团队;
  • 做跨设备域自适应、迁移学习的研究者;
  • 做干电极信号质量与伪迹检测的研究者;
  • 做睡眠公开数据资源综述的信息学工作者。

11.3 不适合谁

  • 研究 OSA、失眠、发作性睡病等病理人群的临床研究者(人群不符);
  • 需要呼吸事件标注(AHI、ODI)的睡眠呼吸研究者(无此类标注);
  • 需要大样本从零训练基础模型的团队(128 夜偏小);
  • 需要多导联高密度 EEG 的神经影像研究者(仅 6 导 + 2 导头带)。

11.4 30 秒决策卡

你的需求是「睡眠分期 + 可穿戴对照」吗?
├── 是 → BOAS(CC0,直接下载)→ 注意 pid 分组、-2 掩码、版本号
│         └── 还需要大规模?→ 叠加 sleep-edf / ISRUC / SHHS 做预训练
├── 只想做睡眠分期,不在意设备对照
│   └── BOAS 可用但不是最优 → 先看 sleep-edf / ISRUC(更常被引用为基线)
├── 要做睡眠事件(觉醒/呼吸事件)检测
│   └── 换 cinc-2018-sleep-arousal(逐样本 arousal)
└── 要病理人群
    └── SHHS / MrOS / MESA(需向 NSRR 申请)

FAQ(高频问答)

A. 基础认知

A1. BOAS 是什么的缩写?
Bitbrain Open Access Sleep,Bitbrain 开放睡眠数据集。

A2. 它和 Bitbrain 公司的产品有关系吗?
有。数据由 Bitbrain 采集与发布,头带端就是该公司硬件。但数据本身以 CC0 释放,使用不受产品购买约束。

A3. 它是 BIDS 格式吗?
是。遵循 BIDS 的 EEG 扩展,task-Sleep、acq-psg / acq-headband 都是标准实体。OpenNeuro 页面显示有数千条 BIDS 校验提示,但整体结构合规。

A4. 数据集有几个版本?
至少三个快照:v1.0.0(2024-10-14)、v1.1.0(2025-02-13)、v1.1.3(2026-08-31)。引用时请锁 DOI 版本。

A5. 有没有中文官方名?
没有官方中文名。「Bitbrain 开放睡眠数据集」是社区译法。

A6. 它属于哪个学科?
睡眠医学 + 可穿戴生理信号工程 + 机器学习。在千方病案医数集的标签体系里归入「生理信号 / 睡眠信号 / 脑电信号 / 可穿戴传感」。

B. 数据与获取

B1. 下载要注册吗?
不需要。CC0 + OpenNeuro,直接公开下载。

B2. 总共多大?
约 33.5 GiB(35,921,406,441 字节,v1.1.3)。

B3. 下载慢怎么办?
用 openneuro-cli 的多线程;或按 sub 只取需要的夜;DataLad 支持按文件 get。

B4. EDF 用什么打开?
MNE-Python(mne.io.read_raw_edf)、FieldTrip、EEGLAB(需 BIOSIG 插件)、EDFlib。

B5. 事件表怎么读?
pandas.read_csv(path, sep='\t')。PSG 表有 stage_hum 与 stage_ai,头带表只有 stage_ai。

B6. 为什么 sub-1 和 sub-2 的年龄性别一样?
因为它们是同一个 pid=89 的受试者连续两夜。

B7. 有没有 test 集划分?
没有官方划分。训练/测试切分完全由使用者决定,因此必须自己保证 pid 不跨折。

B8. 能不能商用?
可以。CC0 无用途限制,但建议署名与引用 DOI 以维持学术诚信。

C. 标注与信号

C1. 标签是谁打的?
三名睡眠技师独立判读,取 ≥2 人一致为共识;三人全不一致由第四人裁决。

C2. 有没有每位技师的独立标签?
没有发布。只有最终共识。

C3. stage_hum 里的 8 是什么?
PSG 掉线(例如起夜断开)。应 mask,不是第七类。

C4. stage_ai 里的 -2 是什么?
伪迹与缺失数据,仅 AI 标签会出现。应 mask。

C5. 头带有几个人工标签?
零个。头带只有 stage_ai。

C6. 信号滤波过吗?
没有。侧车 SoftwareFilters 为 n/a,需自行处理 50 Hz 工频。

C7. 参考电极是什么?
PSG 为 M1(左乳突)。头带的参考在侧车中未明确记录。

C8. 为什么 PSG 里有 11 个 “EEG” 通道?
因为整份 PSG 被塞进 BIDS EEG 模板,EOG/EMG/呼吸也被计入 EEGChannelCount。

C9. 头带电极在哪?
约在 AF7 / AF8(前额左右),即眉上方偏外侧。

C10. 头带有 IMU 吗?
有。HB_IMU_1-6,三轴加速度 + 三轴陀螺。

C11. 有血氧吗?
PSG 侧有 PSG_SPO2;头带侧没有血氧,只有 PPG 脉搏。

C12. 有没有呼吸事件(呼吸暂停、低通气)标注?
没有。数据集不含 AHI 或呼吸事件级标注。

C13. 有没有体动/觉醒标注?
没有显式觉醒标注。头带的 -2 可间接反映体动伪迹,但不是生理觉醒。

C14. epoch 长度是多少?
30 s,与 AASM 一致。

D. 结果与研究

D1. 官方一致率是多少?
87.13%(PSG)/ 86.71%(头带),见现行 README;v1.0.0 旧值为 87.08% / 86.64%。

D2. 这个数字能理解为「准确率」吗?
不建议。它是逐 epoch 一致率,在 N2 主导的分布下会高估模型的实用性能。

D3. 有人做出更好的结果吗?
第三方已有基于单通道特征选择与多模态融合的工作(MDPI 2025/2026),但评测协议各异,不能直接比分数。

D4. 为什么 N1 那么难?
N1 缺少纺锤波与慢波,眼动弱,与清醒低电压混合频率高度相似;前额两导尤其缺枕区 α 信息。

D5. 头带能替代 PSG 吗?
在健康人群的粗粒度分期上可以接近;在 N1/REM 精细区分、以及睡眠障碍诊断上目前不能。

E. 工程与复现

E1. 怎么保证不泄漏?
按 pid 分组切分:GroupKFold(n_splits=5, groups=df['pid'])。

E2. 头带有效 epoch 太少怎么办?
先统计覆盖率;若某夜有效 epoch 过少(例如不足 100 个),考虑整夜剔除并在论文中报告剔除规则。

E3. 两个 EDF 怎么时间对齐?
两套设备同时启动,事件表的 onset 网格相同。合并时以 onset 为键而不是按行号。

E4. 内存不够怎么办?
整夜 256 Hz × 多通道的 EDF 直接载入会占用数百 MB 到 GB 级。建议按 epoch 流式读取(mne.io.read_raw_edf(preload=False) + 分段取窗)。

E5. 能否只用头带数据?
可以,但只有 stage_ai 可参考;做监督学习必须借 PSG 的 stage_hum 作为目标。

E6. 论文的代码公开吗?
主论文为 CC BY-4.0 开放获取;代码可用性需以论文正文与期刊页面为准,本条目未做独立核验。

F. 库内关系

F1. 它和 sleep-edf 区别在哪?
sleep-edf 只有 PSG(及干电极化的 Cassette 子集),非同夜双设备;BOAS 是同一夜双设备同步。

F2. 它和 cinc-2018-sleep-arousal 区别在哪?
后者是逐采样点唤醒检测(事件检测任务),BOAS 是 30 s 五分类分期。

F3. 它和 mesa-sleep 区别在哪?
MESA 是居家 PSG 大队列,干电极 EEG 子集与 PSG 分开记录;BOAS 是同步双设备小样本。

F4. 它和 bidsleep-dataset 区别在哪?
bidsleep 的参考 EEG 是 Dreem2 头带,BOAS 的参考是临床 PSG。

F5. 能否与 shhs 合并训练?
技术上可以,但采样率、参考、通道、标签来源都不同,直接拼接会造成域混杂。更稳妥的做法是先各自预训练再微调。

事实清单(硬事实)

# 事实 核验来源
1 数据集编号 ds005555 OpenNeuro
2 全称 The Bitbrain Open Access Sleep (BOAS) dataset README
3 创建时间 2024-10-03 OpenNeuro GraphQL
4 首个快照 v1.0.0 于 2024-10-14 快照 API
5 最新快照 v1.1.3 于 2026-08-31 快照 API
6 128 夜 README / summary
7 100 名唯一受试者 participants.tsv pid 去重
8 20 人重复入组(2 夜 12 人、3 夜 8 人) participants.tsv 统计
9 1,414 个文件 summary.totalFiles
10 总量 35,921,406,441 字节 summary.size
11 采样率 256 Hz 侧车 json
12 工频 50 Hz 侧车 json
13 PSG 参考 M1 左乳突 侧车 json
14 PSG 制造商 Micromed 侧车 json
15 README 型号 Brain Quick Plus Evolution README
16 侧车型号字符串 “SD plus” 侧车 json
17 机构 Bitbrain Technologies, Zaragoza 侧车 json
18 8 位署名作者 OpenNeuro 描述
19 许可证 CC0 三版本一致
20 DOI v1.0.0 …ds005555.v1.0.0 快照 API
21 DOI v1.1.3 …ds005555.v1.1.3 快照 API
22 主论文 Comput Biol Med 2026;205:111560 Crossref
23 主论文许可 CC BY-4.0 Crossref
24 官方一致率 87.13% / 86.71% README
25 旧版一致率 87.08% / 86.64% v1.0.0 镜像
26 技师间一致率约 82% 现行 README
27 旧版技师间一致率约 85% v1.0.0 镜像
28 3 名技师独立判读 README
29 ≥2 人一致取共识 README
30 三人全分歧由第四人裁决 README
31 标签编码 0/1/2/3/4/8/-2 README
32 30 s epoch events 侧车
33 sub-1 时长 27,459 s 侧车 json
34 sub-1 共 915 epoch 事件表实测
35 sub-1 stage_hum:W200/N1 57/N2 398/N3 172/REM 87/掉线 1 事件表统计
36 sub-1 头带 -2 占 677/915 事件表统计
37 年龄 18–82,均值 42.0 participants.tsv
38 BMI 18.3–33.3,均值 23.9 participants.tsv
39 性别 F 76 / M 52 participants.tsv
40 1 行年龄与 BMI 为 n/a participants.tsv
41 头带电极约 AF7/AF8 README
42 头带含 IMU 六轴与 PPG README
43 EDF 为 annex 符号链接 GitHub 仓库实测
44 招募补偿每夜 50 € README
45 纳入年龄 >18 且懂西班牙语 README
46 接触者为 Eduardo López-Larraz README

术语表

术语 英文 释义
多导睡眠图 polysomnography, PSG 同步记录脑电、眼电、肌电、呼吸、血氧等的整夜睡眠检查
睡眠分期 sleep staging 按 30 s epoch 划分为 W/N1/N2/N3/REM
干电极 dry electrode 无需导电膏、直接接触皮肤的电极
湿电极 wet/gel electrode 需涂导电膏以降低阻抗的电极
头带 headband 前额佩戴的便携 EEG 设备形态
共识标签 consensus label 多名判读者中多数一致的标签
交叉验证 cross-validation 将数据分折轮流训练/验证的评估方式
分组交叉验证 grouped cross-validation 以受试者为组划分折,防止同人跨折泄漏
epoch epoch 分期最小判读单元,此处 30 s
唤醒 arousal 睡眠中短暂的脑电频率升高,通常 3–15 s
域偏移 domain shift 训练与测试数据分布不同
域自适应 domain adaptation 把源域模型迁移到目标域的方法
伪迹 artifact 非生理来源的信号干扰
工频干扰 power-line interference 50/60 Hz 电网噪声
陷波滤波 notch filter 去除单一频率干扰的滤波
带通滤波 band-pass filter 保留特定频段的滤波
慢波睡眠 slow-wave sleep 即 N3,以 0.5–2 Hz 高幅慢波为主
睡眠纺锤波 sleep spindle 11–16 Hz 短簇,N2 标志
K 复合波 K-complex N2 标志性高幅负-正波
α 节律 alpha rhythm 8–13 Hz,闭眼清醒时枕区显著
微觉醒 microarousal 短于 15 s 的觉醒片段
BIDS Brain Imaging Data Structure 神经影像与电生理数据组织规范
EDF European Data Format 生理信号通用存储格式
annex git-annex 大文件版本管理机制,内容与指针对分离
OpenNeuro — 开放神经影像/电生理数据托管平台
CC0 Creative Commons Zero 放弃全部著作权的公共领域奉献
kappa Cohen’s kappa 扣除偶然一致后的一致性系数
宏平均 F1 macro F1 各类 F1 的算术平均,对少数类敏感
覆盖率 coverage 有效 epoch 占全部 epoch 的比例
n/a not available 缺失值

附录

附录 A:条目信息速查卡

项 值
条目名 The Bitbrain Open Access Sleep (BOAS) dataset
url_name boas-bitbrain
类型 开放数据集 + 配套论文
编号 OpenNeuro ds005555
发布方 Bitbrain Technologies(西班牙萨拉戈萨)
规模 128 夜 / 100 人 / 1,414 文件 / ≈33.5 GiB
采样 256 Hz,30 s epoch
许可 CC0 1.0
版本 v1.0.0 → v1.1.0 → v1.1.3
主论文 Comput Biol Med 2026;205:111560
抓取时点 2026-10-17
库内互链 sleep-edf(73)、isruc-sleep(262)、mass(272)、shhs(282)、mros-sleep(292)、mesa-sleep(302)、nch-sleep(1013)、bidsleep-dataset(1004)、cinc-2018-sleep-arousal

附录 B:DAIMS 评估全表

维度 评分(1–10) 依据
D 可发现性 8 OpenNeuro 平台高可见度;BIDS 规范命名利于检索;但「BOAS」缩写与皮肤科 Boas 征等术语同名,纯字符串检索易混
A 可获取性 10 CC0 公共领域 + 无注册 + 三条下载路径;无需申请、无需签署协议,是本库中可获取性最顶级的一档
I 可互操作 8 BIDS + EDF 双标准;MNE/FieldTrip/EEGLAB 均可读;但各夜通道不齐、offset 冗余字段导致严格校验报错
M 元数据质量 7 README 完整、作者与机构清晰、DOI 版本链规范;扣分项在设备型号双口径、一致率两套数字、技师间一致率版本漂移
S 可持续性 7 OpenNeuro 平台长期托管 + DataLad 镜像双保险;依赖厂商持续维护,但 CC0 已释放,即使厂商退出数据仍可镜像
综合评级 8.0/10(优秀) 可获取性与互操作性突出;元数据内部一致性是主要扣分点

评分说明:可获取性给满分是因为在睡眠数据领域,CC0 + 无审核是罕见的组合。多数同类数据集(SHHS/MrOS/MESA 的 NSRR 申请、MASS 的邮件请求、ISRUC 的申请表)在这一项上会被扣 3–5 分。

附录 C:逐项证据链自证

关键数字 来源 位置
128 夜 README「128 nights」 OpenNeuro README
100 人 participants.tsv 的 pid 去重 RAW 文件实测
1,414 文件 / 35.9 GB 快照 summary GraphQL API
256 Hz / 50 Hz / M1 侧车 _eeg.json sub-1 eeg 目录
11 通道 + 头带 2 导 channels.tsv sub-1 eeg 目录
编码 0–4/8/-2 README「Sleep staging labels」 README
三技师共识 + 第四人裁决 README「Human sleep scoring」 README
87.13% / 86.71% README「Automatic scoring」 README
87.08% / 86.64% bayflex 镜像 / MDPI 引用 第三方镜像
82% 技师一致率 现行 README README
85% 技师一致率 v1.0.0 镜像 bayflex
2026;205:111560 Crossref api.crossref.org
CC BY-4.0(论文) Crossref license api.crossref.org
CC0(数据) 快照 description.License GraphQL API

附录 D:数据获取决策树

需要哪部分数据?
├── 只做几夜的快速实验
│   └── OpenNeuro 网页按 sub 下载,或 openneuro download --include sub-1 sub-2
├── 需要整库做交叉验证
│   └── openneuro download --dataset ds005555 ./boas(约 33.5 GiB)
├── 需要可复现的版本锁定
│   └── 锁 DOI 10.18112/openneuro.ds005555.v1.1.3
├── 需要 git 版本管理自己的处理流程
│   └── datalad install + datalad get(勿用裸 git clone)
└── 只需标签做统计
    └── 仅下载 *_events.tsv(每夜约 30 KB,整库约 4 MB)

附录 E:标签映射与使用规范

原始值 中文 使用建议
0 清醒 W 可作五分类之一;如做二分类「睡/醒」可与其他类合并
1 N1 少数类,训练时需重采样或类别权重
2 N2 多数类,勿以其占比推断模型性能
3 N3 由 AASM 标准确定(占 epoch ≥20% 慢波)
4 REM 需眼电佐证;头带侧缺失眼电,判别困难
8 PSG 掉线 mask,仅 stage_hum 出现
-2 伪迹/缺失 mask,仅 stage_ai 出现

合并规则建议:

  • 五分类:0/1/2/3/4
  • 四分类(N1+N2 合并):0 / (1,2) / 3 / 4
  • 二分类睡眠/清醒:0 vs (1,2,3,4),同时 mask 8 与 -2

附录 F:下载与读取骨架(代码)

# 1) 下载(openneuro-py)
# pip install openneuro-py
# openneuro download --dataset ds005555 ./boas --include sub-1 sub-2 sub-3

import mne
import pandas as pd
from pathlib import Path

ROOT = Path("./boas")

def load_night(sub: str):
    eeg_dir = ROOT / sub / "eeg"
    psg_edf = eeg_dir / f"{sub}_task-Sleep_acq-psg_eeg.edf"
    hb_edf = eeg_dir / f"{sub}_task-Sleep_acq-headband_eeg.edf"

    raw_psg = mne.io.read_raw_edf(psg_edf, preload=False, verbose=False)
    raw_hb = mne.io.read_raw_edf(hb_edf, preload=False, verbose=False)

    psg_ev = pd.read_csv(eeg_dir / f"{sub}_task-Sleep_acq-psg_events.tsv", sep="\t")
    hb_ev = pd.read_csv(eeg_dir / f"{sub}_task-Sleep_acq-headband_events.tsv", sep="\t")

    ch_psg = pd.read_csv(eeg_dir / f"{sub}_task-Sleep_acq-psg_channels.tsv", sep="\t")
    ch_hb = pd.read_csv(eeg_dir / f"{sub}_task-Sleep_acq-headband_channels.tsv", sep="\t")
    return raw_psg, raw_hb, psg_ev, hb_ev, ch_psg, ch_hb


def valid_epochs(psg_ev, hb_ev):
    """对齐两侧并剔除 8 与 -2;以 onset 为键合并。"""
    assert (psg_ev["onset"].values == hb_ev["onset"].values).all(), "epoch 网格不一致"
    df = pd.DataFrame({
        "onset": psg_ev["onset"],
        "stage_hum": psg_ev["stage_hum"],
        "stage_ai_psg": psg_ev["stage_ai"],
        "stage_ai_hb": hb_ev["stage_ai"],
    })
    df = df[df["stage_hum"] != 8]
    df_hb = df[df["stage_ai_hb"] != -2]
    return df, df_hb

要点:assert 那一行是防止错位的关键;很多人在两表行数不同时按下标合并,结果后半夜整体错位而毫无察觉。

附录 G:按 pid 分组的交叉验证骨架

import numpy as np
import pandas as pd
from sklearn.model_selection import GroupKFold
from sklearn.metrics import f1_score, cohen_kappa_score

# participants 是含 participant_id 与 pid 的表
parts = pd.read_csv("./boas/participants.tsv", sep="\t")
pid_map = dict(zip(parts["participant_id"], parts["pid"]))

night_index = []   # 每行代表一个 (sub, epoch)
groups = []
n_splits = 5
gkf = GroupKFold(n_splits=n_splits)

for tr_idx, te_idx in gkf.split(X=night_index, y=y_labels, groups=groups):
    model.fit(night_index[tr_idx], y[tr_idx])
    pred = model.predict(night_index[te_idx])
    print("macro-F1", f1_score(y[te_idx], pred, average="macro"))
    print("kappa", cohen_kappa_score(y[te_idx], pred))

注意:groups 传的是 pid 序列(逐 epoch 重复),不是 sub 编号。传 sub 编号等于允许同人跨折。

附录 H:事件表合并的正确写法

import pandas as pd

def merge_by_onset(psg_ev_path, hb_ev_path, tol=1e-6):
    psg = pd.read_csv(psg_ev_path, sep="\t")
    hb = pd.read_csv(hb_ev_path, sep="\t")
    merged = pd.merge_asof(
        psg.sort_values("onset"),
        hb[["onset", "stage_ai"]].rename(columns={"stage_ai": "stage_ai_hb"}).sort_values("onset"),
        on="onset", direction="nearest", tolerance=tol,
    )
    return merged

若合并后出现大量 NaN,说明两侧 onset 网格不同(例如某侧提前从记录中段开始),此时应做整夜剔除而非插值。

附录 I:五个任务的推荐指标表

任务 主指标 辅指标 必报项
T1 PSG 五分类 宏平均 F1 kappa、逐类召回 pid 分组方式
T2 头带分期 宏平均 F1(有效 epoch) kappa 有效覆盖率
T3 跨设备迁移 目标域宏 F1 相对 oracle 的衰减 源/目标域定义
T4 设备验证 逐类 F1 + kappa Bland-Altman(如做连续指标) 是否 mask -2
T5 伪迹建模 AUC-PR 精确率@召回 -2 的假阳性定义

附录 J:一页速查卡

BOAS (OpenNeuro ds005555)
─────────────────────────────────────────────
是什么  同夜双设备睡眠数据:临床 PSG × 干电极头带
谁发布  Bitbrain Technologies(西班牙)
规模    128 夜 / 100 人 / 1,414 文件 / 33.5 GiB
采样    256 Hz;30 s epoch
标签    stage_hum(三人共识)、stage_ai(模型)
编码    0 W | 1 N1 | 2 N2 | 3 N3 | 4 REM | 8 掉线 | -2 伪迹
许可    CC0(公共领域)
下载    openneuro download --dataset ds005555 ./boas
─────────────────────────────────────────────
三个必须记住的坑
1. 128 是夜数,100 才是人数 → 按 pid 分组切分
2. 头带只有模型标签,且 -2 占比可高达 74%
3. 官方一致率有两套数字:87.13/86.71 与 87.08/86.64
─────────────────────────────────────────────

附录 K:受试者覆盖速览

分组 人数 夜数
3 夜受试者 8 24
2 夜受试者 12 24
1 夜受试者 80 80
合计 100 128

读法:占比 80% 的受试者只贡献一夜,因此按夜统计与按人统计的比例会不同。做「人均睡眠结构」分析时,多夜受试者会被重复计入,需要先按 pid 取均值。

附录 L:与库内睡眠数据集六维对照

维度 BOAS sleep-edf ISRUC SHHS MESA bidsleep
设备对照 同夜双设备 无 无 无 干电子集分开 双设备(参考为头带)
采样率 256 Hz 100 Hz 200 Hz 125 Hz 256 Hz 多变
人群 健康成人 健康+轻度 睡眠障碍 社区队列 多民族队列 消费级用户
规模 128 夜 197 夜 126 人 约 5,800 人 约 2,000 人 数十人
许可 CC0 ODC-By 申请制 NSRR 申请 NSRR 申请 依平台
呼吸标注 无 无 部分 有 有 无

附录 M:许可条款细读

CC0 1.0 的核心条款(通俗表述):

  1. 放弃全部权利:发布者在法律允许范围内放弃对该作品的全部著作权与邻接权。
  2. 无署名要求:不署名也不构成侵权。
  3. 无用途限制:商业、军事、教育用途一律允许。
  4. 无担保:发布者不保证数据无瑕疵。
  5. 不可撤回:一旦以 CC0 发布,不能反悔要求下游删除。

实践建议:虽然无署名义务,但在论文中引用 doi:10.18112/openneuro.ds005555.v1.1.3 与主论文,既是对数据生产者的尊重,也让审稿人能复核版本。

附录 N:主论文与数据集的关系声明

项 数据集(BOAS) 主论文
人群 健康志愿者(100 人) 含 OSA 与无 OSA 个体
对象 原始信号 + 标签 算法与性能
许可 CC0 CC BY-4.0
可引用对象 DOI 10.18112/openneuro.ds005555.v1.1.3 DOI 10.1016/j.compbiomed.2026.111560

结论:两者应同时引用,但不能把论文中涉及 OSA 人群的结论表述为「BOAS 数据集的结论」。

附录 O:坑点档案(与 §10 对照)

编号 坑点 触发条件 严重度
1 128 当成 128 人 按 sub 切分 高
2 -2 当第七类 未 mask 高
3 头带 stage_ai 当人工标签 未核对表结构 高
4 一致率两套数字混用 引用版本不一致 中
5 设备型号两个名字 只读 README 或只读侧车 低
6 技师一致率 82/85 引用旧版镜像 低
7 git clone 得到空数据 未用 annex get 中
8 假设通道表固定 按索引取列 中
9 EOG/EMG 当 EEG 按 type 列判断 中
10 忽略 epoch 对齐 按下标合并 高

附录 P:检索决策树

检索者问:「有没有公开的睡眠数据,能同时看临床 PSG 和消费级头带?」
│
├── 有,且要 CC0 可商用
│   └── BOAS(ds005555)✅
├── 有,但要更大规模
│   └── 暂无同等「同夜双设备 + 临床金标准」的大集
│       → 折中:BOAS 做验证集,SHHS/MASS 做预训练
├── 只要 PSG 分期基准
│   └── sleep-edf / ISRUC / SHHS
├── 要睡眠事件检测
│   └── cinc-2018-sleep-arousal
└── 要儿科
    └── nch-sleep

附录 Q:建议互链点(正文版,不放 frontmatter)

目标 rid 互链理由 建议锚文本
sleep-edf 73 同为整夜睡眠分期基准,常被并列引用 sleep-edf 睡眠分期基准
isruc-sleep 262 同为临床 PSG 分期数据,可做跨集验证 ISRUC-Sleep 临床 PSG 数据集
mass 272 多中心整夜 PSG 汇总,规模互补 MASS 蒙特利尔睡眠档案
shhs 282 大型队列,可作预训练来源 SHHS 睡眠心脏健康研究
mros-sleep 292 老年男性居家 PSG,人群互补 MrOS 居家 PSG 队列
mesa-sleep 302 含干电极 EEG 子集,设备维度互补 MESA 居家睡眠监测
nch-sleep 1013 儿科 PSG,人群维度互补 NCH 儿科睡眠数据
bidsleep-dataset 1004 动机最近:消费设备对照 多夜瞬时心率与加速度计数据集
cinc-2018-sleep-arousal 无(同轮) 同域不同任务,需明确区分 CinC 2018 睡眠觉醒检测
openneuro 100 托管平台 OpenNeuro 平台

说明:除 openneuro 外,以上 rid 均来自本次 DB 查询实测;cinc-2018-sleep-arousal 为同轮交付条目,入库后 rid 由主会话回填。


相关数据集导航

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

  • dreamt — 共享标签:生理信号 / 睡眠信号 / 可穿戴传感 / 评测基准
  • hmc-sleep-staging — 共享标签:生理信号 / 睡眠信号 / 脑电信号 / 评测基准
  • capsleep — 共享标签:生理信号 / 睡眠信号 / 脑电信号 / 评测基准
  • nebula-reaching-eeg — 共享标签:生理信号 / 脑电信号 / 可穿戴传感 / 评测基准
  • globem — 共享标签:生理信号 / 睡眠信号 / 可穿戴传感 / 评测基准
  • cinc-2018-sleep-arousal — 共享标签:生理信号 / 睡眠信号 / 脑电信号 / 评测基准
  • sleep-edf — 共享标签:生理信号 / 睡眠信号 / 脑电信号
  • isruc-sleep — 共享标签:生理信号 / 睡眠信号 / 评测基准
  • mass — 共享标签:生理信号 / 睡眠信号 / 脑电信号
  • psg-ipa — 共享标签:睡眠信号 / 脑电信号 / 评测基准

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

返回 AI-Ready 数据集