Vývojář vyrobil umělou inteligenci Charles. Teď se sama prohání v GTA V

  • Strojové učení je dostupné pro každého zkušeného majitele PC
  • Vývojář si to vyzkoušel v praxi a napsal si autopilota
  • Prohání se v GTA a vysílá hru na Twitch

Google, Tesla, Audi… Ne, počkat vlastně všechny současné automobilky, hromada technologických vysokých škol a společností právě teď vyvíjejí systémy autonomního řízení vozidel všeho druhu a někteří je už v omezené míře nasazují do komerčně dostupných automobilů. No dobrá, ale co kdybyste si chtěli takového A.I. řidiče vycvičit i vy doma? Bylo by to možné? Ano!

Strojové učení a počítačové neuronové sítě jsou aktuálně v kurzu, a co je nejdůležitější, jsou dostupné naprosto pro každého, aniž byste museli mít v kapse doktorát z MIT.

Chcete vycvičit program, který bude rozpoznávat věci na fotografii – třeba vaši babičku? Žádný problém, stačí vám Python, TensorFlow od Googlu, tento návod, jak přeučit obrazovou neuronovou síť Inception v3, a nejméně pár desítek snímků vaší babičky pořízených ze všech možných úhlů.

Nechce se vám instalovat a studovat TensorFlow? Vyzkoušejte službu Vize.ai pro strojové učení (k dispozici mají bezplatný tarif).

Pak dáte neuronové síti povel, aby se naučila poznávat na fotografiích vaši babičku, předložíte ji jako malému děcku učebnici (fotografie babičky), a pokud budete mít alespoň trošku výkonný počítač, za pár minut (nebo také hodin) bude hotovo. Pak síti předložíte jakoukoliv fotografii a ta odpoví, s jakou pravděpodobností si myslí, že je na ni i vaše babička.

Boženka

Já si takto před pár týdny vycvičil svoji neuronovou síť Boženka, která namísto babiček rozpoznává na snímcích typ počasí. Boženka od té doby na webu bozenka.cloud a s pomocí cloudového hostingu Azure každých deset minut analyzuje obraz z brněnské webkamery ČHMÚ a odhaduje míru oblačnosti, nicméně umí i některé mnohem praktičtější kousky. Zvládne třeba projít všechny mé fotografie archivované na domácím NASu, a pokud je na nich alespoň kus oblohy, uloží do EXIFu údaj o počasí.

Klepněte pro větší obrázek
Co si Boženka myslí o čerstvém snímku z brněnské webkamery ČHMÚ?

K čemu je to dobré? Třeba k tomu, že si mohu v každém katalogu fotek (třeba Zoner Photo Studio) vyhledat všechny snímky, na kterých je krásná azurová obloha a vyřadit naopak ty s ošklivou a přepálenou zamračenou oblohou.

Klepněte pro větší obrázek Klepněte pro větší obrázek
Rozpoznávání počasí na fotografiích na PC a uložení údaje do EXIF

Pointa přitom nespočívá v tom, že to moje Boženka zvládne s 90-95% úspěšností, ale jednoduše v tom, že jsem ji stvořil během jediného víkendu a to aniž bych měl diplom z analýzy grafických dat a smolil jakési složité algoritmy pro práci s rastrovými daty. Základní kód Boženky (bez obslužných webových stránek) má totiž všeho všudy pár desítek řádků. Vše ostatní za mě udělá sama Boženka a její strojové učení TensorFlow.

Šílený Charles v GTA V

Neuronové sítě pro práci s grafickými daty, kam patří i zmíněná síť Inception v3 pro obecné rozpoznávání objektů ve fotografii, lze přitom použít opravdu k ledasčemu. Jedním z těch nejroztomilejších experimentů je Charles.

Charles miluje GTA V, takže se není čemu divit, že hrou stráví dlouhé hodiny a divoce se prohání digitálními ulicemi tohoto velmi populárního a propracovaného herního světa. Nikomu to nevadí, Charles je totiž nezaměstnaný, nemá rodiče, partnerku a nezná únavu. Charles je program.

Šílený Charles v GTA V: Řídí neuronová síť

Autorem Charlese je texaský vývojář Harrison Kinsley, který na webu vystupuje pod přezdívkou Sentdex, a jelikož jde s dobou, Charlesovo hraní vysílá na populární Twitch.tv.

Tak a teď to nejlepší. Podobného Charlese by si dostatečně výkonnou herní mašinou (grafika s podporou CUDA) mohl postavit naprosto každý a vyslat ji na silnice světa GTA, Kinsley totiž použil jako základ, a stejně jako já u své Boženky, neuronovou síť Inception v3 a většinu kódu celého programu popsal v seriálu na svém webu pythonprogramming.net.

Inception v3 je konvoluční neuronová síť, která se pomocí rozsáhlé databáze fotografii ImageNet naučila, jak vypadají základní předměty, které pak dokáže identifikovat na libovolné vstupní fotografii. Předložte ji tedy fotku s růží a Incepiton odpoví, že s určitou pravděpodobností na snímku našla opravdu růži.

Charles analyzuje snímky ze hry a určí stav řízení

Kinsley si s Inception pohrál trošku jiným způsobem. Jelikož má GTA sám rád, strávil nějaký čas jízdou, ovšem jeho hra se přeci jen od těch ostatních trošku lišila, protože pomocí Pythonu a populární knihovny pro analýzu grafických dat OpenCV (Open Source Computer Vision Library) zaznamenával snímky ze hry jako běžné zmenšené obrázky.

Ukázka drobného programu v Pythonu, který pomocí knihovny OpenCV sejme obrazovku počítače a pokusí se na ní najít lidské tváře:

Klepněte pro větší obrázek
Drobný program v Pythonu sejme obrazovku počítače a označí lidské tváře
import numpy
from PIL import ImageGrab
import cv2
import sys

#Zpracovana data pro rozpoznavani tvare
#XML soubor: https://raw.githubusercontent.com/shantnu/Webcam-Face-Detect/master/haarcascade_frontalface_default.xml
faceCascade = cv2.CascadeClassifier("haarcascade.xml")

#Ziskej obdelnik grafickych dat z monitoru
#Pokud bych chtel specificky vyrez (x, y, sirka, vyska),
#pouziji treba: ImageGrab.grab(bbox=(100,50,240,100))
obrazek = numpy.array(ImageGrab.grab())
#Preved obraz na odstiny sedi pro lepsi analyzu
obrazek = cv2.cvtColor(obrazek, cv2.COLOR_BGR2GRAY)
#Najdi v obrazu tvare
tvare = faceCascade.detectMultiScale(
 obrazek,
 scaleFactor=1.1,
 minNeighbors=5,
 minSize=(30, 30),
 flags=cv2.CASCADE_SCALE_IMAGE
)
#Preved obrazek na RGB barvy
obrazek = cv2.cvtColor(obrazek, cv2.COLOR_GRAY2RGB)
#Nakresli na souradnicich tvari zelene obdelniky
for (x, y, w, h) in tvare:
 cv2.rectangle(obrazek, (x, y), (x+w, y+h), (0, 255, 0), 5)
#Zmensi obrazek na 960x540
obrazek = cv2.resize(obrazek,(960, 540), interpolation = cv2.INTER_CUBIC)
#Zobraz obrazek v okne
cv2.imshow("Tvare", obrazek)
cv2.waitKey(0)
cv2.destroyAllWindows()

Ať už Pythonu alespoň trošku rozumíte, nebo je to pro vás španělská vesnice, odmyslíte-li si mé poznámky, jedná se vlastně jen o pár příkazů.

Tak, to byla jen jednoduchá ukázka s kódem, který snímal plochu počítače, ale podobný použil i Kinsley, když ukládal výřez s oknem hry GTA. Nicméně Kinsley zároveň ukládal ke každému snímku i informaci o tom, v jakém stavu bylo zrovna ovládání. Tedy jestli třeba zatáčel doleva, přidával plyn, brzdil a tak dále. Toho docílil jednoduše tak, že snímal informaci o stisknutých klávesách.

Suma sumárum, výsledkem byla databáze zpočátku půl milionu miniatur (a později rovnou milionu) ze hry GTA V a ke každé připojená informace o řízení.

Klepněte pro větší obrázek
Kinsley pro učení postupně použil snímky ze hry s různým rozlišením. Čím nižší, tím rychlejší učení.

Inception v akci

Teď už pouze stačilo prohnat data neuronovou sítí Incepiton, která se postupně učila, jakému typu řízení odpovídá jaký snímek. Tak například pokud vůz na drobném obrázku zatáčel doprava, neuronová síť podle popisných informací věděla, že se váže ke stisknuté klávese pro zatáčení doprava.

Výsledkem tohoto učení byl pravděpodobnostní model – ono vědění umělé inteligence, který už lze použít obráceně. V tomto případě mu tedy Kinsley mohl předložit jakýkoliv screenshot herní situace v GTA a přeučená neuronová síť Inception v3 s určitou pravděpodobností odhadla, o jaký stav řízení se asi jedná.

Klepněte pro větší obrázek
Charles se učí a jeho přesnost se postupně zlepšuje

Teď už tedy pouze stačilo napojit Charlese na samotnou hru. Kinsley vytvořil opět jednoduchý program v Pythonu, který neustále snímal hru a posílal obrázky přeučené neuronové síti Inception v3, tedy Charlesovi. Charles odhadl, jakému řízení tato situace odpovídá a další obslužný program tento odhad proměnil v samotné řízení – v softwarový stisk adekvátní klávesy.

Ve své podstatě se jedná o naprosto primitivního autopilota, který nemá žádný cíl a paměť. Reaguje pouze a jedině na aktuální situaci – na aktuální obraz, který získá z pořízeného screenshotu. Když se přiblíží křižovatka typu T, zatočí doleva, nebo doprava, protože díky strojovému učení ví, že to tak dělal i Kinsley a nenapálil to v plné rychlosti do zdi.

Charles v akci:

Charles je tedy především demonstrace neuronové sítě, kterou autor použil k tomu, jak udržet automobil v jízdním pruhu. Ostatně jinak je Charles řidičem, kterého byste na silnici opravdu potkat nechtěli, ani milion snímků jakožto učebnice pro jeho strojové učení totiž zdaleka nestačí. Jednoduše proto, že nevystihují všechny myslitelné dopravní situace.

Ostatně jsou to právě studijní data, která jsou základem každého strojového učení a mají tak trochu cenu zlata. Není náhodou, že si s A.I. pohrávají Google, Microsoft a další velké internetové společnosti, které mají k dispozici ohromná kvanta dat, která lze použít k učení. Ti ostatní si musejí pohrávat buď s akademickými vzorky s použitelnou autorskou licencí (třeba právě zmíněná obrazová databáze ImageNet), anebo jim nezbude nic jiného, než si je vytvořit sami. A takové generování databáze se stovkami tisíc drobných a kvalitně popsaných obrázků zabere bez armády dobrovolníků mnohdy až příliš mnoho času.

Je to opravdu jako se školáky z masa a kostí. Bez skvělého učitele matematiky a špičkových učebnic se pro tento předmět prostě nikdy nenadchnou.

Automatické řízení vozů je na vzestupu. Podívejte se na naši diskuzi:

Témata článku: Google, Microsoft, Technologie, Web, Umělá inteligence, Strojové učení, Twitch, Automobily, Neuronová síť, Hry, Doprava, TensorFlow, Zoner Photo Studio, Audi, Python, GTA, Pravděpodobnostní model, Možný úhel, Boženka, Složitý algoritmus, Photo studio, GitHub, Tesla, Omezená míra, Generování

Určitě si přečtěte


Aktuální číslo časopisu Computer

26 procesorů v důkladném testu

Zhodnotili jsme 18 bezdrátových reproduktorů

Jak fungují cash back služby?

Pohlídejte své děti na internetu