Этот пример показывает, как сгенерировать код CUDA® для Обнаружения объектов Используя пример YOLO v2 Глубокого обучения от Computer Vision Toolbox™.
CUDA включил NVIDIA®, графический процессор с вычисляет возможность 3.2 или выше.
NVIDIA инструментарий CUDA и драйвер.
Библиотека NVIDIA cuDNN v7 или выше.
Библиотеки OpenCV 3.1.0 для видео чтения и изображения отображают операции.
Переменные окружения для компиляторов и библиотек. Для получения информации о поддерживаемых версиях компиляторов и библиотек, смотрите Сторонние продукты (GPU Coder). Для подготовки переменных окружения смотрите Подготовку Необходимых как условие продуктов (GPU Coder).
Deep Learning Toolbox™ для использования объектов SeriesNetwork.
GPU Coder™ для генерации кода CUDA.
Интерфейс GPU Coder для Библиотек Глубокого обучения поддерживает пакет. Чтобы установить этот пакет поддержки, используйте Add-On Explorer.
Используйте coder.checkGpuInstall
, функционируют и проверяют, что компиляторы и библиотеки, необходимые для выполнения этого примера, настраиваются правильно.
envCfg = coder.gpuEnvConfig('host'); envCfg.DeepLibTarget = 'cudnn'; envCfg.DeepCodegen = 1; envCfg.Quiet = 1; coder.checkGpuInstall(envCfg);
net = getYOLOv2();
Сеть DAG содержит 150 слоев включая свертку, ReLU, и пакетные слои нормализации наряду с YOLO v2 преобразовывают и YOLO v2 выходные слои. Используйте сетевую команду. Слои, чтобы видеть все слои сети.
net.Layers
Функция yolov2_detect.m берет вход изображений, и запустите детектор на изображении с помощью нейронной сети для глубокого обучения, сохраненной в yolov2ResNet50VehicleExample.mat файле. Функция загружает сетевой объект от yolov2ResNet50VehicleExample.mat в персистентную переменную mynet. На последующих вызовах функции постоянный объект снова используется для обнаружения.
type('yolov2_detect.m')
function outImg = yolov2_detect(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 % setup. When the function is called subsequent times, the same object is reused % to call detection on inputs, thus avoiding reconstructing and reloading 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); % Annotate detections in the image. outImg = insertObjectAnnotation(in,'rectangle',bboxes,labels);
Чтобы сгенерировать код CUDA из файла yolov2_detect.m проекта, создайте объект настройки графического процессора кода для цели MEX и установите выходной язык на C++. Используйте функцию coder.DeepLearningConfig
, чтобы создать объект настройки глубокого обучения CuDNN
и присвоить ее свойству DeepLearningConfig
объекта настройки графического процессора кода. Запустите команду codegen
, задающую вход размера [224,224,3]. Это значение соответствует входному размеру слоя YOLOv2.
cfg = coder.gpuConfig('mex'); cfg.TargetLang = 'C++'; cfg.DeepLearningConfig = coder.DeepLearningConfig('cudnn'); codegen -config cfg yolov2_detect -args {ones(224,224,3,'uint8')} -report
Code generation successful: To view the report, open('codegen/mex/yolov2_detect/html/report.mldatx').
Настройте читателя видеофайла и считайте входное видео. Создайте видеоплеер, чтобы отобразить видео и выходные обнаружения.
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_detect_mex(in); step(depVideoPlayer, out); cont = ~isDone(videoFreader) && isOpen(depVideoPlayer); % Exit the loop if the video player figure window is closed end
[1] Redmon, Джозеф и Али Фархади. "YOLO9000: лучше, быстрее, более сильный". 2 017 конференций по IEEE по компьютерному зрению и распознаванию образов (CVPR). IEEE, 2017.