Signal-JEPA
Self-supervised pre-trained weights for the Signal-JEPA foundation model from
Guetschel et al. (2024), packaged for use
with braindecode. See the full API reference in
the docs: braindecode.models.SignalJEPA.
The model was pre-trained on the Lee2019 dataset (62 EEG channels in the
10-10 layout, sampled at 128 Hz). The repo ships the weights together with a
config.json so they can be loaded in one line with
YourModelClass.from_pretrained(repo_id, ...).
Available checkpoints
Two variants are published:
| repo ID | channel embedding included | when to use |
|---|---|---|
braindecode/signal-jepa |
β 62-row _ChannelEmbedding aligned with the pre-training layout |
your recording channels are a subset (by name, case-insensitive) of the 62 pre-training channels β you want to reuse the learned spatial embeddings |
braindecode/signal-jepa_without-chans |
β only the SSL backbone (feature encoder + transformer) | your channels are not a subset of the pre-training set, or you prefer to train channel embeddings from scratch |
If you are unsure, start with braindecode/signal-jepa_without-chans: it
always works, regardless of your electrode layout.
Training data
The data that shaped these weights. The ids are the datasets: field of this card,
which braindecode reads into model.card_data.datasets when you call
from_pretrained (MOABB class names for MOABB datasets, OpenNeuro / NEMAR
accessions, Hub ids otherwise). nm/on ids are datasets on NEMAR
(on = NEMAR's copy of the OpenNeuro dataset with the same number). Rows marked
private: are data the authors did not release; they are not in datasets:.
datasets: id |
Dataset | Stage | Modality |
|---|---|---|---|
nm000338 |
Lee et al. 2019 OpenBMI, motor imagery paradigm (54 subjects, 62 EEG channels), MOABB Lee2019_MI | pretraining | EEG |
nm000323 |
Lee et al. 2019 OpenBMI, ERP (P300 speller) paradigm, MOABB Lee2019_ERP | pretraining | EEG |
nm000273 |
Lee et al. 2019 OpenBMI, SSVEP paradigm, MOABB Lee2019_SSVEP | pretraining | EEG |
- S-JEPA self-supervised pre-training (16 s examples, 60 % spatial mask, run adeuwv4s) on Lee2019 subjects 1-40, all three paradigms pooled, no labels; subjects 41-47 = SSL validation set used for early stopping / best-checkpoint selection; subjects 48-54 not used for these weights (downstream evaluation only). All 179 tensors byte-identical to the original file.
- Sources: arXiv:2403.11772 (HTML), section DATASETS; https://huggingface.co/api/models/braindecode/signal-jepa/commits/main (commit 9e20126cf5); braindecode check: tensor-byte sha256 check -> compare_sjepa.json; W/bd/braindecode/models/signal_jepa.py.
Quick start
Base model (pre-training architecture)
The base model outputs contextual features, not class predictions. Use it for downstream feature extraction or further SSL.
from braindecode.models import SignalJEPA
# With the pre-trained channel embeddings (recording channels β pre-train set):
model = SignalJEPA.from_pretrained("braindecode/signal-jepa")
# Or: with your own channels, kept aligned to the pre-training embedding table
model = SignalJEPA.from_pretrained(
"braindecode/signal-jepa",
chs_info=raw.info["chs"], # subset of the 62 pre-training channels
channel_embedding="pretrain_aligned",
)
# Or: without pre-trained channel embeddings (any electrode layout):
model = SignalJEPA.from_pretrained(
"braindecode/signal-jepa_without-chans",
chs_info=raw.info["chs"],
strict=False, # the channel-embedding weight is intentionally missing
)
Downstream architectures
Three classification architectures are introduced in the paper:
- a) Contextual β uses the full transformer encoder
- b) Post-local β discards the transformer; spatial convolution after local features
- c) Pre-local β discards the transformer; spatial convolution before local features
All three add a freshly-initialized classification head on top of the SSL
backbone. The head is not part of the checkpoint and will be trained from
scratch during fine-tuning; pass strict=False so from_pretrained does not
complain about those missing keys.
from braindecode.models import (
SignalJEPA_Contextual,
SignalJEPA_PreLocal,
SignalJEPA_PostLocal,
)
# a) Contextual β keeps the transformer
model = SignalJEPA_Contextual.from_pretrained(
"braindecode/signal-jepa", # or "signal-jepa_without-chans"
n_times=256, # e.g. 2 s at 128 Hz
n_outputs=4,
strict=False, # ignore un-trained classification head
)
# b) Post-local β transformer discarded
model = SignalJEPA_PostLocal.from_pretrained(
"braindecode/signal-jepa_without-chans",
n_chans=19,
n_times=256,
n_outputs=4,
strict=False,
)
# c) Pre-local β transformer discarded
model = SignalJEPA_PreLocal.from_pretrained(
"braindecode/signal-jepa_without-chans",
n_chans=19,
n_times=256,
n_outputs=4,
strict=False,
)
See the braindecode tutorial
Fine-tuning a Foundation Model (Signal-JEPA)
for a complete example including layer freezing and training with
skorch.EEGClassifier.
Channel embedding modes
SignalJEPA and SignalJEPA_Contextual accept a channel_embedding kwarg:
"scratch"(default): the_ChannelEmbeddingtable has one row per user channel, initialized fromchs_info. Compatible with thewithout-chanscheckpoint."pretrain_aligned": the table has 62 rows in the pre-training order,forwardindexes into the subset matching yourchs_info(matched by channel name, case-insensitive). Compatible with the full checkpoint.
from_pretrained picks the right mode automatically based on the checkpoint's
config.json; override with the channel_embedding= kwarg if needed.
Citation
@article{guetschel2024sjepa,
title = {S-JEPA: towards seamless cross-dataset transfer
through dynamic spatial attention},
author = {Guetschel, Pierre and Moreau, Thomas and Tangermann, Michael},
journal = {arXiv preprint arXiv:2403.11772},
year = {2024},
}
Cite Braindecode
If you use this braindecode port in scientific work, cite the software on Zenodo, doi:10.5281/zenodo.17699192, and the original model and datasets cited above.
@software{braindecode,
author = {Aristimunha, Bruno and
Guetschel, Pierre and
Wimpff, Martin and
Gemein, Lukas and
Rommel, Cedric and
Banville, Hubert and
Sliwowski, Maciej and
Wilson, Daniel and
Brandt, Simon and
Gnassounou, ThΓ©o and
Paillard, Joseph and
{Junqueira Lopes}, Bruna and
Sedlar, Sara and
Moreau, Thomas and
Chevallier, Sylvain and
Gramfort, Alexandre and
Schirrmeister, Robin Tibor},
title = {Braindecode: toolbox for decoding raw electrophysiological brain data
with deep learning models},
url = {https://github.com/braindecode/braindecode},
doi = {10.5281/zenodo.17699192},
publisher = {Zenodo},
license = {BSD-3-Clause},
}
- Downloads last month
- 1,205
