Часть 1: Сетевая архитектура и канальные элементы слоев YOLO

Привет, меня зовут Хирото Хонда, инженер отдела исследований и разработок компании DeNA Co., Ltd. в Японии.

В этой статье я делюсь деталями обучения детектора, которые реализованы в нашем репозитории PyTorch_YOLOv3, исходный код которого был открыт DeNA 6 декабря 2018 года.
В прошлый раз я представил наше репо и подчеркнул почему важно воспроизводить тренировочные показатели. На этот раз я хотел бы показать структуру сетевой архитектуры YOLOv3 и канальные элементы слоев YOLO (слоев обнаружения) для многомасштабного обнаружения объектов. Некоторые важные детали в этом посте написаны не в бумаге, а в оригинальной реализации.

  1. Сетевая архитектура

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

  • Магистральная сеть: darknet53

Магистральная сеть извлекает карту функций из входного изображения. Сеть в основном использует остаточные блоки в качестве основных компонентов. Каждый остаточный блок состоит из пары сверточных слоев 3 × 3 и 1 × 1 с быстрым соединением. Общее количество сверточных слоев составляет 53, поэтому сеть придумала darknet53. Размер окончательной карты объектов имеет в 1/32 раза меньшее пространственное разрешение, чем входное изображение.

  • Сеть апсэмплинга и слои YOLO

Три слоя YOLO, отвечающие за обнаружение объектов в разных масштабах, ответвляются от «сети повышающей дискретизации» - правой пирамиды на рис. 1. Детали сети показаны на рис. 2.

На первом слое YOLO разрешение сетки составляет 1/32 от входного изображения, и обнаруживаются большие объекты. Разрешение последнего слоя YOLO составляет 1/8, и этот слой способен обнаруживать небольшие объекты. Как показано на рис. 2, между слоями YOLO имеется несколько сверточных слоев и слой повышающей дискретизации. Каждый уровень имеет подуровни свертки, пакетной нормализации и активации ReLU с утечкой. Существуют быстрые соединения, которые объединяют промежуточные слои darknet53 со слоем сразу после слоя с повышающей дискретизацией.

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

2. Канальные элементы слоев YOLO (элементы каналов YOLO)

Каждый слой YOLO имеет размер (f_h, f_w, ch), где f_h, f_w и ch - высота, ширина и количество каналов карты функций соответственно.

Количество каналов в каждом слое YOLO равно N_anchor × (N_class +5), где N_anchor - количество привязок, а N_class - количество классов объектов. На рис. 3 представлена ​​карта всех элементов канала YOLO. По умолчанию YOLOv3 использует 3 якоря и 80 классов. Следовательно, количество каналов в одном слое YOLO составляет 3 × (80 + 5).

Девять якорей изображены на рис. 3 с использованием фактических соотношений сторон. Якорные рамки - это зависимые от набора данных ограничительные рамки ссылок, которые предварительно определяются с помощью кластеризации k-средних. Очевидно, что существует большой разброс в размере привязки - наибольший размер привязки составляет (373, 326) пикселей, а наименьший (10, 13) пикселей. Якорь, похожий на ограничивающую рамку целевого объекта, имеет то преимущество, что он настраивается на цель более точно, чем другие.

Теперь, как работает каждый элемент канала?

  • каналы x, y, w, h

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

На рис. 4 изображена взаимосвязь между блоком привязки и блоком наземной истины. Центры якорей задаются в верхнем левом углу квадрата сетки. Значения x, y в каналах x, y обучаются таким образом, что смещение прямоугольника наземной истинности из угла выводится как относительное положение внутри прямоугольника сетки: (σ (x), σ (y)), где σ - сигмовидная функция, выходные значения которой находятся в диапазоне от 0 до 1 - w, значения канала h w , h используются для регулировки ширины и высоты поля. Как показано на рис. 4 (справа), w обучен так, чтобы соотношение между шириной привязки w_ a и шириной поля истинности w_GT равно exp (w).

  • obj каналы

Значения каналов obj представляют «объектность», которая указывает вероятность того, что объект принадлежит сетке. Например, если значение obj равно 0,98, объект, скорее всего, там. Значения Obj используются для фильтрации предполагаемых объектов с низкой вероятностью.

  • каналы cls

Значения cls используются для классификации объектов. Количество каналов классов соответствует количеству классов в наборе данных - 80 в случае набора данных COCO. Каналы обучаются так, что только значение канала класса, соответствующего классу наземной достоверности, становится 1, а остальные 0. Во время вывода вы можете просто argmax значения канала, чтобы выбрать индекс канала.

Резюме:

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

На этот раз все. В следующий раз я объясню самую важную часть - назначение целей на каналы YOLO.

Часть 0. Введение

Часть 1. Сетевая архитектура и канальные элементы слоев YOLO.

Часть 2. Как ставить цели на многоуровневые якоря

Часть 3. Каковы фактические функции потерь?

Посмотрите нашу реализацию YOLOv3 на PyTorch !!

https://github.com/DeNA/PyTorch_YOLOv3

Спасибо, до новых встреч во второй части!