CP-PPG / README.md
Manhph2211's picture
Remove pipeline_tag to suppress pipeline() snippet in Use this model
23fbd30 verified
metadata
license: apache-2.0
library_name: transformers
tags:
  - ppg
  - signal-processing
  - biosignal
  - 1d-unet
  - waveform-reconstruction
  - feature-extraction

Reliable Wrist PPG Monitoring by Mitigating Poor Skin-Sensor Contact
Hung Manh PhamMatthew Yiwen HoYiming ZhangDimitris SpathisAaqib SaeedDong Ma


Overview

Photoplethysmography (PPG) is a widely used non-invasive technique for monitoring cardiovascular health and various physiological parameters on consumer and medical devices. While motion artifacts are well-known challenges in dynamic settings, suboptimal skin-sensor contact in sedentary conditions - an important issue often overlooked in existing literature - can distort PPG signal morphology, leading to the loss or shift of essential waveform features and therefore degrading sensing performance. In this work, we propose a deep learning-based framework that transforms contact pressure-distorted PPG signals into ones with the ideal morphology, known as CP-PPG. CP-PPG incorporates a well-crafted data processing pipeline and an adversarially trained deep generative model, together with a custom PPG-aware loss function. We validated CP-PPG through comprehensive evaluations, including 1) morphology transformation performance, 2) downstream physiological monitoring performance on public datasets, and 3) in-the-wild performance, which together demonstrate substantial and consistent improvements in signal fidelity.


Usage

Installation

pip install transformers torch

Signal Reconstruction

from transformers import AutoModel
import torch

model = AutoModel.from_pretrained("Manhph2211/CP-PPG", trust_remote_code=True)
model.eval()

x = torch.randn(1, 1, 1024)

with torch.no_grad():
    out = model(x)

print(out.reconstruction.shape)  # torch.Size([1, 1, 1024])

PPG Embedding Extraction

with torch.no_grad():
    out = model(x, output_hidden_states=True)

print(out.last_hidden_state.shape) 
print(out.pooler_output.shape)      # torch.Size([1, 128])

Citation

@article{pham2025reliable,
  title={Reliable wrist PPG monitoring by mitigating poor skin sensor contact},
  author={Pham, Hung Manh and Ho, Matthew Yiwen and Zhang, Yiming and Spathis, Dimitris and Saeed, Aaqib and Ma, Dong},
  journal={Scientific Reports},
  year={2025},
  publisher={Nature Publishing Group UK London}
}

@article{ho2025wf,
  title={WF-PPG: A wrist-finger dual-channel dataset for studying the impact of contact pressure on PPG morphology},
  author={Ho, Matthew Yiwen and Pham, Hung Manh and Saeed, Aaqib and Ma, Dong},
  journal={Scientific Data},
  volume={12},
  number={1},
  pages={200},
  year={2025},
  publisher={Nature Publishing Group UK London}
}

Acknowledgements

This research was supported by the Singapore Ministry of Education (MOE) Academic Research Fund (AcRF) Tier 2 grant (Grant ID: T2EP20124-0046).