С помощью графического процессора Coder™ можно создавать оптимизированный код для моделей Simulink ®, содержащих различные обучаемые сети глубокого обучения. Функции глубокого обучения можно реализовать в Simulink, используя функциональные блоки MATLAB или блоки из библиотеки Deep Neural Networks. Блочная библиотека глубоких нейронных сетей включает в себя:
Блок прогнозирования (Deep Learning Toolbox) - прогнозирование ответов с использованием обученной сети, указанной в параметре блока. Этот блок позволяет загружать предварительно обученную сеть в модель Simulink из MAT-файла или из функции MATLAB ®.
Дополнительные сведения о работе с блоком «Прогнозирование» см. в разделе Обнаружение полосы движения и транспортного средства в Simulink Using Deep Learning Toolbox.
Блок классификатора изображений (Deep Learning Toolbox) - классифицирует данные с помощью обученной нейронной сети глубокого обучения, указанной через параметр блока. Этот блок позволяет загружать предварительно обученную сеть в модель Simulink из MAT-файла или из функции MATLAB.
Дополнительные сведения о работе с блоком «Классификатор изображений» см. в разделе Классификация сигналов ЭКГ в Simulink с помощью глубокого обучения (Deep Learning Toolbox).
Генератор кода можно настроить таким образом, чтобы использовать преимущества библиотеки глубоких нейронных сетей (cuDNN) NVIDIA ® CUDA ® и TensorRT™ высокопроизводительные библиотеки выводов для графических процессоров NVIDIA. Созданный код реализует глубокую сверточную нейронную сеть (CNN) с помощью архитектуры, уровней и параметров, заданных в сетевом объекте.
GoogLeNet прошел обучение на более чем миллионе изображений и может классифицировать изображения на 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и животные). Сеть принимает изображение в качестве входного, а затем выводит метку для объекта в изображении с вероятностями для каждой из категорий объектов. В этом примере показано, как выполнять моделирование и генерировать код CUDA для предварительно обученных googlenet глубокая сверточная нейронная сеть и классифицируют изображение. Предварительно подготовленные сети доступны в виде пакетов поддержки из Deep Learning Toolbox™.
Загрузите предварительно подготовленную сеть GoogLeNet.
net = googlenet;
Объект net содержит DAGNetwork объект. Используйте analyzeNetwork функция для отображения интерактивной визуализации сетевой архитектуры, обнаружения ошибок и проблем в сети и отображения подробной информации о сетевых уровнях. Информация о слое включает в себя размеры активизаций слоя и обучаемых параметров, общее количество обучаемых параметров и размеры параметров состояния повторяющихся слоев.
analyzeNetwork(net);

Изображение, которое требуется классифицировать, должно иметь тот же размер, что и входной размер сети. Для GoogLeNet - размер imageInputLayer 224 на 224 на 3. 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.
Добавьте блок «Изображение из файла» из библиотеки Computer Vision Toolbox™ и установите File name параметр для peppers.png. Добавьте в модель блок Resize из библиотеки инструментов Computer Vision Toolbox. Задайте для параметра «Указать» блока «Изменить размер» значение Number of output rows and columns и введите [224 224] в качестве значения для числа выходных строк и столбцов. Блок изменения размера изменяет размер входного изображения на размер входного слоя сети. Добавьте в модель рабочую область и измените имя переменной на yPred.

Откройте блок параметров (подсистему) блока прогнозирования. Выбрать Network from MATLAB function для функции Network и googlenet для MATLAB.
Подключите эти блоки, как показано на схеме. Сохранить модель как googlenetModel.slx.

Параметры конфигурации модели определяют метод ускорения, используемый при моделировании.
Откройте диалоговое окно «Параметры конфигурации». Откройте панель Решатель (Solver). Чтобы скомпилировать модель для ускорения и создать код CUDA, настройте модель на использование решателя с фиксированным шагом. В этой таблице показана конфигурация решателя для этого примера.
| Параметр | Настройка | Влияние на сгенерированный код |
|---|---|---|
| Напечатать | Fixed-step | Поддерживает постоянный (фиксированный) размер шага, необходимый для создания кода |
| Решающее устройство | discrete (no continuous states) | Применение метода интеграции с фиксированным шагом для вычисления производной состояния модели |
| Фиксированный размер шага | auto | Simulink выбирает размер шага |

Выберите панель Цель моделирования (Simulation Target). Установите язык в значение C++.
Выберите ускорение графического процессора. Параметры, относящиеся к кодеру графического процессора, теперь отображаются на панели «Цель моделирования» > «Ускорение графического процессора». В этом примере можно использовать значения этих параметров по умолчанию.

На панели «Цель моделирования» задайте для параметра «Целевая библиотека» в группе глубокого обучения значение cuDNN. Также можно выбрать TensorRT.

Нажмите кнопку ОК, чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).
Вы можете использовать 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')

Параметры конфигурации модели предоставляют множество опций для процесса генерации и построения кода.
В диалоговом окне «Параметры конфигурации» выберите панель «Создание кода». Задайте для целевого файла System значение grt.tlc.
Также можно использовать целевой файл Embedded Coder ®ert.tlc.
Установите язык в значение C++.
Выберите Создать код графического процессора.
Выберите Только генерировать код.
Выберите «Цепь инструментов». Для платформ Linux ® выберитеNVIDIA CUDA | gmake (64-bit Linux). Для систем Windows ® выберитеNVIDIA CUDA (w/Microsoft Visual C++ 20XX) | nmake (64-bit windows).
На панели Создание кода > Отчет выберите Создать отчет о создании кода и Открыть отчет автоматически.
На панели «Создание кода» > «Интерфейс» задайте для целевой библиотеки в группе глубокого обучения значение cuDNN. Также можно выбрать TensorRT.
Параметры, относящиеся к кодеру графического процессора, находятся на панели «Создание кода» > «Код графического процессора». В этом примере можно использовать значения по умолчанию параметров, специфичных для графического процессора, в окне «Создание кода» > «Код графического процессора».

Нажмите кнопку ОК, чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).
Также можно использовать set_param для конфигурирования параметра модели программным способом в окне команд MATLAB.
set_param('googlenetModel','GenerateGPUCode','CUDA');
В редакторе Simulink откройте приложение Simulink Coder.
Создать код.
Сообщения появляются в программе Diagnostics Viewer. Генератор кода создает исходные и заголовочные файлы CUDA и отчет о создании кода HTML. Генератор кода помещает файлы в папку построения, подпапку с именем googlenetModel_grt_rtw в текущей рабочей папке.
Создание кода для сети глубокого обучения с пользовательским уровнем не поддерживается в Simulink.
Генерация кода графического процессора для функциональных блоков MATLAB в диаграммах 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 (Симулинк)