主要内容

代码生成的深度学习仿真软件模型执行巷和车辆检测金宝app

这个例子展示了如何开发一个CUDA®应用程序从一个仿真软件®模型执行巷和车辆使用卷积神经网络(CNN)检测。金宝app这个例子以交通视频的帧作为输入,输出两个车道边界对应的左和右车道自我车辆,和检测车辆的框架。下面的例子使用了pretrained车道检测网络的车道检测和GPU编码器优化GPU编码器工具箱™的例子。有关更多信息,请参见车道检测和GPU编码器优化。这个示例还使用pretrained车辆检测的网络对象检测使用YOLO v2意思深入学习计算机视觉的工具箱™的例子。有关更多信息,请参见对象检测使用YOLO v2意思深入学习(计算机视觉工具箱)

这个例子说明了以下概念:

  • 模型仿真软件中的车道检测应用程序。金宝app首先是交通视频被调整到227 x227x3预处理和255乘以一个常数因子。随后,它是由pretrained处理网络中加载预测块的深度学习工具箱™。最后,如果检测到左和右车道边界,抛物线系数模型的轨迹车道边界。

  • 模型仿真软件中的车辆检测应用程序。金宝app交通视频处理pretrained YOLO v2意思探测器。这个网络视频中检测到车辆和输出边界框的坐标为这些车辆和他们的信心得分。

  • 为代码生成配置模型。

  • 生成一个CUDA仿真软件的可执行模型。金宝app

第三方的先决条件

验证GPU环境

验证所需的编译器和库运行这个示例设置正确,使用coder.checkGpuInstall函数。

envCfg = coder.gpuEnvConfig (“主机”);envCfg。DeepLibTarget =“cudnn”;envCfg。DeepCodegen = 1;envCfg。安静= 1;coder.checkGpuInstall (envCfg);

算法流程

算法的框图模型的工作流模型。金宝app

Pretrained车道,车辆检测网络

下面的例子使用了trainedLaneNetyolov2ResNet50VehicleExamplemat文件包含pretrained网络。大约143 mb和98 mb的文件大小,分别。从MathWorks网站下载的文件。

lanenetFile = matlab.internal.examples.download金宝appSupportFile (“gpucoder / cnn_models / lane_detection”,“trainedLaneNet.mat”);vehiclenetFile = matlab.internal.examples.download金宝appSupportFile (“视觉/数据”,“yolov2ResNet50VehicleExample.mat”);

交通视频下载测试

测试模型,示例使用了加州理工学院的车道数据集。大约是16 MB的文件。从MathWorks网站下载的文件。

mediaFile = matlab.internal.examples.download金宝appSupportFile (“gpucoder /媒体”,“caltech_washington1.avi”);

车道,车辆检测仿真软件模型金宝app

执行巷和金宝app车辆的仿真软件模型检测在交通视频显示。模型运行时,视频查看器块显示与车道,车辆交通视频注释。

open_system (“laneAndVehicleDetection”);

的文件路径设置dowloaded网络模型预测和探测器模块的仿真软件模型。金宝app设置测试视频的位置加载仿真软件模型。金宝app

set_param (“laneAndVehicleDetection /车道检测”,“NetworkFilePath”lanenetFile) set_param (“laneAndVehicleDetection /车辆检测器”,“DetectorFilePath”vehiclenetFile) set_param (“laneAndVehicleDetection /交通视频”,“inputFileName”mediaFile)

车道检测

预测块加载pretrained车道检测网络的trainedLaneNet.mat文件。这个网络需要一个图像作为输入和输出两个车道边界对应于自我的左和右车道车辆。每个车道边界由抛物型方程表示:

$ y = ax ^ 2 + bx +加元

这里y是横向偏移和x是纵向的距离。网络输出三个参数a、b和c /巷。网络体系结构是类似的AlexNet除了最后几层取而代之的是一个更小的完全连接层和回归输出层。的LaneDetectionCoordinatesMATLAB函数块定义了一个函数lane_detection_coordinates这需要预测块的输出和输出三个参数。laneFound,ltPtsrtPts。阈值用于确定左和右车道边界都是发现。如果被发现,laneFound将真实边界的轨迹计算和存储在吗ltPtsrtPts分别。

类型lane_detection_coordinates
函数(laneFound、ltPts rtPts] = lane_detection_coordinates (laneNetOut) % MathWorks版权2020 - 2021年,公司持续laneCoeffMeans;如果isempty (laneCoeffMeans) laneCoeffMeans = (-0.0002, 0.0002, 1.4740, -0.0002, 0.0045, -1.3787);结束持久laneCoeffStds;如果isempty (laneCoeffStds) laneCoeffStds = (0.0030, 0.0766, 0.6313, 0.0026, 0.0736, 0.9846);params = laneNetOut结束。* laneCoeffStds + laneCoeffMeans;% ' c '应该超过0.5是一个右车道isRightLaneFound = abs (params (6)) > 0.5;isLeftLaneFound = abs (params (3)) > 0.5;持久vehicleXPoints;如果isempty (vehicleXPoints) vehicleXPoints = 3;%米,在传感器端ltPts = coder.nullcopy(0(28日2,'单')); 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意思对象检测网络由两个子网:特征提取网络之后,检测网络。这pretrained网络使用ResNet-50特征提取。检测子是一个小的CNN与特征提取网络和由几个卷积的一层又一层特定于YOLO v2的意思。仿真软件金宝app模型进行车辆检测使用对象探测器从计算机视觉的工具箱(TM)块。物体以一个图像作为输入和输出边界框坐标以及信心得分的车辆图像。

注释的车辆碰撞盒子和巷轨道交通视频中

LaneVehicleAnnotationMATLAB函数块定义了一个函数lane_vehicle_annotation注释工具的边界框随着信心的分数。同样,如果laneFound是真的,那么左和右车道边界存储在吗ltPtsrtPts在交通视频注释。

类型lane_vehicle_annotation
函数= lane_vehicle_annotation (laneFound、ltPts rtPts, bboxes,分数,)% 2020 - 2021版权MathWorks, inc .)如果~ isempty (bboxes) = insertObjectAnnotation(“矩形”,bboxes分数);最后分=编码器。nullcopy(0(28 4 '单'));如果laneFound prevpt = [ltPts (1,1) ltPts (1、2)];k = 2:1:28 pts (k, 1:4) = (prevpt ltPts (k, 1) ltPts (k, 2)];prevpt = [ltPts (k, 1) ltPts (k, 2)];结束= insertShape(分,“行”,“线宽”,2);prevpt = [rtPts (1,1) rtPts (1、2)];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

运行仿真

配置参数对话框打开。

模拟目标窗格中,选择GPU加速。在深度学习组,选择目标库cuDNN

set_param (bdroot“GPUAcceleration”,“上”);set_param (bdroot“SimDLTargetLibrary”,“cudnn”);set_param (bdroot“DLTargetLibrary”,“cudnn”);

验证巷和车辆检测算法和显示巷轨迹,车辆碰撞盒子和分数的交通视频加载仿真软件模型,仿真运行。金宝app

set_param (“laneAndVehicleDetection”,“SimulationMode”,“正常”);sim卡(“laneAndVehicleDetection”);

生成和构建仿真软件模型金宝app

代码生成窗格中,选择语言作为c++并使生成GPU的代码

set_param (bdroot“TargetLang”,“c++”);set_param (bdroot“GenerateGPUCode”,CUDA的);

在子类别代码生成> GPU的代码窗格中,使cuBLAS,cuSOLVERcuFFT

set_param (bdroot“GPUcuBLAS”,“上”);set_param (bdroot“GPUcuSOLVER”,“上”);set_param (bdroot“GPUcuFFT”,“上”);

生成和构建在主机GPU通过使用仿真软件模型金宝appslbuild命令。代码生成器的文件在一个地方建立文件夹,一个子文件夹命名laneAndVehicleDetection_ert_rtw在你当前的工作目录。

状态= evalc (“slbuild (laneAndVehicleDetection)”);

生成的CUDA代码

子文件夹命名laneAndVehicleDetection_ert_rtw包含生成c++代码对应不同的块仿真软件模型和所执行的特定操作的块。金宝app例如,该文件trainedLaneNet0_laneAndVehicleDetection0.h包含c++类包含属性和成员函数代表pretrained车道检测网络。

同样,该文件yolov2ResNet50VehicleExample0_laneAndVehicleDetection0.h包含c++类代表pretrained YOLO v2意思检测网络。

另请参阅

功能

相关的话题