11 KiB
Detekcia objektov
Modely klasifikácie obrázkov, s ktorými sme sa doteraz zaoberali, brali obrázok a produkovali kategóriu, napríklad triedu 'číslo' v probléme MNIST. Avšak v mnohých prípadoch nechceme len vedieť, že obrázok zobrazuje objekty - chceme určiť ich presnú polohu. Toto je presne cieľom detekcie objektov.
Kvíz pred prednáškou
Obrázok zo stránky YOLO v2
Naivný prístup k detekcii objektov
Predpokladajme, že chceme nájsť mačku na obrázku. Veľmi naivný prístup k detekcii objektov by bol nasledovný:
- Rozdeliť obrázok na množstvo dlaždíc.
- Spustiť klasifikáciu obrázkov na každej dlaždici.
- Dlaždice, ktoré majú dostatočne vysokú aktiváciu, môžeme považovať za obsahujúce hľadaný objekt.
Obrázok z cvičebného notebooku
Tento prístup však nie je ideálny, pretože umožňuje algoritmu lokalizovať ohraničujúci rám objektu len veľmi nepresne. Pre presnejšiu lokalizáciu potrebujeme spustiť určitý typ regresie, aby sme predpovedali súradnice ohraničujúcich rámov - a na to potrebujeme špecifické datasety.
Regresia pre detekciu objektov
Tento blogový príspevok ponúka skvelý úvod do detekcie tvarov.
Datasety pre detekciu objektov
Pri tejto úlohe sa môžete stretnúť s nasledujúcimi datasetmi:
- PASCAL VOC - 20 tried
- COCO - Common Objects in Context. 80 tried, ohraničujúce rámy a segmentačné masky
Metriky detekcie objektov
Prienik cez zjednotenie (Intersection over Union)
Zatiaľ čo pri klasifikácii obrázkov je jednoduché merať, ako dobre algoritmus funguje, pri detekcii objektov musíme merať správnosť triedy, ako aj presnosť polohy predpokladaného ohraničujúceho rámu. Na tento účel používame tzv. Prienik cez zjednotenie (IoU), ktorý meria, ako dobre sa dva rámy (alebo dve ľubovoľné oblasti) prekrývajú.
Obrázok 2 z tohto výborného blogového príspevku o IoU
Myšlienka je jednoduchá - vydelíme plochu prieniku medzi dvoma útvarmi plochou ich zjednotenia. Pre dva identické útvary bude IoU rovné 1, zatiaľ čo pre úplne oddelené oblasti bude rovné 0. Inak sa bude pohybovať od 0 do 1. Zvyčajne berieme do úvahy len tie ohraničujúce rámy, pre ktoré je IoU nad určitú hodnotu.
Priemerná presnosť (Average Precision)
Predpokladajme, že chceme merať, ako dobre je rozpoznaná daná trieda objektov C. Na meranie používame metriku Priemerná presnosť, ktorá sa vypočíta nasledovne:
- Zvážime krivku presnosť-recall, ktorá ukazuje presnosť v závislosti od hodnoty prahu detekcie (od 0 do 1).
- V závislosti od prahu získame viac alebo menej detekovaných objektov na obrázku a rôzne hodnoty presnosti a recall.
- Krivka bude vyzerať takto:
Obrázok z NeuroWorkshop
Priemerná presnosť pre danú triedu C je plocha pod touto krivkou. Presnejšie, os recall je zvyčajne rozdelená na 10 častí a presnosť sa spriemeruje cez všetky tieto body:
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
AP a IoU
Zvážime len tie detekcie, pre ktoré je IoU nad určitú hodnotu. Napríklad v datasete PASCAL VOC sa zvyčajne predpokladá \mbox{IoU Threshold} = 0.5, zatiaľ čo v COCO sa AP meria pre rôzne hodnoty \mbox{IoU Threshold}.
Obrázok z NeuroWorkshop
Priemerná priemerná presnosť - mAP
Hlavnou metrikou pre detekciu objektov je tzv. Priemerná priemerná presnosť, alebo mAP. Je to hodnota priemernej presnosti, spriemerovaná cez všetky triedy objektov, a niekedy aj cez \mbox{IoU Threshold}. Podrobnejší popis procesu výpočtu mAP nájdete
v tomto blogovom príspevku), a tiež tu s ukážkami kódu.
Rôzne prístupy k detekcii objektov
Existujú dve hlavné triedy algoritmov detekcie objektov:
- Siete na návrh regiónov (R-CNN, Fast R-CNN, Faster R-CNN). Hlavnou myšlienkou je generovať regióny záujmu (ROI) a spustiť CNN nad nimi, hľadajúc maximálnu aktiváciu. Je to trochu podobné naivnému prístupu, s výnimkou toho, že ROI sú generované inteligentnejším spôsobom. Jednou z hlavných nevýhod takýchto metód je, že sú pomalé, pretože potrebujeme veľa prechodov CNN klasifikátora nad obrázkom.
- Jednoprůchodové (YOLO, SSD, RetinaNet) metódy. V týchto architektúrach navrhujeme sieť tak, aby predpovedala triedy aj ROI v jednom prechode.
R-CNN: CNN založené na regiónoch
R-CNN používa Selektívne vyhľadávanie na generovanie hierarchickej štruktúry regiónov ROI, ktoré sú potom prechádzané extraktormi funkcií CNN a SVM klasifikátormi na určenie triedy objektu, a lineárnou regresiou na určenie súradníc ohraničujúceho rámu. Oficiálny článok
Obrázok od van de Sande et al. ICCV’11
Obrázky z tohto blogu
F-RCNN - Fast R-CNN
Tento prístup je podobný R-CNN, ale regióny sú definované po aplikovaní konvolučných vrstiev.
Obrázok z oficiálneho článku, arXiv, 2015
Faster R-CNN
Hlavnou myšlienkou tohto prístupu je použitie neurónovej siete na predpovedanie ROI - tzv. Sieť na návrh regiónov. Článok, 2016
Obrázok z oficiálneho článku
R-FCN: Fully Convolutional Network založená na regiónoch
Tento algoritmus je ešte rýchlejší ako Faster R-CNN. Hlavná myšlienka je nasledovná:
- Extrahujeme funkcie pomocou ResNet-101.
- Funkcie sú spracované pomocou Position-Sensitive Score Map. Každý objekt z
Ctried je rozdelený nak\times kregióny, a trénujeme na predpovedanie častí objektov. - Pre každú časť z
k\times kregiónov všetky siete hlasujú za triedy objektov, a trieda objektu s maximálnym počtom hlasov je vybraná.
Obrázok z oficiálneho článku
YOLO - You Only Look Once
YOLO je algoritmus na detekciu objektov v reálnom čase s jedným prechodom. Hlavná myšlienka je nasledovná:
- Obrázok je rozdelený na
S\times Sregióny. - Pre každý región CNN predpovedá
nmožných objektov, súradnice ohraničujúceho rámu a dôveru=pravdepodobnosť * IoU.
Obrázok z oficiálneho článku
Ďalšie algoritmy
- RetinaNet: oficiálny článok
- SSD (Single Shot Detector): oficiálny článok
✍️ Cvičenia: Detekcia objektov
Pokračujte vo svojom učení v nasledujúcom notebooku:
Záver
V tejto lekcii ste si urobili rýchly prehľad o rôznych spôsoboch, ako je možné dosiahnuť detekciu objektov!
🚀 Výzva
Prečítajte si tieto články a notebooky o YOLO a vyskúšajte ich sami:
- Dobrý blogový príspevok popisujúci YOLO
- Oficiálna stránka
- Yolo: Implementácia v Keras, notebook krok za krokom
- Yolo v2: Implementácia v Keras, notebook krok za krokom
Kvíz po prednáške
Prehľad a samostatné štúdium
- Detekcia objektov od Nikhila Sardanu
- Dobrý porovnávací článok o algoritmoch detekcie objektov
- Prehľad algoritmov hlbokého učenia pre detekciu objektov
- Úvod do základných algoritmov detekcie objektov krok za krokom
- Implementácia Faster R-CNN v Pythone pre detekciu objektov









