Aktuální vydání

celé číslo

06

2018

Systémy strojového vidění

Výrobní a montážní linky

celé číslo

Strojové učení strojového vidění

Strojové učení je často ztotožňováno s umělou inteligencí, přestože jde jen o jednu z jejích podoblastí. Využívá se úspěšně k rozpoznání řeči, dolování dat, optimalizaci řízení nebo k predikci trendů. Důležitou oblastí použití učících se systémů je i zpracování obrazu. Tam se strojové učení používá ke klasifikaci scén, hledání a klasifikaci objektů v obraze nebo k rozpoznávání tváří. Tyto procedury jsou 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ě použití 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 implementaci 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 jako učící se systém v současné době nejčastěji používán systém neuronové sítě pro učení s učitelem (supervised learning). Využívá se 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 to, že takovou síť je dnes možné poměrně snadno realizovat s použ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 dostupné v papírové podobě 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é. 

Použití v automatizované výrobě

Klasifikace (přiřazení objektu třídě) je obvyklou ú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, popř. již namontován správný díl. Ve výrobě je také opakovaně 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 se skládá 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ř. 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 mnohdy 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ů jsou 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 použít učící se systém? V praxi je to obvykle některý z následujících důvodů:

  • Počet klasifikačních tříd je velký a počet deskriptorů by byl rovněž velký. Reálně není v silách vývojáře napsat a odladit program, který by pracoval spolehlivě.
  • Počítá se s tím, že se klasifikační třídy budou časem měnit nebo se jejich počet bude rozšiřovat. Do sady montovaných dílů se budou přidávat další, výrobek se bude modifikovat. V tom případě je většinou třeba rozšířit model, upravit nebo přidat deskriptory a změnit vyhodnocení jejich stavu. Znamená to obvykle podstatný zásah do aplikace, který musí provést příslušný specialista. Učící se systém by měl být schopen naučit se nový typ výrobku a odvést tuto práci za něj.
  • Nejsme schopni nalézt použitelné deskriptory. Tuto situaci často zapříčiňují rušivé vlivy, jako je parazitní světlo nebo odrazy. Někdy lze tyto vlivy kompenzovat, někdy to možné není. Pak je naděje, že učící se systém, který je založen na řádově větším počtu deskriptorů, než je vývojář klasickým programováním schopen vytvořit a nastavit, řešení v procesu učení najde. 

Realizace neuronové sítě pro zpracování obrazu

Klasifikátor tedy 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). Naproti tomu nemusí každý charakterizovat příslušnost do jedné třídy. Tato sada deskriptorů se obvykle nevytváří ručně. V praxi se používají funkce z vhodných knihoven; populární je např. KAZE feature detector, který je součástí OpenCV (pozn. red.: OpenCV je otevřená, volně přístupná multiplatformní knihovna nástrojů zaměřených na zpracování obrazu, zejména v reálném čase: https://opencv.org/).

Normalizované hodnoty deskriptorů jsou zavedeny jako vstupy do neuronové sítě a nastane proces učení. Existuje mnoho odkazů na diskuse o postupu trénování a testování neuronové sítě, kde jsou posuzová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í. Zastaví-li se chybovost na vysoké hodnotě a s přibývajícím trénováním neklesá, bývá síť zbytečně složitá 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 růst. 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ál­ního klasifikátoru pouze více či méně přibližují. Výsledek stejného tréninku 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éninku. Není na škodu vědět, a to i při návrhu na pohled jednoduché aplikace, něco o vhodnosti parametrů sítě (počet vrstev, počet neuronů apod.) 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ídají charakteru úlohy. Obecně neplatí, že čím složitější síť, tím lepší výsledky. 

Konvoluční neuronové sítě

Problém nalezení vhodných deskriptorů obrazu vedl k myšlence získat je také pomocí strojového učení. Tak vznikly tzv. konvoluční sítě. Mají dvě základní vrstvy (obr. 3). V první vrstvě se na obraz použije 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 výsledkem učení je sada 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ě inva­riantní k posunutí nebo změně měřítka klasifikovaných objektů.

Tyto deskriptory jsou vstupním vektorem druhé vrstvy, která je v podstatě běžnou 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 k 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í tzv. předtrénované, tedy s konvoluční vrstvou již natrénovanou na určitý typ úlohy, tzv. 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 který se má použít (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 (www.tensorflow.org), poskytuje k volnému stažení množství modelů, avšak jejich charakter odpovídá tomu, že jde o volně šířený software. A 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 dané úloze; 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 vlastně nerealizovatelný. 

Specifika implementace ve výrobě

Kromě uvedených problémů má implemetace 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. Je-li 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 a 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 lze setkat i při využití běžný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. Natrénovaný učící se systém je pouze statistickou aproximací ideálního modelu klasifikátoru, lépe či hůře povedenou. Bude-li uživatel chtít ověřit jeho způsobilost k bezchybné klasifikaci stejně, jako se ověřuje způsobilost jakéhokoliv jiného měřicího přístroje pro výrobu, pravděpodobně narazí. Kritéria požadavků 100% spolehlivosti či zero-failure těžko plní i deterministické systémy zatížené minimální náhodnou chybou. 

Další typy úloh

Předchozí text se zabýval 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. Jde o rozpoznání vady, tedy klasifikace do dvou tříd: OK a NOK. Nesnáz je ale 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 ale jednoznačně neřekne, co je to neshodný výrobek – zmetek. A i kdyby vývojáři množinu NOK výrobků definovali, z praktických důvodů nebude možné opatřit potřebný počet neshodných výrobků pro trénování. Pro tyto účely je vedení firmy určitě vyrobit nedá. A co není natrénováno, to systém správně neklasifikuje. Pro úlohy rozpoznání vad bude patrně vhodnější jiná třída učících se systémů: detektory anomálií. 

Shrnutí

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 implementace 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, Adam Plháček,

FCC průmyslové systémy

Obr. 1. Vizualizace deskriptorů v aplikaci strojového vidění

Obr. 2. Využití neuronové sítě ke klasifikaci objektů v obraze

Obr. 3. Využití konvoluční sítě ke klasifikaci objektů v obraze