A CNN-based image classifier that sorts waste into categories (cardboard, glass, metal, paper, plastic, trash) using transfer learning (MobileNetV2), with Grad-CAM interpretability and a Streamlit demo app.
waste-classifier/
├── data/ # dataset goes here (not committed to git)
│ ├── raw/ # original downloaded images, organized by class folder
│ └── processed/ # train/val/test split (auto-generated)
├── src/
│ ├── __init__.py
│ ├── data_loader.py # dataset splitting + tf.data pipelines
│ ├── model.py # baseline CNN + transfer learning model definitions
│ ├── train.py # training script (CLI)
│ ├── evaluate.py # confusion matrix, per-class metrics
│ └── gradcam.py # Grad-CAM visualization utility
├── models/ # saved trained models (.keras / .h5)
├── notebooks/
│ └── eda.ipynb # exploratory data analysis
├── app/
│ └── streamlit_app.py # deployable demo app
├── requirements.txt
└── README.md
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
pip install -r requirements.txtDownload the Kaggle "Garbage Classification" dataset and place it under
data/raw/ so it looks like:
data/raw/
├── cardboard/
├── glass/
├── metal/
├── paper/
├── plastic/
└── trash/
Then run the split:
python -m src.data_loader --split# Baseline CNN from scratch
python -m src.train --model baseline --epochs 15
# Transfer learning (recommended main model)
python -m src.train --model mobilenet --epochs 10 --fine-tunepython -m src.evaluate --model-path models/mobilenet_best.kerasstreamlit run app/streamlit_app.py- Baseline CNN
- MobileNetV2 transfer learning
- Grad-CAM visualizations
- Streamlit app
- Deploy to Streamlit Community Cloud / HuggingFace Spaces
- (Stretch) Export to TFLite for edge deployment