分享嘉宾 | 范睿
文稿整理 | William
自动驾驶感知
首先,三维几何模型背后的机理是多视图几何学,多视图几何学是指想要得到对应模型的三维几何架构,则必须要用相机在两个不同的位置进行拍照。如图1,可以通过利用两个相机在不同位置拍照的方式,去得到三维几何模型;同样,也可以利用单个相机不断的移动,然后不断的进行三维的重建。
主要原理是:利用左相机平面和右相机平面去计算R、T。通常做slam的时候,先需要对图像中的对应点进行匹配,然后利用至少八个对应点去利用SVD来求解出外参矩阵,再利用这个外参矩阵进行分解得到R、T,得到两个相机的相对位姿之后,就可以得到对应三维点的坐标。
图1 深度估计
对于双目来讲,需要先对图像的平面进行一定的变换,因为如果是刚刚的方法,在做特征点匹配的时候,往往是一个二维匹配的问题,计算量是比较大。
因此对于双目相机需要变换为图2中红色的平面,将对极点拉到无限远之后,对应点的匹配则变成了一维搜索问题,即从左相机选择一个点,然后要在右相机去选择对应点的时候,只需要在同一行上进行搜索。
利用双目去做深度估计的好处在于通过相机标定可以得到固定的baseline,之后,进行一维搜索可以节省大量的计算量,得到稠密的视差图,从而对应得到稠密的深度图,最后得到稠密的三维点位。
图2 立体匹配
随着深度学习的发展,现在有很多网络是基于一些深度学习的网络去得到视差图,但现在深度学习的方法大多是基于数据驱动。数据驱动存在一个很大问题是有时并不知道ground-truth是多少。
当然现在是可以利用Lidar进行同步,之后把雷达点云投到双目相机上,然后利用深度进行反推视差。这种方案虽然可以得到真值,但它的真值受限于相机和激光雷达标定的精度。
基于此,探索了很多自监督方式,从而设计了PVStereo结构,如图3所示。
图3 PVStereo结构
可以看到是利用了不同层级的图像进行一个传统方法的匹配,当时假设是对应图像点的视差可靠,那不管是它对应的不同的pyramid都是可靠的,这跟深度学习的假设是一致的。然后,利用传统的pyramid voting可以得到一个相对比较准确,但比较稀疏一点的视差图。
受到了KT数据集的启发,在想能够用一些稀疏的真值去训练出来一个比较好的网络,所以利用传统方法去猜测视差的真值,避免了利用真值去训练网络的过程。
基于循环神经网络的方法提出了OptStereo网络,如图4所示。首先构建多尺度成本量,然后采用循环单元迭代更新高分辨率的视差估计。这不仅可以避免从粗到细范式中的误差累积问题,而且由于其简单而高效,因此可以在准确性和效率之间实现很大的权衡。
实验结果相对来说还是比较鲁棒的,但是像一些场景会出现离群值。
图4 视差图生成
既然ground-truth比较难获得,一种方法是利用传统方法去猜一些真值来作为假的ground-truth,然后去训练网络;另外一种方式是基于无监督的方式进行训练。于是基于之前的工作,提出了CoT-Stereo,如图5所示。
利用两个不同的网络,一个network a和network b,这两个网络类似于去模拟了两个学生,且初始化不同,但网络结构完全相同。在初始化时, network a和network b掌握了不同的知识,然后a再把自己认为对的知识分享给b,b也同理分享给a。通过这样的方式不断的去进行互相的学习和进化。
图5 CoT-Stereo架构
无监督双目估计的结果也同许多方法进行了比较,虽然ground-truth结果无法与全监督的方法做媲美,但是该网络整体的influence time和对应的L平衡比较好,如图6所示。
图6 实验结果
如何利用深度或视差变成法向量信息?在做一些感知任务时,发现有的时候深度并不是一个非常好用的信息,而如果用RGB-D信息进行训练的时候,则存在另外的问题。那如果使用法向量信息,不管近还是远,最后给到的信息都是差不多,且法向量信息,对于很多任务是有一些额外的辅助。
调研发现并没有太多的工作或是几乎没有工作去研究如何把深度图或视差图快速的变成法向量信息,于是这里研究了此类工作,初衷在于能够在几乎不占用任何计算资源的情况下,进行深度到法向量的translation,大概框架如图7所示。
图7 Three-Filters-to-Normal框架
可以看到这是最基本的一个透视变换过程,即把一个3D坐标利用相机的内参,可以变成一个图像坐标。如果已知局部点满足平面特性方程,可以很惊奇的发现,如果把这两个方程联立,就可以得到Z分之一这样的公式表达。
通过一系列的计算后,可以看到1/V对u方向的偏导在图像处理领域很容易处理,1/V对应视差,但跟视差是差一个倍数,因此,若对1/V求偏导,就是对视差图进行卷积。所以,其实法向量估计的方法不需要像传统方法一样,将深度图转化为三维点云,再进行KNN,再进行局部平面拟合,这个过程非常复杂。但这个方法可以很简单的通过已知Z或是已知深度图或视差图转化得到法向量。
利用这个方法去做了一系列的相关实验,结果如图8所示。和当时最主流的方法进行了比较,发现本文方法在速度和精度的平衡非常好,虽然精度可能稍微差一些,但是已经超越了几乎大多数的方法,速度使用C++带单核CPU可以达到260Hz,如果是CUDA则可以达到21kHz,对应图像分辨率为640 乘480。
图8 实验结果
在得到上述信息后,要进行场景解析,目前比较主流的方法是语义分割,目标检测和实例分割。对于场景理解,尤其是语义分割及一些传统方法是基于RGB信息进行处理。
这里主要关注的是RGB-X,即如何对RGB加depth或normal进行特征提取。主要应用关注于可行有序检测,即开车时看到的可行区域,目前是提出了如图9所示的框架。
图9 网络结构
这里是利用双路结构分别进行特征提取,其中一路是从RGB信息去提取特征,另外一路是从deepth或者normals去提取特征,如果是depth则需要转化为normal。然后,可以把这两个不同信息的特征进行融合,最后得到一个更好的特征,既包含了RGB信息中的纹理特性,又包含deepth图像中的几何特性。最后,通过connection去得到更好的语义分割结果图。
针对上述的版本进行一些改进,如图10所示。由于网络的融合结构比较复杂,所以有进一步提升的空间,所以这里做了这样的工作:首先,利用深监督的方式在不同的通道添加一些约束,然后再去学习,这样可以解决梯度爆炸的问题。其次,由于之前网络收敛过快,这里设计了一套新的SNE+算法,效果比SNE要更好。
图10 改进网络结构
前面一直是基于特征层级的融合,这里也研究了一些数据层级的融合。如何通过多个视角和单ground-truth去提升性能,这里是提出了如图11所示的网络结构。
主要是基于平面的单应性,单应性是对应点可以通过四对点进行单应矩阵估计,并且若已知单应矩阵和left-right的图像,可以通过ground-truth变成另外一个图像的视角。可以看到这里对应给定一个 reference image,给定一个targetimage,然后通过对应点去估计出对应的homegra-marix,然后可以直接把target image变成generated image。
generateimage看起来跟对应的reference image很像,但存在一个问题是它只是在道路区域看起来很像,但其实在网络训练时两个图像会共用了一套ground-truth,因为在非路面区域存在一些偏差,所以最后让网络学出来,能够更好的识别路面。
图11 多视角分割网络
道路质量检测
地面移动机器人可以显著改善人们的舒适度和生活质量。在移动机器人的所有视觉环境感知任务中,可驾驶区域和道路的联合检测像素级的异常是一个关键问题。准确高效的可行驶区域和道路异常检测可以有助于避免此类车辆发生事故。然而,现有的基准测试大多是为自动驾驶汽车设计的,地面移动机器人缺乏基准,而道路状况会影响到驾驶的舒适性和安全性。
基于这些问题,研究如何去评估道路的质量,另外最早的时候是交通和土木的人在关注的事情,因为他们做道路评估,更多是为了去修补道路或是道路养护。最早期数据采集是用一些雷达车去进行,价格昂贵,随意在想能否用比较低成本的方式去做道路数据采集。
这里设计了一套实验设备和网络框架如图12所示,网络输入left frame和right frame,主要经过三个流程,第一个是 perspective transformation,第二个是SDM,最后一个是global finement。
图12 实验设备及网络
第一步是最有意思的一个创新,因为很直观的传统印象是:如果用双目进行三维重建,baseline越大,效果应该越好,精度越高。但存在一个问题是baseline越大的时候,盲区越大,并且这两个图像的视角差异会越大。进行相关研究发现,有时角度虽然大了,但从理论上来讲,会得到一个更好的三维几何模型,但导致匹配的效果可能会下降,所以,将左图变换成右图的样子,进而实现处理,从而在速度和精度方面实现更好的视差估计。
在驾驶场景的时候,经常会看到道路的视差是渐变的,但障碍物的差异保持不变。因此,在算法中首先估计如图13中最下面一行的差异,然后使用三个相邻像素从底部向顶部传播搜索范围,再进行迭代估计差异,最后视差图的可视化结果如图14所示。
图13 视差变化
图14 可视化结果
后面也基于一些网络去做图像分割,比如单模态网络或是一些数据融合的网络操作。如图15所示,基于图神经网络,设计了一些新的框架。这个框架并没有像图神经网络一样去设计一套新的图网络,而是结合图网络去进行一些公式推导,发现图网络对于一些语义分割的情况,并不需要复杂的一些情况,只需要修改参数和变量,就可以去进行一些操作。
图15 网络框架
这个网络可以放入任何一个CNN架构去提升性能,简而言之,提取特征之后,对特征进行细化,之后把旧特征和新特征拼接在一起再重新输入进去。与当时几个主流的网络进行了验证,发现加入这个模块后都能够去提升分割的性能,如图16所示。
然后,也做了一些实验去验证它不光能够去应用这种特殊道路场景的识别的任务,而且能够去应用在广义的无人驾驶的语义分割或者室内的场景理解的语义分割的一些任务当中。
图16 实验结果
总结
(1)由于不再需要标记的训练数据,卷积神经网络和传统计算机视觉算法的结合为无监督/自监督的场景理解提供了一种可行的解决方案
(2)数据融合方法提供了更好的场景理解准确性
(3)使用现代深度学习算法进行路况评估是需要更多关注的研究
(4)在资源有限的硬件上实现人工智能算法时,我们还需要考虑计算复杂性,因为今天讨论的应用程序通常需要实时性能
来源:深蓝学堂EDU