| --- |
| library_name: braindecode |
| license: unknown |
| tags: |
| - BrainBERT |
| - braindecode |
| - ieeg |
| - seeg |
| - foundation-model |
| - model_hub_mixin |
| - pytorch_model_hub_mixin |
| --- |
| |
| # BrainBERT — Foundation Model for Intracranial Neural Signals |
|
|
| Pretrained weights for [`braindecode.models.BrainBERT`](https://braindecode.org/stable/generated/braindecode.models.BrainBERT.html), |
| a faithful braindecode port of **BrainBERT** (Wang et al., ICLR 2023), a |
| self-supervised foundation model for intracranial (sEEG/iEEG) recordings. |
|
|
| - Paper: [BrainBERT: Self-supervised representation learning for intracranial recordings](https://arxiv.org/abs/2302.14367) (ICLR 2023) |
| - Original code & weights: [czlwang/BrainBERT](https://github.com/czlwang/BrainBERT) |
| - braindecode docs: https://braindecode.org |
|
|
| ## Provenance & license |
|
|
| These weights are the **official pretrained "large" checkpoint** (`stft` |
| variant) released by the original authors. The Transformer encoder and input |
| encoding are mapped **1:1** into the braindecode `BrainBERT` module (the masked |
| spectrogram-reconstruction head, used only for the self-supervised pretraining |
| objective, is kept for weight parity; the classification head is a |
| braindecode-native addition, randomly initialized). |
|
|
| The upstream repository ships **no explicit license file**, so this repository is |
| labelled `unknown`: the original authors retain all rights, and these weights are |
| re-hosted for convenience to make `from_pretrained` work out of the box. If you |
| use them, please **cite the original BrainBERT paper** and refer to the authors' |
| repository for terms of use. |
|
|
| ## Model configuration |
|
|
| This checkpoint uses the released "large" configuration (~43M parameters): |
|
|
| | | | |
| |---|---| |
| | `hidden_dim` | 768 | |
| | `ffn_dim` | 3072 | |
| | `n_layers` | 6 | |
| | `n_heads` | 12 | |
| | `freq_cutoff` (input_dim) | 40 | |
| | `nperseg` | 400 | |
| | `noverlap` | 350 | |
| | `activation` | GELU | |
| | `sfreq` | 2048 Hz | |
| |
| The signal is expected at **2048 Hz** (Laplacian-re-referenced, as in the paper). |
| The short-time Fourier transform front-end is computed **inside** the model, so it |
| consumes raw `(batch, n_chans, n_times)` signal directly (upstream fed a |
| pre-computed spectrogram). Frames are pooled over time and channels, so you may |
| freely change `n_chans` and `n_outputs` (the classification head is task-specific |
| and randomly initialized — fine-tune it on your downstream task). `n_times` only |
| needs to be long enough to yield at least one spectrogram frame. |
|
|
| ## Usage |
|
|
| ```python |
| from braindecode.models import BrainBERT |
| |
| # The encoder loads the pretrained weights; the classification head is |
| # (re)initialized for your task via n_outputs. |
| model = BrainBERT.from_pretrained("braindecode/brainbert-pretrained", n_outputs=2) |
| ``` |
|
|
| ## Fidelity |
|
|
| The ported encoder reproduces the upstream reference |
| (`MaskedTFModel`, `intermediate_rep=True`) to within **~6e-5** max absolute |
| difference on the authors' demo signal — the residual is cross-device float32 |
| rounding in the fixed sinusoidal positional table (computed on GPU at training |
| time, regenerated on CPU here), which grows only at positions far beyond any |
| realistic sequence length. |
|
|
| ## Citation |
|
|
| ```bibtex |
| @inproceedings{wang2023brainbert, |
| title = {{BrainBERT}: Self-supervised representation learning for intracranial recordings}, |
| author = {Wang, Christopher and Subramaniam, Vishwaas and Yaari, Adam Uri and |
| Kreiman, Gabriel and Katz, Boris and Cases, Ignacio and Barbu, Andrei}, |
| booktitle = {International Conference on Learning Representations (ICLR)}, |
| year = {2023} |
| } |
| ``` |
|
|