| --- |
| language: |
| - en |
| library_name: pytorch |
| license: mit |
| pipeline_tag: other |
| tags: |
| - sleep |
| - eeg |
| - polysomnography |
| - foundation-model |
| - self-supervised |
| - vit |
| - biosignals |
| --- |
| |
| # OSF: On Pre-training and Scaling of Sleep Foundation Models |
|
|
| This repository contains the weights for **OSF**, a family of sleep foundation models introduced in the paper [OSF: On Pre-training and Scaling of Sleep Foundation Models](https://huggingface.co/papers/2603.00190). |
|
|
| [](https://huggingface.co/papers/2603.00190) |
| [](https://yang-ai-lab.github.io/osf/) |
| [](https://github.com/yang-ai-lab/OSF-Open-Sleep-FM) |
| [](LICENSE) |
| [](#installation) |
|
|
| ## π₯ News |
|
|
| - [2026-2-24] Our codebase and checkpoint is released. Full codebase for benchmarking will be public available after acceptance. |
| - [2026-2-22] Our paper is out. |
|
|
| ## π Introduction |
|
|
| Polysomnography (PSG) provides the gold standard for sleep assessment but suffers from substantial heterogeneity across recording devices and cohorts. OSF is a family of sleep foundation models (FMs) pre-trained on a massive corpus of 166,500 hours of sleep recordings from nine public sources. Leveraging the SleepBench benchmark, the authors establish an enhanced pre-training and scaling recipe that achieves state-of-the-art performance across diverse sleep and disease prediction tasks. |
|
|
| ## πΏ Installation |
|
|
| ```bash |
| git clone https://huggingface.co/yang-ai-lab/OSF-Base |
| cd OSF-Base |
| conda env create -f environment.yml |
| conda activate myenv |
| ``` |
|
|
| ### Dependencies |
|
|
| - Python >= 3.10 |
| - PyTorch >= 2.9.0 |
| - PyTorch Lightning >= 2.5.5 |
|
|
| ## π Quick Start |
|
|
| We provide a demo notebook (`demo.ipynb`) demonstrating how to extract embeddings from PSG signals using the pretrained model. |
|
|
| ```python |
| import torch |
| from osf.backbone.vit1d_cls import vit_base |
| |
| # Load pretrained weights (included in this repo) |
| payload = torch.load("osf_backbone.pth", map_location="cpu", weights_only=False) |
| meta = payload["metadata"] |
| |
| # Initialize model |
| backbone = vit_base( |
| num_leads=meta["num_leads"], # 12 channels |
| seq_len=meta["seq_len"], # 1920 (64 Hz Γ 30 s) |
| patch_size=meta["patch_size_time"], |
| lead_wise=meta["lead_wise"], |
| patch_size_ch=meta["patch_size_ch"], |
| ) |
| backbone.load_state_dict(payload["state_dict"]) |
| backbone.eval() |
| |
| # Extract embeddings |
| # x: [B, 12, 1920] - 12-channel PSG, 64 Hz Γ 30 seconds |
| with torch.no_grad(): |
| cls_embs, patch_embs = backbone.forward_encoding(x, return_sequence=False) |
| # cls_embs: [B, 768] - Global epoch-level representation |
| # patch_embs: [B, 90, 768] - Local patch representations |
| ``` |
|
|
| ## π©βπ» Usage |
|
|
| ### Input Format |
|
|
| Expected input format: |
| - **12 PSG Channels**: ECG, EMG_Chin, EMG_LLeg, EMG_RLeg, ABD, THX, NP, SN, EOG_E1_A2, EOG_E2_A1, EEG_C3_A2, EEG_C4_A1 |
| - **Sample Rate**: 64 Hz |
| - **Epoch Length**: 30 seconds |
| - **Input Shape**: `[B, 12, 1920]` |
| |
| ### Pretraining and Fine-tuning |
| |
| For detailed instructions on pretraining and fine-tuning using the OSF framework, please refer to the scripts in the [official GitHub repository](https://github.com/yang-ai-lab/OSF-Open-Sleep-FM). |
| |
| ## π Benchmark Evaluations |
| |
| OSF has been evaluated on the **SleepBench** benchmark across tasks such as Sleep Stage classification, Arousal detection, Hypopnea event detection, and Oxygen Desaturation detection, outperforming existing SSL methods like SleepFM, SimCLR, and DINO. |
| |
| ## π Citation |
| |
| If you use this code or models in your research, please cite the paper: |
| |
| ```bibtex |
| @article{shuai2026osf, |
| title={OSF: On Pre-training and Scaling of Sleep Foundation Models}, |
| author={Shuai, Zitao and Xu, Zongzhe and Yang, David and Wang, Wei and Yang, Yuzhe}, |
| journal={arXiv preprint arXiv:2603.00190}, |
| year={2026} |
| } |
| ``` |