无人驾驶技术——YOLO目标检测

本文深入探讨了YOLO(You Only Look Once)目标检测算法,特别是YOLOv3版本的工作流程,包括图像预处理、网络前向传播、边界框筛选等步骤。YOLOv3通过单一神经网络对整个图像进行预测,能快速检测出图像中的物体,如车辆。文章还介绍了如何在OpenCV中实现YOLOv3,以进行实时目标检测。
摘要由CSDN通过智能技术生成

为什么要检测物体?

我们需要一种方法来检测图像中的车辆,这样我们就可以隔离匹配的关键点以及投影的激光雷达点,并将它们与特定的对象相关联。让我们看一看程序流程图,我们已经在关于设计碰撞检测系统的课程中讨论过。

在这里插入图片描述

根据在上一课中学习的内容,现在可以使用各种检测器和描述符来检测和匹配关键点。然而,为了计算特定车辆的碰撞时间,我们需要隔离该车辆上的关键点,以便TTC估计不会由于包含匹配而失真,例如路面、静止物体或现场其他车辆。实现这一点的一种方法是使用自动检测识别场景中的车辆。这种算法的输出(理想情况下)是围绕场景中所有对象的一组二维边界框。基于这些边界框,我们可以很容易地将关键点匹配与对象关联起来,并实现一个稳定的TTC估计。

对于激光雷达测量,同样的原理也适用。正如您在前面关于LiDAR的课程中所学到的,您已经知道,可以通过使用点云库(PCL)中的算法,将3D点成功地聚集到单个对象中,这可以被视为与用于3D应用程序的OpenCV库等效。在本节中,让我们来看一下将激光雷达点分组为对象的另一种方法。根据在上一节中学习的内容,您现在知道如何将激光雷达点投影到图像平面上。给定一组来自对象检测的边界框,我们可以通过简单地检查3D激光雷达点在投射到相机中时是否被边界框包围,从而轻松地将其关联到场景中的特定目标。

我们将在本节后面详细介绍这两种方法,但现在,让我们来看一种检测摄像机图像中目标的方法——这是对关键点匹配和激光雷达点进行分组的先决条件。在上面所示的示意图中,当前课程的内容以蓝色矩形突出显示,在本节中,我们将重点讨论“目标的检测和分类”。

YOLO简介

本节的目的是使您能够快速利用一个强大的、最先进的对象检测工具。它的目的不是对这种算法的内部工作进行理论上的深入研究,而是使您能够快速、无缝地将对象检测集成到本课程的代码框架中。下图显示了我们将在本节中开发的代码的一个示例输出。

在这里插入图片描述

在过去,目标检测方法通常是基于定向梯度(HOG)和支持向量机(SVM)的直方图。在深入学习之前,HOG/SVM方法一直被认为是最先进的检测方法。虽然hog/svm的结果对于各种各样的问题仍然是可以接受的,但是它在处理速度有限的平台上的使用是有限的。与SIFT一样,一个主要的问题是依赖强度梯度的方法——这是一个昂贵的操作。

另一种目标检测方法是使用深度学习框架,如TensorFlow或Caffe。然而,两者的学习曲线都是非常陡峭的,这将保证一个完整的课程本身。一个简单易用的替代方案是yolo,它是一个非常快速的检测框架,随opencv库一起提供。YOLO是由康奈尔大学的Joseph Redmon, Santosh Divvala, Ross Girshick, and Ali Farhadi 开发的,他使用的方法与大多数其他方法不同:在这里,一个单一的神经网络应用于整个图像。该网络将图像划分为多个区域,并预测每个区域的边界框和概率。这些边界框由预测的概率加权。下图说明了原理:

在这里插入图片描述

除了基于分类器的系统(如hog/svm)之外,Yolo查看整个图像,以便通过图像中的全局上下文来通知其预测。它还可以通过单一网络进行预测,而不像R-CNN这样的系统,它需要对单个图像进行数千次预测。这使得它非常快,同时产生类似于其他最先进的方法,如单点多盒探测器(SSD)的结果。

Yolo的开发者还提供了一组预先训练的权重,使当前版本的Yolov3能够识别基于Coco(http://coco dataset.org/home)的图像和视频中的80个不同对象,这是一个大规模的对象检测、分割和字幕数据集。在本课程的背景下,这意味着我们可以使用yolov3作为开箱分类器,它能够以合理的精度检测车辆(和许多其他障碍物)。

Yolov3工作流程

在本节中,我们将了解在课程图像集上执行yolo所涉及的不同步骤。下面使用的参数主要是作者建议的参数。下面简要介绍了主要算法步骤:

1.首先,图像被划分为13x13网格单元。根据输入图像的大小,这些单元格的大小(以像素为单位)会有所不同。在下面的代码中,使用416 x 416像素的大小,导致32 x 32像素的单元大小。

2.如上图所示,每个单元随后用于预测一组边界框。对于每个边界框,网络还预测边界框包含特定对象的置信度以及属于特定类的对象的概率(取自COCO数据集)。

3.最后,使用非最大抑制来消除置信度较低的边界框以及包围同一对象的冗余边界框。

下面介绍了主要的工作流程以及相应的代码。

步骤1:初始化参数

Yolov3预测的每个边界框都与置信度得分相关。参数“confThreshold”用于删除分数较低的所有边界框。

然后,对剩余的边界框应用非最大抑制。NMS过程由参数“nmsthreshold”控制。

输入图像的大小由参数“inpWidth”和“inpHeight”控制,该参数由Yolo作者建议设置为416。其他值可以是320(更快)或608(更准确)。

步骤2:准备模型

文件“yolov3.weights”包含预先培训过的网络的权重,这里由yolo的作者提供。

包含网络配置的文件“yo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值