Strojové učení je často ztotožňované s umělou inteligencí, přesto, že jde jen jednu z jejích podoblastí. Využívá se úspěšně k rozpoznání řeči, dolování dat, optimalizaci řízení, predikci trendů. Důležitou oblastí nasazení učících se systémů je i zpracování obrazu. Tam se strojové učení používá pro klasifikaci scén, hledání a klasifikaci objektů v obraze nebo rozpoznání tváří. Tyto procedury jsou pak důležitým prvkem moderních bezpečnostních, dopravních a dalších systémů. Firma FCC průmyslové systémy je však průmyslovým systémovým integrátorem a zajímá ji hlavně nasazení učících se systémů v oblasti průmyslového strojového vidění. Následující úvahy tedy vycházejí ze zkušeností získaných ve firmě FCC průmyslové systémy při aplikaci strojového učení při řešení projektů integrace systémů strojového vidění v průmyslové výrobě.
Klasifikace objektů v obraze neuronovou sítí
Učících se systémů je několik druhů. Pro zpracování obrazu je dnes nejčastěji učící se systém nasazen ve formě neuronové sítě pro učení s učitelem (supervised learning) a využívané jako klasifikátor objektů v obraze. Nebudeme se zabývat tím, proč právě tento typ učícího se systému je tak populární. Raději využijeme toho, že takovou síť je dnes možné poměrně snadno realizovat s využitím mnoha dostupných softwarových knihoven. K dispozici jsou knihovny pro vybudování jak „univerzálních“ neuronových sítí, tak i tzv. konvolučních sítí, vyvinutých přímo pro zpracování obrazu. Využitím těchto knihoven většina integrátorů začíná a touto cestou jsme se vydali i my.
Proto se zde nebudeme věnovat rozboru principu neuronových sítí, pro zájemce o tuto oblast již existuje široká nabídka pramenů v literatuře i na internetu. Na neuronovou síť budeme hledět jako na klasifikátor, který určité množině vstupních vektorů přiřazuje výstupní vektor charakterizující klasifikační třídu. K tomu, aby takto fungoval, musí klasifikátor projít procesem učení, ve kterém aproximuje své vnitřní proměnné.
Nasazení v automatizované výrobě
obr. 1. Vizualizace deskriptorů v aplikaci strojového vidění
Klasifikace (přiřazení objektu třídě) je častou úlohou i ve strojovém vidění. Nejčastěji se využívá při kontrole úplnosti montáže: zda je k montáži dodán, případně již namontován správný díl. Ve výrobě je také často třeba identifikovat loga, nápisy nebo kódy.
Řešení této úlohy dosavadními postupy standardního strojového vidění spočívá v jednorázovém porovnání obrazu s ideálním modelem. Model většinou nebývá příliš komplikovaný, nejčastěji sestává z izolovaných charakteristických prvků obrazu objektu (deskriptorů), které lze snadno a jednoznačně identifikovat a převést na binární signál přítomen / nepřítomen. Deskriptory bývají nejčastěji kontrastně nasvícené hrany nebo jejich kombinace (obr. 1). Někdy bývá základem deskriptoru výsledek transformace obrazu (například konvoluční filtrace). Snahou vývojáře je užít co nejméně deskriptorů, nejlépe pro každou třídu jeden. Výstupní vektor je výsledkem logické operace se stavy deskriptorů. Systém se ladí ruční parametrizací deskriptorů tak, aby bylo dosaženo potřebné spolehlivosti klasifikace na dostupných výrobcích. Testovací množina výrobků nemusí být často ani příliš obsáhlá, protože vývojář při ladění využívá své zkušenosti a představivost. Návrh modelu a výběr deskriptorů je nejcennějším know-how firem, které se strojovým viděním zabývají.
Co by nás tedy mohlo přinutit k tomu opustit tuto zavedenou metodu a aplikovat učící se systém? V praxi je to obvykle některý z následujících důvodů:
Realizace neuronové sítě pro zpracování obrazu
obr. 2. Využití neuronové sítě pro klasifikaci objektů v obraze
Již jsme zmínili, že klasifikátor pracuje se vstupním vektorem; většinou se sadou reálných čísel. Tato čísla musí, stejně jako při klasickém řešení, reprezentovat vhodné deskriptory obrazu (obr. 2). Deskriptorů by měl být dostatečný počet (určitě řádově více, než používáme při standardním vyhodnocení obrazu). Na druhou stranu, nemusí každý charakterizovat příslušnost do jedné třídy. Tuto sadu deskriptorů obvykle nevytváříme ručně. V praxi se používají funkce z vhodných knihoven; populární je například KAZE feature detector, který je součástí OpenCV.
Normalizované hodnoty deskriptorů zavedeme jako vstupy do neuronové sítě a nastane proces učení. Existuje řada odkazů na postup trénování a testování neuronové sítě, kde jsou diskutovány vlastnosti trénovací/testovací množiny. Při správném trénování by chybovost měla klesat poměrně rychle a bez oscilací. Pokud se zastaví na vysoké hodnotě a s přibývajícím trénováním neklesá, bývá síť zbytečně složitá (přeurčená) nebo je trénovací množina nevhodná a dochází k přeučení. To se většinou projeví i tak, že chybovost opět začne stoupat. Je třeba si uvědomit, že parametry klasifikátoru tvořeného natrénovanou neuronovou sítí jsou náhodné veličiny, které se parametrům ideálního klasifikátoru pouze více či méně přibližují. Výsledek stejného tréningu se stejnými daty tedy nevede ke stejné chybovosti. Optimální výsledky jsou souhrou vhodné konfigurace sítě, vhodných a vhodně nastavených deskriptorů, vhodné trénovací množiny a postupu tréningu. Není na škodu vědět i při návrhu na pohled jednoduché aplikace něco o vhodnosti parametrů sítě (počet vrstev, počet neuronů..) pro různé vlastnosti klasifikované množiny a zamyslet se nad tím, zda počet vrstev sítě a sada použitých deskriptorů odpovídá charakteru aplikace. Obecně neplatí, že čím složitější síť, tím lepší výsledky.
Konvoluční neuronové sítě
obr. 3. Využití konvoluční sítě pro klasifikaci objektů v obraze
Problém nalezení vhodných deskriptorů obrazu vedl k myšlence získat je také pomocí strojového učení. Tak vznikly takzvané konvoluční sítě. Mají dvě základní vrstvy (obr. 3). V první vrstvě se na obraz aplikuje sada filtrů, tedy konvolucí s různými maskami. Filtrované obrazy se dále upravují a výsledkem je sada deskriptorů. Parametry filtrů (hodnoty prvků masek) se učením optimalizují, takže na konci učení získáme sadu deskriptorů optimálně přizpůsobených charakteru vyhodnocovaného obrazu. Využití operací konvoluce má také výhodu v tom, že vzniklé deskriptory jsou poměrně invariantní k posunutí nebo změně měřítka klasifikovaných objektů.
Tyto deskriptory jsou vstupním vektorem druhé vrstvy, která je v podstatě standardní neuronovou sítí. Natrénovat konvoluční vrstvu je však obrovský problém. Jde o paralelní aproximaci prvků několika maticových masek, což vede k výpočtům ve vícerozměrném prostoru a použití tenzorového počtu. Zajištění konvergence chybovosti konvoluční vrstvy je údajně záležitost statisíců obrázků a týdnů práce. Proto se konvoluční sítě dodávají takzvaně předtrénované, tedy s konvoluční vrstvou již natrénovanou na nějaký typ aplikace, takzvaného modelu. Uživatel pak trénuje jen druhou, klasifikační vrstvu obvyklým způsobem.
Záleží tedy na tom, jak blízký je natrénovaný model tomu našemu (což ale nemusí vždy znamenat, že obrázky jsou si vizuálně podobné). Nejznámější knihovna pro konvoluční síť, TensorFlow od firmy Google poskytuje k volnému stažení množství modelů, jejich charakter však odpovídá tomu, že jde o volně šířený software. Jak sami uznáte, model pro rozeznání pejska a kočičky je v průmyslu k nezaplacení. A tak se může stát, že použití konvoluční sítě poskytne horší výsledky než klasická síť s vhodnými deskriptory. Ideální by bylo trénovat konvoluční vrstvu přímo v aplikaci; při zkušenostech naší společnosti s integrací systémů v průmyslu však pokládáme takový projekt za ekonomicky nerentabilní a prakticky nerealizovatelný.
Specifika nasazení ve výrobě
Kromě výše uvedených problémů má aplikace učících se systémů v průmyslu i další úskalí. Bývá problém opatřit dostatečně velký trénovací a testovací soubor. Pokud je tříd výrobků větší množství, obvykle se všechny nevyrábějí rovnoměrně a ve stejných počtech. A dokud není systém natrénován dostatečně na všechny možné varianty, nepracuje správně.
Jiný problém může být v proměnlivosti rušivých vlivů. Lze vytvořit a natrénovat systém, který správně klasifikuje za mizerných světelných podmínek, z obrázků, se kterými by měl problém i člověk. Ovšem změna osvětlení, která nebyla součástí trénovací množiny, může vést ke zcela chybné klasifikaci. Se stejnou situací se, samozřejmě, můžete setkat i při využití standardních metod vyhodnocení obrazu. Člověk (vývojář) si však takovou situaci umí představit a systém na ni předem adaptovat. Učící se systém ji musí vždy vidět (a ne jednou), aby si ji zapamatoval.
S tím souvisí i otázka spolehlivosti klasifikace. Jak již bylo řečeno, natrénovaný učící se systém je pouze statistickou aproximací ideálního modelu klasifikátoru, lépe či hůře povedenou. Budeme-li chtít ověřit jeho způsobilost k bezchybné klasifikaci stejně, jako ověřujeme způsobilost jakéhokoliv jiného měřicího přístroje pro výrobu, pravděpodobně narazíme. Kritéria dnešních požadavků 100% reliability / zero-failure těžko plní i deterministické systémy zatížené minimální náhodnou chybou.
Další typy aplikací
V předchozím textu jsme se zabývali využitím učících se systémů v úlohách klasifikace objektů ve výrobním procesu. V oboru strojového vidění však existuje ještě jedna velká třída aplikací, pro kterou se učící se systém zdá být vhodným řešením. Je o rozpoznání vady, tedy klasifikace do dvou tříd OK / NOK. Problém je však v tom, že zatímco třída OK je jasně definovaná a opatřit pro ni data pro trénovací množinu nebývá problém, třídu NOK jako konečnou množinu často není možné definovat. Každý integrátor kontrolního systému se setkal se situací, kdy kdekdo ve firmě ví, jak má vypadat bezchybný výrobek, nikdo vám ale jednoznačně neřekne, co je to zmetek. A i kdybyste množinu NOK výrobků definovali, z praktických důvodů nebude možné opatřit potřebný počet zmetků pro trénování. Pro tyto účely vám je vedení firmy určitě vyrobit nedá. A co není natrénováno, to systém správně neklasifikuje. Pro aplikace rozpoznání vad se patrně bude lépe hodit jiná třída učících se systémů, detektory anomálií.
Na závěr ještě shrnutí našich dosavadních zkušeností: Učící se systémy mohou ve strojovém vidění řešit úlohy, které jsou jiným způsobem neřešitelné. Jejich nasazení však nevede k náhradě kvalifikované práce vývojáře prací někoho méně kvalifikovaného. Pouze ji transformuje na práci, která vyžaduje jiný okruh znalostí a praxe.
Otto Havle, FCC průmyslové systémy