Всем привет. Это наша четвертая неделя. На этой неделе мы напишем о YOLO: как это работает?

Первый шаг к пониманию YOLO - это то, как он кодирует свой вывод. Входное изображение разделено на сетку ячеек S x S. Говорят, что для каждого объекта, присутствующего на изображении, одна ячейка сетки «отвечает» за его предсказание. Это ячейка, в которую попадает центр объекта.

Каждая ячейка сетки предсказывает ограничивающие прямоугольники B, а также вероятности класса C. Прогноз ограничивающей рамки состоит из 5 компонентов: (x, y, w, h, достоверность). Координаты (x, y) представляют центр поля относительно местоположения ячейки сетки (помните, что если центр поля не попадает внутрь сетки ячейка, чем эта ячейка за это не отвечает). Эти координаты нормализованы до значений от 0 до 1. Размеры блока (w, h) также нормализованы до [0, 1] относительно размера изображения. Давайте посмотрим на пример:

В прогнозе ограничивающей рамки есть еще один компонент - оценка достоверности. Формально мы определяем доверие как Pr (Объект) * IOU (пред, правда). Если в этой ячейке нет объекта, оценка достоверности должна быть равна нулю. В противном случае мы хотим, чтобы показатель достоверности равнялся пересечению по объединению (IOU) между предсказанным прямоугольником и основной истиной.

Обратите внимание, что достоверность отражает наличие или отсутствие объекта любого класса. Если вы не знаете, что такое долговая расписка, загляните сюда.

Теперь, когда мы понимаем 5 компонентов предсказания прямоугольника, помните, что каждая ячейка сетки делает B из этих прогнозов, так что всего имеется S x S x B * 5 выходных данных, связанных с предсказаниями ограничивающего прямоугольника.

Также необходимо предсказать вероятности классов, Pr (Class (i) | Object). Эта вероятность обусловлена ​​ячейкой сетки, содержащей один объект (см. это, если вы не знаете, что означает условная вероятность). На практике это означает, что если в ячейке сетки нет объекта, функция потерь не будет наказывать его за неверный прогноз класса, как мы увидим позже. Сеть предсказывает только один набор вероятностей классов для каждой ячейки, независимо от количества ящиков B. Таким образом, в сумме вероятности классов S x S x C

Добавляя предсказания класса к выходному вектору, мы получаем на выходе тензор S x S x (B * 5 + C).

YOLO на самом деле смотрит на изображение только один раз (отсюда и его название: You Only Look Once), но умно.

YOLO делит изображение на сетку 13 на 13 ячеек:

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

YOLO также выводит показатель достоверности, который говорит нам, насколько точно предсказанный ограничивающий прямоугольник действительно включает какой-либо объект. Эта оценка ничего не говорит о том, какой объект находится в коробке, только если форма коробки хороша.

Предполагаемые ограничивающие рамки могут выглядеть примерно так (чем выше показатель достоверности, тем более толстая рамка нарисована):

Для каждого ограничивающего прямоугольника ячейка также прогнозирует класс. Это работает как классификатор: дает распределение вероятностей по всем возможным классам. Используемая нами версия YOLO обучена на наборе данных P ascal VOC, который может обнаруживать 20 различных классов, таких как:

  • велосипед
  • лодка
  • машина
  • Кот
  • и так далее…

Оценка достоверности для ограничивающего прямоугольника и прогноз класса объединяются в одну окончательную оценку, которая сообщает нам вероятность того, что этот ограничивающий прямоугольник содержит объект определенного типа. Например, большой жирный желтый прямоугольник слева на 85% уверен, что он содержит объект «собака»:

Поскольку существует 13 × 13 = 169 ячеек сетки, и каждая ячейка предсказывает 5 ограничивающих прямоугольников, в итоге мы получаем 845 ограничивающих прямоугольников. Оказывается, что большинство из этих блоков будут иметь очень низкие оценки достоверности, поэтому мы оставляем только те блоки, окончательная оценка которых составляет 30% или более (вы можете изменить этот порог в зависимости от того, насколько точным вы хотите, чтобы детектор был).

Окончательный прогноз таков:

Из 845 ограничивающих рамок мы сохранили только эти три, потому что они дали наилучшие результаты. Но обратите внимание, что, несмотря на то, что было 845 отдельных прогнозов, все они были сделаны одновременно - нейронная сеть запускалась только один раз. Вот почему YOLO такой мощный и быстрый.

Спасибо за чтение.