Это мои заметки из программы стипендий Intel® Edge AI Scholarship Foundation Nanodegree в Udacity.

Как и было обещано в моей предыдущей статье, я собираюсь написать об Intel OpenVINO Model Optimizer.

а. Основы оптимизатора модели

Оптимизатор моделей помогает преобразовывать модели в нескольких различных средах в промежуточное представление (IR), которое используется с механизмом вывода (IE). Это ОБЯЗАТЕЛЬНЫЙ шаг для перехода к IE, если модель не является одной из предварительно обученных моделей. Он включает улучшения в размере и скорости, но не в точности. Потери по точности есть, но они минимальные.

б. Квантование, замораживание, слияние

Есть и другие техники оптимизации, но я работал с этими тремя. Также есть аппаратная оптимизация, которую выполняет IE (я напишу об этом в следующей статье).

Квантование
Снижает точность весов и смещений за счет уменьшения времени и размера вычислений с некоторой потерей точности.

Модели в OpenVINO Toolkit по умолчанию имеют FP32 (32-битные значения с плавающей запятой). Доступны также FP16 и INT8 (8-битные целые числа). INT8 в настоящее время доступен только в предварительно обученных моделях И оптимизатор MOdel в настоящее время не поддерживает его.

FP16 и INT8 потеряют некоторую точность НО модель будет меньше, а время вычислений будет быстрее, что нам и нужно. 😉

Замораживание
Используется для точной настройки нейронной сети (NN). В TensorFlow (TF) он удаляет метаданные, которые необходимы только для обучения и некоторых других операций, например, связанных с обратным распространением. Замораживание моделей TF - хорошая идея перед выполнением различных выводов или преобразований с помощью Model Optimizer.

Fusion
Он объединяет определенные операции в одну. Таким образом, нам нужно меньше вычислительных ресурсов. MyAwesomeLayer = Слой пакетной нормализации + Слой активации + Сверточный слой. Здорово, правда? !!!! 😎

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

c. Поддерживаемые платформы с OpenVINO Toolkit

Caffe, Kaldi, MXNet, ONNX и TensorFlow (в алфавитном порядке) - это поддерживаемые платформы. ONNX поддерживает модели PyTorch и AplleML с помощью дополнительных шагов преобразования).

Есть различия в том, как работать с этими фреймворками. НО большинство из них обрабатываются под капотом OpenVINO Toolkit.

d. Промежуточное представительство (IR)

IR - это диалект, общий для слоев NN. Стандартная структура именования для архитектур NN. Таким образом, Conv2D в TF, Convolution в Caffe, Conv в ONNX преобразуются в слой Convolution в IR.

После этого они загружаются прямо в IE. Но сначала оптимизатор модели создает два файла:

  • .xml - описывает топологию сети, содержит архитектуру модели и другие важные данные.
  • .bin - содержит двоичные данные весов и смещений.

Оба файла необходимы для выполнения вывода. Мы генерируем их с помощью - data_type.

По своему опыту я выяснил, что у TF есть больше шагов (например, проверка, находится ли он в состоянии Frozen - Unfrozen).

В то время как Caffe проще, а ONNX еще проще!

е. Пользовательские слои

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

Следующая статья будет о механизме вывода Intel OpenVINO Toolkit.

Первоначально опубликовано на https://www.linkedin.com.

Надеюсь, вам понравилось читать этот пост. Не стесняйтесь хлопать 😀

Вы можете подписаться на меня в Medium или Twitter.