Jak sieć neuronowa rozpoznaje obrazy?


25

Próbuję dowiedzieć się, jak sieć neuronowa działa na rozpoznawanie obrazów. Widziałem kilka przykładów i stałem się jeszcze bardziej zdezorientowany. W przykładzie rozpoznawania liter obrazu 20 x 20 wartości każdego piksela stają się warstwą wejściową. A więc 400 neuronów. Następnie ukryta warstwa neuronów i 26 neuronów wyjściowych. Potem wytrenuj sieć, a wtedy zadziała, a nie idealnie.

Tym, co wprawiło mnie w zakłopotanie w sieci neuronowej, jest to, że dowiaduje się o tym, co jest na obrazie. Nie trzeba wykonywać progów, segmentacji ani pomiarów, w jakiś sposób sieć uczy się porównywać obrazy i rozpoznawać. To jest teraz dla mnie jak magia. Gdzie zacząć uczyć się sieci neuronowej?


1
Jeśli dobrze rozumiem, sieć neuronowa jest po prostu wielowymiarową powierzchnią w jakiejś abstrakcyjnej przestrzeni, której lokalne skrajności prowadzą do możliwych wyborów. Nauczanie sieci neuronowej to po prostu dostosowanie tej abstrakcyjnej powierzchni do jej zadania. To moje noobistyczne zrozumienie.

Więc chcesz wyjaśnienia LUB zasoby, aby rozpocząć pracę z NN? Byłoby miło to wyjaśnić.

2
Istnieje (obecnie) ładny darmowy kurs na Coursera, który jest poświęcony twojemu pytaniu. coursera.org/course/neuralnets
pat

Klasa Coursera NN wygląda na zaawansowaną, ale nie tak dobrą jako wprowadzenie. Andrew Ng ma kilka łagodniejszych wstępów, które można znaleźć na przykład na Youtube.
Douglas Zare

W rzeczywistości kurs Coursera jest coraz bardziej zaawansowany, ale na pewno się buduje i całkiem dobrze odpowiedziałby na pytanie PO. Zawiera również wiele przykładów rozpoznawania cyfr.
Chris A.

Odpowiedzi:


24

Dogłębny wgląd w to, jak sieć neuronowa może nauczyć się klasyfikować coś tak złożonego jak dane obrazowe, podając tylko przykłady i prawidłowe odpowiedzi, przyszedł do mnie podczas studiowania pracy profesora Kunihiko Fukushimy na temat neokognitionu w latach osiemdziesiątych. Zamiast po prostu pokazywać swojej sieci kilka obrazów i korzystać z propagacji wstecznej, aby sam mógł sobie wyobrazić różne rzeczy, przyjął inne podejście i trenował swoją sieć warstwa po warstwie, a nawet węzeł po węźle. Przeanalizował wydajność i działanie każdego węzła sieci i celowo zmodyfikował te części, aby reagowały w zamierzony sposób.

Na przykład wiedział, że chce, aby sieć była w stanie rozpoznawać linie, dlatego wytrenował określone warstwy i węzły, aby rozpoznawały trzy pikselowe linie poziome, 3 piksele linie pionowe i określone warianty linii ukośnych pod każdym kątem. W ten sposób wiedział dokładnie, na które części sieci można liczyć, że strzelą, gdy będą istnieć pożądane wzorce. Następnie, ponieważ każda warstwa jest silnie połączona, cały neokognitron jako całość może zidentyfikować każdą z części kompozytowych obecnych na obrazie, bez względu na to, gdzie fizycznie istniały. Kiedy więc gdzieś na obrazie istniał określony segment linii, zawsze pojawiałby się określony węzeł, który by się uruchamiał.

Utrzymując ten obraz zawsze obecny, rozważ regresję liniową, która polega na znalezieniu formuły (lub linii) na podstawie sumy błędu kwadratu, który najbardziej dokładnie przechodzi przez twoje dane, co jest łatwe do zrozumienia. Aby znaleźć zakrzywione „linie”, możemy wykonać tę samą sumę obliczeń produktów, tyle że teraz dodajemy kilka parametrów x ^ 2 lub x ^ 3 lub nawet wielomianów wyższego rzędu. Teraz masz klasyfikator regresji logistycznej. Ten klasyfikator może znaleźć relacje, które nie mają charakteru liniowego. W rzeczywistości regresja logistyczna może wyrażać dowolnie złożone relacje, ale nadal musisz ręcznie wybrać prawidłową liczbę funkcji zasilania, aby dobrze wykonać prognozowanie danych.

Jednym ze sposobów myślenia o sieci neuronowej jest rozważenie ostatniej warstwy jako klasyfikatora regresji logistycznej , a następnie ukryte warstwy można uznać za automatyczne „selektory cech” . Eliminuje to konieczność ręcznego wybierania prawidłowej liczby i mocy funkcji wejściowych. W ten sposób NN staje się automatycznym selektorem cech mocy i może znaleźć dowolną zależność liniową lub nieliniową lub służyć jako klasyfikator dowolnie złożonych zestawów ** (zakłada to tylko, że istnieje wystarczająca liczba ukrytych warstw i połączeń, które reprezentują złożoność model, którego musi się nauczyć). W końcu oczekuje się, że dobrze działająca NN nauczy się nie tylko „relacji” między danymi wejściowymi i wyjściowymi, ale zamiast tego dążymy do abstrakcji lub modelu, którydobrze uogólnia .

Z reguły sieć neuronowa nie może nauczyć się niczego, czego rozsądnie inteligentny człowiek nie mógłby teoretycznie nauczyć, biorąc pod uwagę wystarczająco dużo czasu z tych samych danych,

  • może być w stanie nauczyć się czegoś, czego nikt jeszcze nie odkrył
  • w przypadku dużych problemów bank komputerów przetwarzających sieci neuronowe może znaleźć naprawdę dobre rozwiązania znacznie szybciej niż zespół ludzi (przy znacznie niższych kosztach)
  • po przeszkoleniu NN wygenerują zgodne wyniki z danymi wejściowymi, na których zostali przeszkoleni i powinny dobrze się uogólniać, jeśli zostaną odpowiednio poprawione
  • NN nigdy się nie nudzi ani nie rozprasza

1
+1 za akapit o tym, jak ostatnia warstwa wykonuje regresję logistyczną nad wyborem funkcji ukrytej warstwy. To dobry sposób na myślenie o NN.
jlund3

Dzięki, ale powinienem wyjaśnić, że nie mówię dokładnie, że ostatnia warstwa każdego ANN jest w rzeczywistości warstwą regresji logistycznej, ale tylko, że jest to jedna z możliwych konfiguracji, która może rozwiązać wiele problemów. Z powodu przeważnie losowego sposobu, w jaki zazwyczaj trenujemy ANN, każda wynikowa regresja jest rozłożona na wiele węzłów i warstw w bardzo losowy sposób. Można szkolić podsieci, aby reagowały w określony sposób, a następnie pompować ich moc wyjściową do warstwy regresji, aby ręcznie wytwarzać wyspecjalizowane sieci dla określonych problemów. Dzięki temu ANN jest bardzo wydajny pod względem pamięci i szybkości.
mcstar,

1
Ta odpowiedź wciąż zyskuje na popularności, więc pomyślałem, że mam już ponad 5 lat i rozważam tylko w pełni połączone sieci przesyłania dalej. Mimo że koncepcyjne spostrzeżenia tutaj są nadal aktualne, nie dają one praktykowi wystarczającej wiedzy, aby zrozumieć głębokie koncepcje NN, które stały się standardem w ostatniej dekadzie. CNN (sieć neuronowa splotu) jest bardzo ważną nowoczesną adaptacją, która daje głębokim sieciom super moce, pozwalając im lokalizować krawędzie, kontrast, ostrość, przestrzenie kolorów, cienie i więcej, a także wykorzystywać je do określania kontekstu cech niskiego poziomu.
mcstar

10

Być może słyszeliście, że sieci neuronowe są „ uniwersalnymi aproksymatorami funkcji ”. Zasadniczo twierdzenie Cybenko mówi, że dla każdej funkcji odwzorowującej rzeczywiste na rzeczywiste, można to przybliżyć za pomocą sieci neuronowej z funkcjami aktywacji sigmoidalnej. W rzeczywistości okazuje się, że sieci neuronowe pozwalają obliczyć dowolną funkcję obliczalną przez maszynę Turinga (tzn. Wszystko, co można napisać do obliczenia algorytmu). Niestety, dowody te mówią tylko, że dla niektórych skończonych konfiguracji neuronów i ciężarów można przybliżyć dowolną funkcję.

Teoria jest ładna i elegancka, ale twoje pytanie wydaje się być bardziej zgodne z tym, jak faktycznie zakodować obliczenia niektórych funkcji w zestawie neuronów i ciężarów. Aby to zilustrować, rozważ prosty przykład - ekskluzywny-lub. XOR pobiera dwa wejścia, przekazuje je. Gdy jedno i tylko jedno z wejść jest aktywowane, wówczas aktywowany jest węzeł wyjściowy. Gdy oba wejścia nie zostaną aktywowane, węzeł wyjściowy nie zostanie aktywowany.

Trójwarstwowa sieć Perceptron zdolna do obliczania XOR zapożyczona z wikipedii.

Zauważ, że trzy ukryte węzły robią różne rzeczy. Najbardziej lewe i prawe najbardziej węzły po prostu przechodzą przez odpowiednie aktywacje węzłów wejściowych. Środkowy neuron przyjmuje dwa wejścia i jakoś je neguje, jeśli oba są włączone. To sprytne łączenie i ponowne łączenie danych wejściowych polega zasadniczo na pracy w sieci neuronowej.

Oczywiście w przypadku bardziej złożonych funkcji łączenie i rekombinowanie musi odbywać się w bardziej sprytny i skomplikowany sposób, ale w istocie dzieje się to na niskim poziomie. Szaloną rzeczą jest to, że to naprawdę wszystko, czego potrzebujesz do obliczenia dowolnej funkcji obliczeniowej! Z drugiej strony maszyny Turinga również są zwodniczo proste ...

Problem polega na tym, że tak naprawdę nie mamy sposobu na magiczne wygenerowanie sieci neuronowej, która oblicza jakąkolwiek dowolną funkcję. Dowody mówią nam tylko, że istnieje sieć, która mogłaby to zrobić. Kiedy trenujemy nasze sieci neuronowe, po prostu staramy się znaleźć sieć, która jest całkiem blisko.

W kontekście rozpoznawania obrazu można wyobrazić sobie wzorce kodowania w sieci. Na przykład, aby rozpoznać liczbę „1”, możesz wyobrazić sobie ukryte węzły, które oczekują, że kolumna pikseli zostanie w większości lub w całości aktywowana, a sąsiednie piksele będą wyłączone. Ten ukryty węzeł mógłby być całkiem dobry w rozpoznawaniu linii prostej w tej konkretnej kolumnie. Złóż ich wystarczająco dużo, a wkrótce masz grupę węzłów, które robią to w wystarczającej liczbie miejsc twojego obrazu, że jeśli pokażę sieć jeden, wystarczająca liczba ukrytych węzłów w linii prostej zostanie aktywowana, wskazując „1”. Problemem jest oczywiście uogólnienie sieci, aby mogła ona rozpoznać zróżnicowany zestaw danych wejściowych.

Mamy nadzieję, że pomoże to zrozumieć mniej więcej koncepcje wykonywania obliczeń przez sieć neuronową. Dotarłeś jednak do punktu, który jest dość ważny w przypadku sieci neuronowych: ogólnie trudno jest w najlepszym razie zrozumieć, dlaczego sieć wypluwa określone dane wyjściowe, zwłaszcza gdy weźmie się pod uwagę, że w przypadku czegoś takiego jak rozpoznawanie obrazu, sieci są ogólnie wystarczająco duże, aby ludzie mieli trudności ze zrozumieniem każdej z ruchomych części maszyny. Dalsza komplikacja polega na tym, że generalnie większość sieci neuronowych nie ma w rzeczywistości pojedynczego ukrytego węzła dla każdej małej funkcji, którą sieć może dowiedzieć się o danych. Zamiast tego wykrycie czegoś w rodzaju linii prostej w celu sklasyfikowania liczby „1” odbyłoby się w sposób niecentralny na wielu ukrytych węzłach. Inne algorytmy,

Jeśli szukasz więcej lektur, zdecydowanie polecam przeczytanie tego samouczka w ai ćpunu. Przeprowadza Cię przez podstawy działania sieci neuronowej, a nawet podaje prosty przykład kodu zachęcający sieci neuronowe do poprowadzenia czołgu do celu. Samouczek nie obejmuje jednak propagacji wstecznej, która jest zdecydowanie najczęstszym sposobem szkolenia sieci neuronowych, i zamiast tego wykorzystuje prosty algorytm genetyczny. Kiedy zacznie mówić o genetyki, myślę, że możesz przestać czytać ...


Dzięki za cały czas i wysiłki, aby zebrać wszystkie te słowa i myśli. Szczególnie interesuje mnie Konwolucyjny NN do rozpoznawania obrazów. Wypróbowałem przykład wykrywania twarzy w bibliotece OpenCV, ale okazało się, że jest dobry tylko w przypadku sztywnych obiektów. Czy sieć neuronowa ma podobne ograniczenie rozpoznawania tupotu, tzn. Jest dobra tylko w przypadku sztywnych obiektów?
user1731927,

Nie ma teoretycznego powodu, dla którego NN (lub CNN w tym przypadku) miałby limit rozpoznawania wzorców, ale jak już odkryłeś, pewne problemy są łatwiejsze do nauczenia się niż inne. Podobnie jak wiele problemów w uczeniu maszynowym, prawdopodobnie będziesz musiał trochę ulepszyć swój model, aby mógł dobrze sobie radzić z konkretnym typem problemu, który próbujesz rozwiązać, a NN nie są wyjątkiem.
jlund3,

1
Oto interesujący artykuł na temat tego, jak lepiej zbudować NN razem, aby rozwiązać problemy z siatką 2D, takie jak klasyfikacja obrazu. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3

1
Stycznie trudność w prawidłowym sklasyfikowaniu „niesztywnych” obiektów wizualnych lub, mówiąc inaczej, obiektów, których krawędzie nie mają czystych linii, jest dokładnie powodem, dla którego nawet natura stwierdziła, że ​​kamuflaż jest doskonałą strategią unikania. Jedzenie do namysłu.
mcstar

2

To, co cię zdezorientowało

jak uczy się o tym, co jest na obrazie.

To, co jest na obrazie, jest cyfrowo reprezentowane przez wartości w pikselach obrazu. Jeśli weźmiesz przykład koloru na obrazie. Piksel może mieć trzy wartości, każda dla trzech głównych kolorów - czerwonego, zielonego i niebieskiego ( RGB). Piksel z ( 10,50,100) oznacza, że ​​ma „mniej” niebieskich elementów niż piksel z ( 40,50,100). Zatem na obrazie pierwszy piksel reprezentuje region o mniejszym kolorze niebieskim. Jest to informacja, której uczy się sieć neuronowa, z jednej lokalizacji / regionu obrazu do drugiej i ostatecznie „wie”, co jest w obrazie. Tę samą zasadę stosuje się do innych funkcji obrazu (oprócz koloru), które mogą być wykorzystane jako dane wejściowe do sieci neuronowej. Zobacz to i to, aby poznać podstawowe pojęcia związane z obrazem, a następnie przejdź do tego aby dowiedzieć się, jak działa sieć neuronowa.


1

Wszystkie problemy z uczeniem maszynowym są takie same. Masz trochę danych o pociągu, uczysz się modelu, który reprezentuje te dane, i masz możliwość uogólnienia tej wiedzy w taki sposób, w jaki grupujesz, klasyfikujesz, uczysz się za pomocą różnych algorytmów.

W rozpoznawaniu obrazów masz ponownie zestaw obrazów, o których chcesz się dowiedzieć.

  1. Te obrazy są najpierw przetwarzane, a niektóre funkcje są pobierane z obrazów (wiele możliwych schematów funkcji obrazu, takich jak SIFT, Torba WORDS), takich jak piksele i ich wartości.
  2. Podaj te obrazy z odpowiednimi wektorami cech do swojego algorytmu ML (Neural Net, SVM lub inne).
  3. Naucz się modelu
  4. Ten model służy do rozpoznawania obiektów, które są wystarczająco widoczne na danych treningowych.

Jeśli chcesz rozpoznać więcej niż jedną rzecz, użyj wielu klasyfikatorów dla każdego.


1

Chciałbym również wspomnieć o bardzo popularnej sieci neuronowej splotowej do rozpoznawania obrazów. Oto link do uproszczonego wyjaśnienia CNN .

W skrócie, w CNN obraz jest najpierw podzielony na cechy, takie jak krawędzie, kształty, zbiory kształtów. Następnie funkcje te są „zasilane” do „zwykłej” w pełni połączonej wielowarstwowej sieci neuronowej (perceptron wielowarstwowy).

Bardziej szczegółowo, zestaw filtrów jest stosowany do wydobywania obiektów w formie mapy obiektów. Filtr to po prostu matryca (na początku losowa), która jest stosowana do oryginalnego obrazu, dzięki czemu oblicza się iloczyn iloczynu oryginalnej matrycy obrazu i matrycy filtra, a wynik jest sumowany. Filtr przesuwa się wzdłuż oryginalnego obrazu o jeden piksel (krok) na raz, a matryca mapy obiektów jest wypełniana. Dla każdego filtra tworzona jest mapa obiektów. Następnie wprowadzono nieliniowość za pomocą RELU (Rectified Linear Unit) dla każdego piksela na każdej mapie obiektów. Powiązanie, poprzez zastosowanie wartości max (), sum () lub Average (), odbywa się po splataniu. Wreszcie, wyodrębnione w ten sposób funkcje wyglądają jak „powiększone” fragmenty oryginalnego obrazu. Funkcje te są wprowadzane do w pełni połączonej (wszystkie jednostki są połączone) sieci neuronowej, a prawdopodobieństwa dla każdego obrazu (powiedzmy, że wyszkoliliśmy naszą sieć na obrazach samochodów, drzew i łodzi) są obliczane po każdym przejściu przez sieć do przodu. Sieć jest szkolona, ​​co oznacza, że ​​parametry (wagi) i matryce filtrów są optymalizowane poprzez propagację wsteczną (minimalizacja błędu błędnej klasyfikacji). Gdy nowy obraz jest wprowadzany do wyuczonej sieci, potrzebne jest tylko sprzężenie zwrotne do identyfikacji obrazu (pod warunkiem, że sieć jest wystarczająco dokładna, tzn. Przeszkoliliśmy ją z wystarczającą liczbą przykładów itp.) co oznacza, że ​​parametry (wagi) i matryce filtrów są optymalizowane poprzez propagację wsteczną (minimalizacja błędu błędnej klasyfikacji). Gdy nowy obraz jest wprowadzany do wyuczonej sieci, potrzebne jest tylko sprzężenie zwrotne do identyfikacji obrazu (pod warunkiem, że sieć jest wystarczająco dokładna, tzn. Przeszkoliliśmy ją z wystarczającą liczbą przykładów itp.) co oznacza, że ​​parametry (wagi) i matryce filtrów są optymalizowane poprzez propagację wsteczną (minimalizacja błędu błędnej klasyfikacji). Gdy nowy obraz jest wprowadzany do wyuczonej sieci, potrzebne jest tylko sprzężenie zwrotne do identyfikacji obrazu (pod warunkiem, że sieć jest wystarczająco dokładna, tzn. Przeszkoliliśmy ją z wystarczającą liczbą przykładów itp.)


0

Dobrze wiedzieć, że ANN może utworzyć dowolną funkcję f (x) lub f (x, y, z, ..) lub dowolną funkcję wielofunkcyjną w tym zakresie. Ale ważne jest również, aby wiedzieć, że funkcje mają ograniczenia w sposobie klasyfikacji danych ... istnieją bardziej złożone podzbiory relacji zestawów mocy obiektów, które są ważne w klasyfikacji i nie są opisywane przez takie funkcje w elegancki lub naturalny sposób, ale są ważne w języku i klasyfikowaniu obiektów. ANN może to również osiągnąć.

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.