Szerző: Fóti Marcell

2019. november 12. 14:10:00

Mesterséges látás valós időben? A YOLOv3 algoritmus

Az autók önvezetése hatalmas nyomást gyakorol a mesterséges intelligencia-kutatókra. Meg kell oldaniuk a számítógépes látást egyszerre akár 6-8 kamerával, ráadásul valós időben, késleltetés nélkül. Bármilyen jó ötletet szívesen vesznek. A YOLO egy jó ötlet.

HIRDETÉS

Akár van LIDAR az autón, akár nincs, kamerával így is, úgy is fel kell ismerni, meg kell tudni mondani, hogy a tőlünk x méterre lévő függőleges folt az út szélén egy szemeteskuka, vagy egy ember, aki álldogál, de mindjárt lelép a járdáról. (A LIDAR a szúrófényeivel csak letapogat. Annyit “lát” a környezetéből, mint egy fehér botos ember.) Ráadásul a kuka/nem kuka kérdést akár 50 képkocka/másodperces tempóban kell végezni, 6-8 kamerán egyszerre, párhuzamosan. “Embert” próbáló feladat!

Nem véletlen, hogy az önvezető autókban először az Nvidia Drive PX 2, tavasz óta pedig a "túl lassú" Nvidia AI helyett a Tesla által házon belül fejlesztett, hússzor gyorsabb saját neuronprocesszoros hardvere dolgozik az autókban.

Ez az irdatlan teljesítmény azért kell, mert egyrészt a számítógépes látást mesterséges neuronhálózatokkal (Deep Neural Net, DNN) végezzük, és ezek eléggé lassúak (bár grafikus kártyával gyorsíthatók, lásd fent), másrészt az objektumkeresésnek az a hagyományos módja, hogy egy nagyobb képet egy kisebb ablakkal végigpásztázunk, és minden "kisablakot" odaadunk a neuronhálónak feldolgozásra - ezer kisablak ezer felismerési ciklust jelent. Majd néhány nagyobb ablakkal is végigmegyünk a képen, hátha a felismerendő objektum nagyobb, mint a pici ablakunk.

HÁT EZ LASSÚ. NAGYON LASSÚ!

Könnyű belátni, hogy ez a megközelítés nem teljesen ugyanaz, mint amit az élőlények csinálnak. Nekünk nincs kisablakunk, sem ciklusunk. Ha elénk tárul egy kép, egyszerre mindent látunk rajta.  Óriásit léphetne előre a számítógépes látás technológiája, ha ki lehetne iktatni a kisablakos-ciklusos nyekergést a képeken. Pontosan ez az ötlet fogalmazódott meg Joseph Redmon fejében, és tett is a dolog érdekében, feltalálta a YOLO, azaz You Only Look Once valósidejű felismerőalgoritmust, mely százszor gyorsabb, mint a Fast R-CNN (és ezerszer, mint az R-CNN). Joseph egy laza figura, érdemes elmerengeni a CV-jén, amely így néz ki:

josephredmoncv

A YOLO egy olyan algoritmus, amely - mivel egyszerre lát - a korábbi megoldásokhoz képest őrületes tempóban dolgozik, pontosságban vetekszik azokkal, és komplett “tömegjeleneteket” ismer fel anélkül, hogy zavarba jönne. Hogy mit értünk tömegjeleneten? Tömegjelenetet!

yolocrwd

Érdemes megnézni a YOLO hivatalos honlapján a beágyazott videót (amelyből a fenti kép is származik), hogy mi mindent ismer fel, milyen terepen lehet bevetni. A V3 összesen 9000 (kilencezer!) tárgyat, növényt és állatot képes felismerni valós időben egy hagyományos pécén, grafikus gyorsítókártya nélkül.

HOGYAN MŰKÖDIK?

Kezdjük azzal, hogyan látunk mi, élőlények - hiszen ezt kell leutánoznunk. Nálunk egy roppant bonyolult, kibogozhatatlan pókhálóban a “kameránk” által közvetített kép mindegyik “pixele” sok százmillió neuronhoz fut be, ezért tudnak azok egyszerre, egyidőben felismerést végezni. Egyszerű, mint a pofon: ha egyszerre, egy időben mindegyikhez odajut az infó, akkor egyszerre, egyidőben mindegyik el tudja végezni a feladatát. Párhuzamosság, ugyebár.

A YOLO ezt csak emulálni tudja, de elég ügyes módon teszi. Igaz, nem százmillió, hanem csak 13 x 13, azaz 169 (kimeneti) neuronnal dolgozik, ami rémesen kevésnek tűnhet, de valójában így is pompásan elvégzi a feladatát.  Miért pont 13 x 13? Nos, a szerzők csak azt árulják el, miért páratlan szám. Ennek az az oka, hogy a képek többségén középen van “a jelentős” objektum, és azt szerették volna elérni a páratlan felosztással, hogy legyen egy darab kiskocka (azaz egy darab neuron), amely pont középre esik. Lentebb egy ábra a dokumentációból.

mldoc

Mint az ábrán látható, a kimeneti 169 neuron alakjának semmi köze nincs a végleges felismerési eredményhez. Ugyanis mindegyik kis kocka hozzájut az összes pixelhez (ahogy a mi agyunk is), így a helye igazából csak egy virtuális “középpont”, amiből ő kiindul, és felfedez egy tárgyat.

Ilyen értelemben tehát a YOLO-nál nincs “kisablakozás”, mindegyik kisablak ki tud tekinteni a teljes térre. Mindegyik kisablak önállóan képes a 9000 objektumtípus felismerésére, és mindegyikük ügyes keretrajzoló is egyben: maguk a neuronok dobják ki maguból a bounding boxot is, nincs külön detektálási lépés.

Nyilván az a neuron kap nagyobb prioritást a bal alsó kutya felismeréséhez, amelyik középpontosan közelebb van hozzá, de elvileg (és gyakorlatilag is) mindegyik neuron mindent lát. Úgy kell őket lekorlátozni, hogy a tőlük távolabbi régiókra ne tegyenek javaslatot. Így is van elég “hangzavar”, mert mint azt a második képen látjuk, mindegyik neuron egyszerre több javaslatot is tehet, amelyek nemcsak alakjukban, de valószínűségükben is különböznek. Ezekből aztán a legvalószínűbbeket tartjuk meg, a többi megy a kukába.

Hogy milyen teljesítménnyel fut ez a villámgyorsnak kinevezett jószág egy nem túl friss, de azért memóriában erős konfiguráción, azaz Intel Core i5-ös processzoron, 32 GB RAM-mal, arról készítettem egy videót. Egy képkocka feldolgozása két másodpercbe telik, tehát ezen a gépen a sebessége fél képkocka másodpercenként, ami még i9-es CPU esetén sem lenne több, mint 4 fps (ez utóbbit nem mértem meg).

00:19

Yolo V3 teljesítményteszt NetAcademia

Még több videó

Itt tartunk most. Lesz-e még újabb, jobb, hatékonyabb, gyorsabb ötlet az objektumfelismerésben? Természetesen lesz. Fog ez, vagy egy utódja hagyományos PC-n nagyobb teljesítményt nyújtani, mint 4 fps? Nyilván. Csak még hiányzik hozzá a következő nagy ötlet.

Fóti Marcell a NetAcademia Oktatóközpont tulajdonosa és alapítója, jelenleg "AI Reseacher" feladatkörben a mesterséges intelligencia-technológiák oktatási célú feldolgozásában vesz részt.

a címlapról