Funzionalità/Riconoscimento degli animali domestici
Riconoscimento degli animali domestici
I tuoi due cani smettono di essere un’unica voce «cane» condivisa e diventano Cocoa e Biscuit — grazie a tre modelli di re-identificazione degli animali che abbiamo addestrato noi e pubblicato a pesi aperti.
Il rilevamento trovava l’animale. Non sapeva dirti quale.
Il rilevamento degli animali domestici ha sempre saputo trovare gli animali nelle tue foto. Quello che non sapeva fare era distinguerli: ogni cane della libreria finiva in un’unica voce «cane» condivisa, così una famiglia con due cani si ritrovava un solo contenitore con entrambi dentro e nessun modo di chiedere le foto di uno solo.
Il riconoscimento degli animali è la seconda metà. Il rilevamento trova l’animale nella foto; il riconoscimento decide quale animale sia e dà a ciascuno una propria identità.
I modelli li abbiamo addestrati noi
Gallery non prende in prestito un modello di re-identificazione degli animali. Ne distribuisce tre costruiti da noi: pet-recognition-small, -base e -large, pubblicati a pesi aperti sotto Apache-2.0 su Hugging Face, nella stessa organizzazione open-noodle degli altri nostri modelli.
L’intera pipeline che li ha prodotti — manifest dei dati, runner di training, valutazione, export ONNX, attribuzione — vive nel repository di Gallery. Scaricali, verifica i nostri numeri o riaddestrali tu.
Un backbone congelato e una proiezione addestrata — e perché l’approccio ovvio ha perso
Ogni modello è un backbone DINOv2 congelato più una proiezione lineare addestrata da noi verso un embedding a 512 dimensioni. L’uscita L2-normalizzata della proiezione è l’embedding, e due rilevamenti sono lo stesso animale quando quegli embedding stanno abbastanza vicini in distanza coseno.
Fare fine-tuning dell’intero backbone è stata la prima cosa che abbiamo provato, ed è andata peggio. A ogni learning rate testato i cani diventavano meno accurati: il modello memorizzava le identità di addestramento e dimenticava le caratteristiche visive generali che DINOv2 aveva già. Congelare il backbone e addestrare solo la proiezione ha battuto nettamente il fine-tuning — e ha battuto anche il backbone intatto su entrambe le specie, il numero che dimostra che l’addestramento è servito a qualcosa.
Questa scelta rende due volte. Poiché il backbone non cambia mai, non cambiano nemmeno le sue feature sulle immagini di addestramento: vengono estratte una sola volta e messe in cache, e una nuova proiezione si addestra poi in minuti anziché in ore. Tutti e tre i modelli sono stati addestrati in locale su un portatile, a costo di calcolo zero — ed è anche il motivo per cui chiunque può riprodurli.
Addestrati su dati aperti, misurati su animali mai visti
I cani vengono da Dogs-World — 313.688 foto di 126.550 cani individuali, rilasciate in CC0. I gatti vengono da Cat Individual Images, 13.536 foto sotto CC BY. DogFaceNet resta interamente da parte come insieme di sola valutazione, su cui non si addestra mai. L’attribuzione di tutti e tre accompagna i pesi.
La divisione tra addestramento e test è per individuo, non per foto. Tenere da parte altri scatti dello stesso cane produrrebbe numeri bellissimi e non direbbe nulla, quindi ogni identità nell’insieme di test è una che il modello non ha mai visto. Sono insiemi ampi — 16.469 identità canine e 102 feline — e ogni modello viene valutato su tutte, non su un campione comodo.
smallopen-noodle/pet-recognition-small — DINOv2-S, ~89 MB di download. Accuratezza top-1 di 0,535 su cani mai visti, 0,913 su gatti mai visti.
baseopen-noodle/pet-recognition-base — DINOv2-B, ~348 MB. 0,612 sui cani, 0,916 sui gatti. Il valore predefinito di Gallery.
largeopen-noodle/pet-recognition-large — DINOv2-L, ~1,2 GB. 0,672 sui cani, 0,915 sui gatti.
Tutti e tre producono lo stesso embedding a 512 dimensioni, quindi il modello è un’impostazione e non un vincolo. I gatti ottengono più o meno lo stesso punteggio a ogni taglia, perciò una libreria prevalentemente felina non guadagna quasi nulla dal download da 1,2 GB; è sui cani che i backbone più grandi si guadagnano il peso.
Un numero si è mosso deliberatamente nella direzione sbagliata. Una valutazione iniziale su un campione di ~600 identità è risultata circa 1,5 volte troppo ottimistica; rivalutando l’insieme completo, l’equal-error rate del modello base è passato da 0,039 a 0,047. Il valore che pubblichiamo è il peggiore.
Gli animali diventano persone
Gli animali riconosciuti compaiono nella pagina Persone con una spilla a forma di zampa, e tutto ciò che già fai con una persona funziona anche con loro. Dai un nome a un animale senza nome. Unisci due voci quando lo stesso gatto è stato raggruppato due volte. Nascondi quello che preferisci non vedere. Apri un animale per sfogliare ogni foto in cui appare.
Viaggiano anche come le persone: un animale in una foto che hai portato in uno Spazio condiviso compare nella pagina Persone di quello Space, con le stesse regole di permesso di chiunque altro. E poiché la pagina Persone si può ora filtrare su Tutti, Persone o Animali, una libreria ricca di entrambi resta leggibile.
Gli animali sono inoltre esenti dalla soglia minima di foto che tiene i cluster di volti rumorosi fuori dalla pagina Persone. Quel filtro chiede tre foto prima che un volto meriti di essere mostrato; un animale fotografato una volta sola resta inconfondibilmente quell’animale, quindi ottiene una voce propria dalla prima foto.
Cani e gatti, e perché non il resto
Solo cani e gatti vengono riconosciuti come individui — e da questa versione sono le uniche due specie che il rilevamento registra. Uccelli, cavalli, pecore e mucche finivano prima in una voce condivisa per specie che la pagina Persone non ha mai elencato; erano righe scritte e mai lette, quindi Gallery ha smesso di scriverle.
Il limite sono i dati, non la voglia. Non esiste alcun dataset di identità individuali su cui addestrarsi per cavalli, pecore o uccelli — nulla con cui distinguere un uccello da un altro. I bovini sono l’unica eccezione, con dati CC-BY puliti disponibili, e sono rimasti fuori solo perché una mucca non è ciò che qualcuno intende per «animale domestico».
Attivarlo, onestamente
Il riconoscimento degli animali è disattivato per impostazione predefinita, e lo è anche il rilevamento — senza rilevamento attivo il riconoscimento non ha nulla su cui lavorare. Entrambi si attivano nelle impostazioni di machine learning.
L’attivazione vale per le foto caricate da quel momento. Portare dentro la libreria esistente significa reimpostare il job Riconoscimento animali, ed è davvero distruttivo: cancella ogni identità animale e ogni nome che hai dato, poi ricostruisce da zero. Meglio farlo una volta, presto, che dopo aver nominato venti animali. Passare da un modello all’altro fa la stessa cosa, per lo stesso motivo: ogni modello ha il proprio spazio di embedding, e gli embedding di uno non hanno senso per l’altro.
Questa versione ha anche sostituito il rilevatore sottostante con RF-DETR, portando il recall per specie dall’84,8 % al 98,1 % e mettendo fine ai cani occasionalmente segnalati come orsi — il riconoscimento lavora quindi su rilevamenti molto più puliti di una versione fa.