Это мои заметки из программы стипендий 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.
Надеюсь, вам понравилось читать этот пост. Не стесняйтесь хлопать 😀