Gareth
Update READMEs with accurate model names and performance metrics
be3d87b
metadata
tags:
  - image-classification
  - efficientnet
  - strawberry
  - agriculture
  - robotics
  - computer-vision
  - pytorch
  - ripeness-classification
license: mit
datasets:
  - custom
language:
  - python
pretty_name: EfficientNet-B0 Strawberry Ripeness Classification
description: >-
  EfficientNet-B0 model for detailed strawberry ripeness classification with
  4-class output
pipeline_tag: image-classification

EfficientNet-B0 Strawberry Ripeness Classification Model

This directory contains the EfficientNet-B0 model for detailed strawberry ripeness classification, the second stage of the Strawberry Picker AI system.

πŸ“Š Model Performance

Metric Value
Overall Accuracy 91.94%
Macro F1-Score 0.92
Weighted F1-Score 0.93
Model Size 56MB
Input Size 128x128

Class Performance (Validation Set)

Class Precision Recall F1-Score Support
unripe 0.92 0.89 0.91 163
partially-ripe 0.88 0.91 0.89 135
ripe 0.94 0.93 0.93 124
overripe 0.96 0.95 0.95 422

🎯 Ripeness Classes

Class Description Pick?
unripe Green, hard texture ❌
partially-ripe Pink/red, firm ❌
ripe Bright red, soft βœ…
overripe Dark red/brown, mushy ❌

πŸš€ Quick Start

Installation

pip install torch torchvision pillow

Python Inference

import torch
from torchvision import transforms
from PIL import Image

# Load model
model = torch.load('best_ripeness_classifier.pth', map_location='cpu')
model.eval()

# Preprocessing
transform = transforms.Compose([
    transforms.Resize((128, 128)),
    transforms.ToTensor(),
    transforms.Normalize(mean=[0.485, 0.456, 0.406], 
                        std=[0.229, 0.224, 0.225])
])

# Load and preprocess image
image = Image.open('strawberry_crop.jpg')
input_tensor = transform(image).unsqueeze(0)

# Inference
with torch.no_grad():
    output = model(input_tensor)
    probabilities = torch.softmax(output, dim=1)
    predicted_class = torch.argmax(probabilities, dim=1).item()
    confidence = probabilities[0][predicted_class].item()

class_names = ['unripe', 'partially-ripe', 'ripe', 'overripe']
print(f"Ripeness: {class_names[predicted_class]} ({confidence:.2f})")

πŸ“ Files

  • best_ripeness_classifier.pth - PyTorch model weights
  • training_summary.md - Detailed training information

🎯 Use Cases

  • Automated Harvesting: Second stage ripeness verification
  • Quality Control: Precise ripeness assessment for sorting
  • Agricultural Research: Ripeness pattern analysis

πŸ”§ Technical Details

  • Architecture: EfficientNet-B0
  • Input Size: 128x128 RGB
  • Output: 4-class probabilities
  • Training Dataset: 844 cropped strawberry images
  • Training Epochs: 50 (early stopping)
  • Batch Size: 8
  • Optimizer: AdamW
  • Learning Rate: 0.002 (cosine annealing)

πŸ“ˆ Training Configuration

# Model Architecture
model = EfficientNet.from_pretrained('efficientnet-b0')
model._fc = nn.Linear(model._fc.in_features, 4)

# Training Setup
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.AdamW(model.parameters(), lr=0.002)
scheduler = torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=50)

πŸ”— Related Components

πŸ“š Documentation

πŸ“„ License

MIT License - See main repository for details.


Model Version: 1.0.0
Training Date: November 2025
Part of: Strawberry Picker AI System