IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

MATLAB zľahka - Deep learning na tri riadky

Deep learning je využitie hlbokých neurónových sietí pre úlohy ako je napríklad klasifikácia obrazu.

Neurónové siete Alexnet

Alexnet je jedna z prvých dobre fungujúcich neurónových sietí svojho druhu. Môžeme pomocou nej napr. Zistiť, čo sa nachádza na obrázku, už tromi riadky kódu. Tu sú:

net = alexnet; %načtení neuronové sítě
Obrazek = imread('https://itnetwork.cz/images/17395/matlabzlehka04/banan.jpg'); %načtení obrázku z webu
CoTamJe=classify(net,Obrazek) % klasifikace obrázku pomocí neuronky

MATLAB vás zrejme upozorní na nenainštalovanú AlexNet Network support package. Inštalácia pomocou balíka je najlepší spôsob, ako dostať natrénované a popísanú neuronku do MATLABu. Pre inštaláciu balíka je potrebné mať účet na MATHWORKS (zdarma).

URL adresa v kóde ukazuje na nasledujúci obrázok banánu:

Obrázok banánu ku klasifikácii neurónovou sietí - Matlab

Výstupom tých troch riadkov kódu je úspešné rozpoznanie tohto banánu:

CoTamJe =
  categorical
     banana

Prečo je to úspech ľahšie pochopíme pomocou malej exkurzie do neďalekej histórie.

Stručná história konvolučná neurónových sietí

V prípade, že by sme pre detekciu banánu nechceli používať neurónové siete, museli by sme vyriešiť veľa problémov. Všeobecne úloha rozpoznanie niečoho v obraze je veľmi netriviálne.

Ako definujeme banán?

Môžeme začať s tým, že banán je žltý, má istý tvar, veľkosť a textúru. Ani jedna z týchto vlastností sa pre banánu zakaždým rovnaká a už vôbec nie je "banánovo exkluzívne" (napr. Jablko môže byť tiež žlté). Aj v rozpoznávania čísel, ktorých je len 10 a sú oproti objektom všedného sveta jednoduchá, sú klasické algoritmy značne nedokonalé. Pri použití klasifikátora založeného na konvolučná neurónových sieťach je presnosť a rýchlosť lepšia ako u človeka samotného. Nevýhodou neuronek všeobecne je potreba veľkého množstva dát a výpočtového výkonu pre učiaci fázu.

Súťaž LSVRC

Od roku 2010 existuje súťaž v klasifikácii obrázkov do 1000 kategórií ( ILSVRC). Jednou z týchto kategórií je aj banán, však objekty sú zo širokého spektra - kvety, veci dennej potreby, psie plemená, atď ... (celý hárok tu). V roku 2012 súťaž s výrazným náskokom vyhrala práve konvolučná neurónové siete Alexnet. Prečo?

Konvolúcie

Zjednodušene povedané - konvolúcie umožňuje predspracovať obrázky tak, že neurónová sieť vyhodnocuje príznaky, ktoré sú zásadné pre rozpoznanie objektov. Napríklad hrany, svetlosť, pod. Všetky príznaky idú ťažko vyjadriť a pomenovať a v tom je zásadný výhoda CNN (Convolutional Neural Network). Príznaky si totiž vytvorí sieť sama podľa toho, ktorými obrázky ju naučíme. Nehovoríme teda neuronce "pozeraj sa na vertikálne hrany", ale ak sieť v procese učenia vyhodnotí, že vertikálne hrany sú dôležitým príznakom pre rozpoznanie bernardína od iPodu, potom áno - neurónová sieť patrične upraví konvolučná filtre tak, aby hrany identifikovali.

Zrátané podčiarknuté odvtedy skoro všetci ILSVRC súťažiaci okopírovali myšlienky, ktoré Alexnet dokázala využiť a každým rokom bola predstavená nová sieť s novou a vylepšenou architektúrou, ktorá viedla zas o kúsok bližšie k presným výsledkom. Veľa týchto sietí môžete smeti a bez zdĺhavých ceremónií v MATLABe využívať.

Tiež si všimnite, že rok 2012 je približne doba, kedy sa na scéne objavujú samořídící autá a Facebook začína s prehľadom zvládať automatické označovanie ľudí na fotografiách.

Klasifikácia vlastného obrázka

klasifikovaná kvetina - Matlab

Úvodné tri riadky je nutné trochu upraviť, aby sme zvládli klasifikovať akýkoľvek obrázok pomocou Alexnet.

Zmena rozmerov

Prvým krokom je zmena rozmerov obrázku na požadovaných 227x227 pixelov, čo je jednoducho vstup celej siete (banánový obrázok má požadovaný rozmer, preto sme tento krok vynechali). K zmene rozmerov slúži funkcia imresize().

Pravdepodobnosť

Ďalej by nebolo od veci rovno vidieť, ako veľmi si ich neurónové siete klasifikáciou istá. Táto informácia sa dá vyčítať z druhého výstupného parametra funkcie classify(). Jedná sa o vektor o 1000 prvkoch, pričom tieto sa sčítajú do jedničky. Maximum celého vektora je teda pravdepodobnosť, že klasifikácia je správna.

Ukážme si náš program s týmito vylepšeniami. Zvyšok kódu slúži pre vypísanie výsledku rovno do obrázka:

A = imread('kytka256.jpg'); %(obrázek součástí .zip souboru)
A_227x227 = imresize(A,[227 227]); %změnit velikost
[label,score] = classify(net,A_227x227); % klasifikovat

A_s_textem = insertText(A,[1 1],...% přidat text
    cellstr(string(label) + " "+ num2str(max(score)*100)+" %"),'FontSize',26,'boxcolor','magenta');
imshow(A_s_textem)

Alexnet si ich na 95,8% istá, že na obrázku sa nachádza margarétka ... A ajhľa, to je zle. Na obrázku je v skutočnosti kvet Slnečnica topinambur. Keď však skúsime vyhľadať v zozname tried Jerusalem artichoke (anglický názov pre topinambur), stretneme sa s neúspechom. Topinambura jednoducho nie je jednou z tried, tak to neuronka namierila na margaréty. Tu sa dostávame k jednému z úskalia konvolučná neurónových sietí - čo je nenaučíme, nevedia.

Ako vyzerá a funguje Alexnet

Štruktúra siete Alexnet nie je tajná informácia. Ak chcete sa na nej pozrieť, slúži k tomu v MATLABe funkcie analyzeNetwork():

net = alexnet;
analyzeNetwork(net);

V nasledujúcom texte je zjednodušujúce opis toho, za čo sú jednotlivé vrstvy siete zodpovedné.

Vrstvy 1-5

Prvých päť vrstiev siete Alexnet - Matlab
  • Prvá vrstva siete je vstupná, tiež má veľkosť, ktorá sa rovná veľkosti RGB obrázku (227x227x3).
  • Druhá vrstva je už spomínaná konvolúcie čiže tiež filtrácia a to čo sa neuronka naučia sú práve filtre (konvolučná jadrá, jadrá). V tomto prípade ich je 96 a majú rozmer 11x11x3 (3 pretože 3 farebné kanály).
  • Tretia vrstvou - ReLU (Rectified Linear Unit) prejdú všetky hodnoty a ak sú nižšie, než 0, stane sa z nich práve 0. Ak sú vyššie, k žiadnej zmene nedôjde. To má za následok zvýšenie nelinearity (nelinearita znamená, že ak vstup zvýšime napríklad 2x, výstup nebude zväčšený práve 2x). Siete potom fungujú lepšie.
  • Štvrtá vrstva - Normalizácia umožňuje znížiť odpoveď neurónov, ktoré vykazujú príliš veľkú aktivitu (aby to nebolo len o nich).
  • Zníženie veľkosti vykoná piata vrstva a to tým spôsobom, že z okolia (tu 3x3) vyberie ten najvyšší prvok (preto max pooling). Zníženie veľkosti vedie k zníženiu parametrov nutných k učeniu, tým pádom k zvýšeniu rýchlosti.

Vrstvy 17-25

Vrstvy 16–25 neurónové siete Alexnet - Matlab
  • Vrstvy 6-16 sú kombináciou predošlých vrstiev s rôznymi parametrami.
  • Vrstva 17 obsahuje 4096 neurónov a každý z nich prepojí s 9216 výstupmi z vrstvy 16, preto sa tiež nazýva Fully Connected.
  • Dropout (vrstva 19) náhodne nastaví akýkoľvek vstup s 50% pravdepodobnosťou na 0, čo opäť zvýši nelinearitu v systéme.
  • Predposledný, 24. vrstva (SoftMax), zariadi, že pravdepodobnosti klasifikácia do jednotlivých tried budú od 0 do 1 a ich súčet bude tiež 1.
  • Posledná vrstva je vrstva výstupné, z ktorej nám vypadne želaný výsledok.

Vnútri siete - Aktivácia

Funkcia classify() vezme obrázok a pošle ho do Alexnet. Obrázok postupne prepadne všetkými vrstvami, kde aktivuje dané neuróny až do poslednej vrstvy. Tam každý neurón za sebou skrýva jednu možnú triedu toho, čo je na obrázku. Tá, ktorá je najviac aktivovaná, je výstupom funkcia classify(). Do celého procesu aktivácie môžete nahliadnuť pomocou funkcie activations():

aktivace = activations(net,A_227x227,5);%aktivace z 5. vrstvy

aktivace_4d = reshape(aktivace,size(aktivace,1) , size(aktivace,2) , 1 , size(aktivace,3) );
aktivace_4d = imadjustn (mat2gray (aktivace_4d));%upravy pro lepsi zobrazeni

montage(aktivace_4d (:,:,:,1:16));%zobrazeni prvnich 16 aktivaci (pro lepsi zobrazeni)

Na obrázku vidíme, čo sa stalo s kvetinou v piatej vrstve Alexnet. Niekedy je kvet tmavý, niekedy svetlý, niekedy nie je vidieť vôbec, alebo len okraj. Zo súboru týchto vlastností Alexnet na konci vyhodnotí, že sa jedná o margaréty.

Aktivácia neurónové siete Alexnet 1–16 v 5. vrstve - Matlab

Záver

Pozreli sme sa na to, ako je v MATLABe jednoduché použiť konvolučná neurónovou sieť pre klasifikáciu obrazu. Stručne sme si vysvetlili ako a prečo tieto siete fungujú. CNN sa nevyužívajú iba ku klasifikácii obrázkov, ale aj na detekciu objektov ( "na súradniciach xy sa nachádza chodec"), sémantickej segmentáciu ( "tento pixel je chodec a tento pixel je iné vozidlo"), ale aj na generovanie samotných obrázkov a pod. Pochopiteľne ich zameranie nie je iba na obrazy. Používajú sa aj u jednorozmerných signálov (zvuk, EKG, vývoj ceny Bitcoin, a ďalšie) k podobným úlohám.

Nabudúce si ukážeme ako neurónovou sieť natrénovať na našich vlastných obrázkoch.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 24x (53.64 kB)
Aplikácia je vrátane zdrojových kódov

 

Všetky články v sekcii
Matlab
Článok pre vás napísal tesař.tech
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje dýchání přibližně celý život
Aktivity