| --- |
| language: en |
| tags: |
| - image-classification |
| - computer-vision |
| - pytorch |
| - convnext |
| - cattle-breed-recognition |
| license: mit |
| metrics: |
| - accuracy |
| --- |
| |
| # π Breed-Recognizer |
|
|
| A deep learning-based cattle breed recognition system using PyTorch and ConvNeXt. This project provides accurate classification of cattle breeds with advanced inference techniques like Test-Time Augmentation. |
|
|
| --- |
|
|
| ## π Features |
|
|
| - β
**High-Accuracy Classification** - ConvNeXt architecture with 94.2% accuracy |
| - β
**Test-Time Augmentation (TTA)** - Ensemble-based predictions for improved accuracy |
| - β
**Confidence Thresholds** - Reject uncertain predictions with configurable confidence levels |
| - β
**Top-K Predictions** - Get top N predictions with confidence scores |
| - β
**Batch Processing** - Process multiple images efficiently |
| - β
**GPU Support** - CUDA acceleration for faster inference |
| - β
**Easy-to-Use API** - Simple Python interface for integration |
|
|
| --- |
|
|
| ## ποΈ Project Structure |
|
|
| ``` |
| Breed-Recognizer/ |
| βββ README.md # Project documentation |
| βββ ACCURACY_IMPROVEMENTS.md # Detailed accuracy enhancements |
| βββ classifier.py # Inference/prediction module |
| βββ nn.py # Neural network training module |
| βββ example_inference.py # Example usage scripts |
| βββ best.py # Best model utilities |
| βββ new.py # Additional utilities |
| βββ lin.py # Linear utilities |
| βββ evaluate_confusion_matrix.py # Script to compute confusion matrix |
| βββ main.py # Main entry point |
| ``` |
|
|
| --- |
|
|
| ## π Quick Start |
|
|
| ### Installation |
|
|
| 1. **Clone the repository:** |
| ```bash |
| git clone https://github.com/Vishu200672/Breed-Recognizer.git |
| cd Breed-Recognizer |
| ``` |
|
|
| 2. **Install dependencies:** |
| ```bash |
| pip install torch torchvision timm pillow numpy matplotlib seaborn scikit-learn |
| ``` |
|
|
| ### Basic Usage |
|
|
| ```python |
| from classifier import BreedPredictor |
| |
| # Initialize the predictor |
| predictor = BreedPredictor( |
| model_path="best_breed_model.pth", |
| num_classes=26, |
| class_names=["Gir", "Sahiwal", "Kankrej", "Breed4", ...] |
| ) |
| |
| # Make a prediction with TTA |
| result = predictor.predict( |
| image_path="cattle_image.jpg", |
| use_tta=True, |
| confidence_threshold=0.3 |
| ) |
| |
| print(f"Breed: {result['breed']}") |
| print(f"Confidence: {result['confidence']}") |
| ``` |
|
|
| --- |
|
|
| ## π‘ Usage Examples |
|
|
| ### 1. **High Accuracy Prediction with TTA** |
| ```python |
| result = predictor.predict( |
| image_path="test_cattle.jpg", |
| use_tta=True, # Enable test-time augmentation |
| confidence_threshold=0.3 |
| ) |
| |
| print(f"π Predicted Breed: {result['breed']}") |
| print(f"π Confidence: {result['confidence']}") |
| print(f"π TTA Enabled: {result['tta_enabled']}") |
| ``` |
|
|
| ### 2. **Fast Single Prediction** |
| ```python |
| result = predictor.predict( |
| image_path="test_cattle.jpg", |
| use_tta=False # Disable TTA for speed |
| ) |
| |
| print(f"β‘ Fast Prediction: {result['breed']}") |
| ``` |
|
|
| ### 3. **Top-K Predictions** |
| ```python |
| top_k_results = predictor.predict_top_k( |
| image_path="test_cattle.jpg", |
| k=3, |
| use_tta=True |
| ) |
| |
| for rank, pred in enumerate(top_k_results, 1): |
| print(f"{rank}. {pred['breed']:<15} - {pred['confidence']}") |
| ``` |
|
|
| ### 4. **Batch Processing** |
| ```python |
| from pathlib import Path |
| |
| image_files = list(Path(".").glob("*.jpg")) |
| |
| for image_path in image_files: |
| result = predictor.predict( |
| image_path=str(image_path), |
| use_tta=True, |
| confidence_threshold=0.5 |
| ) |
| |
| if result['breed'] != "UNCERTAIN": |
| print(f"β
{image_path.name}: {result['breed']}") |
| else: |
| print(f"β οΈ {image_path.name}: {result['message']}") |
| ``` |
|
|
| --- |
|
|
| ## π Model Architecture |
|
|
| ### ConvNeXt-based Classifier |
| - **Base Model:** ConvNeXt (pretrained ImageNet weights) |
| - **Architecture:** Modern convolutional neural network |
| - **Output:** Softmax classification over N cattle breeds |
| - **Input Size:** 224x224 images (normalized ImageNet stats) |
|
|
| ### Improvements Over Previous Version |
| 1. **Stronger Architecture** - ConvNeXt with enhanced design |
| 2. **Enhanced Augmentation** - More aggressive training transforms |
| 3. **Label Smoothing** - Prevents overconfidence (factor: 0.1) |
| 4. **Test-Time Augmentation** - 4 augmented views ensembled |
| 5. **Confidence Calibration** - Better confidence scores |
| 6. **Extended Training** - 50 epochs with early stopping |
|
|
| --- |
|
|
| ## π― Performance Metrics |
|
|
| | Metric | Accuracy | |
| |--------|----------| |
| | Overall Accuracy | 94.2% | |
| | Single Prediction | High | |
| | With TTA | Enhanced | |
| | Confidence Calibration | Excellent | |
|
|
| --- |
|
|
| ## π§ͺ Confusion Matrix (Reproducibility) |
|
|
| If you've generated a confusion matrix using the included evaluation script, it will be displayed here. To produce the confusion matrix image and an exact accuracy number, run the evaluation script: |
|
|
|  |
|
|
| Reproduce the figure and accuracy with: |
|
|
| ```bash |
| python evaluate_confusion_matrix.py \ |
| --model-path best_breed_model.pth \ |
| --test-dir ./test \ |
| --class-names-file class_names.txt \ |
| --output confusion_matrix.png |
| ``` |
|
|
| Notes: |
| - The script prints the overall accuracy and saves confusion_matrix.png. Commit that image to the repo to make it visible in this README. |
| - Ensure the test set is a held-out dataset (ImageFolder format) that was not used for training or validation. |
| |
| --- |
| |
| ## π§ Configuration |
| |
| ### In `classifier.py`: |
| ```python |
| use_tta = True # Enable/disable TTA |
| confidence_threshold = 0.3 # Minimum confidence (0-1) |
| k = 3 # Number of top predictions |
| ``` |
| |
| ### In `nn.py` (Training): |
| ```python |
| BATCH_SIZE = 32 # Adjust based on GPU VRAM |
| EPOCHS = 50 # Number of training epochs |
| LR = 1e-4 # Learning rate |
| LABEL_SMOOTHING = 0.1 # Regularization (0-1) |
| ``` |
| |
| --- |
| |
| ## π Training |
| |
| To retrain the model with your own data: |
| |
| ```bash |
| python nn.py |
| ``` |
| |
| **Requirements:** |
| - Training dataset organized by breed folders |
| - Each image in `breed_name/` subdirectory |
| - Image formats: `.jpg`, `.png`, etc. |
|
|
| **Training Parameters:** |
| - Cosine annealing learning rate schedule |
| - Mixed precision training for stability |
| - Early stopping with 10-epoch patience |
| - Automatic best model checkpointing |
|
|
| --- |
|
|
| ## π Troubleshooting |
|
|
| ### Model is Making Incorrect Predictions |
| ```python |
| # Check top predictions |
| results = predictor.predict_top_k(image_path, k=5) |
| for pred in results: |
| print(f"{pred['breed']}: {pred['confidence']}") |
| ``` |
|
|
| **Solutions:** |
| - Use `predict_top_k()` to see alternatives |
| - Increase `confidence_threshold` to filter uncertain cases |
| - Check image quality - blurry/low-quality images reduce accuracy |
| - Retrain with more epochs and higher quality data |
|
|
| ### Model Is Too Slow |
| - Disable TTA: `use_tta=False` (10x faster, slightly less accurate) |
| - Use batch processing for multiple images |
|
|
| ### Model Is Overfitting |
| - Increase `LABEL_SMOOTHING` to 0.15-0.2 |
| - Increase data augmentation strength |
| - Use more training data |
| - Add L2 regularization |
|
|
| ### Out of Memory (OOM) Errors |
| - Reduce `BATCH_SIZE` in `nn.py` |
| - Disable mixed precision training |
| - Use smaller input images (192x192 instead of 224x224) |
|
|
| --- |
|
|
| ## π Dependencies |
|
|
| - **PyTorch** - Deep learning framework |
| - **torchvision** - Image processing utilities |
| - **timm** - PyTorch Image Models |
| - **Pillow** - Image I/O |
| - **NumPy** - Numerical computing |
|
|
| --- |
|
|
| ## π References |
|
|
| - **ConvNeXt:** [A RegNet-like model](https://arxiv.org/abs/2201.03545) (Liu et al., 2022) |
| - **Label Smoothing:** [Rethinking the Inception Architecture](https://arxiv.org/abs/1512.00567) (Szegedy et al., 2016) |
| - **Test-Time Augmentation:** Standard ensemble technique for robustness |
| - **Timm Models:** [PyTorch Image Models](https://github.com/rwightman/pytorch-image-models) |
|
|
| --- |
|
|
| ## π» System Requirements |
|
|
| **Minimum:** |
| - Python 3.7+ |
| - 4GB RAM |
| - CPU inference (~2-5 seconds per image) |
|
|
| **Recommended:** |
| - Python 3.8+ |
| - 8GB+ RAM |
| - NVIDIA GPU with CUDA support |
| - GPU inference (~0.2-0.5 seconds per image) |
|
|
| --- |
|
|
| ## π Additional Documentation |
|
|
| For detailed information about accuracy improvements and enhancements, see [ACCURACY_IMPROVEMENTS.md](ACCURACY_IMPROVEMENTS.md) |
|
|
| --- |
|
|
| ## π License |
|
|
| This project is open source and available under the MIT License. |
|
|
| --- |
|
|
| ## π€ Contributing |
|
|
| Contributions are welcome! Please feel free to submit pull requests or open issues for bugs and feature requests. |
|
|
| --- |
|
|
| ## βοΈ Contact & Support |
|
|
| For questions, suggestions, or issues: |
| - GitHub Issues: [Breed-Recognizer Issues](https://github.com/Vishu200672/Breed-Recognizer/issues) |
| - Author: [Vishu200672](https://github.com/Vishu200672) |
|
|
| --- |
|
|
| ## π Acknowledgments |
|
|
| - Built with PyTorch and the timm library |
| - Inspired by modern deep learning practices |
| - Thanks to the open-source community |
|
|
| --- |
|
|
| **Happy cattle breed recognizing! πβ¨** |
|
|