High-performance GPU-accelerated machine learning for fruit classification
Features • Quick Start • Documentation • Performance • Contributing
|
|
# 1. Download from releases
curl -L https://github.com/luangrezende/fruit-recognition-net-ml/releases/download/v1.0.0/fruit-recognition-training-win-x64.zip
# 2. Extract and run
./fruit-recognition-training # Train your model
./fruit-recognition-testing # Make predictions
git clone https://github.com/luangrezende/fruit-recognition-net-ml.git
cd fruit-recognition-net-ml/src
dotnet restore
dotnet build --configuration Release
fruit-recognition-net-ml/
├── 📂 src/
│ ├── Fruit.Recognition.MachineLearning.Domain/ # Core ML models
│ ├── Fruit.Recognition.MachineLearning.Training/ # Training app
│ ├── Fruit.Recognition.MachineLearning.Testing/ # Testing app
│ ├── data/
│ │ ├── training/ # Your training images
│ │ └── test/ # Images for testing
│ └── models/ # Trained ML models
└── .github/ # CI/CD workflows
Fruit | Status | Notes |
---|---|---|
🍎 Apples | ✅ Built-in | Red, Green, Yellow varieties |
🍌 Bananas | ✅ Built-in | Various ripeness stages |
🍊 Oranges | ✅ Built-in | Multiple sizes and types |
🍇 Custom | ✅ Flexible | Add any fruit by creating folders |
Training Configuration (click to expand)
{
"ModelConfiguration": {
"ImageWidth": 128,
"ImageHeight": 128,
"TestFraction": 0.3,
"ValidationFraction": 0.2,
"UseGpu": true,
"FallbackToCpu": false,
"Architecture": "Anti-Overfitting-SDCA"
},
"PathConfiguration": {
"DatasetPath": "..\\data\\training",
"ModelOutputPath": "..\\models\\fruit-recognition-model.zip"
}
}
Testing Configuration (click to expand)
{
"PathConfiguration": {
"ModelPath": "..\\models\\fruit-recognition-model.zip",
"TestImagesPath": "..\\data\\test"
}
}
cd src/Fruit.Recognition.MachineLearning.Training
dotnet run
What happens:
- Scans training directory recursively
- Loads and validates all images
- Trains GPU-optimized model
- Saves model for predictions
- Shows accuracy metrics
cd src/Fruit.Recognition.MachineLearning.Testing
dotnet run
What happens:
- Loads the trained model
- Processes test images
- Classifies with confidence scores
- Displays batch results
Metric | Value |
---|---|
Accuracy | 95.4% |
Training Time | ~12 seconds |
Inference Speed | 394+ images/sec |
Dataset Size | 4,637 images |
Hardware | RTX 4090, 32GB RAM |
- Windows 10/11 x64 or Linux x64
- 4GB RAM
- 1GB free disk space
- NVIDIA RTX 3060+
- 8GB+ RAM
- CUDA 12.x toolkit
- SSD storage
# Restore dependencies
dotnet restore src/Fruit.Recognition.MachineLearning.sln
# Build solution
dotnet build src/Fruit.Recognition.MachineLearning.sln --configuration Release
# Run training
dotnet run --project src/Fruit.Recognition.MachineLearning.Training
# Run testing
dotnet run --project src/Fruit.Recognition.MachineLearning.Testing
GPU Issues
# Check CUDA installation
nvcc --version
nvidia-smi
# Enable CPU fallback
"FallbackToCpu": true
Low Accuracy
- Add more training images (100+ per fruit)
- Balance dataset between classes
- Increase image resolution
- Check for mislabeled images
This project uses GitHub Actions for:
- Continuous Integration
- Cross-platform builds
- Automated releases
- Documentation updates
git tag v1.0.0
git push origin v1.0.0
This project is licensed under the MIT License - see the LICENSE file for details.
- Fork the repository
- Create your feature branch
- Commit your changes
- Push to the branch
- Open a Pull Request
Built with ❤️ using ML.NET 4.0 and .NET 8
⭐ If this project helped you, please consider giving it a star!