Apollo课程学习4——感知

学习前言

今天的学习内容是感知原理与方法。

感知的概述

一、什么是感知

感知的目的是寻找机器的特长并发挥出来,向人类学习并做得比人类更好。相对人类驾驶而言,无人车系统为机器做了很多的工作,把固定信息都嵌入到地图里面,在线识别只针对最小集进行处理,以保证系统的高效和鲁棒性。无人车感知的缺点强烈依赖高精地图


二、感知的任务

人类可以自动识别图像中的物体,甚至可以推断物体之间的关系,但是对于计算机而言,图像只是红色、绿色和蓝色值的集合。无人驾驶车的感知有四个核心任务

  • 检测。找出物体在环境中的位置。
  • 分类。指明对象。
  • 跟踪。随时间的推移观察移动物体。
  • 语义分割。将图像中的每个像素与语义类别进行匹配(如道路、汽车、天空等)。

1、检测与分类

在驾驶过程中会遇到静态障碍物(如墙壁、树木、杆子和建筑物等)和动态障碍物(如行人、自行车和汽车等)。无人驾驶车可能会探测到许多不同的物体,首先进行分类,汽车根据感知的物体类型来确定路径和速度, 决定是否减速和变道,如下图是追踪。

我们首先使用检测CNN对图像中的对象进行定位,然后继续进行分类。通常在单个网络体系结构的末端附加几个不同的“头”,一个头可能执行检测,另一个头则可能执行分类,如下图所示。R-CNN及其变体Fast R-CNN和Faster R-CNN、YOLO和SSD是具有类似形式的不同体系结构。

2、跟踪

  • 追踪可以解决遮挡问题。如果在运行检测算法时,目标对象被其他对象遮挡一部分,则检测算法可能会失败,追踪在检测失败时是至关重要的
  • 追踪可以保留身份。追踪的第一步为确认身份,查找特征相似度最高的对象。由于两个帧之间的对象位置和速度没有太大变化,我们将之前的帧中检测到的所有对象与在当前的帧中检测到的对象进行匹配

3、语义分割

语义分割涉及对图像的每个像素进行分类,尽可能详细地了解环境,并确定车辆可驾驶区域。

语义分割依赖于FCN(全卷积网络)FCN用卷积层来代替了传统CNN体系结构末端的平坦层。为了能分割像素,我们对中间输出进行上采样处理,直到最终输出的大小与原始输出图像的大小相匹配。如下图所示,网络的前半部分为编码器,对输入图像的进行特征提取和编码;网络的后半部分为解码器,对特征进行解码,并将其应用于输出。

三、图像分类器步骤

图像分类器是一种将图像作为输入,并输出识别该图像的标签的算法。

  • 计算机接收成像设备的输入,通常被捕捉为一系列图像。
  • 预处理。对每个图像进行标准化处理(如调整图像大小、方向、色彩空间等),预处理可帮助模型更快地处理和学习图像。
  • 提取特征。特征有助于计算机理解图像,如形状和车轮是汽车的显著特征。
  • 特征输入分类模型中,首先建立模型,再使用特征来选择图像类别。

传感器的选择和标定

一、传感器的选择

1、相机

  • 测距原理:相机是最像人的一个传感器。它是被动式的,接受自然可见光的反射最后成像,
  • 优点:可以稠密感知,比如说现在的1080p图像,可以感知所有细节。另外通过配置焦距,相机可以感知很远距离的物体,例如可以看到几百米外的物体。
  • 缺点:单目相机测距不准,无法做到激光雷达厘米级的测距精度。受光照影响很大,白天的算法在晚上使用,开路灯和不开路灯的对感知结果影响很大,所以对算法研发挑战很大。


2、激光雷达

  • 测距原理:激光头发射光束,打到障碍物上反射回来,到接收器接收到之反射信号的时间间隔乘以光速再除以二得到障碍物的距离,叫做TOF(Time of flight,飞行时间测距法)。
  • 优点:自带光源不受外界干扰,白天晚上都可以,而且测距准确度高(厘米级的精度)
  • 缺点:多线激光雷达扫描还比较稀疏,尤其是当障碍物距离比较远的时候。因此,激光雷达目前并不适合做识别任务。另外,激光雷达需要发射激光,功率限制其不能发射很远,发射太远反弹回来的信号就会很弱。目前,64线激光雷达的感知距离只有60~70米,对于高速行驶的无人车还不够。


3、毫米波雷达

  • 测距原理:毫米波雷达的原理和激光类似,只不过发射的是毫米波(电磁波)。由于它也是主动式感知设备,不太受天气、光照的影响。同时毫米波雷达还有多普勒频移效应可以测量与障碍物之间的相对速度
  • 优点测距、测速比较准
  • 缺点噪点很多,例如在空旷的地方反馈很多的回波,实际可能是路面的反馈信号而不是障碍物。其次它对于非金属的反射信号比较弱,召回比较低,例如在它面前走过行人有可能漏掉。最后毫米波雷达也是稀疏感知,无法做识别任务。



二、传感器的安装


三、传感器标定

在选好、安装完传感器之后,需要对传感器进行标定。标定的核心概念是得到传感器之间的相对位置,将不同传感器的数据在同一个坐标系中表示。



  • Cmaera-to-Camera外参标定
    • 假设在采集车前部安装双Camera,Camera1是60度广角短焦距相机,Camera2为30度广角长焦距相机,两者视角部分重叠。将车开到标定间,双Camera采集标定间的二维码,获得多个二维码对应四个角点的UV坐标,同时通过查找表得到对应点在3D世界坐标系(Rigel)中的坐标。求解采集点的PNP问题,得到相机相对于世界坐标系的位移矩阵Ts和Tl,将这两个相对位移矩阵相互传递,得到二者之间的相对位置。
    • 需要注意的是,标定完传感器之后需要进行验证。相机标定的验证方法为,将长焦相机的图像投影到广角相机图像中,看看重合度如何。如果出现重影或者连接不好,则需要重新标定。

  • Lidar-to-Camera外参标定
    • Camera看到的所有Tag角点与Rigel扫出的对应点的3D坐标进行匹配,求解PNP问题,得到Camera相对于Rigel世界坐标系的相对位置。
    • Lidar激光雷达扫描得到的点云与Rigel是稠密的点云之间进行ICP(Iterative Closest Point,迭代最近点)匹配,得到激光雷达相对于Rigel的位置。最后将两个位置矩阵相互传递得到Camera 和
      Lidar之间的相对位置。
    • 其标定结果验证方法是将激光雷达感知到的3D点云投影到Camera拍摄的图像上,看边界是否一致,如果不一致需要重新标定。

  • Lidar-to-Lidar外参标定
    • 将每一个Lidar 激光雷达扫描得到的点云与Rigel是稠密的点云之间进行ICP(Iterative Closest Point,迭代最近点)匹配,分别得到激光雷达相对于Rigel的位置。最后将两个位置矩阵相互传递得到Lidar和Lidar之间的相对位置。
    • 验证方法为:将两个激光雷达采集到的点云都投到真实物理世界中,看点云是否模糊、是否锐利。如果比较模糊,则需要重新标定。
  • Lidar内参标定
    • 借助Rigel,在开阔平坦的场景下进行完整扫描,得到场景的点云。然后,将要标定的激光雷达对同一个场地进行同样的扫描。之后对两次扫描的点云进行匹配,如果激光雷达的内参不准确,会出现远距离地面点浮在空中的现象。
  • Lidar-to-GPS外参标定
    • 将车辆在空旷地区绕八字行驶多次,记录多个时间点GPS给出的车辆位置信息(相对于GPS为原点的世界坐标系),将Lidar捕捉的多帧点云投影到世界坐标系中,并进行拼接,求解优化获得外参。
  • 自然场景的Lidar-to-Camera外参标定
    • 由于没有了Rigel-Tag,需要在标定的场景中寻找具有明显边缘的物体作为参照物,将该参照物的点云边缘和Camera拍摄图像的边缘对齐作为参数标定效果的考量指标,如果对齐,这表示标定结果良好。
  • 自然场景的Bifocal Camera外参标定
    • 过程类似于Camera-to-Camera外参标定,但是需要在自然场景中找到边缘锐利的物体作为参照物
  • Camera-to-Radar外参标定
    • Camera-to-Radar外参标定的重点是得到Radar相对于Camera的Pitch角的上下倾斜问题。通常情况下Radar是水平安装的,问题就转换为求得Camera相对于地面的Pitch角。由于Camera-to-Lidar已经标定好,可以通过Lidar采集到的平面信息解决倾角问题。

四、传感器融合

通过融合摄像头、激光雷达和雷达的数据,可实现最佳聚合性能——提高感知性能,减少跟踪误差。

Apollo用于融合输出的主要算法为卡尔曼滤波,卡尔曼滤波是预测状态更新测量结果这两个步骤的无限循环。更新步骤有同步和异步两种方法,同步融合同时更新来自不同传感器的测量结果,异步融合逐个更新接收的传感器测量结果。



未来自动驾驶传感器离不开多传感器的融合。激光雷达和摄像头都属于光学类的传感器,它们核心零部件和处理电路很相似,未来有可能将激光雷达和摄像头前端融合到一起,直接输出RGB、 XYZ融合后的颜色加点云信息,然后传输到后端的计算来进行处理。

美国创业公司Aeye开发的iRADAR系统,它不仅能真实的体现出二维世界的彩色信息,而且能将点云的信息叠加,每个像素点不仅有颜色信息还有空间坐标信息。

感知算法

一、点云感知

点云障碍物感知的主要任务是感知障碍物的位置、大小、类别、朝向、轨迹、速度等。核心是点云检测分割技术,可以用启发式算法NCut和深度学习算法CNNSeg完成。

1、启发式方法:NCut


2、深度学习方法:CNNSeg

主要思想是利用卷积神经网络来处理激光雷达捕获的点云数据,并对点云中的目标进行识别。深度学习是数据驱动的,它把人工构造特征这一任务交给机器和算法去完成(即特征学习)。

  • 将所有点云都投到前视图(front-view)(投影面是一个圆柱面)来构造特征将点云问题转化为矩阵问题,进而使用深度学习进行处理。通过构建全卷积神经网络对前向视图进行处理。
  • 借助自采集车队,采集更多的实际数据,并且扩展数据视角,制作俯视图,通过将俯视图+前视图相结合的方式进行训练。同时,修改Loss函数,包括使用3D回归和Segmentation的损失函数。经过多次实验,发现基于俯视图的Segmentation方法效果最好。该方法目前已经在Apollo中开源,如下所示。

  • 因为俯视图没有高度信息,因此我们把前视图和Camara图像加进来进行辅助检查,利用Lidar的测距准和Camera识别准优势完成了Middle-Level Fusion方法(Multi-View 3D Object Detection Network for Autonomous Driving),发表在CVPR 2017。该方法使用俯视图提取Proposal,利用前视图和光学图像辅助进行更加精准的位置回归,其流程如下图所示。

二、视觉感知

2.1 CNN检测

需要注意的是,目前发表的大部分关于CNN检测的成果都是面向计算机视觉应用的,与自动驾驶领域的检测还有很大的区别。

2.2 CNN分割

分割(Segmentation)与detection在本质上是一样的,是对一个目标的不同力度的刻画。分割是一种更细粒度刻画物体边界信息的检测方法,不再是画框,而是进行边缘分割

  • 场景分割可以用于多传感器融合,例如对绿植进行分割,结合LiDAR点云,就可以测出绿植的类别和距离。
  • 可行驶区域感知则可以对一些非结构化道路的路径规划提供支持。

2.3 后处理

一个完整的系统除了深度学习模型,还需要做一些后处理,后处理是直接针对下游模块,对后续的影响比较直接。在视觉感知中,后处理主要分为三个部分。

三、红绿灯感知

红绿灯感知是百度无人车第一个使用深度学习、使用Camera的模块。


实际使用过程中可能会更复杂,如下图所示。一条道路上有很多红绿灯,检测算法会把所有的灯都检测出来,地图会告知需要看几个灯,但是并不知道看哪几个灯

因此需要把对应关系匹配起来,需要做3D到2D的投影,投影又受到标定、定位、同步、地图等因素的影响,需要综合考虑才能解决好这个问题。


下图右边是Radar的点云信号投影的成像。图中有很多的点,但是并不是所有的点都是障碍物,存在很大的噪音,需要进行鉴别。图中明显成一条线的点是对路边界金属栅栏的感知结果。因为金属的反射信号比较好,所以雷达点会成直线分布。基于该特征,可以用Radar反射信号来做高速路道路边缘栅栏的检测


超声波只能进行近距离感知,并且无法感知具体的位置。对无人驾驶来说,行驶过程中帮助并不大,更多的是用于倒车和特别近距离的感知。

下图是超声波感知的一个例子,车上布了12个超声波传感器,每个超声波探头覆盖一个角度,大概检测到三米范围内的障碍物。当某个地方有障碍物,传感器发送超声波,收到回波信号以后可以得到障碍物的距离信息,但是并不能确定在覆盖范围内哪个地方有障碍物,如图中的绿线。如果两个探头感知范围存在over lap,这两个传感器的两根绿线会交接,就可以确定障碍物的准确位置

四、机器学习

  • 监督式学习。使用人类创造的数据和相关的真值标记来进行模型训练。
  • 无监督学习。不提供真值标记,计算机自行学习分析输入的数据并找到区别。
  • “半监督式”学习。使用少量的标记数据和大量的未标记数据来训练模型,结合了监督学习和无监督学习的特点。
  • 强化学习。计算机将尝试许多不同的解决方案,然后衡量哪种方法最成功。如果汽车实际完成了预想的操作,智能体就会提高奖励(得分)。如下图所示,起初汽车可能无法找到执行右转的方法,但是汽车最终会学习一些成功的右转经验,并成功学会右转。


五、神经网络

1、神经网络简介

神经网络是可训练的多层结构,神经网络的中间层从输入提取高级特征,并使用这些特征来计算得到输出,

  • 标准神经网络
    首先将图像矩阵重塑为一个矢量,并在一个大行中连续所有列,将图像“展开”为一维像素阵列,即可将图像连接到网络的第一层。但是这种方法打破了图像中所嵌入的空间信息,如果图像中所有像素散布在像素阵列(一个维度)上,神经网络很难从图像中提取到物体

2、学习(训练)——后向传播

  • 前馈。首先随机分配人工神经元的值(初始权重),通过神经网络来馈送每个图像,产生输出值。
  • 误差测定。计算机比较输出与真值之间的误差。
  • 反向传播。误差通过神经网络反向传回到整个网络,中间的隐藏层根据观察到的这种差别调整其中的中间值(权重),这样可以在未来提高神经网络的准确率。
  • 重复数千个训练周期。最终使模型能够根据新数据做出准确预测

3、卷积神经网络(CNN)

卷积神经网络(CNN)是一种人工神经网络,可以维持输入像素之间的空间关系,对感知问题特别有效。CNN接收多维输入,通过过滤器连接滑过图像来收集信息,每次只对一小部分区域进行分析,这被称为“卷积”。当在整个输入图像上对一个过滤器进行“卷积”时,该信息将与下一个卷积层相关联,如下图所示。


如下图所示,CNN可以识别第一个卷积层中的边缘和颜色信息,然后在第一层上“卷积”新过滤器,CNN可使用边缘和色彩信息来归纳更复杂的结构(如车轮、车门和挡风玻璃),而另一个卷积可使用车轮、车门和挡风玻璃识别整个车辆,最后神经网络使用这一高阶信息对车辆进行分类

Apollo感知

  • 在高精度地图中使用感兴趣区域(ROI)。Apollo将ROI过滤器应用于点云和图像数据,以缩小搜索范围并加快感知。
  • 通过检测网络馈送已过滤的点云,输出用于构建围绕对象的三位边界框

  • 检测跟踪关联的算法跨时间步识别单个对象,该算法先保留每个时间步要跟踪的对象列表,然后在下一个时间步中找到每个对象的最佳匹配


Apollo使用YOLO网络来检测车道线和动态物体,在经过YOLO网络检测后,在线检测模块会并入来自其他传感器的数据,以获得每个对象的类型、位置、速度和前进方向,同时对车道线预测和动态对象进行调整车道线最终被并入名为“虚拟车道”的单一数据结构中,虚拟车道和动态对象均被传递至规划与控制模块。

感知的未来

  • 5
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了学习Apollo的代码,你可以按照以下步骤进行: 1. 下载Apollo源码并导入到开发工具中。你可以从Apollo的GitHub或者Gitee仓库中获取源码。 2. 学习Apollo的核心概念和工作原理。了解各个模块的职责以及分步执行流程。 3. 阅读Apollo的文档和代码注释。文档中提供了详细的使用说明和示例代码,代码注释可以帮助你理解代码的功能和实现细节。 4. 运行Apollo的示例代码。Apollo提供了一些示例代码,可以帮助你更好地理解如何使用Apollo来实现配置中心功能。 5. 自己编写测试代码。根据自己的需求和学习进度,可以编写一些测试代码来验证和深入理解Apollo的功能。 6. 练习修改配置和热发布。通过修改配置文件并观察变化,可以更好地理解Apollo的配置管理功能和热发布机制。 请注意,学习Apollo的代码需要一定的Java和Spring框架的基础知识。如果你对这些领域不熟悉,建议先学习Java和Spring相关的知识再进行深入的学习。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Apollo学习(超详细)](https://blog.csdn.net/hyzsuccess/article/details/127867287)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值