Systém VisionLab v náročných aplikáciách strojového videnia
Tvorba aplikácií strojového videnia patrí v oblasti priemyselnej automatizácie medzi zložité a náročné činnosti. Tento odbor sa stále a veľmi rýchlo vyvíja. Pomaly si zvykáme, že počítače môžu v obraze z kamier napr. nájsť a identifikovať ľudské tváre, orientovať sa pri jazde na ceste a zvládajú aj veľa iných úloh. Nové a stále zložitejšie algoritmy dokážu stále viac, ale tiež potrebujú stále viac výpočtového výkonu. Často sa stane, že práve výpočtový výkon je podstatným limitom pri realizácii systémov vizuálnej inšpekcie.
Systémy pre strojové videnie sa v poslednej dobe zjednodušili a sprístupnili väčšej časti užívateľov. Napriek tomu tvorba aplikácii pre strojové videnie sa stále veľmi líši od prevažnej väčšiny zákazkových riešení v priemyselnej automatizácii. Keď potrebujeme merať procesné veličiny, pripojíme vhodné snímače a nakonfigurujeme obrazovky operátorského rozhrania, archiváciu, alarmové stavy, ... Výber prostriedkov pre vizuálnu inšpekciu je podobný výberu zariadení pre klasické aplikácie ale rozdiel je v tom, že svetelné podmienky v mieste nasadenia a ich zmena počas dňa a roka je významným faktorom, ktorý môže viesť k neúspechu realizácie
V článku sa sústredíme iba na spotrebu výpočtového výkonu a na spôsoby ako si vytvoriť nejaké rezervy, ktoré sa v priebehu tvorby aplikácie často veľmi zídu. Aby sme, ale neskresľovali situáciu – stále existuje veľké množstvo jednoduchších aplikácii, ktoré majú nízku alebo aspoň veľmi presne odhadnuteľnú potrebu výpočtového výkonu. Ide väčšinou o vizuálne inšpekcie, kde sa kontroluje napr. prítomnosť dielu prostredníctvom tmavej alebo svetlej škvrny, jednoduchú detekciu vzorov, meranie rozmerov, čítanie textov, čiarových a datamatrix kódov, atď. Na druhej strane stále pozorujeme nárast skutočne komplexných úloh s veľmi zložitými algoritmami, ktoré sú jednoduchými prostriedkami nerealizovateľné.
Pri práci s obrazom je náročnosť zložitých algoritmov na výpočtový výkon pochopiteľná, ale často narážame na nutnosť realizácie operácii, ktoré na prvý pohlaď vyzerajú veľmi jednoducho a napriek tomu nie sú v reálnom čase realizovateľné ani súčasnými viacjadrovými procesormi (CPU). Operácia s každým obrazovým bodom nie je obyčajne príliš zložitá, ale ak sa vyžaduje veľa prístupov k iným bodom obrazu situácia sa komplikuje. Práve pre tento typ práce s obrazom je výborným riešením, prinášajúcim podstatné zrýchlenie, využitie masívneho paralelného výkonu grafického procesora (GPU). Systém strojového videnia VisionLab prostredníctvom grafického procesora pracuje v reálnom čase s obrazom tak, ako by to s využitím CPU nebolo dosiahnuteľné.
Pokročilá interpolácia farebnej mozaiky
Prevažná väčšina bežných kamier je pri interpolácii farebnej mozaiky obmedzená na základnú bilineárnu interpoláciu, ktorá je riešiteľná celočíselnými výpočtami. Na viac výkon kamier nestačí.
Obr. 1: Jasový obraz Bayerovej masky, bilineárna interpolácia a adaptívna interpolácia v GPU
Obraz je potom zaťažený všetkými nežiaducimi artefaktami tohto postupu, ktoré vyplývajú okrem iného aj zo vzájomného priestorového posunu červeného a modrého farebného kanála. Vo výsledku potom pozorujeme v blízkosti kontrastných hrán šachovnicové vzory a modročervené lemovanie.
Obr. 2: Artefakty bilineárnej interpolácie sú viditeľné na kontrastných hranách
Pokročilé algoritmy, ktoré produkujú výrazne čistejší a ostrejší obraz, musia využívať výpočty v plávajúcej rádovej čiarke a obsahujú viac prechodov plochou obrazu. Takýto algoritmus už nie je možné v reálnom čase na prúde dát z kamery riešiť ani procesorom vnútri kamery, ani pomocou CPU v počítači, je však príkladom ideálnej úlohy pre masívnu paralelizáciu v GPU.
Obr. 3: Rozdielový obraz medzi bilineárnou a adaptívnou interpoláciou
Lokálne prahovanie a ostatné obrazové filtre
Mechanizmus lokálneho prahovania je naozaj veľmi jednoduchý, výpočtov je tu minimálne, nie je na prvý pohľad úplne zrejmé, kde by mohol byť pri riešení pomocou CPU problém. Problém sa skrýva v skutočnosti, že pre výpočet každého bodu je potrebné čítať veľa pixelov z okolia. Potom schopnosť GPU a grafických RAM prenášať desiatky Gigapixel za sekundu je značným prínosom. GPU riešenie je tu výrazne rýchlejšie ako snaha o to isté v CPU.
Obr. 4: Porovnanie globálného a lokálneho prahovania
Obrazové filtre vyzerajú na prvý pohľad ako optimálne úlohy pre riešenie v GPU. Často to nemusí platiť univerzálne. Problém môže byť v tom, že mnoho jednoduchých „kernelových“ filtrov nemá príliš vysokú výpočtovú intenzitu (a súčasné viacjadrové CPU tiež nepočítajú až tak zúfalo pomaly). Réžia na prenos obrazových dát medzi systémovou a grafickou pamäťou môže aj stonásobne vyššiu rýchlosť výpočtov „kernela“ v GPU oproti CPU znehodnotiť. Situácia sa ale dramaticky zmení v prípade filtrov s nutnosťou zložitejších výpočtov v plávajúcej rádovej čiarke, ako je to napr. pri transformácii farebných priestorov, riešení saturačných matíc, šumových filtrov atď. Využitie GPU môže zrýchliť tieto kroky až o niekoľko rádov.
Kalibrácia obrazu a iné úpravy geometrie
Programovateľné grafické procesory umožňujú bez zaťažovania CPU riešiť problematiku zmien geometrie obrazu. Virtuálny prístroj „gl_camera“ systému Control Web týmto spôsobom elegantne rieši nielen kalibráciu geometrických skreslení objektívov, ale dokáže napr. korigovať perspektívne skreslenie, odstrániť natočenie obrazu, rozvinúť obraz z povrchu valca či gule. Umožňuje vyrovnať ľubovoľne nelineárne deformovaný obraz.
Obr. 5: Tvorba obrazových máp pri narovnaní perspektívnych skreslení pomocou GPU
Okrem požiadavky na rýchlosť je podstatná aj vysoká kvalita výsledného obrazu. Preto je tvorba výsledného obrazu riešená s vysokou subpixlovou presnosťou programom fragmentového „shader‑a“, ktorý poskytuje zaručene kvalitné a stabilné výsledky na všetkých GPU.
Masívne paralelný algoritmus hľadania vzorov
V aplikáciách vizuálnej inšpekcie je hľadanie obrazových vzorov veľmi často používané. Implementácia tohto algoritmu už ale nie je tak priamočiara, ako tomu bolo v predchádzajúcich prípadoch. Ani súčasné moderné GPU nemajú bohužiaľ stále toľko hrubého výkonu, aby mohli realizovať kompletnú normalizovanú krížovou koreláciu pre všetky pixely obrazu so všetkými pixelmi hľadanej vzorky. Škoda, riešenie hrubou silou by poskytovalo najpresnejšie výsledky, ale normalizovaná krížová korelácia je naozaj výpočtovo príliš náročná. Preto aj GPU algoritmus potrebuje niekoľko optimalizácií výkonu, ktoré spôsobujú nutnosť použiť niekoľko vykresľovacích prechodov. Krok, ktorý je k dispozícii v systéme VisionLab je optimalizovaný tak, aby bolo minimalizované množstvo prenášaných dát medzi pamäťou CPU a pamäťou grafickej karty. Výkon tohto kroku je zvyčajne niekoľkokrát lepší ako u porovnateľného CPU riešenia.
Obr. 6: Porovnanie hľadania vzorky v CPU a v GPU
Identifikácia objektov pomocou „deskriptorov“ významných bodov
Tieto moderné algoritmy sa dostávajú k slovu až v posledných niekoľkých rokoch. Prinášajú veľa skvelých vlastností, avšak sú tiež veľmi náročné na výpočtový výkon. Rozumná implementácia sa nezaobíde bez čo najväčšieho využitia výkonu GPU.
Obr. 7: Výber regiónu na snímanie deskriptorov významných bodov
Základnou myšlienkou je neskúmať obrazové body celého obrazu, ale obmedziť sa iba na pixely v okolí tzv. významných bodov. A navyše ani v tomto okolí nepoužívame normovanú krížovú koreláciu bodov obrazov, ale vzájomne porovnávame vektory čísel tzv. deskriptorov. Pre identifikáciu objektov teda postačí zapamätať si len určitý neveľký počet týchto deskriptorov. Proces identifikácie sa potom už viac podobá hľadaniu podobnosti číselných radov v databázach .
Obr. 8: Objekt je nájdený vo veľkom rozsahu odchýlok expozície, farebnosti, jasu, veľkosti a natočenia
V systéme strojového videnia VisionLab sú pre využitie týchto algoritmov k dispozícii kroky, ktoré do maximálnej miery využívajú schopností programovateľných GPU. Možnosti týchto krokov sú prekvapujúce. Okrem samozrejmej invariancie vzhľadom k jasu, mierke a neobmedzenej rotácii umožňujú s vysokým výkonom vyhľadávať a identifikovať prakticky všetky typy a veľkosti objektov. Metóda je veľmi odolná aj proti obrazovému šumu, zmenám ostrosti obrazu a čiastočnému skrytiu objektov. Jej prostredníctvom je možné s veľkou spoľahlivosťou identifikovať napr. aj ľudské tváre atď.
Záver
cieľom tohto článku je upozorniť širokú odbornú verejnosť na obrovský výkon GPU. Ak sa tento výkon využije pri určitom type úloh zo strojového videnia potom je možné úspešne nasadiť aj inšpekčné systémy, ktoré sú len s využitím CPU v reálnom čase nerealizovateľné.