В этом примере показано, как сгенерировать код С++ для сети обнаружения объектов YOLO v2 на процессоре Intel ®. Сгенерированный код использует Math Kernel Library для глубоких нейронных сетей (MKL-DNN).
Для получения дополнительной информации смотрите Обнаружение объектов с использованием YOLO v2 Глубокое Обучение (Computer Vision Toolbox).
Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Обратитесь к разделу Поддержка Центральному Процессору MKLDNN, чтобы узнать список процессоров, поддерживающих библиотеку MKL-DNN
MATLAB ® Coder™ для генерации кода С++
MATLAB Coder Interface для пакета поддержки глубокого обучения
Deep Learning Toolbox™ для использования в DAGNetwork
объект
Computer Vision 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
ФункцияThe 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 Conference on Компьютерное Зрение and Pattern Recognition (CVPR), 6517-25. Гонолулу, HI: IEEE, 2017.
coder.DeepLearningConfig
| coder.hardware