Моделите за класификация на изображения, с които сме работили досега, приемат изображение и произвеждат категоричен резултат, като например класа "число" в проблема MNIST. Въпреки това, в много случаи не искаме просто да знаем, че дадена снимка изобразява обекти - искаме да можем да определим тяхното точно местоположение. Именно това е целта на разпознаването на обекти.
Изображение от уебсайта на YOLO v2
Ако искахме да намерим котка на снимка, един много наивен подход към разпознаването на обекти би бил следният:
- Разделяме снимката на множество малки части.
- Извършваме класификация на изображения върху всяка част.
- Тези части, които водят до достатъчно висока активация, могат да се считат за съдържащи търсения обект.
Изображение от тетрадката с упражнения
Този подход обаче е далеч от идеален, защото позволява на алгоритъма да локализира рамката на обекта много неточно. За по-прецизно местоположение трябва да използваме някакъв вид регресия, за да предвидим координатите на рамките - и за това ни трябват специфични набори от данни.
Тази публикация в блог предлага чудесно въведение в разпознаването на форми.
Може да срещнете следните набори от данни за тази задача:
- PASCAL VOC - 20 класа
- COCO - Общи обекти в контекст. 80 класа, рамки и маски за сегментация
Докато за класификация на изображения е лесно да се измери колко добре се представя алгоритъмът, за разпознаване на обекти трябва да измерим както коректността на класа, така и прецизността на местоположението на предвидената рамка. За последното използваме така наречената Пресечна площ спрямо обединение (IoU), която измерва колко добре се припокриват две рамки (или две произволни области).
Фигура 2 от този отличен блог пост за IoU
Идеята е проста - разделяме площта на пресечната област между две фигури на площта на тяхното обединение. За две идентични области IoU ще бъде 1, докато за напълно несвързани области ще бъде 0. В противен случай ще варира от 0 до 1. Обикновено разглеждаме само тези рамки, за които IoU е над определена стойност.
Да предположим, че искаме да измерим колко добре се разпознава даден клас обекти
- Разглеждаме кривата Прецизност-Съответствие, която показва точността в зависимост от стойността на прага за разпознаване (от 0 до 1).
- В зависимост от прага ще получим повече или по-малко разпознати обекти в изображението и различни стойности на прецизност и съответствие.
- Кривата ще изглежда така:
Изображение от NeuroWorkshop
Средната прецизност за даден клас
Разглеждаме само тези разпознавания, за които IoU е над определена стойност. Например, в набора от данни PASCAL VOC обикновено се приема
Изображение от NeuroWorkshop
Основната метрика за разпознаване на обекти се нарича Средна средна прецизност, или mAP. Това е стойността на Средната прецизност, усреднена за всички класове обекти, а понякога и за
Съществуват два основни класа алгоритми за разпознаване на обекти:
- Мрежи за предложения на региони (R-CNN, Fast R-CNN, Faster R-CNN). Основната идея е да се генерират Региони от интерес (ROI) и да се изпълни CNN върху тях, търсейки максимална активация. Това е малко подобно на наивния подход, с изключение на това, че ROI се генерират по по-умел начин. Един от основните недостатъци на тези методи е, че са бавни, защото изискват множество преминавания на CNN класификатора върху изображението.
- Еднократни (YOLO, SSD, RetinaNet) методи. В тези архитектури мрежата е проектирана да предсказва както класовете, така и ROI в едно преминаване.
R-CNN използва Selective Search, за да генерира йерархична структура от региони ROI, които след това се обработват чрез CNN екстрактори на характеристики и SVM-класификатори, за да се определи класът на обекта, и линейна регресия за определяне на координатите на рамката. Официална статия
Изображение от van de Sande et al. ICCV’11
*Изображения от този блог
Този подход е подобен на R-CNN, но регионите се определят след прилагане на слоевете за конволюция.
Изображение от официалната статия, arXiv, 2015
Основната идея на този подход е да се използва невронна мрежа за предсказване на ROI - така наречената Мрежа за предложения на региони. Статия, 2016
Изображение от официалната статия
Този алгоритъм е дори по-бърз от Faster R-CNN. Основната идея е следната:
- Извличаме характеристики с помощта на ResNet-101.
- Характеристиките се обработват от Position-Sensitive Score Map. Всеки обект от
$C$ класове се разделя на$k\times k$ региони, и обучаваме мрежата да предсказва части от обекти. - За всяка част от
$k\times k$ региони всички мрежи гласуват за класовете на обектите, и класът с максимален брой гласове се избира.
Изображение от официалната статия
YOLO е алгоритъм за разпознаване в реално време с едно преминаване. Основната идея е следната:
- Изображението се разделя на
$S\times S$ региони. - За всеки регион CNN предсказва
$n$ възможни обекти, координати на рамката и увереност=вероятност * IoU.
Изображение от официалната статия
- RetinaNet: официална статия
- SSD (Single Shot Detector): официална статия
Продължете обучението си в следната тетрадка:
В този урок направихте бърз преглед на различните начини за разпознаване на обекти!
Прочетете тези статии и тетрадки за YOLO и опитайте сами:
- Добър блог пост описващ YOLO
- Официален сайт
- Yolo: Keras имплементация, тетрадка стъпка по стъпка
- Yolo v2: Keras имплементация, тетрадка стъпка по стъпка
- Разпознаване на обекти от Нихил Сардана
- Добро сравнение на алгоритми за разпознаване на обекти
- Преглед на алгоритми за дълбоко обучение за разпознаване на обекти
- Въведение стъпка по стъпка в основните алгоритми за разпознаване на обекти
- Имплементация на Faster R-CNN в Python за разпознаване на обекти











