300米远程深度估计:港科大重磅开源自动驾驶深度感知新技术,远超现有雷达|CVPR2020
arxiv链接:https://arxiv.org/abs/2004.03048
project主页:https://kai-46.github.io/DepthSensing/
slides:https://kai-46.github.io/DepthSensing/my_files/slides.pdf
video:https://youtu.be/QXI5JQZ2JE0
输入
输出深度图
图像中的场景距离大约两三百米。本文算法可以得到一个上千万像素的深度图。
细看当前研究者常用的Kitti、Waymo等自动驾驶数据集,不难发现,它们的深度数据均由车载激光雷达采集,最大量程只有80米左右。80米左右的量程或许可以满足低速无人驾驶的应用场景,但是对于无人驾驶卡车在高速公路行驶这类的场景显得有点不足,原因在于,如果我们假设卡车车速是80 km/h,行驶80米的距离其实只需要3.6秒的时间,这对于无人驾驶技术的安全性构成了挑战。诚然目前市面上的一些高端激光雷达声称能够达到300米的有效测量距离,但其价格、功耗、远处物体的点云很稀疏等问题均不可规避。另一方面,现有的立体相机方案由于相机焦距不够大而看不清远处物体,进而也不能达到远程深度估计的要求。
作为计算机视觉研究者,作者决定从相机角度着手解决这个问题,而非改进激光雷达。首当其冲的一个问题是:为了看清远处物体,长焦镜头不可或缺,但是这种增大立体相机焦距的方法是否能直接解决问题了呢?答案是否定的。经过分析可以发现,这里面的一个难点在于:立体相机的最大baseline受限于车辆的宽度(通常在2米左右)。
对于300米远的3D点而言,2米的baseline可谓是超级小,小到这个3D点到左、右相机中心的两条光线的夹角(triangulation angle)只有0.382度。如下图所示,极小的triangulation angle带来的后果是深度估计的精度对于相机姿态中的微小变化异常敏感:如果姿态中有0.1度的误差,那么估计的深度值的相对误差就达到了不可接受的26.2%左右,这意味着在300米深度处会产生大约78.6米的绝对误差。
在无人驾驶车辆行驶过程中,相机姿态当中的微小变化几乎是难以避免的。对相机姿态要求的这种高精度也已远超IMU、Gimbal等硬件所能达到的精度。那么使用Structure-from-Motion (以下简称SfM)这种算法是否可以直接从图片中恢复高精度相机姿态呢?很不幸的是,答案也是否定的,这是因为SfM算法所求解的优化问题在远程深度估计问题下存在ambiguity,简单来说,就是解不是唯一的。早年的文章把这种现象成为bas-relief ambiguity,如下图的仿真实验所示,SfM恢复的相机姿态相对于真实值有0.207度的误差,同时恢复的3D点的位置(红色)严重偏离了它们真实的位置(蓝色)。
为此,作者提出了一个如下图所示的由三个长焦相机构成的新相机系统(两个放在车头,一个放在车尾),以及配套的深度估计算法。本文的解决方案绕过了对高精度相机姿态的要求,只需要知道三个相机的焦距,以及相机之间的距离。算法以三个相机同一时刻捕捉到的图片作为输入,输出left相机图片对应的深度图。整个系统流程图如下图所示。
简单来说,本文的算法流程是先对左右相机的图片做uncalibrated pseudo-rectification,这一个过程不依赖于相机姿态,只需要图片之间的sparse feature matches即可实现;然后用标准的stereo matching算法去估计disparity;分析表明这个估计的disparity相对于真实的disparity存在一个未知的全局偏移。算法的最后一步是利用left相机和back相机之间的近大远小现象来估计这个未知的全局偏移,并将修正后的disparity转化为深度。
具体点来说,第一步中的uncalibrated pseudo-rectification基于的原理是当相机焦距很大时,相机的透视投影效应会变弱,退化成弱正交投影,本文的分析显示在这种情形下,我们可以直接通过图片之间的sparse feature matches求接出两个仿射变换来达到对图片的pseudo-rectification;这种pseudo-rectification具有不依赖相机姿态的优点,但是会带来第二步估计的disparity中存在未知的全局偏移这一后果;为了去除这个全局偏移,本质上我们需要知道至少一个3D点的绝对深度值(同时这个3D点在第二步估计的disparity也要合理),在本文的方法中,这一目标是通过利用前后相机之间的近大远小现象实现的,即:两个具有同一深度的3D点,它们投影到后面相机中的像素之间距离要比投影到前面相机中的像素之间距离来得小,并且从距离之间的比例可以反推出3D点的深度。(具体的算法细节可以参考论文)
作者在仿真数据集和采集的现实数据集验证了算法。对于仿真数据集上,本文限制相机系统的baseline/depth ratio在2/300左右(对应车宽2米,物体在300米这样的现实设定),同时对相机姿态做随机的小扰动。结果显示,本文的算法估计出来的深度能够达到3%的相对误差,远超其他算法 。
由于这个问题的现实数据采集难度很高,本文做了资源允许情况下的最大力度验证。本文把一个配备了长焦镜头和三脚架的相机依次放到相机系统示意图中的三个位置,并且用激光测距仪测量了left相机中心点的深度作为真实值。实验结果显示,本文的方法得到的深度(300.8米)跟激光测距仪测量的值(320米)吻合得很好(如下图2所示),并且我们的方法输出的是深度图,而非激光测距仪给出的单点深度。
综上所述,在这个工作中,作者对于无人驾驶场景下的远距离(300米左右)深度估计做了一些探索,并提出了一个基于相机的解决方案。因为本文方法基于相机,所以具有成本小、功耗低的特点(note:作者验证原型系统时使用的易用型消费者相机Nikon P1000成本并不低,实际应用中使用工业相机和镜头来搭建这个系统的话可以大幅降低成本,同时相机尺寸也可以缩小很多)。匹配本文提出的深度估计算法,整个系统的完整参数(包括完整的相机内参和外参)并不需要提前全部calibrate好,同时该套系统对于车辆系统过程中的相机姿态颤动更加鲁棒。
由于资源的限制,本文并未能在真实的自动驾驶场景上验证本文提出的原型系统,是一个遗憾;无人驾驶场景下的远距离深度估计问题也欠缺公开的大规模数据集来供深度学习研究者使用。这些都是未来可以研究探索的方向。
作者介绍
张凯,Cornell二年级博士生,博士导师Noah Snavely,本科毕业于清华大学,主要研究领域:3D vision。