无人驾驶感知就是汽车通过传感器或者摄像头等识别周边的环境。计算机视觉就是计算机感知识别周边环境的手段。
计算机视觉
无人驾驶有四个感知世界的核心任务
检测:是找出物体在环境中的位置
分类:是指明对象是什么
跟踪:是指随时间的推移观察移动物体
语义分割:将图像中的每个像素与语义类别进行匹配。如道路,汽车和天空
资源推荐
计算机视觉简介
分类
图像分类器:是一种将图像作为输入,并输出该图像的标签或“类别”的算法。
例如:交通标志分类器查看停车标志并识别它是停车标志,限速标志,让路标志,还是其他类型标志。分类器甚至可以识别行为,比如一个人是在走路还是在跑步。
分类器有很多种,但他们都包含类似的步骤:
首先,计算机接收类似摄像头这样的成像设备的输入,这通常被捕获为图像或一系列图像
然后,通过预处理发送每个图像,预处理对每个图片进行了标准化处理,常见的预处理步骤包括
调整图像大小或者旋转图像
将图像从一个色彩空间换到另一个色彩空间,如从全彩到灰度
预处理可以帮助我们的模型更快地处理和学习图像。
提取特征,特征有助于计算机理解图片,例如:将自行车和汽车区分开来的一些特征
这些特征最后被输入到分类模型中,此步骤用特征来选择图像类别。
摄像头图像
摄像头图像是最常见的计算机视觉数据,从计算机的角度来看,图像就是一张二维网格,也被称为矩阵,矩阵中的每个单元格都包含一个数字,数字图像全由像素组成,其中包括非常小的颜色和强度单位,图像中的每个像素都只是一个数值,这些数值构成了我们的图像矩阵,甚至可以改变这些像素值,我们可以通过为每一个像素值添加一个标量整数来改变图片的亮度,向右移动每个像素,也可以执行其它的许多操作。数字网格是许多图像处理技术的基础,多数颜色和形状转换都是通过对图像进行了数学运算以及逐一像素进行更改完成的。
彩色图像组成
彩色图像被构建为值的三维立方, 每个立方体都有长度,宽度,高度。深度为颜色通道数量,大多数图像由三种颜色组成表示,分别为红色,绿色,蓝色,这些图像被称为RGB图像,对于RGB图像深度为3,可以将其看成一个盒子,三个颜色通道看成三层。三层叠加形成了一张彩色图片。LIDAR图像
感知扩展到传感器,而不仅是摄像头,激光雷达传感器创建环境的点云表征,提供了难以通过摄像头获得的信息,通过对点云信息的聚类和分析,这些数据提供里足够的对象检测,跟踪和分类信息,如距离和高度,物体形状和纹理等。
激光雷达采用光线,尤其是采用激光来测量与环境中反射该光线的物体的距离,将每个激光脉冲反射回传感器所花费的时间,反射所需的时间越长,说明物体离传感器越远,激光雷达正是通过这种方式来构建世界的视觉表征。如下图检测和聚类的结果:红点代表行人,绿点代表其它车辆。
机器学习
机器学习是使用特殊的算法来训练计算机从数据中学习的计算机科学领域,通常,这种学习结果被存放在一个叫‘模型’的数据结构中,有很多中“模型”,事实上“模型”就是一种可以用于理解和预测世界的数据结构。
应用领域:
(1)金融领域正用机器学习来对汇率和证券交易进行预测
(2)零售业用机器学习来预测需求
(3)医生甚至运用机器学习来辅助诊断
机器学习涉及使用数据和相关的真值标记来进行模型训练
监督学习:可能显示车辆和行人计算机的图像,以及告诉计算机哪个是哪个的标签,我们要让计算机学习如何最好地区分两类图像,这类学习也被成为监督式学习。
无监督学习:没有真值标记的行人和车辆图片,让计算机自行决定,哪些图片相似,哪些图片不同。在这里我们不用提供真值标记,通过分析输入数据,在这种情况下为计算机图像,计算机凭借自己学习来区别。
半监督学习:将监督学习和无监督学习的特点结合在一起,使用少量的标记数据和大量的为标记数据来训练模型。
强化学习:强化学习涉及允许模型通过尝试许多不同的方法来解决问题,然后衡量哪种方法最为成功,计算机将尝试许多种不同的解决方案,最终使其方法与环境相适应。例如:在模拟器中,强化学习智能体可以训练汽车进行右转,智能体将在初始位置启动车辆,然后进行实验性驾驶,以多种方向和速度,如果汽车实际完成了右转,智能体会提高奖励,即得分,这是针对导致成功结果的初始化操作。最初可能车辆会出现走错的结果,多学习几次之后,汽车就不会再错了。
推荐资源
深度学习
机器学习
神经网络
人工神经网络由多个神经元组成,这些神经元负责传递和处理信息,也可以对这些神经元进行训练,将大量的图片送入神经网络中,进行对特征的提取识别分类训练,最终计算机就能识别图像并且分类。
神经网络从输入中提取高级特征,并使用这些特征来计算得到输出
推荐资源
请点击以下链接,探索更多关于简单的神经网络:
最简单的神经网络
反向传播算法
学习方法也被称为训练,一般由三部循环组成:
前馈
误差测定
反向传播
通过前馈来输出每张图片的值,误差是输出值与输入值的差距,将误差通过与前馈相反的方向传回从而更新权重,达到误差最小化的过程叫反向传播。通过这样多次循环,得出误差最小的结果。前馈一般采用梯度下降来实现,想更多了解点击下面链接。
- 梯度下降
用梯度下降,我们通过多个小步骤来实现目标。我们希望一步一步改变权重来减小误差。误差就像是山,我们希望走到山下。下山最快的路应该是最陡峭的那个方向,因此我们也应该寻找能够使误差最小化的方向。我们可以通过计算误差平方的梯度来找到这个方向。
梯度是改变率或者斜度的另一个称呼。如果你需要回顾这个概念,可以看下可汗学院对这个问题的讲解。
- 反向传播
如何让多层神经网络学习呢?首先了解如何使用梯度下降来更新权重,反向传播算法则是它的一个延伸。以一个两层神经网络为例,可以使用链式法则计算输入层-隐藏层间权重的误差。
要使用梯度下降法更新隐藏层的权重,需要知道各隐藏层节点的误差对最终输出的影响。每层的输出是由两层间的权重决定的,两层之间产生的误差,按权重缩放后在网络中向前传播。既然我们知道输出误差,便可以用权重来反向传播到隐藏层。
- 反向传播练习
- 应做事项
计算网络输出误差
计算输出层误差项
用反向传播计算隐藏层误差项
-
计算反向传播误差的权重更新步长
import numpy as np def sigmoid(x): """ Calculate sigmoid """ return 1 / (1 + np.exp(-x)) x = np.array([0.5, 0.1, -0.2]) target = 0.6 learnrate = 0.5 weights_input_hidden = np.array([[0.5, -0.6], [0.1, -0.2], [0.1, 0.7]]) weights_hidden_output = np.array([0.1, -0.3]) ## Forward pass hidden_layer_input = np.dot(x, weights_input_hidden) hidden_layer_output = sigmoid(hidden_layer_input) output_layer_in = np.dot(hidden_layer_output, weights_hidden_output) output = sigmoid(output_layer_in) ## Backwards pass ## TODO: Calculate output error error = target - output # TODO: Calculate error term for output layer
推荐资源
请点击以下链接,探索更多关于 CNN :
梯度下降详
实现梯度下降点击
反向传播详细点击
卷积神经网络CNN
卷积神经网络(CNN)是一种人工神经网络,对感知问题特别有效,CNN接受多维度输入,包括大多数传感器数据的二维和三维形状。
标准神经网络:将图像矩阵重塑为一个矢量,并在一大行中链接所有列,将图像“展开”为一维像素阵列。这种方法打破了图像中的空间信息
CNN可以维持图像输入的的空间信息,CNN通过过滤器连续滑过图像来收集信息,每次收集信息只对图片的一小部分区域进行分析,这被称为卷积。
例如:CNN可以识别第一个卷积层的基本边缘和颜色信息,然后通过在第一层上卷积新过滤器,CNN可以使用边缘和颜色信息来归纳更复杂的结构,如车轮,车门和挡风玻璃,而另一个卷积可以使用车轮和车门,挡风玻璃来识别整个车,最后神经网络可以使用这一高阶信息对车辆进行分类。
推荐资源
请点击以下链接,探索更多关于 CNN :
卷积神经网络CNN简介
Tensorflow卷积层
检测和分类
在感知任务中,首先想到的是障碍物的检测和分类,动态的障碍物,如行走的人,车,自行车等;静态的障碍物,如树木,停好的车,自行车,建筑物等;计算机首先需要知道障碍物的位置,然后进行分类,无人驾驶车载途中会探测到许多不同物体,汽车根据检测到的物体类型来确定路径和速度。
无人车是靠什么进行检测和分类?
使用检测CNN来来查找图像中的对象位置,在对图像中的对象进行定位后,我们可以将图像发给另一个CNN进行分类。也可以用一个单一的CNN结构体系对对象进行检测和分类,在单个网络体系的末端加几个不同的“头”,一个头执行检测,一个头执行分类。一个经典结构为R-CNN及其变体Fast R-CNN和 Faster R-CNN。
推荐资源
请点击以下链接,探索更多关于检测与分类的高级 CNN 结构:
R-CNN
Fast R-CNN
Faster-RCNN
YOLO
SSD
如果你感兴趣,欢迎点击 这里 获取更多 Apollo 感知相关资源。
跟踪
在检测完对象之后我们需要追踪。
追踪的意义:对每个帧中的对象进行检测并用边界框对每个对象进行标记。
跨帧追踪的好处:
(1)追踪在检测失败时是至关重要的,如果在运用检测算法时,对象被其他对象遮挡一部分,则检测算法可能会失败,追踪可以解决这一问题。
(2)追中可以保留身份,障碍物检测的输出为包含对象的边界框,但是对象没有与任何身份关联,单独使用对象检测时,计算机不知道一帧中的哪些对象与下一帧的哪些对象相对应。
追踪步骤:
确认身份:通过查找对象相特征似度最高的对象,将在之前一帧中检测的所有对象与之前一帧中检测到的对象进行匹配,对象具有很多特征,一些特征可能基于颜色,一些特征可能基于形状,计算机视觉算法可以计算出复杂的图像特征。
快速找到匹配的对象:还要考虑连续视频帧中的。两个障碍物之间的位置和速度。由于两帧之间的对象位置和速度没有太大变化,该信息可以帮助快速找到匹配的对象。
推荐资源
如果你想了解更多关于图像特征的信息,请点击链接 LBP 与 HOG。
分割
语义分割涉及对图像的每个像素进行分类,用于尽可能详细的了解环境,并确定车辆可行驶区域。
语义分割依赖于一种特殊的CNN,全卷积神经网络(或CFN) ,FCN用卷积层来替代传统CNN的末端平坦层,使得网络中的每一层都是卷积层。故名为全卷积网络。
CFN提供了可在原始输入图像之上叠加的逐像素输出,复杂因素是大小,传统CNN输出的图片大小比输入小得多,为了进行语义分割,我们必须得到与输入同样大小的输出。
编码和解码,下面图片前部分叫编码,后部分叫解码,经过这样的处理使得输入尺寸与输出尺寸相等。
推荐资源
自编码简介
这是一篇关于 FCN 的论文。
Apollo感知
Apollo软件栈可感知障碍物,交通信号灯和车道
- 对三维对象检测
Apollo在高精度地图上使用感兴趣区域(ROI)来重点关注相关对象,Apollo将ROI过滤器用于点云和图像数据以缩小搜素范围并加快感知。
然后,通过检测网络馈送已过滤的点云,输出用于构建围绕对象三维边界框 。
最后,使用被称为检测跟踪关联的算法来跨时间步识别单个对象,该算法先保留在每个时间步要跟踪的对象列表,然后在下一个时间步中找到每一个对象的最佳匹配。
- 对于交通信号灯的分类
Apollo先利用高精度地图来确认前方是否有交通信号灯,如果前方有交通信号灯,高精度地图就会返回信号灯的位置,这侧重于摄像头搜索范围,在摄像头捕捉到交通信号灯的图像后,Apollo使用检测网络对图像中的灯进行定位,然后Apollo从较大图像中提取交通灯信号,Apollo将裁剪的交通灯图像提供给分类网络, 以确定灯的颜色,如果有学多灯,系统需要选择哪些灯与其车道有关。
- YOLO网络
Apollo使用YOLO网络来检测车道线和动态物体,其中包括车辆,卡车,骑自行车的人和行人,在经过YOLO网络检测后,在线检测模块会并入来自其它传感器的数据,对车道线进行调整,车道线最终被并入名为“虚拟车道”的单一数据结构中,同样,也通过其它传感器的数据,对YOLO检测到的动态对象进行调整,以获得每个对象的类型,位置,速度,和前进方向。虚拟通道和动态对象都被传到规划和控制模块。
传感器数据比较
雷达与激光雷达
雷达已经在汽车上使用很多年,在各种系统中都需要雷达,如自适应巡航控制、盲点警告、碰撞浸膏和碰撞预防系统等。尽管雷达技术已经成熟,它仍在不断进步,作用不断提升。其他传感器测量速度的方法是计算两次读数之间的差距,而雷达则通过多普勒效应来直接测量速度。多普勒效应根据对象在远离还是接近你,测量出雷达的频率变化。就像消防车警报器一样,当车辆正在远离你和驶向你时,听起来声是不一样的。多普勒效应对传感器融合至关重要。因为它可以把速度作为独立的测量参数,从而提升了融合算法的收敛速度。雷达还可以生成环境的雷达地图,进而实现定位。因为雷达波在坚硬表面会回弹。因此,它可以直接测量对象距离,无需在视线范围内也可以。雷达可以看到其他车辆底部。并发现可能会被阻挡的建筑物和对象。在车上的所有传感器中,雷达是至不容易受雨雾影响的。而且视野宽阔,可达 150 度,距离可达200 多米。与激光雷达和摄像头相比,雷达分辨率较低,尤其是在垂直方向,分辨率非常有限。分辨率低意味着来自静态物体的反射可能产生问题。例如,街道上检修孔盖或汽水罐,可能产生很高的雷达反射率,但他们并不大。我们将其称为雷达杂波。因此,当前的车载雷达通常会忽视静态物体。
激光雷达是激光探测与测量的简称,而雷达则谁无线电探测与测量的简称。雷达使用无线电波,而激光雷达则使用红激光束来确定传感器和附近对象的距离。目前的激光雷达大多使用 900 纳米光波长度的光源。但部分激光雷达使用的光波长度更长,在雨雾中性能更好。当前的激光雷达使用旋转座架发射激光,扫描周边环境。激光室脉冲式的,脉冲被对象反射,然后返回一个点云,来代表这些物体。激光雷达的空间分辨率远远高于雷达。因为激光束越聚焦,垂直方向的扫描层数量就越多,因此每层的激光雷达的密度也越高。目前,激光雷达还不能直接测量对象的速度,必须使用两次或多次扫描之间的位置差来确定。激光雷达受天气和传感器清洁程度影响也很大,因此需要保持清洁。它们块头也比其他传感器更大,因此也很难安装,除非你只想在车顶安装一个大的激光扫描器。
感知融合策略
Apollo采用雷达和激光雷达来检测障碍物,用于融合输出的算法为卡尔曼滤波,卡尔曼滤波有两步。卡尔曼算法时预测更新步骤的无限循环。
第一步预测状态
第二部为更新测量结果
两种测量结果更新步骤
- 同步更新:同步融合同时更新来自不同传感器的测量结果
- 异步更新:异步融合则逐个更新所收到的传感器测量结果
传感器融合可提高感知性能,因为各传感器相辅相成,融合也可以减少跟踪误差。