С помощью 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)