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