Можно сгенерировать оптимизированный код для предсказания или обнаружения множества обученных нейронных сетей для глубокого обучения в моделях Simulink®. Можно использовать Deep Neural Networks
библиотека блоков, чтобы сделать предсказания или классификации из окружения Simulink.
Deep Neural Networks
библиотека блоков включает:
Блок Predict (Deep Learning Toolbox) — Чтобы предсказать ответы с помощью обучившего сеть, заданного через параметры блоков. Этот блок позволяет загружать предварительно обученной сети в модель Simulink из MAT-файла или из функции MATLAB®.
Для получения дополнительной информации о работе с блоком Predict, смотрите Обнаружение Лейна и Транспортного средства в Simulink Используя Глубокое обучение (Deep Learning Toolbox).
Блок Image Classifier (Deep Learning Toolbox) — Чтобы классифицировать данные с помощью обученной глубокой нейронной сети, заданной через параметры блоков. Этот блок позволяет загружать предварительно обученной сети в модель Simulink из MAT-файла или из функции MATLAB.
Для получения дополнительной информации о работе с блоком Image Classifier, смотрите, Классифицируют Сигналы ECG на Simulink Используя Глубокое обучение (Deep Learning Toolbox).
Сгенерированный код реализует глубокую сверточную нейронную сеть (CNN) при помощи архитектуры, слоев и параметров, которые вы задаете во входе SeriesNetwork
(Deep Learning Toolbox) или DAGNetwork
Объект (Deep Learning Toolbox).
Можно сконфигурировать генератор кода, чтобы использовать в своих интересах библиотеку глубокой нейронной сети NVIDIA® CUDA® (cuDNN) и высокоэффективные библиотеки вывода TensorRT™ для NVIDIA графические процессоры.
Можно сконфигурировать генератор кода, чтобы использовать в своих интересах Math Kernel Library Intel® для Глубоких нейронных сетей (MKL-DNN) при предназначении для процессоров Intel или Библиотеки ARM® Compute для компьютерного зрения и машинного обучения при предназначении для процессоров ARM.
GoogLeNet был обучен на более чем миллионе изображений и может классифицировать изображения в 1 000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и животные). Сеть изучила богатые представления функции для широкого спектра изображений. Сеть берет изображение в качестве входа, и затем выводит метку для объекта в изображении вместе с вероятностями для каждой из категорий объектов. Этот пример показывает вам, как выполнить симуляцию и сгенерировать код CUDA для предварительно обученного googlenet
глубокая сверточная нейронная сеть и классифицирует изображение. Предварительно обученные модели доступны как пакеты поддержки от Deep Learning Toolbox™.
Загрузите предварительно обученную сеть GoogLeNet. Можно принять решение загрузить различную предварительно обученную сеть для классификации изображений. Если у вас нет необходимых пакетов поддержки установленными, установите программное обеспечение согласно предоставленным инструкциям.
net = googlenet;
Объект net
содержит DAGNetwork
объект. Используйте analyzeNetwork
функционируйте, чтобы отобразить интерактивную визуализацию сетевой архитектуры, обнаружить ошибки и проблемы в сети, и отобразить подробную информацию о слоях сети. Информация о слое включает размеры активаций слоя и настраиваемых параметров, общего количества настраиваемых параметров и размеров параметров состояния текущих слоев.
analyzeNetwork(net);
Изображение, которое вы хотите классифицировать, должно иметь тот же размер как входной размер сети. Для GoogLeNet, размера imageInputLayer
224 224 3. Classes
свойство выхода classificationLayer
содержит имена классов, изученных сетью. Просмотрите 10 случайных имен классов из общего количества 1 000.
classNames = net.Layers(end).Classes; numClasses = numel(classNames); disp(classNames(randperm(numClasses,10)))
'speedboat' 'window screen' 'isopod' 'wooden spoon' 'lipstick' 'drake' 'hyena' 'dumbbell' 'strawberry' 'custard apple'
Создайте новую модель Simulink и вставьте блок Predict из библиотеки Deep Neural Networks.
Добавьте блок Image From File (Computer Vision Toolbox) из библиотеки Computer Vision Toolbox™ и установите File name
параметр к peppers.png
. Добавьте блок Resize (Computer Vision Toolbox) от библиотеки Computer Vision Toolbox до модели. Установите параметр Specify блока Resize к Number of output rows and columns
и введите [224 224]
как значение для Number of output rows and columns. Этот бок изменит размер входного изображения к тому из входного слоя сети. Добавьте To Workspace (Simulink) в модель и поменяйте имя переменной на yPred
.
Дважды кликните на одном из блока Predict. Выберите Network from MATLAB function
для Network и googlenet для MATLAB function.
Соедините эти блоки как показано в схеме. Сохраните модель как googlenetModel
.
Параметры конфигурации модели определяют ускоряющий метод, используемый в процессе моделирования.
Откройте диалоговое окно Configuration Parameters, панель Solver. Чтобы скомпилировать вашу модель для ускорения и сгенерировать код CUDA, необходимо сконфигурировать модель, чтобы использовать решатель фиксированного шага. Следующая таблица показывает настройку решателя для этого примера.
Параметр | Установка | Эффект на сгенерированном коде |
---|---|---|
Type | Fixed-step | Обеспечивает постоянный (фиксированный) размер шага, который требуется для генерации кода |
Solver | discrete (no continuous states) | Применяет метод интегрирования фиксированного шага для вычисления производной состояния модели |
Fixed-step size | auto | Simulink выбирает размер шага |
Выберите панель Simulation Target. Установите Language на C++
.
Выберите GPU acceleration. GPU Coder™ определенные опции теперь отображается в панели Simulation Target > GPU Acceleration. В целях этого примера можно использовать значения по умолчанию этих параметров.
На панели Simulation Target. Установите Target Library в группе Deep learning к cuDNN
. Можно также выбрать TensorRT
.
Нажмите OK, чтобы сохранить и закрыть диалоговое окно Configuration Parameters.
Можно использовать set_param
сконфигурировать программно параметр модели из Окна команды MATLAB. Например,
set_param('googlenetModel','GPUAcceleration','on');
Чтобы создать графический процессор ускоренная модель и симулировать его, можно запустить модель путем выбора Run на вкладке Simulation или путем выполнения команды:
sim('googlenetModel');
в подсказке MATLAB.
Программное обеспечение сначала проверяет, чтобы видеть, был ли CUDA/C ++ код ранее скомпилирован для вашей модели. Если код был создан ранее, программное обеспечение запускает модель. Если код не был ранее создан, программное обеспечение сначала генерирует и компилирует CUDA/C ++ код, и затем запускает модель. Инструмент генерации кода помещает сгенерированный код в подпапку рабочей папки под названием slprj/_slprj/googlenetModel
.
Отобразите лучшие пять предсказанных меток и их связанные вероятности как гистограмма. Поскольку сеть классифицирует изображения в такое количество категорий объектов, и много категорий подобны, распространено рассмотреть лучшие пять точности при оценке сетей. Сеть классифицирует изображение как болгарский перец с высокой вероятностью.
im = imread('peppers.png'); predict_scores = out.yPred.Data(:,:,1); [scores,indx] = sort(predict_scores,'descend'); classNamesTop = classNames(indx(1:5)) h = figure; h.Position(3) = 2*h.Position(3); ax1 = subplot(1,2,1); ax2 = subplot(1,2,2); image(ax1,im); barh(ax2,out.yout{1}.Values.Data(1,5:-1:1,1)) xlabel(ax2,'Probability') yticklabels(ax2,classNamesTop(5:-1:1)) ax2.YAxisLocation = 'right'; sgtitle('Top 5 predictions using GoogLeNet')
Параметры конфигурации модели предоставляют много возможностей для генерации кода и процесса сборки.
Выберите панель Code Generation. Установите System target file на grt.tlc
. Можно также использовать конечный файл Embedded Coder® ert.tlc
.
Установите Language на C++
.
Выберите Generate GPU code. GPU Coder определенные опции теперь отображается в панели Code Generation > GPU Code.
Выберите Generate code only.
Выберите Toolchain. Для Linux® платформы выбирают NVIDIA CUDA | gmake (64-bit Linux)
. Для систем Windows® выберите NVIDIA CUDA (w/Microsoft Visual C++ 20XX) | nmake (64-bit windows)
.
На панели Code Generation > Report выберите Create code generation report и Open report automatically.
На панели Code Generation > Interface, набор Target Library в группе Deep learning к cuDNN
. Можно также выбрать TensorRT
.
В целях этого примера можно использовать значения по умолчанию специфичных для графического процессора параметров в панели Code Generation > GPU Code.
Нажмите OK, чтобы сохранить и закрыть диалоговое окно Configuration Parameters.
Можно также использовать set_param
сконфигурировать программно параметр модели из Окна команды MATLAB. Например,
set_param('googlenetModel','GenerateGPUCode','CUDA');
В Редакторе Simulink откройте приложение Simulink Coder.
Сгенерируйте код.
Сообщения появляются в Средстве просмотра Диагностики. Генератор кода производит исходные и заголовочные файлы CUDA и отчет генерации кода HTML. Генератор кода помещает файлы в папку сборки, подпапку под названием googlenetModel_grt_rtw
под вашей текущей рабочей папкой.
Пример сгенерированного кода CUDA.
Генерация кода для нейронной сети для глубокого обучения с пользовательским слоем не поддерживается в Simulink.
Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN) требует C++11
стандарт. Установка Target Library в группе Deep learning к MKL-DNN
автоматически генерирует C++11
код.
Использование блоков MATLAB Function в графиках Stateflow® не поддерживается.
Генератор кода не поддерживает все типы данных с языка MATLAB. Для поддерживаемых типов данных обратитесь к документации блока.
Для генерации кода графического процессора параметра Terminate function required в Code Generation> должна быть включена панель Interface.
rtwbuild
(Simulink Coder) | bdclose
(Simulink) | close_system
(Simulink) | get_param
(Simulink) | load_system
(Simulink) | open_system
(Simulink) | save_system
(Simulink) | set_param
(Simulink) | sim
(Simulink)