Díl 8
Zkusíme naučit neuronovou síť zakódovat a posléze dekódovat grafický bitmapový obrázek. Dalo by se tomu říkat komprese obrázků, ale budeme tomu říkat kódování, protože jde o širší využití např. hledání grafických objektů či porovnávání grafických podkladů apod.
Pro tento účel nám nebude stačit jen jedna neuronová síť, ale budeme potřebovat jednu pro systém zakódování a jednu pro dekódování zakódovaných dat. Kódovací síť se naučí obrázek zakódovat ve svých vnitřních hladinách a zároveň i rozkódovat. Hodnoty vnitřních zakódovaných hodnot se pak po kvantizaci použijí jako vstupní parametry pro dekódovací neuronovou síť. Pro lepší orientaci v projektu se podívejte na přiložené obrázky.
Celý obrázek se rozčlení do jednotlivých bloků ve velikosti X×Y. Tyto bloky se rozdělí na řadu pixelů a dále na složky RGB. Hodnoty složek RGB (0 až 255) se normalizují na hodnoty 0 až 1 jako vstup neuronové sítě.
Tyto hodnoty se použijí pro vstup a výstup kódovací sítě i jako výstupní hodnoty pro učení dekódovací sítě.
Příklad: pokud zvolíme blok o velikosti 2×2 dostaneme 4 pixely. Tyto barvy pixelů rozložíme na RGB (3 hodnoty) tzn. 2×2×3=12 hodnot 0 až 1. Vstupní vrstva bude mít 12 neuronů.
Vstupní hodnoty dekódovací sítě jsou vyčteny z prostřední hladiny kódovací sítě. Následně jsou kvantizovány (1-8 bits) na hodnotu v osmi stupních (dle nastavení zkušební aplikace). Hodnoty pro kvantizaci:
Příklad: pokud bude vnitřní hladina obsahovat 8 hodnot a budeme mít nastavenou kvantizaci na 3 bits, dostaneme 8 hodnot 0 až 1 ve stupních po 1/7.
Jak jsme se již zmínili, použijeme dvě neuronové sítě. Jednu pro kódování a druhou pro dekódování obrazu. Vstupní hodnota tvaru neuronové sítě je začátek kódovací sítě, která se symetricky převrátí a rozšíří svoje hladiny.
Příklad: pokud vstup neuronové sítě bude 12-8, automaticky se vytvoří kódovací síť 12-8-12 či pokud bude vstup 18-9-3 vytvoří se kódovací síť 18-9-3-9-18.
Dekódovací neuronová síť bude zepředu zkrácená a zbude jen její zrcadlová část hladin.
Příklad: pro 12-8-12 bude 8-12 a pro 18-9-3-9-18 bude 3-9-18.
Výstupem z kódovací sítě a vstupem dekódovací sítě bude vždy prostřední hladina.
Popis aplikace a ovládacích prvků:
UraxBitmap.zip (C++) aplikace ke stažení (1.12 MB)
(Stažený soubor rozbalte do nějakého adresáře a spusťte UraxBitmap.exe, testovací obrázky pro aplikaci jsou přiloženy)
Systém kódování obrázku neuronovou sítí najde optimální zakódování jednotlivých obrazových bloků. Kombinace bloků, které se v konkrétním obraze nevyskytují, jsou vypuštěny a využity k optimálnějšímu zakódování stávající obrazové matice. Tento způsob lze využít i pro ukládání kompresovaných obrázků, ale bude asi příliš pomalý. Komprese obrázků metodou JPG bude efektivnější.
Obdobné nebo rozšířené způsoby lze, ale využít pro jiné, sofistikovanější zpracování grafických podkladů – snad někdy příště.
Zábavu s obrázky pro vás připravil Shrimphood.net team
-fjura-
Další projekty Neuronové sítě