Článek ve formátu PDF je možné stáhnout
zde.
Segmentace obrazu spočívá v jeho rozdělení na dvě či více částí za účelem získat užitečné informace o snímané scéně. Techniky založené na metodách známých jako deep learning (také Deep Learning; učení do hloubky) automaticky segmentují reálné snímky na části odpovídající konkrétnímu významu. Softwarový systém Matlab, jakožto vývojové prostředí pro vědeckotechnické výpočty, nabízí v oboru segmentace obrazu jak klasické metody, tak techniky využívající deep learning.
„Segmentace obrazu je metoda – nebo spíše skupina metod, založených na různých principech – digitálního zpracování obrazu, sloužící k automatickému rozdělení vlastního obrazu na části (oblasti) se společnými vlastnostmi a obvykle nějakým smysluplným významem. Typickým účelem segmentace obrazu je identifikace popředí a určení oblastí v obraze odpovídajícím významnému prvku zachycené scény...“ (http://cs.wikipedia.org).
Rozdělení obrázku na oblasti je obvykle založeno na charakteristikách obrazových bodů – pixelů. Jedním ze způsobů, jak separovat oblasti v obraze, je např. vyhledat náhlé nespojitosti v hodnotách parametrů pixelů. Skokové změny v hodnotách parametrů pixelů (změna jasu nebo barvy) obvykle naznačují okraj hledané oblasti. Jiné metody rozdělují obraz na části na základě blízkých barevných hodnot nebo podobnosti textury.
Základní metody segmentace obrazu
Obraz lze segmentovat mnoha rozličnými způsoby. K především používaným metodám segmentace patří (obr. 1):
- metody založené na tzv. prahování (hodnocení jasu každého pixelu),
- regionální metody založené na podobnosti pixelů v dané vlastnosti (parametru),
- metody založené na hranicích (detekce hran na snímku),
- pokročilejší metody, jako např. aktivní kontury či segmentace rozvodím.
Efektivní přístup k segmentaci obrazu obvykle vyžaduje kombinaci specializovaných funkcí a nástrojů v komplexnějším prostředí pro analýzu dat, vizualizaci a vývoj vlastních algoritmů.
Segmentace obrazu a Matlab
Softwarový systém Matlab je inženýrský nástroj a interaktivní prostředí pro vědecké a technické výpočty, analýzu dat, vizualizaci, vývoj algoritmů, modelování a simulace. Jde o nástroj určený jak pro pohodlnou interaktivní práci, tak pro vývoj širokého spektra aplikačních programů. O podpoře metody deep learning v prostředí Matlab přehledově pojednává [1].
V oboru segmentace obrazu Matlab poskytuje množství funkcí. Základní prahování lze provést použitím funkce imbinarize, která stanovuje úroveň prahu Otsuovou metodou, popř. lze provést i víceúrovňové prahování. K segmentaci na základě informací o barvě je možné využít jednoduché logické operace k určení oblastí s podobnou barvou nebo provést shlukovou analýzu (funkce kmeans). Pracovat lze v barevném prostoru RGB, L*a*b, HSV či YCrCb. Automaticky vyhledat podobné oblasti v obraze umožňuje také funkce superpixels. Hranice v obrázku vyhledává funkce edge při použití Cannyho hranového detektoru nebo Sobelova filtru. K segmentaci obrazu na základě textury je možné využít filtraci funkcemi entropyfilt, stdfilt nebo rangefilt.
Z pokročilejších metod segmentace je v prostředí Matlab k dispozici segmentace rozvodím (funkce watershed), segmentace aktivními konturami (funkce activecontour) nebo oddělení popředí a pozadí (funkce lazysnapping).
Prostředí Matlab poskytuje též připravenou grafickou aplikaci Image Segmentation App, ve které lze obrázky segmentovat s využitím palety připravených nástrojů.
Co základní metody nevyřeší
Segmentace na základě barev či kontur dokáže obrázek rozdělit tak, že jsou odděleny a ohraničeny jednotlivé objekty. Bez dalších doprovodných informací však nedokáže přiřadit objektům význam. Pokud např. víme, že hledáme červené auto na šedé vozovce, segmentovaná část snímku s převahou červené barvy bude velmi pravděpodobně námi hledané vozidlo.
Co však v případě, že taková apriorní informace není k dispozici nebo jde o složitou scénu s mnoha objekty?
Zde je možné sáhnout k sémantické segmentaci, využívající učení do hloubky – deep learning. Metodami typu deep learning lze rozdělit obrázek na oblasti odpovídající konkrétnímu významu. Ukázka sémantické segmentace obrázku, zde snímku horní části Václavského náměstí v Praze, je na obr 2.
Sémantická segmentace přiřazuje ke každému pixelu v obrázku kategorie, jimiž jsou konkrétní typy objektů. Obrázek se tím rozdělí na oblasti s daným významem a je možné jej využít pro hlubší pochopení snímané scény. Na pozadí sémantické segmentace je využíván tzv. model deep learning, který v sobě nese veškeré nezbytné informace. Žádná další apriorní informace zde tudíž není k segmentaci třeba.
Co je deep learning
Deep learning je metoda strojového učení, kterou je, při použití mnohovrstvých nelineárních výpočetních modelů, získávána užitečná informace přímo z dat. V klasifikačních úlohách dosahují modely deep learning velké přesnosti, která může předčit lidské schopnosti. Modely jsou trénovány s využitím velkého množství označených dat a jejich struktura je založena na hlubokých neuronových sítích (deep networks). Využívají se zejména tzv. konvoluční neuronové sítě (Convolutional Neural Network – CNN), jejichž základem jsou vrstvy provádějící dvoudimenzionální (2D) konvoluci vstupních dat s naučenými filtry. Sítě CNN jsou vhodné zejména ke zpracování 2D dat, jako jsou obrázky.
Mezi jednotlivé konvoluční vrstvy jsou často jako doplněk vloženy vrstvy pro úpravu výstupů. Jestliže je síť určena ke klasifikaci obrázků, bývá zakončena vrstvami zajišťujícími přiřazení klasifikační třídy (hledaného objektu) ke vstupnímu obrázku (obr. 3).
CNN v prostřední Matlab
V prostředí Matlab se s CNN pracuje velmi pohodlně. Jsou zde připraveny funkce k vytváření jednotlivých vrstev sítě, jejich parametry může uživatel nastavovat. Poté vrstvy pospojuje, síť natrénuje a naučenou síť použije na nová data.
Typická klasifikační CNN se může skládat z vrstvy ImageInput pro vstup obrázků, jedné nebo několika za sebou zapojených skupin vrstev Convolution2D + BatchNormalization +ReLU + MaxPooling2D a navazujících klasifikačních vrstev FullyConnected + Softmax +ClassificationOutput (obr. 4).
Prostředí Matlab obsahuje funkce umožňující vytvářet více než dvacet typů vrstev a je zde k dispozici i šablona pro tvorbu vrstev nových, definovaných uživatelem.
Naučení celé konvoluční neuronové sítě z výchozího nastavení vyžaduje ohromné množství trénovacích dat. Alternativním přístupem k učení „od nuly“ je využití předučené sítě, která již sama extrahuje charakteristické rysy ze vstupních dat a kterou postačí „doučit“ pro konkrétní úlohu. Tento přístup, označovaný jako transfer learning, je pohodlnou cestou použití metody deep learning bez nutnosti použít velké množství údajů a bez dlouhé doby učení.
Prostředí Matlab nabízí k využití oblíbené předučené sítě, jako jsou AlexNet (síť naučená s 1,2 milionu obrázků, obsahuje 23 vrstev, klasifikuje objekty do 1 000 kategorií), VGG-16, VGG-19 (Visual Geometry Group – VGG) nebo GoogLeNet.
Vedle sítí se sériově řazenými vrstvami (vrstvy následují jedna za druhou) je možné vytvářet i sítě rozvětvené. V prostředí Matlab lze konstruovat sítě s architekturou DAG (Directed Acyclic Graph). Rozvětvené sítě mohou zvětšit přesnost, usnadnit ladění a umožňují využít oblíbené předtrénované modely (GoogLeNet).
Sémantická segmentace v prostředí Matlab
V prostředí Matlab je k dispozici funkce semanticseg(img,network), která provede sémantickou segmentaci daného obrázku při použití připravené hluboké neuronové sítě (výsledek takto provedené sémantické segmentace obrázku je ukázán na obr. 2).
Efektivní sémantickou segmentaci obrázků umožňuje speciální struktura hluboké neuronové sítě zvaná SegNet [1]. V prostředí Matlab lze sítě SegNet vytvářet při použití funkce segnetLayers. Síť SegNet je síť typu DAG a obsahuje několik skupin vrstev (obr. 5). Každá skupina se skládá z vrstev Convolution2D, BatchNormalization, ReLU a MaxPooling2D nebo MaxUnpooling2D. Na vstupu sítě je vrstva ImageInput pro vstup obrázku a na výstupu sítě jsou vrstvy Softmax a PixelClassification pro přiřazení klasifikačních kategorií jednotlivým pixelům v obrázku.
Na vstup sítě přichází obrázek určený k segmentaci. Skupiny v první polovině sítě jsou označované jako kodéry a slouží k extrakci významných rysů z obrázku, na základě kterých se určují jednotlivé segmenty. V druhé části sítě se nachází stejný počet skupin označovaných dekodéry, které zpětně mapují segmenty vytvořené sítí na původní obrázek. Na výstupu sítě je segmentovaný obrázek se stejnou velikostí jako vstupní obrázek. Počet skupin kodérů a dekodérů si uživatel může zvolit. Na obr. 5 je zobrazena struktura sítě SegNet se třemi skupinami kodérů/dekodérů.
Uživatel si také může zvolit, zda vytvoří „čistou“ síť SegNet, kterou naučí od základu, nebo využije předtrénovanou síť, založenou na síti VGG-16 nebo VGG-19.
Trénování sítě pro sémantickou segmentaci vyžaduje velké množství označených obrázků, kde jsou jednotlivým oblastem přiřazeny kategorie. V prostředí Matlab je k dispozici grafická aplikace Image Labeler, která manuální označování snímků částečně automatizuje a tím celý proces urychluje.
Využití sémantické segmentace v praxi
V současné době jsou typickými oblastmi využití sémantické segmentace tyto obory:
- autonomní řízení vozidel,
- průmyslové inspekční systémy,
- klasifikace satelitních snímků,
- analýza snímků v lékařství.
S dalším nárůstem výpočetní síly lze předpokládat, že se sémantická segmentace nejen bude dále používat stále častěji ve velkých analytických systémech, ale pronikne též do světa vestavných zařízení, zejména v oboru autonomní dopravy.
Literatura:
[1] Deep Learning v prostředí Matlab. Automa. Děčín: Automa – ČAT, 2017, (5), 12–14. ISSN 1210-9592.
[2] BADRINARAYANAN, Vijay – Alex KENDALL a Roberto CIPOLLA. SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation. arXiv preprint. arXiv:1511.00561, 2015.
Jaroslav Jirkovský, Humusoft s. r. o.
Obr. 1. Ukázky metod segmentace obrazu: prahování (A), segmentace podle barev (B), segmentace rozvodím (C), segmentace podle textury (D)
Obr. 2. Sémantická segmentace obrazu metodami typu deep learning
Obr. 3. Princip fungování konvoluční neuronové sítě (CNN): ReLU – aktivační funkce (Rectified Linear Unit)
Obr. 4. Zápis typické klasifikační CNN v prostředí Matlab
Obr. 5. Síť SegNet se třemi skupinami kodérů/dekodérů