SpeciesNet is Google’s latest AI-powered wildlife classifier, designed to identify animals in camera trap images. Unlike many older models that focus on specific regions, SpeciesNet aims to be a global classifier, covering over 2,000 species. That means whether you're monitoring wildlife in the Amazon rainforest, the African savanna, or a local nature reserve, this one model could help identify what’s in the frame.
At its core, SpeciesNet combines two key AI components:
- Object Detector (MegaDetector) – This model scans images for animals, humans, and vehicles, pinpointing where they are in the picture. But it doesn’t identify the species.
- Species Classifier – Once the object detector finds an animal, this classifier kicks in, using a model trained on a dataset of 65+ million images to determine what species it is.
But SpeciesNet doesn’t just blindly predict species. It uses smart decision-making to refine results and improve accuracy. This includes checking if an animal is actually present, applying location-based filtering to avoid unrealistic predictions, and rolling up uncertain classifications to broader categories instead of making an incorrect guess.
How Does SpeciesNet Work?
The following breakdown is taken directly from Google’s official GitHub repository (GitHub Repository) and describes the decision-making process used by SpeciesNet:
How SpeciesNet Works – Step by Step (as described in the official GitHub repository)
- Input Processing
- Object Detection
animals, humans, or vehicles
- Species Classification
top-5 species classifications
- Detection-Based Human/Vehicle Decisions
highly confident
final prediction
- Blank Decisions
"blank"
low confidence
blank
- Geofencing
- Label Rollup
- Detection-Based Animal Decisions
“animal”
- Unknown Classification
“unknown”
- Prediction Source Tracking
which parts of the model contributed to the final decision
By following these structured steps, SpeciesNet is able to accurately classify a vast range of wildlife species while minimizing errors.
How Can SpeciesNet Be Used?
By default, running “run_model.py" with SpeciesNet applies a decision-making strategy where only the highest-confidence detection in each image is used. This approach assumes that multi-species images are rare, meaning that only one species per image is classified.
Limitations of the Default Approach
This works well in many cases, but in images containing multiple animals, it can cause misclassifications. For example, if the highest-confidence detection is a zebra, the entire image may be labeled as a mountain zebra, even if other animals are present.
Example of how highest confidence can lead to a lot of classifications in certain scenarios
However, there are workarounds to classify each individual animal in the image separately.
For my own testing, I decided to classify each detected animal individually. If there’s only one animal in the image, it performs well. If there are multiple animals of the same species, it sometimes struggles to classify them all correctly. But when there are different species in the same image, they are no longer misclassified as the same animal.
Geofencing and Labeling Trade-Offs
One of the most impressive features of SpeciesNet is its geofencing logic, which allows users to pass in a country code (three-letter format)—and even more specific regions in USA, to prevent impossible classifications.
For example, it ensures that you won’t see a kangaroo in Denmark.
However, this system isn’t perfect. There’s a trade-off when using a broad classifier like SpeciesNet:
- If a species isn’t within the 2,000-class dataset, well bad luck? Either it finds the most similar one or just return "Animal".
- Top class is a white tailed deer, but you are in South Africa? -> Animal
There are generally cases where the logic work fine and sometimes, where the logic defaults to.. "Animal"
Testing SpeciesNet – Real-World Performance
For a real-world test, I processed 5,000 images from the NZ Trailcams dataset (LILA Science).
Test Setup
- 5,000 images processed
- Cropped out animals passed separately
- Ensemble & geofencing applied
From these images, 5,091 detections were made by MegaDetector with a confidence above 0.2.
While I love MegaDetector, and if I recall right have an accuracy of 96%, you may still end up with:
Animal misclassified as human
Detection Breakdown
- 1,380 Animals
- 1,116 Mammals
- 564 Birds
- 26 Blank
- 11 Humans
- 3 Vehicles
The remaining 1,991 images were classified at a more specific level (genus, family, or order).
While impressive for a global classifier, it isn’t perfect. There’s no official benchmark, but I recommend filtering predictions based on confidence thresholds. I found that setting a 0.75 - 0.80 confidence threshold reduces false positives.
Some misclassifications I encountered:
- Hedgehogs and Kiwi birds were sometimes classified as Rattus species.
- Black crows in Denmark were misclassified as Domestic Cattle.
Amongst others :)
That said, over 90% of images were correctly classified, even if some only reached the genus or kingdom level.
Final Thoughts – Is SpeciesNet the Best Global Classifier?
Is it perfect? No.
But is it the best global classifier we currently have for trail camera wildlife images? Yes. (As far as I know)
A universal wildlife AI is exactly what I’ve been asking for. I want AI models that can be used anywhere in the world to sort, process, and manage wildlife data, which is exactly what we’re working toward with Animal Detect.
We’re currently exploring ways to integrate SpeciesNet with our own technologies and pipelines, adding specialized improvements to refine detections, reduce outliers, and better manage classified data visually.
More on that soon.
And now, let’s look at some real detections from the testing! 🚀 (Good and bad - Randomly selected 11)