|
|
||
|---|---|---|
| .. | ||
| lab | ||
| ObjectDetection.ipynb | ||
| README.md | ||
README.md
Обнаружение объектов
Модели классификации изображений, с которыми мы работали до сих пор, принимали изображение и выдавали категориальный результат, например, класс "цифра" в задаче MNIST. Однако во многих случаях нам недостаточно просто знать, что на изображении есть объекты — мы хотим определить их точное местоположение. Именно этим занимается обнаружение объектов.
Квиз перед лекцией
Изображение с веб-сайта YOLO v2
Простой подход к обнаружению объектов
Предположим, мы хотим найти кошку на изображении. Очень простой подход к обнаружению объектов может выглядеть следующим образом:
- Разбить изображение на множество плиток.
- Запустить классификацию изображений для каждой плитки.
- Те плитки, которые дают достаточно высокую активацию, можно считать содержащими искомый объект.
Изображение из учебной тетради
Однако этот подход далек от идеала, так как он позволяет алгоритму лишь приблизительно определить границы объекта. Для более точного определения местоположения необходимо использовать регрессию для предсказания координат ограничивающих рамок — а для этого нужны специальные наборы данных.
Регрессия для обнаружения объектов
Этот блог предлагает отличное введение в обнаружение форм.
Наборы данных для обнаружения объектов
Вы можете встретить следующие наборы данных для этой задачи:
- PASCAL VOC — 20 классов.
- COCO — Common Objects in Context. 80 классов, ограничивающие рамки и маски сегментации.
Метрики для обнаружения объектов
Пересечение над объединением (IoU)
Если для классификации изображений легко измерить, насколько хорошо работает алгоритм, то для обнаружения объектов нужно оценивать как правильность класса, так и точность предсказанных координат ограничивающей рамки. Для последнего используется метрика Пересечение над объединением (IoU), которая измеряет, насколько хорошо две рамки (или две произвольные области) перекрываются.
Рисунок 2 из этого отличного блога о IoU
Идея проста — мы делим площадь пересечения двух фигур на площадь их объединения. Для двух идентичных областей IoU будет равен 1, а для полностью несвязанных областей — 0. В остальных случаях значение будет варьироваться от 0 до 1. Обычно учитываются только те ограничивающие рамки, для которых IoU превышает определенное значение.
Средняя точность (Average Precision)
Предположим, мы хотим измерить, насколько хорошо распознается определенный класс объектов C. Для этого используется метрика Средняя точность, которая рассчитывается следующим образом:
- Рассматривается кривая точности-отзыва (Precision-Recall), показывающая точность в зависимости от порогового значения обнаружения (от 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
Средняя средняя точность (Mean Average Precision — 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 для генерации иерархической структуры регионов ROI, которые затем проходят через CNN для извлечения признаков, SVM-классификаторы для определения класса объекта и линейную регрессию для определения координат ограничивающей рамки. Официальная статья
Изображение из van de Sande et al. ICCV’11
Изображения из этого блога
F-RCNN — Fast R-CNN
Этот подход похож на R-CNN, но регионы определяются после применения сверточных слоев.
Изображение из официальной статьи, arXiv, 2015
Faster R-CNN
Основная идея этого подхода заключается в использовании нейронной сети для предсказания ROI — так называемой сети предложений регионов (Region Proposal Network). Статья, 2016
Изображение из официальной статьи
R-FCN: Полностью сверточная сеть на основе регионов
Этот алгоритм еще быстрее, чем Faster R-CNN. Основная идея следующая:
- Извлекаем признаки с помощью ResNet-101.
- Признаки обрабатываются Position-Sensitive Score Map. Каждый объект из
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 для обнаружения объектов.









