SaraVision
Image recognition
Saturday, 20 March 2021 17:18 Written by

Czy aby rozpoznać nowy przedmiot musisz go oglądać 1000 razy? Czy jak obejrzysz go kolejne 100000 razy będziesz go lepiej rozpoznawał? Myślę, że nie, a tak właśnie działają systemy rozpoznawania obrazu oparte na kaskadowym klasyfikatorze Haara czy sieciach neuronowych.

SaraVision to projekt rozpoznawania obrazu koncepcyjnie zupełnie odmienny od podejścia, w którym cały świat pokłada największe nadzieje, czyli od coraz lepszych sieci neuronowych uczących się na coraz większych i bardziej dostępnych bazach danych. My zakładamy, że wystarczy niejednokrotnie tylko jedno lub kilka spojrzeń na przedmiot aby go zapamiętać i w przyszłości rozpoznać. Wszystko zaczęło się od potrzeby, aby w jednym z naszych podprojektów nazwanym roboczo SaraEye, podnoszącym dotychczasowych asystentów Google i Alexa do poziomu 2.0 dodać zmysł wzroku i trochę inteligencji.

Na początku, aby sprawdzić pewne podstawowe założenia napisaliśmy prosty program rozpoznający zestaw znaków MNIST co opisuję na naszym blogu w lekko prowokacyjnym artykule "Bezsensowność wykorzystywania głębokiego uczenia, czy sieci neuronowych do rozpoznawania obrazu". Już tam udało się stworzyć program bardzo uniwersalny, rozpoznający znaki niezależnie od ich wielkości, pochylenia czy rodzaju czcionki, ale to była tylko programistyczna "piaskownica".

Kolejnym etapem było stworzenie czegoś bardziej uniwersalnego, pozwalającego na rozpoznawanie dowolnych przedmiotów, a na początek pozwalającego na szybkie wykrywaniu podstawowych figur geometrycznych i sprawdzenie też pewnej teorii, że nasz mózg świetnie widzi to czego nie widać, dosłownie dorysowując w wyobraźni brakujące elementy (patrz: percepcja wzrokowa i gestaltizm, teoria reifikacji), i że nasz system zadziała podobnie:

  

 

Udało się, działa podobnie, co widać na tym amatorskim filmie poniżej, a działa tak, że nie musi być widać całego kwadratu aby wykryć, że ten kwadrat tam jest (patrz film poniżej).
Może się wydawać, że wykrywanie prostych figur jest łatwe i każdy programista to zrobi. Można użyć do tego kilku "gotowców", można też wszystko zalgorytmizować, ale nam nie chodzi o pisanie algorytmu na każdy kształt, ale napisanie jednego na wszystkie kształty, a co najważniejsze nie chcemy też systemu uczyć tysiącem obrazów.

 

 

Kolejnym krokiem było sprawdzenie systemu, czy poradzi sobie z wykrywaniem twarzy na obrazie wideo z kamery. Co ważne system ma za zadanie wykryć twarz bardzo szybko, twarz może być pochylona w lewo lub w prawo, lekko bokiem, bokiem, źle oświetlona, widoczna w kolorze lub promieniach IR - udało się. System, mimo że jest w trakcie budowy poradził sobie prawie 20 x szybciej od standardowych systemów wykrywania twarzy, a co najważniejsze radził sobie tam gdzie inne systemu nie radziły sobie praktycznie wcale (np. twarz oświetlona z jednej strony przez słońce z głową lekko pochyloną w bok):


(film zrobiony na mikrokomputerze Raspberry Pi 4, użycie jednego rdzenia CPU na poziomie 20-30%, obraz analizowany w czasie rzeczywistym dla utrudnienia z ruchomej kamery typu pan tilt, która śledzi twarz użytkownika)


Jesteśmy na początku drogi, ale rezultaty jakie otrzymujemy wydają się rewelacyjne, a już myślimy o systemie rozpoznawania przestrzeni trójwymiarowej opartym o naszą metodę.

Chociaż w tej chwili myślimy o zastosowaniu naszej metody w naszym innym podprojekcie SaraEye, możliwości tego systemu są ogromne, a główne to:

1. Nie uczymy systemu tysiącami próbek, wystarczy kilka, kilkanaście.
2. Nie jest ważny kąt, pod którym analizujemy rozpoznawany obraz.
3. Do 20 x większa szybkość rozpoznawania obiektów.
4. Minimalna moc komputera (mikrokomputer Raspberry Pi może wykryć twarz w 10ms, a nie w 500 ms)
5. Nie jest potrzebne połączenie z internetem.

Nie neguję żadnych metod rozpoznawania obrazu opartych na sieciach neuronowych, olbrzymiego postępu tych metod szczególnie w ostatnich latach. Uważam, że narzędzia typu tensorflow są genialne, ale uważam też, że można wiele rzeczy zrobić inaczej, że nie wszystko należy wpychać do sieci neuronowych, a jeżeli już chcemy je wykorzystać dajmy im takie dane, na których sieci mają szansę działać najlepiej.