Pohráli jsme si s umělou inteligencí: Koukne na oblohu a pozná, jaké je počasí

  • Jak dlouho trvá vycvičit počítačové vidění, které pozná počasí?
  • Na běžném laptopu ze začátku jen pár minut
  • Dnes si to vyzkoušíme v praxi
Pohráli jsme si s umělou inteligencí: Koukne na oblohu a pozná, jaké je počasí

O strojovém učení, neuronových sítích a umělé inteligenci jsme už na Živě.cz napsali celé stohy krátkých bleskovek i delších článků, ovšem kam se hrabe běžná teoretická a popularizační omáčka na skutečný experiment, v rámci kterého si vycvičíte vlastní neuronovou síť, která bude rozpoznávat obrázky a bude v tom sakra dobrá.

Přesně to si dnes vyzkoušíme krok za krokem. A nebojte se, nebudete k tomu potřebovat ani superpočítač, ani výkonnou grafickou kartu s technologií CUDA. Vystačíte si s běžným notebookem, a pokud budete trošku trpěliví, tak klidně i s Raspberry Pi 3. Přestože totiž bude naše strojové učení docela mocné, celé to zabere jen pár minut.

Jak toho docílíme? Použijeme techniku již předpočítané neuronové sítě pro Google TensorFlow, kterou jen ohneme k obrazu svému.

Nechce se vám instalovat a studovat TensorFlow? Vyzkoušejte službu Vize.it.

Mocná neuronová síť Inception pro počítačové vidění

Google takových hotových modelů nabízí hned několik desítek na GitHubu a nás bude zajímat Inception v3. Jedná se o tzv. konvoluční neuronovou síť (CNN), jejíž mechanizmus se skutečně tak trochu inspiruje v chování neuronů šedé kůry mozkové zodpovědné za zrakový vjem. Pokud vám tento stručný popis a o něco delší na GitHubu nebude stačit, můžete se začíst do mnohastránkové studie na akademickém katalogu Arxiv (PDF).

Pro nás je podstatné, že Google vycvičil model na obrovské databázi fotografií ImageNet a díky tomu dokáže na vstupních snímcích rozlišit s určitou pravděpodobností nějakou tisícovku různých objektů od předmětů po živé tvory.

Takže když by Inception v3 jako vstup obdržel snímek pandy, vyplivne třeba takovouto odpověď:

Klepněte pro větší obrázek
Testovací program modelu Incepiton. Na obrázku vidí s největší pravděpodobností pandu

Skóre představuje pravděpodobnost, Inception v3 se tedy s 89% jistotou domnívá, že na obrázku vidí pandu velkou. Na dalších řádcích jsou pak ostatní možné kategorie, jejich skóre je však už velmi nízké a hluboko pod 1 %

Celé si to můžete vyzkoušet třeba v návodu Image Recognitation. Stačí nainstalovat Python a běhové prostředí samotného strojového učení Google TensorFlow. Ačkoliv je technologie primárně určená především pro linuxové systémy, TensorFlow dnes podle oficiálního návodu nainstalujete bez problému i na Windows. Pokud máte Windows 10, k podobným experimentům se pak hodí zdejší linuxová příkazová řádka bash v rámci technologie Windows Subsystem for Linux, kterou můžete aktivovat podle tohoto návodu.

Postavím si syntetického meteorologa s počítačovým viděním

No dobrá, ale já nechci rozpoznávat fotky s pandou. Jelikož doma poslední rok buduji chytrou meteorologickou stanici, rád bych si vycvičil strojové učení, které na vstupu dostane třeba snímek z laciné kamery za pár stovek pro Raspberry Pi, která bude namířena do oblak.

Moje neuronová síť poté fotografii oblohy zpracuje a řekne mi, jestli je spíše jasná, nebo zatažená. Heuréka! Můj strojový meteorolog by mi prostě pomocí počítačového vidění analyzoval oblačnost, aniž bych musel kupovat velmi drahý a profesionální optický detektor.

Stroji, nauč se, jak vypadá moje babička!

Je něco takového vůbec možné, aniž bych strávil zbytek svého mrzkého života zahrabaný v dokumentaci TensorFlow, neuronových sítí a chodil na večerní kurzy umělé inteligence pro naprosté zelenáče? Je! Je to možné a je to dokonce jednoduché jako facka.

Jeden z návodů na webu TensorFlow se totiž věnuje technice přetrénování poslední vrstvy s kategoriemi neuronové sítě Inception. Uf, zní to děsivě, ale je to zcela prosté. Jednoduše vezmete hotový a velmi detailní model zpracovaný na superpočítači a jen k němu dopočítáte, jak vypadají vaše vlastní kategorie.

Takovou kategorií by mohla být třeba vaše babička. Čili stáhnete model Inception, vyfotíte babičku dvěstěkrát ze všech možných úhlů a modelu přikážete, ať se na základě dosavadních znalostí, jak vypadají různé předměty, přeučil na vaši babičku.

Bude to mnohem rychlejší, neuronová síť se totiž nebude učit od úplně nuly jako nemluvně, které poprvé otevře oči, ale na základě již stávajících vědomostí o bazálních grafických datech.

Jakmile bude učení hotové (na současném notebookovém procesoru Core i5 a bez využití GPU nejvýše pár minut, na pomalejším železe třeba čtvrthodinku a déle), můžete vašemu čerstvě přeučenému modelu Inception předložit fotografii a strojové učení se pokusí spočítat, s jakou pravděpodobností je na snímku vaše babička.

Čím více takových kategorií vytvoříte (babička, maminka, strýček, tetička), tím více jich bude také Inception v datech hledat. A jediné, co pro to musíte učinit, je vytvořit pro každou z těchto kategorií podadresář. Naprosto srozumitelně to ostatně krok za krokem popisuje návod TensorFlow For Poets (v tomto kontextu doslova TensorFlow pro naprosté lamy) a to především v jeho 8. kapitole.

Jedinou překážkou může být nedostatek vhodných fotografií pro každou z kategorií. Deset babiček vám stačit opravdu nebude. Bez dodatečných úprav a znalosti Pythonu a TensorFlow jich musí být nejméně 200, jinak skončí učení chybou.

Model se přeučuje

Pokud tedy budete mít řádně nainstalovaný Python a TensorFlow, stačí stáhnout skript v Pythonu retrain.py a celé to spustit příkazem (třeba v příkazové řádce):

python retrain.py --bottleneck_dir=bottlenecks --how_many_training_steps=500 --model_dir=inception --summaries_dir=training_summaries/basic --output_graph=retrained_graph.pb --output_labels=retrained_labels.txt --image_dir=adresar_s_fotkami

Skript si sám stáhne aktuální model Inception a poté provede jeho přeučení na nové kategorie podle vašeho zadání.

Klíčový je parametr image_dir, ve kterém musí být podadresáře kategorií a jejich snímků k přeučení. Adresar_s_fotkami by tedy mohl obsahovat složky babicka, teticka, strycek a tak dále a každá z nich alespoň 200 snímků. Fotografie by měly být spíše menší – stačí miniatury, aby nebyl obraz příliš složitý a učení výpočetně náročné.

Z dalších parametrů stojí za zmínku ještě how_many_training_steps, tedy kolik učících cyklů má strojové učení použít. Výchozích 500 by mělo pro základní test stačit.

Jakmile se po pár minutách či desítkách minut (v závislosti na výkonu vašeho PC) vše zpracuje, můžete svůj přetrénovaný model Inception v3 vyzkoušet v praxi. Pomůže třeba tento skript v Pythonu. Stáhněte jej, pojmenujte třeba detekce.py, no a pak už stačí mít po ruce nějakou testovací fotku a celé to spustit příkazem:

python detekce.py testovaci_fotka.jpg

TensorFlow v takovém případě nastartuje upravený model Inception a vypíše jaké kategorie a s jakou pravděpodobností ve snímku našel. Jelikož je seřadí od nejvyššího skóre, ta první hodnota by tedy měla platit.

Pokud by bylo výstupem třeba:

babicka (score = 0.98087)
teticka (score = 0.01913)

Znamenalo by to, že je neuronová síť s 98% jistotou přesvědčená, že se jedná o fotku babičky.

Pokud by to však dopadlo takto:

babicka (score = 0.51087)
teticka (score = 0.48913)

Byla by to plichta a neuronová síť by si to myslela pouze s 51% pravděpodobností. Buď je na fotografii jak babička, tak tetička, anebo jste při učení nepoužili dostatečně pestrá data. Stačí tedy upravit studijní sety, vylepšit je a znovu spustit skript retrain.py.

Klepněte pro větší obrázek
Detektor babiček našel na fotce s 80% pravděpodobností babičku

Můj první model meteorologa

Po rodinné generační odbočce zpět k mé meteostanici. Babičky jsem hledat nepotřeboval, zajímala mě ale ta oblačnost. Vytvořil jsem tedy dvě kategorie jasno a zatazeno a pro každou z nich z webu stáhl asi 300 typických fotek. Kde jsem je sakra získal? Stačilo v Googlu vyhledat obrázky na fráze clear sky a cloudy a použít jejich miniatury (v Chromu jsem stáhl kompletní stránku, čili se stáhly i veškeré přílohy včetně oněch drobných a zcela dostačujících miniatur).

Klepněte pro větší obrázek
Vlevo studijní data pro kategorii s jasnou oblohou a vpravo studijní data pro kategorii se zakaboněnou oblohou

Pak už pouze stačilo přetrénovat model a… A ono to vážně fungovalo. A docela dobře!

Klepněte pro větší obrázek
Test detektoru oblačnosti. S jednoznačnými snímky si poradil bez zaváhání. Podobný systém přitom nad neuronovou sítí Inception vycvičíte během několika minut.

Model s využitím dat z webkamer ČHMÚ

Pokud bych však chtěl rozpoznávat oblačnost třebas i podle jednotlivých druhů mraků a míry oblačnosti, budu potřebovat mnohem lepší studijní data, než snímek jasné modré oblohy kdesi v Karibiku.

Co třeba takové webkamery ČHMÚ? Jsou namířené na oblohu, a na úvodní stránce je hromada ideálních miniatur. Jejich seznam se ke všemu načítá z tohoto JSONu, ve kterém je uložený název souboru každé webkamery.

Klepněte pro větší obrázek
Úvodní stránka webkamer ČHMÚ s animovanými miniaturami. Přesně ty použiji pro učení a test kvality detekce.

V další fázi experimentu jsem si tedy napsal drobný program v Pythonu, který pomocí zmíněného JSONu stáhl všechny miniaturní animované GIFy, jejich jednotlivé snímky vyseparoval a uložil do JPEG a nad každým pak provedl klasifikaci, jestli je na snímcích zatažená, nebo spíše jasná obloha, pomocí čehož je mohl program konečně roztřídit do správných složek jednotlivých kategorií.

Klepněte pro větší obrázek
Program v Pythonu pro stažení animovaných GIFů, extrakci snímků, jejich uložení do JPEG (vše pomocí nástrojů z balíku Imagemagick) a konečně klasifikaci pomocí mého strojového meteorologa

Jelikož byl model zpočátku ještě hodně hloupý, ručně jsem opravil špatná rozřazení a znovu spustil retrain.py nyní již nad novými daty z Česka. Zlepšení bylo patrné na první pohled a s dalšími a dalšími cykly učení se model zpřesňoval a zpřesňoval, až mu nedělal problém ani přeexponovaný záběr, ze kterého nebylo na první pohled jasné, jestli se jedná o bílá oblaka, anebo jen přepálenou, ale temně modrou oblohu bez jediného mráčku. Model však už věděl, že když je pod přeexponovanou oblohou Sluncem prozářený okraj lesa, nejspíše nepůjde o zatažené nebe.

Klepněte pro větší obrázek
Testovací program v Pythonu, který stáhne z ČHMÚ animované GIFy, vyseparuje poslední snímek, analyzuje jej mým strojovým meteorologem a do obrázku vypíše pravděpodobnosti, s jakou si myslí, že je v něm jasná, nebo naopak zatažená obloha. Z celého setu si nebyl stroj jistý jen ve třech případech.

A pro příště s vlastními daty z Raspberry Pi a kamery

No a to už jsem mohl do zbraně konečně povolat svoje Raspberry Pi 3 s levným klonem Raspberry Pi Camera Board (třeba tato z eBaye za dvě stovky) a pomocí jednoduché knihovny Picamera pro Python jsem si napsal drobný skript o pár řádcích, který každých pár minut pořídil snímek oblohy, zmenšil jej a zařadil do fronty pro další učení, abych nemusel krást snímky ze stránek ČHMÚ.

Klepněte pro větší obrázek Klepněte pro větší obrázek Klepněte pro větší obrázek
Raspberry Pi 3 s levným 5MPix klonem Camera Boardu za dvě stovky a zmenšeninou 640×480 pixelů pro strojovou analýzu

Můj strojový meteorolog se toho během pouhých dvou dnů naučil poměrně hodně a inspiroval mě k dalším experimentům s jinými typu neuronových sítí, které by zase analyzovaly číselná data z všemožných meteorologických čidel. Podstatné je ale to, že jsem si vytvořil vlastní detektor oblačnosti, aniž bych dlouhé týdny a s nejistým výsledkem sepisoval algoritmy pro analýzu grafických dat. Strojové učení to udělalo za mě a ve vší komplexnosti.

Takže neváhejte a také do toho skočte po hlavě, právě toto je totiž praktická umělá inteligence dnešních dnů, která může ohromným způsobem usnadnit práci.

Témata článku: Google, Windows, Programování, Linux, Umělá inteligence, Chrome, Neuronová síť, Strojové učení, Raspberry Pi, GitHub, TensorFlow, Python, JPEG, Board, Camera, Goo, Goo.gl, Meteo, Models, Neuron, Panda, Portal, Raspberry, Score, UFO

21 komentářů

Nejnovější komentáře

  • Zbyněk Říha 10. 6. 2017 1:32:09
    no tak jestli je zatazeno nebo ne, to se proste zvednu a dojdu se podivat...
  • Jiří Eimotan 9. 6. 2017 18:30:44
    Poznanim pocasi to zacina, soudnym dnem konci :D Spatne zpravy pro Sarah...
  • cejvik 9. 6. 2017 17:37:00
    Ahoj, má někdo chuť se pustit do něčeho podobného, ale s mikrofonem? Nám...
Určitě si přečtěte

Co je realita a fikce? Brzy to nepoznáme. A.I. ze Stanfordu tvoří fotky z neexistujících měst

Co je realita a fikce? Brzy to nepoznáme. A.I. ze Stanfordu tvoří fotky z neexistujících měst

** Fotografii každý vnímá jako jednoznačný důkaz ** časem to ale přestane platit ** Strojové učení se totiž neustále zdokonaluje

16.  8.  2017 | Jakub Čížek | 13

USB zařízení je možné odposlouchávat ze sousedního portu

USB zařízení je možné odposlouchávat ze sousedního portu

** Crosstalk byl dřív problém paralelních portů, dnes se ho pokusili prověřit na USB ** Zařízení ze sousedního USB portu může odposlouchávat to vedlejší ** Mohou vznikat záškodnické flašky nebo třeba USB lampičky

14.  8.  2017 | Adam Harmada | 19

Nový Skype! Vypadá jinak a je „sociálnější“

Nový Skype! Vypadá jinak a je „sociálnější“

18.  8.  2017 | Markéta Mikešová | 35


Aktuální číslo časopisu Computer

Velký test NVMe a SATA SSD

Máte slabý signál
Wi-Fi? Poradíme!

Jak umělá inteligence opravuje fotky

Kupujete dron? Ty levné se nevyplatí