non-invasive-bp-estimation-using-deep-learning:基于深度学习的PPG与rPPG无创血压预测研究

Assessment of non-invasive blood pressure prediction from PPG and rPPG signals using deep learning

分支1Tags0
文件最后提交记录最后更新时间
4 年前
3 年前
4 年前
4 年前
4 年前
4 年前
4 年前
4 年前
3 年前
4 年前
3 年前
4 年前
4 年前
4 年前

非侵入性血压预测评估:基于深度学习的PPG和rPPG信号

引言

本存储库中的代码旨在重现论文“Assessment of non-invasive blood pressure prediction from PPG and rPPG signals using deep learning”的结果,该论文可通过Sensors 特别专题“无接触医疗传感器”[1]访问。这里包含从MIMC-II数据库下载数据、预处理以及训练用于(r)PPG基础血压预测神经网络的脚本。

训练使用Tensorflow 2.4.1和Python 3.8进行,可从命令行执行。

如果您发现此存储库对您的研究有所帮助,请考虑引用我们的论文:

@inproceedings{schrumpf2021assessment,
  title={Assessment of deep learning based blood pressure prediction from PPG and rPPG signals},
  author={Schrumpf, Fabian and Frenzel, Patrick and Aust, Christoph and Osterhoff, Georg and Fuchs, Mirco},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  pages={3820--3830},
  year={2021}
}

安装

要使用Python 3.8作为解释器创建虚拟环境,需要virtualenv包。可以使用以下命令安装:

pip install virtualenv

然后使用以下命令创建虚拟环境:

virtualenv --python=/usr/bin/python3.8 venv/

激活虚拟环境的命令是:

source venv/bin/activate

必要的Python包可以通过以下命令安装:

pip install -r requirements.txt

使用脚本

概览

本存储库包含脚本,以再现基于MIMIC-B数据集的BP预测以及基于相机的BP预测的结果。基于MIMIC-A数据集的分析不在此存储库中涵盖。

要复制论文的结果,需要按照特定顺序执行以下脚本。下表总结了每个脚本的目的。

脚本名称 描述
1 download_mimic_iii_records.py 从MIMIC-III数据库下载数据。
2 prepare_MIMIC_dataset.py 用于:
  • 预处理
  • 信号分窗
  • 从信号窗口提取SBP和DBP的基线值
  • 将信号/血压值对存储为hdf5格式
或者可以从Zenodo(32GB)下载数据集。
3 h5_to_tfrecord.py 将数据分为训练、验证和测试集,并将其转换为.tfrecord格式,用于训练过程。
4 ppg_train_mimic_iii.py 使用PPG数据训练血压预测神经网络;保存模型以便后续使用(r)PPG数据进行微调和个性化。
5 ppg_personalization_mimic_iii.py 使用预先训练的神经网络并使用MIMIC-III数据库测试集中的PPG数据对其进行最后层的微调。
6 retrain_rppg_personalization.py 使用预先训练的神经网络并使用rPPG数据进行微调。

数据集和训练模型

用作神经架构训练的数据集以及训练模型本身可以在Zenodo上找到。

从MIMIC-III数据库下载数据

download_mimic_iii_records.py脚本可用于下载用于PPG基础训练的记录。具体的记录名在文件MIMIC-III_ppg_dataset_records.txt中提供。可以通过以下命令从命令行运行脚本:

python3 download_mimic_iii_records.py [-h] input output

positional arguments:
  input       包含从MIMIC-III数据库下载的记录名称的文件
  output      存储下载的MIMIC-III记录的文件夹

脚本运行时间较长,所有记录所需磁盘空间约为1.5TB。

准备PPG数据集

prepare_MIMIC_dataset.py脚本对download_mimic_iii_records.py下载的数据进行预处理。从每条记录中提取PPG和ABP信号,然后根据定义的长度和重叠进行分窗。预处理步骤包括滤波PPG信号。通过峰值检测从ABP信号中提取SBP/DBP值。多种启发式方法排除不适合的血压值及其对应的PPG信号,例如检查:

  • SBP和DBP是否在合理的范围内
  • ABP和PPG信号没有缺失值
  • 基于ABP/PPG计算的心率是否在合理范围

可以为每个主题和整个数据集定义最大样本数。数据集被保存到.h5文件以供进一步处理。

或者,也可以直接从Zenodo(32GB)下载数据集。

usage: prepare_MIMIC_dataset.py [-h] [--win_len WIN_LEN] [--win_overlap WIN_OVERLAP] [--maxsampsubject MAXSAMPSUBJECT]
                                [--maxsamp MAXSAMP] [--save_bp_data SAVE_BP_DATA]
                                datapath output

positional arguments:
  datapath              包含从MIMIC-III数据库下载的数据记录的路径
  output                目标.h5文件

optional arguments:
  -h, --help            显示帮助信息并退出
  --win_len WIN_LEN     PPG窗口长度(单位:秒)
  --win_overlap WIN_OVERLAP
                        窗口之间重叠量占窗口长度的比例(0...1)
  --maxsampsubject MAXSAMPSUBJECT
                        主题的最大样本数
  --maxsamp MAXSAMP     数据集中最大总样本数
  --save_ppg_data SAVE_PPG_DATA
                        0:仅保存血压数据;1:保存PPG和血压数据

创建用于训练的tfrecord数据集

为了训练神经网络,需要用prepare_MIMIC_dataset.py脚本创建的数据集分为训练、验证和测试集。h5_to_tfrecord.py脚本根据用户选择进行划分,(a)基于主题的分割或(b)随机分配样本。数据将分别以.tfrecord文件的形式存储在训练、验证和测试集中,以供训练使用。

usage: h5_to_tfrecord.py [-h] [--ntrain NTRAIN] [--nval NVAL] [--ntest NTEST] [--divbysubj DIVBYSUBJ] input output

positional arguments:
  input                 包含数据集的.h5文件路径
  output                .tfrecord文件的目标文件夹

optional arguments:
  -h, --help            显示帮助信息并退出
  --ntrain NTRAIN       训练集的样本数量(默认:1e6)
  --nval NVAL           验证集的样本数量(默认:2.5e5)
  --ntest NTEST         测试集的样本数量(默认:2.5e5)
  --divbysubj DIVBYSUBJ
                        根据主题(1)或样本(0)对数据集进行分割

使用PPG信号训练神经网络

脚本ppg_train_mimic_iii.py利用由脚本h5_to_tfrecord.py创建的tfrecord数据来训练神经网络。可用的神经架构包括AlexNet[2],ResNet[3],Slapnicar等人发表的一种架构[4]以及LSTM网络。训练使用早停策略,并保存验证损失最低时的网络权重,用于在测试集上估计血压值。测试结果被存储为.csv文件以供后续分析。模型检查点也被保存,以便日后进行微调和个性化。论文中使用的训练模型可以在Zenodo找到。

用法: ppg_training_mimic_iii.py [-h] [--arch ARCH] [--lr LR] [--batch_size BATCH_SIZE] 
                                [--winlen WINLEN] [--epochs EPOCHS] [--gpuid GPUID] 
                                ExpName datadir resultsdir chkptdir

位置参数:
  ExpName               训练的独特名称
  datadir               包含train、val和test子文件夹(包含tfrecord文件)的文件夹
  resultsdir            存储结果的目录
  chkptdir              用于存储模型检查点的目录

可选参数:
  -h, --help            显示此帮助消息并退出
  --arch ARCH           训练所用的神经网络架构(默认:alexnet,resnet,slapnicar,lstm)
  --lr LR               初始学习率(默认:0.003)
  --batch_size BATCH_SIZE
                        训练使用的批大小(默认:32)
  --winlen WINLEN       PPG窗口长度,单位为样本(默认:875)
  --epochs EPOCHS       训练的最大轮次数(默认:60)
  --gpuid GPUID         多GPU环境下的GPU ID(默认:None)

基于PPG数据微调预训练神经网络

脚本ppg_personalization_mimic_iii.py采用一组测试受试者,对基于PPG数据训练的神经网络进行微调,目的是通过使用每个测试受试者20%的数据重新训练,来改善这些受试者的均方误差。这20%可以是随机选取或系统地(前20%)。剩余的80%用于验证。脚本会在个性化前后,使用验证数据进行血压预测以进行比较。结果被存储为.csv文件,供后续分析。

用法: ppg_personalization_mimic_iii.py [-h] [--lr LR] [--batch_size BATCH_SIZE] [--winlen WINLEN] [--epochs EPOCHS] 
                                      [--nsubj NSUBJ] [--randompick RANDOMPICK] 
                                      ExpName DataDir ResultsDir ModelPath chkptdir

位置参数:
  ExpName               训练名称,前面加上相应的日期格式为MM-DD-YYYY
  DataDir               包含train、val和test子文件夹(包含tfrecord文件)的文件夹
  ResultsDir            存储结果的目录
  ModelPath             用于个性化的模型文件所在的路径
  chkptdir              存储模型检查点的目录

可选参数:
  -h, --help            显示此帮助消息并退出
  --lr LR               初始学习率(默认:0.003)
  --batch_size BATCH_SIZE
                        训练使用的批大小(默认:32)
  --winlen WINLEN       PPG窗口长度,单位为样本(默认:875)
  --epochs EPOCHS       训练的最大轮次数(默认:60)
  --nsubj NSUBJ         用于个性化的受试者数量(默认:20)
  --randompick RANDOMPICK
                        定义个性化数据是否随机抽取(1)或者取测试受试者数据的前20%(0)(默认:0)

利用迁移学习进行rPPG为基础的血压预测

脚本retrain_rppg_personalization.py微调一个预训练的神经网络(使用pg_train_mimic_iii.py脚本训练),以实现基于相机的血压预测。rPPG数据由data子文件夹中的hdf5文件提供,这些数据是在莱比锡大学医院的一项研究中收集的,通过标准RGB摄像头拍摄受试者,然后使用Wang等人发表的平面正交皮肤算法从面部皮肤区域提取rPPG信号[5]

如果您在自己的研究中使用这些数据,请引用我们的论文:

@inproceedings{schrumpf2021assessment,
  title={评估基于深度学习的PPG和rPPG信号血压预测},
  author={Schrumpf, Fabian 和 Frenzel, Patrick 等人},
  booktitle={IEEE/CVF计算机视觉与模式识别会议论文集},
  pages={3820--3830},
  year={2021}
}

预训练网络通过留一受试者交叉验证方案进行微调,可以通过使用测试受试者的一部分数据进行个性化。在微调前后,都使用测试受试者的数据评估网络性能。结果被保存到csv文件中以便分析。

用法: retrain_rppg_personalization.py [-h] [--pers PERS] [--randompick RANDOMPICK] ExpName DataFile ResultsDir ModelPath chkptdir

位置参数:
  ExpName               由相应日期(格式MM-DD-YYYY)前缀的训练名称
  DataFile              包含rPPG信号的hdf文件路径
  ResultsDir            存储结果的目录
  ModelPath             rPPG个性化所用模型文件的路径
  chkptdir              存储模型检查点的目录

可选参数:
  -h, --help            显示此帮助消息并退出
  --pers PERS           若为0,则使用来自测试受试者的数据进行个性化
  --randompick RANDOMPICK
                        若为0,则使用测试受试者数据的前20%,否则随机选择(仅当--pers == 1时适用)

使用预训练模型

trained_models子文件夹包含.h5文件,其中包含模型定义和权重。这些模型使用如[1]所述的非混合数据集进行训练。要将网络用于预测或微调,输入和输出数据需满足以下要求:

  • 输入数据必须具有875个样本长度(对应于125Hz采样频率下的7秒)
  • 收缩压(SBP)和舒张压(DBP)必须分别提供,因为每个值有一个输出节点

模型可以按如下方式导入:

import tensorflow.keras as ks
from kapre import STFT, Magnitude, MagnitudeToDecibel

dependencies = {
    'ReLU': ks.layers.ReLU,
    'STFT': STFT,
    'Magnitude': Magnitude,
    'MagnitudeToDecibel': MagnitudeToDecibel
}

model = ks.load_model(<PathToModelFile>, custom_objects=dependencies)

随后,可以使用model.predict()函数进行预测。

参考文献

[1] Schrumpf, F.; Frenzel, P.; Aust, C.; Osterhoff, G.; Fuchs, M. 基于深度学习的无创血压预测:从PPG和rPPG信号的研究。《传感器》2021, 21, 6022. https://doi.org/10.3390/s21186022

[2] Krizhevsky, A.; Sutskever, I.; Hinton, G. E. 使用深层卷积神经网络的ImageNet分类。《ACM通讯》2017年5月, 60(6), 84-90. doi: 10.1145/3065386.

[3] He, K.; Zhang, X.; Ren, S.; Sun, J. 深度残差学习用于图像识别。在2016 IEEE计算机视觉与模式识别会议(CVPR)中, 美国拉斯维加斯, 2016年6月, 770-778页。doi: 10.1109/CVPR.2016.90.

[4] Slapničar, G.; Mlakar, N.; Luštrek, M. 利用光体积描记图的谱时域深度神经网络进行血压估计。《传感器》2019年8月, 19(15), 3420. doi: 10.3390/s19153420.

[5] Wang, W.; den Brinker, A. C.; Stuijk, S.; de Haan, G. 远程PPG的算法原理。《生物医学工程学报》2017年7月, 64(7), 1479-1491. doi: 10.1109/TBME.2016.2609282.

项目介绍

利用深度学习对光电容积描记图(PPG)和反射光电容积描记图(rPPG)信号进行无创血压预测的评估【此简介由AI生成】

定制我的领域