主要内容

基于深度学习的Simulink车道和车辆检测金宝app

此示例演示如何在Simulink®模型中使用深度卷积神经网络来执行车道和车辆检测。该示例将来自交通视频的帧作为输入,输出与ego车辆的左车道和右车道金宝app相对应的两个车道边界,并检测帧中的车辆。

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

该示例还使用了来自的预训练车辆检测网络使用YOLO v2进行对象检测计算机视觉工具箱的示例™。有关更多信息,请参见使用YOLO v2进行对象检测(计算机视觉工具箱)

算法工作流

Simulink模型的算法工作流程框图如图所示。金宝app

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

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

lanenetFile = matlab.internal.examples.download金宝appSupportFile (“gpucoder/cnn\u模型/车道检测”“trainedLaneNet.mat”);vehiclenetFile = matlab.internal.examples.download金宝appSupportFile (“视觉/数据”“yolov2ResNet50VehicleExample.mat”);

下载测试交通视频

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

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

车道与车辆检测Simulink模型金宝app

显示了在金宝app交通视频上执行车道和车辆检测的Simulink模型。模型运行时视频查看器块显示带有车道和车辆注释的交通视频。

开放式系统(“laneAndVehicleDetectionMDL”);

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

设置参数(“laneAndVehicleDetectionMDL /车道检测”“网络文件路径”lanenetFile) set_param (“LaneandVehicle检测MDL/车辆检测器”“DetectorFilePath”vehiclenetFile) set_param (“LaneandVehicle检测MDL/交通视频”“inputFileName”mediaFile)

车道检测

对于车道检测,通过将视频的每一帧调整为227×227×3,然后按255的系数缩放,对交通视频进行预处理。然后将预处理的帧输入到训练有素网络加载在预测深度学习工具箱中的块™. 该网络将图像作为输入,并输出与车辆左、右车道相对应的两条车道边界。每个车道边界由抛物线方程表示:

$ y = ax ^ 2 + bx +加元

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

类型车道坐标
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];结束持久laneCoeffStds;if is空(laneCoeffStds) laneCoeffStds = [0.0030,0.0766,0.6313,0.0026,0.0736,0.9846];end params = laneNetOut .* laneCoeffStds + laneCoeffMeans;isRightLaneFound = abs(params(6)) > 0.5;isLeftLaneFound = abs(params(3)) > 0.5;持久vehicleXPoints;if isempty(vehicleXPoints) vehicleXPoints = 3:30;ltPts = code .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

车辆检测

此示例使用基于YLO v2的网络进行车辆检测。YLO v2目标检测网络由两个子网络组成:一个特征提取网络,然后是一个检测网络。此预训练网络使用ResNet-50特征提取。与特征提取网络相比,检测子网络是一个较小的CNN,由几个卷积层和针对YOLO v2的层组成。

Simu金宝applink模型使用对象探测器块从计算机视觉工具箱。该块将图像作为输入,并输出边界框坐标以及图像中车辆的置信度分数。

交通视频中车辆包围盒和车道轨迹标注

行车线及车辆注释MATLAB函数块定义了一个函数车道\车辆\注释它标注了车辆的边界框和置信度得分。如果laneFound如果为true,则左车道和右车道边界存储在ltPtsrtPts都覆盖在交通视频上。

类型车道\车辆\注释
if ~isempty(bboxes) In = insertObjectAnnotation(In, 'rectangle',bboxes,scores);End PTS =编码器。nullcopy(0(28 4 '单'));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模型中的交通视频的车道轨迹、车辆边界框和分数,请运行模拟。金宝app

设置参数(“laneAndVehicleDetectionMDL”“SimulationMode”“正常”);sim卡(“laneAndVehicleDetectionMDL”);

在Windows®上,260个字符的最大路径长度可能导致“文件未找到”运行模拟时出错。在这种情况下,请将示例文件夹移动到其他位置,或在Windows中启用长路径。有关详细信息,请参阅最大路径长度限制(Microsoft)

使用深度学习加速器库

如果您的Intel®CPU支持AVX2指令,则可以使用金宝app深度学习库的MATLAB编码器接口使用“英特尔MKL-DNN库”加速模拟。在“模型配置参数”窗口的“模拟目标”窗格中,将语言设置为C++以及目标库MKL-DNN

代码生成

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