В глубоком обучении используются нейронные сетевые архитектуры, которые содержат много слоев обработки, включая сверточные слои. Модели глубокого обучения обычно работают с большими наборами маркированных данных. Выполнение вывода на этих моделях является вычислительно интенсивным, потребляя значительный объем памяти. Нейронные сети используют память для хранения входных данных, параметров (весов) и активаций с каждого слоя, когда вход распространяется через сеть. Глубокие нейронные сети обучены в 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.
codegen
| coder.loadDeepLearningNetwork
| calibrate
(Deep Learning Toolbox) | dlquantizationOptions
(Deep Learning Toolbox) | dlquantizer
(Deep Learning Toolbox) | validate
(Deep Learning Toolbox)