A bird species classifier optimized for North American backyard and camera-trap conditions — partial occlusion, motion blur, fence/leaf clutter, low-light, and other things you don't see in handheld photo datasets...
Source du modèle
Description de la source
A bird species classifier optimized for North American backyard and camera-trap conditions — partial occlusion, motion blur, fence/leaf clutter, low-light, and other things you don't see in handheld photo datasets but you do see when a feeder camera is the photographer.
Backbone: (Apache-2.0), with a classification head trained on a unified taxonomy spanning gpiosenka 525, NABirds, iNat21-Birds, and the yard dataset.
Sources
1 sourceVérifié 28 sept.
Artefacts du modèle
1 artefactExtraits de sources
2 extraitsLinear(768, 407)OTHER bucket during training. The model can flag a
bird as "not one of these 406 NA species" but can't tell
you which non-NA species it is.Test set: 27,470 rows held out from gpiosenka 525, NABirds, and the BirdWatcher yard dataset. (No iNat21 test split — iNat21 only contributed to train/val.)
All three models scored apples-to-apples in our 407-way canonical
taxonomy (406 NA species + OTHER). Comparator outputs are mapped through
the same alias table — Rock Dove → Rock Pigeon,
Cardinalis cardinalis → Northern Cardinal, etc. — that our taxonomy
builder uses. denisjooo's 525-way logits and birder's 10,000-way logits
are max-pooled per canonical bucket; ours predict natively.
| Split | n | Ours | denisjooo | birder-project |
|---|---|---|---|---|
| overall | 27,470 | 92.9% (92.6–93.2) | 23.8% (23.3–24.4) | 89.6% (89.3–90.0) |
| gpiosenka | 2,625 | 89.0% (87.9–90.1) | 99.0% (98.7–99.4) | 85.3% (84.0–86.8) |
| nabirds | 24,633 | 93.3% (93.0–93.6) | 15.9% (15.5–16.4) | 90.4% (90.0–90.7) |
| yard | 212 | 96.2% (93.9–98.6) | 10.4% (6.6–14.6) | 57.1% (50.9–63.7) |
Top-1 with 95 % bootstrap CIs over 1,000 resamples. Bold marks the best in each row.
OTHER class threshold gives a clean reject
signal).from transformers import AutoImageProcessor, AutoModelForImageClassification
from PIL import Image
processor = AutoImageProcessor.from_pretrained("houlette/birdclass-na")
model = AutoModelForImageClassification.from_pretrained("houlette/birdclass-na")
img = Image.open("your_bird.jpg")
inputs = processor(images=img, return_tensors="pt")
outputs = model(**inputs)
top1 = outputs.logits.softmax(dim=-1)[0].argmax().item()
print(model.config.id2label[top1])
This model is best-in-class among open-source bird classifiers for NA backyard / camera-trap use — see the benchmark table above for the head-to-head numbers vs the strongest alternatives we found (denisjooo's EfficientNet and birder-project's Hiera-DINOv2-iNat21). We win overall (+3.3 pp over birder, +69 pp over denisjooo) and by ~40 pp on real yard / camera-trap conditions.
It is not absolute SOTA on bird classification benchmarks. Cornell's Merlin Bird ID app and iNaturalist's internal classifier are both trained on orders of magnitude more data and remain stronger on most common-species, clean-photo scenarios.
Use this model when:
Don't use this model when:
If you use this model in research, please cite it as:
@misc{birdclass_na_2026,
author = {Houlette, Ryan},
title = { birdclass-na: an open-source bird species classifier for North American backyards },
year = { 2026 },
publisher = { HuggingFace },
url = { https://huggingface.co/houlette/birdclass-na }
}
Apache-2.0 for the training pipeline at https://github.com/houlette/birdclass-na. Model weights themselves are released under CC-BY-NC-4.0 due to inheritance from iNat21's non-commercial clause.
--- license: cc-by-nc-4.0 language: - en tags: - image-classification - bird-classification - birds - dinov2 - fine-grained - north-america library_name: transformers pipeline_tag: image-classification base_model: facebook/dinov2-base datasets: - yashikota/birds-525-species-image-classification metrics: - accuracy --- # birdclass-na A bird species classifier optimized for **North American backyard and camera-trap conditions** — partial occlusion, motion blur, fence/leaf clutter, low-light, and other things you don't see in handheld photo datasets but you do see when a feeder camera is the photographer. Backbone: [`facebook/dinov2-base`](https://huggingface.co/facebook/dinov2-base) (Apache-2.0), with a `Linear(768, 407)` classification head trained on a unified taxonomy spanning gpiosenka 525, NABirds, iNat21-Birds, and the [BirdWatcher](https://github.com/houlette/BirdWatcher) yard dataset. ## What this model is good at - North American backyard bird identification, **especially** under feeder-camera conditions (partial occlusion, motion blur, leaf clutter, low-light) — the training mix includes ~2,000 user-labeled crops from a real feeder-camera deployment alongside the public datasets. - Fine-grained discrimination of common NA confusables (Mourning Dove vs Rock Pigeon, Cooper's Hawk vs Sharp-shinned Hawk). ## What this model is _not_ good at - **Non-NA species**: most non-NA bird images in iNat21 were collapsed into a single `OTHER` bucket during training. The model can flag a bird as "not one of these 406 NA species" but can't tell you _which_ non-NA species it is. - **Rare-species long tail**: NA species with very few training samples (< 30 each) have low individual accuracy. We're not better than general-purpose bird classifiers there, just smaller. - **Comparison to Cornell Merlin / iNat CV**: those are trained on 10-100× more data and remain stronger in absolute terms on most common-species photos. This model's value is in being open-source, fine-tunable, and stronger on camera-trap conditions. ## Benchmarks # BENCHMARK.md Test set: **27,470 rows** held out from gpiosenka 525, NABirds, and the BirdWatcher yard dataset. (No iNat21 test split — iNat21 only contributed to train/val.) All three models scored apples-to-apples in our **407-way canonical taxonomy** (406 NA species + OTHER). Comparator outputs are mapped through th...
Source context: 357 downloads · 0 likes · Pipeline image-classification · Library transformers · Repo houlette/birdclass-na