SZAKDOLGOZAT FELADAT Münczberg Tamás szigorló mérnök informatikus hallgató részére Valósidejű objektumkövetés mély tanulás segítségével A gépi tanulás új módszerei az intelligens érzékelés számos területét forradalmastották az elmúlt évtizedben. Ezen módszerek közül külön figyelmet érdemel a mély tanulás (Deep Learning), amely a gépi tanulás legtöbb területén state of the art megoldásnak számít. A mély tanulás egyik legfontosabb alkalmazása számítógépes látórendszerekben történik, ahol az összes fő feladat (osztályozás, szegmentálás, detektálás) megoldására alkalmazható. A mély tanulás területén közismert, hogy egy kovolúciós neurális háló értelmezhető, mint egy általános célú képjellemző leíró módszer, ami az eredeti célján felül más látási feladatok elvégzésére is felhasználható. Ezen felhasználási módok közül különös figyelmet érdemel a valósidejű objektumkövetési alkalmazások területe. A szakdolgozat készítés során a hallgató feladata egy olyan rendszer létrehozása, amely képes egy mély neurális háló felhasználásával valósidejű objektumkövetést megvalósítani referenciakép alapján. A hallgató feladatának a következőkre kell kiterjednie: Tanulmányozza át a téma releváns szakirodalmát. Vizsgálja meg, hogy más műhelyek milyen megoldásokat alkalmaznak. Készítsen rendszertervet egy megoldásra, amely képes egy tetszőleges objektum követésének megvalósítására. Végezze el a rendszer fejlesztéséhez és tanításához kapcsolódó feladatokat. Tesztelje a megoldás pontosságát és hatékonyságát. Vizsgálja a megoldást valósidejűség szempontjából Tanszéki konzulens: Szemenyei Márton Budapest, 2017.10.06 Dr. Kiss Bálint egyetemi docens tanszékvezető (Tanszéki levélpapír hivatalos lábrésze)
Budapesti Műszaki és Gazdaságtudományi Egyetem Villamosmérnöki és Informatikai Kar Münczberg Tamás VALÓSIDEJŰ OBJEKTUMKÖVETÉS MÉLY TANULÁS SEGÍTSÉGÉVEL KONZULENS Szemenyei Márton BUDAPEST, 2017
Tartalomjegyzék Tartalomjegyzék... 3 Összefoglaló... 5 Abstract... 6 1 Bevezetés... 7 2 Irodalom kutatás... 9 2.1 A konvolúciós neurális hálók felépítése... 10 2.2 Neurális hálók tanítása... 12 2.3 Objektum felismerés neurális hálóval... 15 2.4 Követés neurális hálóval... 18 3 Feladat specifikáció és tervezés... 21 4 Megvalósítás... 23 4.1 Használt keretrendszerek... 23 4.2 Megoldási lehetőségek mérlegelése... 24 4.3 Megoldás elkészítése... 25 4.4 Aktivációs térkép előállítása... 27 4.5 A program használata... 29 5 Tesztelés... 31 6 Értékelés, konklúzió... 35 7 Továbbfejlesztési lehetőségek és tervek... 36 Irodalomjegyzék... 37 Függelék... 39
HALLGATÓI NYILATKOZAT Alulírott Münczberg Tamás, szigorló hallgató kijelentem, hogy ezt a szakdolgozatot/ diplomatervet meg nem engedett segítség nélkül, saját magam készítettem, csak a megadott forrásokat (szakirodalom, eszközök stb.) használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen, a forrás megadásával megjelöltem. Hozzájárulok, hogy a jelen munkám alapadatait (szerző(k), cím, angol és magyar nyelvű tartalmi kivonat, készítés éve, konzulens(ek) neve) a BME VIK nyilvánosan hozzáférhető elektronikus formában, a munka teljes szövegét pedig az egyetem belső hálózatán keresztül (vagy hitelesített felhasználók számára) közzétegye. Kijelentem, hogy a benyújtott munka és annak elektronikus verziója megegyezik. Dékáni engedéllyel titkosított diplomatervek esetén a dolgozat szövege csak 3 év eltelte után válik hozzáférhetővé. Kelt: Budapest, 2017. 12. 07..... Münczberg Tamás
Összefoglaló Az objektumkövetés célja, hogy mozgóképfelvételen meghatározzuk egy mozgó objektum pozícióját képkockáról képkockára. A követő algoritmusok jelentősége különösen megnövekedett az elmúlt pár évben, köszönhetően az intelligens járművek és a különböző robotok egyre növekvő térhódításának. Mivel a követési feladatot általában szeretnénk minél hatékonyabban, gyorsabban és hibamentesen elvégezni, logikus döntés erre a mély tanulást felhasználni. A mély tanulás segítségével megvalósított objektum felismerés képes felülmúlni az ember objektum felismerési képességét és ezt a képességet kihasználva robusztus objektumkövető alkalmazás építhető. A szakdolgozat célja egy objektum követési feladat megvalósítása mély neurális hálózat segítségével. Az objektum követést egy képfelismerésre előre betanított konvolúciós neurális hálózat segítségével végeztem úgy, hogy a hálózatot, mint egy rögzített jellemző generátort használtam fel. Az elgondolás, hogy a konvolúciós hálózat általánosító képességét kihasználva az általa előállított jellemzővektor felhasználásával történő követés robusztusabb lesz a különböző torzításokra, amik amúgy nagy nehézségeket okoznak a hagyományos, neurális hálózatot nem használó követő algoritmusoknak. A projekt megvalósítására a PyTorch nevű keretrendszert használtam fel. A keretrendszer valójában egy Python függvénycsomag ami a Torch keretrendszer továbbfejlesztett, kibővített változata. A keretrendszer lehetővé teszi a gépi tanulás algoritmusok hatékony implementálását, biztosítja az együttműködést a népszerű Python csomagokkal, mint Numpy, Scipy stb., és támogatást nyújt a GPU-n való futtatáshoz is. Az elkészült algoritmust több videón teszteltem, amik alapján a megvalósított rendszer megfelelően működik.
Abstract The goal of object tracking is to determine the position of a moving object from frame to frame in a video. The significance of tracking algorithms has increased, especially in the last couple of years, thanks to the ever-increasing penetration of intelligent vehicles and various robots. As we usually want the tracking task to be as efficient, fast and accurate as possible, it is logical to use deep learning to solve this task. The object recognition achieved through deep learning can outperform the human baseline, and we aim to use this capability to build a robust object tracking application. The aim of the thesis is to implement an object tracking task with the aid of a deep neural network. Object tracking was done using a convection neural network pre-trained for image recognition by using the network as a fixed feature vector generator. The idea is that expoliting the generalization abilities of the convolutional network by utilizing the feature vector generated by it, the resulting algorithm will be more robust to the various distortions that cause difficulties for the traditional algorithms that do not use the neural network. In order to implement the project, I used the PyTorch framework. The framework is a Python function package that is an enhanced, extended version of the Torch framework. The framework enables effective implementation of machine learning algorithms, ensuring collaboration with popular Python packages such as Numpy, Scipy, etc., and provides support for running on GPU. I tested the completed algorithm on several videos and based on the tests the performance of the tracking method is satisfactory. 6
1 Bevezetés Napjainkban a gépi tanulás egyre népszerűbb és dinamikusan fejlődő kutatási területté vált, köszönhetően a benne rejlő rengeteg lehetőségnek és annak, hogy a legnagyobb technológiai cégek (pl. Facebook, Google, IBM stb.) is rengeteg pénzt és erőforrást fektetnek bele. Szinte bármilyen területen található felhasználási mód az egészségügytől kezdve a biztonságtechnikán keresztül az űrkutatásig. Az gépi látás is egyre inkább része lesz az életünknek (pl. ember és gép interakció, önjáró autók stb.). A képfeldolgozó algoritmusokat gyorsabbá, intelligensebbé tehetjük, ha a gépi tanulás technológiájával kiegészítjük, támogatjuk. A gépi tanulás fontos ágazata a mély tanulás (deep learning), ami a hagyományos neurális hálózatokkal ellentétben nagyszámú rejtett réteget tartalmaz. A mély hálók fejlődéséhez nagyban hozzájárult a grafikus processzorok (GPU)-k árának csökkenése, ugyanis az ilyen nagy hálók tanításának a számításigénye CPU-n nem végezhető el hatékonyan. Az ilyen hálókban minden egyes rejtett réteg egy bemenete az őt megelőző rétek kimenete. A mély neurális hálók is taníthatók felügyelt és nem felügyelt módon és alkalmazható a tanításra a hibavisszaterjesztéses algoritmus. A mély tanulás egyik fontos felhasználási területe a gépi látás, aminek megszámlálhatatlan fontos területe van. A leggyakoribb felhasználási módok pl. az objektum felismerés, objektum detektálás, szegmentáció, él detektálás, objektum követés stb. Ezeken a területeken a mély hálók tekintélyes sikereket értek el, sikerült megközelíteniük, sőt felülmúlniuk az ember képességeit. Az objektumkövetés komplex feladat, amely számos kihívást tartogat. Az algoritmusok hatékonyságát nagy mértékben befolyásolják különböző tényezők, mint pl. a háttér, világítás, takarás, különböző torzítások. Az ötlet miszerint a neurális hálókkal végzett objektum követés hatékonyabb lehet a hálók általánosító képességében gyökeredzik. A háló tanításának lényege ugyanis nem az, hogy a mutatott példákat (ebben az esetben képek) bemagolja és azokat jó osztályokba sorolja, a mutatott példák arra valók, hogy az adott osztályba (pl. autó) tartozó elemekből az azokra legjellemzőbb tulajdonságokat tanulja meg és ezek alapján a jellemzők alapján el tudja dönteni egy eddig még nem látott képről, hogy az mit is tartalmaz. Egy sok mintával megfelelően betanított háló esetében (minimális túltanulás) ezek a jellemzők igen robusztusak, és ellenállóbbak 7
lehetnek a fent említett befolyásoló tényezőkkel szemben, mint a hagyományos követő algoritmusok. Ebben a szakdolgozatban az objektumkövetés megvalósítását tűztem ki célul. A szakirodalom áttanulmányozása és több lehetőség mérlegelése után a kiválasztott követési algoritmus implementálása következett. A követés tesztelése után a programot egy egyszerű felhasználói felülettel bővítettem. A következő fejezetben bemutatom a szakdolgozat témájához kapcsolódó irodalmat és más kutatóműhelyek eredményeit, majd a megoldás specifikációját, a tervezés lépéseit és az elkészült modulokat. A program tervezésének és elkészítésének bemutatása után az elvégzett tesztek részletes ismertetése és elemzése következik. A tesztek során az elkészült követési módszert többféle videón hasonlítottam össze a követés hatékonyságának megállapítása érdekében. 8
2 Irodalom kutatás A mesterséges intelligencia napjaink egyik legmeghatározóbb kutatási területe és ennek köszönhetően temérdek mennyiségű anyag áll rendelkezésre. A mesterséges intelligencia témakörén belül a neurális hálókat kitüntetett népszerűség övezi. Ez a népszerűség annak is köszönhető, hogy a híradásokban is egyre többet hallani a neurális hálók alkalmazásával elért sikerekről. Az egyik ilyen meglepő eredmény például az AlphaGo-Zero projekt [1], ami a világ egyik legbonyolultabb játékának tekintett Go-ban képes volt legyőzni a legjobb játékosokat. Az AlphaGo és a hozzá hasonló szoftverek nagy reményeket fűznek például az Alzheimer-kór vagy a Parkinson-kór gyógyításának kutatásához. A neurális hálók kutatása a 70-es években indult és a biológiából ismert neuronok egyszerűsített modelljét alkalmazták. Ezek a hálózatok kezdetben egy rétegből álltak és csak lineárisan szeparálható osztályozási feladatokat voltak képesek ellátni, majd több réteg bevezetésével nemlineáris szeparálásra is képesek lettek. A neurális hálók a nemlineáris szeparálás képessége miatt igen jól használhatók különböző osztályozási, felismerési problémák megoldására. Az ilyen problémákra nagyon nehéz hagyományo s algoritmikus megoldást találni. A hagyományos többrétegű neurális hálók egy bemeneti, egy kimeneti és több rejtett rétegből állnak. A háló rétegei között teljes kapcsolat van, ami azt jelenti, hogy egy adott réteg egy adott neuronja a megelőző réteg összes neuronjától kap bemenetet. A neuronokra érkező bemenetek különböző súlyozással vesznek részt a neuron kimeneti értékének képzésében. Erre mutat példát az alábbi ábra. 1. ábra: Neuron felépítése [1] 9
A fenti ábrán látszik, hogy a neuron a bemenetek súlyozott összegét egy aktivációs függvényen vezeti keresztül. Ilyen aktivációs függvény lehet például egy signum függvény, ami pozitív összeg esetén 1, negatív összeg esetén pedig -1 értéket vesz fel. 2. ábra: Signum függvény [3] 2.1 A konvolúciós neurális hálók felépítése A konvolúciós hálózatok rendkívül előnyösen használhatók kép bemenetű tanulás esetén, ami köszönhető annak, hogy a működéséből adódóan változatos méretű képek feldolgozására alkalmas és kevesebb paraméter szükséges, mint a hagyományos hálók esetében. A konvolúciós hálókkal számos képfeldolgozási probléma megoldható, ilyenek például az élkiemelés [4], élesítés [5], szegmentáció [6], felismerés [7], detektálás [8]. Továbbá lehetséges olyan konvolúciós hálók létrehozása, amik képesek olyan összetett műveleteket elvégezni, mint például képről vagy videófelvételről leírást készítése az azon látottak alapján [9][10] vagy képek generálása [11]. A konvolúciós neurális hálók felépítése abban különbözik a hagyományos hálókétól, hogy a rétegek között nincs teljes kapcsolat, tehát egy adott réteg neuronjai nem kapcsolódnak az előző réteg összes kimenetéhez, hanem csak a kimenetek egy részhalmazához. Ezt úgy valósítják meg, hogy egy kis méretű konvolúciós ablak reprezentálja a kapcsolatot a rétegek között, amivel végigpásztázzák az adott réteg bemenetét. A konvolúció alkalmazásának további kedvező hatása a paraméterek és a rétegek közötti kapcsolatok csökkenésén túl, hogy a hálózat invariáns lesz az elmozdulásokra. 10
3. ábra: Konvolúciós ablak ábrázolása[12] A konvolúciós rétegek mellet az un. összevonó (pooling) rétegek is elengedhetetlen részei a mély neurális hálóknak mert csökkenti a kép térbeli dimenzióit és ezáltal sokkal mélyebb konvolúciós réteget tudunk alkalmazni úgy, hogy a számítási és memória igény ne növekedjen kezelhetetlen méretűvé. Ezek a rétegek alulmintavételezést végeznek pl. a 4-es ábrán látható módon. Itt egy 2x2-es méretű filter segítségével áll elő az új kép, aminek az új pixelei a filter alá eső terület alatt lévő pixelek maximuma. Az konvolúciós rétegekhez hasonlóan az összevonó rétegek is hozzájáru lnak a háló általánosítóképességének növeléséhez, ugyanis az alkalmazásukkal a hálózat invariáns lesz a forgatásokra. Az összevonó rétegeknek több típusuk van, ilyen például az átlagoló összevonó réteg (avarage pooling), ami az előbbiekben bemutatott réteggel ellentétben nem az filter ablaka alá eső értékek maximumát állítja elő, hanem átlagolást vége. Lehetséges továbbá tanuló alulmintavételezést megvalósítani ún. strided konvolúciós réteggel, ami egy olyan konvolúciós réteg, amelyet csupán minden N. pixel pozícióban számolunk ki, így a kép méretét N-ed részére csökkentjük. 11
4. ábra: Összevonó réteg működése [13] További fontos réteg a Batch Normalization és a drop-out [14]. Az előbbi a kötegekben történő tanítás esetén normalizálja az egyes rétegek kimenetét, így növelhető a háló hatékonysága, másrészt segít elkerülni a háló túltanulását. Az háló hatékonyságának növekedése abból adódik, hogy mivel az egyes rétegek kimenete szerepel a gradiens képletében így, ha ezek normalizáltak, akkor a gradiens numerikus stabilitása növekedik. Másrészt a Batch Normalization réteg használatával elkerülhető, hogy a tanítás során egy-egy rétegben kevés neuron aktiválódjon, így csökkenti a túltanulás kialakulásának valószínűségét. Az utóbbi pedig véletlen-szerűen kinulláz bizonyos neuronokat az általánosító képesség növelése érdekében. A dropout réteg általánosítóképesség növelő hatása onnan ered, hogy a neuronok kivételével redundanciára kényszerítjük a hálót úgy, hogy az egyes példák esetén minél több neuron legyen aktív. A dropout réteget csak a háló tanítása közben alkalmazzuk szemben a Batch Normalization réteggel, ami a háló alkalmazása közben is kifejti hatását. 2.2 Neurális hálók tanítása A hálók tanítására az úgynevezett hiba-visszaterjesztéses (backpropagation) algoritmust használjuk. Ennek a célja, hogy a hibának a paraméterek szerinti deriváltját elő tudjuk állítani, ami egy többrétegű háló esetén nem triviális. A tanító algoritmus két fázisra bontható. Az első fázis során mintákat mutatunk a hálónak (bemenet elvárt kimenet párokat) amik alapján egy meghatározott költségfüggvény segítségével előállítható a hibát jellemző érték. A második fázisban ezt az értéket visszaterjesztjük a 12
megelőző rétegre és frissítjük a két réteg között található súlyokat és ezt addig folytatjuk még el nem érjük a legelső rejtett réteget. A tanítás során a cél, hogy elérjük vagy legalább jól megközelítsük a hibafüggvény minimum pontját. A súly módosítás úgy történik, hogy a hibafelületen a nagyobb gradiens negáltjának irányába mozduljunk el. Ezzel a módszerrel egy lokális minimum megtalálására van lehetőség, ugyanis lehetséges, hogy hibafelületnek több lokális minimumpontja van és a tanítás során a gradienst követve a legközelebbi ilye n lokális minimum helyet találjuk meg. Az ilyen lokális minimum helyekbe történő beragadás elkerülésére több jól használható módszert is dolgozták ki. Az egyik ilyen módszer az úgy nevezett momentum módszer. A momentum módszer lényege, hogy egy adott iterációban a hibafelületen történő mozgás irányának meghatározásához figyelembe vesszük a korábbi irányok hatását is, így képesek vagyunk kimozdulni lokális minimumpontokból. 5. ábra: Tanítás folyamata [1] A hálóban a ReLU aktivációs függvényt használják ez általánosan a legkedveltebb és leginkább használt konvolúciós hálókban. A szigmoid és tangens hiperbolikus függvényekkel szemben gyorsabb konvergenciát biztosít és az egyszerű implementáció miatt gazdaságos [15]. 13
6. ábra: ReLU aktivációs függvény[13] 7 ábra: Softmax függvény 8. ábra: Softmax képlet A háló kimenetén egy logaritmikus softmax nevű nemlinearitás található. Ez egy normalizált exponenciális függvény a kimenetén megadja az adott kép egyes osztályokba tartozásának valószínűségét. Az 8. ábrán a softmax függvény képlete látható, a bal oldali mátrix tagjai azt jelentik, hogy a X bemenetre a paraméterek mellett a K osztályba tartozás valószínűsége mekkora. A jobb oldali kifejezés első tagja normalizálja az eredményt így a baloldali mátrix tagjainak összege 1 lesz. 14
2.3 Objektum felismerés neurális hálóval Mivel a követés megvalósításához objektum felismerésre betanított hálózatot használtam ezért ebben a fejezetben röviden erről is szót ejtek. A konvolúciós neurális hálózatokkal olyan objektum felismerő program implementálható, ami nagy számú különböző objektum felismerésére képes és a hálók általánosító képességének köszönhetően nem csak a tanítás során mutatott példák felismerését, hanem új, a tanítás során még nem látott objektumok osztályba sorolását is meg tudja oldani A felismerésre használt hálózatok általánosan nagy számú konvolúciós rétegből, azok közt pooling rétegekből és végül a konvolúciós rétegek után elhelyezett teljesen csatolt rétegekből állnak. A konvolúciós rétegek feladata, hogy rétegről rétegre különböző, egyre magasabb szintű jellemzőket vonjanak ki a mutatott képekből. A teljesen csatolt réteg feladata a konvolúciós rétegek által előállított jellemzővektor alapján az osztályokba sorolás végrehajtása. Az alábbi képen példaként a vgg16 nevű háló felépítése látható. 9. ábra: vgg16 felépítése [16] 15
10. ábra: SqueezeNet architektúrája [17] A 10. ábra az általam is használt neurális háló (SqueezeNet) architektúráját ábrázolja. A SqueezeNet [17] különlegesége, ahogy a 10. ábrán is jól látszik, hogy ez a hálóarchitektúra nem tartalmaz a softmax réteg előtt teljesen csatolt hálózatot. Ennek a módszernek az előnye, hogy csökkenthető vele a teljesen csatolt hálózatrész miatt fellépő túltanulási probléma. A működés lényege, hogy a softmax réteg előtt egy úgynevezett global avarage pooling 1 réteg helyezkedik el, aminek a segítségével előállítja a keletkező jellemző térképek átlagát és ezt a vektort küldi tovább a softmax rétegnek, ami elvégzi az osztályokba sorolást. További előnye ennek a rétegnek, hogy az így keletkezett jellemző térkép egyszerűen átalakítható úgy, hogy felhasználható legyen objektumok pozíciójának meghatározásához. [18][19] A paraméterek számának ilyen nagy mértékű csökkenését 3 lényegesebb tervezési döntéssel érték el. [17] Az első, hogy az általánosan használt 3x3-as konvolúciós rétegek helyett 1x1-es rétegeket használtak. Ezzel a módszerrel 9-szer kevesebb paraméterre van szükség. A második, hogy úgynevezett squeeze rétegek felhasználásával csökkentették a rétegek közötti be- és kimeneti vektorok csatornáinak számát. A harmadik, hogy a bemeneti képeket csak a háló későbbi szakaszában alulmintavételezik, ugyanis kísérletekkel kimutatták, hogy a rétegek között nagyobb aktivációs térképeket továbbítva a képfelismerési hatékonyság növelhető [18]. 1 A 2. fejezetben bemutatott összevonó rétegek egy típusa. 16
11. ábra: ResNet architectúrája [7] A SqueezeNethez hasonló hálózat a ResNet [7], azzal a különbséggel, hogy tartalmaz teljesen csatolt hálózatrészt, azonban előtte egy global avarage pooling réteg helyezkedik el a konvolúciós hálózatrész kimenetének csökkentése érdekében. A ResNet architektúra legfőbb jellemzője, hogy a rétegei között áthidaló kapcsolatokat tartalmaz, amelyek a tanítás során a gradiens numerikus stabilitását nagyban segítik, így ez a háló akár száznál több réteget is tartalmazhat. 12. ábra: SqueezeNet architektúrája [20] 17
2.4 Követés neurális hálóval A neurális hálózatokkal történő követés többféle módszerrel megoldható feladat. A következőkben ezek közül bemutatásra kerülnek azok, amelyek alkalmazását fontolóra vettem a szakdolgozat elkészítésekor. 2.4.1 Követés fontossági térkép segítségével Ennek a módszernek a lényege, hogy egy úgynevezett fontossági térképet állítunk elő, kihasználva a hálózatok tanításánál használt hibavisszaterjesztéses algoritmus tulajdonságait [21]. Az algoritmus segítségével meghatározzuk, hogy mely súlyok játsszák a legnagyobb szerepet a kép adott osztályba sorolásában, mivel ebből megmondható, hogy a képen mely pixelek voltak relevánsak az osztályozás során. 13.ábra: Fontossági térképek [22] A fenti ábrákon is látszik, hogy ezek a fontossági térképek nem egészen pontosak, zajosak. Ez adódhat abból, hogy a képek leskálázása miatt információt vesztünk. Ezért ezeket a térképeket még fel kell dolgozni, meg kell határozni egy minimális területet a lényeges pixelek sűrűsége alapján, majd a határoló négyszöget ez alapján rajzolhatjuk a képre. A követés folyamán a fontossági térképet minden képkockára külön-külön meghatározzuk. 18
A követés hatékonysága javítható úgy, hogy a háló kimenetén létrejövő jellemző vektorból egy Support Vector Machine (SVM) [23] segítségével elkülönítjük az előtér és háttér elemeket reprezentáló értékeket és csak a követendő objektumnak megfelelőket terjesztjük vissza, így egy osztályspecifikus jellemző térképet kapva. 2.4.2 Követés jellemzővektorok összevetésével Ez a módszer is egy objektum felismerésre betanított hálót használ úgy, hogy az utolsó teljesen összekapcsolt réteget, ami az osztályokba sorolásért felelős, a követés során nem használjuk [18]. Az utolsó réteget egy Radial Basis Function (RBF) réteggel helyettesítjük. Az RBF réteg működésének lényege, hogy kiszámítja a bemeneti vektor és a rétegben tárolt referencia vektor közötti távolságot. (1) Első lépésként az RBF rétegben be kell állítani a referencia vektort, ez történhet úgy, hogy detektáljuk az első képkockán a követendő objektumot, kis szeletekre vágjuk és a szeleteket egyenként átengedjük a konvolúciós rétegeken, majd a keletkező jellemző vektort beállítjuk az első RBF neuron referencia vektorának és így tovább eljárva a kép többi szeletével. A követés során az egész képkockát kis szeletekre vágjuk és egyenként átengedjük a konvolúciós rétegeken, majd az RBF réteg elvégzi az összehasonlítást. Az RBF kimenetei alapján előállítható egy térkép, ami a referencia objektumhoz leginkább hasonló területeken kicsúcsosodik. Ezen a térképen egy egyszerű küszöbözéssel meghatározható az objektum pozíciója. 2.4.3 YOLO objektum detektálás A YOLO (You Only Look Once) [8] módszer lényege, hogy az objektum detektálást visszavezeti egy regressziós problémára. A bemenete a kép pixelei, a kimenete a befoglaló keret koordinátái és a detektált objektum osztályokba tartozásának valószínűségei. Ez az objektum detektálási módszer jól használható követésre mert rendkívül gyors, ugyanis csupán egy detektálásra betanított hálóra van szükség, amin képkockánként átküldve a videót, a háló kimenetén már rendelkezése is áll az eredmény. 19
A háló tanításához befoglaló keretekkel ellátott és felcímkézett tanítókészlet szükséges. A tanítás során a hibát a valós és a jósolt befoglaló keret metszetéből származtatjuk, úgy, hogy a két keret közti átfedésben lévő rész területét elosztjuk a két négyzet által együtt lefoglalt terület nagyságával. Az ezzel a módszerrel előállított pontszám annál nagyobb, minél nagyobb az átfedés az elvárt és a jósolt befoglaló keret között, így a hiba ennek a negáltja. 2.4.4 Objektum követés osztály specifikus aktivációs térképpel Az objektum felismerésre betanított hálózatokból egyetlen előreterjesztésből is kinyerhetők információk az objektum lokalizációjáról, a konvolúciós rétegek által generált jellemzővektorok alapján [24]. A megoldás nem igényli a háló újra tanítását, ugyanakkor a detektálás javítható, ha nagyobb aktivációs vektorokat használunk a rétegek között. Ehhez egy már előre tanított hálóban szükséges az összevonó rétegek kicserélése, majd a háló finomhangolása. Az általam választott modell esetében viszont elégséges méretűek az aktivációs vektorok a detektálás megvalósításához. A követés hatékonysága az első módszeréhez hasonló, az aktivációs térképet még fel kell dolgozni, hogy pontosabban detektálhassuk 20
3 Feladat specifikáció és tervezés Ennek a fejezetnek acélja, hogy meghatározza a megvalósítandó alkalmazás specifikációját, bemutassa a tervezés menetét az elkészült modulokat azok felelősségeit és a köztük lezajló kommunikációt. Az elkészítendő alkalmazás egy olyan program, ami egy előre kiválasztott osztályba tartozó objektum követésére alkalmas. A kiválasztható objektumok halmazát az egy kiválasztott képkockán, a háló által felismert objektumok halmaza adja. A követendő objektum kiválasztása után képkockáról képkockára meghatározzuk annak helyzetét úgy, hogy egy befoglaló négyszöget rajzolunk a feltételezett pozícióba. A cél, hogy a feldolgozás kevés erőforrással GPU használat nélkül is a videó túlzott lassulása nélkül megtörténjen, ugyanis a szakdolgozat elkészítéséhez használt számítógép Intel Core i3-as processzorral 4GB RAM memóriával és a processzorba integrált videókártyával rendelkezett. Az integrált videókártyát azonban nem tudjuk használni mert nem támogatja a CUDA-t, ami szükséges a GPU általános célú használatához. A megvalósítás lépései 3 részre bonthatók: először a videókezelés, a követés és végül a felhasználói felület elkészítése. Ezek a feladatok 3 különböző modulban valósulnak meg: UI, Tracker, VideoPlayer. Az UI modul magába foglalja az osztálydiagrammon is látható Application és OwnVideoWidget osztályokat. A Tracker osztály feladata az objektum követés végrehajtása. A VideoPlayer osztály a videólejátszás vezényléséért, a UI-modul pedig a felhasználói felület megjelenítéséért és kezeléséért felel. Az osztálydiagram ábráján nem szerepelnek az NNUtils és ImageUtils modulok, mert eszek nem szerveződnek osztályba, csupán függvényeket tároló modulok, amiket az ábrán lévő modulok többsége felhasznál. Az NNUtils a neurális hálók kezeléséhez tartalmaznak segédfüggvényeket, míg a ImageUtils képkezelésre, transzformációkra ad megoldásokat. A modulok közti kommunikáció globális változókon és egymásnak átadott referencia objektumokon történik. Az Application osztály tartalmaz referenciát az OwnVideoWidget, és VideoPlayer objektumokra, így az képes vezérelni a videólejátszást és meg tudja jeleníteni a felületen. Az OwnVideoWidget a QWidget osztályból származik, hogy a Qt-t használó alkalmazásunk képes legyen megjeleníteni. Erről bővebben a 4.3 fejezetben olvashatunk. A videók vezérlését a grafikus felületen a 21
felhasználó különböző gombok segítségével tudja elvégezni, köszönhetően a Qt keretrendszer eseménykezelő rendszerének. A VideoPlayer osztálynak inicializáláskor megadásra kerül egy Tracker objektum, így a VideoPlayer objektum a Tracker objektum megfelelő metódusának felhasználásával tudja módosítani a képkockáit úgy, hogy azon a követési eljárásnak megfelelően megjelenjen a befoglaló keret. A későbbiekben, ha új követési metódusokat szeretnénk implementálni, akkor a TrackerInterface osztályból kell származtatnunk az új követési módszert megvalósító osztályt és implementálni kell az interfészben deklarált metódusokat. 14. ábra: Alkalmazás moduljai 22
4 Megvalósítás Ebben a fejezetben először bemutatom a használt keretrendszereket, majd részletezek néhány megoldási lehetőséget. A megoldási lehetőségek bemutatása után, a megvalósítás részletei következnek, ahol kitérek a használt neurális hálózat modelljének bemutatására és a követési algoritmus működésére. Végül a fejezet végén bemutatásra kerül az elkészült program, felhasználói felülete és annak használata. 4.1 Használt keretrendszerek A program írásához a PyTorch keretrendszert választottuk. Ez a Torch gépi tanulás keretrendszer Python implementációja, amit a Facebook mesterséges intelligenciával foglalkozó kutató csoportja fejlesztett. A különbség, hogy a Torch C implementációja egy LUA interfészen keresztül érhető el. A PyTorch viszont a Torch forrásokat Python-ban teszi elérhetővé és GPU-n való futtatást tesz lehetővé a legtöbb függvénynek. A keretrendszer másik nagy előnye, hogy egyszerűen használható függvényeket kínál már létező neurális hálózatok módosításához anélkül, hogy újra fel kéne építeni az egész hálózatot. Videók beolvasásához, illetve egyéb alapvető képfeldolgozási műveletekhez a OpenCV könyvtárat használtam. Ez egy C/C++ nyelven íródott gépi látás és gépi tanulás algoritmusokat implementáló függvénycsomag. A Numpy egy népszerű Python csomag, ami támogatást nyújt többek között több dimenziós mátrix műveletek vagy lineáris algebrai műveletek elvégzéséhez, például az OpenCV is Numpy tömböt használ a képek tárolására. A Numpy array és Torch tenzorok közti átalakításokhoz a keretrendszer támogatást nyújt, így kényelmesen és biztonságosan elvégezhetőek. Diagramok rajzolásához, ábrák készítéséhez a Matplotlib csomagot használtam. A program felhasználói felületének kialakításához a Qt keretrendszert használtam. A Qt-t azért választottam mert, támogatja a gyors alkalmazásfejlesztést (RAD), így a felhasználói felület grafikus módszerekkel összeállítható és keretrendszer előállítja a kívánt kódot. A grafikus környezetet az alkalmazás felületének összeállításához a QtDesigner program biztosítja. A keretrendszer Python oldalról egy PyQt nevű interfészen keresztül érhető el és úgynevezett widgeteket biztosít a felhasználói felület építéséhez. Ilyen widgetek például a gombok, legördülő listák, 23
címkék stb. A Qt továbbá lehetőséget biztosít saját widgetek definiálásához a megfelelő osztályból 2 történő származtatás útján. A program írásához az InteliJ IDEA PyCharm fejlesztőkörnyezetét használtam, aminek előnye, hogy kifejezetten Python fejlesztéshez készítették, aminek köszönhetően számos olyan fejlesztést megkönnyítő funkcióval rendelkezik, mint például Python-ra szabott szintaxis kiemelés, automatikus kódkiegészítés és könnyen használható debugger. 4.2 Megoldási lehetőségek mérlegelése A 2. Fejezet végén több megoldás került bemutatásra, melyek közül az utolsóként bemutatott módszer került megvalósításra (követés aktivációs térkép segítségével). Ebben az alfejezetben sorra veszem a felmerült megoldási lehetőség előnyös és hátrányos tulajdonságait, amik befolyásolták a döntést Az első módszer, ami felmerült a jellemzőtérkép segítségével történő követés. A jellemzőtérkép előállítása gyorsan végrehajtható művelet, viszont a detektálás pontossága nem valami jó. Ezen lehet javítani SVM használatával úgy, hogy a visszaterjesztés előtt elkülönítjük vele az objektumhoz és a háttérhez tartozó képpontokat. Ehhez viszont egy olyan, nagy méretű tanítóhalmazra lenne szükség, amiben a tanítómintákban meg vannak jelölve az objektumhoz és a háttérhez tartozó pontok. Egy ilyen tanítóhalmaz előállítása azonban rendkívül költséges. A jellemző vektorok összevetésével megvalósított követés pontos, valamint kevés paraméterrel rendelkező háló használata esetén a jellemző vektorok kinyerése meglehetősen gyors. Én azonban szerettem volna kihasználni a hálózat objektumfelismerési képességét is, ehhez pedig összetettebb hálóra 3 volt szükség, ami a sok előreterjesztés miatt számottevően lelassítaná a folyamatot. A YOLO módszerre alapuló detektálás gyors, hatékony és egyszerűen implementálható. Az eljárás nem igényel további bonyolult algoritmusokat, továbbá az objektum pozíciója egy egyszerű előreterjesztéssel előáll a háló kimenetén. Egyetlen 2 QWidget 3 A felhasznált modell (SqueezeNet) esetében ez kb 1.2 millió paraméter 24
hátránya, hogy a háló tanításához nagy számú befoglaló keretekkel és objektumcímkékkel ellátott tanítóhalmaz szükséges. Az osztályspecifikus aktivációs térkép is egyszerűen előállítható, és a YOLO-hoz hasonlóan az objektum pozíciója egy előreterjesztéssel és kis számolással előállítható. A detektálás hatékonysága hasonló a fontossági térképpel való követéshez, végül azért döntöttem -e mellett a módszer mellett, mert a térkép előállítása egyszerűbb, mint az első esetben és nincs szükség további tanításra, felhasználható egy képfelismerésre előre betanított hálózat. 4.3 Megoldás elkészítése A program megvalósítása során szempont volt az objektumorientált személet, valamit az, hogy a program a későbbiekben egyszerűen bővíthető legyen újabb követési módszerek hozzáadásával. A neurális hálózat kezeléséhez készített segédfüggvényeket egy NNUtils modulba gyűjtöttem. A modul többek között a háló inicializálásához, a háló konvolúciós részének kimenetének vizsgálatához stb. tartalmaz függvényeket. A képfeldolgozáshoz és különböző konverziók támogatására az ImageUtils modul tartalmaz függvényeket. Megtalálhatók benne képek megjelenítéséhez, előfeldolgozásához és Numpy array, QImage és PIL formátumok közötti konverziós metódusok. Ezekre azért van szükség mert az OpenCV Numpy array-t, a Qt keretrendszer QImage formátumot a pytorch pedig a PIL használatát részesíti előnyben. Az alábbi kódrészlet a képek előfeldolgozásakor használt transzformációk láncolatát definiálja. A pytorch előre betanított hálói az ilyen módon előkészített képeket várják bemenetükként. A kód első lépésként a képek skálázását hajtja végre, majd tenzorrá konvertálja és végül, előre megadott átlag és szórás értékekkel normalizálja azokat. A kódban szerepló átlag és szórás értékek az előre tanított hálók tanítása során kiszámított és felhasznált értékek. A következő alfejezetben a normalizálás fontosságára és működésére még kitérek. image_transform = transforms.compose([ transforms.scale(256), transforms.totensor(), transforms.normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) 25
A Tracker és a VideoPlayermodulok felelőssége kulcsfontosságú, az előbbi a követés a második a Videó kezelésére hivatott. A VideoPlayer objektum úgy állítja elő a képet, hogy az a felhasználói felület által már egyszerűen kezelhető legyen, továbbá tartalmaz egy referenciát a Tracker objektumra így az állapotától függően (videólejátszás, követés stb.) tudja a képkockákat módosítani. A felhasználói felületet a QT4 Designer program segítségével állítottam elő. A videó megjelenítéséhez szükség volt egy saját QWidget osztályból leszármazott osztályra, ami a Videoplayer objektum által küldött képkockákat meg tudja jeleníteni. Ez a QWidget osztály paintevent függvényének felüldefiniálásával valósult meg úgy, hogy a video lejátszás egy külön szálon fut és egy FIFO objektumba tölti a beolvasott vagy előállított képkockákat, amit a felhasználói felület egy időzítő ütemezése alapján vesz ki és jelenít meg a képernyőn. 4.3.1 Képek előfeldolgozása Számos tanulmány bizonyítja, hogy különböző előfeldolgozási technikák segítségével nagyobb numerikus stabilitást, így lényegesen jobb eredményt érhetünk el a tanítás során [1]. A nyers képeken a pixelek értéke széles határok között mozog és ez azt kockáztatja, hogy egyes neuronok a tanítás elején telítődnek és így rossz lesz a tanulás hatékonysága. 15. ábra: előfeldolgozás lépései, első ábra a feldolgozatlan adathalmaz, középső ábra az átlag kivonása utáni adathalmaz, harmadik ábra a szórással elosztott adathalmaz [13] Első lépésként átméretezzük a háló bemenetének megfelelő méretűre. A második lépés az adathalmaz centralizálása az origóban, ezt úgy érjük el, hogy külön az Y, U és V csatornák értékeit átlagoljuk az egész adathalmazra vonatkozóan majd az átlagokat kivonjuk. Az utolsó lépés a normalizálás, aminek során az adathalmaz szórása nagyjából egységnyi lesz. Ehhez az egész adathalmaz csatornáit vesszük egyesével, kiszámítjuk a szórásukat és leosztjuk vele a pixelek értékeit., majd ezt kivonjuk. 26
4.3.2 Használt neurális hálózat A PyTorch torchvision csomagjában található models modul tartalmaz néhány előre betanított hálót: AlexNet [1], VGG [25], ResNet [7], SqueezeNet [17], DenseNet [26], Inceptionv3 [27]. Ezek a hálók az ImageNet kép adatbázison lettek tanítva képfelismerésre. Ezek közül a SqueezeNet bizonyult hatékonynak, ugyanis jóval kevesebb paramétert tartalmaz, mint pl. az AlexNex és maga a modell is kevesebb helyet foglal a memóriában, ugyanakkor az objektumfelismerési hatékonysága eléri az előbb említett hálóét. A második fejezetben bemutatott előnyök alapján ez a hálóarchitektúra bizonyult a legalkalmasabbnak az objektumkövetési feladatra. 4.4 Aktivációs térkép előállítása Az aktivációs térkép előállításához először a megfelelően előkészített képet keresztül kell küldeni a konvolúciós hálón. A kép előkészítése a kép átméretezéséből és a csatornák normalizálásából áll, ahogyan az az előző fejezetben bemutatásra került. 16. ábra: Bemeneti kép A háló kimenetén az utolsó összevonóréteg után előáll egy jellemzővektor. Az (2) [24] képlet írja le az utolsó összevonó réteg (global avarage pooling) kimenetét a képpontok térbeli elhelyezkedése alapján. Ez a vektor kerül a szoftmax bemenetére (3) [24]. Egy adott c osztályra, a szoftmax bemenete tehát (3), ahol w c k tagot tekinthetjük az F k képrészlet jelentőségét a c osztályba sorolás pontszámának kialakításában. Ezek alapján az aktivációs térképet (5) [24] képlet alapján írhatjuk fel. (2) 27
(3) (4) (5) A 17. ábrán látható az így előállított aktivációs térkép, amit 16. ábrán látható bemeneti képre adott eredményül a hálózat. Az egyiptomi macska nevű osztályba sorolás pontszámának kialakításában a fehérebb pixelek játszottak nagyobb jelentőséget. Minél nagyobb a pixelek intenzitása, annál nagyobb jelentősége volt a pontszám kialakításában. Ezen jól látszik, hogy az így előállt térkép zajos, nem csak az objektumhoz tartozó pontok szerepelnek rajta. Épp ezért szükséges az így készített térképet különböző képfeldolgozási technikák segítségével detektáláshoz alkalmas formára hozni. 17. ábra: Feldolgozás előtti aktivációs térkép A térképet először küszöböztem, hogy csak a pontszám kialakításában legnagyobb súllyal résztvevő képpontok maradjanak meg. A választott küszöbérték alatti értékkel rendelkező pixelek feketék, az annál nagyobb értékű pixelek fehérek. Erre meghatároztam egy alapértéket, ami a legtöbb esetben jól működött. A küszöbözött aktivációs térkép a 18. ábrán látható. 28
18. ábra: Küszöbözött aktivációs térkép Az így küszöbözött kép még nem alkalmas arra, hogy egyszerűen befoglaló négyszöget rajzoljunk köré, mert láthatóan több komponensből állhat. A térképet ezért morfológia eljárásokkal összefüggő objektumokat tartalmazó bináris képpé alakítottam. Először egy dilatációt végeztem el 10 iterációban, ezzel egy összefüggő objektum keletkezett, viszont a mérete megnövekedett. A méret helyreállítása érdekében szükség volt ugyanennyi iterációban elvégzett erodációra is. A fenti műveletek egymás után történő elvégzését zárásnak nevezzük. Ezeknek a műveleteknek az eredménye a 19. ábrán látható. 19. ábra: Dilatált majd erodált aktivációs térkép Az így elkészült képekre az OpenCV könyvtárainak felhasználásával egyszerűen egy függvényhívással rajzolható befoglaló keret. 4.5 A program használata Ebben az alfejezetben bemutatom a felhasználói felület felépítését és az alkalmazás használatát. Az felület a 21. ábrán látható ablakból áll. Tartalmaz egy videó képkockák megjelenítésére alkalmas területet és egy kezelő felületet a videó 29
megállítására, szüneteltetésére stb. Az ablak továbbá tartalmaz egy menüsort, ami jelenleg két művelet elvégzésére alkalmas menüket tartalmaz. Az egyik művelet a lejátszani kívánt videó betöltése a másik pedig a kilépés. 20. kép: Videó betöltése Az alkalmazáson belül a videót a File menü, Videó kiválasztása menüpontban választhatjuk ki. Ha kiválasztottuk a videót az Elindít gombra kattintással indíthatjuk el a videót és a Szünet gomb megnyomásával szüneteltethetjük a lejátszást. A szünet gomb megnyomása után feltöltődik a gombok alatt található lista a 20 legvalószínűbb objektum nevével, amiből kiválaszthatjuk a követendőt, majd a követés gomb megnyomásával elindul a követés. A követés a megállítás gombbal állítható meg. 21. ábra Detektálás 30
5 Tesztelés Ebben a fejezetben bemutatom a követés működését különböző videók esetén. Az objektumok követésének hatékonyságának befolyásoló tényezők például a takarás, méretváltozás, megvilágítás változása, több objektum jelenléte stb. A teszteléshez két videót használtam. Az első egy objektumot tartalmaz és nem tartalmaz különösebb képfeldolgozási nehézségeket. A második videóban számos, az előbbiekben említett nehézséget okozó tényező előfordul. Az alábbi képek az első videó tesztelése során készültek. Látható, hogy a videón a követendő objektumból egy van jelen a képkockákon és a követendőtől különböző objektumok sem befolyásolják a hatékonyságot. Az képeken megfigyelhető, hogy az esetek többségében a befoglaló keret mérete is illeszkedik az objektum méretéhez. Az egyetlen zavaró tényező, ami a képeken megfigyelhető az a képminőség megváltozása. A 3. képen megszűnik az élesség így a detektálás sikertelen lesz. 22. ábra: Követés egy objektummal, kevés zavaró tényező esetén. A következő képkockákon megfigyelhető a takarások hatása, az objektum felismerésre és a detektálásra. Az objektum felismerése nem tekinthető sikeresnek, 31
ugyanis az oroszlán osztály helyett a doberman osztályba sorolódott. A detektálás a takarás és a felismerési pontatlanság ellenére sikeresnek tekinthető. 23. ábra: Követés takarási probléma jelentkezésekor. Az alábbi képkockák a több objektum jelenlétének befolyásoló hatását kívánják bemutatni. Több objektum esetén változatos eredmények születtek. Ha több azonos osztályba tartozó objektumot tartalmaz a képkocka akkor az objektumok távolsága befolyásolja a befoglaló keret elhelyezését úgy, hogy ha az objektumok túl közel vannak egymáshoz, akkor közös befoglaló keretet kapnak, ellenkező esetben viszont csak az egyik objektum kerül detektálásra. Az előbb leírt működés oka, a dilatálás és erodálás egymásutániságából (zárás) adódik. Az aktivációs térképen az egymáshoz közel elhelyezkedő objektumok aktivációi között kis méretű lyukak helyezkedhetnek el, amiket a zárás megszünteti és egy összefüggő objektumot hoz létre a bináris képen és a detektálás során -e köré az objektum köré rajzolunk befoglaló keretet. A távol lévő objektumok esetén az aktivációs térképen több egymástól jól elkülöníthető objektum keletkezik, amik közül a zárás során a kisebb objektumok megszűnnek és szerencsés esetben egy objektum marad: az, aminek az aktivációs képen nagyobb objektum feleltethető meg. Előfordulhat, hogy több objektum marad a bináris képen, így egy olyan befoglaló keret keletkezik, ami az összes ilyen objektumot magába foglalja. Az utóbbi eset figyelhető meg a 23. ábra 3. képén. 32
24. ábra: Követés több jelenlévő objektum esetén. Az utolsó két képen egy olyan objektum követését állítottam be, ami nem volt látható a képen, aminek az eredménye az lett, hogy nem került befoglaló keret a képkockára. Ebben az esetben nem mindig ez a viselkedés jelentkezik, ugyanis annak ellenére, hogy az objektum nincs jelen az aktivációs térképen megjelennek apróbb objektumok, amiket a zárás művelete eltűntet viszont, ha egy-egy objektum nagyobb, mint amit az erodálás eltűntet, akkor kisebb-nagyobb befoglaló keretek megjelennek. 25. ábra: A képen nem szereplő objektum követése. A videó feldolgozási sebessége normál videólejátszás esetén, neurális háló közbeiktatása nélkül 20 fps volt. A követés során a SqueezeNet háló közbeiktatásával a sebesség 8 fps-re csökkent. További tesztek a ResNet18-al és a ResNet50-el készültek. Ezeken az architektúrákon a sebességek rendre 5fps és 1 fps körül alakultak, azonban a 33
követési hatékonyságban jelentősebb javulás nem volt érzékelhető. Az előbb említett sebesség értékek Intel Core i3-as processzor segítségével voltak elérhetők. Ezzel a sebességgel a valósidejű felhasználás nem lehetséges, azonban GPU használatával már jelentős javulás érhető el és valósidejű követésre is használható volna. 34
6 Értékelés, konklúzió A szakdolgozat során bemutatott módszerrel viszonylag kedvezően, kevés erőforrás felhasználásával sikerült megvalósítani a követési feladatot. Előre betanított hálót használtunk, így nem volt szükség tanításra és a háló felépítésén sem kellett módosítani. A követés bizonytalan a zajos aktivációs térkép miatt és az befoglaló keretek sem illeszkednek pontosan a detektált objektum méretéhez. A hibák adódhatnak a morfológiai eljárásokból és abból, hogy a háló az objektumok osztályba sorolásakor egy adott objektum bizonyos területeit nagyobb súllyal veszi figyelembe és ebből adódóan előfordulhat, hogy az objektumnak csak egy bizonyos területe kerül követésre, vagy tévesen háttérelemek is befolyásolhatják az aktiváció kialakítását így a befoglaló keret kiterjed. A fenti hibák mértéke csökkenthető, erre vonatkozóan a következő fejezetben olvashatók továbbfejlesztési javaslatok. 35
7 Továbbfejlesztési lehetőségek és tervek A 26. ábrán látható beállítási lehetősségek még nem kerültek bekötésre, ezek a tervek szerint az aktivációs térkép küszöbözéséhez használt küszöbérték és a morfológiai eljárások iterációinak száma. Az alkalmazást szeretném úgy tovább fejleszteni, hogy többféle követési eljárás és háló modell közül lehessen a grafikus felhasználói felületen keresztül választani, továbbá a meglévő követési eljárást is pontosítani. A követési hatékonyság növelése érdekében a továbbiakban érdemes lenne a hálót egy követési adatbázison finomhangolni. Ehhez a finomhangoláshoz szükséges egy olyan videó adatbázis, amiben a videók változatos (különböző osztályokba tartozó) objektumokat tartalmaznak, továbbá fel vannak címkézve befoglaló keretekkel. A hiba mértéke például a YOLO módszernél bemutatott hibafüggvény segítségével előállítható lenne. 26. ábra: Felhasználói felület 36
Irodalomjegyzék [1] David Silver et al. Mastering the game of Go without human knowledge. Nature 550, 354 359 (19 October 2017); doi :10.1038/nature24270 [2] Wikibooks, Artificial Neural Networks / Activation Functions, https://en.wikibooks.org/wiki/artificial_neural_networks/activation_funct ions#activation_functions (revision 17:09, 05 December 2017) [3] Wikipedia, Sign function, https://en.wikipedia.org/wiki/sign_function (revision, 17:06, 05 December 12) [4] Saining Xie, Zhuowen Tu, Holistically-Nested Edge Detection. arxiv:1504.06375 [5] L. Xu, J. S. Ren, C. Liu, and J. Jia, Deep convolutional neural network for image deconvolution. Advances in Neural Information Processing Systems, 2014, pp. 1790 1798. [6] Jonathan Long, Evan Shelhamer, Trevor Darrell, Fully Convolutional Networks for Semantic Segmentation. arxiv:1411.4038 [7] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, Deep Residual Learning for Image Recognition, arxiv:1512.03385 [8] J. Redmon, S. Divvala, R. Girshick, and A. Farhadi. You only look once: Unified, real-time object detection. In CVPR, 2016. [9] Oriol Vinyals, Alexander Toshev, Samy Bengio, Dumitru Erhan, Show and Tell: A Neural Image Caption Generator, arxiv:1411.4555 [10] Junhua Mao, Wei Xu, Yi Yang, Jiang Wang, Alan L. Yuille, Explain Images with Multimodal Recurrent Neural Networks, arxiv:1410.1090 [11] Emily Denton, Soumith Chintala, Arthur Szlam, Rob Fergus, Deep Generative Image Models using a Laplacian Pyramid of Adversarial Networks. arxiv:1506.05751 [12] Wikipedia, Convolutional neural network, https://en.wikipedia.org/wiki/convolutional_neural_network (revision 17:12, 05 December 2017) [13] Andrej Karpathy, Convolutional Neural Networks for Visual Recognition http://cs231n.github.io/convolutional-networks/ (revision 17:08, 05 December 2017) [14] N. Srivastava, G. Hinton, A. Krizhevsky, I. Sutskever, and R. Salakhutdinov. Dropout: A simple way to prevent neural networks from overfitting. The Journal of Machine Learning Research, pages 1929 1958, 2014. 37
[15] Glorot, X. and Bengio, Y. Understanding the difficulty of training deep feedforward neural networks. In Proc. AISTATS, volume 9, pp. 249 256, 2010" [16] Adrian Rosebrock, ImageNet: VGGNet, ResNet, Inception, and Xception with Keras, https://www.pyimagesearch.com/2017/03/20/imagenet-vggnetresnet-inception-xception-keras/ (revision 19:33, 05 December 2017) [17] Forrest N. Iandola, Song Han, Matthew W. Moskewicz, Khalid Ashraf, William J. Dally, Kurt Keutzer, SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0.5MB model size, arxiv:1602.07360 [18] Jin, J., Dundar, A., Bates, J., Farabet, C., Culurciello, E.: Tracking with deepneural networks. In: Information Sciences and Systems (CISS), 2013 47th Annual Conference on. pp. 1 5. IEEE (2013)" [19] Min Lin, Qiang Chen, Shuicheng Yan, Network In Network, arxiv:1312.4400 [20] Florian Bordes, SqueezeNet architecture https://florianbordes.wordpress.com/2016/04/04/cats-vs-dogs-9-squeezenet/ (revision 17:00, 05 December 2017) [21] Seunghoon Hong, Tackgeun You, Suha Kwak, Bohyung Han, Online Tracking by Learning Discriminative Saliency Map with Convolutional Neural Network, arxiv:1502.06796 [22] Chih-Yao Ma; Hsueh-Ming Hang, Learning-based saliency model with depth information, http://jov.arvojournals.org/article.aspx?articleid=2300610 (revision 17:27, 05 December 2017) [23] Cortes, C., & Vapnik, V. (1995). Support vector machine. Machine learning, 20(3), 273 297 [24] Bolei Zhou, Aditya Khosla, Agata Lapedriza, Aude Oliva, Antonio Torralba, Learning Deep Features for Disciminative Localization, arxiv:1512.04150 [25] Karen Simonyan, Andrew Zisserman, Very Deep Convolutional Networks for Large-Scale Image Recognition, arxiv:1409.1556 [26] Gao Huang, Zhuang Liu, Kilian Q. Weinberger, Laurens van der Maaten, Densely Connected Convolutional Networks. arxiv:1608.06993 [27] Christian Szegedy, Vincent Vanhoucke, Sergey Ioffe, Jonathon Shlens, Zbigniew Wojna, Rethinking the Inception Architecture for Computer Vision. arxiv:1512.00567 38