• Stars
    star
    145
  • Rank 254,144 (Top 6 %)
  • Language
    Python
  • License
    Apache License 2.0
  • Created about 6 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

EEG Sleep stage classification using CNN with Keras

DOI

EEG_classification

Description of the approach : https://towardsdatascience.com/sleep-stage-classification-from-single-channel-eeg-using-convolutional-neural-networks-5c710d92d38e

Sleep Stage Classification from Single Channel EEG using Convolutional Neural Networks


Photo by Paul M on Unsplash

Quality Sleep is an important part of a healthy lifestyle as lack of it can cause a list of issues like a higher risk of cancer and chronic fatigue. This means that having the tools to automatically and easily monitor sleep can be powerful to help people sleep better.
Doctors use a recording of a signal called EEG which measures the electrical activity of the brain using an electrode to understand sleep stages of a patient and make a diagnosis about the quality if their sleep.

In this post we will train a neural network to do the sleep stage classification automatically from EEGs.

Data

In our input we have a sequence of 30s epochs of EEG where each epoch has a label {“W”, “N1”, “N2”, “N3”, “REM”}.

Fig 1 : EEG Epoch

Fig 2 : Sleep stages through the night

This post is based on a publicly available EEG Sleep data ( Sleep-EDF ) that was done on 20 subject, 19 of which have 2 full nights of sleep. We use the pre-processing scripts available in this repo and split the train/test so that no study subject is in both at the same time.

The general objective is to go from a 1D sequence like in fig 1 and predict the output hypnogram like in fig 2.

Model Description

Recent approaches [1] use a sub-model that encodes each epoch into a 1D vector of fixed size and then a second sequential sub-model that maps each epoch’s vector into a class from {“W”, “N1”, “N2”, “N3”, “REM”}.

Here we use a 1D CNN to encode each Epoch and then another 1D CNN or LSTM that labels the sequence of epochs to create the final hypnogram. This allows the prediction for an epoch to take into account the context.

Sub-model 1 : Epoch encoder

Sub-model 2 : Sequential model for epoch classification

The full model takes as input the sequence of EEG epochs ( 30 seconds each) where the sub-model 1 is applied to each epoch using the TimeDistributed Layer of Keras which produces a sequence of vectors. The sequence of vectors is then fed into a another sub-model like an LSTM or a CNN that produces the sequence of output labels.
We also use a linear Chain CRF for one of the models and show that it can improve the performance.

Training Procedure

The full model is trained end-to-end from scratch using Adam optimizer with an initial learning rate of 1e⁻³ that is reduced each time the validation accuracy plateaus using the ReduceLROnPlateau Keras Callbacks.

Accuracy Training curves

Results

We compare 3 different models :

  • CNN-CNN : This ones used a 1D CNN for the epoch encoding and then another 1D CNN for the sequence labeling.
  • CNN-CNN-CRF : This model used a 1D CNN for the epoch encoding and then a 1D CNN-CRF for the sequence labeling.
  • CNN-LSTM : This ones used a 1D CNN for the epoch encoding and then an LSTM for the sequence labeling.

We evaluate each model on an independent test set and get the following results :

  • CNN-CNN : F1 = 0.81, ACCURACY = 0.87
  • CNN-CNN-CRF : F1 = 0.82, ACCURACY =0.89
  • CNN-LSTM : F1 = 0.71, ACCURACY = 0.76

The CNN-CNN-CRF outperforms the two other models because the CRF helps learn the transition probabilities between classes. The LSTM based model does not work as well because it is most sensitive to hyper-parameters like the optimizer and the batch size and requires extensive tuning to perform well.

Ground Truth Hypnogram

Predicted Hypnogram using CNN-CNN-CRF

Source code available here : https://github.com/CVxTz/EEG_classification

I look forward to your suggestions and feedback.

[1] DeepSleepNet: a Model for Automatic Sleep Stage Scoring based on Raw Single-Channel EEG

How to cite:

@software{mansar_youness_2020_4060151,
  author       = {Mansar Youness},
  title        = {CVxTz/EEG\_classification: v1.0},
  month        = sep,
  year         = 2020,
  publisher    = {Zenodo},
  version      = {v1.0},
  doi          = {10.5281/zenodo.4060151},
  url          = {https://doi.org/10.5281/zenodo.4060151}
}

More Repositories

1

image_search_engine

Image search engine
Python
232
star
2

time_series_forecasting

Python
194
star
3

ECG_Heartbeat_Classification

CNN for heartbeat classification
Python
148
star
4

medical_image_segmentation

Medical image segmentation ( Eye vessel segmentation)
Python
124
star
5

audio_classification

CNN 1D vs 2D audio classification
Jupyter Notebook
103
star
6

recommender_transformer

Python
82
star
7

graph_classification

Learning from graph data using Keras
Python
64
star
8

music_genre_classification

music genre classification : LSTM vs Transformer
Python
61
star
9

rubiks_cube

Rubik's Cube solver using reinforcement learning
Python
53
star
10

kinship_prediction

Deep Neural Networks for Kinship prediction using face photos
Python
47
star
11

face_age_gender

Can we predict the age and gender of someone given a picture of their face ?
Python
42
star
12

COLA_pytorch

COLA contrastive pre-training method implemented in PyTorch
Python
40
star
13

DeepTabular

Python
37
star
14

fingerprint_denoising

U-Net for fingerprint denoising
Python
26
star
15

IntegratedGradientsPytorch

Integrated gradients attribution method implemented in PyTorch
Python
23
star
16

sudoku_solver

Solving a Sudoku Puzzle from a screenshot
Python
22
star
17

llm-serve-tutorial

Python
21
star
18

RL

RL algorithm implementations from scratch.
Python
17
star
19

distill-llm

Python
17
star
20

FastImageClassification

A Step-By-Step tutorial to build and deploy an image classification API
Python
14
star
21

Recommender_keras

Basic recommendation system for Movilens dataset using Keras
Python
12
star
22

xumi

Python
9
star
23

ner_playground

Python
6
star
24

celery_ml_deploy

Python
6
star
25

knowledge_distillation

Knowledge Distillation
Python
5
star
26

gcp_model_deploy_example

Python
5
star
27

handwriting_forensics

Python
5
star
28

TagSuggestionImages

Suggest multiple Tags/Labels that better fit an image
Python
4
star
29

active_learning

Active Learning Applied to image and tabular data
Python
4
star
30

code_search

Python
4
star
31

nicegui_tutorial

Python
4
star
32

learning_to_abstain

Know what you don't know
Python
3
star
33

malignancy_detection

malignancy detection using CNNs with Keras
Python
3
star
34

LLM-Voice

Python
3
star
35

ReconstructionAuxLoss

Improve Neural Network's Generalization Performance By Adding an Unsupervised Auxiliary Loss - Pytorch Lightning
Python
2
star
36

bleach_bot

Python
2
star
37

doc-llm

Python
2
star
38

interpretable_nlp

Python
1
star
39

streamlit_demo

Python
1
star
40

prefect_mlops

1
star
41

dimensionality_reduction

HTML
1
star
42

ToyImageClassificationDataset

Toy Image Classification Dataset Annotated with Labelme
Python
1
star
43

constrained_llm_generation

Python
1
star