Tensorflow pillanatok

írta: weiss, 6 éve

A múltkor szembe jött velem egy egyszerű next-next-finish tensorflow tutorial youtube-on, szóval gondoltam felszállok én is az AI/machine learning/bullsitbingó vonatra.

Van egy hobbi projektem, azt csinálja, hogy próbálja megsaccolni mikor fog esni nálad. Van hozzá egy minimáldizájnos web appom is, így mobilon csak elindítom, és látom, mikor jön az eső. Jól hangzik? Kár, hogy az esetek többségében nem működik felhőtlenül /pun intended/, de hát az ember szereti a gyerekét, akkor is, ha haszontalan.

Hogy is működik az egész? Gondolom mindenki látott már radarképet az esőről, akkor is, ha nem tudta hogy az az. Olyan szép színes izé, ami az ország felett megy, araszol. Azt is mondhatnánk, hogy van neki iránya és valamilyen sebessége. Na de hogyan tudjuk meg, hogy mennyi az annyi? Egyszerű, van egy mozgásbecslés nevű algoritmus, ami meg tudja mondani, hogy kép kép között melyik szegmensek merre és mennyit mozdultak el, tehát ennek segítségével meg tudjuk mondani, hogy merre tart az eső, a saját pozíciónkat nyilván ismerjük /ha a Google location API is úgy akarja :D /, ebből pedig már tudjuk, mikor ér hozzánk az égi áldás.

Én a mozgásbecslés legegyszerűbb változatát implementáltam /C-ben inline assemblyvel, jó kis gyakorlófeladat volt :D /, tehát van két képed, az egyikből kivágsz egy kisebbet, és azt elkezded mozgatni a nagyobban, minden pozícióra kiszámolod az összes pixel abszolút különbségeinek összegét, és ha mindent jól csináltál, akkor lesz egy 120 x 120-as képed. Miért pont annyi: mert a kép minden oldalából 60 pixelt vágtam le. Ezt még érdemes színezni, csak hogy fancy legyen.

Még itt vagy? Nem untatlak? Jó.

A végeredmény alapvetően kétfajta lehet: valid vagy invalid. Az előbbi akkor, ha szépen mozog az eső, tipikusan frontok áthaladásakor jellemző, ilyenkor ilyen képet kapunk:

Az utóbbi pedig, ha nincs eső, és csak zaj van a radarképen, vagy nyári záporoknál, mikor az esőnek nincs kitüntetett haladása, egyszer csak elkezd esni, odébb megy 2 km-t, és abba is hagyja. Ilyenkor ez a végeredmény:

Utóbbit nem tudjuk felhasználni, hisz fals eredményeket adna, meg kell valahogy különböztetni a kettőt, és akkor el is érkeztünk ahhoz, amiért a bejegyzésre kattintottál. Gondoltam érdemes volna megnézni, mennyire valószerű gépi tanulással osztályozni a képeket. A projekt már fut egy ideje, így volt egy több ezer elemes válogatott mintám, amit meg tudtam mutatni a tensorflownak, kb. egy óra alatt le is darálta. Külön válogattam 50-50 olyan képet, amit még sosem láthatott, ez lesz a testset. Itt ugye az az érdekes, hogy mennyi pozitív és negatív fals eredmény születik. Ez a 100 kép, felső 5 sor az invalid, alsó 5 a valid.

[Dobpergés.mp3]

TF \ én | valid | invalid
-------------------------
valid | 42 | 0
invalid | 8 | 50

Látható, hogy ami tényleg invalid volt, azt annak is ismerte fel, ellenben 8 esetben valid képeket invalidként osztályozott, néha meglepő magabiztossággal.

Sok kommentárt nem fűznék hozzá, de egy dolgot nem értek teljesen: nekem a 98-as és a 100-as kép pl. nagyon hasonló, ennek ellenére ő a 100-ast 97%-ra validnak gondolta, de a 98-ast meg 51%-ra invalidnak, WTF?

Ha esetleg valaki szintén szeretne játszani, a bejegyzésben el vannak rejtve a linkek.