Как обрезать модель Detectron2?

#computer-vision #pytorch #web-deployment #object-detection #faster-rcnn

#компьютерное зрение #пыторч #веб-развертывание #обнаружение объектов #быстрее-rcnn #pytorch

Вопрос:

Я учитель, который месяцами изучает компьютерное зрение. Я был очень взволнован, когда смог обучить свою первую модель обнаружения объектов, используя более быструю модель R-CNN от Detectron2. И это работает как заклинание! Супер круто!

Но проблема в том, что для повышения точности я использовал самую большую модель в модельном зоопарке.

Теперь я хочу развернуть это как нечто, что люди могут использовать для облегчения своей работы. Но модель настолько велика, что для вывода одного изображения на моем процессоре, который является Intel i7-8750h, требуется ~ 10 секунд.

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

Мне нужно сделать ее меньше и быстрее для развертывания.

Итак, вчера я обнаружил, что есть что-то вроде обрезки модели!! Я был очень взволнован (поскольку я не специалист по компьютерам или данным, не вините меня (((: )

Я прочитал официальную документацию по обрезке PyTorch, но мне действительно трудно понять.

Я обнаружил, что глобальная обрезка — одна из самых простых в исполнении. введите описание изображения здесь

Но проблема в том, что я понятия не имею, какие параметры я должен записать в prune.

Как я уже сказал, я использовал более быструю модель R-CNN X-101. У меня это называется «model_final.pth«. И он использует базовый RCNN FPN.yaml, а его метаархитектура — «GeneralizedRCNN».

Это кажется простой настройкой для выполнения. Но, как я уже сказал, поскольку это не моя область, такому человеку, как я, очень трудно.

Я был бы более чем счастлив, если бы вы могли помочь мне в этом шаг за шагом.

Я оставляю свой cfg.yaml, который я использовал для обучения модели, и на всякий случай сохранил его, используя метод «dump» в классе конфигурации Detectron2. Вот ссылка на диск.

Заранее большое вам спасибо.

Ответ №1:

Итак, я полагаю, вы пытаетесь оптимизировать время вывода и достичь удовлетворительной точности. Не зная подробностей о типах ваших объектов, размере обучения, размере изображения, будет сложно предоставить предложения. Однако, как вы знаете, разработка проекта ML — это итеративный процесс, вы можете взглянуть на следующую страницу и проверить вывод и точность.

https://github.com/facebookresearch/detectron2/blob/master/MODEL_ZOO.md#coco-object-detection-baselines

Я бы посоветовал вам попробовать магистраль R50-FPN и посмотреть, насколько высока ваша точность. Тогда вы получите лучшее представление о том, что делать дальше.

Комментарии:

1. Спасибо, я обучил модель R50-FPN x3, и ее точность почти такая же, и она намного быстрее. Я, вероятно, буду использовать эту модель.

2. Кроме того, большая модель была больше для исследовательских целей, а не для развертывания. github.com/facebookresearch/detectron2/issues /…

3. вы также можете использовать большую модель для обработки данных — arxiv.org/abs/1712.04440

4. если вам нужно еще больше ускорить работу, вы можете использовать еще более мелкую магистраль, такую как Resnet34.

Ответ №2:

Если вы хотите развернуть на мобильных платформах / пограничных развертываниях. Вы можете попробовать недавно выпущенные программные системы D2go.

Это набор инструментов для глубокого обучения, основанный на PyTorch и Detectron2. С помощью современных эффективных магистральных сетей для мобильных устройств. Сквозное обучение модели, квантование и конвейер развертывания. Простой экспорт в формат TorchScript для развертывания.

https://github.com/facebookresearch/d2go/