|
|
||
|---|---|---|
| .. | ||
| lab | ||
| ObjectDetection.ipynb | ||
| README.md | ||
README.md
Разпознаване на обекти
Моделите за класификация на изображения, с които сме работили досега, приемат изображение и произвеждат категоричен резултат, като например клас „число“ в проблема MNIST. Въпреки това, в много случаи не искаме просто да знаем, че дадена снимка изобразява обекти - искаме да можем да определим тяхното точно местоположение. Именно това е целта на разпознаването на обекти.
Тест преди лекцията
Изображение от уебсайта на YOLO v2
Наивен подход към разпознаването на обекти
Да предположим, че искаме да намерим котка на снимка. Един много наивен подход към разпознаването на обекти би бил следният:
- Разделяме снимката на множество малки части.
- Извършваме класификация на изображения върху всяка част.
- Тези части, които водят до достатъчно висока активация, могат да се считат за съдържащи търсения обект.
Изображение от тетрадката с упражнения
Този подход обаче е далеч от идеален, защото позволява на алгоритъма да локализира рамката на обекта много неточно. За по-прецизно местоположение трябва да използваме някакъв вид регресия, за да предвидим координатите на рамките - и за това ни трябват специфични набори от данни.
Регресия за разпознаване на обекти
Тази публикация в блог предлага чудесно въведение в разпознаването на форми.
Набори от данни за разпознаване на обекти
Може да срещнете следните набори от данни за тази задача:
- PASCAL VOC - 20 класа
- COCO - Общи обекти в контекст. 80 класа, рамки и маски за сегментация
Метрики за разпознаване на обекти
Пресечна площ спрямо обединение (Intersection over Union)
Докато за класификация на изображения е лесно да се измери колко добре се представя алгоритъмът, за разпознаване на обекти трябва да измерим както коректността на класа, така и прецизността на местоположението на предвидената рамка. За последното използваме така наречената Пресечна площ спрямо обединение (IoU), която измерва колко добре се припокриват две рамки (или две произволни области).
Фигура 2 от този отличен блог пост за IoU
Идеята е проста - разделяме площта на пресечната област между две фигури на площта на тяхното обединение. За две идентични области IoU ще бъде 1, докато за напълно несвързани области ще бъде 0. В противен случай ще варира от 0 до 1. Обикновено разглеждаме само тези рамки, за които IoU е над определена стойност.
Средна прецизност (Average Precision)
Да предположим, че искаме да измерим колко добре се разпознава даден клас обекти C. За да го измерим, използваме метриката Средна прецизност, която се изчислява по следния начин:
- Разглеждаме кривата Прецизност-Съответствие, която показва точността в зависимост от стойността на прага за разпознаване (от 0 до 1).
- В зависимост от прага ще получим повече или по-малко разпознати обекти в изображението и различни стойности за прецизност и съответствие.
- Кривата ще изглежда така:
Изображение от NeuroWorkshop
Средната прецизност за даден клас C е площта под тази крива. По-точно, оста Съответствие обикновено се разделя на 10 части, а Прецизността се осреднява върху всички тези точки:
AP = {1\over11}\sum_{i=0}^{10}\mbox{Precision}(\mbox{Recall}={i\over10})
AP и IoU
Разглеждаме само тези разпознавания, за които IoU е над определена стойност. Например, в набора от данни PASCAL VOC обикновено \mbox{IoU Threshold} = 0.5, докато в COCO AP се измерва за различни стойности на \mbox{IoU Threshold}.
Изображение от NeuroWorkshop
Средна средна прецизност - mAP
Основната метрика за разпознаване на обекти се нарича Средна средна прецизност, или mAP. Това е стойността на Средната прецизност, осреднена за всички класове обекти, а понякога и за \mbox{IoU Threshold}. По-подробно процесът на изчисляване на mAP е описан
в този блог пост), както и тук с примери за код.
Различни подходи за разпознаване на обекти
Съществуват два основни класа алгоритми за разпознаване на обекти:
- Мрежи за предложения на региони (R-CNN, Fast R-CNN, Faster R-CNN). Основната идея е да се генерират региони от интерес (ROI) и да се изпълни CNN върху тях, търсейки максимална активация. Това е малко подобно на наивния подход, с изключение на това, че ROI се генерират по-умно. Един от основните недостатъци на тези методи е, че са бавни, защото изискват множество преминавания на CNN класификатора върху изображението.
- Еднократни (YOLO, SSD, RetinaNet) методи. В тези архитектури мрежата е проектирана да предсказва както класовете, така и ROI в едно преминаване.
R-CNN: CNN, базирана на региони
R-CNN използва Selective Search, за да генерира йерархична структура на региони от интерес, които след това преминават през CNN екстрактори на характеристики и SVM-класификатори, за да определят класа на обекта, и линейна регресия, за да определят координатите на рамката. Официална статия
Изображение от van de Sande et al. ICCV’11
*Изображения от този блог
F-RCNN - Бърза R-CNN
Този подход е подобен на R-CNN, но регионите се определят след прилагането на слоевете за конволюция.
Изображение от официалната статия, arXiv, 2015
Faster R-CNN
Основната идея на този подход е да се използва невронна мрежа за предсказване на региони от интерес - така наречената мрежа за предложения на региони. Статия, 2016
Изображение от официалната статия
R-FCN: Напълно конволюционна мрежа, базирана на региони
Този алгоритъм е дори по-бърз от Faster R-CNN. Основната идея е следната:
- Извличаме характеристики с помощта на ResNet-101.
- Характеристиките се обработват от Карта за оценка, чувствителна към позиция. Всеки обект от
Cкласове се разделя наk\times kрегиони, и обучаваме мрежата да предсказва части от обекти. - За всяка част от
k\times kрегиони всички мрежи гласуват за класовете на обектите, и класът с максимален брой гласове се избира.
Изображение от официалната статия
YOLO - You Only Look Once
YOLO е алгоритъм за разпознаване в реално време с едно преминаване. Основната идея е следната:
- Изображението се разделя на
S\times Sрегиони. - За всеки регион CNN предсказва
nвъзможни обекти, координати на рамката и увереност=вероятност * IoU.
Изображение от официалната статия
Други алгоритми
- RetinaNet: официална статия
- SSD (Single Shot Detector): официална статия
✍️ Упражнения: Разпознаване на обекти
Продължете обучението си в следната тетрадка:
Заключение
В този урок направихте бърз преглед на различните начини за разпознаване на обекти!
🚀 Предизвикателство
Прочетете тези статии и тетрадки за YOLO и опитайте сами:
- Добър блог пост описващ YOLO
- Официален сайт
- Yolo: Keras имплементация, тетрадка стъпка по стъпка
- Yolo v2: Keras имплементация, тетрадка стъпка по стъпка
Тест след лекцията
Преглед и самостоятелно обучение
- Разпознаване на обекти от Нихил Сардана
- Добро сравнение на алгоритми за разпознаване на обекти
- Преглед на алгоритми за дълбоко обучение за разпознаване на обекти
- Въведение стъпка по стъпка в основните алгоритми за разпознаване на обекти
- Имплементация на Faster R-CNN в Python за разпознаване на обекти
Задание: Разпознаване на обекти
Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.









