Articles

A teljes kezdő útmutató a mély tanuláshoz: konvolúciós neurális hálózatok és Képosztályozás

Posted by admin

“az egyik dolog, ami korán megdöbbentett, az az, hogy nem teszel egy fényképbe, ami ki fog jönni. Vagy fordítva, ami kijön, nem az, amit betesz.”

― Diane Arbus

egy értesítés jelenik meg a kedvenc közösségi hálózaton, hogy valaki olyan képet tett közzé, amelyben lehet, hogy benne van.

helyes.

Ez a legrosszabb kép rólad valaha.

GIF via GIPHY

hogyan történt ez?

kép besorolás!

a konvolúciós neurális hálózat (CNN) a mély tanulási neurális hálózatok osztálya. A CNN-ek hatalmas áttörést jelentenek a képfelismerésben. Leggyakrabban a vizuális képek elemzésére használják őket, és gyakran dolgoznak a színfalak mögött a képosztályozásban. Ezek a Facebook fotócímkézésétől az önvezető autókig minden középpontjában megtalálhatók. Keményen dolgoznak a színfalak mögött az egészségügytől a biztonságig.

gyorsak és hatékonyak. De hogyan működnek?

a Képosztályozás egy bemenet (például egy kép) felvételének és egy osztály (például “macska”) kiadásának folyamata, vagy annak valószínűsége, hogy a bemenet egy adott osztály (“90% – os a valószínűsége annak, hogy ez a bemenet macska”). Megnézhetsz egy képet, és tudod, hogy egy szörnyű képet nézel a saját arcodról, de hogyan tanulhatja meg ezt egy számítógép?

konvolúciós neurális hálózattal!

a CNN-nek van

  • konvolúciós rétegei
  • ReLU rétegek
  • rétegek egyesítése
  • egy teljesen összekapcsolt réteg

egy klasszikus CNN architektúra így nézne ki:

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. Más képosztályozási algoritmusokhoz képest a CNN-ek valójában nagyon kevés előfeldolgozást használnak. Ez azt jelenti, hogy megtanulhatják azokat a szűrőket, amelyeket más algoritmusokban kézzel kell készíteni. CNNs lehet használni tonna alkalmazások kép és videó felismerés, kép osztályozás, és ajánló rendszerek természetes nyelvi feldolgozás és orvosi képelemzés.

a CNN-eket biológiai folyamatok inspirálják. Ezek Hubel és Wiesel által a 60-as években végzett, a macskák és majmok látásával kapcsolatos hűvös kutatásokon alapulnak. A CNN-ben a kapcsolat mintája a vizuális kéreg szervezésével kapcsolatos kutatásaikból származik. Az emlős szemében az egyes idegsejtek csak a befogadó mezőben reagálnak a vizuális ingerekre, amely korlátozott régió. A különböző régiók befogadó mezői részben átfedik egymást, így a teljes látómező le van fedve. Így működik a CNN!

kép forrása: NatWhitePhotography on

a CNN-eknek van bemeneti rétegük, kimeneti rétegük és rejtett rétegeik. A rejtett rétegek általában konvolúciós rétegekből, ReLU rétegekből, egyesítő rétegekből és teljesen összekapcsolt rétegekből állnak.

  • konvolúciós rétegek konvolúciós műveletet alkalmaznak a bemenetre. Ez továbbítja az információt a következő rétegnek.
  • a Pooling egyesíti az idegsejtek klasztereinek kimeneteit egyetlen neuronba a következő rétegben.
  • A teljesen összekapcsolt rétegek az egyik réteg minden neuronját összekapcsolják a következő réteg minden neuronjával.

konvolúciós rétegben az idegsejtek csak az előző réteg alterületéről kapnak bemenetet. Egy teljesen összekapcsolt rétegben minden neuron bemenetet kap az előző réteg minden eleméből.

a CNN funkciók kivonásával működik a képekből. Ez kiküszöböli a kézi funkciókivonás szükségességét. A funkciók nem képzett! Megtanulják őket, miközben a hálózat képsorokon edz. Ez a mély tanulási modelleket rendkívül pontossá teszi a számítógépes látási feladatokhoz. A CNNs több tíz vagy több száz rejtett rétegen keresztül tanulja meg a funkciók észlelését. Minden réteg növeli a megtanult funkciók összetettségét.

GIF GIPHY-n keresztül

A CNN

  • egy bemeneti képpel kezdődik
  • sok különböző szűrőt alkalmaz a funkciótérkép létrehozásához
  • Relu függvényt alkalmaz a nemlinearitás növelésére
  • minden egyes funkciótérképre egy pooling réteget alkalmaz
  • az összevont képeket egy hosszú vektorba simítja.
  • a vektort egy teljesen összekapcsolt mesterséges neurális hálózatba helyezi.
  • a funkciókat a hálózaton keresztül dolgozza fel. Az utolsó teljesen összekapcsolt réteg biztosítja az általunk követett osztályok “szavazását”.
  • vonatok előre terjedés és backpropagation sok-sok korszakok. Ez addig ismétlődik, amíg nem lesz egy jól meghatározott neurális hálózatunk képzett súlyokkal és jellemző detektorokkal.

mit jelent ez?

ennek a folyamatnak a legelején a bemeneti kép pixelekre oszlik.

GIF GIPHY-n keresztül

fekete-fehér kép esetén ezeket a képpontokat 2D tömbként értelmezzük (például 2×2 Pixel). Minden pixel értéke 0 és 255 között van. (A nulla teljesen fekete, a 255 pedig teljesen fehér. A szürkeárnyalat a számok között létezik.) Ezen információk alapján a számítógép megkezdheti az adatok feldolgozását.

színes kép esetén ez egy 3D tömb kék, zöld és piros réteggel. Mindegyik színnek megvan a maga értéke 0 és 255 között. A szín megtalálható a három réteg mindegyikének értékeinek kombinálásával.

konvolúció

a konvolúciós lépés fő célja a funkciók kivonása a bemeneti képből. A konvolúciós réteg mindig az első lépés a CNN-ben.

van egy bemeneti kép, egy funkciódetektor és egy funkciótérkép. Fogja a szűrőt, és alkalmazza azt pixel block by pixel block a bemeneti képre. Ezt a mátrixok szorzásával teheti meg.

tegyük fel, hogy van egy zseblámpa és egy buborékcsomagolás. A zseblámpa ragyog egy 5-buborék x 5-buborék területen. A teljes lap megtekintéséhez csúsztassa a zseblámpát minden 5×5 négyzeten, amíg meg nem látta az összes buborékot.

fotó: stux a

a zseblámpa fénye itt a szűrő, és a régió, amelyen átcsúszik, a befogadó mező. A befogadó mezőkön átcsúszó fény a zseblámpa konvolvingja. A szűrő egy sor szám (más néven súlyok vagy paraméterek). A távolság a fény a zseblámpa csúszik, ahogy utazik (Ön mozog a szűrő több mint egy sor buborékok egy időben? Kettő?) nevezzük lépésnek. Például az egyik lépés azt jelenti, hogy a szűrőt egyszerre egy pixel fölé mozgatja. Az egyezmény két lépés.

a szűrő mélységének meg kell egyeznie a bemenet mélységével, tehát ha színes képet néznénk, akkor a mélység 3 lenne. Ez a szűrő méretét 5x5x3-ra teszi. A szűrő minden helyzetben megsokszorozza a szűrő értékeit a pixel eredeti értékeivel. Ez elem bölcs szorzás. A szorzásokat összegezzük, egyetlen számot hozva létre. Ha a buborékcsomagolás bal felső sarkában kezdte, ez a szám a bal felső sarok képviselője. Most mozgassa a szűrőt a következő pozícióba, és ismételje meg a folyamatot a buborékcsomagolás körül. A tömb a végén az úgynevezett feature map vagy aktiválási térkép! Több szűrőt is használhat, amely jobb munkát végez a térbeli kapcsolatok megőrzésében.

GIF GIPHY-n keresztül

olyan paramétereket ad meg, mint a szűrők száma, a szűrő mérete, a hálózat architektúrája stb. A CNN a képzési folyamat során önállóan megtanulja a szűrők értékeit. Van egy csomó lehetőség, hogy tud dolgozni, hogy a legjobb kép osztályozó lehetséges a feladat. Választhat, hogy a bemeneti mátrixot nullákkal (nulla kitöltéssel) tölti be, hogy a szűrőt a bemeneti képmátrix határos elemeire alkalmazza. Ez lehetővé teszi a funkciótérképek méretének szabályozását is. A nulla párnázás hozzáadása széles konvolúció. A nulla padding hozzáadása nem keskeny konvolúció.

alapvetően így érzékeljük a képeket! Nem nézzük meg a kép minden egyes pixelét. Olyan funkciókat látunk, mint egy kalap, egy piros ruha, egy tetoválás stb. Olyan sok információ kerül a szemünkbe, hogy nem tudnánk minden egyes pixelével foglalkozni. Megengedjük a modellünknek, hogy ugyanezt tegye.

ennek eredménye a convolved feature map. Kisebb, mint az eredeti bemeneti kép. Ez megkönnyíti és gyorsabbá teszi a kezelést. Elveszítjük az információkat? Néhány igen. De ugyanakkor a funkciódetektor célja a funkciók észlelése, ami pontosan ezt teszi.

számos funkciótérképet hozunk létre, hogy megkapjuk az első konvolúciós réteget. Ez lehetővé teszi számunkra, hogy számos különböző funkciót azonosítsunk, amelyeket a program megtanulhat.

a Funkcióérzékelők különböző értékekkel állíthatók be, hogy különböző eredményeket kapjanak. Alkalmazható például egy szűrő, amely élesítheti és fókuszálhatja a képet, vagy elmoshatja a képet. Ez egyenlő fontosságot tulajdonítana minden értéknek. Meg tudod csinálni él javítása, él érzékelés, és így tovább. Ezt úgy teheti meg, hogy különböző funkcióérzékelőket alkalmaz különböző funkciótérképek létrehozásához. A számítógép képes meghatározni, hogy mely szűrők a leginkább értelmesek és alkalmazzák őket.

az elsődleges cél itt az, hogy megtaláljuk a kép jellemzőit, tegyük őket egy jellemzőtérképbe, és továbbra is megőrizzük a pixelek közötti térbeli kapcsolatot. Ez azért fontos, hogy a pixelek ne keveredjenek össze.

vizualizáljuk ezt a cuccot!

Köszönj a kis barátomnak:

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)

és látjuk:

Filter 1: 



]

itt egy vizualizáció a négy szűrő

most határozzunk meg egy konvolúciós réteget (most szeretem a PyTorch-ot, tehát ezt használjuk itt.)

látni fogjuk

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

adjunk hozzá még egy kis kódot

majd még egy kicsit

és vizualizálhatjuk egy konvolúciós réteg kimenetét, mielőtt egy ReLu aktiválási funkciót alkalmaznánk!

most hozzunk létre egy egyéni kernelt egy Sobel operátor használatával élfelismerő szűrőként. A Sobel szűrőt nagyon gyakran használják az élérzékelésben. Jó munkát végez a kép intenzitásának mintáinak megtalálásában. A Sobel szűrő alkalmazása egy képre egy módja annak, hogy a kép deriváltjának közelítését külön – külön x-vagy y-irányban vegye fel.

átalakítjuk a kis haverunkat szürkeárnyalatos szűrésre

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

itt vagyunk!

szeretné megnézni a matekot? Vessen egy pillantást Bevezetés a konvolúciós neurális hálózatokba Jianxin Wu

ReLU réteg

a ReLU (rectified linear unit) réteg egy újabb lépés a konvolúciós rétegünkhöz. Aktiválási funkciót alkalmaz a funkciótérképekre, hogy növelje a hálózat nemlinearitását. Ennek oka az, hogy maguk a képek nagyon nem lineárisak! Eltávolítja a negatív értékeket az aktiválási térképről úgy, hogy nullára állítja őket.

a konvolúció egy lineáris művelet olyan dolgokkal, mint az elem bölcs mátrix szorzás és összeadás. A valós adatok, amelyeket a CNN-nek meg akarunk tanulni, nem lineárisak lesznek. Ezt el tudjuk magyarázni egy olyan művelettel, mint ReLU. Használhat más műveleteket, például tanh vagy sigmoid. ReLU, azonban, népszerű választás, mert gyorsabban képes kiképezni a hálózatot anélkül, hogy nagyobb büntetést szabna ki az általánosítás pontosságára.

nézd meg C.-C. Jay Kuo megértése konvolúciós neurális hálózatok egy matematikai modell.

mélyebbre akarsz ásni? Próbálja Kaiming ő, et al. Mélyen belemerülve az Egyenirányítókba: meghaladja az emberi szintű teljesítményt az ImageNet osztályozásában.

Ha egy kicsit több információra van szüksége az aktiválási funkciók abszolút alapjairól, ezt itt találhatja meg!

így néz ki a kis haverunk egy ReLU aktiválási funkció után, amely az összes negatív pixelértéket feketévé teszi

viz_layer(activated_layer)

Related Post

Leave A Comment