This project implements an advanced deep learning approach for predicting stress peaks in EEG (Electroencephalogram) signals using a hybrid CNN-LSTM neural network architecture. The system combines Convolutional Neural Networks (CNN) for local feature extraction and Long Short-Term Memory (LSTM) networks for temporal pattern recognition to achieve high accuracy in stress detection.
- Primary Goal: Develop an accurate stress detection system using EEG brainwave data
- Secondary Goals:
- Implement advanced signal preprocessing techniques
- Create a robust hybrid CNN-LSTM model
- Achieve high accuracy in multi-class stress classification
- Provide comprehensive evaluation metrics and visualizations
Predicting-Stress-Pics-based-on-EEG-Signals-by-Hybrid-Approach-of-CNN-LSTM/
โโโ README.md # Project documentation
โโโ requirements.txt # Python dependencies
โโโ setup.py # Package setup
โโโ LICENSE # License information
โโโ .gitignore # Git ignore file
โ
โโโ src/ # Source code
โ โโโ __init__.py
โ โโโ data/ # Data handling modules
โ โ โโโ __init__.py
โ โ โโโ data_loader.py # Dataset loading utilities
โ โ โโโ data_augmentation.py # Data augmentation techniques
โ โ
โ โโโ preprocessing/ # Data preprocessing
โ โ โโโ __init__.py
โ โ โโโ eeg_preprocessor.py # EEG signal preprocessing
โ โ โโโ feature_extraction.py # Feature extraction methods
โ โ
โ โโโ models/ # Model architectures
โ โ โโโ __init__.py
โ โ โโโ cnn_lstm_model.py # Hybrid CNN-LSTM model
โ โ โโโ base_model.py # Base model class
โ โ โโโ model_utils.py # Model utilities
โ โ
โ โโโ utils/ # Utility functions
โ โโโ __init__.py
โ โโโ visualization.py # Plotting and visualization
โ โโโ metrics.py # Evaluation metrics
โ โโโ config.py # Configuration settings
โ
โโโ data/ # Data storage
โ โโโ raw/ # Raw datasets
โ โโโ processed/ # Processed datasets
โ
โโโ models/ # Trained models storage
โ โโโ saved_models/ # Model checkpoints
โ โโโ best_models/ # Best performing models
โ
โโโ results/ # Results and outputs
โ โโโ plots/ # Generated plots
โ โโโ metrics/ # Performance metrics
โ โโโ logs/ # Training logs
โ
โโโ notebooks/ # Jupyter notebooks
โ โโโ 01_data_exploration.ipynb # Data exploration
โ โโโ 02_preprocessing.ipynb # Preprocessing analysis
โ โโโ 03_model_training.ipynb # Model training
โ โโโ 04_results_analysis.ipynb # Results analysis
โ
โโโ docs/ # Documentation
โโโ methodology.md # Detailed methodology
โโโ architecture.md # Model architecture details
โโโ api_reference.md # API reference
The project utilizes multiple EEG datasets:
- EEG Mental State Dataset: Primary dataset for stress detection
- EEG Emotions Dataset: Supplementary emotional state data
- Complete EEG Dataset: Comprehensive EEG recordings
- General EEG Dataset: Additional training data
- Channels: Multiple EEG channels (typically 14-64 channels)
- Sampling Rate: 128-256 Hz
- Duration: Variable recording lengths
- Labels: Stress levels (Low, Medium, High)
- Python 3.8+
- CUDA-capable GPU (recommended)
- 8GB+ RAM
- Clone the repository:
git clone https://github.com/yourusername/Predicting-Stress-Pics-based-on-EEG-Signals-by-Hybrid-Approach-of-CNN-LSTM.git
cd Predicting-Stress-Pics-based-on-EEG-Signals-by-Hybrid-Approach-of-CNN-LSTM- Create virtual environment:
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate- Install dependencies:
pip install -r requirements.txt- Install package in development mode:
pip install -e .from src.data.data_loader import EEGDataLoader
from src.preprocessing.eeg_preprocessor import EEGPreprocessor
# Load datasets
loader = EEGDataLoader()
raw_data = loader.load_all_datasets()
# Preprocess data
preprocessor = EEGPreprocessor()
processed_data = preprocessor.preprocess_pipeline(raw_data)from src.models.cnn_lstm_model import CNNLSTMStressDetector
# Initialize model
model = CNNLSTMStressDetector()
# Train model
history = model.train(
X_train, y_train,
validation_data=(X_val, y_val),
epochs=100
)# Evaluate model
results = model.evaluate(X_test, y_test)
print(f"Test Accuracy: {results['accuracy']:.4f}")
print(f"F1-Score: {results['f1_score']:.4f}")The model combines:
-
Convolutional Layers (Feature Extraction):
- Multi-scale 1D convolutions
- Batch normalization
- Dropout for regularization
-
LSTM Layers (Temporal Modeling):
- Bidirectional LSTM
- Attention mechanisms
- Dropout and recurrent dropout
-
Dense Layers (Classification):
- Fully connected layers
- Advanced regularization
- Multi-class output
- Multi-scale Feature Extraction: Different kernel sizes for various frequency components
- Temporal Dependencies: LSTM captures long-term temporal patterns
- Attention Mechanism: Focuses on relevant time periods
- Advanced Regularization: Prevents overfitting with small datasets
- Data Augmentation: Synthetic data generation for robust training
The model is evaluated using multiple metrics:
- Accuracy: Overall classification accuracy
- F1-Score: Weighted F1-score for imbalanced classes
- Precision: Class-wise precision
- Recall: Class-wise recall
- Confusion Matrix: Detailed classification results
- ROC Curves: Receiver Operating Characteristic analysis
- Accuracy: 85-92%
- F1-Score: 0.83-0.90
- Training Time: 30-60 minutes on GPU
- Bandpass Filtering: Removes noise and artifacts
- ICA Denoising: Independent Component Analysis for artifact removal
- Feature Engineering: Time and frequency domain features
- Normalization: Robust scaling for stable training
- Noise Injection: Gaussian noise addition
- Time Shifting: Temporal signal shifting
- Amplitude Scaling: Signal amplitude variations
- Frequency Domain Augmentation: Spectral modifications
- Early Stopping: Prevents overfitting
- Learning Rate Scheduling: Adaptive learning rate
- Model Checkpointing: Saves best models
- Cross-Validation: Robust model evaluation
The project generates comprehensive visualizations:
- Training History Plots: Accuracy and loss curves
- Confusion Matrices: Classification performance
- Feature Importance: Most relevant EEG features
- Signal Visualizations: Raw and processed EEG signals
- ROC Curves: Model performance analysis
Key configuration parameters in src/utils/config.py:
# Model Configuration
MODEL_CONFIG = {
'cnn_filters': [32, 64, 128],
'cnn_kernels': [3, 5, 7],
'lstm_units': [64, 32],
'dropout_rate': 0.3,
'learning_rate': 0.001
}
# Preprocessing Configuration
PREPROCESSING_CONFIG = {
'sampling_rate': 256,
'target_rate': 128,
'bandpass_low': 0.5,
'bandpass_high': 50,
'window_size': 1000
}from src.models.cnn_lstm_model import CNNLSTMStressDetector
# Initialize and train
detector = CNNLSTMStressDetector()
detector.train_full_pipeline()from src.preprocessing.eeg_preprocessor import EEGPreprocessor
preprocessor = EEGPreprocessor(
sampling_rate=256,
target_rate=128,
apply_ica=True
)
processed_data = preprocessor.process_dataset('path/to/data')# Load trained model
detector = CNNLSTMStressDetector.load_model('models/best_model.h5')
# Evaluate on test set
metrics = detector.comprehensive_evaluation(X_test, y_test)- Data Loading: Import multiple EEG datasets
- Quality Assessment: Signal quality evaluation
- Preprocessing: Filtering, denoising, normalization
- Feature Extraction: Time and frequency domain features
- Augmentation: Data augmentation for robustness
- Model Training: Hybrid CNN-LSTM training
- Evaluation: Comprehensive performance assessment
- Train/Validation/Test Split: 70/15/15 split
- Cross-Validation: 5-fold stratified cross-validation
- Independent Test Set: Final evaluation on unseen data
We welcome contributions! Please see our contributing guidelines:
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
# Install development dependencies
pip install -r requirements-dev.txt
# Run tests
python -m pytest tests/
# Run linting
flake8 src/
black src/This project is licensed under the MIT License - see the LICENSE file for details.
- Datasets: Thanks to the providers of EEG datasets on Kaggle
- Research: Based on recent advances in EEG signal processing and deep learning
- Libraries: TensorFlow, Scikit-learn, SciPy, and other open-source libraries
If you use this project in your research, please cite:
@article{mahdi2024stress,
title={Predicting Stress Peaks based on EEG Signals by Hybrid Approach of CNN-LSTM},
author={Mahdi, Youssef and El Haiki, Hamza},
year={2024},
journal={Your Journal},
volume={XX},
pages={XXX-XXX}
}- v1.0.0 (2024-07-20): Initial release
- v1.1.0 (TBD): Enhanced model architecture
- v1.2.0 (TBD): Additional datasets integration
Note: This project is for research and educational purposes. For medical applications, please consult with healthcare professionals and ensure proper validation.