Генерация кода для нейронных сетей для глубокого обучения, предназначающихся для ARM Мали графические процессоры

С GPU Coder™ можно сгенерировать оптимизированный код для прогноза множества обученных нейронных сетей для глубокого обучения от Deep Learning Toolbox™. Сгенерированный код реализует глубокую сверточную нейронную сеть (CNN) при помощи архитектуры, слоев и параметров, которые вы задаете во входе SeriesNetwork или DAGNetwork объект. Генератор кода использует в своих интересах Библиотеку ARM® Compute для компьютерного зрения и машинного обучения. Для выполнения глубокого обучения на ARM Mali цели графического процессора вы генерируете код по компьютеру разработчика хоста. Затем чтобы создать и запустить исполняемую программу перемещают сгенерированный код в целевую платформу ARM. Например, HiKey960 является одной из целевых платформ, которые могут выполнить сгенерированный код.

Требования

  1. Deep Learning Toolbox.

  2. Модель Deep Learning Toolbox для пакета Сетевой поддержки MobileNet-v2.

  3. Интерфейс GPU Coder для Библиотек Глубокого обучения поддерживает пакет. Чтобы установить пакеты поддержки, выберите пакет поддержки из меню MATLAB® Add-Ons.

  4. ARM Вычисляет Библиотеку для компьютерного зрения, и машинное обучение должно быть установлено на целевом компьютере. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Устанавливающие Необходимые как условие продукты.

  5. Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Переменные окружения.

Загрузите предварительно обученную сеть

  1. Загрузите предварительно обученную сеть MobileNet-v2. Можно принять решение загрузить различную предварительно обученную сеть для классификации изображений. Если у вас нет необходимых пакетов поддержки установленными, программное обеспечение обеспечивает ссылку на загрузку.

    net = mobilenetv2;
    

  2. Объект net содержит DAGNetwork объект. Используйте analyzeNetwork функционируйте, чтобы отобразить интерактивную визуализацию сетевой архитектуры, обнаружить ошибки и проблемы в сети, и отобразить подробную информацию о сетевых слоях. Информация о слое включает размеры активаций слоя и learnable параметров, общего количества learnable параметров и размеров параметров состояния текущих слоев.

    analyzeNetwork(net);
    

  3. Изображение, которое вы хотите классифицировать, должно иметь тот же размер как входной размер сети. Для GoogLeNet, размера imageInputLayer 224 224 3. Classes свойство выхода classificationLayer содержит имена классов, изученных сетью. Просмотрите 10 случайных имен классов из общего количества 1 000.

    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 Вычисляют Библиотеку, используют targetlib опция cnncodegen команда. cnncodegen команда генерирует Код С++ для SeriesNetwork или DAGNetwork сетевой объект.

  1. Вызовите cnncodegen с 'targetlib' заданный как 'arm-compute-mali'. Например:

    net = googlenet;
    cnncodegen(net,'targetlib','arm-compute-mali','batchsize',1);
    

    Для 'arm-compute-mali', значение batchsize должен быть 1.

    'targetparams' аргументы пары "имя-значение", которые позволяют вам задать Специфичные для библиотеки параметры для ARM, Вычисляют Библиотеку, не применимо при предназначении для ARM Mali графические процессоры.

  2. cnncodegen команда генерирует код, make-файл, cnnbuild_rtw.mk, и другие вспомогательные файлы, чтобы создать сгенерированный код на целевом компьютере. Команда помещает все сгенерированные файлы в codegen папка.

  3. Запишите C++ основную функцию, которая вызывает predict. Для примера основной файл, который взаимодействует через интерфейс со сгенерированным кодом, видит Прогноз Глубокого обучения на ARM Мали графический процессор

  4. Переместите сгенерированный codegen папка и другие файлы с компьютера разработчика хоста на оборудование ARM при помощи вашей предпочтительной Безопасной Копии Файла (SCP) и Безопасной Shell (SSH) клиент. Создайте исполняемую программу на цели.

Сгенерированный код

Сеть DAG сгенерирована как класс C++ (CnnMain) содержа массив 103 классов слоя. Генератор кода сокращает количество слоев, оптимизацией сплава слоя сверточных и пакетных слоев нормализации. Отрывок объявления класса от cnn_exec.hpp файл показывают.

 cnn_exec.hpp Файл

  • setup() метод класса настраивает указатели и выделяет память для каждого слоя сетевого объекта.

  • predict() метод вызывает прогноз для каждого из этих 103 слоев в сети.

  • cnn_exec.cpp файл содержит определения объектных функций для CnnMain класс.

Двоичные файлы экспортируются для слоев параметрами такой, как полностью соединено и слои свертки в сети. Например, файлы cnn_CnnMain_Conv*_w и cnn_CnnMain_Conv*_b соответствуйте весам и сместите параметры для convolutional слои в сети. Генератор кода помещает эти двоичные файлы в codegen папка. Генератор кода создает файл библиотеки cnnbuild и места все сгенерированные файлы в codegen папка.

Ограничения

  • Генерация кода для графического процессора ARM Mali не поддержана для 2D сгруппированного слоя свертки, который имеет NumGroups набор свойств как 'channel-wise' или значение, больше, чем два.

Смотрите также

|

Похожие темы