exponenta event banner

Глубокое обучение в Simulink с помощью библиотеки глубоких нейронных сетей

С помощью графического процессора Coder™ можно создавать оптимизированный код для моделей Simulink ®, содержащих различные обучаемые сети глубокого обучения. Функции глубокого обучения можно реализовать в Simulink, используя функциональные блоки MATLAB или блоки из библиотеки Deep Neural Networks. Блочная библиотека глубоких нейронных сетей включает в себя:

Генератор кода можно настроить таким образом, чтобы использовать преимущества библиотеки глубоких нейронных сетей (cuDNN) NVIDIA ® CUDA ® и TensorRT™ высокопроизводительные библиотеки выводов для графических процессоров NVIDIA. Созданный код реализует глубокую сверточную нейронную сеть (CNN) с помощью архитектуры, уровней и параметров, заданных в сетевом объекте.

Пример: Классификация изображений с помощью GoogLeNet

GoogLeNet прошел обучение на более чем миллионе изображений и может классифицировать изображения на 1000 категорий объектов (таких как клавиатура, кофейная кружка, карандаш и животные). Сеть принимает изображение в качестве входного, а затем выводит метку для объекта в изображении с вероятностями для каждой из категорий объектов. В этом примере показано, как выполнять моделирование и генерировать код CUDA для предварительно обученных googlenet глубокая сверточная нейронная сеть и классифицируют изображение. Предварительно подготовленные сети доступны в виде пакетов поддержки из Deep Learning Toolbox™.

  1. Загрузите предварительно подготовленную сеть GoogLeNet.

    net = googlenet;
    

  2. Объект net содержит DAGNetwork объект. Используйте analyzeNetwork функция для отображения интерактивной визуализации сетевой архитектуры, обнаружения ошибок и проблем в сети и отображения подробной информации о сетевых уровнях. Информация о слое включает в себя размеры активизаций слоя и обучаемых параметров, общее количество обучаемых параметров и размеры параметров состояния повторяющихся слоев.

    analyzeNetwork(net);
    

    Analyze network app showing network analysis of GoogLeNet.

  3. Изображение, которое требуется классифицировать, должно иметь тот же размер, что и входной размер сети. Для 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'
    

Создание модели GoogLeNet

  1. Создайте модель Simulink и вставьте блок Predict из библиотеки Deep Neural Networks.

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

    Simulink model containing blocks for classifying images using GoogLeNet.

  3. Откройте блок параметров (подсистему) блока прогнозирования. Выбрать Network from MATLAB function для функции Network и googlenet для MATLAB.

  4. Подключите эти блоки, как показано на схеме. Сохранить модель как googlenetModel.slx.

    Simulink model showing connection between the blocks.

Настройка модели ускорения графического процессора

Параметры конфигурации модели определяют метод ускорения, используемый при моделировании.

  1. Откройте диалоговое окно «Параметры конфигурации». Откройте панель Решатель (Solver). Чтобы скомпилировать модель для ускорения и создать код CUDA, настройте модель на использование решателя с фиксированным шагом. В этой таблице показана конфигурация решателя для этого примера.

    ПараметрНастройкаВлияние на сгенерированный код
    НапечататьFixed-stepПоддерживает постоянный (фиксированный) размер шага, необходимый для создания кода
    Решающее устройствоdiscrete (no continuous states)Применение метода интеграции с фиксированным шагом для вычисления производной состояния модели
    Фиксированный размер шагаautoSimulink выбирает размер шага

    Snapshot of the configuration parameters dialog showing solver options for simulation.

  2. Выберите панель Цель моделирования (Simulation Target). Установите язык в значение C++.

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

    GPU Acceleration pane on the configuration parameters dialog of the model.

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

    Snapshot of the configuration parameters dialog showing deep learning options for simulation acceleration.

  5. Нажмите кнопку ОК, чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).

    Вы можете использовать set_param для конфигурирования параметра модели программным способом в окне команд MATLAB.

    set_param('googlenetModel','GPUAcceleration','on');
    

Ускоренная модель графического процессора сборки

  1. Чтобы построить и смоделировать ускоренную модель графического процессора, выберите команду Выполнить (Run) на вкладке Моделирование (Simulation) или используйте команду:

    out = sim('googlenetModel');
    

    Сначала программа проверяет, был ли предварительно скомпилирован код CUDA/C + + для вашей модели. Если код был создан ранее, программа запускает модель. Если код ранее не создавался, программное обеспечение сначала генерирует и компилирует код CUDA/C + +, а затем запускает модель. Инструмент создания кода помещает созданный код в подпапку рабочей папки с именемslprj/_slprj/googlenetModel.

  2. Отображение пяти лучших прогнозируемых меток и связанных с ними вероятностей в виде гистограммы. Поскольку в сети изображения классифицируются по множеству категорий объектов, а многие категории схожи, при оценке сетей обычно учитывается пять основных показателей точности. Сеть классифицирует изображение как колокольный перец с высокой вероятностью.

    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')
    

Настройка модели для создания кода

Параметры конфигурации модели предоставляют множество опций для процесса генерации и построения кода.

  1. В диалоговом окне «Параметры конфигурации» выберите панель «Создание кода». Задайте для целевого файла System значение grt.tlc.

    Также можно использовать целевой файл Embedded Coder ®ert.tlc.

  2. Установите язык в значение C++.

  3. Выберите Создать код графического процессора.

  4. Выберите Только генерировать код.

  5. Выберите «Цепь инструментов». Для платформ Linux ® выберитеNVIDIA CUDA | gmake (64-bit Linux). Для систем Windows ® выберитеNVIDIA CUDA (w/Microsoft Visual C++ 20XX) | nmake (64-bit windows).

  6. На панели Создание кода > Отчет выберите Создать отчет о создании кода и Открыть отчет автоматически.

  7. На панели «Создание кода» > «Интерфейс» задайте для целевой библиотеки в группе глубокого обучения значение cuDNN. Также можно выбрать TensorRT.

  8. Параметры, относящиеся к кодеру графического процессора, находятся на панели «Создание кода» > «Код графического процессора». В этом примере можно использовать значения по умолчанию параметров, специфичных для графического процессора, в окне «Создание кода» > «Код графического процессора».

    GPU Code pane on the configuration parameters dialog of the model.

  9. Нажмите кнопку ОК, чтобы сохранить и закрыть диалоговое окно Параметры конфигурации (Configuration Parameters).

    Также можно использовать set_param для конфигурирования параметра модели программным способом в окне команд MATLAB.

    set_param('googlenetModel','GenerateGPUCode','CUDA');
    

Создание кода CUDA для модели

  1. В редакторе Simulink откройте приложение Simulink Coder.

  2. Создать код.

Сообщения появляются в программе Diagnostics Viewer. Генератор кода создает исходные и заголовочные файлы CUDA и отчет о создании кода HTML. Генератор кода помещает файлы в папку построения, подпапку с именем googlenetModel_grt_rtw в текущей рабочей папке.

Ограничения

  • Создание кода для сети глубокого обучения с пользовательским уровнем не поддерживается в Simulink.

  • Генерация кода графического процессора для функциональных блоков MATLAB в диаграммах Stateflow ® не поддерживается.

  • Генератор кода не поддерживает все типы данных из языка MATLAB. Поддерживаемые типы данных см. в документации по блокам.

См. также

Функции

Связанные темы