Hlavní navigace

Zpracování obrazu analogovým počítačem (mozkem): co je uvnitř a proč?

4. 8. 2014
Doba čtení: 8 minut

Sdílet

Mým snem vždy bylo „takysipostavit“ nějakou neuronovou síť. Chtěl jsem ale něco jednoduchého, elegantního a užitečného. Komplikované matematické popisy mě odrazovaly, až jsem narazil na vizuální systém mozku. Poté, co jsem ho okopíroval a pustil, byl jsem šokován jednoduchostí, elegancí a sílou toho, co dokáže.

Co je uvnitř a proč to tam asi je

Analogový počítač pracuje s reálnými čísly a matematickými operacemi, s určitým šumem a nepřesností. Funkci jeho částí lze simulovat i na běžném digitálním počítači pomocí linuxových nástrojů na zpracování obrazu, a tak uvažovat a experimentovat, z jakého důvodu je sestaven zrovna tak, jak sestaven je.

Jako melodramatický podkres pro dnešní díl seriálu o analogovém analyzátoru obrazu – mozku – si můžete pustit tuto analogově syntetizovanou hudbu.

Po studiu různých zdrojů a zkušeností se stavbou simulátoru zrakové části mozku jsem došel k přesvědčení, že systém zpracování obrazu v mozku vypadá zhruba následovně. Některé věci jsou odvozené z vědeckých studií, jiné na základě těchto studií domyšlené, a něco jsem vytvořil jako hypotézu na základě statistických charakteristik běžných obrazových dat, a její smysluplnost jsem pak testoval na mém simulátoru vizuálního systému.

Začíná to detektory světla, kde místo klasické červené, zelené a modré je žlutá, zelená a modrá. Detektory v tomto modelu produkují lineární fotometrický signál. Tedy přímo úměrný počtu fotonů za sekundu dopadajících do detektoru. Tedy ne číselné hodnoty z GIMPu. Hodnoty z GIMPu se musí nejdřív umocnit na 2.2 aby se získal lineární fotometrický signál. Protože mají detektory podstatně jiné vlnové délky, než odpovídá RGB, označují se LMS (long, medium, short wavelength).

Na výrobu LMS se musí umocněné RGB hodnoty prokasírovat maticí 3×3, která se vygoogluje.

Pak se logaritmuje, ale aby se zabránilo mínus nekonečnu ve tmě, přičítá se ke vstupu nejdříve malá konstanta. Jasový signál se míchá ne ze všech třech, ale jen ze dvou detektorů. Mě to překvapilo. Logaritmování eliminuje změny síly osvětlení – tyto způsobí pouze posuv o konstantu. Takže jsou děti ušetřeny situací jako: „Mami, co to je?“ – „To je pomeranč, Pepíčku.“ – „A co je tohle?“ – „To je o něco silněji osvětlený pomeranč, Pepíčku.“

Pak se sčítáním a odčítáním vyrobí 2 barevné signály ve významu log(L/M) a log(Y/S), ktere jdou do PCA – analýzy hlavních komponent. To je lineární transformace (matice), ktera je šitá na míru vlastnostem vstupního signálu. Popíšu podrobně později.

3 kanály – jas a 2 barvy – pak jdou do izotropního waveletu. Tam se obraz rozdělí na frekvenční pasma prostorových frekvencí. Tedy na rozmazaný obraz a hrany různých tlouštěk. Podobně jako hudba se dá rozdělit na basy, středy a výšky.

Následuje zlatý hřeb – Gaborův wavelet. Je to v podstatě směrové AM rádio. Ladí se zde frekvence a úhel – něco jako na satelitu. Nestačí vědět, na jaké frekvenci stanice vysílá, musíte vědět ještě kterým směrem natočit parabolu. To se dělá současně pro všechny možné úhly a frekvence. Úhlů je tam prakticky asi 6 s rozlišením 30 stupňů (protočí se to už po 180 stupních, ne po 360).

Toto rádio je naimplementované jako softwarové rádio, homodyn nebo také synchrodyn, kvadraturní, to znamená dává hodnotu sinové a kosinové složky. Z těch se pak spočítá délka vektoru. Ta nám řekne lokální sílu signálu nezávisle na tom, zda je ve formě tmavé čáry na světlém pozadí, světlé čáry na tmavém pozadí, hrany přecházející z tmava do světla a nebo hrany ze světla do tmava. Síla se zase logaritmuje, což nám umožní analyzovat poměry mezi výsledky vzásadě pomocí sčítání a odčítání. Logaritmus převede násobení a dělení na sčítání a odčítání.

Stejně jako se ve von neumannovských počítačích často používají instrukce mov a add, v mozku se často používá logaritmus a analýza hlavních komponent. Jsou to takové tuctovky, kterými se zde hází na lopaty. ;-)

No a dlouho tu už nebyla zase analýza hlavních komponent, teď to bude přes různé směry (úhly), a tady jako PCA vychází Fourierova transformace. Ta nám dává informaci o síle textury a její směrovosti – dvě čísla, která nám do kruhu říkají, kterým směrem a jak silné je textura anizotropní.

Na tom je pak navěšené vyšší rozpoznávání, jako dekódování očí, nohou, těl, obličejů, zvířat, nástrojů, emoční atmosféry atd. Třeba rozpoznává obličejů je zhruba 6krokové, a na vstupu používá výsledky rozpoznávání očí. Těmi se zabývat nebudu, protože jsou složité, a jak fungují, nevím.

A proč tam je zrovna tohle?

Nabízí se mi otázka, proč tam je zrovna tohle a ne třeba JPEG?

Dle mého názoru hlavní důvod je ušetření na elektrice, což je ekvivalentní přenosu kvalitnější informace při stejně energetické náročnosti. Podle IBM má lidský mozek výkon 37 PFLOPS. Stejný výkon má nejrychlejší turingovský superpočítač světa, National University of Defense Technology Tianhe-2 se třemi milióny Ivy Bridge Xeonovych jader, Kylin Linuxem a spotřebou 16 MW. Takovou má třeba oblouková pec na tavení oceli. Můžete si schválně ty desítky kilovoltů a stovky ampér pronásobit. Čtyřčlenná rodina v elektrickém provedení by pak měla duševní spotřebu 80 MW.

Mimochodem, v zemi, kde byl nejvýkonnější superpočítač světa postaven, se ještě používají parní lokomotivy.

Přírodě se to podařilo nabouchat do průměru 18 cm a postavit se spotřebou pouhých 20 W. I tak mají všechny mozky lidstva dohromady spotřebu 140 GW, což je výkon 70 Temelínů:

(Zdroj: SPŠ Tábor)

gmic je-temelin.jpg -resize 13%,13%,1,3,5 [0] [0] [0] [0] [0] [0] -append x \
    [0] -append y [0] [0] [0] [0] -append y -o 70_temelinu.jpg

To je někde mezi špičkovou elektrickou spotřebou Francie a průměrnou spotřebou rakety Saturn V. A představuje to 1 % celkové energetické spotřeby lidstva. Celková instalovaná výpočetní kapacita na Zemi je pak 259 YFLOPS – 259 kvadrilionu operací v pohyblivé čárce za sekundu. Kdyby myšlení lidstva bylo implementované elektronickými superpočítači, spotřeba by byla 112 PW, 64 % veškeré energie, co planeta přijímá od slunce. Mozek bych nazval osobním superpočítačem.

Ukážu, že za určitých okolností je jedním z triků, jak získat za málo peněz hodně muziky, vzdát se paradigmatu, že počítače by měly být spolehlivé. Pak ale nemůžeme použít běžné digitální algoritmy a je třeba použít algoritmy jiné, které jsou proti chybám robustní.

Za chyby se platí. Odměny.

Jako příklad digitálního kanálu vezmu můj Twibright Optar, kodek ukládající data na papír. Má 400 kB kapacity s bitovou chybovostí 0,1 %, nad níž je Golayův kód, vytvářející spolehlivý kanál s kapacitou 200 kB. Můžeme tedy zdvojnásobit kapacitu, pokud si necháme líbit 0,1% chybovost.

Začneme RGB obrázkem, který má 1bitovou hloubku barevného kanálu, čili 3 bity na pixel. Ten získáme pomoci programu GMIC takovýmto příkazem:

gmic wat.png -div 128 -sub 0.5 -round -mul 255 -o result_1.png

Vyřadíme-li Golayův kód z kanálu, získáme dvojnásobnou kapacitu, a můžeme si tedy dovolit 2 bity na barevnou složku, 6 bitů na pixel:

gmic wat.png -div 64 -o wat.pnm
tail -n +4 wat.pnm > data.pnm
head -n 3 wat.pnm > result.pnm
./flip2 10 <data.pnm >>result.pnm
gmic result.pnm -mod 4 -mul 85 -o result_4.png

Tady jsem si udělal takový prográmek flip2, kterému se dá dvojkový exponent, a on náhodně obrací bity v souboru s pravděpodobností 1:2^exponent. Exponent 10 odpovídá té pravděpodobností 0,1 %, co má náš chybový kanál. V obrázku jsou tečky – v některých se chyby trefily do vyššího bitu, v některých do nižšího bitu.

Mě přijde tento obrázek podstatně kvalitnější než ten sice bezchybný, ale jen 1bitový. Vidíme zde dle mého názoru paradoxní a zajímavý jev, že povolení chybovosti kanálu má za následek zvýšení kvality přenášené informace.

My můžeme jít ještě dále. Digitální kanál funguje tak, že se k symbolům proti naší vůli přičítá šum (nedokonalosti tisku a scanneru), a vzniká přijímaný analogový signál (úroveň šedi nascanovaného dokumentu), který se pak digitalizuje – kvantizuje (program unoptar). Každému je asi jasné, že ten šum v kanálu tu informací kazí. Co si ale myslím že není všeobecně známo, a překvapilo mě když jsem si to uvědomil, že informací dále kazí i ten kvantizér. Pokud kvantizuje hodnoty šedi na 0–0,5 a 0,5–1, je jedno, jestli přišla hodnota 0,1 nebo 0,4, výsledek bude vždy 0. Nevratně se zahazuje informace, zda byl bit solidní, nebo pochybný.

Představme si, že přijmeme hodnotu šedi, která je tak akorát na půl – 0,5. Pro zjednodušení předpokládejme, že šum je symetrický, a že jedničky a nuly jsou vysílány stejně často. Víme, že s pravděpodobností 50 % byl původní bit černý (0) a s pravděpodobností 50 % bílý (1).

Cílem přenosu je, aby přijaty obrázek byl co nejpodobnější vysílanému. To se běžně měří jako RMS – root mean square, neboli odmocnina z průměrného čtverce odchylky. Prostě pro každý přenesený obrázek, každý pixel a každý barevný kanál spočteme, o kolik se hodnota liší, pokaždé to umocníme na druhou a spočteme z toho pak průměr. Na konci to odmocníme.

Co kdybychom při příjmu takového zmetku prostě prohlásili, že bit měl hodnotu 0,5, i když víme, že ji určitě neměl (měl buď 0 nebo 1)? Pro použití bitů v binárním kódu to nijak nevadí – hodnota se počítá jako 2*MSB+LSB, kde MSB a LSB je vyšší a nižší bit.

Odchylka při použití polovičatého bitu pak bude vždy 0,5, RMS bude sqrt(0,5*0,5)=0,5.

Klasický kvantizér si místo toho típne (normálně text po oháčkovávači opravuju, ale u téhle chyby jsem cítil potřebu ji zde nechat. Další příklad, kdy chyby mohou přenášenou informaci vylepšit). V půlce případů se trefí (odchylka 0, 2. mocnina 0), v půlce případů ne (odchylka 1, 2. mocnina 1). Průměr druhých mocnin je 0,5, odmocnina z toho je RMS=0,707.

UX DAy - tip 2

Vidíme, že odstranění kvantizéru snížilo v tomto případě (pouze na těchto pochybných bitech) RMS šumu z 0,707 na 0,5. Abychom implementovali simulaci takového kanálu, musíme nejdříve vypočítat, jak silný je šum, který se k signálu v kanálu přidává. Budu uvažovat gaussovský šum, protože to je šum, který se vyskytuje často, vzniká, pokud se sečte větší množství nezávislých šumových jevů naráz. K tomu použijeme statistický program GNU R.

Podobně se postupuje, když nepřijmeme 50 %, ale třeba 60 %. Optimální výstupní hodnota, při které vzniká nejmenší RMS odychlka od původního obrazu, je rovna pravděpodobnosti, že vstupní bit měl hodnotu 1. Tu můžeme spočítat pomocí Bayesovy věty (ano, stejný Bayes, co se používá na spam filtr), pokud víme, s jakou hustotou pravděpodobností přijmeme přijatou hodnotu od nulového bitu a s jakou hustotou od jedničkového bitu. Tuto informací získáme přímo ze znalosti pravděpodobnostního rozložení hodnot šumu, ale až v příštím díle.

Byl pro vás článek přínosný?

Autor článku

Karel Kulhavý vystudoval operační systémy, sítě a překladače na MFF UK a je autorem optického pojítka Twibright Ronja a spoluautorem textového a grafického webového prohlížeče Twibright Links.