Каковы веса бэкэнда в моделях глубокого обучения (йоло)? - PullRequest
0 голосов
/ 06 января 2020

довольно плохо знаком с глубоким изучением, но, похоже, не смог найти / выяснить, что такое веса бэкэнда, такие как

full_yolo_backend.h5
squeezenet_backend.h5

Из того, что я нашел и экспериментировал, эти веса бэкэнда принципиально различные модели архитектуры, такие как

  • модель yolov2 имеет 40+ слоев, но бэкэнд только 20+ слоев (?)
  • вы можете построить поверх базовой модели с вашими собственными сетями ( ?)
  • использование бэкэнд-моделей, как правило, приводит к худшим результатам (?)

Я надеялся найти какое-то объяснение весов бэкенда по сравнению с реальными моделями для целей обучения. Большое вам спасибо!

1 Ответ

0 голосов
/ 06 января 2020

Я точно уверен, какую реализацию вы используете, но во многих приложениях вы можете рассматривать глубокую модель как средство извлечения, чей вывод более или менее зависит от задачи c, за которым следует ряд спецификаций задачи c head.

Выбор бэкэнда зависит от ваших конкретных c ограничений с точки зрения компромисса между точностью и вычислительной сложностью. Примерами классических, но трудоемких решений для бэкэндов являются re snet -101, re snet -50 или VGG, которые могут быть объединены с FPN (сетями пирамидных элементов) для получения многомасштабных функций. Однако, если скорость - ваша главная задача, вы можете использовать меньшие бэкэнды, такие как различные архитектуры Mobil eNet или даже ванильные сети, такие как те, которые использовались в оригинальных документах Yolov1 / v2 (tinyYolo - крайний случай).

Как только вы выбрали свой бэкэнд (вы можете использовать предварительно обученный), вы можете загрузить его веса (это то, что ваши файлы * h5). Кроме того, вы добавите небольшую головку, которая будет выполнять задачи, которые вам нужны: это может быть классификация, регрессия bbox или, например, в сегментации фона / фона MaskRCNN. Для Yolov2 вы можете просто добавить очень мало, например, 3 сверточных слоя (с нелинейностями, конечно), которые будут выводить тензор размером

BxC1xC2xAxP
#B==batch size
#C1==number vertical of cells
#C2==number of horizontal cells
#C3==number of anchors
#C4==number of parameters (i.e. bbx parameters, class prediction, confidence)  

Затем вы можете просто сохранить / загрузить веса эта голова отдельно. Когда вы довольны своими результатами, совместные (сквозные) тренировки обычно дают небольшой прирост точности.

Наконец, возвращаясь к последним вопросам, я предполагаю, что вы получаете плохие результаты с бэкэндами, потому что вы загружаете только бэкэнд-веса, а не веса голов. Другая возможность состоит в том, что вы используете голову, тренированную с бэкэндами X, но вы переключаете бэкэнд на Y. В этом случае, так как голова ожидает другие функции, естественно видеть снижение производительности.

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