В этом примере показано, как сгенерировать Код С++ для Обнаружения объектов Используя Глубокое обучение (Computer Vision Toolbox) YOLO v2 на процессоре Intel®. Сгенерированный код использует Math Kernel Library Intel в Глубоких нейронных сетях (MKL-DNN).
Intel Math Kernel Library для глубоких нейронных сетей (MKL-DNN)
Пошлите Поддержку центрального процессора MKLDNN знать список процессоров, который поддерживает библиотеку MKL-DNN.
Переменные окружения для Intel MKL-DNN
MATLAB® Coder™ для генерации Кода С++
Интерфейс MATLAB Coder для Глубокого обучения поддерживает пакет
Deep Learning Toolbox™ для использования DAGNetwork
объект
Computer Vision Toolbox™ для видео операций I/O
Для получения дополнительной информации о поддерживаемых версиях компиляторов и библиотек, см. Стороннее Аппаратное и программное обеспечение. Для получения информации о подготовке переменных окружения смотрите Переменные окружения.
Этот пример поддерживается на Linux® и платформах Windows® и не поддерживаемый для 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 charactor 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] Redmon, J. и А. Фархади. "YOLO9000: лучше, быстрее, более сильный". На 2 017 конференциях по IEEE по компьютерному зрению и распознаванию образов, 6517–6525. Гонолулу, HI: IEEE, 2017.
coder.DeepLearningConfig
| coder.hardware