方向盘上的压力 — DriveDB 驾驶生理信号库

17 段实车记录 / 108.7 MB / 官方无压力评分

来源 https://physionet.org/content/drivedb/1.0.0/发布时间: 2026-10-28最后更新: 2026-10-28 阅读 13
方向盘上的压力 — DriveDB 驾驶生理信号库

信息速览

数据集名称方向盘上的压力 — DriveDB 驾驶生理信号库
数据类型时序信号,波形,元数据
规模官方未公布人数;17 段实验 / 18 个记录文件
接入方式https://physionet.org/content/drivedb/1.0.0/
AI 就绪度

一段十秒钟的门诊心电图,记录的是人躺着不动的状态;一段二十四小时的 Holter,记录的是人照常生活的状态。真实驾驶介于两者之间:身体被固定在座椅上,手脚却在持续做精细操作,环境噪声、光照、坐姿、情绪同时变化。要把"压力"这件事从生理信号里读出来,最理想的语料就是这种半约束、半自然的真实场景,而公开可得的那一批里,DriveDB 是最早的一份。

它的来历不复杂。MIT 情感计算组的 Jennifer Healey 在 2000 年前后做了一套车载生理采集装置,请健康志愿者在波士顿市区街道与高速公路上按规定路线开车,一路记录心电、右斜方肌肌电、手部与足部皮肤电和呼吸。这批数据后来写成博士论文与一篇 IEEE 会议期刊论文,2008 年 5 月由作者本人贡献给 PhysioNet,编为 1.0.0 版,此后十八年没有再改动过。

它最容易被误解的地方不在技术细节,而在名字:库名 drivedb 与眼底影像领域那个著名的 DRIVE 挑战赛数据集只差几个字母,含义却南辕北辙。它是驾驶,不是眼底。另一个必须提前说清的事实是,官方页面在数据描述里明确写着原始研究中的压力评分不可得——这是一份只有信号、没有标签的语料。一屏速览见下表。

维度 内容
全名 Stress Recognition in Automobile Drivers
PhysioNet 库名 drivedb
贡献者 Jennifer Healey(MIT Media Lab 情感计算组)
发布方 PhysioNet,现由 MIT 计算生理学实验室维护
首次发布 2008 年 5 月 15 日,1.0.0 版
后续改版 无,1.0.0 为唯一版本
数字对象标识 10.13026/C2SG6B
记录文件数 18 个(drive01 至 drive16、drive17a、drive17b)
实验段数 17 段(第 17 号拆为 a、b 两段)
采集场景 美国波士顿市区街道与高速公路,规定路线
受试者 健康志愿者,人数与人口学构成官方未公布
通道 心电、右斜方肌肌电、手部皮肤电、足部皮肤电、呼吸、心率、事件标记(逐记录 4–7 路)
时长 16 段完整实验 65–93 分钟;drive17a 29 分钟、drive17b 25 分钟
采样方式 记录级帧率 15.5 Hz 为主,逐通道按每帧 1–128 次复用
标签 无。官方明示压力评分不可得
体积 108.7 MB(未压缩)
文件格式 WFDB:.hea 头文件 + .dat 二进制信号
许可 ODC Attribution License v1.0
典型用途 自监督预训练、信号质量研究、通道对齐、应激表征的无监督探索

§1 它要解决的具体麻烦

1.1 压力是个体感词,信号是公共量

临床上有明确判据的状态,比如心肌梗死、房颤、视网膜出血,都能落成一份可复核的标注:哪一段、哪一帧、属于哪一类。应激不是这样。同一个急刹车,对一位开了二十年出租车的人和一个刚拿驾照三个月的人,生理反应可以差出数倍;同一个人在同一条路上开两遍,第二遍的皮肤电反应也会明显低于第一遍,因为他已经熟悉了这条路。压力既依赖情境,又依赖个体,还依赖时间上的新鲜度。

这件事直接决定了应激数据集的形态。要做有监督学习,必须有人对每一段时间窗打一个分数;而打分的依据往往是回顾性的主观报告,与当时真实的生理状态之间存在天然错位。实验室里可以靠刻意设计的任务(心算、公开演讲、冷加压)制造相对干净的应激段与静息段,代价是场景失真。真实道路上采集,场景真了,代价是标注几乎做不干净。

DriveDB 站在后一种取舍上,而且站得很彻底:它连尝试过的那些主观评分都没有公开。官方页面在数据描述段的末尾用一句话交代了这件事,没有解释原因,也没有提供替代标签。这句短话决定了整份语料的定位——它不是训练集,是原料。

面向 实验室应激范式 真实道路采集 DriveDB 的位置
场景真实性 低,任务高度简化 高,含真实交通流 高,市区与高速混合
标注可控性 高,可精确控制起止 低,事件边界模糊 无标注,连主观评分也未公开
个体差异 可配对设计部分抵消 难以抵消 无法处理,缺人口学字段
信号伪迹 少,受试者静止 多,体动与振动 多,需自行做质量筛查
样本量 通常几十人 通常十几人 17 段,人数未公布

1.2 三条常见的错误期待

第一条,期待它带应激标签。这是最高频的误判,而且往往在下载完之后才发现。目录里只有 .hea 与 .dat 两种后缀,没有任何 .atr、.csv、.txt 形式的标注,也没有说明文档列出每一段对应哪一类压力水平。官方那句话是唯一的口径,且是明确的否定句。

第二条,期待它是眼底那个 DRIVE。搜索 DRIVE dataset 得到的绝大多数结果指向荷兰的视网膜血管分割基准,那套数据是四十张眼底彩照配双人血管掩膜,被引数千次;而本库是十七段驾驶生理记录,两者连数据类型都不同。混淆一旦发生,后面所有的阅读都会跑偏,所以 §3.1 专门用一节拆解这三个名字。

第三条,期待它是一个平衡的应激二分类基准。即便有人拿第三方加工过的标签版本使用,也要注意原始设计的偏向:路线里包含市区拥挤路段与高速畅通路段,两者在操纵负荷上差异明显,但在"主观压力"上并不等价——有人在高速上更紧张,有人在市区更紧张。把路况直接当压力标签,是把情境当成了状态。

错误期待 实际情况 后果
下载后即有标签可训练 无任何标注文件 监督流程无法启动,需自建协议
与眼底 DRIVE 同源 完全不同的数据集 检索、引用、评审全错
路况即压力等级 官方未给路段级标签 模型学到的是路段而非应激
通道齐整、字段统一 逐记录通道数 4–7 不等 批量读取会失败或静默错位
采样率统一 帧率有 15、15.5、31 三种 时间轴换算错误

1.3 它能给到的与给不到的

你的需求 它给的 够不够
真实道路下的多路外周生理波形 心电、肌电、双部位皮肤电、呼吸同步 够,这是它最核心的价值
有监督的应激分类训练 无标签 不够,必须自建标注
受试者无关的泛化评估 人数未公布,段数只有 17 不够,统计功效极低
自监督或对比学习的预训练语料 十余小时真实道路多通道波形 勉强,量小但场景稀缺
信号质量与伪迹检测方法验证 含体动、振动、电极接触变化的真实噪声 够,且比合成噪声更有说服力
通道对齐与重采样工程验证 三种帧率、七种复用因子的异构样本 够,堪称小型试验床
临床应激评估或诊断 健康志愿者,无临床结局 不够,也不应这样用
车载座舱量产算法的训练集 传感器与当代量产硬件差异大 不够,只能做早期探索

1.4 你的处境与它能帮到的事

你的处境 它能帮你什么 下一步该做什么
你在做座舱应激感知,手上只有实验室数据,想找一个真实道路的对照 提供市区与高速混合的真实驾驶波形,可作为外部场景检验 先做通道语义映射(§5.3),再只看相对变化,不看绝对幅值
你要预训练一个多通道生理编码器,缺真实场景语料 十余小时、多通道、长连续记录,适合做掩码重建类预训练 与实验室库混合采样,避免预训练分布过度偏向驾驶场景
你在写综述,需要梳理应激计算的数据 lineage 它是这条线上最早被公开托管的一份,且版本从未变动,引用稳定 以 §8.1 的时间线为骨架,注意 2000 年博士论文与 2005 年期刊论文的分工
你在做信号质量研究,需要真实体动伪迹 驾驶过程中的加减速、路面颠簸、转向都会进入信号 用 §5.6 的质检脚本先建立伪迹清单,再设计检测器
你要复现某篇早期情感计算论文 论文与数据同源,引用链清晰 先确认论文用的是哪几段记录,官方未给划分,需按描述反推
你在评审一份投稿,怀疑作者把路段当成了应激标签 官方页面可作直接证据:评分不可得 引用 §7.3 的偏差清单,要求作者说明标签来源

1.5 一句话判断

它不是一份能直接喂给分类器的数据集,而是一份把"真实道路"这个稀缺条件固定下来的原始语料;用它的正确姿势是先承认没有标签,再决定自己要不要付代价去造标签。

1.6 不适合谁:四条边界

不适合把它当监督学习的数据源。 没有标签就没有监督信号,任何声称在此库上直接训练应激分类器的工作,都必须先交代标签从哪来。若标签来自路况推断,那训练出来的是路况分类器。

不适合做人群层面的结论。 受试者人数、年龄、性别、驾龄全部未公布,样本又只有十七段。任何"人类在驾驶中如何反应"的普适结论,都不该建立在这样一份语料上。

不适合做临床或安全认证。 志愿者是健康人群,没有病史、没有用药、没有事故记录,也没有任何临床结局变量。它不能支撑与疾病、药物、事故风险相关的判断。

不适合直接对接现代车载硬件。 采集发生在 2000 年前后,传感器形态、采样链路、电极位置都与今天的量产座舱不同。跨硬件迁移必须重新做标定,不能假设幅值可比。

§2 数据构成与规格

2.1 一段记录由两个文件组成

数据库采用 WFDB 格式,这是 PhysioNet 沿用数十年的生理信号存储规范。与常见的心电库不同,这里没有注释文件:每一段记录只有同名的 .hea 与 .dat。头文件是纯文本,第一行声明记录名、通道数、帧率与总帧数,其后每行描述一个通道;.dat 是二进制本体,多个通道按帧交错存放。

两个文件之外,根目录只有 RECORDS 与 SHA256SUMS.txt 两个清单。没有 ANNOTATORS,没有 record-descriptions.txt,也没有任何患者信息汇总表。这一点与多数 PhysioNet 数据库不同,意味着除了头文件,没有第二处可以交叉核对元信息。

文件 作用 是否必需 本库是否存在
.hea 纯文本头文件,声明通道、帧率、增益 必需 有,18 个
.dat 二进制信号本体,按帧交错 必需 有,18 个
.atr 二进制注释,存放事件与标签 可选 无
RECORDS 记录名清单,一行一个 可选 有
SHA256SUMS.txt 文件校验和,用于完整性核对 可选 有
说明文档 字段解释、采集协议 可选 无,只有网页正文

没有注释文件这件事,比它听起来更重要。它意味着不存在"官方认可的事件时刻表":刹车的时刻、进入高速的时刻、遇到拥堵的时刻,都没有权威标注。想要事件级分析,只能靠信号本身反推,或者靠作者论文里描述的实验流程去对照,而后者的颗粒度是分钟级而非秒级。

2.2 字段与记录的完整字典

本库的"字段"分两层:头文件里的声明字段,和通道本身的语义。下表先列声明字段。

字段 位置 取值形态 含义 使用注意
记录名 .hea 首行第 1 字段 如 drive05 记录标识 与文件名前缀一致
通道数 .hea 首行第 2 字段 4 至 7 该记录的信号路数 逐记录不同,不可硬编码
帧率 .hea 首行第 3 字段 15、15.5、31 每秒帧数 不是每通道采样率
总帧数 .hea 首行第 4 字段 如 78367 记录长度(帧) 除以帧率得秒数
存储格式 通道行第 2 字段 16 或 16xN 16 位整型,N 为每帧采样次数 16x128 表示每帧采 128 次
增益 通道行第 3 字段 如 1000、1/bpm ADC 单位与物理量的比值 斜杠后为物理单位,多数通道省略
ADC 分辨率 通道行第 4 字段 恒为 16 模数转换位数 全库一致
ADC 零值 通道行第 5 字段 多为 0 零电平对应的整数值 换算物理量时先减
初值 通道行第 6 字段 有符号整数 首采样点值 用于快速预览
校验和 通道行第 7 字段 有符号整数 采样点累加和 用于检测文件损坏
块大小 通道行第 8 字段 多为 0 分块存储参数 读取工具自动处理
通道名 通道行第 9 字段 ECG、EMG、foot GSR 等 信号类型标识 拼写不完全统一,见 §4.3 的案例

通道语义这一层,官方页面在摘要里列了五类,头文件里还能看到心率与标记两类。把两处合起来,全库出现过的通道共有七种。

通道名 中文 官方描述中的角色 生理含义 常见问题
ECG 心电 有,摘要列为首项 心脏电活动,可导出心率与心率变异性 体动与电极摩擦引入基线漂移
EMG 肌电 有,注明为右斜方肌 肩颈肌肉紧张度,与握持、转向相关 采样配置差异极大,部分记录仅低速率
hand GSR 手部皮肤电 有 手掌汗腺活动,对应交感兴奋 drive07 拼作 hand GSr,字符串匹配会漏
foot GSR 足部皮肤电 有 足底汗腺活动,与手部形成对照 鞋袜与踏板接触带来额外压力变化
RESP 呼吸 有,摘要单列 呼吸节律与深度 采样配置两种,需分别处理
HR 心率 无,仅见于头文件 由心电导出的瞬时心率 单位声明为 bpm,是少数带单位的通道
marker 事件标记 无,仅见于头文件 由实验者按下的事件时刻 稀疏、含义未文档化,drive01 与 drive03 缺失

七种通道里,只有呼吸在官方摘要中被单独列为一个主题词,皮肤电、心电、肌电则合并在多参数的说法下。这不是遗漏,而是因为页面本身极短:摘要一段、数据描述两段、参考文献两行,全部正文加起来不足两百词。真正可用的结构信息,大部分只能从头文件读出来。

2.3 一条记录的完整解剖

以 drive05 为例,头文件共八行,逐行读下来就是这份语料的全部结构。

#-- 取头部文件
curl -sL https://physionet.org/files/drivedb/1.0.0/drive05.hea

#-- 输出形状如下(逐行对照 §2.2 的字段表)
#-- drive05 7 15.5 78367
#-- drive05.dat 16x32 1000 16 0 -49 -19117 0 ECG
#-- drive05.dat 16 1000 16 0 373 14481 0 EMG
#-- drive05.dat 16x2 1000 16 0 6252 -29034 0 foot GSR
#-- drive05.dat 16x2 1000 16 0 10955 5828 0 hand GSR
#-- drive05.dat 16 1/bpm 16 0 89 30902 0 HR
#-- drive05.dat 16 100 16 0 1248 -21170 0 marker
#-- drive05.dat 16x2 100 16 0 3378 -13640 0 RESP

首行 drive05 7 15.5 78367 的四个数字依次是:七路通道、每秒十五点五帧、共七万八千三百六十七帧。用总帧数除以帧率,得到约五千零五十六秒,也就是八十四分钟,落在官方所说六十五到九十三分钟的区间里。

真正的采样率不在首行,而在各通道行的 16xN 里。心电是每帧三十二次,乘帧率得到每秒四百九十六次;足部与手部皮肤电是每帧两次,得到每秒三十一次;呼吸同样是三十一次;心率与标记则每帧一次。这种"帧率乘复用因子"的设计,是老一代采集设备节省存储的常用手法,代价是读取端必须显式展开。

import wfdb

#-- 只读头文件,不动二进制,先确认结构
h = wfdb.rdheader('drive05', pn_dir='drivedb')
print(h.fs, h.sig_len, h.n_sig)          #-- 15.5 78367 7
for name in h.sig_name:
    print(name)

#-- 关键:smooth_frames 默认 True,会把多采样通道压回帧率
rec_raw = wfdb.rdrecord('drive05', pn_dir='drivedb', smooth_frames=False)
print(rec_raw.d_signal.shape)

第二段代码里的 smooth_frames=False 不是可选项,而是必需项。默认值 True 会按帧把多采样通道平滑成单点,肌电与皮肤电的高频细节会被直接抹掉。很多人第一次读这个库时得到的肌电"只有十几赫兹",原因就在这里。

2.4 逐记录的通道与采样清单

十八个记录不是同一套模板刻出来的。下表逐条列出每段有哪些通道,空位表示该记录没有这一路。

记录 通道数 帧率 ECG EMG 足部 GSR 手部 GSR RESP HR marker
drive01 6 15.5 有 有 有 有 有 有 无
drive02 5 15.5 有 无 有 无 有 有 有
drive03 4 31 有 无 有 有 有 无 无
drive04 6 15.5 有 无 有 有 有 有 有
drive05 7 15.5 有 有 有 有 有 有 有
drive06 7 15.5 有 有 有 有 有 有 有
drive07 7 15.5 有 有 有 有 有 有 有
drive08 7 15.5 有 有 有 有 有 有 有
drive09 7 15.5 有 有 有 有 有 有 有
drive10 7 15.5 有 有 有 有 有 有 有
drive11 7 15.5 有 有 有 有 有 有 有
drive12 7 15.5 有 有 有 有 有 有 有
drive13 6 15.5 有 有 有 无 有 有 有
drive14 7 15.5 有 有 有 有 有 有 有
drive15 7 15.5 有 有 有 有 有 有 有
drive16 7 15.5 有 有 有 有 有 有 有
drive17a 7 15 有 有 有 有 有 有 有
drive17b 7 15.5 有 有 有 有 有 有 有

把这套表按帧率与复用因子换算成每秒点数,差异更直观。下表左半边是头文件原文,右半边是按原文乘积得到的每秒点数,用于工程上规划内存与滤波设计。

记录 通道 复用因子 换算每秒点数 备注
drive01 ECG 32 496 全库心电的常见配置
drive01 EMG 128 1984 全库唯一的高采样肌电
drive03 ECG 16 496 帧率翻倍而因子减半,结果一致
drive05 ECG 32 496 与 drive01 相同
drive05 EMG 1 15.5 多数记录的肌电只有帧率量级
drive12 ECG 23 356.5 复用因子非二次幂,全库仅此一例
drive15 ECG 31 480.5 同上,属异常配置
drive05 GSR、RESP 2 31 双部位皮肤电与呼吸通常同速
drive05 HR 1 15.5 心率序列本身是导出量,无需高采样
drive03 ECG、GSR、RESP 1、1、1 31 该记录无复用,全部通道同速

这张表暴露了一个容易被忽略的事实:全库只有心电的采样率相对稳定在每秒四百九十六点附近,其余通道的采样配置相当随意。想做多通道对齐,必须逐记录、逐通道读取复用因子,不能假设一个全局采样率。

2.5 与同类资源的字段差异

把本库和三类最常被拿来比较的资源并排放,字段层面的差异比规模差异更影响接入手感。

维度 DriveDB 眼底 DRIVE 实验室应激库(如 WESAD 一类) 常规心电库
模态 多通道外周生理 彩色眼底图像 多通道外周生理 心电
记录单位 一段连续驾驶 一张图像 一段实验协议 一段导联记录
标签 无 有,双人血管掩膜 有,四类情境 有,逐搏注释
通道一致性 逐记录 4–7 路,不齐 图像尺寸统一 协议固定,通道统一 导联数固定
采样一致性 三种帧率、七种复用因子 不适用 通常统一 通常统一
元信息 无人口学字段 有图像级分组 有受试者编号与问卷 有患者信息
接入成本 高,需逐记录适配 低,读图即可 中,读协议即可 低,读注释即可

§3 它的真实身份

3.1 三个名字,三样东西

混淆几乎全部来自缩写。把三个名字摊开写,问题就消失了。

名称 全称 领域 内容 发布方
DriveDB Stress Recognition in Automobile Drivers 情感计算、生理信号 17 段实车驾驶多通道生理记录 MIT 情感计算组,PhysioNet 托管
DRIVE Digital Retinal Images for Vessel Extraction 医学影像、眼底 四十张眼底彩照与血管掩膜 荷兰 Utrecht,2004 年
drivedb PhysioNet 的库名,即上表第一行 同第一行 同第一行 同第一行

第二行那个数据集在中文语境里通常直接叫"DRIVE 数据集"或"DRIVE 挑战赛",是视网膜血管分割事实上的起点:四十张四十五度免散瞳眼底彩照,训练与测试各二十张,配两名标注者的像素级血管掩膜,另有视盘掩膜与视野掩膜。它的名字来自项目全称的首字母,与驾驶毫无关系。

第三行只是第一行在 PhysioNet 上的目录名。访问 physionet.org/content/drivedb/ 得到的页面标题是 Stress Recognition in Automobile Drivers,页面摘要第一句写的是健康志愿者在波士顿开车。这就是判定实体身份最直接的证据:看页面标题,不看目录名。

3.2 它在应激计算史上的坐标

把时间轴拉直,这份数据的位置相当靠前。2000 年前后,可穿戴生理采集还处在自制硬件的阶段,能连续记录多路信号并保持数小时稳定的设备,基本只存在于少数实验室。Healey 的工作正是在这个条件下完成的:自己搭采集装置,自己设计路线,自己招募志愿者,把车变成一个移动的记录舱。

它的学术输出有两条线。一条是 2000 年的博士论文,题为关于从生理信号做可穿戴与车载情感识别,把方法、硬件与实验设计写得最完整;另一条是 2005 年发表在 IEEE 智能交通系统汇刊上的期刊论文,卷六第二期,页码一百五十六到一百六十六,是这份数据被引用时最常挂的那一篇。两条线共用同一批数据,但侧重不同:论文讲结论,学位论文讲过程。

时间 事件 意义
2000 年 博士论文完成 采集方法、装置与实验设计的最完整记录
2005 年 期刊论文发表 数据被引用的主要入口
2008 年 5 月 15 日 上传 PhysioNet,编为 1.0.0 从实验室资产变成公共语料
2008 年至今 未再改版 单一版本,引用稳定,但也停止了维护

3.3 谁做了它,为什么公开

官方页面用一句话交代了来源:这份数据库由其创建者 Jennifer Healey 贡献给 PhysioNet。没有致谢名单,没有资助编号,没有伦理审批说明。这三项缺失在今天看来是合规上的空白,但在 2008 年的开放数据实践里并不罕见。

公开的动机,页面没有写。能确认的只有结果:原始的压力评分没有随数据一起发布。这是本文必须反复强调的边界——不是评分在别处可得,而是官方明确说不可得。任何声称拥有"官方标签"的版本,都需要被追问来源。

身份要素 官方是否给出 具体内容
采集者 给出 Jennifer Healey
所属机构 未直接给出,可由论文推知 MIT 媒体实验室情感计算组
资助来源 未给出 无
伦理审批 未给出 无
受试者人数 未给出 只有 17 段实验
压力评分 明确否定 不可得

3.4 身份层面的四个易错点

第一,把库名当全名。drivedb 是目录名,正式名称是 Stress Recognition in Automobile Drivers,引用时应写全名加版本号。

第二,把论文年份当数据年份。论文发表于 2005 年,数据采集在更早,上传 PhysioNet 在 2008 年。三个时间点各有各的用途:引用用 2005,取数用 2008,理解设计背景要回到 2000 年的学位论文。

第三,把"公开"理解为"完整"。公开的是信号,不是研究资料。评分、问卷、路线图、设备参数、受试者信息都没有随之开放。

第四,把"没有标签"理解为"数据质量差"。这两件事无关。信号本身是完整的,缺的是监督信号,原因很可能是当年没有形成可复用的评分体系,而非采集失败。

§4 质量与特色

4.1 唯一不可替代的东西:真实道路

如果只看规模,这份语料几乎没有竞争力:十七段、一百多兆、没有标签。它真正的稀缺性在于条件——同一个驾驶员的同一段行程里,同时存在市区拥堵、路口转弯、匝道汇入、高速巡航这几种负荷截然不同的情境,而生理信号是连续不断的。

实验室范式很难复制这一点。心算任务可以把难度调高,但它不涉及持续的手眼协调;公开演讲能诱发强烈的交感反应,但它没有方向盘和踏板。驾驶是少数同时要求认知负荷、感觉运动控制与风险预期的日常活动,而这种组合恰好是座舱感知最想捕捉的对象。

特色 具体表现 为什么稀缺
连续真实驾驶 单段最长九十三分钟,全程不断 实验室范式通常只有几分钟到十几分钟
情境自然切换 市区与高速在同一段行程内交替 可控实验很少把两种路况串在一次记录里
多部位皮肤电 手部与足部同时记录 多数库只测一处,无法做部位对照
双模态肌肉活动 右斜方肌肌电与驾驶操作直接相关 与握持、转向的力学负荷挂钩
早期硬件样本 2000 年前后的传感器与采集链路 今天无法复现,属于历史标本

4.2 三条硬约束

第一条是通道不齐。全库七种通道,没有任何一段同时具备全部七种。drive03 只有四路,drive01 与 drive03 缺事件标记,drive02 与 drive04 缺肌电。批量处理时若按固定通道列表读取,程序会在个别记录上抛错,或者更糟——静默按位置对齐,把呼吸读成心率。

第二条是单位缺失。头文件里只有心率通道声明了 bpm,其余通道的增益后面没有斜杠单位。这意味着心电的一千、肌电的一千到一万、标记通道的一百,都只能当作相对比例的换算系数,不能直接声称"这是毫伏"。跨记录比较绝对幅值是不安全的。

第三条是元信息为零。头文件没有注释行,没有受试者编号,没有年龄性别,没有设备型号。所有关于"谁在开、开什么车、走哪条路"的信息,都只能来自论文描述,而论文描述是概括性的,无法落到单条记录。

约束 受影响的用法 规避办法
通道不齐 批量读取、固定输入维度的模型 先建通道存在性矩阵,缺失通道补零并加掩码
单位缺失 绝对幅值比较、跨库拼接 只用相对变化或做逐记录 z 分数
元信息为零 分层分析、公平性评估、受试者划分 以记录为最小单位,不做人群推断
无注释文件 事件级分析 用标记通道或信号突变点自建事件表
版本冻结 依赖官方修复的期望 自行维护勘误清单

4.3 案例:drive03 的四通道残本

drive03 是理解这份语料异构性的最好样本。它的头文件首行是 drive03 4 31 172447——只有四路通道,帧率却是每秒三十一次,几乎是其他记录的两倍,总帧数十七万余,除以帧率得到约五千五百六十二秒,也就是九十三分钟,恰好是官方所述时长的上限。

四路通道分别是心电、足部皮肤电、手部皮肤电和呼吸。没有肌电,没有事件标记,也没有独立的心率序列。心电的复用因子是十六而不是常见的三十二,乘上翻倍的帧率,每秒仍是四百九十六点,与全库保持一致。这说明采集端在帧率与复用因子之间做过权衡,而权衡的规则没有文档。

import wfdb
import numpy as np

h = wfdb.rdheader('drive03', pn_dir='drivedb')
print(h.fs, h.sig_len, h.n_sig)      #-- 31 172447 4
print(h.sig_name)                     #-- 四路,无 EMG、无 marker

#-- 缺通道的记录必须单独走一条分支,不能与其他记录共用同一份通道表
need = ['ECG', 'EMG', 'foot GSR', 'hand GSR', 'RESP', 'HR', 'marker']
missing = [c for c in need if c not in h.sig_name]
print(missing)                        #-- ['EMG', 'HR', 'marker']

这个案例的价值在于它同时否定了三种想当然。第一,不能假设所有记录都有同一套通道;第二,不能假设帧率统一,三十一赫兹的记录混在十五点五赫兹的记录里;第三,不能假设时长一致,九十三分钟与二十九分钟同处一库。§2.4 的清单表之所以必要,理由就在这里。

同样的异构性还出现在记录内部。drive07 的手部皮肤电通道名写作 hand GSr,末尾的字母是小写;其余记录都是 hand GSR。用字符串精确匹配的代码会在这一条记录上静默丢失整路通道,而不会报错。drive12 的心电复用因子是二十三,drive15 是三十一,都不是二的幂,说明这两段记录的采集配置与其他记录不同源。§4.3 的案例因此不只是一个异常记录,而是整份语料"逐记录适配"这一要求的缩影。

4.4 与合成与实验室范式的对照

对照项 真实驾驶(本库) 实验室诱发范式 合成或仿真信号
生态效度 高 低到中 无
标注可得性 无 高 完全可控
伪迹来源 真实且多样 少 人为设定
可复现性 低,路线与交通不可复现 高 最高
适合的任务 表征学习、质量研究 分类、检测 算法单元测试
主要风险 无标签、样本少 场景失真 与真实分布脱节

§5 怎么拿到与怎么读

5.1 三个入口

官方提供三条取数入口,按使用场景选择即可。第一种是整包下载,适合一次拿全;第二种是逐文件目录,适合只取几段;第三种是对象存储同步,适合在服务器上批量拉取。此外,wfdb 工具箱支持不落盘的流式读取,适合边读边算。

入口 地址形态 适用场景 注意
项目页 ZIP 项目页上的下载按钮 本地一次性取全 一百多兆,解压后同名目录
逐文件目录 files/drivedb/1.0.0/ 只取少数记录 需自行拼接 URL
AWS 开放桶 s3://physionet-open/drivedb/1.0.0/ 服务器批量同步 免签名,需 AWS 命令行工具
wfdb 流式 pn_dir='drivedb' 边读边算,不落盘 每次调用都会发起网络请求

5.2 逐文件下载与完整性核对

#-- 建目录并取清单
mkdir -p drivedb && cd drivedb
curl -sL https://physionet.org/files/drivedb/1.0.0/RECORDS -o RECORDS

#-- 按清单逐个取头文件与信号文件
while read -r r; do
  curl -sL "https://physionet.org/files/drivedb/1.0.0/${r}.hea" -o "${r}.hea"
  curl -sL "https://physionet.org/files/drivedb/1.0.0/${r}.dat" -o "${r}.dat"
done < RECORDS

#-- 官方提供 SHA256SUMS.txt,可逐条比对
curl -sL https://physionet.org/files/drivedb/1.0.0/SHA256SUMS.txt -o SHA256SUMS.txt
sha256sum -c SHA256SUMS.txt 2>/dev/null | tail -5

清单共十八行,最后一行是 drive17b。这个文件的行为很规整,每行以换行结束,用行计数不会出错;但与某些心电库不同,它没有表头,也没有注释行,直接逐行读即可。

5.3 读取与帧平滑的陷阱

import wfdb
import numpy as np

def load_native(name):
    """按原始复用因子读取,不做帧平滑。"""
    rec = wfdb.rdrecord(name, pn_dir='drivedb', smooth_frames=False)
    hdr = wfdb.rdheader(name, pn_dir='drivedb')
    #-- 每个通道的每秒点数 = 帧率 x 复用因子
    rates = {}
    for i, nm in enumerate(rec.sig_name):
        spf = rec.samps_per_frame[i] if hasattr(rec, 'samps_per_frame') else 1
        rates[nm] = hdr.fs * spf
    return rec, rates

rec, rates = load_native('drive01')
print(rates)

这段代码的关键在两处。smooth_frames=False 保住原始采样;samps_per_frame 用来还原每通道的真实速率。如果所用版本的工具箱没有暴露这个属性,就退回读头文件的 16xN 字段自己解析,解析规则在 §2.2 的字段表里。

另一处陷阱是帧数与点数的区别。sig_len 是帧数,不是某一路通道的采样点数。对心电而言,总点数等于帧数乘三十二;对心率而言,总点数等于帧数。混用这两个概念,做时间轴对齐时会整体偏移。§4.3 的案例里那条帧率翻倍的记录,正是最容易在这里出错的对象:帧率三十一而心电因子十六,若直接把帧数当点数,整段信号的时间长度会被算短一半。

5.4 通道对齐与重采样

import numpy as np
from scipy.signal import resample_poly

def align(rec, rates, target=64):
    """把各通道重采样到统一速率,返回 (时间轴, 通道字典)。"""
    out = {}
    for i, nm in enumerate(rec.sig_name):
        src = rates[nm]
        x = rec.d_signal[:, i].astype('float64')
        if abs(src - target) < 1e-6:
            out[nm] = x
            continue
        ratio = target / src
        up, down = int(round(ratio * 1000)), 1000
        out[nm] = resample_poly(x, up, down)
    n = min(len(v) for v in out.values())
    t = np.arange(n) / target
    return t, {k: v[:n] for k, v in out.items()}

把目标速率定在六十四赫兹是一个工程折中:高于多数通道的原始速率,低于心电的四百九十六赫兹,既能保留皮肤电与呼吸的慢变成分,又不会让心电的存储膨胀。若研究重点是心率变异性,应保留心电原始速率单独处理,不要把 QRS 细节一起压掉。

5.5 标记通道能做什么

十六段记录里含 marker 通道,drive01 与 drive03 没有。标记通道的增益是一百,每帧一点,物理含义是实验者在特定时刻按下按钮留下的脉冲。官方页面没有说明每个脉冲对应什么事件,也没有给出编码表。

这意味着标记只能当作"事件发生了"的粗线索,不能当作语义标签。可行的用法有两种:一是用脉冲位置切分行程阶段,再人工对照论文里描述的路段顺序;二是用脉冲密度作为"操作繁忙程度"的粗糙代理,但必须明确这是代理而非真值。

用法 可行性 前提 风险
切分行程阶段 可行 需人工对照路段顺序 阶段边界不精确
作为操作负荷代理 谨慎可行 需在方法里说明代理性质 标记密度与负荷未必同向
当作应激真值 不可行 无编码表、无语义说明 结论无法成立
跨记录统一解析 不可行 两段记录根本无此通道 代码需分支处理

5.6 先做质检,再谈建模

import numpy as np
import wfdb

def qc(name):
    rec = wfdb.rdrecord(name, pn_dir='drivedb', smooth_frames=False)
    rows = []
    for i, nm in enumerate(rec.sig_name):
        x = rec.d_signal[:, i].astype('float64')
        rows.append({
            'ch': nm,
            'n': len(x),
            'flat': float(np.mean(np.abs(np.diff(x)) < 1e-9)),
            'p99': float(np.percentile(np.abs(x), 99)),
        })
    return rows

for r in ['drive03', 'drive07', 'drive13', 'drive14']:
    print(r)
    for row in qc(r):
        print('  ', row)

这段质检脚本只报三个量:长度、相邻点完全相等的比例、绝对值的九十九分位。第一个量用来发现通道长度不一致,第二个用来发现电极脱落导致的平直段,第三个用来发现幅值异常。三者都不涉及标签,也不涉及分布推断,纯粹是接数前的必要体检。

§6 与库内其他词条的关系

6.1 关系图谱

站内与这份语料有关联的条目分三类:同名混淆类、场景相近类、模态相近类。三类的关系强度差别很大,混在一起看容易误判。

库内词条 关系类型 关系强度 差异要点
DRIVE 视网膜血管分割金标准 同名混淆 无实质关系 眼底彩照与血管掩膜,与本库无任何交集
楼梯与驾驶路况原始加速度 场景相近 中 同为驾驶场景,但只记加速度,无生理通道
WESAD 穿戴式压力与情感 模态相近 强 同为多通道应激生理,但有四类情境标签
真实考场可穿戴生理 模态相近 中 同为真实场景应激,但有考试分段与成绩
66 名成人应激与自评量表 模态相近 中 同为应激,但有量表标签与 Fitbit 设备
INCART 十二导联心律失常库 模态相近 弱 同为 WFDB 与心电,但目标任务是心律失常
DEAP 多模态情绪 模态相近 弱 同为情感计算语料,但有自评维度标签
PPG-DaLiA 日常活动可穿戴 模态相近 弱 同为日常场景多模态,但任务是心率估计

6.2 检索路径

若从站内找这份语料,走"生理信号 → 可穿戴传感"这条标签链最快;若从"驾驶"这个场景切入,走加速度那条线会先撞上楼梯与驾驶路况那份数据;若从"应激"切入,会先撞上 WESAD 与考场应激两份,它们都有标签,容易被误认为更合适。

你的起点 会先遇到 是否该停 建议
搜 DRIVE 数据集 眼底血管分割词条 不该 那是另一个数据集,见 §3.1
搜驾驶场景 驾驶路况加速度 可停 若只需运动信息,那份更轻
搜应激生理 WESAD、考场应激 可停 若有监督需求,那两份更合适
搜无标签真实语料 本词条 该停 这是它不可替代的位置
搜 WFDB 多通道 INCART、本词条 视任务 心律失常选前者,驾驶应激选后者

6.3 与眼底 DRIVE 的区隔必须写清楚

这两个数据集在中文检索里几乎必然相遇,所以区隔不能只写一句"不是同一个"。下表把可能被混淆的每一个维度都摆出来。

维度 本库(drivedb) 眼底 DRIVE
全称 Stress Recognition in Automobile Drivers Digital Retinal Images for Vessel Extraction
数据类型 多通道时间序列 二维彩色图像
采集对象 健康志愿者的驾驶过程 糖尿病患者的视网膜
采集地点 美国波士顿 荷兰 Utrecht
发布年份 2008 年上传 2004 年发布
样本单位 一段驾驶记录 一张眼底照片
标签 无 双人像素级血管掩膜
主任务 应激表征、信号质量 血管分割
许可 ODC-BY 1.0 研究用途,需申请或按原始条款
站内词条 本词条 DRIVE 视网膜血管分割金标准

真正需要警惕的场景是文献综述。有些综述在列举"DRIVE 数据集"时会把两个都列进去,因为它们共享同一个缩写词根。看到一篇讲视网膜血管的论文引用 drivedb,基本可以判定引用错误;反过来,看到一篇讲驾驶应激的论文引用 Utrecht 的眼底数据,同样荒谬。

§7 质量评估与局限性

7.0 阅读本节前的一个前置校正

在给这份语料打分之前,需要先把评价标尺换掉。多数数据集评估的默认假设是"这份数据能不能直接训练模型",按这个标尺,本库几乎在所有维度都不及格:没有标签、样本极少、通道不齐、单位缺失。但这不是它的设计目标。

它的设计目标是把真实道路这个条件固定下来,并让它可被公开复现地访问。按这个标尺,它的完成度相当高:真实驾驶、连续多小时、多部位生理同步、开放许可、版本冻结。误判的来源正是把两种标尺混用——用监督学习的标准去衡量一份原料型语料,得到的结论必然是"不可用",而这个结论对使用者没有任何帮助。

下面的评分同时给出两个视角,第一个是作为监督学习数据源,第二个是作为真实场景原料。两个视角的分数差距本身就是这份语料的性格说明。

7.1 五维评分

维度 作为监督数据源 作为真实场景原料 理由
数据规模 1 2 十七段、一百多兆,任何视角下都偏小
标注质量 1 1 无标签,两个视角同分
任务适配 2 5 监督任务几乎不可用,原料价值极高
文档完整 2 2 页面极短,无设备、无协议细节、无人口学
可获取性 5 5 免注册、许可宽松、体量小、链接稳定

按 DAIMS 的常用维度看,作为监督数据源合计十一分,作为真实场景原料合计十五分,满分均为二十五。分差的来源只有一个:任务适配。这也解释了为什么它在文献里的出现方式往往是"用了它的信号",而不是"在它上面刷了指标"。

7.2 分数的具体依据

规模一项给低分,理由不是绝对体积,而是统计单元太少。十七段记录意味着任何受试者层面的分析都只有十几个样本,置信区间宽到无法支撑比较。一百多兆的体积在今天的存储条件下不算什么,但它对应的独立观测数极少。

文档一项给低分,理由更直接。官方页面正文不足两百词,没有设备型号、没有电极位置、没有采样链路、没有受试者信息、没有协议时间表。想还原采集条件,只能回到 2000 年的学位论文,而那篇论文描述的是当年那一批实验的整体设计,未必与公开的每一条记录严格对应。

可获取性给满分没有争议。免注册、直链、开放许可、体量小、十八个文件、清单规范、还有校验和文件。这在一众需要申请的数据集里属于最省事的一档。

评分项 扣分点 可缓解方式
数据规模 独立观测只有十七段 与实验室库混合使用,只把它当域外样本
标注质量 完全无标签 自建弱标签,并在论文里声明构造方式
文档完整 缺设备与协议细节 回溯 2000 年的学位论文补背景
任务适配 仅对表征与质量研究友好 明确研究问题后再决定是否使用

7.3 已知的、可枚举的偏差

选择偏差。 志愿者是健康成年人,愿意参与一项需要装戴多路传感器并驾驶数小时的实验。这类人群在风险偏好、驾驶经验、对监测的耐受度上都不同于一般驾驶员。官方没有公布招募标准,无法判断筛选强度。

地理偏差。 全部采集在波士顿及周边完成。道路几何、交通密度、驾驶习惯、天气条件都属于美国东北部的城市形态。把在此训练的模型直接用于其他地区,需要额外验证。

时间偏差。 采集发生在 2000 年前后,车辆、传感器、交通环境都是那个年代的。今天的车辆在隔音、悬架、辅助驾驶上的差异,会改变驾驶员的生理负荷结构。

设备偏差。 肌电通道的增益在一千到一万之间变动,皮肤电的测量部位分手脚两处,呼吸通道的复用因子有两种。这些差异不一定是错误,但会让跨记录的绝对幅值不可比。

重复风险。 drive13 与 drive14 除手部皮肤电外,其余六路的初值、校验和、总帧数完全一致。这强烈提示两条记录来自同一次采集的两次导出,drive13 缺了手部皮肤电那一路。若把十八条记录当作十八个独立样本,会引入重复计数。

偏差类型 表现 影响 处理建议
选择偏差 健康、自愿、能耐受长时佩戴 不代表一般驾驶员 只做方法验证,不做人群推断
地理偏差 单一城市、单一国家 跨地区迁移需重验 作为域外测试而非训练主力
时间偏差 2000 年前后的车辆与设备 与当代硬件脱节 明确标注为历史样本
设备偏差 增益与部位不一致 绝对幅值不可比 逐记录归一化后用相对量
重复风险 drive13 与 drive14 高度重合 独立样本数被高估 二者只取其一,或明确合并

7.4 外部验证矩阵

这份语料能被哪些外部证据支撑,逐项列清比笼统说"有文献支持"更有用。

验证项 是否有外部证据 证据形态 可信度
数据确为实车驾驶采集 有 官方摘要与论文标题 高
通道类型与数量 有 头文件可逐条核对 高
时长区间 有 官方描述与帧数换算互证 高
受试者人数 无 官方未公布 低
压力评分存在性 有,且为否定 官方明确写不可得 高
采集设备型号 无 官方未公布 低
标注一致性 不适用 无标注 不适用
训练测试划分 无 官方未提供划分 低

7.5 它为何能持续:稀缺条件的独占

一份没有标签、十七段、十八年未更新的数据集,按理早该被遗忘。它没有,原因不在数据本身有多好,而在于它占住了一个别人不愿重复的位置:真实道路、连续多小时、多部位外周生理、完全开放。

复制这个条件的成本极高。要重新做一遍,需要伦理审批、车辆改装、多路同步采集设备、愿意开几小时车的志愿者,以及一套能保证信号质量的流程。做出来之后,还得愿意无偿公开。愿意付这笔成本的人本来就少,愿意在付完之后放弃标签的就更少。于是这份语料成了事实上的一手史料:新方法要证明自己在真实驾驶场景下站得住,绕不开它。

§8 生态位与历史

8.1 一条从实验室走向道路的线索

情感计算这个领域在九十年代末的一段核心争论是:实验室里诱发的情绪,能不能代表真实生活中的情绪。这场争论推动了整整一代"走出实验室"的采集尝试,驾驶是其中最受欢迎的场景之一,因为它同时具备生态效度与可操作性——受试者被固定在座位上,动作范围可控,而环境又足够复杂。

本库是这批尝试里最早被公开托管的一份。它的出现时间点很关键:2008 年,PhysioNet 已经在心电、脑电、重症监护几个方向积累了成熟的托管经验,但对"多参数外周生理 + 日常场景"这类语料还几乎没有收录。它算是开了个口子。

阶段 时间 特征 代表产物
装置自制期 1998–2001 采集硬件靠实验室自研 博士论文中的采集系统
结论输出期 2001–2005 方法定型,论文发表 智能交通系统汇刊论文
公共化期 2005–2008 数据整理上传,进入公共目录 PhysioNet 1.0.0
冻结期 2008 至今 不再更新,成为稳定引用源 单一版本

8.2 与后续数据集的分工

后来的应激数据集大多走了另一条路:把协议标准化,把标签做扎实,把样本量做大。这条路解决了可训练性的问题,代价是场景被重新收进实验室或者半受控的日常。两者不是替代关系,而是分工。

代际 典型形态 强项 弱项
第一代(本库) 真实场景、无标签、样本少 生态效度 不可直接训练
第二代 半受控协议、四类情境标签 可训练、可复现 场景简化
第三代 可穿戴长时监测、自评量表 标签丰富、周期长 设备与依从性干扰

按这个分代看,本库的位置很清楚:它是第一代的实物证据,不是被淘汰的旧版本。研究者在讨论"实验室范式是否失真"时,需要它作为对照;在做域外泛化时,需要它作为真实分布的一个取样点。

8.3 生态位:原料而不是产品

把站内相关词条按"原料—产品"排一排,本库在最靠原料的一端。它提供的是未经标注的原始波形,中间没有任何加工层。往右走一步是带弱标签的版本,再往右是带完整协议标签的实验室库,最右端是已经切好窗、分好折、配好基线的基准集。

位置 特征 站内对应 适合谁
原料端 原始波形,无标签 本词条 做表征、做质量、做方法学
弱标签端 由路况或信号推断的粗标签 无 做探索性分析
协议标签端 有明确情境分段的应激库 WESAD 一类 做分类、做对比
基准端 固定划分与评测脚本 各类挑战赛数据集 做排行、做复现

8.4 它不会被替代的部分

有三件事,后来的数据集基本不会去做。第一,用 2000 年前后的硬件采一遍真实驾驶,这在物理上已经不可能。第二,把原始评分剔除后仍然公开信号,这种"只给原料"的做法在今天的数据治理环境下越来越少见。第三,保持十八年不改版,让引用永远指向同一份字节。

这三点合起来,构成了它的不可替代性。不是因为好,而是因为独特且不可复制。

§9 使用指引

9.1 三种角色的路径

角色 第一天 第一周 注意事项
生理信号研究者 读 §2.4 的通道清单,跑通 §5.3 的原生读取 建立逐记录的通道矩阵与速率表,做质检 不要用默认参数读,帧平滑会毁掉高频
座舱算法工程师 抽一段市区与一段高速做对照 量化两种路况下的生理差异,做域外检验 结论只能是相对的,幅值不可跨设备比较
教学与人因研究 用 §4.3 的案例讲异构性 让学生手工对齐一条记录的七路通道 强调无标签这一事实,避免误当分类作业

9.2 一条最短的可用流程

#-- 1. 取清单与前三条记录
cd /tmp && mkdir -p drive_demo && cd drive_demo
curl -sL https://physionet.org/files/drivedb/1.0.0/RECORDS -o RECORDS
head -3 RECORDS | while read -r r; do
  curl -sL "https://physionet.org/files/drivedb/1.0.0/${r}.hea" -o "${r}.hea"
  curl -sL "https://physionet.org/files/drivedb/1.0.0/${r}.dat" -o "${r}.dat"
done
ls -lh
import wfdb
import numpy as np

#-- 2. 读原生信号,确认每路速率
rec = wfdb.rdrecord('drive05', pn_dir='drivedb', smooth_frames=False)
hdr = wfdb.rdheader('drive05', pn_dir='drivedb')
print('帧率', hdr.fs, '帧数', hdr.sig_len, '通道', rec.n_sig)
for i, nm in enumerate(rec.sig_name):
    print(i, nm, rec.d_signal[:5, i])

#-- 3. 取一段十分钟的皮肤电,做简单去趋势
x = rec.d_signal[:, rec.sig_name.index('hand GSR')].astype('float64')
seg = x[:int(hdr.fs * 600)]
detrended = seg - np.convolve(seg, np.ones(31) / 31, mode='same')
print(detrended.shape, float(np.std(detrended)))

这段流程刻意跳过了重采样与对齐,因为第一步要看的是"数据长什么样",不是"模型能不能跑"。把通道数、帧率、幅值范围三个量打印出来,比任何文档都直观。

9.3 引用方式

引用对象 内容 用途
数据集 Stress Recognition in Automobile Drivers, version 1.0.0. PhysioNet. 2008. 数据出处
原始论文 Healey J A, Picard R W. Detecting stress during real-world driving tasks using physiological sensors. IEEE Transactions on Intelligent Transportation Systems, 2005, 6(2): 156–166. 方法与结论出处
学位论文 Healey J A. Wearable and automotive systems for affect recognition from physiology. MIT, 2000. 采集细节出处
平台 PhysioNet 平台综述,按官方页面引用按钮生成 托管平台出处

写论文时建议注明三点:使用的版本号(全库只有 1.0.0)、是否关闭了帧平滑、以及通道换算的方式。这三点决定了结果能不能被别人复现。

§10 AI 使用声明

项目 声明
文本生成 本文由 AI 辅助撰写,结构与事实由编辑把关
数字来源 规模、结构、边界三类数字来自 PhysioNet 官方页面与文件目录
文件核验 RECORDS、十八个头文件、SHA256SUMS.txt 经直接访问确认
实体判定 以官方页面标题与摘要为准,判定为驾驶应激库而非眼底影像库
论文信息 仅核对 Crossref 的书目元数据与官方页面引用,未读全文
换算数字 每秒点数由帧率乘复用因子得出,非官方页面直接给出
未核验内容 受试者人数、设备型号、电极位置、标记通道的编码含义
图像 无配图;封面为生成式提示词,不含真实照片或波形截图
免责 本文不构成临床或安全建议;使用须遵守 ODC-BY 1.0 署名要求

常见误读(避坑清单)

说法 实际 证据
「drivedb 就是眼底 DRIVE」 完全不同的数据集 官方页面标题为 Stress Recognition in Automobile Drivers
「它带压力评分」 官方明确说评分不可得 数据描述段末句原文否定
「它有十七名受试者」 官方只给十七段实验,人数未公布 页面无人口学字段,头文件无注释行
「它是十八个独立样本」 drive13 与 drive14 高度重合 两段除手部皮肤电外校验和与帧数一致
「所有记录都有七路通道」 最少四路,最多七路 drive03 头文件只声明四路
「采样率是 15.5 赫兹」 那是帧率,逐通道还要乘复用因子 头文件 16x32、16x128 等字段
「它没有注释文件所以数据不全」 信号完整,缺的是标签 十八个 .dat 与 .hea 齐全,无 .atr
「通道名可以精确匹配」 drive07 的手部皮肤电拼作 hand GSr 该记录头文件第 5 行
「它可以直接做应激分类」 无标签,必须先自建标注协议 全库无任何标签文件
「它是健康人的正常基线」 健康志愿者在驾驶,不是静息基线 官方摘要描述的是驾驶过程

FAQ

Q1:PhysioNet 的 drivedb 是不是眼底血管分割那个 DRIVE?
不是。两者只是缩写撞车。本库全名是 Stress Recognition in Automobile Drivers,内容是实车驾驶时的心电、肌电、皮肤电与呼吸;眼底 DRIVE 的全名是 Digital Retinal Images for Vessel Extraction,四十张眼底彩照配血管掩膜,2004 年由荷兰 Utrecht 发布。数据模态、场景、机构都没有交集。

Q2:它带压力评分或应激等级标签吗?
不带。官方页面在数据描述段末尾写明原始研究的压力评分不可得。目录里只有 .hea 与 .dat,没有注释文件。任何带标签的版本都是第三方二次加工,使用时必须交代标签的构造方式。

Q3:一共多少受试者?
官方没有公布。页面只说有十七段实验,其中十六段完整,第十七号拆成 a、b 两段。这十七个编号是否对应十七个人,官方没有说明,头文件里也没有受试者编号。

Q4:为什么读出来的肌电只有十几赫兹?
因为多路信号按帧复用存储,读取工具的默认帧平滑会把每帧多采样的通道压回记录帧率。drive01 的肌电每帧采一百二十八次,默认读取后高频细节会被抹掉。要拿原始速率,必须关闭帧平滑,再按帧率乘复用因子换算。

Q5:没有标签还能做什么?
三类用法最实在:无监督的生理状态表征与聚类、自监督预训练的真实道路语料、信号质量与通道对齐的方法学试验床。要做有监督的应激识别,必须自建标注协议,并接受只有十七段样本这一事实。

Q6:能和 WESAD 这类实验室应激库混用吗?
可以对照,不能直接拼接训练。两者在场景、设备、皮肤电测量部位、标签定义上都不同,混用前要做通道语义映射与幅值归一化,否则模型学到的是设备差异而不是应激差异。

Q7:为什么有的记录没有事件标记?
官方没有解释。从数据本身看,drive01 与 drive03 的头文件里没有 marker 通道,其余十六段都有。做统一流程时必须为这两段写分支,否则会因通道缺失而报错或错位。

Q8:标记通道的每个脉冲代表什么?
官方没有给出编码表。能确认的只是它是实验者手动按下的脉冲,用于标记特定时刻。可用作切分行程阶段的粗线索,但不能当作语义标签,更不能当作应激真值。

Q9:通道的物理单位是什么?
只有心率通道在增益字段里声明了 bpm,其余通道没有单位。这意味着心电、肌电、皮肤电、呼吸的增益只能当相对换算系数,不能直接当作毫伏或其他物理量。跨记录比较绝对幅值不安全。

Q10:为什么 drive13 和 drive14 看起来一样?
两条记录除手部皮肤电外,其余六路的初值、校验和、总帧数完全一致,drive13 缺了手部皮肤电那一路。这提示是同一次采集的两次导出。把十八条当十八个独立样本会引入重复计数,实际独立单元更少。

Q11:许可允许商业使用吗?
ODC-BY 1.0 允许,包括商业用途,条件是署名。引用时写清数据集名称、版本与来源,具体条款以官方许可全文为准。

Q12:它还会更新吗?
从 2008 年 5 月发布 1.0.0 至今没有改版,官方也没有给出更新计划。采集已完成、论文已发表、数据已冻结,继续维护的动力很小。可以按"永久冻结"来规划依赖。

术语表

术语 解释
WFDB PhysioNet 使用的波形数据库格式,含头文件与信号文件
.hea 纯文本头文件,声明通道、帧率、增益与校验和
.dat 二进制信号文件,多通道按帧交错存放
帧率 每秒的帧数,不是每通道的采样率
复用因子 每帧内每个通道采样的次数,写作 16xN 的 N
帧平滑 读取工具把多采样通道压回帧率的默认行为
增益 ADC 整数与物理量之间的换算系数
ADC 零值 零电平对应的整数值,换算前先减
校验和 采样点累加和,用于检测文件损坏
皮肤电反应 汗腺活动导致皮肤电导变化,反映交感兴奋
GSR Galvanic Skin Response,皮肤电反应的旧称
EDA Electrodermal Activity,皮肤电活动,与 GSR 同源
肌电 肌肉电活动,本库采集右斜方肌
斜方肌 颈肩部肌肉,与握持、转向的紧张度相关
呼吸带 记录胸腹起伏的传感装置,输出呼吸波形
心率变异性 相邻心搏间期的波动,反映自主神经调节
事件标记 实验者手动按下的脉冲,用于标记时刻
生态效度 实验条件与真实生活情境的接近程度
域外泛化 模型在训练分布之外的数据上的表现
自监督学习 用数据自身构造监督信号,无需人工标签
表征学习 学习数据的低维表示,供下游任务使用
情感计算 让机器识别与响应人类情绪状态的研究方向
ODC-BY 开放数据共享署名许可,允许商用需署名
PhysioNet 由 MIT 等机构维护的生物医学数据平台

附录 A:核心数字核对表

项 值 来源 来源层级
记录文件数 18 官方文件目录;RECORDS 逐行 官方文件
实验段数 17 官方页面数据描述段 官方页面
完整实验时长区间 65–93 分钟 官方页面数据描述段 官方页面
drive17a 时长 29 分钟 官方页面数据描述段 官方页面
drive17b 时长 25 分钟 官方页面数据描述段 官方页面
通道种类 7 十八个头文件汇总 官方文件
单记录通道数区间 4–7 十八个头文件汇总 官方文件
帧率取值 15、15.5、31 头文件首行第 3 字段 官方文件
未压缩体积 108.7 MB 官方页面文件区 官方页面
版本号 1.0.0 官方页面版本栏 官方页面
发布日期 2008-05-15 官方页面 官方页面
数字对象标识 10.13026/C2SG6B 官方页面 官方页面
许可 ODC-BY 1.0 官方页面 官方页面
压力评分 不可得 官方页面数据描述段 官方页面
受试者人数 未公布 官方页面无此字段 未核实
采集设备型号 未公布 官方页面无此字段 未核实

附录 B:数字的来源分层

第一层:官方页面。 实验段数、时长区间、通道种类、体积、版本、日期、标识、许可、压力评分不可得。这些数字来自项目页的摘要段与数据描述段,是整个词条最硬的支撑。

第二层:官方文件。 记录清单的十八行、逐记录的通道数与通道名、帧率、复用因子、增益、帧数、校验和。这些来自 RECORDS 与十八个头文件的直接读取,可以逐字节复核。其中每秒点数不是文件里直接写的,而是帧率与复用因子的乘积,属换算值,已在 §2.4 标注。

第三层:论文与外部书目。 论文的期刊、卷期、页码来自官方页面给出的引用条目,并由 Crossref 的书目元数据交叉确认。论文的具体实验设计、受试者规模、设备参数没有进入本文的断言,因为未读全文。

第四层:未核实。 受试者人数、年龄性别构成、设备型号、电极位置、标记通道的编码含义、drive13 与 drive14 是否确为同一次采集。这些在正文里一律以"官方未公布"或"疑为"表述,不给确定结论。

附录 C:完整参考文献

编号 文献或资源 链接 用途
1 Stress Recognition in Automobile Drivers v1.0.0 https://physionet.org/content/drivedb/1.0.0/ 全部规模、结构、边界数据的来源
2 该库文件目录 https://physionet.org/files/drivedb/1.0.0/ RECORDS、头文件、校验和文件
3 Healey 与 Picard,2005,IEEE 智能交通系统汇刊 https://doi.org/10.1109/TITS.2005.848368 方法与结论出处
4 Healey 博士论文,MIT,2000 官方页面参考文献栏 采集装置与实验设计背景
5 PhysioNet 平台综述 https://doi.org/10.1038/s44360-026-00096-z 托管模式与引用规范
6 WFDB 格式规范 https://physionet.org/physiotools/wfdb.shtml 头文件字段语义
7 眼底 DRIVE 数据集(区隔对照) 站内 DRIVE 词条 §3.1 与 §6.3 的对比
8 楼梯与驾驶路况加速度(场景对照) 站内对应词条 §6.1 的驾驶场景对照

附录 D:任务代码

任务一:全库通道矩阵与速率表

import wfdb
import pandas as pd

rows = []
for r in wfdb.get_record_list('drivedb'):
    h = wfdb.rdheader(r, pn_dir='drivedb')
    for nm in h.sig_name:
        rows.append({'record': r, 'channel': nm, 'frame_rate': h.fs})

df = pd.DataFrame(rows)
matrix = df.pivot_table(index='record', columns='channel',
                        values='frame_rate', aggfunc='first')
print(matrix.notna().sum())
print(matrix.shape)
matrix.to_csv('drivedb_channel_matrix.csv')

任务二:把一段记录转成规范长表

import wfdb
import numpy as np
import pandas as pd

def to_long(name, target=64):
    rec = wfdb.rdrecord(name, pn_dir='drivedb', smooth_frames=False)
    hdr = wfdb.rdheader(name, pn_dir='drivedb')
    frames = []
    for i, nm in enumerate(rec.sig_name):
        spf = rec.samps_per_frame[i] if hasattr(rec, 'samps_per_frame') else 1
        rate = hdr.fs * spf
        x = rec.d_signal[:, i].astype('float64')
        #-- 先按原始速率展开时间轴,再线性插值到目标速率
        src_t = np.arange(len(x)) / rate
        n = int(src_t[-1] * target) + 1
        dst_t = np.arange(n) / target
        frames.append(pd.DataFrame({
            'record': name, 'channel': nm,
            't': dst_t, 'v': np.interp(dst_t, src_t, x),
        }))
    return pd.concat(frames, ignore_index=True)

out = to_long('drive16')
print(out.groupby('channel')['v'].agg(['count', 'min', 'max']))
out.to_parquet('drive16_long.parquet', index=False)

第二段代码的插值是有损的,仅用于构造统一下游接口。若研究重点是心电形态或肌电频谱,应保留原始速率,在建模侧按通道分组处理,而不是在数据侧压到同一网格。

附录 E:如果只记五件事

序号 记住什么 为什么
1 它是驾驶应激生理库,不是眼底 DRIVE 名字撞车,认错一次后面全错
2 十七段实验、十八个文件、无标签 这三个数字决定了它能做什么
3 帧率不是采样率,要乘复用因子 默认读取会丢掉高频肌电
4 通道不齐、单位缺失、元信息为零 批量处理前必须先建通道矩阵
5 它的价值在真实道路这个稀缺条件 当原料用,别当训练集用

编辑说明

核验时间为 2026 年 10 月 28 日。核对方式为直接访问 PhysioNet 项目页,逐条读取 RECORDS 与十八个头文件,并比对 SHA256SUMS.txt 是否存在;论文侧只核对 Crossref 的书目元数据与官方页面给出的引用条目,未读全文。实体判定依据是页面标题与摘要首段,而非目录名,因此可以确定它不是眼底影像数据集。文中所有"每秒点数"均为帧率与复用因子的乘积,属换算值而非官方直接给出的数字,已在 §2.4 与附录 B 分别标注。未覆盖的内容包括受试者人数与构成、设备型号与电极位置、标记通道的编码含义、以及 drive13 与 drive14 是否确为同一次采集——这些官方均未公布,文中只作"未公布"或"疑为"的表述,不做推断。规整性方面,RECORDS 每行以换行结束,不存在行计数偏差;头文件无注释行,故不存在可解析的患者字段。


相关数据集导航

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

  • butqdb — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • wearable-exercise-frailty — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • ephnogram — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • ecgiddb — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • macecgdb — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • ecg-spider-clip — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • wrist — 共享标签:生理信号 / 心电信号 / 可穿戴传感
  • argo — 共享标签:生理信号 / 心电信号
  • icehg-ds — 共享标签:生理信号 / 心电信号
  • unicaprop — 共享标签:生理信号 / 可穿戴传感

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

返回 AI-Ready 数据集