Modele klasyfikacji obrazów, które omawialiśmy do tej pory, przyjmowały obraz i zwracały wynik kategoryczny, na przykład klasę 'liczba' w problemie MNIST. Jednak w wielu przypadkach nie wystarczy nam wiedzieć, że na zdjęciu znajdują się obiekty – chcemy również określić ich dokładną lokalizację. Na tym właśnie polega wykrywanie obiektów.
Obraz z witryny YOLO v2
Załóżmy, że chcemy znaleźć kota na zdjęciu. Bardzo naiwne podejście do wykrywania obiektów mogłoby wyglądać następująco:
- Podziel zdjęcie na wiele kafelków.
- Uruchom klasyfikację obrazu na każdym kafelku.
- Kafelki, które dają wystarczająco wysoką aktywację, można uznać za zawierające poszukiwany obiekt.
Obraz z notatnika ćwiczeniowego
Jednak to podejście jest dalekie od ideału, ponieważ pozwala algorytmowi bardzo niedokładnie określić ramkę ograniczającą obiekt. Aby uzyskać bardziej precyzyjną lokalizację, musimy zastosować pewien rodzaj regresji, aby przewidzieć współrzędne ramek ograniczających – a do tego potrzebujemy specjalnych zbiorów danych.
Ten wpis na blogu oferuje świetne wprowadzenie do wykrywania kształtów.
Możesz natknąć się na następujące zbiory danych do tego zadania:
- PASCAL VOC – 20 klas
- COCO – Common Objects in Context. 80 klas, ramki ograniczające i maski segmentacji
Podczas gdy w klasyfikacji obrazów łatwo jest zmierzyć, jak dobrze działa algorytm, w wykrywaniu obiektów musimy ocenić zarówno poprawność klasy, jak i precyzję lokalizacji przewidywanej ramki ograniczającej. Do tego ostatniego używamy tzw. Intersection over Union (IoU), które mierzy, jak dobrze dwie ramki (lub dwa dowolne obszary) się pokrywają.
Rysunek 2 z tego doskonałego wpisu na blogu o IoU
Idea jest prosta – dzielimy obszar przecięcia dwóch figur przez obszar ich sumy. Dla dwóch identycznych obszarów IoU wynosi 1, natomiast dla całkowicie rozłącznych obszarów wynosi 0. W przeciwnym razie wartość IoU waha się od 0 do 1. Zazwyczaj bierzemy pod uwagę tylko te ramki ograniczające, dla których IoU przekracza określoną wartość.
Załóżmy, że chcemy zmierzyć, jak dobrze rozpoznawana jest dana klasa obiektów
- Rozważ krzywą Precision-Recall, która pokazuje dokładność w zależności od wartości progu detekcji (od 0 do 1).
- W zależności od progu wykryjemy więcej lub mniej obiektów na obrazie, co da różne wartości precyzji i czułości.
- Krzywa wygląda następująco:
Obraz z NeuroWorkshop
Średnia precyzja dla danej klasy
Rozważamy tylko te detekcje, dla których IoU przekracza określoną wartość. Na przykład w zbiorze danych PASCAL VOC zazwyczaj zakłada się
Obraz z NeuroWorkshop
Główną metryką dla wykrywania obiektów jest tzw. Mean Average Precision, czyli mAP. Jest to wartość Average Precision, uśredniona dla wszystkich klas obiektów, a czasami także dla różnych wartości
Istnieją dwie główne klasy algorytmów wykrywania obiektów:
- Sieci propozycji regionów (R-CNN, Fast R-CNN, Faster R-CNN). Główna idea polega na generowaniu regionów zainteresowania (ROI) i uruchamianiu CNN na nich, szukając maksymalnej aktywacji. Jest to trochę podobne do naiwnego podejścia, z tą różnicą, że ROI są generowane w bardziej inteligentny sposób. Jednym z głównych minusów takich metod jest ich powolność, ponieważ wymagają wielu przejść klasyfikatora CNN przez obraz.
- Metody jednoprzebiegowe (YOLO, SSD, RetinaNet). W tych architekturach projektujemy sieć tak, aby przewidywała zarówno klasy, jak i ROI w jednym przebiegu.
R-CNN wykorzystuje Selective Search do generowania hierarchicznej struktury regionów ROI, które następnie są przetwarzane przez ekstraktory cech CNN i klasyfikatory SVM w celu określenia klasy obiektu oraz regresję liniową w celu określenia współrzędnych ramki ograniczającej. Oficjalny artykuł
Obraz z van de Sande et al. ICCV’11
Obrazy z tego bloga
To podejście jest podobne do R-CNN, ale regiony są definiowane po zastosowaniu warstw konwolucyjnych.
Obraz z oficjalnego artykułu, arXiv, 2015
Główna idea tego podejścia polega na użyciu sieci neuronowej do przewidywania ROI – tzw. Region Proposal Network. Artykuł, 2016
Obraz z oficjalnego artykułu
Ten algorytm jest jeszcze szybszy niż Faster R-CNN. Główna idea jest następująca:
- Wyodrębniamy cechy za pomocą ResNet-101.
- Cechy są przetwarzane przez Position-Sensitive Score Map. Każdy obiekt z
$C$ klas jest dzielony na$k\times k$ regiony, a sieć jest trenowana do przewidywania części obiektów. - Dla każdej części z
$k\times k$ regionów wszystkie sieci głosują na klasy obiektów, a klasa z największą liczbą głosów jest wybierana.
Obraz z oficjalnego artykułu
YOLO to algorytm jednoprzebiegowy w czasie rzeczywistym. Główna idea jest następująca:
- Obraz jest dzielony na
$S\times S$ regiony. - Dla każdego regionu CNN przewiduje
$n$ możliwych obiektów, współrzędne ramki ograniczającej oraz pewność = prawdopodobieństwo * IoU.
Obraz z oficjalnego artykułu
- RetinaNet: oficjalny artykuł
- SSD (Single Shot Detector): oficjalny artykuł
Kontynuuj naukę w następującym notatniku:
W tej lekcji odbyłeś błyskawiczną podróż po różnych sposobach wykrywania obiektów!
Przeczytaj te artykuły i notatniki o YOLO i wypróbuj je samodzielnie:
- Dobry wpis na blogu opisujący YOLO
- Oficjalna strona
- YOLO: Implementacja w Keras, notatnik krok po kroku
- YOLO v2: Implementacja w Keras, notatnik krok po kroku
- Wykrywanie Obiektów autorstwa Nikhila Sardany
- Dobre porównanie algorytmów wykrywania obiektów
- Przegląd algorytmów głębokiego uczenia do wykrywania obiektów
- Wprowadzenie krok po kroku do podstawowych algorytmów wykrywania obiektów
- Implementacja Faster R-CNN w Pythonie do wykrywania obiektów











