Machine Learning technology

Машинное обучение, которое ещё недавно было в основном темой научных статей со сложными формулами, сегодня занимает ключевое место в решении повседневных задач для многих индустрий. Особенных успехов отрасли удалось добиться в компьютерном зрении с применением свёрточных нейронных сетей (это один из вариантов машинного обучения для анализа изображений), которые обычно требуют самых больших вычислительных ресурсов и долго оставались недоступны для практического применения. Например, популярная платформа для соревнований по машинному обучению Kaggle предлагает своим участникам весьма интересные и полезные применения этих технологий сегодня: распознавание deepfake (намеренное искажение лиц и голоса в видеопотоке), выявление заболеваний по цифровым медицинским снимкам, предсказание погоды по фотографиям облаков со спутников и многие другие.

Инженеры Auriga следят за новостями по теме компьютерного зрения, чтобы применять новые идеи и возможности в своей работе. В этой статье речь пойдет о достаточно молодом, но уже полюбившемся нам продукте, Intel Distribution of OpenVINO Toolkit (далее просто OpenVINO для краткости), и о том, как он помогает нам решать задачи машинного обучения и компьютерного зрения.

OpenVINO – это бесплатный набор инструментов (фреймворк) для языков C++ и Python с готовыми предобученными моделями свёрточных нейронных сетей, оптимизатором для сторонних моделей, а также API для инференса (ответа обученной сети для новых не тренировочных данных) с помощью нескольких аппаратных вычислительных платформ от Intel. Стоит сразу отметить, что непосредственно создание и обучение моделей не поддерживаются, для этого придётся использовать сторонние фреймворки.

OpenVINO включает в себя множество модулей и скриптов, отметим основные из них:

  • Model Optimizer. Скрипт командной строки для конвертации и оптимизации моделей популярных фреймворков во внутренний формат IR, который используется для представления модели внутри OpenVINO.
  • Inference Engine. API для высокопроизводительного инференса с помощью подготовленной модели.
  • Model Zoo и Model Downloader – большая база предобученных моделей, позволяющая строить готовые решения «из коробки».
  • Предсобранные OpenCV и OpenVX. Готовые сборки популярных библиотек, содержащих всё необходимое для предобработки изображений и видео, а также дополнительные алгоритмы машинного обучения и компьютерного зрения.
  • Post-training optimization toolkit. Инструмент для оптимизации готовых моделей, в том числе для квантизации весов.
  • DL Workbench. Графический анализатор и оптимизатор моделей.
  • Demo applications. Набор примеров для быстрого старта.

Последовательность шагов для решения типичной задачи классификации, обнаружения или сегментации изображений с помощью OpenVINO может быть такой:

  • Выбор готовой предобученной модели из коллекции Model Zoo или создание и обучение новой модели с помощью одного из популярных фреймворков: TensorFlow, Caffe, PyTorch (понадобится преобразовать модель в формат ONNX).
  • Оптимизация модели средствами OpenVINO при необходимости.
  • Использование встроенного бенчмарка для выбора одной или нескольких платформ исполнения, а также оптимального способа инференса для имеющейся модели.
  • Создание конечного продукта или решения.
С OpenVINO машинное обучение становится проще и быстрее
Рис. 1. Последовательность шагов в OpenVINO для создания рабочей нейронной сети

Самое время рассказать о примерах того, как OpenVINO помог нам в Auriga эффективно справиться с некоторыми задачами компьютерного зрения:

Кейс 1. Задача обнаружения и классификации последовательности изображений должна быть решена с помощью компактной платформы Intel NUC, при этом основной процессор используется для достаточно сложной предварительной обработки так, что его ресурсов уже не хватает на остальные задачи. С помощью OpenVINO инференс перенесён с CPU на встроенный графический процессор (GPU), что позволило достичь нужной производительности.

Кейс 2. Требуется существенно повысить скорость работы имеющегося решения по выявлению аномалий с сохранением точности. Анализ кода показывает, что оптимизация алгоритмов и самой модели не способна дать требуемого прироста скорости. Модель перенесена на OpenVINO, оптимизирована встроенными в него средствами, далее задействован инференс с параллельной отсылкой данных на несколько вычислительных модулей (в данном случае на CPU и GPU одновременно).

Кейс 3. Необходимо в сжатые сроки представить прототип недорогого компактного устройства для подсчёта количества транспортных средств на стоянке. Выбрана готовая предобученная модель из базы Model Zoo, далее собран тестовый макет на основе платы Rasberry Pi с подключённым по USB донглом Intel Movidius.

С OpenVINO машинное обучение становится проще и быстрее
Рис. 2. Результат применения готовой модели из Model Zoo для обнаружения транспортных средств

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

Вместе с преимуществами, опыт использования OpenVINO позволил увидеть и ряд недостатков инструмента:

  • OpenVINO оптимизирован для использования в экосистеме Intel, платформы и вычислители других вендоров могут оказаться ограничены к применению. На сегодняшний день нейронные сети у всех ассоциируются с мощными GPU, а корпорация Intel заметно отстаёт, так что мы с большим нетерпением ожидаем выхода на рынок её дискретных видеокарт.
  • Модуль инференса имеет ограничения по типам слоёв в моделях и может не поддерживать часть из них для отдельных видов вычислителей. В этом случае можно воспользоваться fallback-платформой для такого слоя. К радости разработчиков, число подобных ограничений уменьшается по мере выхода новых версий OpenVINO.
  • Некоторые заявленные вычислительные платформы (например, Intel FPGA) находятся в ранней стадии запуска и пока не доступны широкому кругу разработчиков.

В заключении несколько основных идей по материалу статьи. OpenVINO – отличный инструмент как для начинающих свой путь в машинном обучении, так и для опытных профессионалов, которые работают над серьёзными продуктовыми решениями. С помощью этого фреймворка можно уменьшить время разработки и иметь более эффективный результат. Фреймворк хорошо структурирован и документирован, поэтому с ним легко работать. Корпорация Intel активно развивает OpenVINO вместе с вычислительными платформами к нему, что позволяет рассчитывать на его актуальность в будущем.