DeepEpilepsy_v1 / README.md
emilelemoine's picture
Update README.md
d4e2285 verified
---
language: en
license: mit
tags:
- eeg
- epilepsy
- medical
- vision-transformer
- deep-learning
datasets:
- private
metrics:
- accuracy
- auroc
library_name: pytorch
---
# DeepEpilepsy: Deep Learning Models for Epilepsy Diagnosis from Routine EEG
![ViT_architecture](https://cdn-uploads.huggingface.co/production/uploads/68f50e480a62655974ebb216/vLeqIPNeAQWdCI2R_lF3S.png)
## Model Description
DeepEpilepsy is a collection of deep learning models trained to identify epilepsy from routine EEG recordings. These models complement traditional interpretation based on interictal epileptiform discharges by detecting novel EEG patterns relevant to epilepsy diagnosis.
**Paper**: [Improving diagnostic accuracy of routine EEG for epilepsy using deep learning](https://academic.oup.com/braincomms/advance-article/doi/10.1093/braincomms/fcaf319/8240832) (Brain Communications, 2025)
**Repository**: [GitLab Repository](https://gitlab.com/chum-epilepsy/dl_epilepsy_reeg) - See README for full documentation and preprocessing code
## Model Variants
- **DeepEpilepsy-Large**: ViT1d_Conv1d_large_50 (flagship model, 50-point patches)
- **DeepEpilepsy-Small**: ViT1d_Conv1d_small_200 (200-point patches)
- Variants available for 10s and 30s EEG segments
Additional architectures: SimpleViT1d, ConvNeXt, InceptionTime, ShallowConvNet
## Usage
```python
import torch
from epileptology.ml.models.transformers import ViT1d
from epileptology.utils.parsers import parse_config
# Load configuration
config = parse_config("proj_config.yaml")
training_config = parse_config(config["data"]["sweep_config"])
# Initialize model (example: DeepEpilepsy-Large-30s)
model_name = "ViT1d_Conv1d_large_50"
SFREQ = 200
SEGMENT_DURATION = 30
model_config = training_config[model_name]["model"]
model_config.update({
"n_class": 2,
"n_timepoints": int(SFREQ * SEGMENT_DURATION)
})
model = ViT1d(**model_config)
model.load_state_dict(torch.load("path/to/model.pt"))
model.eval()
# Preprocess EEG (shape: n_channels, n_timepoints)
def standard_scale(eeg, eps=1e-20):
means = eeg.mean(dim=-1, keepdim=True)
stds = eeg.std(dim=-1, keepdim=True) + eps
return (eeg - means) / stds
# Crop to segment duration and normalize
eeg_segment = eeg_segment[..., :int(SFREQ * SEGMENT_DURATION)]
eeg_segment = standard_scale(eeg_segment).unsqueeze(0) # Add batch dimension
# Inference
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)
with torch.no_grad():
predictions = model(eeg_segment.to(device))
probabilities = torch.softmax(predictions, dim=1)
```
## Training Data
- 948 routine EEG recordings from 846 patients
- Tertiary care center (CHUM, Montreal)
- Temporal split: Training/validation (Jan 2018 - Jul 2019), Testing (Jul - Sep 2019)
- Median follow-up: 2.2 years (training), 1.7 years (testing)
## Performance
**DeepEpilepsy (flagship model)**:
- AUROC: 0.76 (95% CI: 0.69–0.83)
- Combined with interictal discharges: 0.83 (95% CI: 0.77–0.89)
- Outperforms interictal discharge-based interpretation (AUROC: 0.69)
## Citation
```bibtex
@article{10.1093/braincomms/fcaf319,
author = {Lemoine, Émile and Toffa, Denahin and Xu, An Qi and Tessier, Jean-Daniel and Jemel, Mezen and Lesage, Frédéric and Nguyen, Dang K and Bou Assi, Elie},
title = {Improving diagnostic accuracy of routine EEG for epilepsy using deep learning},
journal = {Brain Communications},
pages = {fcaf319},
year = {2025},
doi = {10.1093/braincomms/fcaf319},
url = {https://doi.org/10.1093/braincomms/fcaf319}
}
```
## Authors
Émile Lemoine, Denahin Toffa, An Qi Xu, Jean-Daniel Tessier, Mezen Jemel, Frédéric Lesage, Dang Khoa Nguyen, Elie Bou Assi
## Contact
For questions, please contact the corresponding author or submit an issue on the GitLab repository.