
Technologie i modele dla naszego przyszłego systemu wizji komputerowej były stopniowo tworzone i doskonalone w różnych projektach naszej firmy — w Poczcie, Chmurze, Wyszukiwarce. Dojrzewały jak dobry ser czy koniak. Pewnego dnia zrozumieliśmy, że nasze sieci neuronowe osiągają doskonałe wyniki w rozpoznawaniu i postanowiliśmy połączyć je w jeden produkt B2B — Vision, z którego teraz korzystamy i który oferujemy również Państwu.
Dziś nasza technologia wizji komputerowej na platformie Mail.Ru Cloud Solutions skutecznie działa i rozwiązuje bardzo trudne zadania praktyczne. Opiera się ona na szeregu sieci neuronowych, które zostały wytrenowane na naszych zbiorach danych i specjalizują się w rozwiązywaniu aplikacyjnych zadań. Wszystkie usługi działają na naszych mocach serwerowych. Możesz zintegrować w swoich aplikacjach publiczne API Vision, przez które dostępne są wszystkie możliwości usługi. API jest szybkie — dzięki serwerowym GPU średni czas odpowiedzi w naszej sieci wynosi około 100 ms.
Zapraszamy do przeczytania dalszej części, gdzie znajdziesz szczegółowy opis i wiele przykładów pracy Vision.
Jako przykład usługi, w której sami wykorzystujemy wspomniane technologie rozpoznawania twarzy, można podać . Jednym z jego komponentów są fotobudki Vision, które stawiamy na różnych konferencjach. Jeśli podejdziesz do takiej fotobudki, zrobisz zdjęcie za pomocą wbudowanej kamery i wprowadzisz swój adres e-mail, system natychmiast znajdzie wśród zdjęć te, na których uchwycili cię profesjonalni fotografowie konferencji, a jeśli chcesz, wyśle ci znalezione zdjęcia na e-mail. I mowa tu nie o pozowanych portretach — Vision rozpozna cię nawet na tylnym planie w tłumie uczestników. Oczywiście, to nie same fotobudki rozpoznają — to tylko tablety w ładnych podstawach, które po prostu fotografują gości swoimi wbudowanymi kamerami i przesyłają informacje na serwery, gdzie odbywa się cała magia rozpoznawania. Niejednokrotnie obserwowaliśmy zdumienie, jakie technologia ta wywołuje nawet wśród specjalistów od rozpoznawania obrazów. Poniżej przedstawimy kilka przykładów.

1. Nasz model Rozpoznawania Twarzy
1.1. Sieć neuronowa i prędkość przetwarzania
Do rozpoznawania używamy zmodyfikowanej wersji modelu sieci neuronowej ResNet 101. Warstwę average pooling na końcu zastąpiono warstwą gęstą, tak jak to zrobiono w ArcFace. Jednak rozmiar wektorowych reprezentacji wynosi 128, a nie 512. Nasz zbiór danych treningowych zawiera około 10 milionów zdjęć 273 593 osób.
Model działa bardzo szybko dzięki starannie dobranej architekturze konfiguracji serwera i obliczeniom na GPU. Odpowiedź z API w naszych wewnętrznych sieciach zajmuje od 100 ms — wlicza się w to wykrywanie twarzy (odkrywanie twarzy na zdjęciu), rozpoznawanie i zwracanie PersonID w odpowiedzi API. Przy dużych ilościach danych wejściowych — zdjęć i filmów — znacznie więcej czasu zajmuje przesyłanie danych do usługi i przychodzenie odpowiedzi.
1.2. Ocena wydajności modelu
Natomiast określenie skuteczności działania sieci neuronowych to bardzo niejednoznaczne zadanie. Jakość ich pracy zależy od tego, na jakich zbiorach danych modele były trenowane i czy zostały zoptymalizowane do pracy z określonymi danymi.
Ocenę dokładności swojego modelu zaczęliśmy od popularnego testu weryfikacyjnego LFW, ale jest on zbyt mały i prosty. Po osiągnięciu 99,8% dokładności nie ma już sensu. Istnieje dobre współzawodnictwo do oceny modeli rozpoznawania — Megaface, na którym stopniowo osiągnęliśmy 82% rank 1. Test Megaface składa się z miliona zdjęć — dystraktorów — a model musi dobrze odróżniać kilka tysięcy zdjęć celebrytów z zestawu Facescrub od dystraktorów. Jednak po oczyszczeniu testu Megaface z błędów, ustaliliśmy, że na oczyszczonej wersji osiągamy dokładność 98% rank 1 (zdjęcia celebrytów są dość specyficzne). Dlatego stworzyliśmy oddzielny test identyfikacyjny, podobny do Megaface, ale z zdjęciami „zwykłych” ludzi. Następnie poprawialiśmy dokładność rozpoznawania na naszych zestawach danych i poszliśmy znacznie dalej. Dodatkowo używamy testu jakości klasteryzacji, który składa się z kilku tysięcy zdjęć; symuluje on oznaczanie twarzy w chmurze użytkownika. W tym przypadku klastry to grupy podobnych twarzy, po jednej grupie na każdą rozpoznawaną osobę. Jakość pracy sprawdzaliśmy na rzeczywistych grupach (prawdziwych).
Oczywiście, błędy rozpoznawania zdarzają się w każdej modelu. Jednak takie sytuacje często rozwiązują się dzięki delikatnemu dostosowaniu progów do konkretnych warunków (na wszystkich konferencjach używamy tych samych progów, a np. w przypadku systemów kontroli dostępu musimy znacznie podwyższyć progi, aby zminimalizować fałszywie pozytywne wyniki). Przytłaczająca większość uczestników konferencji została poprawnie rozpoznana przez nasze fotostojaki Vision. Czasami ktoś patrzył na przycięty podgląd i mówił: „Wasz system się pomylił, to nie ja”. Wtedy otwieraliśmy pełne zdjęcie, a okazywało się, że na fotografii naprawdę znajduje się ten uczestnik, tylko że fotografowaliśmy nie jego, a kogoś innego, a osoba przypadkowo znalazła się w tle w strefie nieostrości. Co więcej, sieć neuronowa często poprawnie rozpoznaje nawet, gdy nie widać części twarzy, osoba stoi w profilu lub w ogóle w półobrocie. System może rozpoznać osobę, nawet jeśli twarz znalazła się w obszarze zniekształceń optycznych, powiedzmy, podczas robienia zdjęcia obiektywem szerokokątnym.
1.3. Przykłady testowania w trudnych sytuacjach
Poniżej przedstawiono przykłady pracy naszej sieci neuronowej. Na wejściu pojawiają się zdjęcia, które musi oznaczyć za pomocą PersonID - unikalnego identyfikatora twarzy. Jeśli dwa lub więcej obrazów będzie miało ten sam identyfikator, oznacza to, że według modeli na tych fotografiach przedstawiona jest ta sama osoba.
Od razu zaznaczamy, że podczas testowania mamy dostęp do różnych parametrów i progów modeli, które możemy dostosowywać, aby osiągnąć określony rezultat. Publiczne API jest zoptymalizowane pod kątem maksymalnej dokładności w ogólnych przypadkach użycia.
Zacznijmy od najprostszej rzeczy, rozpoznawania twarzy frontalnej.

Cóż, to było zbyt łatwe. Utrudnijmy zadanie, dodajmy brodę i garść lat.

Niektórzy powiedzą, że to też nie było zbyt trudne, ponieważ w obu przypadkach twarz jest całkowicie widoczna, algorytm ma dostęp do wielu informacji o twarzy. Dobrze, obrócimy Toma Hardy'ego w profilu. To zadanie jest znacznie trudniejsze, a na jego pomyślne rozwiązanie przy zachowaniu niskiego poziomu błędów poświęciliśmy sporo energii: dobieraliśmy zbiór danych do uczenia, przemyśleliśmy architekturę sieci neuronowej, udoskonalaliśmy funkcje strat oraz doskonaliliśmy wstępną obróbkę zdjęć.

Założymy mu nakrycie głowy:

A propos, to przykład szczególnie trudnej sytuacji, ponieważ tutaj twarz jest mocno zasłonięta, a na dolnym zdjęciu jeszcze głęboki cień, który ukrywa oczy. W prawdziwym życiu ludzie bardzo często zmieniają swój wygląd za pomocą ciemnych okularów. Zrobimy to samo z Tomem.

Dobrze, spróbujmy zebrać zdjęcia z różnych okresów życia, a tym razem przeprowadzimy eksperyment na innym aktorze. Weźmiemy znacznie trudniejszy przykład, gdy zmiany związane z wiekiem są szczególnie wyraźne. Ta sytuacja nie jest wymyślona, często zdarza się, że trzeba porównać zdjęcie w dowodzie osobistym z twarzą posiadacza. W końcu pierwsze zdjęcie do dowodu wkleja się, gdy właściciel ma 20 lat, a w wieku 45 lat osoba może bardzo się zmienić.

Uważasz, że główny specjalista od niemożliwych misji nie zmienił się z wiekiem? Myślę, że niewielu ludzi połączyłoby górne i dolne zdjęcie, tak bardzo chłopiec zmienił się przez te lata.

Sieci neuronowe mają do czynienia ze zmianami wyglądu znacznie częściej. Na przykład czasami kobiety mogą drastycznie zmienić swój wygląd za pomocą kosmetyków:

Teraz jeszcze bardziej skomplikujemy zadanie: niech na różnych zdjęciach będą zasłonięte różne części twarzy. W takich przypadkach algorytm nie może porównać próbek w całości. Jednak Vision radzi sobie dobrze w takich sytuacjach.

Swoją drogą, na zdjęciach twarzy może być bardzo wiele osób, na przykład na wspólnym ujęciu sali może pomieścić się ponad 100 osób. To trudna sytuacja dla sieci neuronowych, ponieważ wiele twarzy może być oświetlonych w różny sposób, ktoś może być poza ostrością. Jeśli jednak zdjęcie zostało wykonane w odpowiedniej rozdzielczości i jakości (nie mniej niż 75 pikseli na kwadrat pokrywający twarz), Vision będzie w stanie ją zidentyfikować i rozpoznać.

Cechą zdjęć reporterskich i obrazów z kamer monitorujących jest to, że ludzie często są rozmyci, ponieważ byli poza ostrością lub poruszali się w tym momencie:

Intensywność oświetlenia może znacznie różnić się w zależności od obrazu. Często staje się to kamieniem niezgody, gdyż wiele algorytmów ma trudności z poprawnym przetwarzaniem zbyt ciemnych i zbyt jasnych obrazów, nie wspominając już o dokładnym dopasowaniu. Przypominam, że aby osiągnąć taki rezultat, należy odpowiednio skonfigurować progi, jednak ta możliwość nie jest jeszcze dostępna publicznie. Wszystkie nasze klienty korzystają z tej samej sieci neuronowej, której progi zostały dostosowane do większości praktycznych zadań.

Niedawno wprowadziliśmy nową wersję modelu, która z wysoką dokładnością rozpoznaje twarze azjatyckie. To wcześniej było dużym problemem, które zyskało nazwę „rasizm uczenia maszynowego” (lub „sieci neuronowych”). Europejskie i amerykańskie sieci neuronowe dobrze rozpoznawały osoby o rysach europoidów, natomiast w przypadku rysów mongoloidów i negroidów było znacznie gorzej. Prawdopodobnie w Chinach sytuacja była odwrotna pod względem dokładności. Cała sprawa polega na zestawach danych używanych do szkolenia, które odzwierciedlają dominujące typy twarzy w danym kraju. Sytuacja jednak się zmienia, obecnie ten problem nie jest już tak ostry. Vision nie ma żadnych trudności z przedstawicielami różnych ras.

Rozpoznawanie twarzy to tylko jedna z wielu zastosowań naszej technologii, Vision można nauczyć rozpoznawania czegokolwiek. Na przykład, tablic rejestracyjnych, również w trudnych warunkach dla algorytmów: pod ostrymi kątami, brudnych i trudnych do odczytania numerach.

2. Praktyczne przykłady zastosowań
2.1. Kontrola fizycznego dostępu: gdy dwie osoby korzystają z jednego identyfikatora
Dzięki Vision można wdrożyć systemy śledzenia przyjścia i wyjścia pracowników. Tradycyjny system oparty na elektronicznych identyfikatorach ma oczywiste wady, na przykład dwie osoby mogą wejść z jednym identyfikatorem. Jeśli jednak system dostępu (SKUD) zostanie wzbogacony o Vision, będzie uczciwie rejestrował, kto i kiedy przyszedł/odszedł.
2.2. Rejestracja czasu pracy
Ten scenariusz użycia Vision jest ściśle związany z poprzednim. Jeśli zintegrować system kontroli dostępu z naszym serwisem rozpoznawania twarzy, będzie on w stanie nie tylko wykrywać naruszenia zasad dostępu, ale również rejestrować rzeczywiste przebywanie pracowników w budynku lub na terenie obiektu. Innymi słowy, Vision pomoże uczciwie zliczyć, kto i kiedy przyszedł do pracy, a kto ją opuścił, a także kto w ogóle się spóźnił, nawet jeśli koledzy go osłonili przed szefem.
2.3. Analiza wideo: śledzenie ludzi i bezpieczeństwo
Śledząc ludzi za pomocą Vision, można dokładnie oceniać rzeczywistą frekwencję w strefach handlowych, na dworcach, w przejściach, na ulicach i w wielu innych miejscach publicznych. Nasze śledzenie może również znacząco pomóc w kontroli dostępu, na przykład do magazynów lub innych ważnych pomieszczeń służbowych. Oczywiście, śledzenie ludzi i twarzy pomaga w rozwiązywaniu problemów związanych z bezpieczeństwem. Złapano kogoś na kradzieży w Twoim sklepie? Dodaj jego PersonID, które zwrócił Vision, do czarnej listy swojego oprogramowania do analizy wideo, a następnym razem system natychmiast ostrzeże ochronę, jeśli ten osobnik znowu się pojawi.
2.4. W handlu
Retail i różnorodne usługi są zainteresowane rozpoznawaniem kolejek. Dzięki Vision można rozpoznać, czy jest to przypadkowe zgromadzenie ludzi, czy rzeczywiście kolejka, oraz określić jej długość. Następnie system informuje odpowiedzialnych o powstaniu kolejki, aby mogli zająć się sytuacją: albo jest to napływ klientów i trzeba wezwać dodatkowych pracowników, albo ktoś zaniedbuje swoje obowiązki zawodowe.
Kolejnym interesującym zadaniem jest wydzielenie pracowników firmy w sali od klientów. Zazwyczaj system uczy się oddzielać obiekty w określonym stroju (dress code) lub z jakimś wyróżniającym znakiem (firmowy szalik, identyfikator na piersi itd.). Pomaga to dokładniej oceniać frekwencję (aby obecność pracowników nie „zwiększała” statystyki obecności ludzi w sali).
Za pomocą rozpoznawania twarzy możesz oceniać również swoją publiczność: jak wygląda lojalność odwiedzających, czyli ile osób wraca do twojego lokalu i jak często. Policzyć, ilu unikalnych odwiedzających przychodzi do ciebie w ciągu miesiąca. Aby zoptymalizować koszty zdobywania i zatrzymywania klientów, można zbadać zmiany w frekwencji w zależności od dnia tygodnia, a nawet od pory dnia.
Franczyzobiorcy i sieciowe firmy mogą zamówić ocenę jakości brandingu różnych punktów sprzedaży na podstawie zdjęć: obecność logo, szyldów, plakatów, banerów i tak dalej.
2.5. W transporcie
Innym przykładem zapewnienia bezpieczeństwa za pomocą analityki wideo jest wykrywanie porzuconych przedmiotów w halach lotniskowych lub dworcach. Vision można nauczyć rozpoznawania obiektów setek klas: mebli, toreb, walizek, parasoli, różnych rodzajów odzieży, butelek i tak dalej. Jeśli twój system analityki wideo wykrywa nieznany obiekt i rozpoznaje go za pomocą Vision, wysyła sygnał do służb bezpieczeństwa. Podobne zadanie dotyczy automatycznego wykrywania nietypowych sytuacji w miejscach publicznych: ktoś źle się czuje, ktoś pali w niedozwolonym miejscu, lub osoba upadła na tory itd. - wszystkie te wzorce system analityki wideo może rozpoznać za pomocą API Vision.
2.6. Obieg dokumentów
Kolejnym ciekawym przyszłym zastosowaniem Vision, które obecnie rozwijamy, jest rozpoznawanie dokumentów i ich automatyczne parsowanie do baz danych. Zamiast ręcznego wprowadzania (lub co gorsza, wypisywania) nieskończonych serii, numerów, dat wydania, numerów kont, danych bankowych, dat i miejsc urodzenia oraz wielu innych sformalizowanych danych, będzie można skanować dokumenty i automatycznie przesyłać je przez zabezpieczony kanał za pomocą API do chmury, gdzie system na bieżąco rozpozna te dokumenty, przetworzy je i zwróci odpowiedź z danymi w odpowiednim formacie do automatycznego wprowadzenia do bazy danych. Dziś Vision potrafi już klasyfikować dokumenty (w tym w formacie PDF) - rozróżnia paszporty, Świadectwa Emerytalne (ŚWI), Numer Identyfikacji Podatkowej (NIP), akty urodzenia, małżeństwa i inne.
Oczywiście, wszystkie te sytuacje nie mogą być przetwarzane przez sieć neuronową od ręki. W każdym przypadku dla konkretnego klienta budowany jest nowy model, uwzględniając wiele czynników, niuansów i wymagań, dobierane są zbiory danych, przeprowadzane są iteracje nauki-testowania-dostosowywania.
3. Schemat działania API
"Bramą wejściową" Vision dla użytkowników jest REST API. Może on przyjmować zdjęcia, pliki wideo i transmisje z kamer sieciowych (strumienie RTSP).
Aby skorzystać z Vision, należy w usłudze Mail.ru Cloud Solutions i uzyskać tokeny dostępu (client_id + client_secret). Uwierzytelnianie użytkowników odbywa się za pomocą protokołu OAuth. Dane wejściowe w ciałach żądań POST są wysyłane do API. W odpowiedzi klient otrzymuje od API wynik rozpoznawania w formacie JSON, który ma strukturę: zawiera informacje o znalezionych obiektach oraz ich współrzędnych.

Przykład odpowiedzi
{
"status":200,
"body":{
"objects":[
{
"status":0,
"name":"file_0"
},
{
"status":0,
"name":"file_2",
"persons":[
{
"tag":"person9"
"coord":[149,60,234,181],
"confidence":0.9999,
"awesomeness":0.45
},
{
"tag":"person10"
"coord":[159,70,224,171],
"confidence":0.9998,
"awesomeness":0.32
}
]
}
{
"status":0,
"name":"file_3",
"persons":[
{
"tag":"person11",
"coord":[157,60,232,111],
"aliases":["person12", "person13"]
"confidence":0.9998,
"awesomeness":0.32
}
]
},
{
"status":0,
"name":"file_4",
"persons":[
{
"tag":"undefined"
"coord":[147,50,222,121],
"confidence":0.9997,
"awesomeness":0.26
}
]
}
],
"aliases_changed":false
},
"htmlencoded":false,
"last_modified":0
}W odpowiedzi znajduje się ciekawy parametr awesomeness — to warunkowa "fajność" twarzy na zdjęciu, z jego pomocą wybieramy najlepsze ujęcie twarzy z sekwencji. Szkoliliśmy sieć neuronową, aby przewidywała prawdopodobieństwo, że zdjęcie zyska polubienia w mediach społecznościowych. Im lepsza jakość zdjęcia i im bardziej uśmiechnięta twarz, tym wyższe awesomeness.
W API Vision używa się pojęcia przestrzeń (space). To narzędzie do tworzenia różnych zbiorów osób. Przykłady przestrzeni to czarne i białe listy, listy gości, pracowników, klientów itp. Na każdy token w Vision można utworzyć do 10 przestrzeni, w każdej przestrzeni może być do 50 tys. PersonID, czyli do 500 tys. na jeden token. Liczba tokenów na jedno konto nie jest ograniczona.
Aktualnie API obsługuje następujące metody wykrywania i rozpoznawania:
- Recognize/Set — wykrywanie i rozpoznawanie twarzy. Automatycznie przypisuje PersonID każdemu unikalnemu obliczu, zwraca PersonID i współrzędne znalezionych twarzy.
- Delete — usunięcie konkretnego PersonID z bazy danych osób.
- Truncate — czyszczenie całej przestrzeni z PersonID, przydatne, jeśli była używana testowo i potrzebne jest zerowanie bazy do produkcji.
- Detect — wykrywanie obiektów, scen, numerów rejestracyjnych pojazdów, zabytków itp. Zwraca klasę znalezionych obiektów i ich współrzędne.
- Detect dla dokumentów — wykrywa konkretne typy dokumentów w Polsce (rozróżnia paszport, PESEL, NIP itd.).
Już wkrótce kończymy prace nad metodami do OCR, wykrywania płci, wieku i emocji, a także rozwiązaniami zadaniowymi w zakresie merchandisingu, czyli automatycznego monitorowania ekspozycji towarów w sklepach. Pełną dokumentację API znajdziesz tutaj:
4. Podsumowanie
Obecnie przez publiczne API można uzyskać dostęp do rozpoznawania twarzy na zdjęciach i filmach, wspierane jest wykrywanie różnych obiektów, numerów rejestracyjnych, zabytków, dokumentów i całych scen. Scenariuszy zastosowań jest mnóstwo. Przyjdź, przetestuj nasz serwis, postaw przed nim najtrudniejsze zadania. Pierwsze 5000 transakcji jest bezpłatnych. Może to będzie „brakujący składnik” dla Twoich projektów.
Dostęp do API można uzyskać natychmiast po rejestracji i podłączeniu. . Dla wszystkich użytkowników Habr — kod promocyjny na dodatkowe transakcje. Napisz na priv na adres e-mail, na który rejestrowałeś konto!
Źródło: habr.com
