Articles

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

Posted by admin

” en sak som slog mig tidigt är att du inte lägger in ett fotografi vad som kommer att komma ut. Eller vice versa, det som kommer ut är inte vad du lägger in.”

― Diane Arbus

ett meddelande dyker upp på ditt favorit sociala nätverk att någon lagt upp en bild som kan ha dig i den.

det är rätt.

det är den värsta bilden av dig någonsin.

GIF via GIPHY

hur hände det?

bildklassificering!

convolutional neural network (CNN) är en klass av djupa lärande neurala nätverk. CNN representerar ett stort genombrott i bildigenkänning. De används oftast för att analysera visuella bilder och arbetar ofta bakom kulisserna i bildklassificering. De finns i kärnan i allt från Facebook: s fototaggning till självkörande bilar. De arbetar hårt bakom kulisserna i allt från sjukvård till säkerhet.

de är snabba och de är effektiva. Men hur fungerar de?

Bildklassificering är processen att ta en ingång (som en bild) och mata ut en klass (som ”katt”) eller en sannolikhet att ingången är en viss klass (”det finns 90% sannolikhet att denna ingång är en katt”). Du kan titta på en bild och veta att du tittar på ett hemskt skott av ditt eget ansikte, men hur kan en dator lära sig att göra det?

med ett konvolutionellt neuralt nätverk!

en CNN har

  • Convolutional layers
  • Relu layers
  • Pooling layers
  • ett helt anslutet lager

en klassisk CNN-arkitektur skulle se ut så här:

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. Jämfört med andra bildklassificeringsalgoritmer använder CNN faktiskt mycket lite förbehandling. Det betyder att de kan lära sig de filter som måste vara handgjorda i andra algoritmer. CNNs kan användas i massor av applikationer från bild-och videoigenkänning, bildklassificering och rekommendationssystem till naturlig språkbehandling och medicinsk bildanalys.

CNNs är inspirerade av biologiska processer. De är baserade på en del coola undersökningar gjorda av Hubel och Wiesel på 60-talet om syn hos katter och apor. Anslutningsmönstret i en CNN kommer från deras forskning om organisationen av den visuella cortexen. I ett däggdjurs öga svarar enskilda neuroner endast på visuella stimuli i det mottagliga fältet, vilket är en begränsad region. De mottagliga fälten i olika regioner överlappar delvis så att hela synfältet täcks. Så här fungerar en CNN!

bild av NatWhitePhotography på

CNN har ett ingångslager och utgångslager och dolda lager. De dolda skikten består vanligtvis av fällningslager, Relu-lager, poollager och helt anslutna lager.

  • Faltningslager tillämpar en faltningsoperation på ingången. Detta skickar informationen vidare till nästa lager.
  • Pooling kombinerar utgångarna från kluster av neuroner i en enda neuron i nästa lager.
  • helt anslutna lager ansluter varje neuron i ett lager till varje neuron i nästa lager.

i ett faltningsskikt får neuroner endast inmatning från ett delområde i föregående lager. I ett helt anslutet lager får varje neuron inmatning från varje element i föregående lager.

en CNN fungerar genom att extrahera funktioner från bilder. Detta eliminerar behovet av manuell extraktion av funktioner. Funktionerna är inte utbildade! De lär sig medan nätverket tränar på en uppsättning bilder. Detta gör djupinlärningsmodeller extremt exakta för datorsynsuppgifter. CNNs lär funktion upptäckt genom tiotals eller hundratals dolda lager. Varje lager ökar komplexiteten hos de lärda funktionerna.

GIF via GIPHY

en CNN

  • börjar med en inmatningsbild
  • tillämpar många olika filter för att skapa en funktionskarta
  • tillämpar en Relu-funktion för att öka icke-linjäritet
  • tillämpar ett poollager på varje funktionskarta
  • plattar de poolade bilderna i en lång vektor.
  • matar in vektorn i ett helt anslutet artificiellt neuralt nätverk.
  • bearbetar funktionerna via nätverket. Det slutliga helt anslutna lagret ger” röstning ” av de klasser som vi är ute efter.
  • tränar genom framåtutbredning och backpropagation för många, många epoker. Detta upprepas tills vi har ett väldefinierat neuralt nätverk med utbildade vikter och funktionsdetektorer.

så vad betyder det?

i början av denna process bryts en inmatningsbild ner i pixlar.

GIF via GIPHY

för en svartvitt bild tolkas dessa pixlar som en 2D-array (till exempel 2×2 pixlar). Varje pixel har ett värde mellan 0 och 255. (Noll är helt svart och 255 är helt vit. Gråskalan finns mellan dessa siffror.) Baserat på den informationen kan datorn börja arbeta med data.

För en färgbild är detta en 3D-array med ett blått lager, ett grönt lager och ett rött lager. Var och en av dessa färger har sitt eget värde mellan 0 och 255. Färgen kan hittas genom att kombinera värdena i vart och ett av de tre skikten.

faltning

huvudsyftet med faltningssteget är att extrahera funktioner från inmatningsbilden. Faltningsskiktet är alltid det första steget i en CNN.

Du har en inmatningsbild, en funktionsdetektor och en funktionskarta. Du tar filtret och tillämpar det pixelblock med pixelblock på inmatningsbilden. Du gör detta genom multiplikation av matriserna.

låt oss säga att du har en ficklampa och ett ark med bubbelplast. Din ficklampa lyser en 5-bubbla x 5-bubbla område. För att titta på hela arket skulle du skjuta ficklampan över varje 5×5 kvadrat tills du hade sett alla bubblor.

foto av stux på

ljuset från ficklampan här är ditt filter och regionen du glider över är det mottagliga fältet. Ljuset som glider över de mottagliga fälten är din ficklampa. Ditt filter är en rad siffror (även kallade vikter eller parametrar). Avståndet ljuset från ficklampan glider när den färdas (flyttar du ditt filter över en rad bubblor i taget? Två?) kallas steget. Ett steg på ett betyder till exempel att du flyttar ditt filter över en pixel i taget. Konventet är ett steg på två.

filterets djup måste vara detsamma som djupet på ingången, så om vi tittade på en färgbild skulle djupet vara 3. Det gör måtten på detta filter 5x5x3. I varje position multiplicerar filtret värdena i filtret med de ursprungliga värdena i pixeln. Detta är elementvis multiplikation. Multiplikationerna summeras och skapar ett enda nummer. Om du började i det övre vänstra hörnet av din bubbelplast är detta nummer representativt för det övre vänstra hörnet. Nu flyttar du ditt filter till nästa position och upprepar processen runt bubbelfolien. Arrayen du hamnar med kallas en funktionskarta eller en aktiveringskarta! Du kan använda mer än ett filter, vilket gör ett bättre jobb med att bevara rumsliga relationer.

GIF via GIPHY

du anger parametrar som antalet filter, filterstorleken, nätverkets arkitektur och så vidare. CNN lär sig värdena på filtren på egen hand under träningsprocessen. Du har många alternativ som du kan arbeta med för att göra den bästa bildklassificeraren möjlig för din uppgift. Du kan välja att padda inmatningsmatrisen med nollor (noll stoppning) för att tillämpa filtret på gränsande element i inmatningsbildmatrisen. Detta låter dig också styra storleken på funktionskartorna. Lägga noll stoppning är bred faltning. Inte lägga noll stoppning är smal faltning.

det här är i grunden hur vi upptäcker bilder! Vi tittar inte på varje pixel i en bild. Vi ser funktioner som en hatt, en röd klänning, en tatuering och så vidare. Det finns så mycket information som går in i våra ögon hela tiden att vi inte kunde hantera varje enskild pixel av den. Vi låter vår modell göra samma sak.

resultatet av detta är den invecklade funktionskartan. Det är mindre än den ursprungliga inmatningsbilden. Detta gör det enklare och snabbare att hantera. Förlorar vi information? Några, Ja. Men samtidigt är syftet med funktionsdetektorn att upptäcka funktioner, vilket är exakt vad detta gör.

Vi skapar många funktionskartor för att få vårt första faltningslager. Detta gör att vi kan identifiera många olika funktioner som programmet kan använda för att lära oss.

Funktions detektorer kan ställas in med olika värden för att få olika resultat. Till exempel kan ett filter appliceras som kan skärpa och fokusera en bild eller oskärpa en bild. Det skulle ge lika stor betydelse för alla värden. Du kan göra Kantförbättring, kantdetektering och mer. Du skulle göra det genom att använda olika funktionsdetektorer för att skapa olika funktionskartor. Datorn kan bestämma vilka filter som är mest förnuftiga och tillämpa dem.

det primära syftet här är att hitta funktioner i din bild, placera dem i en funktionskarta och ändå bevara det rumsliga förhållandet mellan pixlar. Det är viktigt så att pixlarna inte blir alla jumbled upp.

låt oss visualisera det här!

Säg hej till min lilla vän:

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)

och vi ser:

Filter 1: 



]

här är en visualisering av våra fyra filter

låt oss nu definiera ett faltningslager (jag älskar PyTorch just nu, så det är vad vi använder här.)

Vi ser

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

Lägg till lite mer kod

sedan lite mer

och vi kan visualisera utmatningen från ett faltningslager innan en Relu-aktiveringsfunktion tillämpas!

låt oss nu skapa en anpassad kärna med en sobel-operatör som ett kantdetekteringsfilter. Sobel-filtret används mycket ofta vid kantdetektering. Det gör ett bra jobb med att hitta mönster i intensitet i en bild. Att applicera ett Sobel-filter på en bild är ett sätt att ta en approximation av bildens derivat separat i x – eller y-riktningen.

vi konverterar vår lilla kille till gråskala för filtrering

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

här går vi!

vill du kolla in matten? Ta en titt på Introduktion till Convolutional Neural Networks av Jianxin Wu

Relu layer

Relu (rectified linear unit) layer är ett annat steg till vårt convolution layer. Du använder en aktiveringsfunktion på dina funktionskartor för att öka icke-linjäriteten i nätverket. Detta beror på att bilderna själva är mycket icke-linjära! Det tar bort negativa värden från en aktiveringskarta genom att ställa in dem till noll.

Convolution är en linjär operation med saker som elementvis matrismultiplikation och addition. Den verkliga data vi vill att vår CNN ska lära sig kommer att vara icke-linjär. Vi kan redogöra för det med en operation som ReLU. Du kan använda andra operationer som tanh eller sigmoid. ReLU är dock ett populärt val eftersom det kan träna nätverket snabbare utan någon större straff för generaliseringsnoggrannhet.

kolla in C.-C. Jay Kuo förstå Konvolutionella neurala nätverk med en matematisk modell.

Vill du gräva djupare? Försök Kaiming han, et al. Djupdykning i likriktare: överträffar prestanda på mänsklig nivå på ImageNet-klassificering.

om du behöver lite mer information om de absoluta grunderna för aktiveringsfunktioner kan du hitta det här!

Så här ser vår lilla kompis efter en Relu-aktiveringsfunktion gör alla negativa pixelvärden svarta

viz_layer(activated_layer)

Related Post

Leave A Comment