2016-03-27 20 views
7

Potrzebuję zaimplementować proste wyszukiwanie obrazów w mojej aplikacji przy użyciu TensorFlow. Wymagania są takie:Budowanie prostego wyszukiwania obrazów za pomocą TensorFlow

  1. Zbiór danych zawiera około miliona zdjęć, wszystkie tej samej wielkości, z których każda zawiera jeden unikalny obiekt i tylko tego obiektu.
  2. Parametr wyszukiwania to zdjęcie wykonane kamerą telefoniczną z jakiegoś obiektu, który potencjalnie znajduje się w zbiorze danych.

Udało mi się wyodrębnić obraz z obrazu z kamery i wyprostować go do prostokątnej formy, w wyniku czego indeksowanie obrazów w trybie wyszukiwania wstecznego, takie jak TinEye, było w stanie znaleźć dopasowanie.

Teraz chcę odtworzyć tego indeksu przy użyciu TensorFlow, aby utworzyć model na podstawie mojego zestawu danych (spraw, aby nazwa pliku każdego obrazu była unikatowym indeksem).

Czy ktokolwiek może wskazać mi tutoriale/kod, który wyjaśniłby, jak osiągnąć takie rzeczy bez zbytniego zanurzania w terminologii widzenia komputerowego?

Bardzo doceniane!

+0

Dlaczego warto używać TensorFlow? Podczas gdy głębokie uczenie się jest świetnym narzędziem dla wielu problemów z widzeniem komputera, prawdopodobnie nie jest to właściwe rozwiązanie do wyszukiwania obrazów. –

+0

Jestem otwarty na sugestie :) – reflog

+0

Standardowe podejście to: wyodrębnianie funkcji lokalnych (SIFT lub SIFT) -> oblicz wizualne słowa -> wyszukiwanie obrazów o podobnych wizualnych słowach (podobne do wyszukiwania dokumentów). opcjonalnie sprawdź dopasowanie za pomocą homografii (lub innego modelu geometrycznego). Możesz szukać w Internecie szukania obrazka worka słów. –

Odpowiedz

8

The Wikipedia article on TinEye mówi, że Perceptual Hashing przyniesie wyniki podobne do TinEye. Podają this detailed description of the algorithm. Ale TinEye refuses to comment.


Największym problemem z podejściem Postrzegana mieszaja jest to, że podczas, gdy jest skuteczny do identyfikacji samego obrazu (z zastrzeżeniem zniekształca, kontrast zmiany itd), to nie jest wielki w identyfikacji zupełnie inny obraz z ten sam przedmiot (np. przód samochodu a strona samochodu).

TensorFlow ma doskonałe wsparcie dla głębokich sieci neuronowych, które mogą dać lepsze wyniki. Oto opis wysokiego poziomu tego, jak można użyć głębokiej sieci neuronowej w TensorFlow, aby rozwiązać ten problem:

Zacznij od wcześniej wyszkolonego NN (takiego jak GoogLeNet) lub samodzielnie trenuj na zbiorze danych, takim jak ImageNet. Teraz mamy nowe zdjęcie, które próbujemy zidentyfikować. Nakarm go w NN. Popatrz na aktywacje dość głębokiej warstwy w NN. Ten wektor aktywacji jest jak "odcisk palca" dla obrazu. Znajdź zdjęcie w bazie danych z najbliższym odciskiem palca. Jeśli jest wystarczająco blisko, to prawdopodobnie ten sam obiekt.

Intuicją tego podejścia jest to, że w odróżnieniu od Hetingu Percepcyjnego, NN buduje reprezentację obrazu na wysokim poziomie, w tym identyfikuje krawędzie, kształty i ważne kolory. Na przykład odcisk palca jabłka może zawierać informacje na temat jego okrągłego kształtu, czerwonego koloru, a nawet małego pnia.


Można również spróbować czegoś podobnego this 2012 paper on image retrieval który wykorzystuje mnóstwo przebrane funkcji, takich jak SIFT, regionalnych chwilach kolorów i fragmentów konturu obiektu. To prawdopodobnie dużo więcej pracy i nie jest to najlepsze z TensorFlow.


UPDATE

OP dostarczył przykładową parę zdjęć ze swojej aplikacji:

Image in the database Image from the user. Should match something in the database.

Oto wyniki stosując the demo on the pHash.org website na tej pary podobnych zdjęć jak również na parze zupełnie różnych obrazów.

Porównując dwóch obrazów przedstawionych przez OP:

rzodkiewka (promieniowe hash): pHash determined your images are not similar with PCC = 0.518013

DCT mieszania: pHash determined your images are not similar with hamming distance = 32.000000.

Marr/Mexican Hat fali elementarnej: pHash determined your images are not similar with normalized hamming distance = 0.480903.

Porównywanie jednego z jego obrazów z losowym obrazem z mojej maszyny:

RZODKWI (hash promieniowy): pHash determined your images are not similar with PCC = 0.690619.

DCT hash: pHash determined your images are not similar with hamming distance = 27.000000.

Marr/meksykański kapelusz falki: pHash determined your images are not similar with normalized hamming distance = 0.519097.

Wnioski

Musimy przetestować więcej obrazów do Naprawdę wiem. Ale jak dotąd nie wydaje się, by pHash działało bardzo dobrze. Przy domyślnych progach nie uważa podobnych obrazów za podobne. I dla jednego algorytmu, faktycznie uważa on całkowicie losowy obraz za bardziej podobny.

+1

Zastanawiam się, jakiego używają Perceptual Hash, ponieważ próbowałem projektu open source o pHash i dało okropne wyniki ... – reflog

+0

Czy możesz udostępnić link, kod lub więcej szczegółów o tym, co zbudowałeś i jakie masz rezultaty? – rafaelcosman

+1

Tutaj: http://imgur.com/a/be89U pierwsze zdjęcie jest tym w bazie danych, drugie jest tym, którego szukam – reflog

0

https://github.com/wuzhenyusjtu/VisualSearchServer Jest to prosta implementacja podobnego wyszukiwania obrazów przy użyciu modeli TensorFlow i InceptionV3. Kod implementuje dwie metody: serwer, który obsługuje wyszukiwanie obrazów, oraz prosty indeksator, który wykonuje dopasowanie Najbliższego sąsiada na podstawie wyodrębnionych funkcji pool3. enter image description here

Powiązane problemy