Jedno z nejprogresivnějších odvětví strojového učení se schopností řešit úlohy, které by ještě před 10 lety byly nemyslitelné, je deep learning. Jeho uplatnění zasahuje do mnoha oborů lidské činnosti, od systémů počítačového vidění přes vyhledávací, diagnostické a asistenční systémy až po autonomní vozidla a bezpečnost. MATLAB , jako vývojové prostředí pro vědeckotechnické výpočty, nabízí v oblasti strojového učení a deep learningu množství algoritmů a usnadní jejich aplikaci při řešení praktických úkolů. Strojové učení je podoblastí umělé inteligence, zabývající se algoritmy a technikami, které umožňují počítačovému systému „učit se“. Strojové učení se značně prolíná s oblastmi statistiky a dobývání znalostí a má široké uplatnění... http://cs.wikipedia.org Deep learning je metoda strojového učení, kde je za pomoci mnohovrstvých nelineárních výpočetních modelů získávána užitečná informace přímo z dat. V klasifikačních úlohách dosahují deep learning modely vysoké přesnosti, která může předčit lidské schopnosti. Modely jsou trénovány s využitím velkého množství označených dat a jejich architektura je postavená na hlubokých neuronových sítích (deep networks). Deep learning nachází využití v mnoha oblastech, zejména pak v úlohách: klasifikace obrazu rozpoznávání řeči zpracování přirozeného jazyka Učení se deep learning modelu Přesnost deep learning modelu závisí z velké části na množství dat použitých k jeho učení. Nejpřesnější modely vyžadují tisíce či dokonce miliony vzorků. Učení takového modelu může trvat velmi dlouhou dobu. Jakmile je model naučen, lze jej nasadit do provozu v reálném čase. Typickou aplikací je detekce chodců v pokročilých systémech pro podporu řízení (ADAS). Deep learning a MATLAB MATLAB je inženýrský nástroj a interaktivní prostředí pro vědecké a technické výpočty, analýzu dat, vizualizaci, vývoj algoritmů, modelování i simulace. MATLAB je nástroj jak pro pohodlnou interaktivní práci, tak pro vývoj širokého spektra aplikací. V oblasti deep learningu poskytuje MATLAB dva základní nástroje: autoenkodéry (Autoencoders) a konvoluční neuronové sítě (Convolutional Neural Networks – CNN). Využití CNN k rozpoznávání obrazu v programu MATLAB je na obr. 1. Rozpozn ávání obrazu Konvoluční neuronové sítě (CNN) představují oblíbenou architekturu modelů v oblasti deep learningu. Neuronová síť je uspořádána do vrstev obsahujících sady propojených uzlů. Výpočetní algoritmus CNN je založen na konvoluci mezi vstupními daty a filtry, které reprezentují hledané charakteristické rysy. CNN využívá dvourozměrné (2-D) konvoluční vrstvy a je tedy vhodná pro zpracování 2-D dat, jako jsou obrázky. V horní části obr. 2 je znázorněno schéma sestavení konvoluční neuronové sítě určené ke klasifikaci objektů v obrazových datech. Ve spodní části je principiální znázornění jejího fungování. Data protékají skrze neuronovou síť a dochází k jejich konvoluci s naučenými filtry (koeficienty filtrů jsou naučené váhy neuronové sítě). Výstup z konvoluce v jedné vrstvě je vstupem do vrstvy následující. Filtry mohou začínat jako velmi jednoduché rysy, typu světlých a tmavých míst či hran, a postupně přecházejí do složitějších tvarů v následujících vrstvách. Cílem konvolucí je extrahovat z obrazových dat informace, na základě kterých lze objekty na snímcích rozpoznat. Konvoluční vrstvy jsou často doplněny vrstvami ReLU a Pooling, které výstupy upraví a zmenší. Za sadou konvolučních vrstev bývají napojeny vrstvy klasifikační, které pracují z extrahovanými rysy ze vstupních obrázků. Výstupem klasifikačních vrstev může být pravděpodobnostní rozdělení pro přiřazení klasifikační třídy (hledaného objektu) ke vstupnímu obrázku. CNN v MATLABu V prostředí MATLAB se s CNN pracuje velmi pohodlně. Jsou zde připraveny funkce k vytvoření jednotlivých vrstev sítě, u kterých může uživatel nastavovat parametry. Poté vrstvy pospojuje, síť natrénuje a využije ke klasifikaci s novými daty. K urychlení trénování sítě lze využít GPU. Typická CNN může sestávat z vrstvy pro vstup obrázků, jedné nebo několika za sebou zapojených skupin vrstev convolution2d + relu + maxPooling2d a navazujících klasifikačních vrstev fully- Connected + softmax + classification. vrstvy = [imageInputLayer([28 28 1]) ; convolution2dLayer(5,20) ; reluLayer() ; maxPooling2dLayer(2, 'Stride',2) ; fullyConnectedLayer(10) ; softmaxLayer() ; classificationLayer()] ; nastaveni = trainingOptions( 'sgdm' ) ; cnn = trainNetwork(trenovaciObr,... vrstvy,... nastaveni) ; vysledek = classify(cnn,novyObr) ; CNN a klasická klasifikace Konvoluční neuronové sítě nemusejí být vždy využívány včetně klasifikačních vrstev. Je možné využívat pouze konvoluční vrstvy pro extrakci charakteristických rysů z dat. Získané rysy jsou pak vstupem do klasických klasifikačních algoritmů strojového učení, jako jsou rozhodovací stromy, support vector machines, k-nearest neighbors, discriminant analysis a jiné metody, které jsou v MATLABu k dispozici. Učení metodou Transfer Learning Naučení celé konvoluční neuronové sítě z výchozího nastavení vyžaduje ohromné množství trénovacích dat, protože je třeba nastavit miliony váhových koeficientů. Alternativním přístupem k učení „od nuly“ je využití předučené sítě, která již sama extrahuje charakteristické rysy ze vstupních dat. K přizpůsobení sítě konkrétnímu problému postačí doučit pouze několik posledních vrstev, které již rozlišují mezi konkrétními objekty. Tento přístup, označovaný termínem transfer learning, je pohodlnou cestou aplikace deep learningu bez nutnosti využití rozsáhlého množství dat a dlouhé doby učení. MATLAB nabízí stažení a využívání oblíbených předučených sítí – např. síť AlexNet, naučená s 1,2 mil. obrázků, 23 vrstev, klasifikace objektů do 1000 kategorií – obr. 3. Dvouminutové video s ukázkou klasifikace obrázků pomocí CNN v prostředí MATLAB najdete pod názvem Deep Learning in 11 Lines of MATLAB Code na stránkách www.mathworks.com . Vizualizace CNN Jednoduchým způsobem lze kontrolovat, zda je síť naučena správně. Kromě testování s daty, u kterých dopředu známe správný výsledek, můžeme provést optickou kontrolu vizualizační technikou Deep Dream. MATLAB poskytuje funkci deepDreamImage syntetizující umělý obrázek, který silně aktivuje vrstvy dané sítě pro zvolenou kategorii obrázků. Opticky můžeme zkontrolovat, zda naučené vlastnosti odpovídají hledanému tvaru. Na obr. 4 je vizualizace sítě AlexNet pro kategorii květináče. CNN a počítačové vidění Jednou z nejčastějších úloh v oblasti počítačového vidění je detekce specifických objektů ve snímané scéně. Typickým příkladem může být rozpoznání dopravních značek při jízdě automobilem. Při detekci objektů nejde o zařazení celého snímku do dané kategorie, ale o rozeznání objektu, který pokrývá pouze jeho část. V ostatních částech se pak nacházejí další objekty, které nás nezajímají, a proto není možné klasifikovat snímek jako celek. Jak přenést sílu a přesnost CNN do této úlohy? V MATLABu jsou k dispozici algoritmy typu R-CNN (Regions with CNN), kdy je konvoluční neuronová síť aplikována na klasifikaci výřezů v rámci daného snímku. R-CNN detektor zpracovává pouze výřezy, kde je výskyt hledaného objektu pravděpodobný. To významnou měrou snižuje výpočetní nároky. V MATLABu jsou k dispozici detektory R-CNN, Fast R-CNN a Faster R-CNN. Jak již název napovídá, je výhodou posledně jmenovaného detektoru rychlost detekce, což usnadňuje jeho nasazení v reálném provozu. Distributor produktů společnosti MathWorks v České republice a na Slovensku: HUMUSOFT s. r. o. http://www.humusoft.cz