Your two dogs stop being one shared “dog” entry and become Cocoa and Biscuit — running on three pet re-identification models we trained ourselves and published as open weights.
Detection found the animal. It could not tell you which one.
Pet Detection has always been able to find the animals in your photos. What it could not do was tell them apart: every dog in the library landed in one shared “dog” entry, so a household with two of them got a single bucket with both in it, and no way to ask for photos of just one.
Pet Recognition is the second half. Detection finds the animal in the photo; recognition decides which animal it is, and gives each one its own identity.
We trained the models ourselves
Gallery does not borrow a pet re-identification model. It ships three we built: pet-recognition-small, -base and -large, published as open weights under Apache-2.0 on Hugging Face, under the same open-noodle org as the rest of our models.
The whole pipeline that produced them — data manifest, training runner, evaluation, ONNX export, attribution — is committed in the Gallery repository. Download them, check our numbers, or retrain them yourself.
A frozen backbone and a trained projection — and why the obvious approach lost
Each model is a frozen DINOv2 backbone plus a linear projection we trained down to a 512-dimension embedding. The projection's L2-normalized output is the embedding, and two detections are the same pet when those embeddings sit close enough together in cosine distance.
Fine-tuning the whole backbone was the first thing we tried, and it was worse. At every learning rate we tested, dogs got less accurate: the model memorised the training identities and forgot the general visual features DINOv2 already had. Freezing the backbone and training only the projection beat the fine-tune outright — and beat the untouched backbone on both species, which is the number that proves the training did anything at all.
That choice pays off twice. Because the backbone never changes, its features over the training images never change either, so they are extracted once and cached; a fresh projection then trains in minutes instead of hours. All three models were trained locally on a laptop, at no compute cost, which is also why anyone can reproduce them.
Trained on open data, measured on pets it had never met
The dogs come from Dogs-World — 313,688 photos of 126,550 individual dogs, released CC0. The cats come from Cat Individual Images, 13,536 photos under CC BY. DogFaceNet is held back entirely as an evaluation-only set the models never train on. Attribution for all three ships with the weights.
The train/test split is by individual, not by photo. Holding out different pictures of the same dog would produce beautiful numbers and tell you nothing, so every identity in the test set is one the model has never seen. Those splits are large — 16,469 dog identities and 102 cat identities — and each model is scored across all of them rather than a convenient sample.
smallopen-noodle/pet-recognition-small — DINOv2-S, ~89 MB download. Top-1 accuracy 0.535 on unseen dogs, 0.913 on unseen cats.
baseopen-noodle/pet-recognition-base — DINOv2-B, ~348 MB. 0.612 on dogs, 0.916 on cats. Gallery's default.
largeopen-noodle/pet-recognition-large — DINOv2-L, ~1.2 GB. 0.672 on dogs, 0.915 on cats.
All three emit the same 512-dimension embedding, so the model is a setting rather than a commitment. Cats score about the same on every size, so a mostly-feline library gains almost nothing from the 1.2 GB download; dogs are where the larger backbones earn their weight.
One number moved in the wrong direction deliberately. An early evaluation scored a ~600-identity sample and came out roughly 1.5× too optimistic; re-scoring the complete split moved the base model's equal-error rate from 0.039 to 0.047. The figure we publish is the worse one.
Pets become people
Recognized pets appear on the People page with a paw badge, and everything you already do with a person works on them. Give an unnamed pet a name. Merge two entries when the same cat was clustered twice. Hide one you would rather not see. Open a pet to browse every photo it appears in.
They travel the same way people do, too: a pet in a photo you contributed to a Shared Space shows up on that space's People page, under the same permission rules as everyone else. And because the People page can now be filtered to All, People or Pets, a library with a lot of both stays readable.
Pets are also exempt from the minimum-photo threshold that keeps noisy face clusters off the People page. That gate asks for three photos before a face is worth showing; a pet photographed once is still unmistakably that pet, so it gets its own entry from the first photo.
Dogs and cats, and why not the rest
Only dogs and cats are recognized as individuals — and as of this release they are the only two species detection records at all. Birds, horses, sheep and cows used to land in a shared per-species entry that the People page never listed; those were write-only rows, so Gallery stopped writing them.
The limit is data, not appetite. There is no individual-identity dataset for horses, sheep or birds to train on — nothing to learn one bird from another with. Cattle are the one exception, with clean CC-BY data available, and were left out only because a cow is not what anyone means by a pet.
Turning it on, honestly
Pet Recognition is off by default, and so is Pet Detection — recognition has nothing to work with unless detection is running too. Both are switched on under Machine Learning settings.
Enabling it applies to newly uploaded photos. Bringing your existing library in means resetting the Pet Recognition job, and that is genuinely destructive: it deletes every pet identity and every name you have given, then rebuilds from scratch. Worth doing once, early, rather than after you have named twenty pets. Switching between the three models does the same thing, for the same reason — each model has its own embedding space, and embeddings from one are meaningless to another.
This release also replaced the detector underneath with RF-DETR, which raised species recall from 84.8% to 98.1% and stopped it occasionally reporting dogs as bears — so recognition is working from a much cleaner set of detections than it would have been a version ago.