AI-For-Beginners/translations/ru/lessons/4-ComputerVision/11-ObjectDetection/README.md

17 KiB
Raw Blame History

Обнаружение объектов

Модели классификации изображений, с которыми мы работали до сих пор, принимали изображение и выдавали категориальный результат, например, класс "цифра" в задаче MNIST. Однако во многих случаях нам недостаточно просто знать, что на изображении есть объекты — мы хотим определить их точное местоположение. Именно этим занимается обнаружение объектов.

Тест перед лекцией

Обнаружение объектов

Изображение с веб-сайта YOLO v2

Простой подход к обнаружению объектов

Предположим, мы хотим найти кошку на изображении. Очень простой подход к обнаружению объектов может быть следующим:

  1. Разбить изображение на множество плиток.
  2. Запустить классификацию изображений для каждой плитки.
  3. Те плитки, которые дают достаточно высокую активацию, можно считать содержащими искомый объект.

Простое обнаружение объектов

Изображение из учебной тетради

Однако этот подход далек от идеала, так как он позволяет алгоритму лишь приблизительно определить границы объекта. Для более точного определения местоположения необходимо использовать регрессию, чтобы предсказать координаты ограничивающих рамок — а для этого нужны специализированные наборы данных.

Регрессия для обнаружения объектов

Этот блог предлагает отличное введение в обнаружение форм.

Наборы данных для обнаружения объектов

Для этой задачи вы можете встретить следующие наборы данных:

  • PASCAL VOC — 20 классов.
  • COCO — Common Objects in Context. 80 классов, ограничивающие рамки и маски сегментации.

COCO

Метрики для обнаружения объектов

Пересечение над объединением (IoU)

Если для классификации изображений легко измерить, насколько хорошо работает алгоритм, то для обнаружения объектов нужно оценивать как правильность класса, так и точность предсказания местоположения ограничивающей рамки. Для последнего используется метрика Пересечение над объединением (IoU), которая измеряет, насколько хорошо две рамки (или две произвольные области) перекрываются.

IoU

Рисунок 2 из этого отличного блога о IoU

Идея проста — мы делим площадь пересечения двух фигур на площадь их объединения. Для двух идентичных областей IoU будет равен 1, а для полностью разобщенных областей — 0. В остальных случаях значение будет варьироваться от 0 до 1. Обычно учитываются только те ограничивающие рамки, для которых IoU превышает определенное значение.

Средняя точность (Average Precision)

Предположим, мы хотим измерить, насколько хорошо распознается определенный класс объектов C. Для этого используется метрика Средняя точность, которая рассчитывается следующим образом:

  1. Рассматривается кривая точности-отзыва, показывающая точность в зависимости от порогового значения обнаружения (от 0 до 1).
  2. В зависимости от порога мы получаем больше или меньше объектов, обнаруженных на изображении, и разные значения точности и отзыва.
  3. Кривая выглядит следующим образом:

Изображение из 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 для генерации иерархической структуры регионов ROI, которые затем проходят через CNN для извлечения признаков, SVM-классификаторы для определения класса объекта и линейную регрессию для определения координат ограничивающей рамки. Официальная статья

RCNN

Изображение из van de Sande et al. ICCV11

RCNN-1

Изображения из этого блога

F-RCNN - Fast R-CNN

Этот подход похож на R-CNN, но регионы определяются после применения сверточных слоев.

FRCNN

Изображение из официальной статьи, arXiv, 2015

Faster R-CNN

Основная идея этого подхода заключается в использовании нейронной сети для предсказания ROI — так называемой сети предложений регионов (Region Proposal Network). Статья, 2016

FasterRCNN

Изображение из официальной статьи

R-FCN: Полностью сверточная сеть на основе регионов

Этот алгоритм еще быстрее, чем Faster R-CNN. Основная идея следующая:

  1. Извлекаем признаки с помощью ResNet-101.
  2. Признаки обрабатываются Position-Sensitive Score Map. Каждый объект из C классов делится на k\times k регионов, и сеть обучается предсказывать части объектов.
  3. Для каждой части из k\times k регионов все сети голосуют за классы объектов, и выбирается класс объекта с максимальным количеством голосов.

r-fcn image

Изображение из официальной статьи

YOLO - You Only Look Once

YOLO — это алгоритм реального времени с одним проходом. Основная идея следующая:

  • Изображение делится на S\times S регионы.
  • Для каждого региона CNN предсказывает n возможных объектов, координаты ограничивающей рамки и уверенность=вероятность * IoU.

YOLO

Изображение из официальной статьи

Другие алгоритмы

✍️ Упражнения: Обнаружение объектов

Продолжите обучение в следующей тетради:

ObjectDetection.ipynb

Заключение

В этом уроке вы познакомились с различными способами обнаружения объектов!

🚀 Задание

Прочитайте эти статьи и тетради о YOLO и попробуйте их самостоятельно:

Тест после лекции

Обзор и самостоятельное изучение

Задание: Обнаружение объектов

Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.