Jak najlepiej zgadnąć, jak działa Wyszukiwarka grafiki Google? Mogę przesłać zdjęcie i wyszukiwać podobne obrazy. Jakiego algorytmu używa do identyfikacji podobnych obrazów?
Jak najlepiej zgadnąć, jak działa Wyszukiwarka grafiki Google? Mogę przesłać zdjęcie i wyszukiwać podobne obrazy. Jakiego algorytmu używa do identyfikacji podobnych obrazów?
Odpowiedzi:
Nie wiem, jakiego algorytmu używa Google. Ale skoro chciałeś zgadnąć, pozwól, że przedstawię kilka pomysłów na to, jak można zbudować podobny system .
Całe pole zajmujące się wyszukiwaniem-obraz-baza-po-obrazku nosi nazwę Content Based Image Retrieval (CBIR) . Chodzi o to, aby w jakiś sposób zbudować reprezentację obrazu (niekoniecznie zrozumiałą dla ludzi), która zawiera informacje o treści obrazu .
Istnieją dwa podstawowe podejścia:
Lokalne podejście na niskim poziomie jest bardzo dobrze zbadane. Najlepsze obecne podejście wyodrębnia funkcje lokalne (istnieje tu wybór algorytmu wyodrębniania funkcji) i używa ich lokalnych deskryptorów (ponownie wybór deskryptorów) do porównywania obrazów.
W nowszych pracach lokalne deskryptory są najpierw grupowane, a następnie klastry traktowane jako słowa wizualne - technika jest wówczas bardzo podobna do wyszukiwania dokumentów Google, ale używa słów wizualnych zamiast słów literowych.
Możesz myśleć o słowach wizualnych jako odpowiednikach wyrazów w języku: na przykład słowa: praca, praca, przepracowane należą do tego samego słowa root.
Jedną z wad tego rodzaju metod jest to, że zwykle działają one słabo na obrazach o niskiej teksturze.
Dałem już i widziałem wiele odpowiedzi szczegółowo opisujących te podejścia, więc podam tylko linki do tych odpowiedzi:
Podejścia semantyczne są zazwyczaj oparte na hierarchicznych reprezentacjach całego obrazu. Te podejścia nie zostały jeszcze udoskonalone, szczególnie w przypadku ogólnych typów obrazów. Odnoszenie sukcesów w stosowaniu tego rodzaju technik do określonych domen obrazów.
Ponieważ obecnie prowadzę badania nad tymi podejściami, nie mogę wyciągać żadnych wniosków. To powiedziawszy, wyjaśniłem w tej odpowiedzi ogólny pogląd na te techniki .
Jeszcze raz, krótko: ogólną ideą jest przedstawienie obrazu ze strukturą w kształcie drzewa, gdzie liście zawierają szczegóły obrazu, a obiekty można znaleźć w węzłach bliżej korzenia takich drzew. Następnie w jakiś sposób porównujesz poddrzewa, aby zidentyfikować obiekty zawarte na różnych obrazach.
Oto kilka odniesień do różnych reprezentacji drzew. Nie przeczytałem ich wszystkich, a niektóre z nich używają tego rodzaju reprezentacji do segmentacji zamiast CBIR, ale nadal są:
Oprócz odpowiedzi na penelope istnieją dwa podejścia: percepcyjne mieszanie i model worka słów, których podstawową funkcjonalność można łatwo zaimplementować i dlatego można z nimi grać lub uczyć się przed wyruszeniem na bardziej zaawansowane terytorium.
Mieszanie percepcyjne
Algorytmy haszowania percepcyjnego mają na celu zbudowanie skrótu, który w przeciwieństwie do skrótu kryptograficznego da podobne lub prawie podobne wartości skrótu dla identycznych obrazów, które zostały nieco zniekształcone, na przykład przez skalowanie lub kompresję JPEG. Służą one pożytecznemu celowi do wykrywania w pobliżu duplikatów w kolekcji obrazów.
W najbardziej podstawowej formie możesz to zaimplementować w następujący sposób:
Konwertuj obraz na skalę szarości
Uczyń swój obraz zerowym
Wynikiem jest sprężysty, 64-bitowy skrót, ponieważ jest on oparty na komponentach obrazu o niskiej częstotliwości. Wariantem tego tematu byłoby podzielenie każdego obrazu na 64 podbloki i porównanie globalnej średniej obrazu z lokalną średnią podbloku i wypisanie odpowiednio 1 lub 0.
Hashowanie percepcyjne jest implementowane na przykład przez phash
Model worka słów
Model worka słów ma na celu semantyczną identyfikację obrazu, np. Wszystkich obrazów z psami. Robi to, używając pewnych poprawek graficznych w tym samym duchu, w którym klasyfikuje się dokument tekstowy na podstawie występowania określonych słów. Można kategoryzować słowa, powiedzieć „pies” i „psy” i przechowywać je jako identyfikator w odwróconym pliku, w którym kategoria „pies” wskazuje teraz na wszystkie dokumenty zawierające albo „pies”, albo „psy”.
W najprostszej formie można to zrobić z obrazami w następujący sposób:
Masz teraz ogromną kolekcję deskryptorów SIFT. Problem polega na tym, że nawet z prawie identycznych obrazów, będzie pewne niedopasowanie między deskryptorami. Chcesz zgrupować identyczne, mniej więcej tak, jakby traktować niektóre słowa jako „pies” i „psy” jako identyczne i musisz zrekompensować błędy. Tutaj właśnie pojawia się klastrowanie.
Zapytanie graficzne, np. Znajdź mi podobne obrazy do zapytania-obrazu, jest następnie rozwiązywane w następujący sposób:
Innym interesującym podejściem, które wydaje się być zaniedbywane w powyższych odpowiedziach, są Deep Convolutional Neural Networks. Wygląda na to, że Google używa go teraz do wyszukiwania obrazów i usługi tłumaczenia . CNN są niezwykle potężne w zadaniach poznawczych, takich jak znajdowanie podobieństwa. Wydaje się, że CNN przeprowadza podobną procedurę Bag-of-worlds, która jest osadzona w jej warstwach sieciowych. Minusem tych technik jest niemożność oduczenia się i wymagania ogromnego zestawu danych do szkolenia oraz oczywiście duże koszty obliczeniowe na etapie szkolenia.
Sugerowany artykuł na ten temat:
i implementacja pobierania obrazów w głębokim uczeniu typu open source (późniejszy artykuł): https://github.com/paucarre/tiefvision