Modely pro klasifikaci obrázků, se kterými jsme se dosud zabývali, přijímaly obrázek a produkovaly kategorický výsledek, například třídu 'číslo' v problému MNIST. V mnoha případech však nechceme jen vědět, že obrázek zobrazuje objekty – chceme být schopni určit jejich přesnou polohu. Přesně o tom je detekce objektů.
Obrázek z webu YOLO v2
Předpokládejme, že chceme najít kočku na obrázku. Velmi naivní přístup k detekci objektů by mohl být následující:
- Rozdělte obrázek na množství dlaždic.
- Proveďte klasifikaci obrázků na každé dlaždici.
- Dlaždice, které vykazují dostatečně vysokou aktivaci, lze považovat za obsahující hledaný objekt.
Obrázek z cvičebního notebooku
Tento přístup však není ideální, protože algoritmu umožňuje pouze velmi nepřesně lokalizovat ohraničující rámeček objektu. Pro přesnější lokalizaci potřebujeme použít nějaký typ regrese, abychom předpověděli souřadnice ohraničujících rámečků – a k tomu potřebujeme specifické datové sady.
Tento blogový příspěvek nabízí skvělý úvod do detekce tvarů.
Můžete narazit na následující datové sady pro tento úkol:
- PASCAL VOC – 20 tříd
- COCO – Common Objects in Context. 80 tříd, ohraničující rámečky a segmentační masky
Zatímco u klasifikace obrázků je snadné měřit, jak dobře algoritmus funguje, u detekce objektů musíme měřit jak správnost třídy, tak přesnost určené polohy ohraničujícího rámečku. Pro druhé zmíněné používáme tzv. Průnik přes sjednocení (IoU), který měří, jak dobře se dva rámečky (nebo dvě libovolné oblasti) překrývají.
Obrázek 2 z tohoto skvělého blogového příspěvku o IoU
Princip je jednoduchý – rozdělíme plochu průniku dvou útvarů plochou jejich sjednocení. Pro dvě identické oblasti bude IoU rovno 1, zatímco pro zcela nesouvisející oblasti bude rovno 0. Jinak se bude pohybovat mezi 0 a 1. Obvykle bereme v úvahu pouze ty ohraničující rámečky, u kterých je IoU nad určitou hodnotou.
Předpokládejme, že chceme měřit, jak dobře je rozpoznána daná třída objektů
- Zvažte křivku přesnosti a odvolání (Precision-Recall), která ukazuje přesnost v závislosti na hodnotě prahové detekce (od 0 do 1).
- V závislosti na prahu získáme více či méně detekovaných objektů na obrázku a různé hodnoty přesnosti a odvolání.
- Křivka bude vypadat takto:
Obrázek z NeuroWorkshop
Průměrná přesnost pro danou třídu
Budeme brát v úvahu pouze ty detekce, u kterých je IoU nad určitou hodnotou. Například v datové sadě PASCAL VOC se obvykle předpokládá
Obrázek z NeuroWorkshop
Hlavní metrika pro detekci objektů se nazývá Průměrná průměrná přesnost, nebo mAP. Jedná se o hodnotu průměrné přesnosti, průměrovanou přes všechny třídy objektů, a někdy také přes
Existují dvě široké kategorie algoritmů pro detekci objektů:
- Sítě pro návrh oblastí (R-CNN, Fast R-CNN, Faster R-CNN). Hlavní myšlenkou je generovat oblasti zájmu (ROI) a spustit na nich CNN, hledající maximální aktivaci. Je to trochu podobné naivnímu přístupu, s výjimkou toho, že ROI jsou generovány chytřejším způsobem. Jednou z hlavních nevýhod těchto metod je, že jsou pomalé, protože potřebujeme mnoho průchodů klasifikátoru CNN přes obrázek.
- Jednoprůchodové (YOLO, SSD, RetinaNet) metody. V těchto architekturách navrhujeme síť tak, aby předpovídala jak třídy, tak ROI v jednom průchodu.
R-CNN používá Selektivní vyhledávání k vytvoření hierarchické struktury oblastí ROI, které jsou následně zpracovány extraktory funkcí CNN a klasifikátory SVM k určení třídy objektu, a lineární regresí k určení souřadnic ohraničujícího rámečku. Oficiální článek
Obrázek od van de Sande et al. ICCV’11
Obrázky z tohoto blogu
Tento přístup je podobný R-CNN, ale oblasti jsou definovány po aplikaci konvolučních vrstev.
Obrázek z oficiálního článku, arXiv, 2015
Hlavní myšlenkou tohoto přístupu je použití neuronové sítě k předpovědi ROI – tzv. Region Proposal Network. Článek, 2016
Obrázek z oficiálního článku
Tento algoritmus je ještě rychlejší než Faster R-CNN. Hlavní myšlenka je následující:
- Extrahujeme funkce pomocí ResNet-101.
- Funkce jsou zpracovány pomocí Position-Sensitive Score Map. Každý objekt z
$C$ tříd je rozdělen na$k\times k$ oblasti a trénujeme na předpověď částí objektů. - Pro každou část z
$k\times k$ oblastí všechny sítě hlasují pro třídy objektů a třída objektu s maximálním počtem hlasů je vybrána.
Obrázek z oficiálního článku
YOLO je algoritmus pro detekci v reálném čase s jedním průchodem. Hlavní myšlenka je následující:
- Obrázek je rozdělen na
$S\times S$ oblasti. - Pro každou oblast CNN předpovídá
$n$ možných objektů, souřadnice ohraničujícího rámečku a důvěru=pravděpodobnost * IoU.
Obrázek z oficiálního článku
- RetinaNet: oficiální článek
- SSD (Single Shot Detector): oficiální článek
Pokračujte ve svém učení v následujícím notebooku:
V této lekci jste se rychle seznámili s různými způsoby, jak lze detekci objektů provádět!
Projděte si tyto články a notebooky o YOLO a vyzkoušejte je sami:
- Skvělý blogový příspěvek popisující YOLO
- Oficiální web
- Yolo: Implementace v Keras, podrobný notebook
- Yolo v2: Implementace v Keras, podrobný notebook
- Detekce objektů od Nikhila Sardany
- Dobrý přehled algoritmů pro detekci objektů
- Přehled algoritmů hlubokého učení pro detekci objektů
- Úvod do základních algoritmů pro detekci objektů krok za krokem
- Implementace Faster R-CNN v Pythonu pro detekci objektů











