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

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

Требования

  1. Deep Learning Toolbox.

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

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

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

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

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

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

    net = mobilenetv2;
    

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

    analyzeNetwork(net);
    

  3. Изображение, которое вы хотите классифицировать, должно иметь тот же размер, что и вход сигнала сети. Для 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 сетевой объект.

  1. Звонить 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.

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

  3. Написание основной функции C++, которая вызывает predict. Для примера основного файла, который взаимодействует с сгенерированным кодом, смотрите Глубокое Обучение Prediction на графическом процессоре ARM Mali

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

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

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

 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' или значение, больше двух.

См. также

Функции

Похожие темы