Настройка first_stage_anchor_generator в более быстрой модели rcnn
Я пытаюсь обнаружить какой-то очень маленький объект (~25x25 пикселей) из большого изображения (~ 2040, 1536 пикселей), используя более быструю модель rcnn из object_detect_api, отсюда https://github.com/tensorflow/models/tree/master/research/object_detection
Меня очень смущают следующие параметры конфигурации (я прочитал файл proto, а также попытался изменить их и протестировать):
first_stage_anchor_generator {
grid_anchor_generator {
scales: [0.25, 0.5, 1.0, 2.0]
aspect_ratios: [0.5, 1.0, 2.0]
height_stride: 16
width_stride: 16
}
}
Я в некотором роде новичок в этой области, если кто-то может немного рассказать об этих параметрах, я был бы очень признателен.
Мой вопрос заключается в том, как мне отрегулировать вышеуказанные (или другие) параметры, чтобы учесть тот факт, что у меня есть очень маленькие объекты фиксированного размера для обнаружения на большом изображении.
Спасибо
1 ответ
Я не знаю фактического ответа, но я подозреваю, что Faster RCNN работает в обнаружении объектов Tensorflow следующим образом:
В этой статье говорится:
"Якоря играют важную роль в Faster R-CNN. Якорь - это блок. В конфигурации по умолчанию Faster R-CNN есть 9
якоря в положении изображения. Следующий график показывает 9 якорей в позиции (320, 320)
изображения с размером (600, 800)
".
и автор дает изображение, показывающее перекрытие прямоугольников, это предлагаемые области, которые содержат объект, основанный на части "CNN" модели "RCNN", затем следует часть "R" модели "RCNN", которая является предложение региона. Чтобы сделать это, есть другая нейронная сеть, которая обучена наряду с CNN, чтобы выяснить коробку наилучшего соответствия. Существует множество "предложений", в которых объект может быть основан на всех клетках, но мы до сих пор не знаем, где он находится.
Задача этой нейронной сети "предложение региона" состоит в том, чтобы найти правильный регион, и она обучается на основе меток, которые вы предоставляете с координатами каждого объекта на изображении.
Глядя на этот файл, я заметил:
line 174: heights = scales / ratio_sqrts * base_anchor_size[0]
line 175: widths = scales * ratio_sqrts * base_anchor_size[[1]]
которая, кажется, является конечной целью конфигураций, найденных в файле конфигурации (для создания списка скользящих окон с известной шириной и высотой). Хотя base_anchor_size создается по умолчанию [256, 256]
, В комментариях автор кода написал:
"Например, настройка scales=[.1, .2, .2]
а также aspect ratios = [2,2,1/2]
означает, что мы создаем три блока: один с масштабом .1
, соотношение сторон 2
один со шкалой .2
, соотношение сторон 2
и один со шкалой .2
и соотношение сторон 1/2
, Каждая коробка умножается наbase_anchor_size
"перед размещением над соответствующим центром."
который дает представление о том, как создаются эти блоки, код, кажется, создает список блоков на основе scales =[stuff]
а также aspect_ratios = [stuff]
параметры, которые будут использоваться для скольжения по изображению. Масштаб довольно прост и представляет собой квадрат по умолчанию 256
от 256
следует масштабировать перед использованием, а соотношение сторон - это то, что превращает исходную квадратную рамку в прямоугольник, который ближе к (масштабированной) форме объектов, с которыми вы ожидаете столкнуться.
Это означает, что для оптимальной настройки масштабов и пропорций вы должны найти "типичные" размеры объекта на изображении, каким бы он ни был (20
от 30
, 5
от 10
и т. д.) и выяснить, сколько по умолчанию 256
от 256
квадратное поле должно быть масштабировано, чтобы оптимально соответствовать этому, затем найдите "типичные" пропорции ваших объектов (согласно Google соотношение сторон: отношение ширины к высоте изображения или экрана.) и установите их как свои параметры соотношения сторон.
Примечание: кажется, что количество элементов в списках scale и aspect_ratios в файле конфигурации должно быть одинаковым, но я точно не знаю.
Также я не уверен, как найти оптимальный шаг, но если ваши объекты меньше, чем 16
от 16
Пиксели скользящего окна, которое вы создали, установив шкалы и пропорции на то, что вы хотите, могут просто пропустить ваш объект в целом.
Как я полагаю, якоря предложений генерируются только для типов моделей Faster RCNN. В этом файле вы указали, какие параметры могут быть установлены для генерации якорей в строке, упомянутой вами в config.
Я попытался установить base_anchor_size, однако мне это не удалось. Хотя в этом руководстве FasterRCNNTutorial упоминается, что:
[...] вам также необходимо настроить размеры якоря и пропорции в файле.config. Базовый размер анкера составляет 255 255.
Коэффициенты привязки умножат размер x и разделят размер y, поэтому если у вас соотношение сторон 0,5, якорь 255x255 станет 128x510. Каждое соотношение сторон в списке применяется, затем результаты умножаются на шкалы. Поэтому первым шагом является изменение размеров ваших изображений до размера обучения / тестирования, а затем вручную проверьте, какие самые маленькие и самые большие объекты вы ожидаете, и каковы будут самые экстремальные пропорции. Настройте файл конфигурации со значениями, которые будут охватывать эти случаи, когда базовый размер привязки корректируется с помощью пропорций и умножается на шкалы.
Я думаю, что это довольно просто. Я также использовал этот "обходной путь".