This project develops a machine learning model to classify land cover types in Egypt using Sentinel-2 satellite imagery.
The system can detect categories such as:
- 🌾 Agriculture
- 💧 Water bodies
- 🏙️ Urban areas
- 🏜️ Deserts
- 🛣️ Roads
- 🌳 Trees
The workflow includes data preparation, exploratory analysis, model training & validation, and deployment via a lightweight web app.
Final deliverables include a trained model, performance report, and an interactive application for testing land classification.
| Task | Collaborator |
|---|---|
| Data Pipeline, EDA & Feature Engineering | Roaa Raafat |
| Model Architecture & Evaluation | Mariam Mohamed Sayed Mohamed |
| Deployment & Dashboard | Mariam Badr |
| Video & GitHub README | Eman Elnaggar & Mariam Elnemrawy |
| Presentation | Mariam Ahmed |
- Notebook:
GTC_01_data_pipeline.ipynb - Script:
src/data_pipeline.py - Tasks:
- Downloads & organizes the EuroSAT dataset
- Cleans CSVs and ensures consistent labels
- Generates dataset statistics & class maps
- Outputs train/validation/test splits
- Notebook:
GTC_02_eda_visualization.ipynb - Tasks:
- Class distribution plots
- Sample images per class (grid view)
- Checks for corrupted/missing/duplicate images
- RGB intensity histograms
- Data augmentation visualizations
- Class-level mean RGB statistics
- Feature extraction (color histograms, texture descriptors)
- Script:
src/features.py - Tasks:
- Geospatial-safe augmentations (rotation, flip, jitter, crop/zoom)
- Normalization & preprocessing utilities
- Script:
gtc_03_modeling-6.ipynb - Tasks:
- Load and preprocess the EuroSAT dataset (RGB satellite images for 10-class land use classification) with custom transforms including resizing to 224x224, data augmentation (random flips, rotations, jitter, affine), and normalization (mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]).
- Split dataset into train/validation/test (60%/20%/20%) and create DataLoaders with batch size 64.
- Define and train multiple models: a custom CNN (VGG-inspired) and transfer learning models (ResNet-50, EfficientNet-B0, Vision Transformer B-16), all fine-tuned for 10 classes.
- Train with Cross-Entropy loss, Adam optimizer (lr=0.001, weight decay=1e-4), mixed precision (AMP), LR scheduler (ReduceLROnPlateau), and early stopping (patience=10).
- Evaluate models on test set with accuracy, precision/recall/F1, confusion matrix, and training history plots.
- Save best model checkpoints based on validation accuracy.
train.csv,validation.csv,test.csv(cleaned datasets)dataset_statistics.json& plots (dataset_statistics.png,sample_images.png)augmentation_examples.png- Engineered features in
data/features/ - Trained model in
models/best_efficientnet_b0_model.pth
### 1- Clone the repository
!git clone https://github.com/Mariam-Badr-MB/GTC-Land-Type-Classification.git
%cd GTC-Land-Type-Classification
### 2- Install dependencies
!pip install -r requirements.txt
### 3- Configure Kaggle API
from google.colab import files
uploaded = files.upload() # upload kaggle.json
!mkdir -p ~/.kaggle
!cp kaggle.json ~/.kaggle/
!chmod 600 ~/.kaggle/kaggle.json
- GTC_01_data_pipeline.ipynb
- GTC_02_eda_visualization.ipynb
- gtc-03-modeling-6
🎨 Project Presentation on Canva
Contributions are welcome! Feel free to fork the repo, create a new branch, and submit a pull request.
This project is licensed under the GNU v3 License.