Funciones/Reconocimiento de mascotas

Reconocimiento de mascotas

Tus dos perros dejan de ser una única entrada «perro» compartida y pasan a ser Cocoa y Biscuit — sobre tres modelos de reidentificación de mascotas que entrenamos nosotros y publicamos con pesos abiertos.

IAmascotasDINOv2pesos abiertosDocumentación
La página Personas de Gallery filtrada por mascotas, con seis mascotas nombradas — Cocoa, Misha, Biscuit, Nanook, Domino y Mochi — cada una con una insignia de huella

La detección encontraba al animal. No podía decirte cuál.

La detección de mascotas siempre supo encontrar los animales de tus fotos. Lo que no sabía hacer era distinguirlos: todos los perros de la biblioteca acababan en una única entrada «perro» compartida, así que un hogar con dos se quedaba con un solo cajón que los contenía a ambos y sin forma de pedir las fotos de uno solo.

El reconocimiento de mascotas es la segunda mitad. La detección encuentra al animal en la foto; el reconocimiento decide qué animal es y le da a cada uno su propia identidad.

Los modelos los entrenamos nosotros

Gallery no toma prestado un modelo de reidentificación de mascotas. Distribuye tres construidos por nosotros: pet-recognition-small, -base y -large, publicados con pesos abiertos bajo Apache-2.0 en Hugging Face, en la misma organización open-noodle que el resto de nuestros modelos.

Toda la cadena que los produjo — manifiesto de datos, ejecutor de entrenamiento, evaluación, exportación a ONNX, atribución — vive en el repositorio de Gallery. Descárgalos, comprueba nuestras cifras o reentrénalos tú.

Un backbone congelado y una proyección entrenada — y por qué perdió el enfoque obvio

Cada modelo es un backbone DINOv2 congelado más una proyección lineal entrenada por nosotros hasta un embedding de 512 dimensiones. La salida L2-normalizada de la proyección es el embedding, y dos detecciones son la misma mascota cuando esos embeddings quedan lo bastante cerca en distancia coseno.

Ajustar todo el backbone fue lo primero que probamos, y salió peor. Con cada tasa de aprendizaje que probamos, los perros se volvían menos precisos: el modelo memorizaba las identidades de entrenamiento y olvidaba las características visuales generales que DINOv2 ya tenía. Congelar el backbone y entrenar solo la proyección superó al ajuste fino con claridad — y superó también al backbone intacto en ambas especies, que es la cifra que demuestra que el entrenamiento sirvió de algo.

Esa decisión rinde dos veces. Como el backbone nunca cambia, sus características sobre las imágenes de entrenamiento tampoco cambian: se extraen una vez y se guardan en caché, y una proyección nueva se entrena después en minutos en lugar de horas. Los tres modelos se entrenaron localmente en un portátil, sin coste de cómputo — y por eso mismo cualquiera puede reproducirlos.

Entrenados con datos abiertos, medidos con mascotas que nunca habían visto

Los perros vienen de Dogs-World — 313.688 fotos de 126.550 perros individuales, publicadas en CC0. Los gatos vienen de Cat Individual Images, 13.536 fotos bajo CC BY. DogFaceNet se reserva por completo como conjunto exclusivo de evaluación, con el que nunca se entrena. La atribución de los tres acompaña a los pesos.

La separación entre entrenamiento y prueba es por individuo, no por foto. Reservar otras imágenes del mismo perro daría cifras preciosas y no diría nada, así que cada identidad del conjunto de prueba es una que el modelo nunca ha visto. Son conjuntos grandes — 16.469 identidades caninas y 102 felinas — y cada modelo se evalúa sobre todas ellas, no sobre una muestra cómoda.

  • smallopen-noodle/pet-recognition-small — DINOv2-S, ~89 MB de descarga. Precisión top-1 de 0,535 en perros no vistos, 0,913 en gatos no vistos.
  • baseopen-noodle/pet-recognition-base — DINOv2-B, ~348 MB. 0,612 en perros, 0,916 en gatos. El valor por defecto de Gallery.
  • largeopen-noodle/pet-recognition-large — DINOv2-L, ~1,2 GB. 0,672 en perros, 0,915 en gatos.

Los tres producen el mismo embedding de 512 dimensiones, así que el modelo es un ajuste y no un compromiso. Los gatos puntúan casi igual en todos los tamaños, de modo que una biblioteca mayoritariamente felina gana poquísimo con la descarga de 1,2 GB; es en los perros donde los backbones grandes se ganan su peso.

Una cifra se movió a peor a propósito. Una evaluación temprana midió una muestra de ~600 identidades y resultó ser unas 1,5 veces demasiado optimista; volver a puntuar el conjunto completo llevó la tasa de error igual del modelo base de 0,039 a 0,047. La cifra que publicamos es la peor.

Las mascotas se vuelven personas

Las mascotas reconocidas aparecen en la página Personas con una insignia de huella, y todo lo que ya haces con una persona funciona con ellas. Ponle nombre a una mascota sin nombre. Fusiona dos entradas cuando el mismo gato se agrupó dos veces. Oculta la que prefieras no ver. Abre una mascota para recorrer cada foto en la que aparece.

También viajan igual que las personas: una mascota en una foto que aportaste a un Espacio compartido aparece en la página Personas de ese Space, bajo las mismas reglas de permisos que todos los demás. Y como la página Personas ahora se filtra por Todo, Personas o Mascotas, una biblioteca con mucho de ambos sigue siendo legible.

Las mascotas quedan además exentas del umbral mínimo de fotos que mantiene fuera de la página Personas los grupos de caras ruidosos. Ese filtro pide tres fotos antes de que una cara merezca mostrarse; una mascota fotografiada una sola vez sigue siendo inconfundiblemente esa mascota, así que obtiene su propia entrada desde la primera foto.

Perros y gatos, y por qué no el resto

Solo se reconocen como individuos perros y gatos — y desde esta versión son las dos únicas especies que la detección registra siquiera. Pájaros, caballos, ovejas y vacas acababan antes en una entrada compartida por especie que la página Personas nunca listó; eran filas que solo se escribían, así que Gallery dejó de escribirlas.

El límite son los datos, no las ganas. No existe ningún conjunto de datos de identidad individual con el que entrenar para caballos, ovejas o pájaros — nada con lo que distinguir un pájaro de otro. El ganado vacuno es la única excepción, con datos CC-BY limpios disponibles, y quedó fuera solo porque una vaca no es lo que nadie entiende por «mascota».

Activarlo, con honestidad

El reconocimiento de mascotas está desactivado por defecto, y la detección también — sin detección en marcha, el reconocimiento no tiene con qué trabajar. Ambos se activan en los ajustes de machine learning.

Activarlo se aplica a las fotos que subas a partir de ese momento. Incorporar tu biblioteca existente implica restablecer el trabajo de Reconocimiento de mascotas, y eso es realmente destructivo: borra todas las identidades de mascotas y todos los nombres que hayas puesto, y lo reconstruye desde cero. Mejor hacerlo una vez, pronto, que después de haber nombrado veinte mascotas. Cambiar entre los tres modelos hace lo mismo, por la misma razón: cada modelo tiene su propio espacio de embeddings, y los de uno no significan nada para el otro.

Esta versión también sustituyó el detector subyacente por RF-DETR, lo que subió la exhaustividad por especie del 84,8 % al 98,1 % y acabó con los perros señalados ocasionalmente como osos — así que el reconocimiento trabaja sobre detecciones mucho más limpias que hace una versión.

Lee la documentación completa en GitHub

¿Listo para ejecutar Gallery en tu propio servidor? Instálalo en 5 minutos y deja la demo para una comprobación rápida.