В этом примере показано, как использовать глубокие сверточные нейронные сети в модели Simulink®, чтобы выполнить обнаружение транспортного средства и маршрут. Этот пример берет системы координат из видео трафика как вход, выходные параметры два контура маршрута, которые соответствуют левым и правым маршрутам автомобиля, оборудованного датчиком, и обнаруживает транспортные средства в системе координат.
Этот пример использует предварительно обученную сеть обнаружения маршрута от Обнаружения Маршрута, Оптимизированного с примером GPU Coder GPU Coder Toolbox™. Для получения дополнительной информации смотрите Обнаружение Маршрута, Оптимизированное с GPU Coder (GPU Coder).
Этот пример также использует предварительно обученную сеть обнаружения транспортного средства от Обнаружения объектов Используя пример YOLO v2 Глубокого обучения Компьютерного зрения toolbox™. Для получения дополнительной информации смотрите, что Обнаружение объектов Использует Глубокое обучение (Computer Vision Toolbox) YOLO v2.
Блок-схему для алгоритмического рабочего процесса модели Simulink показывают.
Этот пример использует trainedLaneNet
и yolov2ResNet50VehicleExample
MAT-файлы, содержащие предварительно обученные сети. Файлы составляют приблизительно 143 МБ и 98 МБ в размере, соответственно. Загрузите файлы с веб-сайта MathWorks.
lanenetFile = matlab.internal.examples.downloadSupportFile('gpucoder/cnn_models/lane_detection','trainedLaneNet.mat'); vehiclenetFile = matlab.internal.examples.downloadSupportFile('vision/data','yolov2ResNet50VehicleExample.mat');
Чтобы протестировать модель, пример использует набор данных маршрутов Калифорнийского технологического института. Файл составляет приблизительно 16 Мбайт в размере. Загрузите файлы с веб-сайта MathWorks.
mediaFile = matlab.internal.examples.downloadSupportFile('gpucoder/media','caltech_washington1.avi');
Модель Simulink для выполнения маршрута и обнаружения транспортного средства на видео трафика показывают. Когда модель запускается, Video Viewer
блок отображает видео трафика с аннотациями транспортного средства и маршрутом.
open_system('laneAndVehicleDetectionMDL');
Установите пути к файлам dowloaded сетевой модели в предсказывании и блоках детектора модели Simulink. Установите местоположение тестового видео загружаться моделью Simulink.
set_param('laneAndVehicleDetectionMDL/Lane Detection','NetworkFilePath',lanenetFile) set_param('laneAndVehicleDetectionMDL/Vehicle Detector','DetectorFilePath',vehiclenetFile) set_param('laneAndVehicleDetectionMDL/Traffic Video','inputFileName',mediaFile)
Для обнаружения маршрута видео трафика предварительно обрабатывается путем изменения размеров каждой системы координат видео к 227 227 3 и затем масштабируется на коэффициент 255. Предварительно обработанные системы координат затем вводятся к trainedLaneNet.mat
сеть загружена в Predict
блок из Deep Learning Toolbox™. Эта сеть берет изображение в качестве входа и выходных параметров два контура маршрута, которые соответствуют левым и правым маршрутам автомобиля, оборудованного датчиком. Каждый контур маршрута представлен параболическим уравнением:
Здесь y является боковым смещением, и x является продольным расстоянием от транспортного средства. Сетевые выходные параметры эти три параметра a, b, и c на маршрут. Сетевая архитектура похожа на AlexNet
за исключением того, что последние несколько слоев заменяются меньшим полносвязным слоем и регрессией выходной слой. Lane Detection Coordinates
Блок MATLAB function задает функциональный lane_detection_coordinates
это берет выход из предсказать блока и выходные параметры три параметра; laneFound
, ltPts
, и rtPts
. Пороговая обработка используется, чтобы определить, найдены ли оба левых и правых контура маршрута оба. Если оба найдены, laneFound
набор должен быть верным, и траектории контуров вычисляются и хранятся в ltPts
и rtPts
соответственно.
type lane_detection_coordinates
function [laneFound,ltPts,rtPts] = lane_detection_coordinates(laneNetOut) % Copyright 2020-2021 The MathWorks, Inc. persistent laneCoeffMeans; if isempty(laneCoeffMeans) laneCoeffMeans = [-0.0002,0.0002,1.4740,-0.0002,0.0045,-1.3787]; end persistent laneCoeffStds; if isempty(laneCoeffStds) laneCoeffStds = [0.0030,0.0766,0.6313,0.0026,0.0736,0.9846]; end params = laneNetOut .* laneCoeffStds + laneCoeffMeans; % 'c' should be more than 0.5 for it to be a right lane isRightLaneFound = abs(params(6)) > 0.5; isLeftLaneFound = abs(params(3)) > 0.5; persistent vehicleXPoints; if isempty(vehicleXPoints) vehicleXPoints = 3:30; %meters, ahead of the sensor end ltPts = coder.nullcopy(zeros(28,2,'single')); rtPts = coder.nullcopy(zeros(28,2,'single')); if isRightLaneFound && isLeftLaneFound rtBoundary = params(4:6); rt_y = computeBoundaryModel(rtBoundary, vehicleXPoints); ltBoundary = params(1:3); lt_y = computeBoundaryModel(ltBoundary, vehicleXPoints); % Visualize lane boundaries of the ego vehicle tform = get_tformToImage; % Map vehicle to image coordinates ltPts = tform.transformPointsInverse([vehicleXPoints', lt_y']); rtPts = tform.transformPointsInverse([vehicleXPoints', rt_y']); laneFound = true; else laneFound = false; end end
Этот пример использует YOLO v2 базирующаяся сеть для обнаружения транспортного средства. Сеть обнаружения объектов YOLO v2 состоит из двух подсетей: сеть извлечения признаков сопровождается сетью обнаружения. Эта предварительно обученная сеть использует ResNet-50
для извлечения признаков. Подсеть обнаружения является маленьким CNN по сравнению с сетью извлечения признаков и состоит из нескольких сверточных слоев и слоев, характерных для YOLO v2.
Модель Simulink выполняет обнаружение транспортного средства с помощью Object Detector
блок из Computer Vision Toolbox. Этот блок берет изображение в качестве входа и выводит координаты ограничительной рамки наряду с оценками достоверности для транспортных средств в изображении.
Lane and Vehicle Annotation
Блок MATLAB function задает функциональный lane_vehicle_annotation
который аннотирует ограничительные рамки транспортного средства наряду с оценками достоверности. Если laneFound
верно, затем левые и правые контуры маршрута, сохраненные в ltPts
и rtPts
overlayed на видео трафика.
type lane_vehicle_annotation
function In = lane_vehicle_annotation(laneFound,ltPts,rtPts,bboxes,scores,In) % Copyright 2020-2021 The MathWorks, Inc. if ~isempty(bboxes) In = insertObjectAnnotation(In, 'rectangle',bboxes,scores); end pts = coder.nullcopy(zeros(28, 4, 'single')); if laneFound prevpt = [ltPts(1,1) ltPts(1,2)]; for k = 2:1:28 pts(k,1:4) = [prevpt ltPts(k,1) ltPts(k,2)]; prevpt = [ltPts(k,1) ltPts(k,2)]; end In = insertShape(In, 'Line', pts, 'LineWidth', 2); prevpt = [rtPts(1,1) rtPts(1,2)]; for k = 2:1:28 pts(k,1:4) = [prevpt rtPts(k,1) rtPts(k,2)]; prevpt = [rtPts(k,1) rtPts(k,2)]; end In = insertShape(In, 'Line', pts, 'LineWidth', 2); In = insertMarker(In, ltPts); In = insertMarker(In, rtPts); end end
Чтобы проверить маршрут и алгоритмы обнаружения транспортного средства и отобразить траектории маршрута, ограничительные рамки транспортного средства и музыку к видео трафика, загруженному в модели Simulink, запускают симуляцию.
set_param('laneAndVehicleDetectionMDL', 'SimulationMode', 'Normal'); sim('laneAndVehicleDetectionMDL');
На Windows® максимальная длина пути 260 символов может вызвать "File not found"
ошибки при выполнении симуляции. В таких случаях переместите папку в качестве примера в другое место или включите длинные пути в Windows. Для получения дополнительной информации смотрите Максимальное Ограничение Длины пути (Microsoft).
Если у вас есть центральный процессор Intel®, который поддерживает инструкции AVX2, можно использовать Интерфейс MATLAB Coder для Библиотек Глубокого обучения, чтобы ускорить симуляцию, пользующуюся библиотеками Intel MKL-DNN. В окне Model Configuration Parameters, на Целевой панели Симуляции, устанавливает Язык на C++
и библиотека Target к MKL-DNN
.
С GPU Coder можно ускорить выполнение модели на NVIDIA® графические процессоры и сгенерировать код CUDA® для модели. Для получения дополнительной информации смотрите Генерацию кода для Глубокого обучения Модель Simulink, которая Выполняет Обнаружение Маршрута и Транспортного средства (GPU Coder).