Articles

The Complete Beginner ‘ s Guide to Deep Learning: Convolutional neurale netværk og Billedklassificering

Posted by admin

“en ting, der slog mig tidligt, er, at du ikke lægger på et fotografi, hvad der kommer ud. Eller omvendt, hvad der kommer ud er ikke, hvad du lægger i.”

― Diane Arbus

en meddelelse dukker op på dit foretrukne sociale netværk, at nogen har sendt et billede, der måske har dig i det.

det er rigtigt.

det er det værste billede af dig nogensinde.

GIF via GIPHY

hvordan skete det?

billedklassificering!det indviklede neurale netværk (CNN) er en klasse af dybe læringsneurale netværk. CNN ‘ er repræsenterer et stort gennembrud i billedgenkendelse. De bruges mest til at analysere visuelle billeder og arbejder ofte bag kulisserne i billedklassificering. De kan findes i kernen af alt fra Facebook ‘ s foto tagging til selvkørende biler. De arbejder hårdt bag kulisserne i alt fra sundhedspleje til sikkerhed.

de er hurtige, og de er effektive. Men hvordan fungerer de?

Billedklassificering er processen med at tage et input (som et billede) og udsende en klasse (som “kat”) eller en sandsynlighed for, at input er en bestemt klasse (“der er en 90% sandsynlighed for, at dette input er en kat”). Du kan se på et billede og vide, at du ser på et forfærdeligt skud af dit eget ansigt, men hvordan kan en computer lære at gøre det?

Med et indviklet neuralt netværk!

en CNN har

  • Convolutional lag
  • ReLU lag
  • Pooling lag
  • et fuldt forbundet lag

en klassisk CNN-arkitektur ville se sådan ud:

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. Sammenlignet med andre billedklassificeringsalgoritmer bruger CNN ‘ er faktisk meget lidt forbehandling. Det betyder, at de kan lære de filtre, der skal håndlavede i andre algoritmer. CNNs kan bruges i tonsvis af applikationer fra billed-og videogenkendelse, billedklassificering og anbefalingssystemer til naturlig sprogbehandling og medicinsk billedanalyse.

CNN ‘ er er inspireret af biologiske processer. De er baseret på nogle seje undersøgelser udført af Hubel og Viesel i 60 ‘ erne vedrørende syn hos katte og aber. Mønsteret af forbindelse i en CNN kommer fra deres forskning vedrørende organisationen af den visuelle bark. I et pattedyrs øje reagerer individuelle neuroner kun på visuelle stimuli i det modtagelige felt, som er et begrænset område. De modtagelige felter i forskellige regioner overlapper delvist, så hele synsfeltet dækkes. Sådan fungerer en CNN!

billede af Nathvidefotografi på

CNN ‘ er har et inputlag og outputlag og skjulte lag. De skjulte lag består normalt af sammenfaldende lag, ReLU-lag, pooling af lag og fuldt tilsluttede lag.

  • Convolutional lag anvender en convolution operation til input. Dette overfører oplysningerne videre til det næste lag.
  • Pooling kombinerer output fra klynger af neuroner i en enkelt neuron i det næste lag.
  • fuldt tilsluttede lag forbinder hver neuron i et lag til hver neuron i det næste lag.

i et konvolutionslag modtager neuroner kun input fra et underområde af det foregående lag. I et fuldt forbundet lag modtager hver neuron input fra hvert element i det foregående lag.

en CNN fungerer ved at udtrække funktioner fra billeder. Dette eliminerer behovet for manuel funktion udvinding. Funktionerne er ikke trænet! De læres, mens netværket træner på et sæt billeder. Dette gør dybe læringsmodeller ekstremt nøjagtige til computervisionsopgaver. CNNs lærer funktionsdetektion gennem titusinder eller hundreder af skjulte lag. Hvert lag øger kompleksiteten af de lærte funktioner.

GIF via GIPHY

A CNN

  • starter med et inputbillede
  • anvender mange forskellige filtre til det for at oprette et funktionskort
  • anvender en relu-funktion til at øge ikke-linearitet
  • anvender et pooling-lag på hvert funktionskort
  • flader de samlede billeder til en lang vektor.
  • indtaster vektoren i et fuldt tilsluttet kunstigt neuralt netværk.
  • behandler funktionerne via netværket. Det endelige fuldt tilsluttede lag giver “afstemning” af de klasser, vi er efter.
  • tog gennem fremad formering og backpropagation for mange, mange epoker. Dette gentages, indtil vi har et veldefineret neuralt netværk med trænede vægte og funktionsdetektorer.

så hvad betyder det?

i begyndelsen af denne proces opdeles et inputbillede i billedpunkter.

GIF via GIPHY

for et sort / hvidt billede fortolkes disse billedpunkter som et 2D-array (for eksempel 2H2 billedpunkter). Hvert punkt har en værdi mellem 0 og 255. (Nul er helt sort og 255 er helt hvid. Gråskalaen findes mellem disse tal.) Baseret på disse oplysninger kan computeren begynde at arbejde på dataene.

for et farvebillede er dette et 3D-array med et blåt lag, et grønt lag og et rødt lag. Hver af disse farver har sin egen værdi mellem 0 og 255. Farven kan findes ved at kombinere værdierne i hvert af de tre lag.

Convolution

hovedformålet med konvolutionstrinnet er at udtrække funktioner fra inputbilledet. Konvolutionslaget er altid det første skridt i en CNN.

du har et inputbillede, en funktionsdetektor og et funktionskort. Du tager filteret og anvender det billedblok ved billedblok til inputbilledet. Du gør dette gennem multiplikation af matricerne.

lad os sige, at du har en lommelygte og et ark bobleplast. Din lommelygte skinner en 5-boble 5-boble område. For at se på hele arket, ville du glide din lommelygte over hver 5H5 firkant, indtil du havde set alle boblerne.

foto af stuk på

lyset fra lommelygten her er dit filter, og det område, du glider over, er det modtagelige felt. Lyset, der glider over de modtagelige felter,er din lommelygte. Dit filter er en række tal (også kaldet vægte eller parametre). Afstanden lyset fra din lommelygte glider, når det bevæger sig (flytter du dit filter over en række bobler ad gangen? To?) kaldes skridtet. For eksempel betyder et skridt på en, at du flytter dit filter over et punkt ad gangen. Konventionen er et skridt på to.

dybden af filteret skal være den samme som dybden af input, så hvis vi kiggede på et farvebillede, ville dybden være 3. Det gør dimensionerne af dette filter 5h5h3. I hver position multiplicerer filteret værdierne i filteret med de oprindelige værdier i billedpunktet. Dette er elementvis multiplikation. Multiplikationerne opsummeres, hvilket skaber et enkelt tal. Hvis du startede i øverste venstre hjørne af din bobleindpakning, er dette nummer repræsentativt for øverste venstre hjørne. Nu flytter du dit filter til den næste position og gentager processen rundt om bobleindpakningen. Det array, du ender med, kaldes et funktionskort eller et aktiveringskort! Du kan bruge mere end et filter, som vil gøre et bedre stykke arbejde med at bevare rumlige relationer.

GIF via GIPHY

du angiver parametre som antallet af filtre, filterstørrelsen, netværkets arkitektur og så videre. CNN lærer værdierne af filtrene alene under træningsprocessen. Du har mange muligheder, som du kan arbejde med for at gøre den bedste billedklassifikator mulig for din opgave. Du kan vælge at pad input matricen med nuller (nul polstring) til at anvende filteret til grænser elementer af input billede matricen. Dette giver dig også mulighed for at kontrollere størrelsen på funktionskortene. Tilføjelse nul polstring er bred foldning. Ikke at tilføje nul polstring er smal foldning.

Dette er dybest set, hvordan vi registrerer billeder! Vi ser ikke på hvert eneste billede af et billede. Vi ser funktioner som en hat, en rød kjole, en tatovering og så videre. Der er så meget information, der går ind i vores øjne på alle tidspunkter, at vi umuligt kunne håndtere hvert eneste billede af det. Vi lader vores model gøre det samme.

resultatet af dette er det indviklede funktionskort. Det er mindre end det originale inputbillede. Dette gør det lettere og hurtigere at håndtere. Mister vi information? Nogle, Ja. Men samtidig er formålet med funktionsdetektoren at registrere funktioner, hvilket er præcis, hvad dette gør.

Vi opretter mange funktionskort for at få vores første konvolutlag. Dette giver os mulighed for at identificere mange forskellige funktioner, som programmet kan bruge til at lære.

Funktionsdetektorer kan indstilles med forskellige værdier for at få forskellige resultater. For eksempel kan der anvendes et filter, der kan skærpe og fokusere et billede eller sløre et billede. Det ville give lige stor betydning for alle værdier. Du kan gøre kantforbedring, kantdetektering og meget mere. Du ville gøre det ved at anvende forskellige funktionsdetektorer til at oprette forskellige funktionskort. Computeren er i stand til at bestemme, hvilke filtre der giver mest mening og anvende dem.

det primære formål her er at finde funktioner i dit billede, sætte dem i et funktionskort og stadig bevare det rumlige forhold mellem billedpunkter. Det er vigtigt, så billedpunkterne ikke bliver rodet sammen.

lad os visualisere disse ting!

sig hej til min lille ven:

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)

og vi ser:

Filter 1: 



]

Her er en visualisering af vores fire filtre

lad os nu definere et konvolutionslag (jeg elsker pytorch lige nu, så det er det, vi bruger her.)

Vi får se

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

tilføj lidt mere kode

så lidt mere

og vi kan visualisere output fra et konvolutionært lag, før en ReLu-aktiveringsfunktion anvendes!

lad os nu oprette en brugerdefineret kerne ved hjælp af en Sobel-operatør som et kantdetekteringsfilter. Sobel-filteret bruges meget almindeligt til kantdetektering. Det gør et godt stykke arbejde med at finde mønstre i intensitet i et billede. Anvendelse af et Sobel-filter på et billede er en måde at tage en tilnærmelse af derivatet af billedet separat i H – eller y-retningen.

Vi konverterer vores lille fyr til gråtoner til filtrering

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

Her går vi!

vil du tjekke matematikken? Tag et kig på Introduktion til Convolutional neurale netværk af Jiankin

ReLU layer

ReLU (rectified linear unit) lag er et andet skridt til vores convolution lag. Du anvender en aktiveringsfunktion på dine funktionskort for at øge ikke-linearitet i netværket. Dette skyldes, at billederne i sig selv er meget ikke-lineære! Det fjerner negative værdier fra et aktiveringskort ved at indstille dem til nul.

Convolution er en lineær operation med ting som elementvis matrice multiplikation og tilføjelse. De virkelige data, vi ønsker, at vores CNN skal lære, vil være ikke-lineære. Vi kan redegøre for det med en operation som ReLU. Du kan bruge andre operationer som tanh eller sigmoid. ReLU er imidlertid et populært valg, fordi det kan træne netværket hurtigere uden nogen større straf for generaliseringsnøjagtighed.

tjek C.-C. Jay Kuo forståelse Convolutional neurale netværk med en matematisk Model.

vil du grave dybere? Prøv Kaiming He, et al. Dykker dybt ned i ensrettere: overgår ydeevne på menneskeligt niveau på ImageNet-klassificering.

Hvis du har brug for lidt mere info om de absolutte grundlæggende aktiveringsfunktioner, kan du finde det her!

Sådan passer vores lille ven på en ReLU-aktiveringsfunktion, der gør alle de negative billedværdier sorte

viz_layer(activated_layer)

Related Post

Leave A Comment