Funkcje/Identyfikacja zwierząt

Identyfikacja zwierząt

Twoje dwa psy przestają być jednym wspólnym wpisem „pies” i stają się Cocoa i Biscuit — na trzech modelach ponownej identyfikacji zwierząt, które wytrenowaliśmy sami i opublikowaliśmy jako otwarte wagi.

AIzwierzętaDINOv2otwarte wagiDokumentacja
Strona Osoby w Gallery przefiltrowana na zwierzęta, z sześcioma nazwanymi pupilami — Cocoa, Misha, Biscuit, Nanook, Domino i Mochi — każdy z odznaką łapki

Detekcja znajdowała zwierzę. Nie potrafiła powiedzieć które.

Rozpoznawanie zwierząt zawsze potrafiło znaleźć zwierzęta na twoich zdjęciach. Nie potrafiło ich odróżnić: każdy pies w bibliotece trafiał do jednego wspólnego wpisu „pies”, więc dom z dwoma psami dostawał jeden worek z obydwoma w środku i żadnego sposobu, by poprosić o zdjęcia tylko jednego.

Identyfikacja zwierząt to druga połowa. Detekcja znajduje zwierzę na zdjęciu; identyfikacja rozstrzyga, które to zwierzę, i nadaje każdemu własną tożsamość.

Modele wytrenowaliśmy sami

Gallery nie pożycza modelu ponownej identyfikacji zwierząt. Dostarcza trzy, które sami zbudowaliśmy: pet-recognition-small, -base i -large, opublikowane jako otwarte wagi na licencji Apache-2.0 na Hugging Face, w tej samej organizacji open-noodle co reszta naszych modeli.

Cały potok, który je wytworzył — manifest danych, runner treningu, ewaluacja, eksport do ONNX, atrybucja — leży w repozytorium Gallery. Pobierz je, sprawdź nasze liczby albo wytrenuj je ponownie samodzielnie.

Zamrożony backbone i wytrenowana projekcja — i dlaczego oczywiste podejście przegrało

Każdy model to zamrożony backbone DINOv2 plus wytrenowana przez nas projekcja liniowa do 512-wymiarowego osadzenia. Znormalizowane L2 wyjście projekcji jest osadzeniem, a dwie detekcje to to samo zwierzę, gdy te osadzenia leżą dostatecznie blisko w odległości kosinusowej.

Dostrajanie całego backbone'u było pierwszą rzeczą, jaką spróbowaliśmy, i wypadło gorzej. Przy każdym testowanym współczynniku uczenia psy stawały się mniej trafne: model zapamiętywał tożsamości treningowe i zapominał ogólne cechy wizualne, które DINOv2 już miał. Zamrożenie backbone'u i trenowanie wyłącznie projekcji wyraźnie pobiło dostrajanie — a także pobiło nietknięty backbone na obu gatunkach, co jest liczbą dowodzącą, że trening w ogóle coś dał.

Ta decyzja zwraca się dwukrotnie. Skoro backbone nigdy się nie zmienia, jego cechy na obrazach treningowych też się nie zmieniają: wyciąga się je raz i buforuje, a nowa projekcja trenuje się potem w minuty zamiast w godziny. Wszystkie trzy modele wytrenowano lokalnie na laptopie, bez kosztów obliczeniowych — i właśnie dlatego każdy może je odtworzyć.

Trenowane na otwartych danych, mierzone na zwierzętach nigdy niewidzianych

Psy pochodzą z Dogs-World — 313 688 zdjęć 126 550 pojedynczych psów, wydanych na CC0. Koty pochodzą z Cat Individual Images, 13 536 zdjęć na CC BY. DogFaceNet zostaje w całości odłożony jako zbiór wyłącznie ewaluacyjny, na którym nigdy się nie trenuje. Atrybucja wszystkich trzech idzie razem z wagami.

Podział na trening i test jest według osobnika, nie zdjęcia. Odłożenie innych ujęć tego samego psa dałoby piękne liczby i nie powiedziało nic, więc każda tożsamość w zbiorze testowym to taka, której model nigdy nie widział. Te zbiory są duże — 16 469 tożsamości psich i 102 kocie — i każdy model oceniany jest na całości, a nie na wygodnej próbce.

  • smallopen-noodle/pet-recognition-small — DINOv2-S, ~89 MB do pobrania. Trafność top-1 0,535 na niewidzianych psach, 0,913 na niewidzianych kotach.
  • baseopen-noodle/pet-recognition-base — DINOv2-B, ~348 MB. 0,612 na psach, 0,916 na kotach. Domyślny w Gallery.
  • largeopen-noodle/pet-recognition-large — DINOv2-L, ~1,2 GB. 0,672 na psach, 0,915 na kotach.

Wszystkie trzy zwracają to samo 512-wymiarowe osadzenie, więc model jest ustawieniem, a nie zobowiązaniem. Koty wypadają podobnie w każdym rozmiarze, więc biblioteka głównie kocia niemal nic nie zyskuje na pobraniu 1,2 GB; to na psach większe backbone'y zarabiają na swoją wagę.

Jedna liczba celowo poszła w złą stronę. Wczesna ewaluacja objęła próbkę ~600 tożsamości i okazała się mniej więcej 1,5 raza zbyt optymistyczna; ponowna ocena na pełnym zbiorze przesunęła equal-error rate modelu base z 0,039 na 0,047. Publikujemy tę gorszą wartość.

Zwierzęta stają się osobami

Zidentyfikowane zwierzęta pojawiają się na stronie Osoby z odznaką łapki, a wszystko, co już robisz z osobą, działa również na nich. Nadaj nazwę nienazwanemu zwierzęciu. Scal dwa wpisy, gdy ten sam kot został zgrupowany dwukrotnie. Ukryj to, którego wolisz nie widzieć. Otwórz zwierzę, by przejrzeć każde zdjęcie, na którym się pojawia.

Podróżują też tak jak osoby: zwierzę na zdjęciu, które wniosłeś do wspólnej przestrzeni, pojawia się na stronie Osoby tej przestrzeni, na tych samych zasadach uprawnień co wszyscy. A ponieważ stronę Osoby można teraz filtrować na Wszystko, Osoby lub Zwierzęta, biblioteka z dużą liczbą jednych i drugich pozostaje czytelna.

Zwierzęta są ponadto zwolnione z progu minimalnej liczby zdjęć, który trzyma zaszumione klastry twarzy z dala od strony Osoby. Ten próg wymaga trzech zdjęć, zanim twarz zasłuży na pokazanie; zwierzę sfotografowane raz wciąż jest niewątpliwie tym zwierzęciem, więc dostaje własny wpis od pierwszego zdjęcia.

Psy i koty — i dlaczego nie reszta

Jako osobniki rozpoznawane są tylko psy i koty — a od tego wydania są to jedyne dwa gatunki, które detekcja w ogóle zapisuje. Ptaki, konie, owce i krowy trafiały wcześniej do wspólnego wpisu gatunkowego, którego strona Osoby nigdy nie wyświetlała; to były wiersze pisane bez czytelnika, więc Gallery przestała je zapisywać.

Ograniczeniem są dane, nie chęci. Dla koni, owiec czy ptaków nie istnieje zbiór tożsamości indywidualnych, na którym można by trenować — nie ma czym odróżnić jednego ptaka od drugiego. Bydło jest jedynym wyjątkiem, z dostępnymi czystymi danymi CC-BY, i zostało pominięte tylko dlatego, że krowa to nie to, co ktokolwiek rozumie przez „zwierzę domowe”.

Włączanie, uczciwie

Identyfikacja zwierząt jest domyślnie wyłączona, podobnie jak rozpoznawanie zwierząt — bez działającej detekcji identyfikacja nie ma na czym pracować. Oba włącza się w ustawieniach uczenia maszynowego.

Włączenie działa na nowo przesyłane zdjęcia. Wciągnięcie istniejącej biblioteki oznacza zresetowanie zadania Identyfikacja zwierząt, a to jest naprawdę destrukcyjne: usuwa każdą tożsamość zwierzęcia i każdą nadaną nazwę, po czym buduje wszystko od zera. Lepiej zrobić to raz, wcześnie, niż po nazwaniu dwudziestu zwierząt. Przełączenie między trzema modelami robi to samo, z tego samego powodu: każdy model ma własną przestrzeń osadzeń, a osadzenia jednego są dla drugiego bez znaczenia.

To wydanie zastąpiło też leżący pod spodem detektor modelem RF-DETR, co podniosło czułość gatunkową z 84,8 % do 98,1 % i skończyło z psami zgłaszanymi czasem jako niedźwiedzie — identyfikacja pracuje więc na znacznie czystszych detekcjach niż wersję wcześniej.

Przeczytaj pełną dokumentację na GitHubie

Gotowy, by uruchomić Gallery na własnym serwerze? Instalacja w 5 minut, a demo zostaje na szybki rzut oka.