Moravské přístroje, a. s., zdroj: http://www.mii.cz/art?id=860&lang=405, vytištěno: 21.10.2017 23:33:22

Hlavní stránka  Produkty  Strojové vidění VisionLab

Systém VisionLab v náročných aplikacích strojového vidění
 Nové a stále složitější algoritmy dokáží stále více, ale také potřebují stále více výpočetního výkonu. Často se stává, že právě výpočetní výkon je podstatným limitem při realizaci mnoha systémů vizuální inspekce.

Tvorba aplikací strojového vidění patří v oblasti průmyslové automatizace k složitým a náročným činnostem. Obor se také stále a velice rychle vyvíjí. Pomalu si zvykáme, že počítače mohou v obraze z kamer např. nalézat a identifikovat lidské obličeje, orientovat se při jízdě na silnici a mnoho dalšího. Nové a stále složitější algoritmy dokáží stále více, ale také potřebují stále více výpočetního výkonu. Často se stává, že právě výpočetní výkon je podstatným limitem při realizaci mnoha systémů vizuální inspekce.

Přes značné zpřístupnění a zjednodušení, ke kterému v poslední době došlo, se tvorba aplikací strojového vidění stále velmi liší od převážné většiny zakázkových řešení v průmyslové automatizaci. Potřebujeme-li měřit např. teploty nebo elektrické proudy, připojíme vhodné snímače a zkonfigurujeme obrazovky operátorského rozhraní. Vše bude v naprosté většině případů spolehlivě fungovat. V případě strojového vidění asi nikdy nebude možno vše pouze připojit a zkonfigurovat. Autor aplikace musí nejprve rozhodnout o celkové koncepci a geometrickém uspořádání systému, zvolit typy kamer a objektivů, způsob osvětlení, zastínění a typy osvětlovačů a v neposlední řadě musí zvolit hardware a software pro práci s obrazem a dobře odhadnout nároky úlohy na výpočetní výkon.

Problematika strojového vidění je objektivně dosti složitá a každé počáteční nesprávné rozhodnutí může způsobit neúspěch řešení. Nyní se však soustřeďme pouze na spotřebu výpočetního výkonu a na způsoby, jak si i v této oblasti vytvořit nějaké rezervy, které se v průběhu tvorby aplikace často velmi hodí. Abychom ale nezkreslovali situaci – stále existuje velké množství jednoduchých aplikací, které mají nízkou nebo alespoň přesně odhadnutelnou potřebu výpočetního výkonu. Jedná se o většinu vizuálních inspekcí, kontrolující např. přítomnost dílu prostřednictvím přítomnosti tmavé či světlé skvrny, jednoduché detektoru vzorů, měření rozměrů, aplikace, které čtou texty, čárové a datamatrix kódy atd. Na druhé straně ale stále pozorujeme nárůst opravdu komplexních úloh s velmi složitými algoritmy, které jsou jednoduchými prostředky nerealizovatelné.

Náročnost složitých algoritmů na výpočetní výkon je pochopitelná, při práci s obrazem ale často narážíme na nutnost realizace operací, které na první pohled vypadají velice jednoduše, přesto ale nejsou v reálném čase realizovatelné ani současnými vícejádrovými procesory (CPU). A to i tehdy, když operace s každým obrazovým bodem, i když sama o sobě není příliš výpočetně složitá, vyžaduje mnoho přístupů k jiným bodům obrazu. Právě pro tyto typy práce s obrazem je výborným řešením, přinášejícím podstatné zrychlení, využití masivně paralelního výkonu grafického procesoru (GPU). Systém strojového vidění VisionLab prostřednictvím grafického procesoru pracuje v reálném čase s obrazem tak, jak by to s využitím CPU nebylo dosažitelné.

Pokročilá interpolace barevné mozaiky

Naprostá většina běžných kamer je při interpolaci barevné mozaiky omezena na základní bilineární interpolaci, která je řešitelná celočíselnými výpočty. Na víc výkon kamer nestačí.

Obr. 1: Jasový obraz Bayerovy masky, bilineární interpolace a adaptivní interpolace v GPU

Obr. 1: Jasový obraz Bayerovy masky, bilineární interpolace a adaptivní interpolace v GPU

Obraz je pak zatížen všemi nežádoucími artefakty tohoto postupu, které plynou mimo jiného ze vzájemného prostorového posunu červeného a modrého barevného kanálu. Ve výsledku pak pozorujeme v blízkosti kontrastních hran šachovnicové vzory a modročervené lemování.

Obr. 2: Artefakty bilineární interpolace jsou viditelné na kontrastních hranách

Obr. 2: Artefakty bilineární interpolace jsou viditelné na kontrastních hranách

Pokročilé algoritmy, které produkují výrazně čistší a ostřejší obraz, musí využívat výpočtů v plovoucí řádové čárce a obsahují více průchodů plochou obrazu. Takový algoritmus již není možno v reálném čase na proudu dat z kamery řešit ani procesorem uvnitř kamery, ani pomocí CPU v počítači, je však příkladem ideální úlohy pro masivní paralelizaci v GPU.

Obr. 3: Rozdílový obraz mezi bilineární a adaptivní interpolací

Obr. 3: Rozdílový obraz mezi bilineární a adaptivní interpolací

Lokální prahování a ostatní obrazové filtry

Mechanismus lokálního prahování je opravdu velmi jednoduchý, výpočtů je zde minimálně, není na první pohled zcela zřejmé, kde by mohl být při řešení pomocí CPU problém. Potíž se skrývá ve skutečnosti, že pro výpočet každého bodu je nutno číst mnoho pixelů z okolí. Pak schopnost GPU a grafických RAM přenášet desítky gigapixelů za sekundu je značným přínosem. GPU řešení je zde výrazně rychlejší než snaha o totéž v CPU.

Obr. 4: Srovnání globálního a lokálního prahování

Obr. 4: Srovnání globálního a lokálního prahování

Obrazové filtry vypadají na první pohled jako optimální úlohy pro řešení v GPU. Často tomu tak je, ale nemusí to platit univerzálně. Potíž může být v tom, že řada jednoduchých kernelových filtrů nemá příliš vysokou výpočetní intenzitu (a současné vícejádrové CPU také nepočítají až tak zoufale pomalu). Režie přenosu obrazových dat mezi systémovou a grafickou pamětí pak může i stonásobně vyšší rychlost výpočtů kernelu v GPU oproti CPU znehodnotit. Situace se ale dramaticky změní v případě filtrů s nutností složitějších výpočtů v plovoucí řádové čárce, jako je tomu např. u transformací barevných prostorů, řešení saturační matic, šumových filtrů atd. Pak nám může využití GPU zrychlit tyto kroky až několik řádů.

Kalibrace obrazu a jiné úpravy geometrie

Programovatelné grafické procesory umožňují bez zatěžování CPU řešit problematiku změn geometrie obrazu. Virtuální přístroj gl_camera systému Control Web tímto způsobem elegantně řeší nejen kalibraci geometrických zkreslení objektivů, ale dokáže např. i korigovat perspektivní zkreslení, odstranit natočení obrazu, rozvinout obraz z povrchu válce či koule. Umožňuje srovnat libovolně nelineárně deformovaný obraz.

Obr. 5: Tvorba obrazových map při rovnání perspektivních zkreslení pomocí GPU

Obr. 5: Tvorba obrazových map při rovnání perspektivních zkreslení pomocí GPU

Kromě požadavku na rychlost je podstatná i vysoká kvalita výsledného obrazu. Proto je tvorba výsledného obrazu řešena s vysokou subpixelovou přesností programem fragmentového shaderu, který poskytuje zaručeně kvalitní a stabilní výsledky na veškerých GPU.

Masivně paralelní algoritmus hledání vzorů

V aplikacích vizuální inspekce je hledání obrazových vzorů velmi často používáno. Implementace tohoto algoritmu již ale naní tak přímočará, jako tomu bylo v předchozích případech. Ani současné moderní GPU nemají bohužel stále tolik hrubého výkonu, aby mohly realizovat kompletní normalizovanou křížovou korelaci pro všechny pixely obrazu se všemi pixely hledaného patternu. Škoda, řešení hrubou silou by poskytovalo nejpřesnější výsledky, ale normalizované křížová korelace je opravdu výpočetně příliš náročná. Proto i GPU algoritmus potřebuje několik optimalizací na výkon, které vedou na nutnost několika vykreslovacích průchodů. Krok, který je k dispozici v systému VisionLab je optimalizován tak, aby byla pokud možno co nejméně přenášena data mezi pamětí CPU a pamětí grafické karty. Jeho výkon je obvykle několikrát lepší než u srovnatelného CPU řešení.

Obr. 6: Srovnání výkonu hledání vzorů v CPU a v GPU

Obr. 6: Srovnání výkonu hledání vzorů v CPU a v GPU

Identifikace objektů pomocí deskriptorů významných bodů

Tyto moderní algoritmy se dostávají ke slovu teprve v posledních několika letech. Přinášejí mnoho skvělých vlastností, nicméně jsou také velice náročné na výpočetní výkon. Rozumná implementace se neobejde bez co největšího využití výkonu GPU.

Obr. 7: Výběr regionu pro snímání deskriptorů významných bodů

Obr. 7: Výběr regionu pro snímání deskriptorů významných bodů

Základní myšlenkou je nezkoumat obrazové body celého obrazu, ale omezit se pouze na pixely v okolí tzv. významných bodů. A navíc ani v tomto okolí nepoužíváme normalizovanou křížovou korelaci bodů obrazů, ale vzájemně porovnáváme vektory čísel tzv. deskriptorů. Pro identifikaci objektů tedy postačí zapamatovat si pouze určitý nevelký počet těchto deskriptorů. Proces identifikace se pak již více podobá hledání podobnosti číselných řad v databázích.

Obr. 8: Objekt je nalezen ve velkém rozsahu odchylek expozice, barevnosti, jasu, velikosti a natočení

Obr. 8: Objekt je nalezen ve velkém rozsahu odchylek expozice, barevnosti, jasu, velikosti a natočení

V systému strojového vidění VisionLab jsou pro využití těchto algoritmů k dispozici kroky, které do maximální míry využívají schopností programovatelných GPU. Možnosti těchto kroků jsou překvapující. Kromě samozřejmé invariance vzhledem k jasu, měřítku a neomezené rotaci umožňují s vysokým výkonem vyhledávat a identifikovat prakticky veškeré typy a velikosti objektů. Metoda je velmi odolná i proti obrazovému šumu, změnám ostrosti obrazu a částečnému skrytí objektů. Lze jejím prostřednictvím s velkou spolehlivostí identifikovat např. i lidské obličeje atd.

Strojové vidění pro náročné aplikace

Systém strojového vidění VisionLab umožňuje realizovat i velmi komplexní aplikace. Ve svých schopnostech i vysokém výkonu nám poskytuje rezervy pro nečekané požadavky i pro další rozšiřování aplikačních programů.

RC

Článek tak, jak vyšel v magazínu Elektro průmysl je v PDF podobě zde: ElektroPrumysl_09_2015.pdf.

rc