В этом примере показано, как сгенерировать MEX-функцию для нейронной сети для глубокого обучения, содержащей и сверточные и двунаправленные долгие краткосрочные слои (BiLSTM) памяти, который использует Math Kernel Library Intel для Глубоких нейронных сетей (MKL-DNN). Сгенерированная MEX-функция считывает данные из заданного видеофайла как последовательность видеокадров и выводит метку, которая классифицирует действие на видео. Для получения дополнительной информации об обучении этой сети смотрите, что пример Классифицирует Видео Используя Глубокое обучение (Deep Learning Toolbox).
Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Для списка процессоров, которые поддерживают библиотеку MKL-DNN, см. Поддержку центрального процессора MKLDNN
Для получения дополнительной информации о поддерживаемых версиях компиляторов и библиотек, смотрите Необходимые условия для Глубокого обучения для MATLAB Coder
Этот пример поддерживается на Mac®, Linux® и платформах Windows® и не поддерживаемый для MATLAB Online.
Считайте видеофайл pushup.mp4 при помощи readvideo функция помощника включена с этим примером во вспомогательном файле. Смотреть видео, цикл по отдельным системам координат видеофайла и использовать imshow функция.
filename = "pushup.mp4"; video = readVideo(filename); numFrames = size(video,4); figure for i = 1:numFrames frame = video(:,:,:,i); imshow(frame/255); drawnow end

Центральная обрезка входные видеокадры к входному размеру обучившего сеть при помощи centerCrop функция помощника, присоединенная как вспомогательный файл.
inputSize = [224 224 3]; video = centerCrop(video,inputSize);
video_classify Функция точки входаvideo_classify.m функция точки входа берет последовательности изображений и передает его обучившему сеть для предсказания. Эта функция использует сверточную сеть LSTM, которая обучена в примере, Классифицируют Видео Используя Глубокое обучение (Deep Learning Toolbox). Функция загружает сетевой объект из файла net.mat файл в персистентную переменную и затем использует classify (Deep Learning Toolbox) функция, чтобы выполнить предсказание. На последующих вызовах, функциональные повторные использования уже загруженный постоянный объект.
type('video_classify.m')function out = video_classify(in) %#codegen
% During the execution of the first function call, the network object is
% loaded in the persistent variable mynet. In subsequent calls, this loaded
% object is reused.
persistent mynet;
if isempty(mynet)
mynet = coder.loadDeepLearningNetwork('net.mat');
end
% Provide input and perform prediction
out = classify(mynet,in);
Чтобы сгенерировать MEX-функцию, создайте coder.MexCodeConfig объект cfg. Установите TargetLang свойство cfg на C++. Используйте coder.DeepLearningConfig функция, чтобы создать настройку глубокого обучения возражает для MKL-DNN. Присвойте его DeepLearningConfig свойство cfg.
cfg = coder.config('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn');
Запустите getVideoClassificationNetwork функция помощника, чтобы загрузить видео сеть классификации и сохранить сеть в файле MAT net.mat.
getVideoClassificationNetwork();
Используйте coder.typeof функция, чтобы задать тип и размер входного параметра к функции точки входа. В этом примере вход имеет двойной тип с размером [224 224 3] и переменная длина последовательности.
Input = coder.typeof(double(0),[224 224 3 Inf],[false false false true]);
Сгенерируйте MEX-функцию путем выполнения codegen команда.
codegen -config cfg video_classify -args {Input} -report
Code generation successful: View report
Запустите сгенерированную MEX-функцию с обрезанным центром вводом видео.
output = video_classify_mex(video)
output = categorical
pushup
Наложите предсказание на входном видео.
video = readVideo(filename); numFrames = size(video,4); figure for i = 1:numFrames frame = video(:,:,:,i); frame = insertText(frame, [1 1], char(output), 'TextColor', [255 255 255],'FontSize',30, 'BoxColor', [0 0 0]); imshow(frame/255); drawnow end

codegen | coder.DeepLearningConfig | coder.typeof