# ML Training Pipeline Complete machine learning pipeline for waste classification using PyTorch and EfficientNet-B0. ## Setup ### 1. Install Dependencies \`\`\`bash pip install -r ml/requirements.txt \`\`\` ### 2. Prepare Dataset #### Option A: Use Public Datasets \`\`\`bash # View available datasets python ml/dataset_prep.py info # Download datasets from sources in DATASET_SOURCES.txt # Extract to ml/data/raw/ with category folders # Organize dataset into train/val/test splits python ml/dataset_prep.py \`\`\` #### Option B: Use Custom Data Place your images in: \`\`\` ml/data/raw/ recyclable/ organic/ wet-waste/ dry-waste/ ewaste/ hazardous/ landfill/ \`\`\` Then run: \`\`\`bash python ml/dataset_prep.py \`\`\` ## Training ### Initial Training Train from scratch with pretrained EfficientNet-B0: \`\`\`bash python ml/train.py \`\`\` Training will: - Use transfer learning with ImageNet pretrained weights - Apply data augmentation for better generalization - Save best model to `ml/models/best_model.pth` - Generate confusion matrix - Log training history ### Model Architecture - **Base**: EfficientNet-B0 (pretrained on ImageNet) - **Input**: 224x224 RGB images - **Output**: 7 waste categories - **Parameters**: ~5.3M - **Inference Time**: ~50ms on CPU ### Why EfficientNet-B0? 1. **Accuracy**: State-of-the-art performance 2. **Speed**: Optimized for mobile/edge devices 3. **Size**: Compact model (~20MB) 4. **Efficiency**: Best accuracy-to-parameters ratio ## Inference ### Python Inference \`\`\`python from ml.predict import WasteClassifier classifier = WasteClassifier('ml/models/best_model.pth') # From file path result = classifier.predict('image.jpg') # From base64 result = classifier.predict('data:image/jpeg;base64,...') print(result) # { # 'category': 'recyclable', # 'confidence': 0.95, # 'probabilities': {...}, # 'timestamp': 1234567890 # } \`\`\` ### Export to ONNX For production deployment: \`\`\`bash python -c "from ml.predict import export_to_onnx; export_to_onnx()" \`\`\` ## Continuous Learning ### Collect Feedback User corrections are saved to: \`\`\` ml/data/retraining/ recyclable/ organic/ ... \`\`\` ### Retrain Model Fine-tune model with new samples: \`\`\`bash python ml/retrain.py \`\`\` Retraining will: 1. Add new samples to training set 2. Fine-tune existing model (lower learning rate) 3. Evaluate improvement 4. Promote model if accuracy improves by >1% 5. Version models (v1, v2, v3, ...) 6. Archive retraining samples 7. Log retraining events ### Automated Retraining Set up a cron job or scheduled task: \`\`\`bash # Weekly retraining 0 2 * * 0 python ml/retrain.py \`\`\` ## Model Versioning Models are versioned automatically: - `best_model.pth` - Current production model - `model_v1.pth` - Version 1 (archived) - `model_v2.pth` - Version 2 (archived) - `best_model_backup_*.pth` - Backup before promotion ## Evaluation Metrics - **Accuracy**: Overall classification accuracy - **F1 Score (Macro)**: Average F1 across all categories - **F1 Score (Weighted)**: Weighted by class frequency - **Confusion Matrix**: Per-category performance ## Dataset Requirements ### Minimum Samples per Category - Training: 500+ images per category - Validation: 100+ images per category - Test: 100+ images per category ### Image Quality - Resolution: 640x480 or higher - Format: JPG or PNG - Lighting: Various conditions - Backgrounds: Real-world environments - Variety: Different angles, distances, overlaps ## Performance Optimization ### CPU Inference - Uses optimized EfficientNet-B0 - Inference time: ~50ms per image - No GPU required for deployment ### GPU Training - Trains 10-20x faster on GPU - Automatically detects CUDA availability - Falls back to CPU if no GPU ## Troubleshooting ### Low Accuracy 1. Add more diverse training data 2. Balance dataset (equal samples per category) 3. Increase training epochs 4. Adjust learning rate ### Overfitting 1. Increase dropout rate 2. Add more data augmentation 3. Use early stopping (already enabled) 4. Collect more training data ### Class Confusion 1. Check confusion matrix 2. Add more examples for confused classes 3. Ensure clear visual differences 4. Review mislabeled data ## Next Steps 1. **Collect Data**: Gather Indian waste images 2. **Initial Training**: Train base model 3. **Deploy**: Integrate with backend API 4. **Monitor**: Track prediction accuracy 5. **Improve**: Continuous learning pipeline