Модель SSD
Модель YOLO работает на признаках, полученных после 2х полносвязных слоёв, применённых к активациям последнего свёрточного слоя. Поскольку этот слой даёт карту признаков в низком пространственном разрешении, то качество детекции малых объектов было невысоким. Также на эту карту признаков накладывалась сетка размера 7x7, извлекающая объекты, поэтому число задетектированных объектов могло быть не больше 49.
Модель SSD (Single Shot Detector [1]) исправляет оба этих ограничения за счёт того, что детекция осуществляется с разных свёрточных слоёв. Активации более глубоких слои имеют более обширную область видимости (receptive field), поэтому способны извлечь более крупные объекты. А с помощью более ранних слоёв (с более высоким пространственным разрешением) удаётся задетектировать более мелкие. Поскольку объекты детектируются на разных слоях, то максимальное число потенциально выделяемых детектором объектов больше, чем у YOLO.
Ниже приведено сравнение архитектуры SSD (сверху) и YOLO (снизу) [1]:
Последний слой выделяет объекты, за которым обязательно следует модуль подавления не-максимумов. Это важно, так как количество детекций будет избыточным, поскольку каждый объект может быть выделен повторно с разных слоёв.
Детекция в SSD осуществлялась не сразу, а после некоторого количества свёрточных слоёв, чтобы извлечь более информативные признаки. Первыми слоями брались слои предобученной для задачи классификации сети VGG-16. Начиная с определённого уровня на каждом слое действовали свёртки 3x3, предсказывавшие значения для соответствующей позиции на карте признаков, где:
-
рассматривались шаблонных рамок (anchor box), в качестве рамок рассматривались большая-малая-средняя по размеру и квадратная, вытянутая вбок, вытянутая вверх по форме;
-
вероятностей классов для каждого шаблона;
-
четыре смещения для позиции левого верхнего угла выделяющей рамки и смещений ширины и высоты относительно шаблонной рамки.
Примеры детекций кошки и собаки показаны ниже:
В примере выше кошка была извлечена с более раннего свёрточного слоя вытянутой вбок рамкой, а собака - с более позднего рамкой, вытянутой вниз.
Настройка модели
Модель настраивалась, минимизируя взвешенную сумму функции потерь классификации (точность определения класса) и функции потерь локализации (точность выделения рамок).
Поскольку каждый объект может быть локализован многократно с разных слоёв и используя разные шаблонные рамки, правильные выделения объектов соотносились лишь с одним выходом сети, соответствующим шаблонной рамке максимально похожей по мере IoU с правильной.
Ошибки локализации считались только для выходов сети, соотнесённых правильным рамкам. При локализации использовались сглаженные потери , а целевыми переменными выступали относительные ошибки локализации рамки относительно шаблонной рамки.
Ошибки классификации вычислялись кросс-энтропийной функцией потерь, причём считались для выходов сети, соотнесённых правильным рамкам, а также для ложных выделений несуществующих объектов. В последнем случае брались не все такие случаи, а лишь те, в которых модель была сильнее всего уверена, что объект там есть. Этот подход называется hard negative mining и используется для того, чтобы выровнять количество корректных и некорректных выделений. Это позволяет сосредоточить обучение модели на уточнении положительных примерах детекции, поскольку число отрицательных значительно больше.
При настройке активно использовалось расширение обучающей выборки (data augmentation), существенно улучшившее точность модели. В качестве расширения использовались отражения вдоль горизонтальной оси, выделение фрагмента на исходном изображении и на уменьшенной версии изображения, расширенного фоновыми пикселями.