С помощью GPU Coder™ можно сгенерировать оптимизированный код для Simulink® модели, содержащие множество обученных нейронных сетей для глубокого обучения. Можно реализовать функции глубокого обучения в Simulink с помощью блоков MATLAB Function или с помощью блоков из библиотеки Deep Neural Networks. Эта < reservedrangesplaceholder0 > библиотека блоков включает в себя:
Predict (Deep Learning Toolbox) - Предсказывать отклики с помощью обученной сети, заданной через параметры блоков. Этот блок позволяет загружать предварительно обученную сеть в модель Simulink из MAT-файла или из MATLAB® функция.
Для получения дополнительной информации о работе с блоком Predict см. «Обнаружение маршрута и транспортного средства в Simulink с использованием глубокого обучения» (Deep Learning Toolbox).
Image Classifier (Deep Learning Toolbox) блока - классифицируйте данные с помощью обученной нейронной сети глубокого обучения, заданной через параметры блоков. Этот блок позволяет загружать предварительно обученную сеть в модель Simulink из MAT-файла или из функции MATLAB.
Для получения дополнительной информации о работе с блоком Image Classifier см. Раздел «Классификация сигналов ЭКГ в Simulink с использованием глубокого обучения» (Deep Learning Toolbox).
Можно настроить генератор кода, чтобы использовать преимущества NVIDIA® CUDA® библиотека глубоких нейронных сетей (cuDNN) и TensorRT™ библиотеки эффективности вывода для графических процессоров NVIDIA. Сгенерированный код реализует глубокую сверточную нейронную сеть (CNN) с помощью архитектуры, слоев и параметров, которые вы задаете в сетевом объекте.
GoogLeNet обучен на более чем миллионе изображений и может классифицировать изображения в 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и животные). Сеть принимает изображение как вход, а затем выводит метку для объекта в изображении с вероятностями для каждой из категорий объектов. В этом примере показано, как выполнить симуляцию и сгенерировать код CUDA для предварительно обученного googlenet
глубокая сверточная нейронная сеть и классификация изображения. Предварительно обученные сети доступны в виде пакетов поддержки из Deep Learning Toolbox™.
Загрузите предварительно обученную сеть GoogLeNet.
net = googlenet;
Объект net
содержит DAGNetwork
объект. Используйте analyzeNetwork
функция для отображения интерактивной визуализации сетевой архитектуры, для обнаружения ошибок и проблем в сети и для отображения подробной информации о слоях сети. Информация о слое включает размеры активации слоя и настраиваемые параметры, общее количество настраиваемых параметров и размеры параметров состояния рекуррентных слоев.
analyzeNetwork(net);
Изображение, которое вы хотите классифицировать, должно иметь тот же размер, что и вход сигнала сети. Для GoogLeNet, размер imageInputLayer
224 на 224 на 3. The Classes
свойство выхода classificationLayer
содержит имена классов, выученных сетью. Просмотрите 10 случайных имен классов из 1000.
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™ и установите File name
параметр в peppers.png
. Добавьте блок Resize из библиотеки Computer Vision Toolbox в модель. Установите параметр Specify блока Resize равным Number of output rows and columns
и вводите [224 224]
как значение для Number of output rows and columns. Блок изменения размера изменяет размер входа изображения на размер входа слоя сети. Добавьте To Workspace к модели и измените имя переменной на yPred
.
Откройте Block Parameters (subsystem) блока Predict. Выберите Network from MATLAB function
для Network и googlenet для MATLAB function.
Соедините эти блоки как показано на схеме. Сохраните модель как googlenetModel.slx
.
Параметры конфигурации модели определяют метод ускорения, используемый во время симуляции.
Откройте диалоговое окно Параметры конфигурации. Откройте панель 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, чтобы сохранить и закрыть диалоговое окно Параметров конфигурации.
Вы можете использовать set_param
для программной настройки параметра модели в Командном Окне MATLAB.
set_param('googlenetModel','GPUAcceleration','on');
Чтобы создать и симулировать модель ускорения графического процессора, выберите Run на вкладке Simulation или используйте команду:
out = sim('googlenetModel');
Сначала программное обеспечение проверяет, был ли код CUDA/C + + ранее скомпилирован для вашей модели. Если код был создан ранее, программное обеспечение запускает модель. Если код ранее не был построен, программное обеспечение сначала генерирует и компилирует код CUDA/C + +, а затем запускает модель. Инструмент генерации кода помещает сгенерированный код в подпапку рабочей папки под названием slprj/_slprj/googlenetModel
.
Отобразите пять лучших предсказанных меток и связанные с ними вероятности в качестве гистограммы. Поскольку сеть классифицирует изображения в так много категорий объектов, и многие категории аналогичны, обычно при оценке сетей учитывается точность в пять лучших. Сеть классифицирует изображение как болгарский перец с высокой вероятностью.
im = imread('peppers.png'); predict_scores = out.yPred.Data(:,:,1); [scores,indx] = sort(predict_scores,'descend'); topScores = scores(1:5); 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,topScores) 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.
Выберите 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
.
Опции, характерные для GPU Coder, находятся на панели Code Generation > GPU Code. В данном примере можно использовать значения по умолчанию параметров конкретного графического процессора на Code Generation > GPU Code панели.
Нажмите кнопку OK, чтобы сохранить и закрыть диалоговое окно Параметров конфигурации.
Вы также можете использовать set_param
для программной настройки параметра модели в Командном Окне MATLAB.
set_param('googlenetModel','GenerateGPUCode','CUDA');
В Редактор откройте приложение Simulink Coder.
Сгенерируйте код.
Сообщения отображаются в средстве просмотра. Генератор кода создает исходные и заголовочные файлы CUDA, а также отчет о HTML генерации кода. Генератор кода помещает файлы в папку сборки, подпапку с именем googlenetModel_grt_rtw
в текущей рабочей папке.
Генерация кода для нейронной сети для глубокого обучения с пользовательским слоем не поддерживается в Simulink.
Генерация кода GPU для блоков MATLAB Function в Stateflow® графики не поддерживаются.
Генератор кода не поддерживает все типы данных с языка MATLAB. Поддерживаемые типы данных см. в документации по блокам.
bdclose
(Simulink) | close_system
(Simulink) | get_param
(Simulink) | load_system
(Simulink) | open_system
(Simulink) | save_system
(Simulink) | set_param
(Simulink) | sim
(Simulink) | slbuild
(Simulink)