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. (минусы - большая модель и большее время вывода)