То В этом примере показано, как использовать глубокие сверточные нейронные сети в ROS, позволило модели Simulink® выполнить обнаружение транспортного средства и маршрут. В этом примере, вы первое видео трафика чтения как вход и публикуют системы координат как sensor_msgs/Image
сообщения к теме в сети ROS. Затем вы обнаруживаете транспортные средства и левые и правые контуры маршрута, соответствующие автомобилю, оборудованному датчиком в каждой системе координат, аннотируете входное изображение обнаружениями и публикуете их к теме в сети ROS. Наконец, вы генерируете оптимизированный код CUDA® для узла ROS из модели Simulink для обнаружения транспортного средства и маршрута.
Этот пример использует предварительно обученную сеть обнаружения маршрута от Обнаружения Маршрута, Оптимизированного с примером GPU Coder GPU Coder Toolbox™. Для получения дополнительной информации смотрите Обнаружение Маршрута, Оптимизированное с GPU Coder.
Этот пример также использует предварительно обученную сеть обнаружения транспортного средства от Обнаружения объектов Используя пример YOLO v2 Глубокого обучения Computer Vision Toolbox™. Для получения дополнительной информации смотрите, что Обнаружение объектов Использует Глубокое обучение (Computer Vision Toolbox) YOLO v2.
Этот пример иллюстрирует следующие концепции:
Смоделируйте преобразование видеокадров к изображению ROS в Simulink.
Смоделируйте приложение обнаружения маршрута в Simulink. Сначала видео трафика предварительно обрабатывается путем изменения размеров к 227 227 3 и умножения постоянным множителем 255. Это затем питается предварительно обученную сеть, загруженную в Predict
блок из Deep Learning Toolbox™. Наконец, если левые и правые контуры маршрута обнаруживаются, параболические коэффициенты, чтобы смоделировать траектории контуров маршрута получены.
Смоделируйте приложение обнаружения транспортного средства в Simulink. Видео трафика обрабатывается предварительно обученным детектором YOLO v2. Эта сеть обнаруживает транспортные средства в видео и выводит координаты ограничительных рамок для этих транспортных средств и их оценки достоверности.
Сконфигурируйте модель Simulink для генерации узла CUDA ROS на серверной платформе.
Сгенерируйте исполняемый файл CUDA для модели Simulink, сконфигурированной для ROS.
CUDA включил NVIDIA® графический процессор.
NVIDIA инструментарий CUDA и драйвер.
Библиотека NVIDIA cuDNN.
Переменные окружения для компиляторов и библиотек. Для получения дополнительной информации смотрите Стороннее Оборудование и Подготовку Необходимых как условие продуктов.
Этот пример использует три модели Simulink, которые каждый представлены как узлы ROS.. Следующая схема иллюстрирует их взаимодействие. rosImagePublisher
узел читает необработанный видеофайл и преобразует данные о системе координат в изображение ROS. laneAndVechicleDetection
узел выполняет маршрут и обнаружение транспортного средства и публикует снабженное аннотацией изображение. annotateImageDisplay
узел отображает снабженные аннотацией изображения как видеопоток.
if ~exist('./caltech_washington1.avi','file') url = 'https://www.mathworks.com/supportfiles/gpucoder/media/caltech_washington1.avi'; websave('caltech_washington1.avi',url); end
Функция загружает trainedLaneNet.mat
и yolov2ResNet50VehicleExample.mat
файлы, если они уже не присутствуют.
getVehicleDetectionAndLaneDetectionNetworks
laneAndVehicleDetection
модель выполняет маршрут и обнаружение транспортного средства как показано. Когда изображения маршрута публикуются к теме /rawlaneimgs
, модель запускает алгоритм обнаружения для них и публикует снабженные аннотацией изображения к различной теме. Для более подробного объяснения Лейна Детекшна, Вехикла Детекшна или Аннотации с помощью Ограничительных рамок Вехикла и подсистем Лейна Трэджектори, смотрите Лейна и Вехикла Детекшна в Simulink Используя Глубокое обучение.
Инициализируйте ведущее устройство ROS.
rosinit;
Откройте модели Simulink.
open_system('rosImagePublisher'); open_system('annotatedImageDisplay'); open_system('laneAndVehicleDetection');
Откройте диалоговое окно Configuration Parameters laneAndVehicleDetection
модель. В Целевой панели Симуляции выберите ускорение GPU. В разделе Deep Learning выберите целевую библиотеку как cuDNN. В качестве альтернативы можно установить параметры с помощью следующих команд.
set_param('laneAndVehicleDetection','GPUAcceleration','on'); set_param('laneAndVehicleDetection','SimDLTargetLibrary','cudnn'); set_param('laneAndVehicleDetection','DLTargetLibrary','cudnn');
Первый показ модели, laneAndVehicleDetection
и annotatedImageDisplay
, путем выбора Run из от вкладки Simulation. Затем запуск rosImagePublisher
, который начинает публиковать видеокадры к сети ROS. Каждый новый кадр принимается annotatedImageDisplay
обновляется в окне Video Viewer.
В панели Аппаратной реализации выберите Robot Operating System (ROS) for Hardware Board и задайте Поставщика Устройства и Тип устройства.
В панели Генерации кода выберите Language как C++ и включите, Генерируют код графического процессора.
set_param('laneAndVehicleDetection','TargetLang','C++'); set_param('laneAndVehicleDetection','GenerateGPUCode','CUDA');
В Генерации кода> Библиотеки> панель графического процессора Кода, включите cuBLAS, cuSOLVER и cuFFT.
set_param('laneAndVehicleDetection','GPUcuBLAS','on'); set_param('laneAndVehicleDetection','GPUcuSOLVER','on'); set_param('laneAndVehicleDetection','GPUcuFFT','on');
Чтобы сконфигурировать развертывание узла ROS на вашей локальной хост-машине, в разделе Connect вкладки ROS, набор Развертывается к Localhost
. Нажмите кнопку Build and Run от вкладки ROS, чтобы развернуть узел. В конце процесса сборки вы будете видеть, что узел ROS работает на локальной хост-машине. Затем запуск annotatedImageDisplay
модель, необходимо смочь смотреть видео снабженного аннотацией изображения в Video Viewer выход.