转自 Apollo阿波罗智能驾驶
原文章地址: https://baijiahao.baidu.com/s?id=1619639699587335253&wfr=spider&for=pc
在前面的课程里,我们提到了感知模块内的计算机视觉和深度学习,这节课我们来讲一讲感知任务中的分类、跟踪、语义分割和 Apollo 感知相关的内容。
在驾驶过程中无人车会遇到许多障碍物,静态障碍物包括墙壁、树木、杆子、建筑物;动态障碍物包括行人、自行车和各种汽车 ,计算机首先要知道这些障碍物的位置,进而障碍物进行分类。
一、检测与分类
在行驶过程中无人车会探测到许多不同的物体,汽车根据所感知的物体类型来确定路径和速度。
如果感知到前方有一辆自行车,汽车可能会决定减速或变道,以便安全驶过自行车;但是,如果感知到前方是一辆汽车,并预测到前方车辆也将以接近限速的速度行驶,无人车可能会保持其速度与车道。当无人车前方出现交通信号灯时候,首先计算机视觉会对图像中的交通信号灯进行定位,进而根据交通信号灯显示的颜色对其进行分类。
那么,无人车是用什么算法来对障碍物进行检测和分类的?
首先,我们可以使用检测 CNN 来查找图像中对象的位置,在对图像中的对象进行定位后,我们将图像发送给另一个 CNN 进行分类;我们也可以使用单一 CNN 体系结构对对象进行检测和分类,此时通常的做法是在单个网络体系结构的末端附加几个不同的“头”,一个头可能执行检测,另一个则可能执行分类。
一个经典的体系结构为 R-CNN 及其变体 Fast R-CNN 和 Faster R-CNN,YOLO 和 SSD 是具有类似形式的不同体系结构。
二、跟踪
在检测完对象后,我们要对检测到的对象进行追踪,进而我们需要知道:
追踪的意义是什么?如果我们对每个帧中的每个对象进行检测,并用边界框对每个对象进行标识,那么跨帧追踪对象会有什么好处?首先,追踪可以解决遮挡问题。如果在运行检测算法时,对象被其他对象遮挡了一部分,则检测算法可能会失败,所以追踪在检测失败时至关重要。
目标对象被遮挡后,检测算法可能会失败
追踪可以解决目标对象被遮挡的问题
同时,追踪可以保留身份。障碍物检测的输出为包含对象的边界框,但是,对象没有与任何身份关联,单独使用对象检测时,计算机不知道一个帧中的哪些对象与下一个帧中的哪些对象相对应。该任务对人类来说很简单,但对汽车来说很困难。
没有身份关联时,计算机无法分辨每一帧
通过追踪保留身份
追踪的第一步为确认身份。通过查找特征相似度最高的对象,我们将在之前的帧中检测到的所有对象,与当前的帧中检测到的对象进行匹配,对象具有各种特征,有些特征可能基于颜色,而另一些特征可能基于形状,计算机视觉算法可以计算出复杂的图像特征,如局部二值模式和方向梯度直方图。
我们也需要考虑连续视频帧中两个障碍物之间的位置和速度,由于两个帧之间的对象位置和速度没有太大变化,该信息也可以帮助我们快速找到匹配的对象,在确定身份后,我们可以使用对象的位置并结合预测算法,以估计其在下一个时间步的速度和位置,该预测可帮助我们识别下一帧中的相应对象。
根据两个帧对象的位置和速度确认身份
三、语义分割
语义分割涉及对图像每个像素进行分类,它用于尽可能详细地了解环境,并确定车辆可驾驶区域。语义分割依赖于一种特殊类型的 CNN,它被称为全卷积网络或 FCN,FCN 用卷积层来代替传统 CNN 体系结构末端的平坦层。现在,网络中的每一层都是卷积层,因此其名称为“全卷积网络”。
FCN 提供了可在原始输入图像之上叠加的逐像素输出, 但我们必须考虑的一个复杂因素是大小。在典型的 CNN 中,经过多次卷积之后所产生的输出比原始输入图像小得多,然而,为了分割像素,输入尺寸必须与原始图像的尺寸相匹配。
为了达到该目的,我们可以对中间输出进行上采样处理,直到最终输出的大小与原始输出图像的大小相匹配。网络的前半部分通常被称为“编码器”,因为这部分网络对输入图像的特征进行了提取和编码。网络的后半部分通常被称为“解码器”,因为它对这些特征进行了解码,并将其应用于输出。
四、Apollo 的感知算法
Apollo 开放式软件栈可感知障碍物、交通信号灯和车道,对于三维对象检测,Apollo 在高精度地图上使用感兴趣区域(ROI)来重点关注相关对象,Apollo 将 ROI 过滤器应用于点云和图像数据,以缩小搜索范围并加快感知。
然后,通过检测网络馈送已过滤的点云,输出用于构建围绕对象的三维边界框
最后,我们使用被称为检测跟踪关联的算法来跨时间步识别单个对象。该算法先保留在每个时间步要跟踪的对象列表,然后在下一个时间步中找到每个对象的最佳匹配。
当无人车前方出现交通信号灯时,Apollo 先使用高精度地图来确定前方是否存在交通信号灯。如果前方有交通信号灯,则高精度地图会返回灯的位置,这侧重于摄像头搜索范围。
在摄像头捕获到交通信号灯图像后,Apollo 使用检测网络对图像中的灯进行定位,然后 Apollo 从较大的图像中提取交通信号灯,Apollo 将裁剪的交通灯图像提供给分类网络,以确定灯颜色,如果有许多灯,则系统需要选择哪些灯与其车道相关。
Apollo 使用 YOLO 网络来检测车道线和动态物体,其中包括汽车、骑自行车的人和行人。在经过 YOLO 网络检测后,在线检测模块会并入来自其他传感器的数据,对车道线预测进行调整,车道线最终被并入名为“虚拟车道”的单一数据结构中。同样也通过其他传感器的数据对 YOLO 网络所检测到的动态对象进行调整,以获得每个对象的类型、位置、速度和前进方向、虚拟通道和动态对象,均被传递到规划和控制模块。
五、 Apollo 的感知融合策略
感知通常依赖于摄像头、激光雷达和雷达,该图显示了三种传感器的优缺点
由上图可知:
摄像头非常适用于分类,在 Apollo 中摄像头主要用于交通信号灯分类以及车道检测;激光雷达的优势在于障碍物检测,即使在夜间没有自然光的情况下, 激光雷达仍能准确地检测障碍物;雷达在探测范围和应对恶劣天气方面占优势。通过融合这三种传感器的数据,实现最佳聚合性能被称为传感器融合。Apollo 使用激光雷达和雷达来检测障碍物,用于融合输出的主要算法为卡尔曼滤波。卡尔曼滤波有两个步骤,第一步为预测状态,第二部是更新测量结果。
设想我们正在跟踪一名行人,这里的状态表示行人的位置和速度,从已经掌握的行人状态开始,我们使用这些信息来执行卡尔曼滤波的第一步,即预测行人在未来的状态,下一步为误差结果更新,我们使用新的传感器来更新我们所认为的行人状态。
卡尔曼滤波的算法是预测和更新步骤的无限循环,实际上有两种测量结果更新步骤,同步和异步。同步融合同时更新来自不同传感器的测量结果,而异步融合则逐个更新所收到的传感器测量结果,传感器融合可提高感知性能,因为各传感器相辅相成,融合也可以减少跟踪误差,所以我们可以更加确信对道路上其他物体位置的预测。
同步更新示意
异步更新示意
在最近的三节课中,我们介绍了无人车的感知运作方式,涉及了不同的方法和传感器, 我们了解了主要的感知任务,包括检测、分类、跟踪和分割,这些应用中的大部分都依赖于卷积神经网络,最后我们探讨了传感器融合,以及如何使用预测更新周期来过滤传感器数据。正是有了这些工具,无人驾驶才可以使用自身的传感器来感知世界。
如果您对无人车的“感知”模块还有疑问,请在文末留言,我们会为您依次解答。接下来我们将开启新的章节——自动驾驶的“预测”模块。