Как изменить конфигурацию ssd mobil enet для обнаружения небольших объектов с помощью API обнаружения объектов tenorflow? - PullRequest
0 голосов
/ 05 марта 2020

Я пытаюсь обнаружить небольшие объекты из видеопотоков ipcam с помощью ssd mobilenetv2. Модель была обучена на изображениях с высоким разрешением этих небольших объектов, где объекты находятся очень близко к камере. Изображения были загружены из inte rnet. Я обнаружил, что изменение масштабов якорных ящиков и изменение свойства extractor.py являются предлагаемыми решениями для преодоления этого. Кто-нибудь может подсказать мне, как это сделать?

1 Ответ

1 голос
/ 13 апреля 2020

mobil enet -ssd - отлично подходит для крупных объектов, но его производительность для небольших объектов довольно низкая. Всегда лучше тренироваться с якорями, настроенными на аспект объектов rat ios и ожидаемых размеров. Еще одна вещь, которую следует принять во внимание, это то, что первая ветвь - это та, которая обнаруживает наименьшие объекты - разрешение этой ветки составляет 1/16 от входных данных - вы должны рассмотреть возможность добавления другой ветки на карте характеристик 1/8 - которая будет помочь с небольшими объектами.

Как изменить размеры анкеров и аспект rat ios: Давайте возьмем, например, файл pipe.config, который используется для конфигурация обучения - https://github.com/tensorflow/models/blob/master/research/object_detection/samples/configs/ssd_mobilenet_v2_coco.config. Здесь вы найдете следующие аргументы:

 90     anchor_generator {
 91       ssd_anchor_generator {
 92         num_layers: 6
 93         min_scale: 0.20000000298
 94         max_scale: 0.949999988079
 95         aspect_ratios: 1.0
 96         aspect_ratios: 2.0
 97         aspect_ratios: 0.5
 98         aspect_ratios: 3.0
 99         aspect_ratios: 0.333299994469
100       }
101     }
  • num_layers - количество ветвей - начинается с ветви с 1/16 входного ...
  • min_scale / max_scale - min_scale соответствует масштабу якорей в первой ветви, max_scale соответствует масштабу последней ветви. В то время как все ветви между ними получают масштаб от линейной интерполяции: min_scale + (max_scale - min_scale)/(num_layers - 1) * (#branch) (как определено в SSD: однократный детектор MultiBox - https://arxiv.org/pdf/1512.02325.pdf)
  • aspect_rat ios - список аспектов rat ios определяет якоря - таким образом, вы можете решить, какие якоря AR добавить, AR = 1.0 означает квадратный якорь, в то время как 2.0 означает, что якорь является альбомным - его ширина равна x2 высоты, 0.5 означает портрет, где высота x2 ширина ... код можно найти по следующему пути: https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/grid_anchor_generator.py и https://github.com/tensorflow/models/blob/master/research/object_detection/anchor_generators/multiscale_grid_anchor_generator.py
  • Еще один Дело в том, что в mobil enet -v1-ssd - первая ветвь имеет только 3 якоря, я не уверен, сколько имеет mobil enet -v2-ssd, но вы можете добавить больше якорей. Вам нужно будет изменить его в коде (в multiple_grid_anchor_generator.py ) 320, если layer == 0 и lower_boxes_in_lowest_layer: 321 layer_box_specs = [(0.1, 1.0), (scale, 2.0), (scale, 0.5 )] по мере того, как вы сеете, это жестко закодировано, чтобы быть тремя якорями ...

Как начать ветки раньше

Это также необходимо будет изменилось внутри кода. Каждая предопределенная модель имеет свой собственный файл модели - т.е. ssd_mobilenet_v2: https://github.com/tensorflow/models/blob/master/research/object_detection/models/ssd_mobilenet_v2_feature_extractor.py

строки 111: 117

feature_map_layout = {
    'from_layer': ['layer_15/expansion_output', 'layer_19', '', '', '', ''
                  ][:self._num_layers],
    'layer_depth': [-1, -1, 512, 256, 256, 128][:self._num_layers],
    'use_depthwise': self._use_depthwise,
    'use_explicit_padding': self._use_explicit_padding,
}

Вы можете выбрать, что слои начинаются с их имен.

Теперь для моих 2 центов я не пробовал mobil enet -v2-ssd, в основном использовал mobil enet -v1-ssd, но из моего опыта не очень хорошая модель для маленьких предметов. Я думаю, что это можно немного оптимизировать, редактируя якоря, но не уверен, что этого будет достаточно для ваших нужд. для одноэтапной сети типа ssd рассмотрите возможность использования ssd_mobilenet_v1_fpn_coco - она ​​работает на входном размере 640x640, и ее первая ветвь начинается с входного размера 1/8. (минусы - большая модель и большее время вывода)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...