Авторы: Александр Гончаренко, Дмитрий Раков

Введение

Привет! Я Саша, CTO enot.ai. Мы занимаемся ускорением инференса нейросетей: делаем собственный фреймворк для прунинга, NAS, квантования, а иногда оказываем консалтинговые услуги другим компаниям.

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

В ряде областей ускорение нейронных сетей — это один из важных аспектов при создании финального решения. Обычно это связано с тремя факторами:

  1. Отсутствие хорошего канала связи для передачи данных на сервер;
  2. Требование к сохранению личных даных;
  3. Желание увеличить пропускную способность или отзывчивость системы без увеличения стоимости железа.

Также может быть и комбинация этих причин. Сегодня мы рассмотрим 5 примеров задач, в которых встречается отсутствие связи.

Говоря про невозможность отправить что-то на сервер, мы обычно имеем в виду автопилоты: мало ли, где у нас ездит машина или летает дрон. Но ещё есть автоматическое управление поездом! Сперва поговорим про обыденное.

Детектор для дронов

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

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

Мы с товарищами решили попробовать ускорить Yolo-v8, которая на сегодняшний день де-факто стандарт для детектирования объектов.

Результаты ускорения Yolo-v8

Результаты ускорения Yolo-v8

Для решения этой задачи мы стартовали с хорошего бейслайна, правильно обучив сеть и подобрав гиперпараметры (2 и 3 строчки в таблице). В качестве основной модификации решили увеличить входное разрешение. Да, это увеличивает время инференса сети, но на этот шаг мы пошли потому, что следующим будет ускорение.

Затем применили технику Neural Architecture Selection. Это наша собственная разработка: комбинация прунинга, Hardware-Aware Neural Architecture Search и дистилляции.

После подбора архитектуры мы снова запустили подбор гиперпараметров для тюнинга. Четвёртая и пятая строка в таблице — наши финальные результаты: можем ускорить YOLOv8s в два раза и получить mAP50=48, а можем в три раза и получить mAP50=46.

В итоге мы получили модель, которая делает в полтора раза меньше GMACs, чем решение от Ultralitycs и опережает его на 6% mAP50. При этом, x3 ускоренная модель чутка медленнее, чем nano версия нашего бейслайна, а точнее на 3%.

Weed detector