Что такое ЙОЛО?

YOLO или You Only Look Once - популярный алгоритм обнаружения объектов в реальном времени. YOLO объединяет то, что когда-то было многоэтапным процессом, с использованием единой нейронной сети для выполнения как классификации, так и прогнозирования ограничивающих рамок для обнаруженных объектов. Таким образом, он в значительной степени оптимизирован для производительности обнаружения и может работать намного быстрее, чем запуск двух отдельных нейронных сетей для обнаружения и классификации объектов по отдельности. Это достигается путем перепрофилирования традиционных классификаторов изображений для использования в регрессионной задаче определения ограничивающих рамок для объектов. В этой статье рассматривается только YOLOv1, первая из многих итераций, через которые прошла эта архитектура. Хотя в последующих итерациях были внесены многочисленные улучшения, основная идея архитектуры осталась прежней. YOLOv1, называемый просто YOLO, может работать быстрее, чем обнаружение объектов в реальном времени, со скоростью 45 кадров в секунду, что делает его отличным выбором для приложений, требующих обнаружения в реальном времени. Он просматривает все изображение сразу и только один раз - отсюда и название You Only Look Once - что позволяет ему фиксировать контекст обнаруженных объектов. Это вдвое сокращает количество ложных срабатываний детектирования по R-CNN, которые смотрят на разные части изображения по отдельности. Кроме того, YOLO может обобщать представления различных объектов, делая его более применимым к множеству новых сред. Теперь, когда у нас есть общий обзор YOLO, давайте посмотрим, как это работает на самом деле.

Как работает YOLO?

YOLO основан на идее разделения изображения на более мелкие. Изображение разбито на квадратную сетку размером S × S, например:

Ячейка, в которой находится центр объекта, например центр собаки, является ячейкой, ответственной за обнаружение этого объекта. Каждая ячейка предсказывает B ограничивающих прямоугольников и показатель достоверности для каждого прямоугольника. По умолчанию для этой архитектуры модель предсказывает две ограничивающие рамки. Классификационная оценка будет от «0,0» до «1,0», где «0,0» - самый низкий уровень достоверности, а «1,0» - самый высокий; если в этой ячейке нет объекта, оценка достоверности должна быть «0,0», а если модель полностью уверена в своем прогнозе, оценка должна быть «1,0». Эти уровни достоверности отражают уверенность модели в том, что в этой ячейке существует объект и что ограничивающая рамка точна. Каждая из этих ограничивающих рамок состоит из 5 чисел: позиция x, позиция y, ширина, высота и достоверность. Координаты `(x, y)` представляют положение центра прогнозируемого ограничивающего прямоугольника, а ширина и высота являются долями относительно всего размера изображения. Доверие представляет собой долговую расписку между прогнозируемой ограничивающей рамкой и фактической ограничивающей рамкой, называемой наземной рамкой истинности. IOU расшифровывается как Intersection Over Union и представляет собой площадь пересечения предсказанных и наземных блоков истинности, разделенную на площадь объединения тех же предсказанных и наземных блоков истинности.

Помимо вывода ограничивающих рамок и оценок достоверности, каждая ячейка предсказывает класс объекта. Это предсказание класса представлено одним горячим вектором длиной C, количеством классов в наборе данных. Однако важно отметить, что, хотя каждая ячейка может прогнозировать любое количество ограничивающих прямоугольников и оценок достоверности для этих прямоугольников, она прогнозирует только один класс. Это ограничение самого алгоритма YOLO, и если в одной ячейке сетки есть несколько объектов разных классов, алгоритм не сможет правильно классифицировать оба. Таким образом, каждое предсказание из ячейки сетки будет иметь форму C + B * 5, где C - это количество классов, а B - количество прогнозируемых ограничивающих рамок. B здесь умножается на 5, поскольку включает (x, y, w, h, достоверность) для каждого коробка. Поскольку на каждом изображении есть ячейки сетки S × S, общий прогноз модели представляет собой тензор формы S × S × (C + Б ∗ 5 ).

Вот пример выходных данных модели при прогнозировании только одного ограничивающего прямоугольника на ячейку. На этом изображении истинный центр собаки представлен голубым кружком с надписью «центр объекта»; Таким образом, ячейка сетки, отвечающая за обнаружение и ограничение рамки, - это ячейка, содержащая голубую точку, выделенную темно-синим цветом. Ограничивающая рамка, предсказываемая ячейкой, состоит из 4 элементов. Красная точка представляет центр ограничивающей рамки (x, y), а ширина и высота представлены оранжевым и желтым маркерами соответственно. Важно отметить, что модель предсказывает центр ограничивающей рамки с шириной и высотой, а не положения верхнего левого и нижнего правого углов. Классификация представлена ​​одним горячим, и в этом тривиальном примере существует 7 различных классов. Пятый класс - это прогноз, и мы видим, что модель вполне уверена в своем прогнозе. Имейте в виду, что это всего лишь пример, показывающий, какой тип вывода возможен, поэтому значения могут не соответствовать каким-либо реальным значениям. Ниже приведено еще одно изображение всех ограничивающих рамок и прогнозов классов, которые будут фактически сделаны, и их окончательный результат.

YOLO Архитектура

Модель YOLO состоит из трех основных компонентов: головы, шеи и позвоночника. Магистраль - это часть сети, состоящая из сверточных слоев для обнаружения ключевых характеристик изображения и их обработки. Магистраль сначала обучается на наборе данных классификации, таком как ImageNet, и обычно обучается с более низким разрешением, чем окончательная модель обнаружения, поскольку для обнаружения требуются более мелкие детали, чем для классификации. В шейке используются функции сверточных слоев в магистрали с полностью связанными слоями для прогнозирования вероятностей и координат ограничивающего прямоугольника. Голова - это последний выходной слой сети, который можно менять местами с другими слоями с той же входной формой для передачи обучения. Как обсуждалось ранее, голова представляет собой тензор S × S × (C + B ∗ 5 ) и равен 7 × 7 × 30 в исходной исследовательской статье YOLO с разделенным размером S из 7, 20 классов C и 2 прогнозируемых ограничивающих прямоугольника B. Эти три части модели работают вместе, чтобы сначала извлечь из изображения ключевые визуальные особенности, а затем классифицировать и связать их.

ЙОЛО Тренинг

Как обсуждалось ранее, основа модели предварительно обучается на наборе данных классификации изображений. В исходной статье использовался набор данных о соревнованиях класса ImageNet 1000 и предварительно обучено 20 из 24 сверточных слоев, за которыми следует средний и полностью связанный слой. Затем они добавляют к модели еще 4 свертки, а также 2 полностью связанных слоя, поскольку было показано, что добавление как конвульсий, так и полностью связанных слоев увеличивает производительность. Они также увеличили разрешение с 244 × 244 до 448 × 448 пикселей, поскольку для обнаружения требуются более мелкие детали. Последний слой, который предсказывает как вероятности классов, так и координаты ограничивающего прямоугольника, использует линейную функцию активации, в то время как другие уровни используют функцию ReLU с утечкой. В исходной статье было обучено 135 эпох на наборах данных Pascal VOC 2007 и 2012 с использованием размера пакета 64. Увеличение и удаление данных использовалось для предотвращения переобучения, со слоем исключения со скоростью 0,5, используемым между первым и вторым полностью подключенными слои, чтобы побудить их учиться разным вещам (предотвращая совместную адаптацию). Более подробная информация о планировании скорости обучения и других гиперпараметрах обучения представлена ​​в исходной статье.

Функция потерь представляет собой простую сумму в квадрате, но ее необходимо изменить. Без модификации модель будет взвешивать ошибку локализации, разницу между предсказанными и истинными координатами ограничивающего прямоугольника и ошибку предсказания класса. Кроме того, когда ячейка сетки не содержит объекта, ее показатель достоверности стремится к 0, что может перекрывать градиенты из других ячеек, которые действительно содержат объекты. Обе проблемы решаются с помощью двух коэффициентов, λcoord и λnoobj, которые умножают потерю для координат и потери объекта соответственно. Для них заданы значения λcoord = 5 и λnoobj = 0,5, что увеличивает вес обнаружения и снижает важность нет потери объекта. И, наконец, чтобы оценить равенство малых ограничивающих рамок так же, как и больших прямоугольников, разница в ширине и высоте имеет квадратный корень, а не используется напрямую. Это гарантирует, что ошибка обрабатывается так же, как в больших и малых прямоугольниках, что в противном случае помешало бы модели предсказывать большие прямоугольники. Например, если прогнозируемая ширина ограничивающего прямоугольника равна 10, а фактическая ширина равна 8, и мы используем это уравнение

мы находим, что потеря равна 4. Когда мы масштабируем до прогнозируемой ширины 100 и фактической 98, потеря снова будет равна 4. Однако разница в 2 из истинных 98 незначительна по сравнению с разницей в 2 из 8. Следовательно, потеря между 10 и 8 должна быть намного больше, чем потеря между 100 и 98. Вместо этого мы используем это уравнение:

Используя это новое уравнение, потери для 10 и 8 составляют 0,111, а потери для 100 и 98 составляют 0,010. Имейте в виду, что рассматривать потери как число само по себе бессмысленно, но разница между значениями имеет смысл. Таким образом, тот факт, что 0,111 намного меньше 4, не имеет значения, но важно то, что разница между потерями для большой и малой ширины составляет 0% для разницы в квадрате, а разница составляет 90,99% для разницы в квадрате. Этот пример показывает, почему квадратный корень важен: мы хотим одинаково относиться к большим и малым ограничивающим прямоугольникам.

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

Давайте посмотрим на функцию потерь:

Давайте разберемся с математикой.

Двойное суммирование означает просто суммирование по всем ячейкам сетки (квадрат S × S) и всем ограничивающим прямоугольникам B .

Это функция идентификации, устанавливается в 1, если есть объект в ячейке i, и ограничивающей рамке j отвечает за прогноз (он отвечает, если у него самая высокая долговая расписка, о которой говорилось ранее).

Это представляет собой квадрат разницы между фактической координатой x и прогнозируемой координатой в ячейке i.

Это повторяется как для координат x, так и для y, чтобы найти разницу в квадрате между общей средней точкой. Наконец, функция идентичности равна «0», когда объект отсутствует или текущий ограничивающий прямоугольник не является ответственным. Другими словами, мы рассчитываем потери только для наилучшего ограничивающего прямоугольника. Таким образом, первая строка уравнения представляет собой сумму квадратов разностей между прогнозируемыми и фактическими средними точками объектов во всех ячейках сетки, в которых есть объект и которые являются ответственным ограничивающим прямоугольником.

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

Третья строка - это просто возведенная в квадрат разность между предсказанными вероятностями класса и фактическими вероятностями класса во всех ячейках, содержащих объект.

Четвертая строка такая же, но для всех ячеек, в которых нет объекта. Эти две линии суммируются по всем ограничивающим прямоугольникам, потому что каждый ограничивающий прямоугольник также предсказывает оценку достоверности в дополнение к координатам. Причина, по которой эти две строки разделены, заключается в том, что мы можем умножить четвертую строку на коэффициент noobj, чтобы менее сурово наказать модель, если она ошибочно классифицируется при отсутствии объекта. Однако есть одна странность, так как в строке 4 мы не видим функцию идентификации ни для одного объекта, но неясно, какой ограничивающий прямоугольник является ответственным за то, чтобы сделать функцию идентификации единичной. В исследовательском документе говорится, что ответственный ящик - это тот, у которого наивысшая долговая расписка, но если нет объекта, то нет основной ячейки истинности, и, следовательно, нет долговых обязательств. Можно обучить все ограничивающие прямоугольники или просто худшую или любую другую комбинацию, но в исходной статье не указано, что именно они сделали.

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

Например, если эта модель YOLO была обучена на 5 классах, она предсказала бы вектор типа pred в каждой ячейке. Если бы истинное значение было вектором истина, потери для этой ячейки были бы такими, как показано.

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

Ограничения YOLO

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

Заключение

YOLO - это невероятная модель компьютерного зрения для обнаружения и классификации объектов. Надеюсь, эта статья помогла вам понять, как работает YOLO на высоком уровне. Если вы хотите увидеть мельчайшие подробности реализации Python, не торопитесь: я опубликую следующий блог о реализации YOLO с нуля на PyTorch позже, и отслеживание вместе с кодом будет отличным способом действительно проверьте свое понимание. И YOLO - это только первый шаг в более крупном проекте, повторяющейся модели YOLO, которая еще больше улучшит обнаружение и отслеживание объектов в нескольких кадрах, получившее название ROLO. Дайте мне возможность увидеть реализацию того, что будет использовать повторяющиеся сети в сочетании с YOLO. Спасибо за чтение, удачного кодирования!

Ссылки

  • Оригинальную исследовательскую работу можно найти в формате pdf здесь.
  • Более подробная информация об исследовательской работе и других публикациях доступна на их сайте здесь.
  • Все другие источники связаны по мере их использования.