Назад
60

Практическое применение ускорения

60

Введение

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

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

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

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

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

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

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

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

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

Мы с товарищами решили попробовать ускорить 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

Ещё из личного опыта можно привести пример сегментирования сорняков(их обычно называют weed 😀) с помощью Jetson AGX Xavier.

Конечная цель такой сегментации — выжигать их лазером. Для решения мы воспользовались собственноручно написанным Neural Architecture Search (по механике он чем-то похож на вот такой дифференцируемый поиск), а далее применили Quantization Aware Training и поискали входное разрешение. В итоге результаты получились такие.

Ускорение при помощи NAS и NAS + QAT

Анализ последствий катастроф с дрона

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

Все без исключения победители начали решать свою задачу с выбора оптимальной базовой модели (мы взяли PIDNet), а потом применяли техники совместной дистилляции и прунинга. Запуск происходил на TensorRT для Jetson Nano, поэтому квантование не применяли.

3D детекция для беспилотного авто

В автопилотах большой спектр задач, но одна из самых «тяжёлых» — детекция объектов в 3D. Тяжёлая она в обоих смыслах: требует много вычислений и сегодня в этой задаче есть куда расти (в том смысле, что исследователи постоянно предлагают методы, которые дают существенные улучшения в качестве).

Задача тяжёлая хотя бы потому, что у свертки добавляется дополнительная размерность, глубина, которая увеличивает сложность вычислений. С этим борятся разными методами. Например, учитывают природу данных: в большинcтве своём 3D-данные разреженные, а значит можно часть из них игнорировать. Затем, уже на разреженных данных применяют процедуру прунинга из классического нейросетевого 2D-CV.

Не обходят вниманием и дистилляцию с квантованием. Например, в недавней статье авторы скрестили спарсити и современные результаты Post-Train Quantization. Благодаря этому они ускорили два варианта сети CenterPoint.

Ускорение двух вариантов CenterPoint при помощи дистилляции и квантования

Автономный поезд

Казалось бы, будущее уже наступило, Тесла до сих пор не выпустила нормальный автопилот, а что там эти поезда? Там поди точно всё плохо, дядьки-кочегары подкидывают уголёк в топку, зачем там нейронные сети? А вот и нет!

На самом деле, управление современным поездом — очень технологичный процесс. С нами им поделился Дмитрий Раков, Head of ML в НИИАС.

Мотивация создания систем-помощников машинисту такая:

  1. Уменьшение интервала движения электропоездов по кольцу МЦК; Для увеличения пропускной способности кольца необходимо снижать интервал между приходом поезда на станцию. Это значит, что скорость поезда должна быть близка к максимальной. Машинисту сложно концентрироваться на всём пути, поэтому он не может держать постоянную предельную скорость при управлении электропоездом. Полностью беспилотный электропоезд решает эту проблему, так как машина попросту не устаёт. Помимо этого машина может учитывать множество факторов при расчете профиля скорости, опираясь на сенсоры.
  2. Увеличение пропускной способности сортировочных станций; Многие сортировочные станции перегружены потоком грузов и работают круглосуточно. За каждой станцией закреплено несколько бригад. Как и в первом примере встаёт вопрос постоянной концентрации и работы на пределе. Внедрение беспилотного локомотива и ряда других технологий позволят создать автоматизированные сортировочные станции. Создание таких станций существенно повысит пропускную способность грузового движения.
  3. Повышение общего уровня безопасности на железной дороге. Нередко можно увидеть новости о различных происшествиях на ЖД: сход вагонов или столкновение на переезде. Частые причины: проезд на красный, неправильный стрелочный перевод или условия плохой видимости. Системы помощи машинисту позволят существенно сократить риски таких происшествий и произвести остановку в нужный момент.

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

  • набор сенсоров для работы с различными модальностями: видимый и инфракрасный спектр, результаты лазерного сканирования;
  • системы сбора навигационных данных;
  • подсистемы обработки данных с помощью нейронных сетей;
  • вычислительные блоки, на которых происходит вычисление всех алгоритмов.

В наших проектах применяется от 5 до 11 нейросетей, запущенных одновременно в рамках одного вычислительного блока.

Чтобы выполнить требования по скорости обработки данных мы применяем следующий стек технологий на уровне нейронных сетей:

  • Выбираем оптимальное разрешение и масштаб нейросети под него;
  • Применяем прунинг и дистилляцию для самых тяжёлых нейросетей;
  • Используем TensorRT в качестве основного фреймворка для инференса;
  • Для запуска на процессоре применяем OpenVino и квантование в 8бит.

Применение TensorRT ускоряет наш инференс в 1.5-3 раза, а прунинг в два.

Выводы

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

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

О них мы расскажем в следующих статьях.

Телеграм-канал

DeepSchool

Короткие посты по теории ML/DL, полезные
библиотеки и фреймворки, вопросы с собеседований
и советы, которые помогут в работе

Открыть Телеграм

Увидели ошибку?

Напишите нам в Telegram!