С помощью GPU Coder™ можно сгенерировать оптимизированный код для предсказания множества обученных нейронных сетей для глубокого обучения от Deep Learning Toolbox™. Сгенерированный код реализует глубокую сверточную нейронную сеть (CNN) с помощью архитектуры, слоев и параметров, которые вы задаете во входе SeriesNetwork
(Deep Learning Toolbox) или DAGNetwork
(Deep Learning Toolbox) объект. Генератор кода использует преимущества ARM®
Вычислительная библиотека для компьютерного зрения и машинного обучения. Для выполнения глубокого обучения на целевых графических процессорах ARM Mali, вы генерируете код на компьютере разработчика хоста. Затем, чтобы создать и запустить исполняемую программу, переместите сгенерированный код на целевую платформу ARM. Например, HiKey960 является одной из целевых платформ, которая может выполнять сгенерированный код.
Deep Learning Toolbox.
Модель Deep Learning Toolbox для MobileNet-v2 пакета поддержки сети.
Пакет поддержки интерфейса GPU Coder для библиотек глубокого обучения. Чтобы установить пакеты поддержки, выберите пакет поддержки из MATLAB® Add-Ons меню.
Библиотека ARM Compute Library для компьютерного зрения и машинного обучения должна быть установлена на целевом компьютере. Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Установка необходимых продуктов.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации см. раздел Переменные окружения.
Загрузите предварительно обученную MobileNet-v2 сеть. Можно выбрать загрузку другой предварительно обученной сети для классификации изображений. Если у вас нет необходимых пакетов поддержки, программное обеспечение предоставляет ссылку для загрузки.
net = mobilenetv2;
Объект net
содержит DAGNetwork
объект. Используйте analyzeNetwork
(Deep Learning Toolbox) функция для отображения интерактивной визуализации сетевой архитектуры, для обнаружения ошибок и проблем в сети, а также для отображения подробной информации о слоях сети. Информация о слое включает размеры активации слоя и настраиваемые параметры, общее количество настраиваемых параметров и размеры параметров состояния рекуррентных слоев.
analyzeNetwork(net);
Изображение, которое вы хотите классифицировать, должно иметь тот же размер, что и вход сигнала сети. Для GoogLeNet, размер imageInputLayer
(Deep Learning Toolbox) составляет 224 на 224 на 3. The Classes
свойство выхода classificationLayer
(Deep Learning Toolbox) содержит имена классов, выученных сетью. Просмотрите 10 случайных имен классов из 1000.
classNames = net.Layers(end).Classes; numClasses = numel(classNames); disp(classNames(randperm(numClasses,10)))
cock apiary soap dispenser titi car wheel guenon muzzle agaric buckeye megalith
Для получения дополнительной информации смотрите Список слоев глубокого обучения (Deep Learning Toolbox).
cnncodegen
Чтобы сгенерировать код с помощью ARM Compute Library, используйте targetlib
опция cnncodegen
команда. The cnncodegen
команда генерирует код С++ для SeriesNetwork
или DAGNetwork
сетевой объект.
Звонить cnncodegen
с 'targetlib'
задается как 'arm-compute-mali'
. Для примера:
net = googlenet; cnncodegen(net,'targetlib','arm-compute-mali','batchsize',1);
Для 'arm-compute-mali'
, значение batchsize
должен быть 1
.
The 'targetparams'
аргументы пары "имя-значение", которые позволяют вам задать специфические для библиотеки параметры для ARM Compute Library, неприменимы при нацеливании на графические процессоры ARM Mali.
The cnncodegen
команда генерирует код, make-файл, cnnbuild_rtw.mk
и другие поддерживающие файлы для создания сгенерированного кода на целевом компьютере. Команда помещает все сгенерированные файлы в codegen
папка.
Написание основной функции C++, которая вызывает predict
. Для примера основного файла, который взаимодействует с сгенерированным кодом, смотрите Глубокое Обучение Prediction на графическом процессоре ARM Mali
Переместите сгенерированный codegen
папка и другие файлы от хоста компьютера разработчика к оборудованию ARM с помощью предпочтительных клиентов Secure File Copy (SCP) и Secure Shell (SSH). Создайте исполняемую программу на целевом компьютере.
Сеть DAG генерируется как класс C++ (CnnMain
), содержащий массив из 103 классов слоев. Генератор кода уменьшает количество слоев путем оптимизации слияния слоев сверточной и пакетной нормализации. Фрагмент объявления класса из cnn_exec.hpp
показан файл.
The setup()
метод класса настраивает указатели и выделяет память для каждого слоя сетевого объекта.
The predict()
способ вызывает предсказание для каждого из 103 слоев в сети.
The cnn_exec.cpp
файл содержит определения функций объекта для CnnMain
класс.
Двоичные файлы экспортируются для слоев с такими параметрами, как полносвязные и свертки в сети. Для образца, файлов cnn_CnnMain_Conv*_w
и cnn_CnnMain_Conv*_b
соответствуют весам и параметрам смещения для convolutional
слои в сети. Генератор кода помещает эти двоичные файлы в codegen
папка. Генератор кода создает файл библиотеки cnnbuild
и помещает все сгенерированные файлы в codegen
папка.
Генерация кода для графического процессора ARM Mali не поддерживается для 2-D сгруппированного слоя свертки, который имеет NumGroups
набор свойств как 'channel-wise'
или значение, больше двух.