This repository contains the official implementation of research comparing pretrained foundation models for physiological data classification tasks. The codebase focuses on electrodermal activity (EDA) signal analysis using state-of-the-art foundation models including MOMENT, Chronos, PatchTSMixer, and Mantis.
Recent advances in foundation models have demonstrated remarkable capabilities in natural language processing and computer vision. This work investigates their effectiveness in physiological signal analysis, specifically focusing on electrodermal activity (EDA) classification tasks. We evaluate multiple pretrained foundation models across four diverse datasets (USILaughs, SEED, BiHeartS, APSYNC) and compare their performance against traditional handcrafted features and machine learning approaches.
- Multi-model evaluation: Comparison of MOMENT, Chronos, PatchTSMixer, Mantis, and handcrafted features
- Comprehensive datasets: Four diverse EDA datasets for robust evaluation
- Feature extraction pipeline: Unified framework for extracting embeddings from foundation models
- Cross-validation: Support for Leave-One-Person-Out (LOPO) and Time-Aware Cross-Validation (TACV)
- Modular design: Easy extension for new models and datasets
- Reproducible experiments: Hydra configuration management for systematic experiments
The codebase is organized into several key components:
src/
βββ data/ # Dataset loading and preprocessing
βββ feature_extraction/ # Foundation model feature extractors
β βββ chronos.py # Amazon Chronos models
β βββ moment.py # MOMENT models
β βββ mantis.py # Mantis models
β βββ timemixer.py # PatchTSMixer models
β βββ handcrafted.py # Traditional handcrafted features
βββ engine/ # Training and evaluation engine
βββ validation/ # Cross-validation strategies
βββ utils/ # Utility functions and configurations
# Create conda environment
conda env create -f env.yml
conda activate pff- Single experiment:
python classification.py --config-name=mainconf dataset=usilaughs side=right- Hyperparameter sweep:
python classification.py --config-name=usilaughs_sweep --multirun- Custom configuration:
python classification.py feature_extractor=moment_large model=logistic_regression validation_method=lopoThe framework supports four EDA datasets:
- USILaughs: congitive load/relaxation classification
- SEED: low/high engagement
- BiHeartS: sleep/wake
- APSYNC: low/high engagement; this dataset can be used for enjoyment and immersion
These datasets can be shared, either in raw format or in the pre-processed format used in this work, upon signing a data sharing agreement.
Each dataset should be stored as .npz files with:
values: EDA signal data (shape: [samples, time, channels])labels: Binary classification labelsgroups: Subject/session identifiers for cross-validation
- MOMENT (
AutonLab/MOMENT-1-large): Time series foundation model - Chronos (
amazon/chronos-t5-large/small): Amazon's time series forecasting model - PatchTSMixer (
ibm-granite/granite-timeseries-patchtsmixer): IBM's patch-based model - Mantis (
paris-noah/Mantis-8M): Multi-modal foundation model
- Handcrafted Features: Traditional signal processing features (min, max, mean, std, slopes, peaks, spectral features)
- Machine Learning: Logistic Regression, XGBoost with hyperparameter optimization
The framework uses Hydra for configuration management. Key configuration components:
# Main configuration
dataset: usilaughs # Dataset selection
side: right # Data subset
device_map: "mps" # Device for model inference
# Model configuration
model: logistic_regression # Classifier type
feature_extractor: moment_large # Foundation model
validation_method: tacv # Cross-validation strategy
aggregator: mean_chan # Feature aggregation method- Models:
logistic_regression,xgboost,dummy_classifier - Feature Extractors:
moment_large,chronos_large,chronos_small,mantis,timemixer,handcrafted - Validation Methods:
lopo(Leave-One-Person-Out),tacv(Time-Aware Cross-Validation) - Aggregators:
mean_chan,mean_time,concat,none
Run comprehensive experiments across all model-dataset combinations:
# USILaughs dataset
python classification.py --config-name=usilaughs_sweep --multirun
# SEED dataset
python classification.py --config-name=seed_sweep --multirun
# BiHeartS dataset
python classification.py --config-name=bihearts_sweep --multirun
# APSYNC dataset
python classification.py --config-name=apsync_sweep --multirunThe repository includes Jupyter notebooks for result analysis in the notebooks/ folder:
data_distribution.ipynb: Dataset statistics and visualizationvisualize_results.ipynb: Comprehensive results comparison and visualization
Results are automatically saved to outputs/ with timestamp and configuration details.
The additional_notebook/ folder contains notebooks that were used during the initial development phases and are kept for reference purposes only. These notebooks are no longer actively maintained and should not be used for current analysis:
APSYNC_preparation.ipynb: Legacy data preparation for APSYNC datasetBiHeartS_prepatation.ipynb: Legacy data preparation for BiHeartS datasetSEED_preparation.ipynb: Legacy data preparation for SEED datasetUSILaughs_preparation.ipynb: Legacy data preparation for USILaughs datasetchecking_data.ipynb: Legacy data validation notebookchecking_results.ipynb: Legacy results checking notebookfoundation_models_testing.ipynb: Legacy model testing notebook
- Create a new feature extractor in
src/feature_extraction/:
class NewModelExtractor:
def __init__(self, model_name: str, **kwargs):
self.model = load_model(model_name)
def __call__(self, data: DataInfo) -> EDADataset:
# Extract features using your model
features = self.model.encode(data["values"])
data["features"] = features
return data- Add configuration file in
configs/classification/feature_extractor/:
_target_: src.feature_extraction.new_model.NewModelExtractor
model_name: "your-model-name"
device_map: ${device_map}- Prepare data in the required format (
.npzfile) - Create sweep configuration in
configs/classification/ - Update dataset paths in configuration files
If you use this codebase in your research, please cite:
@inproceedings{alchieri_exploring_2025,
address = {Espoo, Finland},
title = {Exploring Generalist Foundation Models for Time Series of Electrodermal Activity Data},
isbn = {979-8-4007-1477-1},
doi = {10.1145/3714394.3756186},
language = {en},
booktitle = {Companion of the 2025 {ACM} {International} {Joint} {Conference} on {Pervasive} and {Ubiquitous} {Computing}},
author = {Alchieri, Leonardo and Candian, Lino and Alecci, Lidia and Abdalazim, Nouran},
year = {2025},
}
We welcome contributions!
This project is licensed under the MIT License - see the LICENSE file for details.
- MOMENT for the foundation time series model
- Chronos for Amazon's time series forecasting framework
- Hydra for configuration management
- The contributors of the physiological datasets used in this research
For questions or collaboration opportunities, please contact:
- Leonardo Alchieri: leonardo.alchieri@usi.ch
- Research Group: https://pc.inf.usi.ch
β If you find this work useful, please consider starring the repository!