MANAS-2 / README.md
mannasAI-labs's picture
Release MANAS-2 encoder
c61906f verified
|
Raw History Blame Contribute Delete
2.85 kB
metadata
library_name: transformers
pipeline_tag: feature-extraction
license: apache-2.0
language:
  - en
tags:
  - eeg
  - neuroscience
  - foundation-model
  - masked-autoencoder
  - representation-learning
  - pytorch
  - custom_code

MANAS-2

MANAS-2 is a transformer-based foundation model for EEG representation learning, developed by MannasAI. It combines Raw-Band Hybrid (RBH) masked autoencoding with Constrained Reconstruction (ConRec) to learn temporal and spectral features from EEG.

Model Details

MANAS-2 has 92.8M parameters, 22 transformer layers, and 512-dimensional embeddings. It processes EEG sampled at 200 Hz using one-second patches with a 0.1-second overlap and spatiotemporal positional encoding. Channel count and signal length can vary.

During pretraining, RBH uses waveform and spectral reconstruction, while ConRec regularizes local RMS-energy continuity in reconstructed waveforms. Pretraining uses unlabeled clinical EEG from internal sources, TUH EEG, and I-CARE. This release contains the encoder for feature extraction and fine-tuning.

Paper: MANAS-2: Constrained Reconstruction for EEG Foundation Models

Uses

Install the dependencies:

pip install "torch>=2.2" "transformers>=4.57,<5" "safetensors>=0.4"

Extract embeddings using the included electrode-position lookup:

import torch
from transformers import AutoModel

model = AutoModel.from_pretrained(
    "MannasAI/MANAS-2", trust_remote_code=True,
).eval()

# Example: 10 seconds of EEG at 200 Hz.
electrode_names = ["Fz", "Cz", "Pz"]
eeg = torch.randn(1, 3, 2000)  # [batch, channels, samples]
eeg = (eeg - eeg.mean(-1, keepdim=True)) / (
    eeg.std(-1, keepdim=True, correction=1) + 1e-6
)
positions = model.get_channel_positions(electrode_names)
positions = positions.unsqueeze(0).expand(eeg.size(0), -1, -1)

with torch.inference_mode():
    features = model(eeg, positions)       # [1, 11, 3, 512]
    embedding = features.mean(dim=(1, 2)) # [1, 512]

For real EEG, filter and resample to 200 Hz, then normalize each channel within each window as above. Electrode names must match the signal's channel order; the lookup returns coordinates in centimeters. The model expects preprocessed inputs and returns [batch, patches, channels, 512] features.

License

Model weights and code are released under Apache-2.0.

Citation

@misc{kulkarni2026manas2,
  title={MANAS-2: Constrained Reconstruction for EEG Foundation Models},
  author={Arvasu Kulkarni and Aditya Ray Mishra and Mahir Jain and Parshva Runwal and Lakshya Saini and Siddharth Panwar and Sandeep Singh},
  year={2026},
  eprint={2609.13717},
  archivePrefix={arXiv},
  primaryClass={cs.AI},
  url={https://arxiv.org/abs/2609.13717}
}