Apollo课程学习小记录3——感知
学习前言
今天的学习内容是感知原理与方法。
计算机视觉
一、感知的任务
人类可以自动识别图像中的物体,甚至可以推断物体之间的关系,但是对于计算机而言,图像只是红色、绿色和蓝色值的集合。无人驾驶车的感知有四个核心任务。
- 检测。找出物体在环境中的位置。
- 分类。指明对象。
- 跟踪。随时间的推移观察移动物体。
- 语义分割。将图像中的每个像素与语义类别进行匹配(如道路、汽车、天空等)。
二、图像分类器步骤
图像分类器是一种将图像作为输入,并输出识别该图像的标签的算法。
- 计算机接收成像设备的输入,通常被捕捉为一系列图像。
- 预处理。对每个图像进行标准化处理(如调整图像大小、方向、色彩空间等),预处理可帮助模型更快地处理和学习图像。
- 提取特征。特征有助于计算机理解图像,如形状和车轮是汽车的显著特征。
- 特征输入分类模型中,首先建立模型,再使用特征来选择图像类别。
摄像头图像
从计算机的角度来看,图像是一个二维网格(矩阵),图像中的每个像素点都是一个数值,这些值构成了我们的图像矩阵。这些数字网格是许多图像处理技术的基础,多数颜色和形状转换都是通过对图像进行数学运算和逐一像素更改来完成的。
彩色图像被构建为值的三维立方体,每个立方体都有高度、宽度和深度(颜色通道数)。大多数彩色图像以红色、绿色和蓝色组合表示,即RGB图像,RGB图像深度为3,所以RGB图像可以用一个薄盒子表示,将深度视为红色层、绿色层、蓝色层三重叠加的二维色层。
LiDAR图像
激光雷达传感器创建环境的点云表征,提供了难以通过摄像头图像获得的信息(如距离和高度)。激光雷达发射激光脉冲,通过计算每个激光脉冲反射回传感器所花费的时间来测量物体。反射需要的时间越长,物体离传感器越远。
激光雷达通过发射光脉冲来检测汽车周围的环境,蓝色点表示反射激光脉冲的物体,中间的黑色区域是无人驾驶车本身占据的空间。 激光雷达收集的数据形成点云,点云可以提供许多信息(如形状、表面纹理等)。通过对点进行聚类和分析,我们可以得到用于构建世界视觉表征的足够空间信息(包括对象检测、跟踪和分类等)。下图是在点云上执行的检测和分类结果,红点为行人,绿点表示其他汽车。
机器学习
- 监督式学习。使用人类创造的数据和相关的真值标记来进行模型训练。
- 无监督学习。不提供真值标记,计算机自行学习分析输入的数据并找到区别。
- “半监督式”学习。使用少量的标记数据和大量的未标记数据来训练模型,结合了监督学习和无监督学习的特点。
- 强化学习。计算机将尝试许多不同的解决方案,然后衡量哪种方法最成功。如果汽车实际完成了预想的操作,智能体就会提高奖励(得分)。如下图所示,起初汽车可能无法找到执行右转的方法,但是汽车最终会学习一些成功的右转经验,并成功学会右转。
神经网络(CNN)
一、神经网络简介
我们将人工神经元层连接起来,以创建人工神经网络。人工神经元负责传递和处理信息,通过密集训练,计算机可以辨别汽车、行人、交通信号灯和电线杆等。神经网络从图像中提取到许多特征,计算机将调整这些特征的权重,以完成神经网络的最终任务。
二、标准神经网络
首先将图像矩阵重塑为一个矢量,并在一个大行中连续所有列,将图像“展开”为一维像素阵列,即可将图像连接到网络的第一层。但是这种方法打破了图像中所嵌入的空间信息,如果图像中所有像素散布在像素阵列(一个维度)上,神经网络很难从图像中提取到物体。
三、学习(训练)过程
- 前馈。首先随机分配人工神经元的值(初始权重),通过神经网络来馈送每个图像,产生输出值。
- 误差测定。误差是真值标记与前馈过程所产生输出之间的偏差。
- 反向传播。通过神经网络反向发送误差,每个人工神经元都对其值进行微调,可生成更准确的网络。
- 重复数千个训练周期。最终使模型能够根据新数据做出准确预测。
四、卷积神经网络
卷积神经网络(CNN)是一种人工神经网络,可以维持输入像素之间的空间关系,对感知问题特别有效。CNN接收多维输入,通过过滤器连接滑过图像来收集信息,每次只对一小部分区域进行分析,这被称为“卷积”。当在整个输入图像上对一个过滤器进行“卷积”时,该信息将与下一个卷积层相关联,如下图所示。
如下图所示,CNN可以识别第一个卷积层中的边缘和颜色信息,然后在第一层上“卷积”新过滤器,CNN可使用边缘和色彩信息来归纳更复杂的结构(如车轮、车门和挡风玻璃),而另一个卷积可使用车轮、车门和挡风玻璃识别整个车辆,最后神经网络使用这一高阶信息对车辆进行分类。
感知的任务
一、检测与分类
在驾驶过程中会遇到静态障碍物(如墙壁、树木、杆子和建筑物等)和动态障碍物(如行人、自行车和汽车等)。无人驾驶车可能会探测到许多不同的物体,首先进行分类,汽车根据感知的物体类型来确定路径和速度, 决定是否减速和变道,如下图是追踪。
我们首先使用检测CNN来对图像中的对象进行定位,然后继续进行分类。通常在单个网络体系结构的末端附加几个不同的“头”,一个头可能执行检测,另一个头则可能执行分类,如下图所示。R-CNN及其变体Fast R-CNN和Faster R-CNN、YOLO和SSD是具有类似形式的不同体系结构。
二、跟踪
- 追踪可以解决遮挡问题。如果在运行检测算法时,目标对象被其他对象遮挡一部分,则检测算法可能会失败,追踪在检测失败时是至关重要的。
- 追踪可以保留身份。追踪的第一步为确认身份,查找特征相似度最高的对象。由于两个帧之间的对象位置和速度没有太大变化,我们将之前的帧中检测到的所有对象与在当前的帧中检测到的对象进行匹配。
三、语义分割
语义分割涉及对图像的每个像素进行分类,尽可能详细地了解环境,并确定车辆可驾驶区域。
语义分割依赖于FCN(全卷积网络),FCN用卷积层来代替了传统CNN体系结构末端的平坦层。为了能分割像素,我们对中间输出进行上采样处理,直到最终输出的大小与原始输出图像的大小相匹配。如下图所示,网络的前半部分为编码器,对输入图像的进行特征提取和编码;网络的后半部分为解码器,对特征进行解码,并将其应用于输出。
Apollo感知
- 在高精度地图中使用感兴趣区域(ROI)。Apollo将ROI过滤器应用于点云和图像数据,以缩小搜索范围并加快感知。
- 通过检测网络馈送已过滤的点云,输出用于构建围绕对象的三位边界框。
- 检测跟踪关联的算法来跨时间步识别单个对象,该算法先保留每个时间步要跟踪的对象列表,然后在下一个时间步中找到每个对象的最佳匹配。
Apollo使用YOLO网络来检测车道线和动态物体,在经过YOLO网络检测后,在线检测模块会并入来自其他传感器的数据,以获得每个对象的类型、位置、速度和前进方向,同时对车道线预测和动态对象进行调整。车道线最终被并入名为“虚拟车道”的单一数据结构中,虚拟车道和动态对象均被传递至规划与控制模块。
传感器感知
一、传感器优势比较
- 摄像头:非常适用于分类,Apollo中摄像头主要用于交通信号灯分类和车道线检测。
- 激光雷达:适用于障碍物检测,即使在夜间,激光雷达仍能准确地检测障碍物。
- 雷达:在探测范围和应对恶劣天气方面占优势。
二、传感器融合——卡尔曼滤波
通过融合摄像头、激光雷达和雷达的数据,可实现最佳聚合性能——提高感知性能,减少跟踪误差。
Apollo用于融合输出的主要算法为卡尔曼滤波,卡尔曼滤波是预测状态和更新测量结果这两个步骤的无限循环。更新步骤有同步和异步两种方法,同步融合同时更新来自不同传感器的测量结果,异步融合则逐个更新接收的传感器测量结果。