Генерация кода для квантованных нейронных сетей для глубокого обучения

В глубоком обучении используются нейронные сетевые архитектуры, которые содержат много слоев обработки, включая сверточные слои. Модели глубокого обучения обычно работают с большими наборами маркированных данных. Выполнение вывода на этих моделях является вычислительно интенсивным, потребляя значительный объем памяти. Нейронные сети используют память для хранения входных данных, параметров (весов) и активаций с каждого слоя, когда вход распространяется через сеть. Глубокие нейронные сети обучены в MATLAB® используйте типы данных с плавающей точкой с одной точностью. Даже малые по размеру сети требуют значительного объема памяти и оборудования для выполнения этих арифметических операций с плавающей точкой. Эти ограничения могут препятствовать развертыванию моделей глубокого обучения на устройствах с низкой вычислительной степенью и меньшими ресурсами памяти. Используя более низкую точность для хранения весов и активаций, можно уменьшить требования сети к памяти.

Можно использовать Deep Learning Toolbox™ в паре с пакетом поддержки Deep Learning Toolbox Model Quantization Library, чтобы уменьшить площадь памяти глубокой нейронной сети путем квантования весов, смещений и активаций слоев свертки до 8-битных масштабированных целочисленных типов данных. Затем можно использовать MATLAB Coder™, чтобы сгенерировать оптимизированный код для квантованной сети. Сгенерированный код использует преимущества ARM® процессор SIMD при помощи библиотеки ARM Compute. Сгенерированный код может быть интегрирован в ваш проект как исходный код, статические или динамические библиотеки или исполняемые файлы, которые можно развернуть на различных платформах ARM CPU, таких как Raspberry Pi™.

Поддерживаемые слои и классы

Можно сгенерировать код С++ для этих слоев свертки, который использует ARM Compute Library и выполняет расчеты вывода в 8-битных целых числах:

  • 2-D слой свертки (convolution2dLayer (Deep Learning Toolbox))

  • 2-D сгруппированный слой свертки (groupedConvolution2dLayer (Deep Learning Toolbox)). Значение NumGroups входной параметр должен быть равен 2.

Генерация кода С++ для квантованных нейронных сетей для глубокого обучения поддерживает DAGNetwork (Deep Learning Toolbox) и SeriesNetwork (Deep Learning Toolbox) объекты.

Генерация кода

Чтобы сгенерировать код, который выполняет расчеты вывода в 8-битных целых числах, в вашем coder.ARMNEONConfig dlcfg объекта, установите эти дополнительные свойства:

dlcfg.CalibrationResultFile = 'dlquantizerObjectMatFile'; 
dlcfg.DataType = 'int8';

Кроме того, в приложении MATLAB Coder на вкладке Deep Learning установите значение Target library ARM Compute. Затем установите параметры Data type и Calibration result file path.

Вот 'dlquantizerObjectMatFile' - имя MAT-файла, который dlquantizer (Deep Learning Toolbox) генерирует для конкретных данных калибровки. Для целей калибровки установите ExecutionEnvironment свойство dlquantizer объект к 'CPU'.

В противном случае выполните шаги, описанные в Генерация Кода for Нейронные Сети для Глубокого Обучения with ARM Compute Library.

Для получения примера смотрите Генерацию кода для квантованных Нейронных сетей для глубокого обучения на Raspberry Pi.

См. также

Приложения

Функции

Объекты

Похожие темы