Sieci neuronowe - Znajdź najbardziej podobne obrazy


11

Pracuję z Pythonem, scikit-learn i keras. Mam 3000 tysięcy zdjęć zegarków z przednią twarzą, takich jak: Watch_1 , Watch_2 , Watch_3 .

Chcę napisać program, który odbierze jako wejście zdjęcie prawdziwego zegarka, który może być zrobiony w mniej idealnych warunkach niż powyższe zdjęcia (inny kolor tła, ciemniejsze błyskawice itp.) I znajdę najbardziej podobne zegarki spośród 3000. Przez podobieństwo rozumiem, że jeśli podam jako zdjęcie zdjęcie okrągłego, brązowego zegarka z cienką koronką, to spodziewam się jako wyjściowych zegarków o okrągłym kształcie, ciemnego koloru i cienkiej koronki.

Jaki jest najbardziej wydajny algorytm uczenia maszynowego?

Na przykład, klikając ten link, mam na myśli dwa różne rozwiązania:

1) Używając CNN jako ekstraktora funkcji i porównaj odległości między tymi cechami dla każdej pary obrazów w odniesieniu do obrazu wejściowego.

2) Używanie dwóch CNN w syjamskiej sieci neuronowej do porównywania obrazów.

Czy te dwie opcje są najlepsze dla tego zadania, czy może zaproponowałbyś coś innego?

Czy znasz wcześniej przeszkoloną sieć neuronową (z wcześniej ustalonymi hiperparametrami) do tego zadania?

Znalazłem kilka interesujących postów na StackOverflow na ten temat, ale są one dość stare: Post_1 , Post_2 , Post_3 .


Witamy na stronie! Naucz się osadzania (polecam binarny skrót do szybkiego pobierania rzędu tysiąca bitów), a następnie przeprowadź wyszukiwanie podobieństwa.
Emre

Mam przyjemność być tutaj ... haha! ... Tak, to dobry pomysł i już przeczytałem ten artykuł ...
Wyrzutek

Odpowiedzi:


4

Nie sądzę, że architektura wysokiego poziomu jako taka jest najlepsza, ale zależy raczej od wielu czynników i szczegółów. Z tego, co wiem o pierwszym podejściu, jest obiecujące, zwłaszcza gdy zostanie rozszerzone o dodatkowe kroki, jak w TiefVision :

  1. Dodatkowa sieć obwiedni służy do odróżnienia odpowiedniej części obrazu od reszty
  2. Wektory cech nie są po prostu porównywane bezpośrednio, ale raczej służą do trenowania sieci porównawczej przy użyciu trojaków (uczenie się podobieństwa na podstawie wektorów cech i przykładów dla coraz mniej podobnych instancji).

Ta praca jest znacznie nowsza (2016/17) niż to, co napisałeś i zawiera ładny zestaw narzędzi i bardziej szczegółowy artykuł .

Dlaczego warto korzystać z trojaczków zwanych Deep Ranking?

Jak stwierdzono w komentarzach: Dlaczego należy wykorzystywać trojaczki dla podobieństwa obrazów zamiast uczyć się wektorów cech i obliczać ich odległość? Trojaczki są sposobem sformułowania pytania o podobieństwo jako problemu uczenia się zamiast uczenia się wektorów cech, które zasadniczo nie dbają o podobieństwo. Takie podejście ma szczególnie sens w przypadkach, w których ważne jest podobieństwo postrzegane przez ludzi, które może różnić się od postrzegania maszynowego.

Trojaczki działają w ten sposób: Zapewniasz 3 obrazy. Jeden do porównania, jeden podobny (blisko) i jeden nie tak podobny (daleki) obraz. To są twoje dane treningowe / testowe / walidacyjne. Uczenie sieci na tych próbkach i przewidywanie prawidłowej kolejności (klasyfikuj obrazy podobne z nie podobnych) ogólnie pozwala sieci dowiedzieć się, jak zamawiać obrazy na podstawie ich podobieństwa.

Podsumowując, to podejście jest stosunkowo złożone. Może to być nadinżynieria, ale poprosiłeś także o najlepszy sposób, aby to zrobić, a Deep Ranking osiąga bardzo wysokie wartości precyzji.


Dziękuję za odpowiedź. To jest interesujące (przegłosowałem to). Pomysł na trojaczkę jest dobry, chociaż nie jestem do końca pewien, dlaczego używanie trojaczków obrazów jest z konieczności lepsze niż stosowanie par obrazów do mojego zadania. Jeśli chcesz, możesz wyjaśnić to bardziej w swoim poście. Zobaczę też TiefVision.
Wyrzutek

@Universalis dzięki za podpowiedź (i głosowanie). Zaktualizowałem swoją odpowiedź, dodając więcej szczegółów na temat trojaczków i uzasadnienia. Artykuł jest również bardzo dobrze napisany, więc spójrz na wszystkie szczegóły. Jednak od czasu pojawienia się TiefVision i DeepRanking mogą istnieć nowe wymyślne sposoby.
Gegenwind

Raz jeszcze dziękuję za twoją odpowiedź. Tak, rzuciłem okiem na papier i było całkiem jasne, co dodałeś do swojej odpowiedzi. W tym sensie zrozumiałem już, na co dodałeś swoją odpowiedź, a moje pytanie było wyraźniejsze: dlaczego nie użyć 2 obrazów (pary) zamiast 3 obrazów (trojaczki) do uszeregowania zdjęć według ich podobieństwa? Jaka jest dodatkowa korzyść z używania trojaczków zamiast par?
Wyrzutek

Hmm, może źle zrozumiałem twoje podejście. Trójka zapewnia informacje porównawcze, że obraz 1 jest bliższy obrazowi 2 niż obrazowi 3. Mając tylko 2 obrazy i stwierdzając, że „te 2 są podobne”, brakuje współczynnika porównawczego „podobnego pod jakim względem”, ponieważ w tym podejściu zakładasz, że zwykła odległość wektora cech nie mówi ci wystarczająco dużo. innymi słowy: uczysz się podobieństwa według zamówienia i brakuje ci tego bez posiadania co najmniej 2 pozycji na zamówienie.
Gegenwind

Jeszcze raz dziękuję za odpowiedź. Jednak nawet teraz i po dokładniejszym przeczytaniu artykułu nie jest dla mnie jasne, dlaczego koniecznie potrzebujesz trojaczków, a nie par obrazków do tego nienadzorowanego podejścia. Używając etykiet, jasne jest, że używając trojaczków uzyskasz pełny ranking podobieństwa obrazów, których nie można uzyskać parami. Ale w tym (w pewnym sensie) podejściu bez nadzoru, które proponujesz, dlaczego nie porównać wartości funkcji straty dla każdej pary obrazów (zawsze jeden obraz pary jest obrazem wejściowym), aby znaleźć np. 5 najbardziej podobnych do obraz wejściowy?
Wyrzutek

2

Wybrałbym klasyfikator, taki jak VGG-16, który działa dobrze na klasach imagenet. Następnie przeprowadź przez nią obrazy zegarka. Na pewno można oczekiwać, że wyjście będzie w większości „obserwowane” z dużym prawdopodobieństwem.

Otrzymasz jednak dodatkowe funkcje: poziom aktywacji wszystkich innych kategorii. To daje wektor tysiąca wartości od 0 do 1.

Możesz także wyodrębnić aktywację w różnych punktach sieci. Następnie podobieństwo tych aktywacji i wyników powinno być podobne między dwoma przypadkami, tylko jeśli obrazy są podobne.


Dziękujemy za odpowiedź (głosowanie). Tak, miałem to na myśli i w pewnym sensie jest to związane z pierwszą opcją, którą podałem na swoim stanowisku. Zastanawiałem się więc nad użyciem innych detektorów, takich jak SURF ... Zobaczę, czy są one wystarczająco skuteczne ...
Outcast

2

Najpierw skupiłbym się na powiększaniu danych. Ponieważ twoje zdjęcia mają białe tło, masz je trochę łatwiej. Zmień białe tło w przezroczyste tło, zmniejsz obraz, obróć go i umieść w tle podobnym do danych docelowych.

Zrób to kilka razy z inną kombinacją i przypisz etykietę do każdego zegarka. Następnie zasugerowałbym, aby do klasyfikacji użyć regularnej splotowej sieci neuronowej. Każda etykieta będzie miała wynik, wybierz tę z najwyższą pewnością i ta powinna być najbardziej podobna .

Załóżmy na przykład, że uruchamiasz klasyfikator z obrazem i otrzymujesz ten wynik:

Watch1: 0.51

Watch2: 0.30

Watch3: 0.25

CNN mówi, że ma 51% pewności, że Watch1 jest zegarkiem na obrazie wejściowym. Ale prawdą jest również to, że wydaje się, że wygląda bardziej podobnie, Watch2 byłby następny bardziej podobny i tak dalej.

Jeśli nie uzyskasz dobrych wyników, zrób to, co zwykle. Eksperymentuj z parametrami i / lub dodaj więcej warstw. Spróbuj dowiedzieć się, gdzie zawodzi. Po uzyskaniu tego wglądu możesz użyć go do wybrania bardziej wyspecjalizowanego typu sieci splotowej dla konkretnego problemu. Poszukiwanie tego bez wcześniejszej wiedzy o tym, jak by to się odbyło, nie jest właściwym podejściem. Sugerowałbym, aby zacząć od podstawowego modelu splotowego, a następnie zacząć od tego.


1
Dziękujemy za odpowiedź (głosowanie). Tak, miałem już na myśli powiększanie danych. Jednak twoja odpowiedź jest dość niejasna. Co rozumiesz przez „mieć etykietę dla każdego zegarka”? Czy masz na myśli oznaczenie każdego zegarka indywidualnie, czy też oznaczenie ich jako pary z innym, w zależności od tego, czy są podobne, czy nie? (Jeśli tak, to proszę wyjaśnić, dlaczego jest to skuteczne, proszę)
Outcast

Jest to pierwsza sugestia, zakładałem, że masz już wygodny sposób na oznaczenie ich wszystkich. Jest to w zasadzie najbardziej podstawowe rozwiązanie, więc nie będzie wydajne. Moja sugestia była taka, że ​​podstawowy model może być w stanie dostarczyć ci wystarczających informacji, abyś mógł ścigać bardziej wyspecjalizowany model. Patrząc na głęboki ranking wydaje się bardzo obiecujące, jak powiedział @Gegenwind. Zaktualizowałem moją odpowiedź, aby była bardziej przejrzysta.
zimio

Hm, tak teraz jest to bardziej jasne, co masz na myśli .... Jest to z pewnością dobra ogólna sugestia: zacząć od podstaw i przejść krok po kroku do bardziej skomplikowanych rzeczy ... Dzięki w każdym razie ...
Wyrzutek
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.