<新文件交换提交<前一 深度学习用于自动驾驶…>下一个> 自动驾驶的深度学习(第一部分)-车辆检测 저자阿维尼希米,2017年11月3日 54회조회(최근30일)|0좋아|2댓글 这是一篇来自Avinash尼希米Avi是负责计算机视觉和自动驾驶的产品经理。 我经常从朋友和同事那里得到一些问题,比如自动驾驶系统如何感知环境并做出“类似人类”的决策,以及MATLAB是如何在这些系统中使用的。在接下来的两篇博文中,我将解释如何使用深度学习和MATLAB来解决自动驾驶的两个常见感知任务: 车辆检测(本帖) 车道检测(下篇) 车辆检测目标检测是对图像和视频中的目标进行定位和分类的过程。在本节中,我将使用一个车辆检测示例向您介绍如何使用深度学习创建对象检测器。同样的步骤可用于创建任何对象检测器。下图显示了三类车辆检测器的输出,其中检测器定位并对每种类型的车辆进行分类。 车辆检测器的输出,用于定位和分类不同类型的车辆。 在我开始创建车辆检测器之前,我需要一组标记的训练数据,这是一组带有感兴趣对象的位置和标签的图像。更具体地说,需要有人筛选每一张图像或视频帧,并标记所有感兴趣的物体的位置。这个过程被称为 基本真理标记 .基本真值标记通常是创建对象检测器最耗时的部分。下图左侧显示的是原始训练图像,右侧显示的是带有标记的地面真相的相同图像。 原始输入图像(左)和带标记的地面真实值的输入图像(右)。 可以想象,标记足够大的训练图像集是一个费力的手工过程。为了减少标记数据所花费的时间,我在中使用了Ground Truth labeller 自动驾驶系统工具箱 ,这是一款标记基本事实的应用程序,并自动化标记过程的一部分。 Ground Truth Labeler应用程序的屏幕截图,旨在标记视频和图像数据。 将部分流程自动化的方法之一是使用跟踪算法。我使用的追踪器是 Kanade Lucas Tomasi 该算法(KLT)是第一个用于实际应用的计算机视觉算法之一。KLT算法将对象表示为一组特征点,并跟踪它们在帧与帧之间的运动。这让我们可以手动标记第一帧中的一个或多个对象,并使用跟踪器标记视频的其余部分。Ground Truth Labeler应用程序还允许用户导入自己的算法来自动标记。我所见过的使用此特性的最常见方式是用户导入自己的现有检测器来标记新数据,这有助于他们最终创建更准确的检测器。下图演示了使用Ground Truth Labeler应用程序标记图像序列或视频的工作流程。 利用MATLAB实现地面真值自动标注的过程。 标记的数据存储为一个表,其中列出了我们训练集中视频的每个时间步中的车辆位置。地面真相标记完成后,我可以开始训练车辆探测器。在我们的例子中,我估计地面真相标记过程加快了119倍。我们视频的训练视频数据以每秒30帧的速度捕获,我们每4秒标记一次对象。这意味着我们节省了标记中间119帧的时间。这119倍的节省是最好的情况,因为我们有时必须纠正自动标记的输出。 对于我们的车辆检测器,我使用 快R-CNN 网络。让我们从定义一个网络架构开始,如下面的MATLAB代码片段所示。Faster R-CNN算法分析图像的区域,因此输入层小于输入图像的预期大小。在我们的例子中,我选择了一个32x32像素的窗口。输入大小是执行时间和希望检测器解析的空间细节量之间的平衡。 创建图像输入层。inputLayer = imageInputLayer([32 32 3]); 中间层是网络的核心构件,具有重复的 卷积,ReLU和池化 层。在我们的例子中,我只使用几个图层。您总是可以通过重复这些层来创建更深的网络,以提高准确性,或者如果您想将更多的类合并到检测器中。您可以在神经网络工具箱中了解更多关于可用的不同类型的层的信息文档. 定义卷积层参数。filterSize = [3 3];numFilters = 32;创建中间层。middleLayers = [convolution2dLayer(filterSize, numFilters, 'Padding', 1) reluLayer() convolution2dLayer(filterSize, numFilters, 'Padding', 1) reluLayer() maxPooling2dLayer(3, 'Stride',2)]; CNN的最后一层通常是一组全连接层和一个软最大损耗层。在这种情况下,我在全连接层之间添加了一个ReLU非线性,以提高检测器的性能,因为这个检测器的训练集没有我想要的那么大。 添加一个64个输出神经元的全连接层。该层的输出大小%将是一个长度为64的数组。添加一个ReLU非线性。reluLayer() %添加最后一个全连接层。在这一点上,网络必须%产生输出,可以用来测量输入图像%是否属于对象类或背景之一。此测量%是使用后续损失层进行的。添加softmax损失层和分类层。softmaxLayer() classificationLayer()];layers = [inputLayer middleLayers finalLayers] 为了训练对象检测器,我将“层”网络结构传递给 trainFasterRCNNObjectDetector" 函数。如果您安装了GPU,该算法将默认使用GPU。如果您想在没有GPU或使用多个GPU的情况下进行训练,可以通过调整 “ExecutionEnvironment” "中的参数 trainingOptions" . 检测器= trainfastrcnnobjectdetector (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, '矩形',bboxes, scores);数字imshow(我) 从Faster R-CNN车辆检测器检测到边界框和分数。 一旦您确信您的检测器正在工作,我强烈建议使用统计度量(例如平均精度)在更大的验证图像集上测试它,平均精度提供了检测器进行正确分类的能力(精度)和检测器找到所有相关对象的能力(回忆)的单一评分度量。 这个页面 提供有关如何计算检测器的详细信息。 为了解决这篇文章中描述的问题,我使用了MATLAB R2017b和 神经网络工具箱 , 并行计算工具箱 , 计算机视觉系统工具箱 , 自动驾驶系统工具箱 . | 이게시물을팔로우합니다 활동 피드에서업데이트를확할수있습니다。 알림기본설정에따라이메일을받을수있습니다。 범주: 深度学习 <新文件交换提交<前一 深度学习用于自动驾驶…>下一个> 另请参阅 图像分类的深度学习 博客 YOLOv2对象检测:MATLAB中神经网络的数据标记 博客 在MATLAB中设计目标检测器 博客 训练对象检测器使用R-CNN深度学习 用于对象检测的自动地面真相标记 训练对象检测器使用R-CNN深度学习 댓글 댓글을남기려면링크를클릭하여MathWorks계정에로그하거나계정을새로만드십시오。