Vos deux chiens cessent d’être une seule entrée « chien » et deviennent Cocoa et Biscuit — grâce à trois modèles de ré-identification d’animaux que nous avons entraînés nous-mêmes et publiés en poids ouverts.
La détection trouvait l’animal. Elle ne pouvait pas dire lequel.
La détection d’animaux de compagnie a toujours su trouver les animaux dans vos photos. Ce qu’elle ne savait pas faire, c’est les distinguer : chaque chien de la bibliothèque atterrissait dans une seule entrée « chien », si bien qu’un foyer qui en a deux se retrouvait avec un seul bac contenant les deux, sans moyen de demander les photos d’un seul.
La reconnaissance d’animaux est la seconde moitié. La détection trouve l’animal sur la photo ; la reconnaissance décide quel animal c’est et donne à chacun sa propre identité.
Nous avons entraîné les modèles nous-mêmes
Gallery n’emprunte pas de modèle de ré-identification animale. Elle en livre trois que nous avons construits : pet-recognition-small, -base et -large, publiés en poids ouverts sous Apache-2.0 sur Hugging Face, dans la même organisation open-noodle que nos autres modèles.
Toute la chaîne qui les a produits — manifeste de données, exécuteur d’entraînement, évaluation, export ONNX, attribution — vit dans le dépôt Gallery. Téléchargez-les, vérifiez nos chiffres, ou réentraînez-les vous-même.
Un backbone gelé et une projection entraînée — et pourquoi l’approche évidente a perdu
Chaque modèle est un backbone DINOv2 gelé plus une projection linéaire que nous avons entraînée vers un embedding en 512 dimensions. La sortie L2-normalisée de la projection est l’embedding, et deux détections correspondent au même animal quand ces embeddings sont assez proches en distance cosinus.
Affiner l’ensemble du backbone a été notre première tentative, et le résultat était pire. À chaque taux d’apprentissage testé, les chiens devenaient moins précis : le modèle mémorisait les identités d’entraînement et oubliait les caractéristiques visuelles générales que DINOv2 possédait déjà. Geler le backbone et n’entraîner que la projection a nettement battu l’affinage — et battu le backbone intact sur les deux espèces, ce qui est le chiffre qui prouve que l’entraînement a servi à quelque chose.
Ce choix rapporte deux fois. Comme le backbone ne change jamais, ses caractéristiques sur les images d’entraînement ne changent jamais non plus : elles sont extraites une fois puis mises en cache, et une nouvelle projection s’entraîne ensuite en minutes plutôt qu’en heures. Les trois modèles ont été entraînés localement sur un ordinateur portable, sans coût de calcul — c’est aussi pour cela que n’importe qui peut les reproduire.
Entraînés sur des données ouvertes, mesurés sur des animaux jamais vus
Les chiens viennent de Dogs-World — 313 688 photos de 126 550 chiens individuels, publiées en CC0. Les chats viennent de Cat Individual Images, 13 536 photos sous CC BY. DogFaceNet est entièrement réservé comme jeu d’évaluation, jamais utilisé pour l’entraînement. L’attribution des trois accompagne les poids.
La séparation entraînement/test se fait par individu, pas par photo. Réserver d’autres clichés du même chien produirait de beaux chiffres et ne dirait rien : chaque identité du jeu de test est donc une identité que le modèle n’a jamais vue. Ces jeux sont vastes — 16 469 identités canines et 102 félines — et chaque modèle est évalué sur leur totalité, pas sur un échantillon commode.
smallopen-noodle/pet-recognition-small — DINOv2-S, ~89 Mo à télécharger. Précision top-1 de 0,535 sur des chiens inconnus, 0,913 sur des chats inconnus.
baseopen-noodle/pet-recognition-base — DINOv2-B, ~348 Mo. 0,612 sur les chiens, 0,916 sur les chats. Le choix par défaut de Gallery.
largeopen-noodle/pet-recognition-large — DINOv2-L, ~1,2 Go. 0,672 sur les chiens, 0,915 sur les chats.
Les trois produisent le même embedding en 512 dimensions : le modèle est donc un réglage, pas un engagement. Les chats obtiennent à peu près le même score dans toutes les tailles, une bibliothèque majoritairement féline ne gagne donc presque rien au téléchargement de 1,2 Go ; c’est sur les chiens que les grands backbones justifient leur poids.
Un chiffre a délibérément bougé dans le mauvais sens. Une évaluation précoce portait sur un échantillon de ~600 identités et s’est révélée environ 1,5 fois trop optimiste ; la réévaluation sur le jeu complet a fait passer le taux d’erreur égale du modèle base de 0,039 à 0,047. Le chiffre que nous publions est le moins bon.
Les animaux deviennent des personnes
Les animaux reconnus apparaissent sur la page Personnes avec un badge patte, et tout ce que vous faites déjà avec une personne fonctionne sur eux. Donnez un nom à un animal sans nom. Fusionnez deux entrées quand le même chat a été regroupé deux fois. Masquez celui que vous préférez ne pas voir. Ouvrez un animal pour parcourir chaque photo où il apparaît.
Ils voyagent aussi comme les personnes : un animal présent sur une photo que vous avez versée à un Espace partagé apparaît sur la page Personnes de cet Espace, sous les mêmes règles de permission que tout le monde. Et comme la page Personnes se filtre désormais sur Tous, Personnes ou Animaux, une bibliothèque riche des deux reste lisible.
Les animaux échappent également au seuil minimal de photos qui tient les groupes de visages bruités à l’écart de la page Personnes. Ce garde-fou réclame trois photos avant qu’un visage mérite d’être montré ; un animal photographié une seule fois reste indubitablement cet animal, il obtient donc sa propre entrée dès la première photo.
Chiens et chats, et pourquoi pas le reste
Seuls les chiens et les chats sont reconnus comme individus — et depuis cette version, ce sont les deux seules espèces que la détection enregistre. Oiseaux, chevaux, moutons et vaches atterrissaient auparavant dans une entrée partagée par espèce que la page Personnes n’a jamais listée ; c’étaient des lignes écrites pour rien, Gallery a donc cessé de les écrire.
La limite tient aux données, pas à l’envie. Il n’existe aucun jeu de données d’identité individuelle pour les chevaux, les moutons ou les oiseaux sur lequel s’entraîner — rien qui permette de distinguer un oiseau d’un autre. Les bovins font exception, avec des données CC-BY propres disponibles, et n’ont été écartés que parce qu’une vache n’est pas ce que quiconque entend par « animal de compagnie ».
L’activer, honnêtement
La reconnaissance d’animaux est désactivée par défaut, et la détection aussi — sans détection en marche, la reconnaissance n’a rien à traiter. Les deux s’activent dans les paramètres d’apprentissage automatique.
L’activation s’applique aux photos nouvellement téléversées. Faire entrer votre bibliothèque existante suppose de réinitialiser la tâche de reconnaissance d’animaux, et c’est réellement destructeur : cela supprime chaque identité animale et chaque nom que vous avez donné, puis reconstruit à zéro. Mieux vaut le faire une fois, tôt, plutôt qu’après avoir nommé vingt animaux. Changer de modèle parmi les trois fait la même chose, pour la même raison : chaque modèle a son propre espace d’embedding, et les embeddings de l’un n’ont aucun sens pour l’autre.
Cette version a aussi remplacé le détecteur sous-jacent par RF-DETR, ce qui a porté le rappel par espèce de 84,8 % à 98,1 % et mis fin aux chiens occasionnellement signalés comme des ours — la reconnaissance travaille donc sur des détections bien plus propres qu’une version auparavant.