主要内容

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

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

此示例使用预先预制的车道检测网络基于GPU编码器的车道检测优化GPU编码器工具箱™示例。有关更多信息,请参阅基于GPU编码器的车道检测优化(GPU编码器)

该示例还使用预磨料的车辆检测网络使用YOLO V2深度学习的对象检测计算机Vision Toolbox™的示例。有关更多信息,请参阅使用YOLO V2深度学习的对象检测(电脑视觉工具箱)

算法流程

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

获取预制车道和车辆检测网络

GetdehicledetectionandlanedetectionNetworks.功能下载trainedLaneNet.matYOLOV2RESNET50VEHICEEXAMPLE.MAT.文件如果尚未存在。

getvehicledetectionandlanedetectionnetworks()

下载示例视频

如果〜存在(”。/ caltech_washington1.avi ''文件') url =“//www.tatmou.com/金宝appsupportfiles/gpucoder/media/caltech_washington1.avi”;WebSave('caltech_washington1.avi'url);结束

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

给出了对金宝app交通视频进行车道和车辆检测的Simulink模型。当模型运行时,视频查看器Block显示带有车道和车辆标注的交通视频。

open_system ('laneandvehicledetectionmdl');

车道检测

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

$ y = ax ^ 2 + bx + c $

这里Y是横向偏移,X是距离车辆的纵向距离。网络输出每通道的三个参数A,B和C.网络架构类似于AlexNet.除了最后几层由较小的完全连接的层和回归输出层替换。当车道检测坐标MATLAB函数块定义了一个函数Lane_detection_coordinates.从预测块中获取输出输出三个参数;lanefound.LTPT.,rtPts.阈值用于确定是否同时找到左车道和右车道边界。如果两者都找到了,lanefound.设置为true,并计算边界的轨迹并存储在LTPT.rtPts分别。

类型Lane_detection_coordinates.
function [laneFound,ltPts,rtPts] = lane_detection_coordinates(laneNetOut) % Copyright 2020 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

车辆检测

本例使用基于YOLO v2的网络进行车辆检测。YOLO v2对象检测网络由特征提取网络和检测网络两个子网组成。这个预先训练的网络使用ResNet-50用于特征提取。与特征提取网络相比,检测子网络是小CNN,并且由几个特定于Yolo V2的卷积层和层组成。

Simu金宝applink模型在内部执行车辆检测MATLAB函数车辆检测yolov2..此功能块定义了函数车辆_detection_yolo_v2.加载普雷雷达的YOLO V2检测器。该网络将图像拍摄为输入,并输出边界框坐标以及图像中车辆的置信区。

类型车辆_detection_yolo_v2.
function [bboxes,scores] = vehicle_detection_yolo_v2(In) % Copyright 2020 The MathWorks, Inc. persistent yolodetector;if isempty(yolodetector) yolodetector = code . loaddeeplearningnetwork ('yolov2ResNet50VehicleExample.mat');end [bboxes,scores,~] = detect(yolodetector,In, 'threshold', .2); / /设置阈值结束

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

车道和车辆注释MATLAB函数块定义了一个函数lane_vehicle_annotation这将车辆边界框与置信度分数一起注释。如果lanefound.是真的吗,那么左右车道的边界存储在哪里呢LTPT.rtPts覆盖在交通视频上。

类型lane_vehicle_annotation
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

set_param ('laneandvehicledetectionmdl''simulationmode''正常');SIM('laneandvehicledetectionmdl');

代码生成

使用GPU编码器™,您可以加快在NVIDIA®GPU上的模型执行,并为模型生成CUDA®代码。看看执行车道和车辆检测的深度学习模拟模型的代码生成金宝app(GPU编码器)为更多的细节。

清理

关闭Simulink金宝app模型。

close_system (“Lane and vehicledetectionmdl /Lane and VehicleDetection Output”);close_system ('laneandvehicledetectionmdl');