| --- |
| license: cc-by-nc-4.0 |
| library_name: braindecode |
| tags: |
| - eeg |
| - polysomnography |
| - sleep-staging |
| - foundation-model |
| - braindecode |
| --- |
| |
| # SleepFMStager — pretrained sleep stager |
|
|
| Mirror of the official **SleepFM** sleep-staging model, re-hosted for stable loading from |
| [Braindecode](https://github.com/braindecode/braindecode). |
|
|
| SleepFM is a multimodal polysomnography (PSG) foundation model introduced in: |
|
|
| > R. Thapa et al., *"A multimodal sleep foundation model for disease prediction,"* |
| > **Nature Medicine** (2026). https://doi.org/10.1038/s41591-025-04133-4 |
|
|
| ## Files |
|
|
| | File | Description | |
| |------|-------------| |
| | `model.safetensors` | The full stager, with the parameter names of `braindecode.models.SleepFMStager` | |
| | `config.json` | Architecture of the checkpoint, read by `from_pretrained()` | |
|
|
| Upstream ships the stager in two pieces: the channel-agnostic tokenizer lives in the |
| encoder checkpoint (`model_base/best.pt`) and the staging head in |
| `model_sleep_staging/best.pth`. This file **merges both**, so a single call returns a |
| model that is pretrained end to end, its five-class output layer included. The tensors are |
| those of the upstream artifacts; only the keys were rewritten to the library's parameter |
| names. Loading this file or the two upstream ones gives bit-identical outputs. |
|
|
| The upstream artifacts themselves are kept, byte-for-byte, in |
| [`braindecode/SleepFM`](https://huggingface.co/braindecode/SleepFM). |
|
|
| ## Usage |
|
|
| ```python |
| from braindecode.models import SleepFMStager |
| |
| # Defaults to this repository. |
| model = SleepFMStager.from_pretrained(n_chans=4, n_outputs=5, n_times=3840, sfreq=128) |
| model.eval() |
| ``` |
|
|
| The output has shape `(batch, n_outputs, n_patches)`: one prediction per **5-second |
| patch**, not per 30-second scoring epoch, so six predictions cover one scored epoch. For |
| this checkpoint the five classes are Wake, N1, N2, N3 and REM. Input must be sampled at |
| **128 Hz**. Pass `n_outputs` different from 5 to reinitialise the output layer for another |
| label set. |
|
|
| ## License & attribution |
|
|
| - **License: Creative Commons Attribution-NonCommercial 4.0 International (CC BY-NC 4.0).** |
| - Copyright (c) 2025 Rahul Thapa. |
| - Upstream source: https://github.com/zou-group/sleepfm-clinical |
|
|
| These weights are **not** covered by Braindecode's BSD-3 license and inherit the |
| upstream **noncommercial** terms. Re-hosted for reproducibility and stable |
| availability only; attribution and the CC BY-NC 4.0 restriction are preserved. |
|
|