cnncodegen

Сгенерируйте код и создайте статическую библиотеку для Ряда или Сети DAG

Описание

cnncodegen(net,'targetlib',libraryname) генерирует Код С++ и создает статическую библиотеку для заданного сетевого объекта и целевую библиотеку при помощи значений по умолчанию для всех свойств.

пример

cnncodegen(net,'targetlib',libraryname,Name,Value) генерирует Код С++ и создает статическую библиотеку для заданного сетевого объекта и целевую библиотеку с опциями генерации дополнительного кода, заданными одним или несколькими Name,Value парные аргументы.

Примеры

свернуть все

Использование cnncodegen сгенерировать Код С++ для предварительно обученной сети для развертывания на процессоре ARM®.

Получите предварительно обученную модель GoogLeNet при помощи googlenet (Deep Learning Toolbox) функция. Эта функция требует Модели Deep Learning Toolbox™ для Сети GoogLeNet. Если вы не установили этот пакет поддержки, функция обеспечивает ссылку на загрузку. В качестве альтернативы см. https://www.mathworks.com/matlabcentral/fileexchange/64456-deep-learning-toolbox-model-for-googlenet-network.

net = googlenet;

Сгенерируйте код при помощи cnncodegen с 'targetlib' установите на 'arm-compute'. Для 'arm-compute', необходимо обеспечить 'ArmArchitecture' параметр.

cnncodegen(net,'targetlib','arm-compute'...
,'targetparams',struct('ArmComputeVersion','19.02','ArmArchitecture','armv8'));

Сгенерируйте Код С++ CUDA® от SeriesNetwork объект создается для архитектуры YOLO, обученной классификации набора данных PASCAL. Этот пример требует продукта GPU Coder™ и Интерфейса GPU Coder для Библиотек Глубокого обучения.

Получите предварительно обученную сеть YOLO и преобразуйте ее в SeriesNetwork объект.

url = 'https://www.mathworks.com/supportfiles/gpucoder/cnn_models/Yolo/yolonet.mat';
websave('yolonet.mat',url);
net = coder.loadDeepLearningNetwork('yolonet.mat');

SeriesNetwork объект net содержит 58 слоев. Эти слои являются слоями свертки, сопровождаемыми текучим ReLU и полносвязные слоя в конце сетевой архитектуры. Можно использовать net.Layers видеть все слои в этой сети.

Используйте cnncodegen функция, чтобы сгенерировать код CUDA.

cnncodegen(net,'targetlib','cudnn');

Генератор кода генерирует .cu и заголовочные файлы в '/pwd/codegen' папка. Серийная сеть сгенерирована как класс C++ под названием CnnMain, содержа массив 58 классов слоя. setup() метод этого класса настраивает указатели и выделяет ресурсы для каждого расположенного на слое объекта. predict() метод вызывает предсказание для каждого из этих 58 слоев в сети. cleanup() метод выпускает все ресурсы памяти и системные ресурсы, выделенные для каждого расположенного на слое объекта. Все бинарные веса (cnn_**_w) и файлы смещения (cnn_**_b) поскольку слои свертки сети хранятся в codegen папка. Файлы скомпилированы в статическую библиотеку cnnbuild.a (на Linux®) или cnnbuild.lib (на Windows®).

Входные параметры

свернуть все

Предварительно обученный SeriesNetwork или DAGNetwork объект.

Целевая библиотека и целевая платформа, чтобы сгенерировать код для в виде одного из значений в этой таблице.

ЗначениеОписание
'arm-compute'

Предназначайтесь для процессора ARM CPU, поддерживающего NEON инструкции при помощи ARM Вычисляют Библиотеку для компьютерного зрения и машинного обучения.

Требует MATLAB® Coder™ Interface для библиотек глубокого обучения.

'arm-compute-mali'

Цель процессор ARM GPU при помощи ARM Вычисляет Библиотеку для компьютерного зрения и машинного обучения.

Требует продукта GPU Coder и Интерфейса GPU Coder для Библиотек Глубокого обучения.

'cudnn'

Предназначайтесь для NVIDIA® графические процессоры при помощи библиотеки CUDA Deep Neural Network (cuDNN).

Требует продукта GPU Coder и Интерфейса GPU Coder для Библиотек Глубокого обучения.

'mkldnn'

Предназначайтесь для процессора CPU Intel® при помощи Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN).

Требует интерфейса MATLAB Coder для библиотек глубокого обучения.

'tensorrt'

Предназначайтесь для NVIDIA графические процессоры при помощи NVIDIA TensorRT™, высокоэффективного оптимизатора вывода глубокого обучения и библиотеки времени выполнения.

Требует продукта GPU Coder и Интерфейса GPU Coder для Библиотек Глубокого обучения.

Аргументы в виде пар имя-значение

Задайте дополнительные разделенные запятой пары Name,Value аргументы. Name имя аргумента и Value соответствующее значение. Name должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: cnncodegen(net,'targetlib','mkldnn','codegenonly',0,'batchsize',1) генерирует Код С++ для процессора Intel при помощи MKL-DNN и создает статическую библиотеку для сетевого объекта в net.
Общие опции

свернуть все

Положительное ненулевое целочисленное значение, задающее количество наблюдений, чтобы работать с в одном вызове сети predict() метод. При вызове network->predict(), размер входных данных должен совпадать с batchsize значение задано во время cnncodegen.

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

Булев флаг, который, когда включено, генерирует Код С++, не генерируя и создавая make-файл.

Специфичные для библиотеки параметры, заданные как 1- 1 структура, содержащая поля, описана в этих таблицах.

Параметры для ARM вычисляют библиотеку (центральный процессор)

Поле

Описание

ArmComputeVersion

Версия ARM Вычисляет Библиотеку по целевому компьютеру в виде '18.05', '18.08', '18.11', '19.02', или '19.05'. Значением по умолчанию является '19.05'. Если вы устанавливаете ArmComputeVersion к версии позже, чем '19.05', ArmComputeVersion установлен в '19.05'.

ArmArchitecture

Архитектура ARM поддержана на целевом компьютере в виде 'armv7 или 'armv8'. Заданная архитектура должна быть эквивалентной, архитектура для ARM Вычисляют Библиотеку по целевому компьютеру.

ArmArchitecture обязательный параметр.

Параметры для ARM вычисляют библиотеку (Мали графический процессор)

Поле

Описание

ArmComputeVersion

Версия ARM Вычисляет Библиотеку по целевому компьютеру в виде '19.02' или '19.05'. Значением по умолчанию является '19.05'. Если вы устанавливаете ArmComputeVersion к версии позже, чем '19.05', ArmComputeVersion установлен в '19.05'.

Параметры для библиотеки NVIDIA cuDNN

Поле

Описание

AutoTuning

Включите или отключите автоматическую настраивающую опцию. Включение автоматической настройки позволяет cuDNN библиотеке находить самые быстрые алгоритмы свертки. Это увеличивает эффективность для больших сетей, таких как SegNet и ResNet. Значением по умолчанию является true.

Примечание

Если AutoTuning включен для TensorRT цели, программное обеспечение генерирует код с автоматической отключенной настройкой. Это делает так, не генерируя предупреждающих сообщений или сообщений об ошибке.

DataType

Задайте точность входа типа данных тензора к сети. При выполнении вывода в 32-битных плаваниях используйте 'FP32'. Для 8-битного целого числа используйте 'INT8'. Значением по умолчанию является 'FP32'.

computecapability аргумент должен быть установлен в '6.1' или выше если DataType установлен в 'INT8'. Вычислите возможность 6,2, не поддерживает INT8 точность.

CalibrationResultFile

Местоположение MAT-файла, содержащего калибровочные данные. Значением по умолчанию является ''. Эта опция применима только когда DataType установлен в 'INT8'.

Параметры для библиотеки NVIDIA TensorRT

Поле

Описание

DataType

Задайте точность входа типа данных тензора к сети или тензору выход слоя. При выполнении вывода в 32-битных плаваниях используйте 'FP32'. Для 8-битного целого числа используйте 'INT8'. Для полуточности используйте 'FP16' Значением по умолчанию является 'FP32'.

computecapability аргумент должен быть установлен в '7.0' или выше если DataType установлен в 'FP16'.

computecapability аргумент должен быть установлен в '6.1' или выше если DataType установлен в 'INT8'. Вычислите возможность 6,2, не поддерживает INT8 точность.

DataPath

Местоположение набора данных изображений используется во время перекалибровки. Значением по умолчанию является ''. Эта опция применима только когда DataType установлен в 'INT8'.

Когда вы выбираете 'INT8' опция, TensorRT квантует данные с плавающей точкой к int8. Перекалибровка выполняется с уменьшаемым набором калибровочных данных. Калибровочные данные должны присутствовать в месте данных изображения, заданном DataPath.

NumCalibrationBatches

Числовое значение, задающее количество пакетов для int8 калибровка. Программное обеспечение использует продукт batchsize*NumCalibrationBatches выбрать случайное подмножество изображений от набора данных изображений, чтобы выполнить калибровку. batchsize*NumCalibrationBatches значение не должно быть больше количества изображений, существующих в наборе данных изображений. Значение по умолчанию равняется 50. Эта опция применима только когда DataType установлен в 'INT8'.

NVIDIA рекомендует, чтобы приблизительно 500 изображений были достаточны для калибровки. Обратитесь к документации TensorRT для получения дополнительной информации.

Опции графического процессора (только GPU Coder)

свернуть все

Это свойство влияет на графический процессор, предназначающийся только.

Вектор символов или строковый скаляр, задающий графический процессор NVIDIA, вычисляют возможность скомпилировать для. Аргумент берет формат major#.minor#.

Возможными значениями является '3.2'|'3.5'|'3.7'|'5.0'|'5.2'|'5.3'|'6.0'|'6.1'|'6.2'|'7.0'|'7.1'|'7.2'.

Значением по умолчанию является '3.5'.

Вопросы совместимости

развернуть все

Изменение поведения в будущем релизе

Введенный в R2017b