Can a single model detect any fish, in any water? That's the bet behind the Community Fish Detector — and it's exactly the kind of ambitious, messy, real-world problem that gets a lot more tractable when you can actually see your data. So we put it under the FiftyOne microscope.
Key takeaways
- The Community Fish Detector is a single-class model built to find fish in any water, trained on the Community Fish Detection Dataset of over 1.9 million images and more than 935,000 bounding boxes from 17 datasets, as of the dataset's December 2025 revision.
- A single aggregate score like 0.6 AP hides where a "find any fish, anywhere" model actually holds up or falls apart. FiftyOne replaces that one number with per-source breakdowns you can see.
- Per-source mAP turns one opaque score into a map of which of the 17 environments the detector handles well and which it struggles in.
- The FiftyOne Brain automatically surfaces probable annotation errors and confident-but-unlabeled fish, catching real bugs across 17 stitched-together sources.
- The whole demo streams a curated subset from the cloud, so you can explore a 1.9M-image dataset on a laptop with no bulk download.
The goal: one model for any fish, any water
The
Community Fish Detector is a community-built object detector with one job: find fish. Not "find a bluegill" or "find a reef shark" — just fish, as a single class, anywhere.
It's trained on the
Community Fish Detection Dataset hosted on
LILA BC: and as of its December 2025 revision, it spans over 1.9 million images and more than 935,000 bounding boxes, harmonized from 17 separate datasets into one clean COCO archive. And those sources could not be more different — murky brackish water in Denmark, tropical reef GoPro footage, freshwater underwater-video billabongs in Australia, and 32 cm lab tanks full of zebrafish. One label, wildly different worlds.
FiftyOne: The missing visual layer
FiftyOne is the open-source tool for annotating and curating datasets, and debugging vision models. Instead of squinting at aggregate metrics, you explore your images, labels, and predictions side by side — filter, sort,
search by similarity,
evaluate, and find the exact samples that break your model. Think of it as the missing visual layer between "the May 2026 release scores about 0.6 AP" and "here's
why."
Why 17 environments make the perfect stress test
A dataset built from 17 environments under one label is the perfect stress test — and the perfect FiftyOne demo. The single number that a benchmark spits out for a model like this is almost useless on its own. What you actually want to know is: where does "find any fish, anywhere" hold up, and where does it fall apart? That's a question about
slices of your data, and slicing is what FiftyOne is built for.
Download the notebook and recreate the demo to experience it for yourself.
What FiftyOne surfaces in the Community Fish Detector
Per-source mAP: one model, 17 environments, one table. Per-source mAP turns a single opaque score into a map of exactly where the detector wins and where it dies.
Click the metric, see the pixels. Every evaluation tags true/false positives and misses, so you jump straight from a bad metric to the pixels causing it.
Mistakenness scoring finds label errors for you. Mistakenness scoring surfaces probable annotation errors across 17 stitched-together datasets automatically.
Missing-box detection catches unlabeled fish. Flags confident fish with no ground-truth label — real bugs to send back upstream.
Saved views recreate every demo moment. One dropdown click recreates any slice — no re-running code, no hunting.
Cloud streaming: 1.9M images, laptop-sized demo. Streams a curated subset straight from the cloud, no bulk download required.
Next steps: build the demo yourself
Grab the notebook, point it at the buckets, and go find some fish. 🐟
Frequently asked questions
What is the Community Fish Detector?
The Community Fish Detector (CFD) is a community-built object detector with one job: find fish as a single class, in any water. It does not identify species, it simply locates fish across freshwater, marine, and lab environments.
What is the Community Fish Detector trained on?
It is trained on the Community Fish Detection Dataset, hosted on LILA BC. As of the dataset's December 2025 revision, the dataset spans over 1.9 million images and more than 935,000 bounding boxes, harmonized from 17 separate datasets into a single COCO archive with one "fish" category.
Why evaluate a fish detection model in FiftyOne instead of just reading its benchmark score?
A single aggregate score tells you a model's average performance but not where it breaks. FiftyOne lets you slice performance by source, jump from a bad metric straight to the pixels causing it, and see the domain gaps between environments, which is exactly what a one-number benchmark hides.
What is per-source mAP, and why does it matter for this model?
Per-source mAP reports the detector's accuracy separately for each of the 17 datasets rather than as one blended figure. For a "find any fish, anywhere" model, it reveals which environments the detector handles well and which it fails in, turning a single opaque score into a map.
How does FiftyOne find labeling errors in the dataset?
The FiftyOne Brain scores mistakenness to surface probable annotation errors automatically, and it flags confident fish predictions that have no ground-truth label. Both point to real bugs worth sending upstream, which matters when a dataset stitches together 17 differently annotated sources.
Do I need to download all 1.9 million images to try the demo?
No. The demo streams a curated subset straight from the cloud, so you can explore the data and recreate every slice on a laptop without a bulk download. The notebook is on GitHub, and a live version of the model runs on FathomNet's Hugging Face Space.
What does the model's roughly 0.6 AP actually tell me?
As of the May 2026 release, the model scores around 0.6 AP on the dataset's own validation split. The authors caution that this absolute number is only useful for comparing model versions to each other, not as a portable benchmark, because the train and validation splits are not published.