exponenta event banner

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

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

Требования

  1. Инструментарий для глубокого обучения.

  2. Модель набора инструментов для глубокого обучения для пакета поддержки MobileNet-v2 Network.

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

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

  5. Переменные среды для компиляторов и библиотек. Дополнительные сведения см. в разделе Переменные среды.

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

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

    net = mobilenetv2;
    

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

    analyzeNetwork(net);
    

  3. Изображение, которое требуется классифицировать, должно иметь тот же размер, что и входной размер сети. Для GoogLeNet - размер imageInputLayer (Глубоко Изучение Комплекта инструментов), 224 на 224 на 3. 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 
    

    Дополнительные сведения см. в разделе Список слоев глубокого обучения (панель инструментов глубокого обучения).

Создание кода с помощью cnncodegen

Чтобы создать код с помощью вычислительной библиотеки ARM, используйте targetlib вариант cnncodegen команда. cnncodegen команда генерирует код C++ для 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 Mali GPU

  4. Перемещение созданного codegen папка и другие файлы с компьютера разработки хоста на оборудование ARM с помощью предпочтительного клиента Secure File Copy (SCP) и Secure 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 не поддерживается для 2-D сгруппированного слоя свертки, который имеет NumGroups свойство установлено как 'channel-wise' или значение больше двух.

См. также

Функции

Связанные темы