Этот пример демонстрирует генерацию кода для применения глубокого обучения, пользующегося библиотекой NVIDIA TensorRT™. Это использует команду codegen
, чтобы сгенерировать файл MEX, чтобы запустить прогноз с сетью классификации изображений ResNet-50 использование TensorRT. Второй пример демонстрирует использование команды codegen
, чтобы сгенерировать файл MEX, который запускает 8-битный целочисленный прогноз с TensorRT для сети классификации логотипов.
CUDA® включил NVIDIA®, графический процессор с вычисляет возможность 3.2 или выше. Для 8-битного целочисленного примера NVIDIA® графический процессор с вычисляет возможность 6.1, или выше требуется.
NVIDIA инструментарий CUDA и драйвер.
Библиотека NVIDIA cuDNN (v7).
Библиотека NVIDIA TensorRT.
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты. Для подготовки переменных окружения смотрите Переменные окружения.
Интерфейс GPU Coder для Глубокого обучения поддерживает пакет для генерации кода глубокого обучения.
Deep Learning Toolbox™ для использования объекта DAGNetwork.
ResNet-50 поддерживают пакет Deep Learning Toolbox™ для использования предварительно обученной сети ResNet.
Используйте coder.checkGpuInstall, функционируют и проверяют, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно.
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'tensorrt'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
Следующий код создает папку в вашей текущей рабочей папке (pwd). Новая папка содержит только файлы, которые важны для этого примера. Если вы не хотите влиять на текущую папку (или если вы не можете сгенерировать файлы в этой папке), измените свою рабочую папку.
gpucoderdemo_setup('gpucoderdemo_tensorrt_target');
Мы используем популярную сеть DAG ResNet-50, чтобы показать классификацию изображений с TensorRT. Предварительно обученная модель ResNet-50 для MATLAB™ доступна в пакете поддержки ResNet-50 Deep Learning Toolbox. Чтобы загрузить и установить пакет поддержки, используйте Add-On Explorer. Чтобы узнать больше о нахождении и установке дополнений, смотрите, Получают Дополнения (MATLAB).
Функция resnet_predict.m загружает сеть ResNet-50 в персистентный сетевой объект. На последующих вызовах функции снова используется тот же персистентный сетевой объект.
Чтобы сгенерировать код от функции resnet_predict, используйте объект coder.gpuConfig с объектом настройки глубокого обучения, созданным для целевой библиотеки TensorRT.
cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('tensorrt'); codegen -config cfg resnet_predict -args {ones(224,224,3)} -report
Code generation successful: To view the report, open('codegen/mex/resnet_predict/html/report.mldatx').
im = imread('peppers.png'); im = imresize(im, [224,224]); predict_scores = resnet_predict_mex(double(im)); % % get top 5 probability scores and their labels [val,indx] = sort(predict_scores, 'descend'); scores = val(1:5)*100; net = resnet50; classnames = net.Layers(end).ClassNames; labels = classnames(indx(1:5));
Очистите статический сетевой объект, загруженный в памяти.
clear mex;
Мы можем также сгенерировать код TensorRT, который запускает вывод в int8 точности. Мы используем предварительно обученную сеть классификации логотипов, чтобы классифицировать логотипы на изображения.
Загрузите предварительно обученную сеть LogoNet
и сохраните ее как logonet.mat
, если она не существует. Сеть была разработана в MATLAB, и его архитектура подобна тому из AlexNet. Эта сеть может распознать 32 логотипа при различных условиях освещения и углах камеры. Сеть предварительно обучена в одинарной точности, с плавающей точкой.
net = getLogoNet();
TensorRT требует, чтобы калибровочный набор данных калибровал сеть, которая обучена в с плавающей точкой, чтобы вычислить вывод 8-битная целочисленная точность. Установите тип данных на int8 и путь к калибровочному набору данных с помощью объекта DeepLearningConfig как показано ниже. ''logos_dataset'' является подпапкой, содержащей изображения, сгруппированные их соответствующими метками классификации. Для поддержки int8 графический процессор вычисляет возможность, должен быть 6.1 и выше.
cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.GpuConfig.ComputeCapability = '6.1'; cfg.DeepLearningConfig = coder.DeepLearningConfig('tensorrt'); cfg.DeepLearningConfig.DataType = 'int8'; cfg.DeepLearningConfig.DataPath = 'logos_dataset'; cfg.DeepLearningConfig.NumCalibrationBatches = 50; codegen -config cfg logonet_predict -args {ones(227,227,3,'int8')} -report
Code generation successful: To view the report, open('codegen/mex/logonet_predict/html/report.mldatx').
im = imread('test.png'); im = imresize(im, [227,227]); predict_scores = logonet_predict_mex(int8(im)); % % get top 5 probability scores and their labels [val,indx] = sort(predict_scores, 'descend'); scores = val(1:5)*100; classnames = net.Layers(end).ClassNames; labels = classnames(indx(1:5));
Очистите статический сетевой объект, загруженный в памяти.
clear mex;