信息速览
长期卧床的人最怕的不是病本身,是皮肤在自己身下慢慢坏死。压力性损伤(pressure injury,旧称压疮、褥疮)的预防手段朴素得近乎原始:定时翻身,让骨突部位轮流离开受压状态。这条建议在教科书里写了几十年,落到病房里却高度依赖护理人员的记忆与体力——夜间两小时一次的翻身,在一个人管十几张床的班次上很难做到位。于是自动化睡姿识别成了一个长期有需求、长期缺数据的方向:摄像头在夜间与私密场景里难以部署,可穿戴设备要患者愿意戴,压力传感垫是这三者里最不打扰人的一个,却也最难拿到公开数据——厂商的阵列数据不开放,学术团队自建采集又往往只有个位数的受试者。
PMD 压力图库是这个缺口上为数不多的公开答案。德克萨斯大学达拉斯分校的生活质量技术实验室在 2017 年 9 月把两次采集的结果挂到 PhysioNet 上,内部称 PmatData。它用了两张商用压力垫:实验一是 13 名受试者在 32×64 阵列上躺出 17 个姿势,每姿势约两分钟、逐帧保留;实验二是 8 名受试者在 27×64 阵列上躺出 29 种状态,海绵垫与交替充气垫各来一遍,但每文件只留下约 20 帧的平均。两次采集共用一批人,却用不同设备、不同阵列、不同值域,因此它不是一个可以直接拼起来的大库,而是两块形状不同的拼图。这一点决定了它几乎所有用法与所有限制。
它的边界同样清楚:受试者是十几位年轻健康成年人,不是卧床患者;姿势是按要求摆出来的静态姿势,不是自然睡眠中的连续翻身;标签藏在文件名里,而编号与姿势名的对照只以图示形式放在一个 Word 文档内。一屏速览见下表。
| 维度 | 内容 |
|---|---|
| 全名 | A Pressure Map Dataset for In-bed Posture Classification(内部简称 PmatData) |
| 发布方 | PhysioNet(原始数据由德克萨斯大学达拉斯分校 QoLT 实验室贡献) |
| 首次发布 | 2017 年 9 月 28 日,版本 1.0.0 |
| 最近改动 | 2019 年 2 月 20 日,补算 SHA256SUMS.txt;数据文件时间戳为 2017 年 9 月 27 日 |
| 文件总数 | 689(SHA256SUMS.txt 清单条数) |
| 受试者数 | 实验一 13 名,实验二 8 名;两次采集共用部分受试者 |
| 姿势与状态数 | 实验一 17 个(8 种标准姿势 + 9 种附加状态);实验二 29 种状态(3 种标准姿势) |
| 传感阵列 | 实验一 32×64(2048 点);实验二 27×64 |
| 采样率 | 1 Hz |
| 单文件形态 | 实验一:每文件多帧,官方称约 120 帧、约两分钟;实验二:每文件一帧,为约 20 帧的平均 |
| 读数范围 | 实验一 [0-1000];实验二 [0-500] |
| 采集设备 | Vista Medical FSA SoftFlex 2048;Vista Medical BodiTrak BT3510 |
| 人口学信息 | 两份 CSV 给出受试者编号、年龄、身高(cm)、体重(kg) |
| 文件格式 | 纯文本;实验一制表符分隔、逐行一帧;实验二空格分隔、64 行×27 列 |
| 体积 | 解压后 102.2 MB,ZIP 包 102.3 MB |
| 伦理批准 | 德克萨斯大学达拉斯分校伦理委员会 UTD IRB #11-59 |
| 许可 | Open Data Commons Attribution License v1.0(ODC-BY 1.0),无需注册 |
| DOI | 10.13026/C2W09K |
| 典型用途 | 在床姿势分类、压力性损伤风险区识别、床垫材质对比、跨域小样本评测 |
§1 它要解决的具体麻烦
1.1 压力垫有数据,学术界没有
压力传感垫在临床上并不罕见。康复科用它评估坐姿承重,烧伤科与骨科用它看骨突部位的受压分布,长期照护机构把它铺在床垫下当压力分布监测。设备端的技术已经成熟——柔性阵列、每分钟若干帧、配套软件能直接画出彩色压力云图。真正稀缺的不是设备,而是设备产出的原始数据:厂商软件通常只给可视化结果与汇总指标,逐传感点的原始矩阵不导出,或者只在本机格式里存着。
学术侧的采集又面临另一重限制。一次规范的在床压力采集需要受试者躺在垫子上按指令摆姿势,每个姿势保持若干分钟;受试者要招募、要过伦理、要签知情同意,采集一次要占用实验室半天。这类成本天然把规模压到个位数到十几人。结果是公开文献里大量睡姿识别方法各自在私有数据上评测,彼此之间无法比较,方法学的进步难以累积。
还有一层障碍更隐蔽:压力图不像心电那样有通用的公开格式与成熟工具链。心电领域有 WFDB 这类沿用几十年的格式,有统一的注释码,有现成的读写库,因此跨库比较是常态;压力阵列则连"一幅图该按行存还是按列存"都没有约定,各家的导出格式、单位、标定方式都不一样。缺少共同格式,就意味着即使有人愿意公开,接收方也要为每份数据写一遍解析代码。这也是为什么一个一百多兆、只有二十来人的压力图库,能在细分方向里被反复引用——它替后来者省掉的正是这一遍解析。
PMD 想解决的正是这一层:把一次规范的、带伦理批准的采集,连同逐传感点的原始矩阵,按开放许可整包发布,让后续方法有一个共同的起跑线。它的作者在原论文摘要里写明动机是睡眠质量与在床行为分析,以及压疮预防。
1.2 三条常见的错误期待
第一条,期待它是"患者的临床数据"。受试者是十几位年轻健康成年人,两份 CSV 给出的年龄全部落在二十岁区间到三十岁出头,身高与体重也是健康成年人的范围。长期卧床患者常见的肌肉萎缩、水肿、体位性 deformity 造成的压力图形态,在这里找不到。用它训练出来的模型,直接搬到临床人群上有系统性的形态差异。
第二条,期待它是"整夜睡眠的记录"。每个姿势是按要求摆好之后保持两分钟左右的一段,不是从入睡到醒来的连续记录。翻身过程、姿势之间的过渡、夜间自发姿势调整的动态,都不在文件里。想做翻身检测或者"某部位累计受压时长"这类指标,只有实验一的帧序列勉强可用,而它的单文件只有几十到一百多帧。
第三条,期待它是"一个数据集"。两个实验的阵列尺寸不同、读数范围不同、文件形态不同,连受试者编号都不是同一套。把它们当成一个库的两个 split 直接喂进模型,是最常见的错误用法(§5.6)。
1.3 它能给到的与给不到的
| 你的需求 | 它给的 | 够不够 |
|---|---|---|
| 单帧压力图的姿势分类 | 实验一 13 人×17 姿势、实验二 8 人×29 状态×2 床垫,标签就在文件名里 | 够,这是它设计的原始任务 |
| 压力性损伤高风险区(骶尾、足跟、肩胛)定位 | 全阵列压力图,骨突部位压力集中可见 | 够做方法与可视化,无临床压疮结局标签 |
| 床垫材质对压力分布的影响 | 实验二对同一批人、同一批姿势分别采海绵垫与交替充气垫 | 够,这是它独有的对照设计 |
| 翻身次数、受压时长累积 | 实验一逐帧序列,1 Hz | 不够,单文件只有约两分钟,且非连续睡眠 |
| 临床人群的压力图建模 | 无 | 不够,全部为健康年轻成年人 |
| 跨设备泛化验证 | 两张不同厂商、不同阵列尺寸、不同值域的垫子 | 够,跨设备对照正是它的强项 |
| 大规模预训练 | 689 个文件、21 名受试者量级 | 不够,样本量级只够做小样本评测 |
| 连续多夜的纵向追踪 | 无 | 不够,无时间跨度的重复采集 |
1.4 你的处境与它能帮到的事
| 你的处境 | 它能帮你什么 | 下一步该做什么 |
|---|---|---|
| 你写了一个姿势分类器,想找一个公开基准而不是自己的私有数据 | 提供逐传感点原始矩阵与明确的姿势标签,可直接复现实验设置 | 先用实验一做 17 类分类,再单独跑实验二的 29 类,两者分开报告 |
| 你在做压力性损伤风险区识别 | 全阵列图可定位压力集中区,骨突部位的压力集中形态清晰 | 按受试者划分训练与测试,报告分受试者的结果而不是分文件 |
| 你在比较床垫材质 | 实验二同人同姿势分采海绵垫与气垫,是天然配对设计 | 按受试者配对比较同一编号文件,不要跨受试者比 |
| 你要验证模型跨传感阵列尺寸是否稳健 | 32×64 与 27×64 两种阵列,同属在床压力图 | 统一插值到同一尺寸后再比,并在方法里写明插值方式 |
| 你想做时间序列的翻身检测 | 实验一保留了帧序列,1 Hz | 先确认帧数够用:单个文件只有约两分钟,翻身事件本身不在数据里 |
| 你在写综述,需要一个公开压力图数据集的例子 | 有 DOI、有伦理批准号、有许可、有配套论文 | 引用 1.0.0 版本与原论文,注明两个实验不可合并 |
1.5 一句话判断
它不是"更大的训练集",而是"更干净的共同起跑线":把两套商用垫子、两批受试者、几十种在床姿势的逐点压力矩阵按开放许可摆出来,让彼此无法比较的方法第一次能比。
1.6 不适合谁:四条边界
不适合拿来做临床人群建模。 受试者全部是健康年轻成年人,没有一个卧床患者。压力图形态、体压分布、骨突突出程度都偏向健康体型。
不适合拿来训练大规模深度模型。 受试者级样本只有二十人上下,文件级样本几百个,且同一人的多个姿势高度相关。用文件数当样本量会直接得到虚高的成绩。
不适合拿来做纵向或连续监测研究。 数据是分姿势切好的静态片段,没有整夜、没有多夜、没有翻身过程。
不适合拿来做跨实验的直接拼接。 两个实验的阵列尺寸、值域、文件形态都不同,强行拼在一起等于制造一个来源混杂的数据集,而这种混杂在结果里看不出来。
§2 数据构成与规格
2.1 两次采集,两种设备,两套规格
官方页面把这次发布描述为两个独立实验,实验一在前、实验二在后,两者在设备、阵列、文件形态上都不同。下面这张表是理解全库的第一张表——后续所有用法上的分歧,几乎都能追到这几行的差别。
| 对比项 | 实验一(experiment-i) | 实验二(experiment-ii) |
|---|---|---|
| 采集设备 | Vista Medical FSA SoftFlex 2048 | Vista Medical BodiTrak BT3510 |
| 传感阵列 | 32×64 | 27×64 |
| 单帧点数 | 2048 | 1728(27×64) |
| 读数范围 | [0-1000] | [0-500] |
| 采样率 | 1 Hz | 1 Hz |
| 受试者目录 | S1–S13 | S1–S8 |
| 每受试者文件数 | 17 | 海绵垫 29 + 充气垫 29(两份清单略有出入) |
| 文件命名 | 1.txt–17.txt |
Matrix_Air_<组><号>.txt / Matrix_Sponge_<组><号>.txt |
| 分隔方式 | 制表符 | 空格 |
| 每文件行数 | 多帧,官方称约 120 帧 | 64 行(即一幅图) |
| 时间信息 | 保留帧序列 | 已平均成单帧,时间信息被压掉 |
两张垫子的差别不只是尺寸。32×64 的 FSA SoftFlex 是铺在床面上的柔性垫,27×64 的 BodiTrak BT3510 是另一条产品线,二者在传感器密度、标定方式、读数上限上都不一致。官方页面对实验二特别说明"这是原始数据,逐传感器报数",对实验一也同样说明,但两者的数域不同,说明两次采集的标定并不统一。
2.2 字段与文件的完整字典
本库没有表头文件,字段含义全部落在目录结构、文件名与两份 CSV 里。下表逐条列出可确认的信息项。
| 信息项 | 所在位置 | 取值形态 | 含义 | 使用注意 |
|---|---|---|---|---|
| 实验编号 | 一级目录 | experiment-i / experiment-ii |
两次独立采集 | 不可混用 |
| 受试者编号 | 二级目录 | S1–S13(实验一)、S1–S8(实验二) |
受试者标识 | 两个实验的编号各自独立 |
| 姿势编号 | 实验一文件名 | 1.txt–17.txt |
17 个姿势/状态 | 编号与姿势名对照只在 docx 图示里 |
| 床垫类型 | 实验二三级目录 | Air_Mat / Sponge_Mat |
交替充气垫 / 海绵垫 | 同一受试者两种垫子配对 |
| 姿势分组 | 实验二文件名中段 | B–F(另有 G) |
姿势分组 | 分组含义同样只在 docx 图示里 |
| 帧 | 实验一文件内行 | 每行一帧 | 时间维度 | 1 Hz,行数逐文件可变 |
| 传感点 | 实验一文件内列 | 2048 列 | 32×64 阵列展开 | 展开顺序官方未说明 |
| 传感点 | 实验二文件内行×列 | 64 行 × 27 列 | 27×64 阵列 | 官方明确写 27 列 64 行 |
| 受试者编号 | subject-info-*.csv 第 1 列 |
整数 | 与目录名对应 | 实验二 CSV 多出一行无目录的编号 |
| 年龄 | subject-info-*.csv 第 2 列 |
整数(岁) | 受试者年龄 | 两份 CSV 均为 UTF-16 编码 |
| 身高 | subject-info-*.csv 第 3 列 |
整数(cm) | 受试者身高 | 列名写作 Height/cm |
| 体重 | subject-info-*.csv 第 4 列 |
整数(kg) | 受试者体重 | 列名写作 Weight/kg |
| 校验和 | SHA256SUMS.txt |
64 位十六进制 | 逐文件完整性 | 可直接 sha256sum -c |
两份 CSV 都是 UTF-16 编码带字节序标记,用默认 UTF-8 打开会看到乱码或报错,读取时要显式指定编码。这是一个很小但会卡住第一步的细节。
2.3 一个实验一文件的完整解剖
以 experiment-i/S1/1.txt 为例。文件为纯文本,每行一帧,行内以制表符分隔 2048 个整数,对应 32×64 阵列的逐点读数;行尾还有一个多余的制表符,因此按制表符切分时会得到 2049 个片段,最后一个是空串。读成整数矩阵后形状是「帧数 × 2048」,再 reshape 成 32×64 即可当图像用。
帧数在文件之间并不一致。抽样读取三个文件,S1/1.txt 为 82 行,S1/2.txt 为 70 行,S13/17.txt 为 71 行,与官方页面"约 120 帧"的说法不相符。这个差别对按帧切窗的实验有直接影响:不要假设每个文件都有 120 帧,也不要把固定长度的滑窗跨文件拼接。
值的上限也值得留意。官方页面写实验一的读数范围是 [0-1000],但抽样读取 S1/1.txt 的第 11 行,2048 个读数里出现了大于 1000 的值(该行最大为 1189)。也就是说文档声明的范围与实际数据不完全一致,做归一化时不要以 1000 为硬上限截断。
2.4 实验二的文件命名与分组
实验二的目录是三层:experiment-ii/S<n>/<床垫>/Matrix_<床垫>_<组><号>.txt。分组字母目前可见 B、C、D、E、F 五组,另有 G 组只出现在个别受试者下。以 S1 的充气垫为例,分组与文件数的对应如下。
| 分组 | 文件编号 | 文件数 |
|---|---|---|
| B | B1–B10 | 10 |
| C | C1–C3 | 3 |
| D | D1–D3 | 3 |
| E | E1–E6 | 6 |
| F | F1–F7 | 7 |
| 合计 | 29 个 | 29 |
29 这个数字与官方页面"3 种标准姿势的 29 种状态"一致,但官方没有说明 B 到 F 各自对应哪种主姿势。experiment-info.docx 里确实出现了 Part B 到 Part F 的小标题,正文部分却只有标题没有文字说明,姿势示意是以图片形式放在文档里的。所以"哪个字母是哪一种卧姿"这一层信息,需要人工看图确认,没有机器可读的对照表。
文件数并非所有受试者都整齐。逐条核对 SHA256SUMS.txt 可见:S3 的充气垫目录下比标准多出 Matrix_Air_G1/G2/G3 三个文件,共 32 个;S7 的充气垫目录下缺 Matrix_Air_B8.txt 与 Matrix_Air_F1.txt,只有 27 个;其余受试者的两个垫子目录各 29 个。
2.5 与同类资源的字段差异
| 对比项 | PMD 实验一 | PMD 实验二 | 足底压力类步态库 | 加速度计类活动库 |
|---|---|---|---|---|
| 信号形态 | 二维压力阵列 | 二维压力阵列 | 鞋垫式压力分布 | 三轴加速度时序 |
| 空间分辨率 | 32×64 | 27×64 | 依鞋垫传感点而定 | 无空间分辨率 |
| 采样率 | 1 Hz | 1 Hz(已平均) | 通常数十到数百 Hz | 通常数十 Hz |
| 受试者数 | 13 | 8 | 依库而异 | 依库而异 |
| 标签粒度 | 姿势编号 | 姿势编号 | 步态事件或分组 | 活动类别 |
| 是否连续 | 分姿势片段 | 单帧 | 连续步态 | 连续日常 |
| 主要用途 | 在床姿势分类 | 床垫对照 | 步态与负重分析 | 活动识别 |
这张表要说清的是:压力阵列类数据的空间分辨率与时序分辨率往往是一对矛盾——传感点越多,全阵列扫描一轮越慢。PMD 两张垫子都停在 1 Hz,这不是缺点,是这类设备的物理约束,也决定了它能做的任务类型。
2.6 阵列尺寸背后的物理含义
32×64 与 27×64 都是"横 × 纵"的阵列,铺在床面上对应人体的左右方向与头脚方向。理解这一点有几个直接后果:
| 阵列 | 点数 | 方向 | 直接后果 |
|---|---|---|---|
| 32×64 | 2048 | 32 为横向、64 为纵向 | 纵向分辨率是横向的两倍,头脚方向的定位更细 |
| 27×64 | 1728 | 27 为横向、64 为纵向 | 纵向同为 64,横向少了 5 列,跨实验插值主要在横向 |
| 实验一文件 | 2048 列 | 按行展开成一维 | 展开顺序未说明,reshape 有两种可能顺序 |
| 实验二文件 | 64 行 × 27 列 | 直接是矩阵 | 行是纵向、列是横向,与官方描述一致 |
官方没有给出每个传感点的物理间距,因此无法把阵列坐标换算成厘米,也无法计算单位面积压力。任何需要绝对压强的分析(比如与临床压疮阈值对照)都缺少一环标定信息,这一点在 §10 里也作为未核验内容列出。
这个缺口在实践里该怎么处理,值得说清。如果研究目标是"哪个部位压力最高",用相对读数就够——同一幅图内部比较不受标定影响。如果目标是"这个压强是否超过某个临床阈值",那就必须有单位换算,而本库给不了;此时要么联系原作者索取标定信息,要么改用带标定的自有设备重采。把这两类目标混在一起,是本方向最常见的论证漏洞:图画得很漂亮,结论却偷偷从相对比较滑到了绝对判断。
另外,阵列的纵轴方向也需要自己确认。文件里的行列顺序对应床面的哪一头,官方没有说明;不同研究者画出来的图上下颠倒并不罕见。做可视化时与 experiment-info.docx 的示意图对照,把人头朝向固定下来,之后所有的区域切分才在同一坐标里。
§3 它是谁的数据:一个实验室的两次采集
3.1 贡献者与机构
官方页面列出的贡献团队来自德克萨斯大学达拉斯分校的生活质量技术实验室(Quality of Life Technology Laboratory,QoLT)。这是一个跨工程与临床的实验室方向,长期做辅助生活技术与在床监测。
| 角色 | 人员 | 说明 |
|---|---|---|
| 第一作者 | Maziyar Baran Pouyan | 论文第一作者 |
| 共同作者 | Javad Birjandtalab | 论文共同作者 |
| 共同作者 | Mehrdad Heydarzadeh | 论文共同作者 |
| 指导教师 | Mehrdad Nourani | 官方标注为 Faculty Advisor |
| 共同作者 | Sarah Ostadabbas | 论文共同作者 |
| 贡献者 | Rasoul Yousefi | 官方列名的贡献者 |
| 贡献者 | Masoud Farshbaf | 官方列名的贡献者 |
| 临床顾问 | Matthew Pompeo,MD | 官方标注为 clinical consultant |
值得注意的一处细节:官方页面列出的贡献者名单(八人)比论文作者名单(五人)长,多出的是参与采集与临床咨询的人员。引用时以官方页面要求为准——页面明确要求引用原始论文,同时引用 PhysioNet。
3.2 时间线
| 时间 | 事件 | 出处 |
|---|---|---|
| 2017 年 2 月 16–19 日 | 原始论文在 IEEE EMBS BHI 会议(奥兰多)发表,页码 65–68 | 论文著录信息 |
| 2017 年 9 月 27 日 | 数据文件时间戳 | 文件目录 |
| 2017 年 9 月 28 日 | 版本 1.0.0 在 PhysioNet 上线 | 官方页面版本历史 |
| 2019 年 2 月 20 日 | 补算 SHA256SUMS.txt | 文件目录 |
| 2021 年 6 月 25 日 | 外部论文以本库为基准发表压力性损伤监测方法 | Sensors 期刊 |
从两次采集到发布,中间没有版本修订记录。1.0.0 至今是唯一版本,也没有扩版说明。
3.3 采集场景
实验方案经德克萨斯大学达拉斯分校伦理委员会批准,批准号 UTD IRB #11-59,这一点写在 experiment-info.docx 的第一行。文档同时说明数据集由两个实验构成,并逐条列出设备、阵列尺寸、值域与采样率,与官方页面一致。
采集场景本身可以理解成:受试者躺在铺好传感垫的床上,按指令摆出指定姿势并保持约两分钟。实验二额外把床垫换成海绵垫与交替充气垫各采一遍,这解释了该实验为什么每个受试者有两个子目录。文档里"Subject properties"与"Data properties"两节下面留了表格位,但落在文档里的主体内容是图片示意,文字部分没有逐条说明姿势定义。
3.4 来源层次
| 层次 | 内容 | 可信度 |
|---|---|---|
| 第一层 | 官方项目页的描述段、版本历史、许可、DOI | 最高,全部数字的第一出处 |
| 第二层 | 文件目录与 SHA256SUMS.txt 的逐条清单 | 高,可用来核对文件数与命名 |
| 第三层 | experiment-info.docx 的文本部分 | 中,文字与官方页一致,姿势定义在图里 |
| 第四层 | 两份 subject-info CSV | 高,但需注意 UTF-16 编码与编号体系 |
| 第五层 | 原始论文与引用它的外部论文 | 中,论文摘要只到摘要层,外部论文给出人群区间 |
§4 它最独特的东西
4.1 稀缺性:公开的在床压力图几乎没有第二家
官方页面在描述开头写了一句判断:据我们所知,这是第一个公开的、包含多种睡姿的压力传感数据集。这句话写在 2017 年,至今在公开平台上仍然很难找到同类替代品。原因不复杂——采集要在床垫上铺商用垫、要过伦理、要招人,而产出的数据量(一百多兆、几百个文本文件)在论文产出上并不占优势。
稀缺性带来的直接后果是:几乎所有做在床姿势识别、压力性损伤风险区识别的公开方法,都要么引用它,要么用自己的私有数据。这使得它在这两个细分方向上的地位接近"默认基准"。
这个地位有正反两面。正面是,它让彼此孤立的方法第一次有了共同的评测对象,引用它的方法之间至少在数据这一层可比。反面是,一旦基准本身存在文件级的不一致(§4.3),这些不一致会被所有引用者继承:有人按 29 个文件统计,有人按 32 个文件统计,有人剔除了缺失文件的受试者,有人没剔除。跨论文比较时看到的差异,可能有一部分来自这种处理口径而不是方法优劣。认清这一点,比记住它的规模数字更重要。
4.2 差异化证据:床垫配对设计
实验二最值钱的地方不是 29 个姿势,而是同人同姿势在两种床垫上各采一遍的配对设计。这个设计回答的问题很具体:交替充气垫到底有没有把压力分布摊平。对设备厂商与护理工程来说,这是可以用数据回答的采购问题;对算法来说,这是一份天然的域适应测试集——同一批人、同一批姿势,只是床垫不同。
要用好这个设计,关键是保持配对:比较必须落在同一受试者的同名文件上,跨受试者比较会把体型差异混进床垫差异里。
4.3 具体案例:三处文件级的不一致
数据发布里最容易被忽略的是清单与文档说的对不上。逐条核对 SHA256SUMS.txt 与官方描述,能找到三处:
| 现象 | 官方说法 | 文件清单所见 | 影响 |
|---|---|---|---|
| 实验二每受试者文件数 | 29 个状态 | S3 充气垫 32 个(多 G1–G3),S7 充气垫 27 个(缺 B8、F1) | 按文件数统计姿势数会出错 |
| 实验一每文件帧数 | 约 120 帧 | 抽样三个文件为 82、70、71 行 | 固定长度切窗会越界 |
| 实验二受试者清单 | 8 名受试者 | subject-info-ii.csv 列出 9 行(含 12 号),目录只有 S1–S8 | 按 CSV 行数统计受试者会多算 |
这三处的共同点是:它们都不影响数据可用性,但会影响任何"按文件数/行数统计规模"的写法。正确做法是以 SHA256SUMS.txt 为准做清单,以目录结构为准做受试者列表。
4.4 标签粒度:文件名即标签,但也仅此而已
两个实验都没有独立的标签文件,标签就是文件名(实验一的姿势编号、实验二的分组加编号)。这带来三个后果:
| 后果 | 说明 | 应对 |
|---|---|---|
| 标签可解析 | 文件名可直接解析出受试者、姿势、床垫 | 用路径解析代替标签文件 |
| 语义不可解析 | 编号对应哪种姿势没有机器可读对照 | 人工查阅 experiment-info.docx 的图示 |
| 粒度单一 | 只有姿势级标签,无部位级、无事件级、无结局级 | 需要更细标签的任务要自己标注 |
如果需要"骶尾部压力值""足跟受压时长"这类派生指标,要从全阵列图里自己算区域,官方没有给部位分割或坐标定义。
4.5 边界条件:什么时候该放弃用它
| 你的情况 | 判断 |
|---|---|
| 需要临床卧床患者的数据 | 放弃,受试者全为健康年轻成年人 |
| 需要整夜连续记录 | 放弃,数据是分姿势的静态片段 |
| 需要绝对压强(mmHg 或 kPa)做阈值判断 | 放弃,缺传感点间距与标定信息 |
| 需要跨实验合并训练 | 放弃,阵列尺寸与值域都不同 |
| 只需要一个公开的压力图基准 | 可用,这是它最强的地方 |
§5 怎么拿到
5.1 目录结构
pmd/1.0.0/
├── SHA256SUMS.txt #-- 689 条校验和,2019-02-20
├── experiment-info.docx #-- 533.9 KB,含姿势示意图
├── experiment-i/
│ ├── subject-info-i.csv #-- 13 行受试者,UTF-16
│ ├── S1/ ... S13/ #-- 13 个受试者目录
│ │ └── 1.txt ... 17.txt #-- 每目录 17 个姿势文件
└── experiment-ii/
├── subject-info-ii.csv #-- 9 行受试者记录,UTF-16
└── S1/ ... S8/ #-- 8 个受试者目录
├── Air_Mat/ #-- Matrix_Air_*.txt
└── Sponge_Mat/ #-- Matrix_Sponge_*.txt
注意 experiment-i 下没有床垫子目录——实验一只用了一张垫子,不需要区分。experiment-ii 下的每个受试者目录都有两个床垫子目录。
5.2 批量下载
#-- 方式一:递归下载整库(解压后 102.2 MB)
wget -r -N -c -np https://physionet.org/files/pmd/1.0.0/
#-- 方式二:官方 Python 包
physionet download pmd --version 1.0.0
#-- 方式三:AWS 开放桶同步
aws s3 sync --no-sign-request s3://physionet-open/pmd/1.0.0/ DESTINATION
#-- 下载后校验完整性
cd pmd/1.0.0 && sha256sum -c SHA256SUMS.txt
三种方式里,wget -r 会连目录索引页一起抓下来,建议加 --reject "index.html*";aws s3 sync 是最快的一条,因为开放桶不需要凭证。全库一百多兆,一次下完没有压力。
5.3 流式读取与转表
import numpy as np
import pandas as pd
#-- 实验一:每文件多行,每行 2048 个读数,制表符分隔
a = np.loadtxt('experiment-i/S1/1.txt', dtype=int) #-- (帧数, 2048)
frames = a.reshape(-1, 32, 64) #-- 帧 x 32 x 64
print(a.shape, frames.shape)
#-- 实验二:每文件 64 行 x 27 列,空格分隔
m = np.loadtxt('experiment-ii/S1/Air_Mat/Matrix_Air_B1.txt', dtype=int)
print(m.shape) #-- (64, 27)
#-- 受试者信息:两份 CSV 均为 UTF-16 编码
si = pd.read_csv('experiment-i/subject-info-i.csv', encoding='utf-16')
print(si.columns.tolist(), si.shape) #-- 4 列,13 行
实验一的 reshape 顺序需要自己确认:2048 个数展开成 32×64 有两种可能的行优先/列优先顺序,官方页面只说"2048 列代表 32×64 的测量",没有说明展开方向。做可视化时两种都画一遍,与 experiment-info.docx 里的示意图对照,选人体朝向正确的那种。
5.4 标签映射
import re
from pathlib import Path
#-- 实验一:路径解析出受试者与姿势编号
p = Path('experiment-i/S3/12.txt')
subject, position = p.parent.name, int(p.stem) #-- S3, 12
#-- 实验二:路径解析出受试者、床垫、分组与编号
q = Path('experiment-ii/S3/Air_Mat/Matrix_Air_G2.txt')
m = re.match(r'Matrix_(Air|Sponge)_([A-Z])(\d+)', q.stem)
mat, group, idx = m.group(1), m.group(2), int(m.group(3)) #-- Air, G, 2
标签映射本身很简单,难点在于编号到姿势名的那一跳。官方把对照关系放在 docx 的图片里,没有文本表格,因此这一跳必须人工完成,且人工完成的对照表要在论文里注明来源。
5.5 跨实验的受试者不是同一套编号
两份 CSV 都给了年龄、身高、体重,可以直接比对:
| 实验二编号 | 年龄 / 身高 / 体重 | 与之数值相同的实验一编号 |
|---|---|---|
| S1 | 19 / 175 / 87 | 实验一 S1 |
| S2 | 23 / 183 / 85 | 实验一 S2 |
| S3 | 23 / 183 / 100 | 实验一 S3 |
| S4 | 24 / 172 / 66 | 实验一 S5 |
| S5 | 27 / 179 / 96 | 实验一 S7 |
| S6 | 27 / 186 / 63 | 实验一 S8 |
| S7 | 30 / 174 / 74 | 实验一 S9 |
| S8 | 30 / 174 / 79 | 实验一 S10 |
| S12 | 33 / 170 / 78 | 实验一 S12 |
这张表说明两件事。第一,两个实验的编号体系各自独立,实验二的 S4 是实验一的 S5,跨实验引用编号会认错人。第二,实验二 CSV 里那个 S12 在 experiment-ii 目录下没有对应目录,它的数值与实验一的 S12 相同——这是一条孤立记录,做受试者统计时不要把它算进去。
5.6 八个会踩的坑
| 坑 | 现象 | 怎么避 |
|---|---|---|
| 编码 | 两份 CSV 是 UTF-16,默认读取乱码 | 显式写 encoding='utf-16' |
| 多余分隔符 | 实验一每行末尾多一个制表符,切分得 2049 段 | 丢弃末尾空串或按空白切分 |
| 分隔符不一致 | 实验二文件内是空格,不是制表符 | 用 np.loadtxt 默认空白切分 |
| 帧数 | 实验一帧数与"约 120 帧"不符,抽样为 82/70/71 | 按实际行数切窗,不要写死 120 |
| 文件数 | 实验二 S3 多三个 G 文件、S7 少两个 | 以目录或 SHA256SUMS.txt 为准枚举 |
| 值域 | 实验一抽样行出现 1189,超过声明的 1000 | 归一化不要用 1000 硬截断 |
| 编号 | 两个实验的受试者编号不通用 | 只在同一实验内部引用编号 |
| 划分 | 同一受试者的多个姿势高度相关 | 按受试者划分,不按文件划分 |
最后一个坑最要紧。实验一每个受试者有 17 个文件,实验二每个受试者有两床垫共约 58 个文件,这些文件来自同一个人、同一天的同一套标定。随机按文件划分,等于让模型在测试集上见到了训练时见过的人,成绩会有明显虚高。
§6 与库内条目的关系
6.1 关系图谱
| 相关条目 | 与本库的关系 | 何时该换用它 |
|---|---|---|
| plantar 足底压力与肌电库 | 同为压力分布类数据,但采集部位是足底、场景是行走 | 你要的是步态负重而不是在床姿势 |
| gaitpdb 帕金森步态足底压力 | 同为压力分布,人群为帕金森患者 | 你要的是疾病人群的运动压力数据 |
| multi-gait-posture 多相机步态姿势库 | 同为姿势主题,但用相机而不是压力垫 | 你要的是站立/行走姿态的视觉数据 |
| sleep-accel 腕部睡眠库 | 同为睡眠场景,用加速度而不是压力 | 你要的是整夜连续睡眠监测 |
| cps-dataset-sleep 综合睡眠库 | 同为睡眠场景,多导睡眠图 | 你要的是睡眠分期而不是姿势 |
| hbedb 人体平衡数据库 | 同为主题相近的人体承压测量 | 你要的是站立平衡的压力中心轨迹 |
| olst-mocap-forceplate-radar | 同含测力板数据,但场景是站立抬腿 | 你要的是高采样率的动捕与力板数据 |
| wearable-device-dataset | 同为可采集生理与运动信号的设备数据 | 你要的是腕戴设备的连续信号 |
| accelerometry-walk-climb-drive | 同为人活动识别的传感器数据 | 你要的是日常活动类别识别 |
| hospital-activity-bosch | 同为院内场景的活动数据 | 你要的是住院患者真实活动轨迹 |
| barcelona-sicu-signals | 同为床旁场景的信号库 | 你要的是重症监护的连续波形 |
| gait-maturation-db 步态成熟库 | 同为人运动测量的公开基准 | 你要的是儿童步态的发育曲线 |
6.2 检索路径
| 你想找什么 | 从本库出发的路径 |
|---|---|
| 另一个压力分布数据集 | 检索压力、足底、测力板类标签,看 plantar 与 gaitpdb |
| 睡眠场景的其他模态 | 检索睡眠标签,看 sleep-accel 与 cps-dataset-sleep |
| 姿势主题的其他采集方式 | 检索姿势标签,看 multi-gait-posture |
| 连续长时程信号 | 检索波形与监护标签,看 barcelona-sicu-signals |
6.3 分工判据
| 判据 | 选本库 | 选别的 |
|---|---|---|
| 信号是不是二维压力阵列 | 是 | 否,看加速度或图像类 |
| 场景是不是在床 | 是 | 否,看步态与日常活动类 |
| 是否需要连续时间 | 否(分姿势片段) | 是,看睡眠与监护类 |
| 是否要求临床人群 | 否(健康成年人) | 是,看患者队列类 |
| 是否需要绝对压强 | 否(无标定) | 是,需另寻带标定的数据 |
§7 质量评估与局限性
7.0 前置校正:三件必须先做的事
第一件是编码。两份 subject-info CSV 是 UTF-16,读错编码会直接卡住。第二件是分隔与形状。实验一按制表符、实验二按空格,且两者的矩阵朝向不同。第三件是划分口径。受试者级划分是唯一合理的默认,文件级划分会产生泄漏。这三件不做,后面所有结果都不成立。
7.1 五维评分
| 维度 | 评分(满分 5) | 理由 |
|---|---|---|
| 数据规模 | 2 | 21 名受试者量级、689 个文件,训练不足,评测够用 |
| 标注质量 | 3 | 姿势标签可靠(文件名即标签),但编号到姿势名缺机器可读对照 |
| 任务适配 | 5 | 公开在床压力图几乎没有替代品,床垫配对设计独一份 |
| 文档完整 | 3 | 规模与格式写清了,姿势定义与展开顺序没写清 |
| 可获取性 | 5 | 免注册、ODC-BY、一百多兆、有校验和清单 |
五维合计 18 分(满分 25)。分数结构说明它的价值集中在"适配性"这一列:规模与文档是短板,获取与场景是长板。
7.2 标签的两层
第一层是姿势对不对。标签直接来自文件名,采集时受试者按指令摆姿势,这一层的可靠性高。
第二层是姿势名对不对得上。编号到姿势名的映射只存在于 docx 的图片里,没有文本对照表,任何人工转写都可能出错,且不同研究者的转写不一定一致。这解释了为什么不同论文对"17 个姿势"的具体构成说法不完全相同。
| 层次 | 可靠性 | 影响 |
|---|---|---|
| 姿势编号本身 | 高 | 分类任务可直接用 |
| 编号到姿势名 | 低,需人工看图 | 论文里报告类别名时要注明来源 |
| 部位级标签 | 无 | 需要自己从阵列图上切区域 |
| 结局级标签 | 无 | 无法与压疮发生关联 |
7.3 已知的、可枚举的偏差
| 偏差 | 表现 | 影响 |
|---|---|---|
| 人群偏斜 | 全部为健康年轻成年人 | 临床人群的形态差异被系统性忽略 |
| 姿势静态 | 按指令摆好并保持,非自然睡眠 | 缺少翻身过程与过渡姿态 |
| 设备单一(实验内) | 每个实验只用一张垫子 | 同一实验内无法评估设备差异 |
| 文件数不齐 | 实验二 S3 与 S7 与其余不同 | 按文件数统计规模会出错 |
| 帧数不齐 | 实验一逐文件帧数不同,且少于声明值 | 固定长度切窗会越界 |
| 值域声明与实际 | 实验一声明 [0-1000],抽样见更大值 | 归一化截断会丢信息 |
| 无压强标定 | 无传感点间距、无单位换算 | 不能与临床压强阈值对照 |
| 受试者级泄漏 | 同一人多姿势、多床垫 | 随机划分结果虚高 |
7.4 外部验证矩阵
| 验证角色 | 做法 | 讲得通的地方 | 风险 |
|---|---|---|---|
| 姿势分类基准 | 在实验一上做 17 类分类,按受试者划分 | 原始矩阵可用,标签明确 | 类别语义需人工转写 |
| 风险区识别 | 从阵列图上定位压力集中区 | 骨突部位压力集中形态清晰 | 无临床结局可对照 |
| 床垫对照 | 实验二两种床垫配对比较 | 同人同姿势,配对设计干净 | 只有 8 名受试者 |
| 跨设备泛化 | 32×64 与 27×64 之间迁移 | 两种阵列现成 | 插值方式会改变结论 |
外部文献里能看到这类用法的原话:一篇 2021 年发表在 Sensors 上的压力性损伤监测论文,明确以本库为实验数据,并写明实验一的 13 名受试者、年龄区间、身高与体重区间、三种主姿势(仰卧、左侧卧、右侧卧),以及床面倾角、外加楔形垫、四肢摆放造成的 17 种变化。这份外部描述补上了官方页面缺失的人群区间与主姿势构成,但它同时把读数范围写成了 mmHg,而官方页面只写"数值范围 [0-1000]"未给单位——单位这一层仍然没有权威出处。
值得注意的是,这类外部引用几乎都在实验一上做。实验二因为只剩平均值、且文件数不齐,被用到的次数明显更少。这提示一个务实的取舍:做方法研究优先用实验一,做床垫对照才用实验二。
复现性上的另一个现实是:外部论文很少公布它们的文件级处理细节。是否剔除了 S3 多出的 G 组、是否剔除了 S7 缺失的两个文件、是否把实验一插值到统一尺寸、reshape 用了哪种朝向——这些选择都会改变结果,却常常不写进方法节。想真正对齐某篇论文的数字,最可靠的办法是照它的描述重写一遍数据加载,然后比对文件数与形状是否一致;只比对最终准确率,往往对不上也说不清为什么。
7.5 它为何能持续:稀缺的不是数据量,是那张垫子
它没有更新、没有扩版,至今仍是唯一版本。它能持续被引用,原因是采集这类数据的门槛不在算法而在组织:要一张商用垫、要伦理批准、要一批愿意躺着摆姿势的人。只要这个组合仍然稀缺,它作为默认基准的位置就不会被替代。真正能替代它的,是更大规模、带连续时间、带临床人群的同类采集——而这类采集至今仍然少见。
§8 生态位与历史
8.1 历史沿革
这个团队在压力图方向上的工作早于本库。公开文献里能看到他们在 2013 年发表过压力性损伤高风险区检测的工作,2014 年发表在床姿势分类与肢体识别的方法。本库可以看成这条线走到"发布数据集"这一步的产物:方法做了几年,发现缺公开基准,于是自己做了一个。这也是很多小规模数据集的典型出身——不是为数据而数据,是方法的副产品。
副产品出身决定了它的形状:规模刚好够验证自家方法,标签刚好够自家任务,文档刚好够自家复现。对后来者来说,这意味着要把它当成基准用,得先把这几个"刚好"补齐。
这条路径还有一个后果值得记下:数据集的"任务定义"是被原始论文锁定的。原论文的标题写的是 posture and subject analytics,也就是姿势分析与受试者识别两类任务,因此发布的文件按这两个目标组织。后来者若带着别的问题来——比如压疮风险区、床垫材质、跨域迁移——会发现数据虽然能用,却总有某一环不是为自己准备的。这不是缺陷,是所有副产品型数据集的共同特征,用它之前先确认自己的任务落在哪个"刚好"里。
8.2 与挑战赛的关系
本库没有绑定到任何挑战赛。PhysioNet 的挑战赛序列里没有以在床压力图为主题的赛题,它的传播路径是论文引用而不是比赛。这与心电类库的路径差别很大:后者往往靠挑战赛把数据推给上千支队伍,前者只靠细分方向的口口相传。
没有挑战赛的直接后果是,社区没有统一的评测协议与划分口径。不同论文对实验一的类别数、划分方式、是否插值到统一尺寸的处理都不一样,跨论文比较绝对数值往往没有意义。
8.3 生态位:默认基准而不是主力粮仓
| 角色 | 主力粮仓 | 默认基准 |
|---|---|---|
| 典型用法 | 大规模训练、预训练 | 方法对照、小样本评测、跨域验证 |
| 需要的前提 | 数据量大、标签细 | 公开可得、场景明确、有引用链 |
| 代表库 | 大规模图像与信号库 | 本库、其他细分方向的小基准 |
| 失败模式 | 过拟合、标签噪声累积 | 样本太少导致结论不稳 |
本库坐在右边这一列。拿它当粮仓会立刻遇到规模瓶颈;而作为基准,它的问题不在能不能用,而在怎么用才可比——这一点需要社区形成约定,而不是数据本身能解决的。
8.4 谁在用它,用来做什么
从公开文献看,使用者集中在三类。第一类做在床姿势识别,把它当唯一公开基准。第二类做压力性损伤风险分析,看重全阵列图上的压力集中形态。第三类做床垫与体位辅具评估,看重实验二的配对设计。第三类最少,但它是这份数据最不可替代的用法。
§9 使用指引
9.1 三种角色的路径
| 角色 | 第一天 | 第一周 | 注意事项 |
|---|---|---|---|
| 算法研究者 | 下全库、跑通 §5.3 的读取,画几张压力图 | 按受试者划分建立 17 类分类基线 | 类别名需人工对照 docx 图示 |
| 护理与康复工程 | 读 experiment-info.docx 确认姿势构成 | 做骶尾、足跟区域的压力集中分析 | 无标定,不能换算绝对压强 |
| 设备与床垫厂商 | 只取实验二,按受试者配对比较两种床垫 | 报告配对差值而不是两组的分别均值 | S3 与 S7 的文件数不齐,要单独处理 |
9.2 一条最短的可用流程
#-- 1. 同步全库并校验
aws s3 sync --no-sign-request s3://physionet-open/pmd/1.0.0/ pmd
cd pmd && sha256sum -c SHA256SUMS.txt
#-- 2. 枚举实验一文件清单(221 个)
find experiment-i -name '*.txt' | sort > exp_i_files.txt
wc -l exp_i_files.txt
#-- 3. 枚举实验二文件清单(465 个)
find experiment-ii -name 'Matrix_*.txt' | sort > exp_ii_files.txt
wc -l exp_ii_files.txt
import numpy as np
from pathlib import Path
from sklearn.model_selection import GroupKFold
#-- 读实验一全部文件,按受试者做分组划分
rows, groups, labels = [], [], []
for p in sorted(Path('experiment-i').glob('S*/*.txt')):
a = np.loadtxt(p, dtype=int) #-- (帧数, 2048)
rows.append(a.mean(axis=0)) #-- 每文件取一帧平均
groups.append(p.parent.name) #-- 分组键 = 受试者
labels.append(int(p.stem)) #-- 标签 = 姿势编号
X, y, g = np.array(rows), np.array(labels), np.array(groups)
gkf = GroupKFold(n_splits=5)
for tr, te in gkf.split(X, y, groups=g):
print(len(tr), len(te), len(set(g[tr]) & set(g[te]))) #-- 交集应为空
上面这段的输出里,最后一列必须为空——训练集与测试集的受试者集合不能相交。这是最容易被忽略、也最容易让结果失真的一个检查。
9.3 引用方式
官方页面要求同时引用原始论文与 PhysioNet:
| 引用对象 | 内容 |
|---|---|
| 数据集 | A Pressure Map Dataset for In-bed Posture Classification, version 1.0.0. PhysioNet. 2017. DOI: 10.13026/C2W09K |
| 原始论文 | M. Baran Pouyan, J. Birjandtalab, M. Heydarzadeh, M. Nourani, S. Ostadabbas. A pressure map dataset for posture and subject analytics. 2017 IEEE EMBS BHI, pp. 65–68. DOI: 10.1109/BHI.2017.7897206 |
| 平台 | PhysioNet 平台综述论文,按官方页面 Cite 按钮生成 |
论文里建议同时写明:使用的版本号(1.0.0)、用的是实验一还是实验二、划分是否按受试者、以及类别名是如何从 docx 图示转写出来的。
§10 AI 使用声明
| 项目 | 声明 |
|---|---|
| 文本生成 | 本文由 AI 辅助撰写,编辑把关结构与事实 |
| 数字来源 | 规模、结构、边界三类数字来自 PhysioNet 官方页面、文件目录与 SHA256SUMS.txt |
| 文件核验 | SHA256SUMS.txt(689 条)、两份 subject-info CSV、experiment-info.docx、S1/1.txt、S1/2.txt、S13/17.txt、S1/Air_Mat/Matrix_Air_B1.txt 经直接访问确认 |
| 不一致说明 | 官方称实验一约 120 帧,抽样文件为 82/70/71 行;官方称实验二 29 个文件,S3 充气垫 32 个、S7 充气垫 27 个;官方称实验二 8 名受试者,CSV 列出 9 行;官方称实验一值域 [0-1000],抽样行见 1189;官方页称全部为制表符分隔,实验二实为空格分隔 |
| 论文信息 | 原始论文仅核对著录信息与会议信息,未读全文;外部论文只读了公开可见的实验设置段落 |
| 未核验内容 | 传感点物理间距与压强单位、阵列展开的行优先/列优先顺序、编号到姿势名的完整对照、实验二 G 组属于哪种姿势、受试者性别构成 |
| 图像 | 无配图;封面为生成式提示词,不含真实压力图 |
| 免责 | 本文不构成临床建议;数据使用须遵守 ODC-BY 1.0 署名要求 |
常见误读(避坑清单)
| 说法 | 实际 | 证据 |
|---|---|---|
| 「它是一个有 21 名受试者的库」 | 两个实验共用部分受试者,实验一 13 名、实验二 8 名,人数不能相加 | 两份 subject-info CSV 与目录 |
| 「两个实验可以拼起来训练」 | 阵列尺寸、值域、文件形态都不同 | 官方页面对两个实验的分别描述 |
| 「实验二也能做时间序列」 | 每文件是约 20 帧的平均,时间信息已压掉 | 官方页面实验二第 4 条 |
| 「每个实验一文件都有 120 帧」 | 抽样三个文件为 82、70、71 行 | 直接读取文件行数 |
| 「实验二每个受试者都是 29 个文件」 | S3 充气垫 32 个(多 G1–G3),S7 充气垫 27 个(缺 B8、F1) | SHA256SUMS.txt 逐条 |
| 「两个实验的 S3 是同一个人」 | 编号体系各自独立,实验二 S4 对应实验一 S5 | 两份 CSV 的年龄身高体重比对 |
| 「数值上限是 1000,归一化直接除以 1000」 | 抽样行出现 1189,超过声明上限 | 读取 experiment-i/S1/1.txt |
| 「CSV 是普通 UTF-8」 | 两份 CSV 均为 UTF-16 编码带字节序标记 | 文件字节数与解码 |
| 「按文件随机划分就行」 | 同一受试者的多姿势、多床垫高度相关 | 目录结构:每人 17 或约 58 个文件 |
| 「它是患者的临床数据」 | 受试者全为健康年轻成年人 | 两份 CSV 的年龄列 |
FAQ
Q1:PMD 的两个实验能不能合并成一个数据集?
不建议。实验一是 32×64 阵列、逐帧序列、值域 [0-1000];实验二是 27×64 阵列、每文件只留一帧平均、值域 [0-500],采集垫子也来自不同产品线。真要一起用,只能在受试者层面做外部验证——比如在一个实验上训练、另一个实验上测试,并明确说明这是跨设备迁移,而不是把帧混在一起。
Q2:为什么实验二的每个文件只有一幅图?
官方页面写明实验二每个文件是约 20 帧的平均。也就是说采集时是有序列的,发布前被平均掉了。这样做的代价是时间信息全部丢失:翻身过程、压力随时间的小幅漂移、充气垫的周期性充放气都看不到了。要做时间维度研究,只能用实验一。
Q3:编号 1 到 17 分别是什么姿势?
官方页面只说实验一是 8 种标准姿势加 9 种附加状态,编号与名称的对照放在 experiment-info.docx 的图示里,没有文本对照表。公开文献写明实验一的三个主姿势是仰卧、左侧卧、右侧卧,其余变化来自床面倾角、外加楔形垫与四肢摆放。要用具体类别名,需要人工看图并注明转写来源。
Q4:受试者的人群特征是什么?
两份 CSV 给出编号、年龄、身高与体重四列。公开文献写明实验一的 13 名受试者年龄区间为 19 至 34 岁、身高区间 169 至 186 厘米、体重区间 63 至 100 千克。官方页面本身没有给区间,只有 CSV 的逐行数值。全部为健康年轻成年人,没有临床患者。
Q5:它的许可和引用要求是什么?
Open Data Commons Attribution License v1.0,允许包括商用在内的使用,条件是署名。官方页面要求引用原始论文,同时引用 PhysioNet。下载无需注册,全库一百多兆,附 SHA256 校验和清单。
术语表
| 术语 | 解释 |
|---|---|
| 压力性损伤 | 旧称压疮或褥疮,长期受压导致皮肤与皮下组织坏死 |
| 压力传感垫 | 铺在床面或座椅上的柔性传感阵列,逐点输出压力读数 |
| 传感阵列 | 按行列排布的传感器网格,本库为 32×64 或 27×64 |
| 压力图 | 把传感阵列读数按空间排布画成的二维图,可当图像处理 |
| 帧 | 传感阵列在某一时刻的一次完整扫描结果 |
| 交替充气垫 | 通过周期性充放气改变受压部位的床垫,用于压疮预防 |
| 海绵垫 | 普通无动力床垫,实验二中作为充气垫的对照 |
| 骨突部位 | 骶尾、足跟、肩胛等皮下骨性突出处,压疮高发 |
| 受试者级划分 | 同一受试者的全部文件只进训练或只进测试 |
| 配对设计 | 同一受试者、同一任务在两种条件下各采一遍 |
| 域适应 | 在一个采集条件下训练、在另一个条件下测试的设定 |
| 归一化 | 把读数缩放到统一区间,本库因声明范围与文件读数不符需谨慎 |
| UTF-16 | 一种文本编码,本库的两份 CSV 用它,默认 UTF-8 读取会失败 |
| SHA256 校验和 | 文件的密码学摘要,用于验证下载是否完整 |
| ODC-BY | 开放数据共享署名许可,允许商用但要求署名 |
| PhysioNet | 由 MIT 等机构维护的生物医学信号数据平台 |
| IRB | 机构伦理审查委员会,本库批准号为 UTD IRB #11-59 |
| QoLT 实验室 | 德克萨斯大学达拉斯分校的生活质量技术实验室,本库贡献方 |
附录 A:核心数字核对表
| 项 | 值 | 出处 | 层级 |
|---|---|---|---|
| 版本号 | 1.0.0 | 官方页面版本历史 | 官方页面 |
| 发布日期 | 2017-09-28 | 官方页面 | 官方页面 |
| 校验和清单日期 | 2019-02-20 | 文件目录时间戳 | 官方文件 |
| 文件总数 | 689 | SHA256SUMS.txt 条数 | 官方文件 |
| 实验一数据文件 | 221(13×17) | SHA256SUMS.txt 逐条统计 | 官方文件 |
| 实验二数据文件 | 465(Air 233 + Sponge 232) | SHA256SUMS.txt 逐条统计 | 官方文件 |
| 实验一受试者数 | 13(S1–S13) | 目录与 subject-info-i.csv | 官方文件 |
| 实验二受试者数 | 8(S1–S8) | 目录;CSV 列出 9 行含孤立 12 号 | 官方文件 / 不一致 |
| 实验一阵列 | 32×64 | 官方页面 | 官方页面 |
| 实验二阵列 | 27×64 | 官方页面 | 官方页面 |
| 采样率 | 1 Hz | 官方页面 | 官方页面 |
| 实验一值域 | [0-1000] | 官方页面 | 官方页面 / 抽样见 1189 |
| 实验二值域 | [0-500] | 官方页面 | 官方页面 |
| 实验一单文件时长 | 约 2 分钟(约 120 帧) | 官方页面 | 官方页面 / 抽样为 82、70、71 行 |
| 实验二单文件形态 | 约 20 帧的平均 | 官方页面 | 官方页面 |
| 年龄区间 | 19–34 岁 | 公开文献对实验一的描述 | 外部论文 |
| 身高区间 | 169–186 cm | 公开文献对实验一的描述 | 外部论文 |
| 体重区间 | 63–100 kg | 公开文献对实验一的描述 | 外部论文 |
| 总体积 | 102.2 MB(ZIP 102.3 MB) | 官方页面 | 官方页面 |
| 许可 | ODC-BY 1.0 | 官方页面 | 官方页面 |
| DOI | 10.13026/C2W09K | 官方页面 | 官方页面 |
| 伦理批准 | UTD IRB #11-59 | experiment-info.docx 首行 | 官方文件 |
| 论文页码 | 65–68,2017 IEEE EMBS BHI | 论文著录信息 | 论文 |
附录 B:数字的来源分层
第一层:官方页面与官方文件。 版本号、发布日期、阵列尺寸、采样率、值域、单文件形态、体积、许可、DOI,以及 SHA256SUMS.txt 的 689 条清单。这些数字来自项目页的描述段与文件目录,可逐条复核。
第二层:官方文件的逐条核对。 实验一 221 个数据文件、实验二 465 个数据文件、S3 充气垫多出的 G1–G3、S7 充气垫缺失的 B8 与 F1、两份 CSV 的行数与编码、抽样文件的行数与极值。这些是对官方文件的直接读取,核对方式见 §5。
第三层:外部论文。 受试者的年龄、身高、体重区间与三个主姿势的构成,出自 2021 年 Sensors 上那篇以本库为实验数据的论文。官方页面没有给区间,只有 CSV 的逐行数值。
第四层:未核实。 传感点物理间距、压强单位、阵列展开顺序、编号到姿势名的完整对照、实验二 G 组的姿势归属、受试者性别构成。这些需要读论文全文或联系作者,正文里凡是涉及的地方都只做定性表述。
附录 C:完整参考文献
| 编号 | 文献 | 链接 | 用途 |
|---|---|---|---|
| 1 | A Pressure Map Dataset for In-bed Posture Classification v1.0.0 | https://physionet.org/content/pmd/1.0.0/ | 全部规模、结构、边界数据的来源 |
| 2 | 该库的 PhysioNet 文件目录 | https://physionet.org/files/pmd/1.0.0/ | 目录结构、SHA256SUMS.txt、两份 CSV |
| 3 | Baran Pouyan 等,A pressure map dataset for posture and subject analytics,2017 IEEE EMBS BHI | https://doi.org/10.1109/BHI.2017.7897206 | 官方指定的引用论文 |
| 4 | Longitudinal In-Bed Pressure Signals Decomposition and Gradients Analysis for Pressure Injury Monitoring,Sensors 2021 | https://www.mdpi.com/1424-8220/21/13/4356 | 人群区间、三个主姿势、mmHg 单位说法 |
| 5 | PhysioNet 平台综述(2026,Nature Health) | https://doi.org/10.1038/s44360-026-00096-z | 托管模式与引用规范 |
| 6 | 站内 plantar 足底压力与肌电库(对照) | https://www.qianfanghub.com/ai-ready-dataset/plantar/1582 | §6.1 的对照 |
| 7 | 站内 sleep-accel 腕部睡眠库(对照) | https://www.qianfanghub.com/ai-ready-dataset/sleep-accel/1560 | §6.1 的对照 |
附录 D:任务代码
任务一:按受试者划分的姿势分类骨架(实验一)
import numpy as np
from pathlib import Path
from sklearn.model_selection import GroupKFold
from sklearn.ensemble import RandomForestClassifier
#-- 每文件取帧平均当特征,受试者当分组键
X, y, g = [], [], []
for p in sorted(Path('experiment-i').glob('S*/*.txt')):
a = np.loadtxt(p, dtype=int) #-- (帧数, 2048)
X.append(a.mean(axis=0)) #-- 2048 维
y.append(int(p.stem)) #-- 1-17
g.append(p.parent.name) #-- S1-S13
X, y, g = np.array(X), np.array(y), np.array(g)
acc = []
for tr, te in GroupKFold(n_splits=5).split(X, y, groups=g):
assert not (set(g[tr]) & set(g[te])) #-- 受试者不重叠
clf = RandomForestClassifier(n_estimators=200, random_state=0)
clf.fit(X[tr], y[tr])
acc.append((clf.predict(X[te]) == y[te]).mean())
print(len(X), X.shape, round(float(np.mean(acc)), 4))
任务二:实验二的床垫配对比较
import numpy as np
from pathlib import Path
#-- 同一受试者、同一文件名在两种床垫上配对求差
rows = []
for p in sorted(Path('experiment-ii/S1/Air_Mat').glob('*.txt')):
q = Path(str(p).replace('Air_Mat/Matrix_Air', 'Sponge_Mat/Matrix_Sponge'))
if not q.exists():
continue #-- S7 缺文件时会走到这里
a = np.loadtxt(p, dtype=int) #-- (64, 27)
s = np.loadtxt(q, dtype=int)
rows.append((p.stem, a.mean(), s.mean(), a.mean() - s.mean()))
for name, ma, ms, d in rows[:5]:
print(f'{name:24s} 充气垫 {ma:7.2f} 海绵垫 {ms:7.2f} 差值 {d:7.2f}')
第二段代码给的是配对差值的一个最粗糙的度量。它的用途不是下结论,而是把"床垫不同会带来多大差别"这件事量化成一个可比较的数:如果配对差值随受试者而变号,那么"哪种床垫更好"这个问题本身就没有统一答案,只能分人讨论。
附录 E:如果只记五件事
| 序号 | 记住什么 | 为什么 |
|---|---|---|
| 1 | 两个实验不可合并:32×64 与 27×64、[0-1000] 与 [0-500]、逐帧与平均 | 这三组差别决定了所有用法上的分歧 |
| 2 | 实验一 13 人×17 姿势逐帧;实验二 8 人×29 状态×2 床垫只剩平均 | 时间维度研究只能用实验一 |
| 3 | 标签在文件名里,编号到姿势名只存在于 docx 图示 | 类别语义要人工转写并注明来源 |
| 4 | 按受试者划分,不按文件划分 | 同一人的十几个姿势高度相关,随机划分会虚高 |
| 5 | 全库 689 个文件、102.2 MB、ODC-BY 1.0、DOI 10.13026/C2W09K | 这四个数字定义了可获取性与引用要求 |
编辑说明
本文的核验时间为 2026 年 10 月 29 日。核对方式为直接访问 PhysioNet 项目页与文件目录,逐条读取 SHA256SUMS.txt 的 689 条清单、两份 subject-info CSV、experiment-info.docx 的文本部分,并抽样读取实验一的三个文件与实验二的一个文件确认矩阵形状与分隔符。论文侧核对了原始论文的著录信息与会议信息,以及一篇以本库为实验数据的外部论文的实验设置段落,未读全文。
发现的官方描述与文件实际之间的不一致共五处,已在 §4.3、§5.6 与 §10 各说明一次:实验一的帧数、实验二的文件数、实验二 CSV 的受试者行数、实验一的值域上限、以及实验二的分隔符。未覆盖的内容包括传感点物理间距与压强单位、阵列展开顺序、编号到姿势名的完整对照、实验二 G 组的姿势归属与受试者性别构成。这些需要读论文全文或联系作者,本文按要求只写规模、结构、边界三类数字。
相关数据集导航
以下为站内 AI-Ready 数据集百科中与本数据集共享多个主题标签的相关数据集,按相关度降序排列:
- plantar — 共享标签:生理信号 / 压力分布 / 步态分析
- gaitpdb — 共享标签:生理信号 / 压力分布 / 姿势识别
- sleep-accel — 共享标签:生理信号 / 睡眠监测 / 时序信号
- cps-dataset-sleep — 共享标签:生理信号 / 睡眠监测 / 多导信号
- multi-gait-posture — 共享标签:姿势识别 / 人运动测量
- wearable-device-dataset — 共享标签:生理信号 / 可穿戴信号 / 时序信号
- hbedb — 共享标签:生理信号 / 人体承压测量
- olst-mocap-forceplate-radar — 共享标签:生理信号 / 测力板数据 / 人运动测量
- accelerometry-walk-climb-drive — 共享标签:生理信号 / 活动识别 / 传感器数据
- hospital-activity-bosch — 共享标签:生理信号 / 院内场景 / 活动识别
- barcelona-sicu-signals — 共享标签:生理信号 / 床旁监护 / 波形
- gait-maturation-db — 共享标签:生理信号 / 人运动测量 / 公开基准
导航说明:本章节由全站统一标签体系自动计算生成(标签重合度算法),双向可达;点击链接可跳转至对应数据集词条。

