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
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
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í
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í
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
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
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ů
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í
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
|