Articles

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

Posted by admin

” een ding dat me vroeg opviel is dat je niet in een foto zet wat eruit gaat komen. Of, vice versa, wat eruit komt is niet wat je erin stopt.”

― Diane Arbus

Er verschijnt een melding op uw favoriete sociale netwerk dat iemand een foto heeft gepost die u mogelijk bevat.

Het klopt.

Het is de slechtste foto van jou ooit.

GIF via GIPHY

Hoe is dat gebeurd?

beeldclassificatie!

het convolutioneel neuraal netwerk (CNN) is een klasse van deep learning neurale netwerken. CNNs vertegenwoordigen een enorme doorbraak in beeldherkenning. Ze worden het meest gebruikt om visuele beelden te analyseren en werken vaak achter de schermen bij beeldclassificatie. Ze zijn te vinden in de kern van alles van Facebook ’s foto-tagging aan zelfrijdende auto’ s. Ze werken hard achter de schermen in alles, van gezondheidszorg tot veiligheid.

ze zijn snel en efficiënt. Maar hoe werken ze?

beeldclassificatie is het proces van het nemen van een invoer (zoals een afbeelding) en het uitvoeren van een klasse (zoals “cat”) of een waarschijnlijkheid dat de invoer een bepaalde klasse is (“er is een 90% waarschijnlijkheid dat deze invoer een cat is”). Je kunt naar een foto kijken en weten dat je naar een vreselijke foto van je eigen gezicht kijkt, maar hoe kan een computer dat leren?

met een convolutioneel neuraal netwerk!

een CNN heeft

  • convolutionele lagen
  • ReLU lagen
  • Pooling lagen
  • een volledig verbonden laag

een klassieke CNN-architectuur ziet er ongeveer zo uit:

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. In vergelijking met andere beeldclassificatiealgoritmen, gebruiken CNNs eigenlijk heel weinig preprocessing. Dit betekent dat ze de filters kunnen leren die met de hand moeten worden gemaakt in andere algoritmen. CNNs kan worden gebruikt in tal van toepassingen van Beeld-en videoherkenning, beeldclassificatie en aanbevelingssystemen tot natuurlijke taalverwerking en medische beeldanalyse.

CNNs zijn geïnspireerd door biologische processen. Ze zijn gebaseerd op een aantal coole onderzoek gedaan door Hubel en Wiesel in de jaren ‘ 60 met betrekking tot visie bij katten en apen. Het patroon van connectiviteit in een CNN komt uit hun onderzoek met betrekking tot de organisatie van de visuele cortex. In het oog van een zoogdier, individuele neuronen reageren op visuele stimuli alleen in het receptieve veld, dat is een beperkt gebied. De ontvankelijke velden van verschillende regio ‘ s overlappen elkaar gedeeltelijk zodat het gehele gezichtsveld wordt bestreken. Zo werkt een CNN!

Image by Natwhitefotography on

cnns hebben een invoerlaag, en uitvoerlaag, en verborgen lagen. De verborgen lagen bestaan meestal uit convolutionele lagen, ReLU lagen, pooling lagen, en volledig verbonden lagen.

  • Convolutielagen passen een convolutiebewerking toe op de invoer. Dit geeft de informatie door aan de volgende laag.
  • Pooling combineert de outputs van clusters van neuronen in een enkel neuron in de volgende laag.
  • volledig verbonden lagen verbinden elk neuron in één laag met elk neuron in de volgende laag.

in een convolutielaag ontvangen neuronen alleen input van een deelgebied van de vorige laag. In een volledig verbonden laag ontvangt elk neuron input van elk element van de vorige laag.

een CNN werkt door functies uit afbeeldingen te extraheren. Dit elimineert de noodzaak voor handmatige functie extractie. De functies zijn niet getraind! Ze worden geleerd terwijl het netwerk traint op een set beelden. Dit maakt deep learning modellen uiterst nauwkeurig voor Computer vision taken. CNNs leren functie detectie door middel van tientallen of honderden verborgen lagen. Elke laag verhoogt de complexiteit van de geleerde functies.

GIF via GIPHY

EEN CNN

  • start met een input image
  • geldt veel verschillende filters voor het maken van een kaart functie
  • geldt een ReLU functie te verhogen non-lineariteit
  • geldt een bundeling van laag tot elke functie en kaart
  • vlakt de gegroepeerde beelden in een lange vector.
  • voert de vector in in een volledig verbonden kunstmatig neuraal netwerk.
  • verwerkt de functies via het netwerk. De laatste volledig verbonden laag biedt de “stemming”van de klassen die we na.
  • traint door voorwaartse voortplanting en backpropagatie voor vele, vele tijdperken. Dit herhaalt zich tot we een goed gedefinieerd neuraal netwerk hebben met getrainde gewichten en feature detectors.

dus wat betekent dat?

aan het begin van dit proces wordt een invoerafbeelding opgesplitst in pixels.

GIF via GIPHY

voor een zwart-witafbeelding worden deze pixels geïnterpreteerd als een 2D-array (bijvoorbeeld 2×2 pixels). Elke pixel heeft een waarde tussen 0 en 255. (Nul is helemaal zwart en 255 is helemaal wit. De grijswaarden bestaan tussen die getallen.) Op basis van die informatie, kan de computer beginnen te werken aan de gegevens.

voor een kleurenafbeelding is dit een 3D-array met een blauwe laag, een groene laag en een rode laag. Elk van deze kleuren heeft zijn eigen waarde tussen 0 en 255. De kleur kan worden gevonden door het combineren van de waarden in elk van de drie lagen.

convolutie

het belangrijkste doel van de stap convolutie is om functies uit de invoerafbeelding te extraheren. De convolutielaag is altijd de eerste stap in een CNN.

u hebt een invoerafbeelding, een feature detector en een feature map. Je neemt het filter en past het pixelblok per pixelblok toe op de invoerafbeelding. Je doet dit door de vermenigvuldiging van de matrices.

stel dat je een zaklamp en een vel noppenfolie hebt. Uw zaklamp schijnt een 5-bubble x 5-bubble gebied. Om naar het hele vel te kijken, zou je je zaklamp over elk 5×5 vierkant schuiven totdat je alle bubbels had gezien.

Foto van stux op

het licht van de zaklamp hier is uw filter en het gebied waar u over glijdt is het receptieve veld. Het licht dat over de ontvankelijke velden glijdt is uw zaklamp convolving. Uw filter is een array van getallen (ook wel gewichten of parameters genoemd). De afstand die het licht van je zaklamp glijdt terwijl het reist (verplaats je je filter over één rij bubbels per keer? Twee?) wordt de stride genoemd. Een stap van één betekent bijvoorbeeld dat u uw filter over één pixel per keer verplaatst. De conventie is een stap van twee.

de diepte van het filter moet gelijk zijn aan de diepte van de invoer, dus als we naar een kleurenafbeelding kijken, zou de diepte 3 zijn. Dat maakt de afmetingen van dit filter 5x5x3. In elke positie vermenigvuldigt het filter de waarden in het filter met de oorspronkelijke waarden in de pixel. Dit is element wise vermenigvuldiging. De vermenigvuldigingen worden samengevat, het creëren van een enkel getal. Als u in de linkerbovenhoek van uw noppenfolie bent begonnen, is dit getal representatief voor de linkerbovenhoek. Nu verplaats je je filter naar de volgende positie en herhaal je het proces rondom de noppenfolie. De array waarmee je eindigt heet een feature map of een activeringskaart! U kunt meer dan één filter gebruiken, dat een beter werk van het behoud van ruimtelijke relaties zal doen.

GIF via GIPHY

u specificeert parameters zoals het aantal filters, de filtergrootte, de architectuur van het netwerk, enzovoort. De CNN leert de waarden van de filters zelf tijdens het trainingsproces. Je hebt een heleboel opties die u kunt werken met de beste afbeelding classifier mogelijk te maken voor uw taak. U kunt ervoor kiezen om de invoermatrix te vullen met nullen (nul opvulling) om het filter toe te passen op aangrenzende elementen van de invoerafbeeldmatrix. Hiermee kunt u ook de grootte van de functie kaarten te controleren. Het toevoegen van nul padding is wide convolution. Het niet toevoegen van nul padding is smalle convolutie.

Dit is in principe hoe we afbeeldingen detecteren! We kijken niet naar elke pixel van een afbeelding. We zien kenmerken zoals een hoed, een rode jurk, een tatoeage, enzovoort. Er komt te allen tijde zoveel informatie in onze ogen dat we onmogelijk met elke pixel ervan om kunnen gaan. We laten ons model hetzelfde doen.

het resultaat hiervan is de convolved feature map. Het is kleiner dan de originele invoerafbeelding. Dit maakt het makkelijker en sneller om te gaan met. Verliezen we informatie? Sommige, Ja. Maar tegelijkertijd, het doel van de functie detector is om functies te detecteren, dat is precies wat dit doet.

We maken veel functietoewijzingen om onze eerste convolutielaag te krijgen. Dit stelt ons in staat om veel verschillende functies te identificeren die het programma kan gebruiken om te leren.

Feature detectors kunnen worden ingesteld met verschillende waarden om verschillende resultaten te krijgen. Er kan bijvoorbeeld een filter worden toegepast dat een afbeelding kan scherpen en scherpstellen of een afbeelding kan vervagen. Dan zouden alle waarden even belangrijk zijn. U kunt randverbetering, randdetectie en meer doen. Je zou dat doen door het toepassen van verschillende functie detectoren om verschillende functie kaarten te maken. De computer kan bepalen welke filters het meest zinvol zijn en toepassen.

het primaire doel hier is om functies in uw afbeelding te vinden, ze in een functieafbeelding te plaatsen en toch de ruimtelijke relatie tussen pixels te behouden. Dat is belangrijk, zodat de pixels niet door elkaar gaan.

laten we dit materiaal visualiseren!

zeg hallo tegen mijn kleine vriend:

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)

en dan zien we:

Filter 1: 



]

Hier is een visualisatie van onze vier filters

laten we Nu definiëren van een convolutional laag (ik ben de liefde PyTorch nu, dus dat is wat we gebruiken hier.)

we zien

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

voeg een beetje meer code

toe dan een beetje meer

en we kunnen de uitvoer van een convolutionele laag visualiseren voordat een ReLu activeringsfunctie wordt toegepast!

laten we nu een aangepaste kernel maken met behulp van een Sobel-operator als een randdetectiefilter. Het Sobel-filter wordt veel gebruikt in randdetectie. Het doet goed werk van het vinden van patronen in intensiteit in een beeld. Het toepassen van een Sobel filter op een afbeelding is een manier om een benadering van de afgeleide van het beeld afzonderlijk te nemen in de x – of y-richting.

we converteren onze kleine jongen naar grijswaarden voor het filteren

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

Hier gaan we!

wilt uitchecken de wiskunde? Neem een kijkje bij Introduction to Convolutional Neural Networks door Jianxin Wu

ReLU layer

De Relu (rectified linear unit) layer is een andere stap naar onze convolutielaag. U past een activeringsfunctie toe op uw functiekaarten om de niet-lineariteit in het netwerk te vergroten. Dit komt omdat beelden zelf zeer niet-lineair zijn! Het verwijdert negatieve waarden uit een activeringskaart door ze in te stellen op nul.

convolutie is een lineaire operatie met dingen als element wise matrix vermenigvuldiging en optelling. De gegevens uit de echte wereld die we onze CNN willen laten leren zullen niet-lineair zijn. Dat kunnen we verklaren met een operatie als ReLU. U kunt andere bewerkingen gebruiken zoals tanh of sigmoid. ReLU is echter een populaire keuze omdat het het netwerk sneller kan trainen zonder enige grote straf voor generalisatie nauwkeurigheid.

Check C.-C. Jay Kuo Understanding Convolutional Neural Networks With a Mathematical Model.

wilt u dieper graven? Probeer hem te Kaimen, et al. Diep graven in gelijkrichters: overtreft prestaties op menselijk niveau op ImageNet classificatie.

Als u wat meer informatie nodig heeft over de absolute basis van activeringsfuncties, kunt u dat hier vinden!

Hier is hoe ons kleine maatje zorgt voor een ReLU activeringsfunctie zet alle negatieve pixelwaarden zwart

viz_layer(activated_layer)

Related Post

Leave A Comment