主要内容

基于深度学习的Simulink中车道和车辆检测

这个例子展示了如何在Simulink®模型中使用深度卷积神经网络来执行车道和车辆检测。本例将来自交通视频的帧作为输入,输出对应于自我车辆的左右车道的两个车道边界,并检测帧中的车辆。

这个例子使用了预先训练的车道检测网络利用GPU编码器优化车道检测GPU Coder工具箱™的例子。有关更多信息,请参见利用GPU编码器优化车道检测(GPU编码器)

本例还使用了预先训练的车辆检测网络使用YOLO v2深度学习的对象检测计算机视觉工具箱™的例子。有关更多信息,请参见使用YOLO v2深度学习的对象检测(计算机视觉工具箱)

Simulink中的深度学习功能使用MATLAB函数块,它需要支持的编译器。对于大多数平台,MATLAB®安装附带了一个默认的C编译器。使用c++语言时,必须安装兼容的c++编译器。要查看支持的编译器列表,请打开支持和兼容的编译器,单击对应您的操作系统的选项卡,找到Simulink产品族表,并转到模型引用、加速器模式、快速加速器模式和MATLAB函数块列。如果您的系统上安装了多个支持的编译器,您可以使用mex -setup命令更改默认编译器。看到更改默认编译器

算法流程

给出了Simulink模型的算法流程框图。

获得预先训练的车道和车辆检测网络

此示例使用trainedLaneNet而且yolov2ResNet50VehicleExample包含预先训练的网络的mat文件。这些文件的大小分别约为143 MB和98 MB。从MathWorks网站下载文件。

lanenetFile = matlab.internal.examples.downloadSupportFile(“gpucoder / cnn_models / lane_detection”“trainedLaneNet.mat”);vehiclenetFile = matlab.internal.examples.downloadSupportFile(“视觉/数据”“yolov2ResNet50VehicleExample.mat”);

下载测试交通视频

为了测试该模型,该示例使用了Caltech lanes数据集。该文件的大小大约为16 MB。从MathWorks网站下载文件。

mediaFile = matlab.internal.examples.downloadSupportFile(“gpucoder /媒体”“caltech_washington1.avi”);

车道和车辆检测Simulink模型

给出了在交通视频中进行车道和车辆检测的Simulink模型。当模型运行时,视频查看器块显示带有车道和车辆注释的交通视频。

open_system (“laneAndVehicleDetectionMDL”);

在Simulink模型的预测块和检测器块中设置下载的网络模型的文件路径。设置由Simulink模型加载的测试视频的位置。

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

车道检测

对于车道检测,对交通视频进行预处理,将视频的每一帧大小调整为227 × 227 × 3,然后按255的倍数缩放。然后将预处理过的帧输入trainedLaneNet.mat加载在预测块的深度学习工具箱™。该网络以一个图像作为输入和输出两个车道边界,分别对应于自我车辆的左右车道。每个车道边界用抛物方程表示:

$y = ax^2+bx+c$

y是横向偏移量x是到车辆的纵向距离。网络输出每个车道的三个参数a、b和c。网络架构类似于AlexNet除了最后几层被一个更小的完全连接层和回归输出层所取代。的车道检测坐标MATLAB函数块定义了一个函数lane_detection_coordinates它从预测块中获取输出并输出三个参数;laneFoundltPts,rtPts.阈值划分用于确定是否同时找到了左右车道边界。如果两者都被找到,laneFound设为真边界的轨迹被计算并存储在里面ltPts而且rtPts分别。

类型lane_detection_coordinates
function [laneFound,ltPts,rtPts] = lane_detection_coordinates(laneNetOut) %版权所有The MathWorks, Inc. persistent laneCoeffMeans;if isempty(laneCoeffMeans) laneCoeffMeans = [-0.0002,0.0002,1.4740,-0.0002,0.0045,-1.3787];结束持久的laneCoeffStds;if isempty(laneCoeffStds) laneCoeffStds = [0.0030,0.0766,0.6313,0.0026,0.0736,0.9846];end params = laneNetOut .* laneCoeffStds + laneCoeffMeans;% 'c'应该大于0.5,它是一个右车道isRightLaneFound = abs(params(6)) > 0.5;isLeftLaneFound = abs(params(3)) > 0.5;持久vehicleXPoints;if isempty(vehicle - lexpoints) = 3:30;%米,前面的传感器结束ltPts = code .nullcopy(零(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模型使用对象探测器从计算机视觉工具箱中的块。该块将图像作为输入,并输出边界框坐标以及图像中车辆的置信度分数。

交通视频中车辆边界框和车道轨迹的标注

车道及车辆注释MATLAB函数块定义了一个函数lane_vehicle_annotation它标注了车辆边界框和置信度分数。如果laneFound是真的,那么左右车道边界存储在ltPts而且rtPts都覆盖在交通录像上了。

类型lane_vehicle_annotation
The MathWorks, Inc. if ~isempty(bboxes) In = insertObjectAnnotation(In, 'rectangle',bboxes,scores);结束PTS =编码器。Nullcopy (0 (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)];prept = [ltPts(k,1) ltPts(k,2)];end In = insertShape(In, 'Line', pts, 'LineWidth', 2);prept = [rtPts(1,1) rtPts(1,2)];for k = 2:1:28 pts(k,1:4) = [prevpt rtPts(k,1) rtPts(k,2)];prept = [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”“正常”);sim卡(“laneAndVehicleDetectionMDL”);

在Windows®上,最大路径长度260个字符可以导致"文件未找到"运行模拟时出现错误。在这种情况下,将示例文件夹移动到另一个位置,或在Windows中启用长路径。有关更多信息,请参见最大路径长度限制(微软)

如果您的Intel®CPU支持AVX2指令,您可以使用深度学习库的MATLAB编码器接口使用Intel MKL-DNN库加速模拟。在“模型配置参数”窗口中,在“仿真目标”窗格上,将“语言”设置为c++和目标库到MKL-DNN

代码生成

使用GPU Coder,您可以加速NVIDIA®GPU上模型的执行,并为模型生成CUDA®代码。有关更多信息,请参见用于车道和车辆检测的深度学习Simulink模型的代码生成(GPU编码器)

Baidu
map