Якорные ящики в YOLO: как они решаются

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

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

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

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

ОБНОВЛЕНИЕ: ошибся с этим вопросом, он должен был быть о том, как были выбраны обычные ограничивающие прямоугольники, а не якорные / предыдущие прямоугольники. Поэтому я отмечаю ответ @craq как правильный, потому что именно так определяются якорные блоки в соответствии с документом YOLO v2.


person LiNKeR    schedule 08.10.2018    source источник
comment
см. = › также   -  person LiNKeR    schedule 13.10.2018


Ответы (1)


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

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

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

  1. Проблема с присваиванием сложнее. Насколько я понимаю, часть процесса обучения для 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

person craq    schedule 15.08.2019