В этом примере показано, как создать функцию MEX для сети глубокого обучения, содержащей сверточный и двунаправленный уровни долговременной памяти (BiLSTM), в которой используется библиотека Intel Math Kernel Library for Deep Neural Networks (MKL-DNN). Сгенерированная функция MEX считывает данные из указанного видеофайла как последовательность видеокадров и выводит метку, которая классифицирует активность в видео. Дополнительные сведения об обучении этой сети см. в примере Классификация видео с помощью глубокого обучения (Deep Learning Toolbox).
Библиотека Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Список процессоров, поддерживающих библиотеку MKL-DNN, см. в разделе Поддержка ЦП MKLDNN
Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Предварительные условия для глубокого обучения с помощью кодера MATLAB
Этот пример поддерживается платформами 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