В этом примере показано, как создать код C++ для сети обнаружения объектов YOLO v2 на процессоре Intel ®. Созданный код использует библиотеку Intel Math Kernel Library for Deep Neural Networks (MKL-DNN).
Дополнительные сведения см. в разделе Обнаружение объектов с помощью глубокого обучения YOLO v2 (Computer Vision Toolbox).
Библиотека Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Список процессоров, поддерживающих библиотеку MKL-DNN, см. в разделе Поддержка ЦП MKLDNN
MATLAB ® Coder™ для генерации кода C++
Кодерный интерфейс MATLAB для пакета поддержки Deep Learning
Toolbox™ глубокого обучения для использования DAGNetwork объект
Компьютерное зрение Toolbox™ для видео операций ввода-вывода
Дополнительные сведения о поддерживаемых версиях компиляторов и библиотек см. в разделе Аппаратное и программное обеспечение сторонних производителей.
Этот пример поддерживается платформами Linux ®, Windows ® и macOS, а не MATLAB Online.
DAGNetwork ОбъектСеть DAG содержит 150 уровней, включая уровни свертки, ReLU и пакетной нормализации, а также уровни преобразования YOLO v2 и вывода YOLO v2.
net = getYOLOv2();
Downloading pretrained detector (98 MB)...
Используйте команду net.Layers для просмотра всех уровней сети.
net.Layers
yolov2_detection Функция yolov2_detection функция, присоединенная к примеру, принимает ввод изображения и запускает детектор на изображении, используя сеть, сохраненную в yolov2ResNet50VehicleExample.mat. Функция загружает сетевой объект из yolov2ResNet50VehicleExample.mat в постоянную переменную yolov2Obj. Последующие вызовы функции повторно используют постоянный объект для обнаружения.
type('yolov2_detection.m')
function outImg = yolov2_detection(in)
% Copyright 2018-2019 The MathWorks, Inc.
% A persistent object yolov2Obj is used to load the YOLOv2ObjectDetector object.
% At the first call to this function, the persistent object is constructed and
% set up. Subsequent calls to the function reuse the same object to call detection
% on inputs, thus avoiding having to reconstruct and reload the
% network object.
persistent yolov2Obj;
if isempty(yolov2Obj)
yolov2Obj = coder.loadDeepLearningNetwork('yolov2ResNet50VehicleExample.mat');
end
% pass in input
[bboxes,~,labels] = yolov2Obj.detect(in,'Threshold',0.5);
outImg = in;
% convert categorical labels to cell array of character vectors for MATLAB
% execution
if coder.target('MATLAB')
labels = cellstr(labels);
end
if ~(isempty(bboxes) && isempty(labels))
% Annotate detections in the image.
outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);
end
Чтобы создать код, создайте объект конфигурации кода для цели MEX и установите для целевого языка значение C++. Используйте coder.DeepLearningConfig создание объекта конфигурации глубокого обучения MKL-DNN. Назначить этот объект DeepLearningConfig свойства объекта конфигурации кода. Укажите размер ввода в качестве аргумента для codegen команда. В этом примере размер входного уровня сети YOLO v2 равен [224,224,3].
cfg = coder.config('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('mkldnn'); codegen -config cfg yolov2_detection -args {ones(224,224,3,'uint8')} -report
Code generation successful: To view the report, open('codegen\mex\yolov2_detection\html\report.mldatx').
Настройка средства чтения видеофайлов и чтение примера входного видео highway_lanechange.mp4. Создайте видеопроигрыватель для отображения видео и выходных обнаружений.
videoFile = 'highway_lanechange.mp4'; videoFreader = vision.VideoFileReader(videoFile,'VideoOutputDataType','uint8'); depVideoPlayer = vision.DeployableVideoPlayer('Size','Custom','CustomSize',[640 480]);
Считывайте кадр ввода видео и обнаруживайте транспортные средства в видео с помощью детектора.
cont = ~isDone(videoFreader); while cont I = step(videoFreader); in = imresize(I,[224,224]); out = yolov2_detection_mex(in); depVideoPlayer(out); cont = ~isDone(videoFreader) && isOpen(depVideoPlayer); % Exit the loop if the video player figure window is closed end

[1] Редмон, Джозеф и Али Фархади. «YOLO9000: лучше, быстрее, сильнее». В 2017 году Конференция IEEE по компьютерному зрению и распознаванию образов (CVPR), 6517-25. Гонолулу, HI: IEEE, 2017.
coder.DeepLearningConfig | coder.hardware