<新文件交换提交<前一 深度学习自动化驾驶...>下一个> 自动驾驶的深度学习(第1部分)-车辆检测 发布的阿维尼希米那2017年11月3日 47次(过去30天 0.喜欢| 2的评论 这是来自Avinash尼希米,AVI是用于计算机视觉和自动驾驶的产品经理。 我经常从朋友和同事中获取问题,就自动化驾驶系统如何感知他们的环境并制作“人类类似”决定以及如何在这些系统中使用MATLAB。在接下来的两个博客帖子上,我将解释深度学习和Matlab如何用于解决自动驾驶的两个常见的感知任务: 车辆侦测(此文) 车道检测(下一篇) 车辆检测对象检测是在图像和视频中定位和分类对象的过程。在本节中,我将使用车辆检测示例来使用如何使用深度学习来创建对象检测器。相同的步骤可用于创建任何对象检测器。下图显示了三类车辆检测器的输出,其中检测器定位并分类每种类型的车辆。 用于定位和分类不同类型车辆的车辆检测器的输出。 在开始创建车辆检测器之前,我需要一组已标记的训练数据,这是一组用感兴趣的对象的位置和标签标注的图像。更具体地说,需要有人筛选每个图像或视频帧,并标记所有感兴趣的物体的位置。这个过程被称为 地面实况标签 .地面真实标记通常是创建对象检测器最耗时的部分。下图在左侧显示了原始训练图像,在右侧显示了标记为ground truth的同一张图像。 原始输入图像(左)和标有地面真相(右)的输入图像。 可以想象,给足够大的训练图像集贴上标签可能是一个费力和手工的过程。为了减少标记数据的时间,我使用了Ground Truth Labeler 自动驾驶系统工具箱 ,这是一个应用程序,标签基础真理以及自动部分标签过程。 Ground Truth Labeler应用程序的屏幕截图,设计用于标签视频和图像数据。 自动化部分过程的一种方法是使用跟踪算法。我用的追踪器是 金卢卡斯预 算法(KLT)是在现实世界应用中使用的第一台计算机视觉算法之一。KLT算法表示作为一组特征点的对象,并跟踪它们从帧到帧的移动。这使我们可以手动标记第一帧中的一个或多个对象,并使用跟踪器来标记视频的其余部分。地面真理贴标程序应用程序还允许用户导入自己的算法以自动标记。我所看到的最常用方式使用了使用的是,当用户将自己的现有探测器导入标记新数据时,这有助于它们最终创建更准确的探测器。下图说明了使用地面真实贴标程序应用程序标记一系列图像或视频的工作流程。 利用MATLAB实现地面真值自动标注的过程。 标记的数据存储为一个表格,其中列出了训练集视频的每个时间步长中车辆的位置。地面真实标记完成后,我可以开始训练车辆检测器了。在我们的案例中,我估计基本真理的标注过程被加快了119x。我们的视频的训练视频数据是以每秒30帧的速度捕获的,我们每4秒标记一次对象。这意味着我们节省了标记其间119帧的时间。这119x的节省是最好的情况,因为我们有时不得不纠正自动标签的输出。 对于我们的车辆检测器,我使用 更快的R-CNN 网络。让我们首先定义一个网络架构,如下面的Matlab代码片段中所示。更快的R-CNN算法分析图像的区域,因此输入层小于输入图像的预期大小。在我们的情况下,我选择一个32x32像素窗口。输入大小是您希望检测器解析的执行时间和空间详细信息之间的平衡。 %创建图像输入层。InputLayer = ImageInputLayer([32 32 3]); 中间层是网络的核心构建块,具有重复的集合 卷积,释放和汇集 层。对于我们的示例,我将只使用几个层。如果你想在检测器中加入更多的类,你可以通过重复这些层来创建更深层次的网络。您可以在神经网络工具箱中了解更多关于可用的不同类型层的信息文件. %定义卷积层参数。filterSize = [3 3];numFilters = 32;%创建中间层。midlelayer =[卷积2dlayer (filterSize, numFilters, 'Padding', 1) reluLayer()卷积2dlayer (filterSize, numFilters, 'Padding', 1) reluLayer() maxPooling2dLayer(3, 'Stride',2)]; CNN的最终层通常是一组完全连接的层和软MAX损耗层。在这种情况下,我在完全连接的层之间添加了一个Relu非线性,以改善探测器性能,因为我们为该探测器设置的训练并不像我想要的那么大。 finAllayers = [%添加完全连接的层,带有64个输出神经元。该层的输出大小%将是一个长度为64的阵列。全连接列(64)%添加Relu非线性。Rululayer()%添加最后一个完全连接的图层。此时,网络必须%产生输出,该输出可用于测量输入图像%是否属于对象类或背景之一。该测量%是使用后续损耗层进行的。全连接层(宽度(车辆达到))%添加Softmax丢失层和分类层。softmaxlayer()classificationlayer()];图层= [InputLayer Middlayers FinAllayers] 为了训练目标检测器,我将“层”网络结构传递给 trainFasterRCNNObjectDetector“ 功能。如果安装了GPU,则算法将默认使用GPU。如果您想在没有GPU或使用多个GPU的情况下训练,可以通过调整 “刽子果环境” 参数” trainingOptions“ . 检测器= trainFasterRCNNObjectDetector(trainingData, layers, options,…'负极源性游侠',[0 0.3],......' positiveoverrange ',[0.6 1],…“BoxPyramidScale”,1.2); 一旦完成培训,请在几个测试图像上尝试,以查看检测器是否正常工作。我使用以下代码在单个图像上测试检测器。 读取测试映像。I = imread(“highway.png”);%运行检测器。[bboxes, scores] =检测(检测器,I);%在图像中注释检测。I = insertObjectAnnotation(I, 'rectangle', bboxes, scores);数字imshow(我) 检测包围盒和分数从更快的R-CNN车辆检测器。 一旦你确信探测器能正常工作,我强烈推荐测试它在更大的组验证图像使用统计指标如平均精度提供了一个分数测量探测器的能力做出正确的分类(精度)和探测器的能力找到所有相关对象(回忆)。 这一页 提供有关如何评估探测器的更多信息。 解决我使用MATLAB R2017B的本篇文章中描述的问题 神经网络工具箱 那 并行计算工具箱 那 计算机视觉系统工具箱 , 自动驾驶系统工具箱 . | 您现在关注此博客文章 您将在您的活动提要. 您可以收到电子邮件,具体取决于您的电子邮件通知偏好. 类别: 深度学习 <新文件交换提交<前一 深度学习自动化驾驶...>下一个> 另请参阅 图像分类的深度学习 博客 YOLOv2目标检测:MATLAB中的神经网络数据标记 博客 在MATLAB中设计对象检测器 博客 快R-CNN例子 对象检测和语义分割的培训数据 基于R-CNN深度学习的列车目标检测器 评论 要留下评论,请点击在这里登录到您的MathWorks帐户或创建一个新帐户。