Articles

The Complete Beginner ’ s Guide to Deep Learning: Convolutional Neural Networks and Image Classification

Posted by admin

„jedną z rzeczy, która uderzyła mnie wcześniej, jest to, że nie wkładasz do zdjęcia tego, co wyjdzie. Albo odwrotnie, to, co wychodzi, nie jest tym, co wkładasz.”

― Diane Arbus

w Twoim ulubionym serwisie społecznościowym wyskakuje powiadomienie, że ktoś opublikował zdjęcie, które może mieć Ciebie w nim.

To prawda.

to najgorsze Twoje zdjęcie.

GIF via GIPHY

Jak to się stało?

klasyfikacja obrazów!

convolutional neural network (CNN) to klasa sieci neuronowych głębokiego uczenia. CNN stanowią ogromny przełom w rozpoznawaniu obrazów. Są one najczęściej używane do analizy obrazów wizualnych i często pracują za kulisami w klasyfikacji obrazów. Można je znaleźć w rdzeniu wszystkiego, od tagowania zdjęć na Facebooku po samodzielne samochody. Ciężko pracują za kulisami we wszystkim, od opieki zdrowotnej po Bezpieczeństwo.

są szybkie i wydajne. Ale jak one działają?

klasyfikacja obrazu to proces pobierania danych wejściowych (jak obraz) i wyprowadzania klasy (jak „cat”) lub prawdopodobieństwa, że dane wejściowe są konkretną klasą („istnieje 90% prawdopodobieństwo, że to dane wejściowe są kotem”). Możesz spojrzeć na zdjęcie i wiedzieć, że patrzysz na okropne ujęcie własnej twarzy, ale jak komputer może się tego nauczyć?

z konwolucyjną siecią neuronową!

CNN ma

  • warstwy Konwolucyjne
  • warstwy ReLU
  • łączenie warstw
  • w pełni połączona warstwa

klasyczna architektura CNN wyglądałaby mniej więcej tak:

Input ->Convolution ->ReLU ->Convolution ->ReLU ->Pooling ->
ReLU ->Convolution ->ReLU ->Pooling ->Fully Connected

A CNN convolves (not convolutes…) learned features with input data and uses 2D convolutional layers. This means that this type of network is ideal for processing 2D images. W porównaniu z innymi algorytmami klasyfikacji obrazów, CNN faktycznie wykorzystują bardzo mało wstępnego przetwarzania. Oznacza to, że mogą nauczyć się filtrów, które muszą być wykonane ręcznie w innych algorytmach. CNN może być stosowany w wielu aplikacjach, od rozpoznawania obrazów i wideo, klasyfikacji obrazów i systemów rekomendujących do przetwarzania języka naturalnego i analizy obrazu medycznego.

CNN inspirowane są procesami biologicznymi. Bazują na ciekawych badaniach przeprowadzonych przez Hubela i Wiesela w latach 60-tych dotyczących widzenia u kotów i małp. Wzorzec łączności w CNN pochodzi z ich badań dotyczących organizacji kory wzrokowej. W oku ssaka poszczególne neurony reagują na bodźce wzrokowe tylko w polu odbiorczym, które jest obszarem ograniczonym. Pola odbiorcze różnych regionów częściowo pokrywają się, tak że całe pole widzenia jest pokryte. Tak działa CNN!

zdjęcie autorstwa NatWhitePhotography na

CNN mają warstwę wejściową, warstwę wyjściową i warstwy Ukryte. Ukryte warstwy zwykle składają się z warstw splotu, warstw ReLU, warstw łączenia i w pełni połączonych warstw.

  • warstwy splotu stosują operację splotu do wejścia. To przekazuje informacje do następnej warstwy.
  • Pooling łączy wyniki klastrów neuronów w jeden neuron w następnej warstwie.
  • w pełni połączone warstwy łączą każdy neuron w jednej warstwie z każdym neuronem w następnej warstwie.

w warstwie konwolucyjnej neurony otrzymują dane tylko z podobszaru poprzedniej warstwy. W całkowicie połączonej warstwie każdy neuron otrzymuje dane z każdego elementu poprzedniej warstwy.

CNN działa poprzez wyodrębnianie funkcji z obrazów. Eliminuje to potrzebę ręcznego wyodrębniania funkcji. Funkcje nie są szkolone! Uczą się ich, gdy sieć trenuje na zestawie obrazów. To sprawia, że modele głębokiego uczenia są niezwykle dokładne do zadań widzenia komputerowego. CNN uczą się wykrywania funkcji poprzez dziesiątki lub setki ukrytych warstw. Każda warstwa zwiększa złożoność poznanych funkcji.

GIF via GIPHY

CNN

  • rozpoczyna się od obrazu wejściowego
  • stosuje do niego wiele różnych filtrów, aby utworzyć mapę funkcji
  • stosuje funkcję Relu w celu zwiększenia nieliniowości
  • stosuje warstwę zbiorczą do każdej mapy funkcji
  • spłaszcza połączone obrazy w jeden długi wektor.
  • wprowadza wektor do w pełni połączonej sztucznej sieci neuronowej.
  • przetwarza funkcje za pośrednictwem sieci. Ostatnia w pełni połączona warstwa zapewnia „głosowanie” klas, których szukamy.
  • trenuje przez propagację do przodu i do tyłu przez wiele, wiele epok. To się powtarza, dopóki nie będziemy mieli dobrze zdefiniowanej sieci neuronowej z wyszkolonymi wagami i detektorami funkcji.

więc co to znaczy?

na samym początku tego procesu obraz wejściowy jest dzielony na piksele.

GIF via GIPHY

w przypadku obrazu czarno-białego piksele te są interpretowane jako tablica 2D (na przykład 2×2 piksele). Każdy piksel ma wartość od 0 do 255. (Zero jest całkowicie czarne, a 255 jest całkowicie białe. Pomiędzy tymi liczbami istnieje skala szarości.) Na podstawie tych informacji komputer może rozpocząć pracę nad danymi.

dla obrazu kolorowego jest to tablica 3D z warstwą niebieską, warstwą zieloną i warstwą czerwoną. Każdy z tych kolorów ma swoją wartość od 0 do 255. Kolor można znaleźć, łącząc wartości w każdej z trzech warstw.

splot

głównym celem kroku splotowego jest wyodrębnienie funkcji z obrazu wejściowego. Warstwa splotu jest zawsze pierwszym krokiem w CNN.

masz obraz wejściowy, detektor funkcji i mapę funkcji. Bierzesz filtr i stosujesz go blok pikseli po bloku pikseli do obrazu wejściowego. Robisz to przez mnożenie macierzy.

Załóżmy, że masz latarkę i arkusz folii bąbelkowej. Twoja latarka świeci 5-bubble x 5-bubble obszarze. Aby spojrzeć na cały arkusz, przesuwałbyś latarkę po każdym kwadracie 5×5, aż zobaczysz wszystkie bąbelki.

Zdjęcie stuxa na

światło z latarki jest tutaj twoim filtrem, a obszar, nad którym się przesuwasz, jest polem odbiorczym. Światło przesuwające się po polach odbiorczych jest twoją latarką. Twój filtr jest tablicą liczb (nazywaną również wagami lub parametrami). Odległość światło od latarki ślizga się podczas podróży (czy przesuwasz filtr po jednym rzędzie pęcherzyków na raz? Dwa?) nazywa się „krok”. Na przykład jeden krok oznacza, że przesuwasz filtr o jeden piksel naraz. Konwencja jest krokiem dwóch.

głębokość filtra musi być taka sama jak Głębokość wejścia, więc gdybyśmy patrzyli na kolorowy obraz, głębokość byłaby równa 3. To sprawia, że wymiary tego filtra 5x5x3. W każdej pozycji filtr Mnoży wartości w filtrze z oryginalnymi wartościami w pikselu. Jest to pierwiastek mnożenia. Mnożenie jest sumowane, tworząc pojedynczą liczbę. Jeśli zaczynałeś w lewym górnym rogu folii bąbelkowej, ta liczba jest reprezentatywna dla lewego górnego rogu. Teraz przesuń filtr do następnej pozycji i powtórz proces wokół folii bąbelkowej. Tablica, którą otrzymujesz, nazywa się mapą funkcji lub mapą aktywacyjną! Możesz użyć więcej niż jednego filtra, który lepiej zabezpieczy relacje przestrzenne.

GIF via GIPHY

możesz określić parametry, takie jak liczba filtrów, rozmiar filtra, architektura sieci i tak dalej. CNN samodzielnie uczy się wartości filtrów podczas procesu szkolenia. Masz wiele opcji, z którymi możesz pracować, aby stworzyć najlepszą klasyfikację obrazów dla swojego zadania. Możesz wybrać, aby umieścić matrycę wejściową zerami (zero padding), aby zastosować filtr do elementów obramowania matrycy obrazu wejściowego. Pozwala to również kontrolować rozmiar map funkcji. Dodanie zerowej wyściółki to szerokie splot. Nie dodawanie zerowej wyściółki jest wąskim splotem.

tak w zasadzie wykrywamy obrazy! Nie patrzymy na każdy piksel obrazu. Widzimy funkcje takie jak kapelusz, czerwona sukienka, tatuaż i tak dalej. W naszych oczach cały czas pojawia się tak wiele informacji, że nie moglibyśmy poradzić sobie z każdym pikselem. Pozwalamy naszemu modelowi robić to samo.

rezultatem tego jest mapa funkcji. Jest mniejszy niż oryginalny obraz wejściowy. Dzięki temu łatwiej i szybciej sobie z tym poradzić. Czy tracimy informacje? Niektóre, tak. Ale jednocześnie celem detektora cech jest wykrywanie cech, co jest dokładnie tym, co robi.

tworzymy wiele map funkcji, aby uzyskać naszą pierwszą warstwę splotu. To pozwala nam zidentyfikować wiele różnych funkcji, które program może wykorzystać do nauki.

detektory funkcji można skonfigurować z różnymi wartościami, aby uzyskać różne wyniki. Na przykład można zastosować filtr, który może wyostrzyć i wyostrzyć obraz lub rozmyć obraz. To dałoby równe znaczenie wszystkim wartościom. Możesz ulepszać krawędzie, wykrywać krawędzie i nie tylko. Można to zrobić, stosując różne detektory funkcji do tworzenia różnych map funkcji. Komputer jest w stanie określić, które filtry mają największy sens i zastosować je.

głównym celem jest znalezienie funkcji w obrazie, umieszczenie ich w mapie funkcji i zachowanie relacji przestrzennych między pikselami. To ważne, żeby piksele się nie pomieszały.

wizualizujmy to!

przywitaj się z moim małym przyjacielem:

Photo by Kirgiz03 on

We’re going to use this guy for our input image.

We’ll make him black and white

Let’s define and visualize our filters

import numpy as npfilter_vals = np.array(, , , ])print('Filter shape: ', filter_vals.shape)

Filter shape: (4, 4)

i widzimy:

Filter 1: 



]

oto wizualizacja naszych czterech filtrów

teraz zdefiniujmy warstwę splotu (uwielbiam pytorcha, więc tego właśnie używamy tutaj.)

zobaczymy

Net(
(conv): Conv2d(1, 4, kernel_size=(4, 4), stride=(1, 1), bias=False)
)

dodaj trochę więcej kodu

następnie trochę więcej

i możemy zwizualizować wyjście warstwy konwolucyjnej przed zastosowaniem funkcji ReLu aktywacji!

teraz stwórzmy własne jądro używając operatora Sobel jako filtra wykrywania krawędzi. Filtr Sobel jest bardzo powszechnie stosowany w detekcji krawędzi. Dobrze sprawdza się w znajdowaniu wzorców intensywności obrazu. Zastosowanie filtra Sobela do obrazu jest sposobem na przybliżenie pochodnej obrazu osobno w kierunku x lub Y.

przekonwertujemy naszego kolesia na skalę szarości do filtrowania

gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)plt.imshow(gray, cmap='gray')

zaczynamy!

chcesz sprawdzić matmę? Spójrz na wprowadzenie do Konwolucyjnych sieci neuronowych Jianxin Wu

warstwa ReLU

warstwa ReLU (rectified linear unit) jest kolejnym krokiem do naszej warstwy splotu. Na mapach funkcji stosuje się funkcję aktywacji, aby zwiększyć Nieliniowość w sieci. Dzieje się tak dlatego, że same obrazy są wysoce nieliniowe! Usuwa ujemne wartości z mapy aktywacji, ustawiając je na zero.

splot jest operacją liniową z takimi rzeczami jak mnożenie i dodawanie macierzy pierwiastkowej. Rzeczywiste dane, których chcemy się nauczyć w CNN, będą nieliniowe. Możemy to wyjaśnić operacją taką jak ReLU. Możesz użyć innych operacji, takich jak tanh lub esica. ReLU jest jednak popularnym wyborem, ponieważ może trenować sieć szybciej bez większych sankcji za dokładność uogólniania.

Sprawdź C.-C. Jay Kuo zrozumienie Konwolucyjnych sieci neuronowych za pomocą modelu matematycznego.

chcesz kopać głębiej? Spróbuj Kaiming He, et al. Zagłębianie się w prostowniki: przewyższanie wydajności na poziomie ludzkim w klasyfikacji ImageNet.

Jeśli potrzebujesz trochę więcej informacji o absolutnych podstawach funkcji aktywacyjnych, znajdziesz to tutaj!

oto jak nasz mały kumpel dba o funkcję aktywacji ReLU zmienia wszystkie ujemne wartości pikseli na Czarne

viz_layer(activated_layer)

Related Post