谈谈自动驾驶必须解决的感知问题
对于研究下一代智能汽车的系统设计、软件开发而言,需要解决包含架构设计、功能开发、车辆控制等方面的诸多问题,而以上问题的根源都在于环境感知的能力研究。除开感知本身的硬件性能外,其软件中的算法模型、训练神经网络、感知数据处理容量等都是需要重点解决的问题。
附赠自动驾驶最全的学习资料和量产经验:链接
当前,感知能力的开发主要包含如下过程:相机输入–>图像的预处理–>神经网络–>构建分支处理结构–>后处理–>输出结果。其中构建分支结构包括红绿灯识别、车道线识别、2D物体识别转3D等;最终输出的结果包括输出物体类型、距离、速度代表被检测物的朝向等;
当前,所有感知问题的关键仍然是神经网络算法,对于域控制器处理过程能力来说,其需要重点考虑计算精度、实时性、算力利用率等,这是确保物体不被漏检或误检的前提。其中由于感知硬件设备中输入的超大分辨率图像问题,涉及单目或多目摄像头对感知输入的处理问题都是需要重点关注的。此类感知任务的难点或者优化方向核心主要在于如下几个方向:
① 如何处理高分辨的输入
② 如何提高密集小目标检测
③ 如何解决类多目标重叠问题
④ 如何利用少量的训练数据解决目标多样性问题
⑤ 如何利用单目摄像头进行目标位置的精确估计
感知中的相机数据标定
单目测距是通过光学几何模型(即小孔成像模型)建立测试对象世界坐标与图像像素坐标间的几何关系,结合摄像头内、外参的标定结果,便可以得到与前方车辆或障碍物间的距离。无论是单目摄像头还是双目摄像头,在进行数据检测前都要进行相机内外参数标定,标定的过程是为了通过如下公式计算世界坐标到图像坐标的转化。
相机内参标定用于做图像的畸变校正,外参标定用于将多个摄像头进行坐标系归一化,将各自的坐标原点移动到车辆后轴中心处。fx、fy表示相机焦距,x、y表示目标的图像坐标系位置。从上述公式不难看出,相机参数的标定结果严重影响对世界坐标系图像位置的检测。
在实际相机搭载到车辆过程中,会有两种标定方式,其一是产线标定,其二是实时标定。产线标定是利用标定板中的格点信息进行摄像头的位置标定。一般情况,可采用张正友经典棋盘格模型进行角点位置标定,也可以采用圆点板图进行在线标定。另外考虑到车辆运行一段时间或者在颠簸的过程中摄像头位置的偏移,摄像头也会同时设定在线实时标定模型,通过实际驾驶过程中,利用车道线消失点或车道线等检测结果信息实时更新俯仰角的变化,从而优化标定参数。
超大分辨率图像目标的有效检测
为了实现对大尺寸图像目标检测,我们常用的方法是设置遍历窗口,对该超大分辨率的图像使用该平滑窗口进行遍历后裁剪成多个子图,然后分别对每一个子图进行目标提取,最后将所有子图的目标提取结果进行拼接后进行平滑滤波。
以当前算力的芯片架构设计的域控制器对超大分辨率图像的处理逻辑是采用一定的手段进行图像resize。或者是基于一定的准则(如NXN的子图网络)进行图像下采样,降低图像分辨率。然而这两种方式都有可能造成目标漏检。
这里需要解决两个比较重要的问题:
1) 如何设置遍历窗口大小;
一般采用固定尺寸大小的遍历子图窗口中,可能无法刚好将总图遍历后形成整数个子图,这时在很多的窗口边缘就会通过图像泛化或膨胀来扩充。我们在数据集上训练网络的时候,通常需要把数据集变换到同一尺寸,但是通常的resize函数会破环图像的纵横比aspect ratio,而aspect ratio对于检测的效果非常重要, 为了更好的保留图像特征,需要对最边缘的子图采用letterbox的方式缩放到和遍历子窗口相同的大小。letterbox就是在保持纵横比的前提下对图像做resize,先resize然后按需要在周围pad上0像素。
2) 假设切割目标位于大图边缘,将如何确保其不被截断;
需要说明的是,如果一个目标刚好处于窗口边缘,本身目标所占像素就少又被截断,这时候也就容易在滑窗检测过程中被切分成开,最终会造成其更加难以检测。因此在滑窗裁剪的时候必须有一定的重叠区域,原因是如果一个目标刚好处于窗口边缘被切分成2块,其重复部分会导致多个检测框图像都会重复出现同一个目标的问题,解决的办法就是通过将所有子图的检测结果合并起来采用非极大值抑制方式进行过滤。
在目标检测过程中,可利用自动驾驶检测图像都具有旋转不变性的特征,通过数据增广的方式旋转图片生成更多形状的物体从而缓解问题。
同时,为了尽可能多的保留原始图像信息,一般需要将原始图像进行扩大两倍采样,即升采样,从而生成一组采样图。而为了保证后续图像处理过程的针对性、实时性,则需要在高斯模糊后进行降采样,即很多时候为了提升运算效率,往往采用大倍数的下采样率进行下采样(如32倍下采样率)在降采样过程中需要注意的是,避免过度降采样,因为过度采样可能导致大分辨率下的小目标被直接过滤掉,好的方法是减少采样倍数,同时增加采样网络层数,这样可以有效增加特征提取能力。
此外,在图像中的目标检测任务中,都可能存在前后背景的不平衡的情况,而不同类别之间数据量可能存在较大不同,首先可以采取数据上采样和下采样的方式来均衡不同数据量大小;其次是采用数据增广的手段来增加前景目标在一张图像中的占比;最后是通过设计代价函数调整不同目标的检测权重从而控制其检测优化等级。
3) 如何确保小目标物体不会漏检
大分辨率图像中,小目标物体检测一直是个难点。一般处理方式是采用图像金字塔进行多尺度训练,一般的,特征金字塔包含了从浅层到深层的不同信息,其中浅层涉及更多的细节特征,深层网络涉及更多的语义特征信息。通过对原始大图进行一定程度的下采样后生成多个不同低分辨率的图像金字塔,再对每层金字塔的浅层至深层采用不同分辨率的子图分类器滑动可以有效的检测到目标。
单目视觉深度信息估计的优化方案
当前辅助驾驶或自动驾驶系统通常采用单目视觉来实现目标深度估计。单目测距方式主要是通过帧间图像匹配来实现目标识别,然后通过目标在图像中的大小来估计目标距离。单目测距需要将多个3D场景投影到2D场景中,而从单幅图像中提取几何位置坐标不仅需要考虑局部线索,还需要考虑整个视频帧的全局上下文。这一过程中需要使用到卷积神经网络思想,其核心在于感受野内的局部连接、卷积状态下的权值共享、池化层空间或时间上的下采样。卷积神经网络在信息检测中最大的优势在于具有强大的特征提取能力使其对局部细节的检测能力较强,相反的其对全局目标信息的检测能力也就相对较弱。
单目视觉估计仅仅是通过光学几何模型(即小孔成像模型)建立测试对象世界坐标与图像像素坐标间的几何关系,结合摄像头内、外参的标定结果,计算得到与前方车辆或障碍物间的距离。单目视觉估计的优势是成本较低,系统结构简单,且对计算量的需求不高。缺点是识别过程中需要与庞大的数据样本进行匹配,不仅测距延时性大,准确率也不高。这点上相对于双目摄像头直接利用视差图进行测距的原理存在很大的不足。
而为了弥补这种全局检测能力缺陷,2017年提出采用了Transformer的检测机制,其核心思想是注意力机制,其自带的长距检测特性确保了由浅到深层的检测范围,更好的提升全局建模能力。因此将CNN及Transformer的图像检测追踪方式进行结合,可以更好的提升车载目标跟踪能力。基本的框图架构如下图:
如上图,首先对输入的三维图像信息进行编码与解码,解码后的特征代表高分辨率和局部像素级特征。解码后的图像使用全局注意力来计算每个输入图像的单元宽度向量。该向量输出包括两部分:其一是定义如何为深度图像划分深度区间;其二是包含了对像素级深度计算有用的信息。
对于来自Transformer的输出通过作一组二维卷积核,并与解码特征图进行卷积以获得范围注意图 R。其次,通过对输入的一定大小(h,w)的单元向量进行卷积(卷积核pxp,卷积步长为s)计算,卷积输出结果为h/p×w/p×s的张量。最后归一化后可生成单位宽度向量用于对图像进行间距宽度b计算。
最终深度图信息=全局信息R+局部信息b。
如上单目深度学习特征提取方法具有较好的特征提取能力,即使采用了最好的特征提取算子,也不能cover住所有的场景动态物体特征,如轿车容易误检为卡车。在工程开发中,可以依据现实场景增加一些几何约束条件提高检测率,降低误检率,(如尺寸信息,空间位置信息,运动连贯性信息等),这样可以训练一个3D检测模型再配合后端多目标追踪优化以及基于单目视觉几何的测距方法完成功能检测模块。
道路场景信息检测的精确性问题
1、可行驶区域检测分析改进方案
典型的视觉检测问题可归结为几个大类,前述章节提到了小目标检测问题,对于下一代自动驾驶系统来说必须要解决的问题还包括可行驶区域检测,这种检测方式包括对车辆、路沿、无障碍物的区域进行划分,最后输出自车可以通行的安全区域。
可行驶区域探测(光线充足VS夜晚)
可行驶区域的检测实际上是一种深度学习中的语义分割的问题。深度学习中常用到的空洞卷积、池化金字塔、路径聚合、环境编码等都可以在其中得到很好地应用。但是可行驶区域的检测仍然存在较多的问题:
其一,也是最重要的就是在检测的静态边界或动态障碍物边界仍旧存在一些不确定性,这种不确定性导致无法对车辆的行驶状态进行有效的轨迹规划和状态决策。为了解决这类问题,可以通过配合路沿、车道线、目标框的结果来修正语义的边缘信息,并从矢量包络或栅格图中定义可行驶区域。
其二,就是可行驶区域的检测容易出现数据不平衡,且这种不平衡问题往往出在训练阶段,这一过程需要定义合理的损失函数和数据上采样率来进行优化。
其三,可行驶区域探测可能由于光照、粉尘、大雪大雾等因素,需要充分结合视觉与雷达进行障碍物探测,以确保其检测稳定性。
2、车道线检测问题改进方案
在自动驾驶视觉感知中,车道线作为横向对中控制基础,其检测过程是一个最基本的需求项。已有众多的车道线检测算法被人们所开发出来,而最重要的检测难点包括:
其一,车道线具有细长的形态特征,这种形态要求追踪具备连续性,甚至包含一定的图像拼接技术。相应的检测手段需要参照不同的层次划分机制来获取全局空间结构关系,对于细节处的定位精度也可采用角点检测的方式进行。
其二,车道线的形态容易受到外界干扰(比如被遮挡,磨损,以及道路变化时本身的不连续性),存在较多不确定性。解决办法是采用较强推测能力的算法针对边缘情况进行推测。
其三,在启动驾驶辅助功能(如自动换道、车道保持期间)期间,自车会在车轮压线过程中发生车道线左/右切换的情况。解决办法除了设定滤波延迟外,也可以通过提前给车道线赋值固定序号的方法进行优化。
3、交通标志、锥桶识别问题
自动驾驶系统中,诸如交通标志、锥桶一类的小目标识别是一类重要且亟待解决的问题。通常,处理这类问题还是采用的基础神经网络进行特征提取和泛化来cover,但是需要大量的先验数据库作为支撑。而交通标识检测具有一下难点:首先,由于交通标志、锥桶一类都是小目标,其检测过程需要进行更多的特征提取,甚至在神经网络中产生更多的金字塔层;其二,不同的交通标志(如有圆形红绿灯、箭头形红绿灯、倒计时红绿灯;雪糕筒、三角锥桶、梯形锥桶等)具有不同的形态,其多样性问题就是一个不得不解决的问题;其三,场景具有较高的复杂度,比如路口处信号灯的安装位置,安装方向;施工区域的锥桶起止点,终止点等。
总结
智能驾驶中的视觉感知问题一直是业界重点关注的问题,他不仅影响着对于后续轨迹规划、决策控制的影响,也是整个辅助驾驶系统能否为更进一步往自动驾驶上升级的关键。我们已经能够关注到相关场景识别检测能力对整个视觉感知的需求,后续我们需要更加关注如何解决视觉感知中的场景局限性问题。本文从视觉感知任务、能力、局限性及改善方案几个角度出发充分说明了各个不同的解决方案路径,在工程应用中具备较好的实现价值。