В этом примере показано, как сгенерировать 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