Architektúra YOLO pre detekciu objektov

Ako sme spomínali v úvodnom článku, YOLO je plne konvolučná neurónová sieť FCNN (fully convolutional neural network), ktorá spracuje celý obraz naraz. Ďalšou výhodou je, že táto architektúra je invariantná na veľkosť vstupného obrazu. YOLO rozdelí obraz na mriežku, v ktorej predikuje hraničné obdĺžniky objektov a pravdepodobnosť ich zaradenia do tried. Pri takomto prístupe nepotrebujeme na detekciu žiadne komplexné zreťazenie rôznych procesov.

YOLO architektúra

Prvou časťou tejto architektúry je Darknet-53 blok vystupujúci ako extraktor príznakov. Už z názvu vyplýva, že Darknet-53 blok sa skladá z 53 konvolučných vrstiev, kde za každou z nich nasleduje batch (dávková) normalizácia a Leaky ReLU aktivácia. Medzi niektorými vrstvami sa nachádzajú aj tzv. reziduálne prepojenia (ukážka na obrázku nižšie). YOLO vo verzii 3 nepoužíva pooling (združovanie). Na podvzorkovanie (zníženie dimenzie) príznakovej mapy využíva konvolúciu s posunom 2. To by malo zabrániť strate nízkoúrovňových príznakov, často pripisovanej poolingu.

detekcia objektu rezidualne prepojenie umela inteligencia YOLO     Reziduálne prepojenie, Zdroj: vlastné

Po Darknet-53 bloku nasleduje ešte niekoľko na seba napojených konvolučných vrstiev. Následne prichádza na rad výstupná vrstva s predikovanými ohraničujúcimi obdĺžnikmi. YOLO verzia 3 umožňuje detegovať ohraničujúce obdĺžniky v troch rozličných škálach. Z tohto vyplýva, že táto architektúra má 3 rôzne výstupy, a to pre veľké, stredne veľké a malé objekty. Ako prvé sú nájdené veľké objekty. Potom znovu prichádza na rad niekoľko konvolučných vrstiev a následne výstup pre stredne veľké objekty. Rovnakým spôsobom je nakoniec vygenerovaný výstup aj pre malé objekty. Pri detekcii rôznych veľkostí objektov sa používa nadvzorkovanie, ktoré umožňuje získať spolu so spojením predchádzajúcich vrstiev zmysluplnejšie a dôkladnejšie informácie z príznakových máp.

YOLOv3 architektura umela inteligencia

YOLO v3, Zdroj: vlastné

Výstup siete

Výstupom celej architektúry je mriežka ohraničujúcich obdĺžnikov nájdených objektov. Pred vstupom obrázka do siete je potrebné ho upraviť, aby jeho rozmery boli deliteľné číslom 32, vďaka čomu vieme určiť veľkosť mriežky pre jednotlivé výstupy. Pre príklad môžeme uviesť vstupný obraz o veľkosti 608×608. Pre takýto obraz sú mriežky jednotlivých výstupov 19×19, 38×38 a 76×76  postupne pre veľké, stredné a malé objekty. Pri prechode vstupného obrázku cez konvolučnú sieť sa totiž vďaka podvzorkovaniu na konci vytvorí príznaková mapa s rozmerom 19×19, (keďže 608 / 32 = 19). Následne sa vykoná nadvzorkovanie pre nájdenie stredných a malých objektov, ktoré vytvoria mriežky o veľkosti 38×38 (pretože 19 * 2 = 38) a pre malé objekty 76×76 (pretože 38 * 2 = 76).

Každý jeden bod na mriežke sa skladá z B ohraničujúcich obdĺžnikov. Samotný obdĺžnik obsahuje 5+C hodnôt. Takže nakoniec môžeme dospieť k tomu, že každý bod na mriežke sa skladá z B*(5+C) hodnôt. Samozrejme bez toho, aby sme si napísali, čo obsahuje jeden takýto ohraničujúci obdĺžnik nevieme, čo sa skrýva za C a dokonca samotnou hodnotou 5 . YOLO je detektor objektov a z tohto dôvodu potrebujeme nájsť umiestnenie objektu ako jeho centrálny bod, ohraničenie, dané šírkou a výškou objektu a príznak, ktorý hovorí či vôbec ide o regulérny objekt.

Povedali sme si, že YOLO dokáže pri jednom pohľade na fotografiu zistiť nie len umiestnenie objektu, ale aj jeho zaradenie do triedy, teda určenie, o aký objekt ide (človek, auto, … ). Jednotlivé hodnoty v ohraničujúcom obdĺžniku sú teda (pc,tx,ty,tw,th,c). Toto usporiadanie nie je pevne dané, záleží od vašej implementácie. Hodnota pc je pravdepodobnosť, či bod mriežky patrí nejakému objektu, hodnoty tx, ty sú stredové súradnice tohoto objektu. Šírka a výška objektu sú určené hodnotami tw a th . Záhadné c reprezentuje pravdepodobnosť zaradenia do triedy vo forme vektora a z tohto pohľadu vieme aj povedať, že za hodnotou C sa skrýva počet jednotlivých tried.  Čiže, ak YOLO deteguje 3 ohraničujúce obdĺžniky pri zaradení objektov do 4 tried, tak počet výstupov  poslednej vrstvy je B*(5+C)=3*(5+4)=27 . Ešte si môžeme uviesť, že výstup pre veľké objekty vstupného obrazu rozmeru  608×608 môže detegovať 19*19*3=1083 ohraničujúcich obdĺžnikov.

ohranicujuci obdlznik bounding box YOLO umela inteligencia

Ohraničujúci obdĺžnik, Zdroj: vlastné

Predikcia umiestnenia objektov (ohraničujúce obdĺžniky)

Takýto výstup je ale potrebné transformovať na predikciu konkrétnych obdĺžnikov. Stred detegovaného objektu, získame nasledovne:

kde tx a ty je výstup siete a cx a cy sú súradnice bodov na výstupnej mriežke. Pre lepšiu predstavu, čo znamenajú súradnice bodov na výstupnej mriežke, je k dispozícii nasledujúci obrázok.

YOLO suradnice vystupna mriezka umela inteligencia

Príklad výstupnej mriežky, Zdroj: vlastné

 

Pre príklad môžeme uviesť, že ak je obdĺžnik na pozícii [1,1] zodpovedný za detekciu objektu, kde výstupom σ(tx) a σ(ty) sú hodnoty napríklad 0,5 a 0,8 potom súradnica stredu objektu je na pozícii [1+0,5, 1+0,8]. Ak by sme takúto detekciu vynásobili 32 násobným zmenšením, ktoré sme spomínali v súvislosti s výstupným rozmerom, tak by sme získali súradnicu stredu objektu vzhľadom na vstupný obraz. Všimnime si, že funkcia logistický sigmoid transformuje výstup do intervalu (0,1). Vďaka tomu hraničné obdĺžniky nie sú schopné detegovať objekty na súradniciach okolitých obdĺžnikov.

Podobne potrebujeme získať rozmer (šírku a výšku) predikovaného ohraničujúceho obdĺžnika. Dávalo by zmysel priamo predikovať šírku a výšku obdĺžnika, ale v praxi to vedie k nestabilnému gradientu počas trénovania. Miesto toho sa v moderných detektoroch využíva log transformácia alebo zjednodušene odsadenie od pevne definovaných obdĺžnikov.

Kde pa ph sú pevne preddefinované rozmery šírky a výšky, pre konkrétny ohraničujúci obdĺžnik.

ohranicujuci obdlznik bounding box YOLO umela inteligencia

Ohraničujúci oblžnik, Zdroj: YOLO v3, Redmon,J., Farhadi,A.

Klasifikácia objektov

Rovnako ako pri súradniciach stredu objektu, ak bw a bh vynásobíme zmenšením, tak získame rozmer obdĺžnika vzhľadom na celý obraz.

Ďalej potrebujeme určiť skóre zaradenia objektu do triedy. Hodnoty pc (už spomenutá pravdepodobnosť, či ide o reálny objekt), ako aj všetky prvky vektora c, sú pravdepodobnosti, a preto sú získavané funkciou logistický sigmoid. Celkové skóre:

skóre YOLO detekcia objektu umela inteligencia

Z čoho argument maxima určuje zaradenie do triedy a samotné maximum najväčšie dosiahnuté skóre pre daný obdĺžnik. Keby sme mali dve triedy auto a bicykel, tak postup by bol pc=0,9, (cauto, cbicykel)=(0,3, 0,5), s=(0,9*0,3, 0,9*0,5)=(0,27, 0,45) . Z tohto príkladu môžeme vidieť, že daný ohraničujúci obdĺžnik deteguje bicykel so skóre 0,45. Celkový výstup jedného takéhoto obdĺžniku sa teda skladá z hodnôt:

celkovy vystup ohranicujuci obdlznik bounding box YOLO umela inteligencia

Selekcia najdôveryhodnejších ohraničujúcich obdĺžnikov

Posledným krokom je vyselektovanie tých najsilnejších obdĺžnikov. Ako prvé spojíme všetky nájdené obdĺžniky všetkých výstupov do jednej množiny. Z tejto množiny obdĺžnikov odstránime tie, ktorých skóre je menšie ako nami určená hodnota sth. Po tomto kroku nasleduje zmazanie duplicitných detekcií. Toto sa robí prostredníctvom procesu, ktorý sa nazýva NMS (Non Maximum Suppression). NMS využíva funkciu zvanú IoU (Intersection over Union). Tá hovorí, ako veľmi sa jednotlivé obdĺžniky prekrývajú:

IoU intersection over union YOLO umela inteligencia

IoU intersection over union YOLO umela inteligencia

IoU (Intersection over Union), Zdroj: vlastné

Vstupom do NMS sú všetky ohraničujúce obdĺžniky triedy. Z týchto sa vyberie prvý s najvyšším skóre a vypočíta sa IoU so všetkými ostatnými obdĺžnikmi. Tie, ktoré sa s vybraným prekrývajú viac ako je prahová hodnota IoUth, odstránime z množiny. Následne sa z ostávajúcich ohraničujúcich obdĺžnikov vyberie ďalší s druhým najvyšším skóre a proces sa zopakuje. Takto to pokračuje pokiaľ neprejdeme všetky ohraničujúce obdĺžniky alebo nedosiahneme maximálny počet vybraných obdĺžnikov, ktorý si dopredu určíme. Tento proces vykonáme osobitne pre každú triedu.

Záver

YOLO verzia 3 je pomerne jednoduchá a šikovná metóda na detekciu objektov v reálnom čase, ktorá poskytuje výsledky približujúce sa SOTA systémom. Na ukážku sme pre vás priložili jednoduché video, aby ste si mohli predstaviť, čo môžete od podobného detektora objektov očakávať.

 

 

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *