Якорные ящики в YOLO: как они решили - PullRequest
0 голосов
/ 09 октября 2018

Я прошел через несколько YOLO учебных пособий, но мне сложно кое-что понять, если предопределены поля привязки для каждой ячейки, на которую нужно разделить изображение.В одном из руководств, которые я прошел, изображение было разделено на 13x13 ячейки, и в нем говорилось, что каждая ячейка предсказывает 5 якорных ящиков (больше, чем это, хорошо, вот моя первая проблема, потому что это такжеговорит, что сначала обнаружит, какой объект присутствует в маленькой ячейке перед предсказанием блоков).

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

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

PS: То, что я в настоящее время думаю о том, как работает YOLO, состоит в том, что каждой ячейке в основном назначаются заранее определенные якорные блоки с классификатором на каждом конце, прежде чем выбираются ящики с наивысшими баллами для каждого класса.но я уверен, что это ничего не значит.

1 Ответ

0 голосов
/ 16 августа 2019

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

  1. Якоря определяются с помощью процедуры k-средних , просматривая все ограничивающие рамки в вашем наборе данных.Если вы смотрите на транспортные средства, те, которые вы видите сбоку, имеют соотношение сторон около 2: 1 (ширина = 2 * высота).Те, что видны спереди, будут примерно квадратными, 1: 1.Если ваш набор данных включает людей, соотношение сторон может быть 1: 3.Объекты переднего плана будут большими, фоновые объекты будут маленькими.Процедура k-средних определит выбор якорей, представляющих ваш набор данных.k = 5 для yolov3, но для каждой версии YOLO имеется разное количество якорей.

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

Задача присваивания более сложна.Насколько я понимаю, часть учебного процесса заключается в том, чтобы YOLO узнал, какие якоря использовать для какого объекта.Таким образом, «назначение» не является детерминированным, как это может быть для венгерского алгоритма.Из-за этого, как правило, несколько якорей будут обнаруживать каждый объект, и после этого вам нужно будет выполнить не-максимальное подавление, чтобы выбрать «лучший» (то есть, самый высокий уровень достоверности).

ТамВот пара моментов, которые мне нужно было понять, прежде чем я приступил к работе с якорями:

  • Якоря могут быть любого размера, поэтому они могут выходить за границы ячеек сетки 13x13.Они должны быть, чтобы обнаруживать крупные объекты.
  • Якоря входят только в последние слои YOLO.Нейронная сеть YOLO делает прогнозы 13x13x5 = 845 (при условии сетки 13x13 и 5 якорей).Прогнозы интерпретируются как смещения для якорей, из которых можно рассчитать ограничивающий прямоугольник.(Предсказания также включают в себя показатель достоверности / объектности и метку класса.)
  • Функция потерь YOLO сравнивает каждый объект в истинности основания с одним якорем.Он выбирает якорь (перед любыми смещениями) с самым высоким IoU по сравнению с основной истиной.Затем прогнозы добавляются в качестве смещений для привязки.Все остальные якоря обозначаются как фоновые.
  • Если якоря, которые были назначены объектам, имеют высокую IoU, их потеря мала.Якоря, которые не были назначены объектам, должны прогнозировать фон, устанавливая достоверность, близкую к нулю.Функция окончательной потери - это комбинация всех якорей.Поскольку YOLO пытается минимизировать общую функцию потерь, якорь, ближайший к наземной истине, обучается распознавать объект, а другие якоря обучаются его игнорировать.

Следующие страницы помогли мне понять YOLO.якоря:

https://medium.com/@vivek.yadav/part-1-generating-anchor-boxes-for-yolo-like-network-for-vehicle-detection-using-kitti-dataset-b2fe033e5807

https://github.com/pjreddie/darknet/issues/568

...