|
|
--- |
|
|
license: gpl-3.0 |
|
|
tags: |
|
|
- bird-classification |
|
|
- onnx |
|
|
- efficientnet |
|
|
- raspberry-pi |
|
|
- hailo |
|
|
- computer-vision |
|
|
- real-time |
|
|
datasets: |
|
|
- duyminhle/nabirds |
|
|
model-index: |
|
|
- name: EfficientNet-B7 Backyard Feeder Bird Classifier |
|
|
results: [] |
|
|
--- |
|
|
|
|
|
# π¦ EfficientNet-B7 β Backyard Feeder Bird Classifier |
|
|
|
|
|
Custom ONNX-based bird classification model trained on a filtered subset of the [NABirds dataset](https://dl.allaboutbirds.org/nabirds), optimized for backyard bird feeders. |
|
|
|
|
|
> Designed to run on a Raspberry Pi + Hailo-8 setup in real-time as part of the [Birdwatcher Project](https://github.com/n2b8/birdwatcher) |
|
|
|
|
|
--- |
|
|
|
|
|
## π§ Model Details |
|
|
|
|
|
- Architecture: EfficientNet-B7 |
|
|
- Resolution: `600Γ600` |
|
|
- Precision: Mixed (AMP) |
|
|
- Format: ONNX |
|
|
- Classes: 95 backyard species + `not_a_bird` |
|
|
- Validation Accuracy: **93.14%** @ Epoch 23 |
|
|
- Optimized for inference on edge devices (e.g., Raspberry Pi 5 + Hailo-8) |
|
|
|
|
|
--- |
|
|
|
|
|
## π Files |
|
|
|
|
|
- `efficientnet_b7_backyard_feeder_birds.onnx` β Trained ONNX model |
|
|
- `class_labels_v3.txt` β One class label per line |
|
|
|
|
|
--- |
|
|
|
|
|
## π οΈ Intended Use |
|
|
|
|
|
- **Use Case:** Real-time fine-grained classification of birds visiting backyard feeders |
|
|
- **Hardware:** Optimized for Raspberry Pi + Hailo-8 AI accelerator |
|
|
- **Pipeline:** Captures images via YOLOv8 detection, then classifies via this model |
|
|
|
|
|
--- |
|
|
|
|
|
## π Example Inference Code |
|
|
|
|
|
```python |
|
|
import onnxruntime as ort |
|
|
import numpy as np |
|
|
from PIL import Image |
|
|
|
|
|
# Load model |
|
|
session = ort.InferenceSession("efficientnet_b7_backyard_feeder_birds.onnx") |
|
|
|
|
|
# Preprocess |
|
|
img = Image.open("bird.jpg").resize((600, 600)) |
|
|
x = np.array(img).astype(np.float32) / 255.0 |
|
|
x = np.transpose(x, (2, 0, 1))[np.newaxis, :] # CHW + batch |
|
|
|
|
|
# Predict |
|
|
outputs = session.run(None, {"input": x}) |
|
|
pred_idx = np.argmax(outputs[0]) |
|
|
``` |
|
|
|
|
|
--- |
|
|
|
|
|
## π Training |
|
|
|
|
|
- Dataset: Subset of NABirds (filtered for common backyard species) |
|
|
- Augmentations: Flip, rotation, brightness |
|
|
- Regularization: Dropout, label smoothing |
|
|
- Loss: Cross-entropy |
|
|
- Optimizer: AdamW |
|
|
- Early stopping enabled |
|
|
|
|
|
--- |
|
|
|
|
|
## π Related Repos |
|
|
|
|
|
- [Birdwatcher Project (GitHub)](https://github.com/n2b8/birdwatcher) |
|
|
- [NABirds Dataset (Kaggle)](https://www.kaggle.com/datasets/duyminhle/nabirds) |
|
|
|
|
|
--- |
|
|
|
|
|
## π License |
|
|
|
|
|
GPLv3 |
|
|
|