从单幅图像到双目立体视觉的3D目标检测算法(长文)
经典的计算机视觉问题是通过数学模型或者统计学习识别图像中的物体、场景,继而实现视频时序序列上的运动识别、物体轨迹追踪、行为识别等等。然而,由于图像是三维空间在光学系统的投影,仅仅实现图像层次的识别是不够的,这在无人驾驶系统、增强现实技术等领域表现的尤为突出,计算机视觉的更高层次必然是准确的获得物体在三维空间中的形状、位置、姿态,通过三维重建技术实现物体在三维空间的检测、识别、追踪以及交互。近年来,借助于二维图像层面的目标检测和识别的性能提升,针对如何恢复三维空间中物体的形态和空间位置,研究者们提出了很多有效的方法和策略。
相比图像层面的二维物体检测问题,如何通过图像理解物体在三维空间中的位置通常更加复杂。较为准确的恢复物体的三维信息包含恢复物体表面每个点的三维坐标及三维点之间的关系,计算机图形学中物体三维特征可以表示为重建物体表面的三角化网格和纹理映射,不要求特别精确地场景下,也可以仅仅用三维空间中的立方体表示物体位置。由射影几何学,仅仅依赖一副图像是无法准确恢复物体的三维位置,即使能得到相对位置信息,也无法获得真实尺寸。因此,正确检测目标的3D位置最少需要多个相机或者运动相机组成的立体视觉系统,或者由深度相机、雷达等传感器得到的3D点云数据。
图1:两种不同的3D检测。左图中,通过检测得到物体三角网格模型。右图中,由图像特征检测3D空间立方体来表示物体在空间中的位置。
对于特定类型目标,基于机器学习的方法使得通过单目相机进行物体3D检测成为可能。原因是特定类型目标往往具有很强的先验信息,因此依靠给真实物体做标注,联合学习物体类别和物体姿态可以大概估计出物体3D尺寸。不过,为了更好的估计物体的3D位置,更好的方法是结合学习的方法充分融合射影几何知识,来计算物体在真实世界中的尺度和位置。
在这篇文章中,SIGAI将和大家一起回顾一下近年来几个效果较好的3D目标检测算法。针对无人驾驶场景下,如何采用单目相机和双目立体相机实现行人和车辆的3D检测的几个算法进行一些对比和总结。并帮助更好地理解视觉3D目标检测算法的框架和当前主流算法的算法框架和基本原理,如果对本文的观点持有不同的意见,欢迎向我们的公众号发消息一起讨论。
二.3D目标检测算法的分类
通过图像、雷达、深度相机等信号可以检测和识别3D场景信息,从而帮助计算机确定自身和周围物体的位置关系,做出正确的运动交互和路径规划。从相机得到图像信息,需要正确计算图像点和三维点的对应关系,而雷达和深度相机可以直接得到点云或者点的空间位置。按照传感器和输入数据的不同,可以把3D目标检测分为如下几类:
图2:根据输入信号的不同,3D目标检测的分类
从点云获取目标信息是比较直观和准确的3D目标检测方法,由于点的深度数据可以直接测量,3D检测问题本质上是3D点的划分问题,Chen[4]等人通过扩展2D检测算法提出了一些利用点云特征估计物体位置的方法。相比于使用雷达系统或者深度相机,使用摄像机系统成本更低,但是需要进行图像点的反投影,计算点在空间中的位置。除此之外,相比于点云数据,图像恢复深度可以适用于室外大尺度场景,这是普通深度相机所不能达到的。本文将讨论使用图像数据估计特定类型物体在空间中的3D位置。
使用图像数据检测物体的3D空间位置,可以通过首先估算3D点云数据,借助点云检测3D目标的流程来检测3D目标。通过图像数据估算3D点云有多种方法,比如Wang [5]借助于CNN方法来仿真3D点云。也可以通过每个点的深度估计来获取图像的近似3D点云[6, 7]。通过图像数据估计3D点云,在使用已有的3D点云方法来检测3D目标,效率较低,容易出现误差累积。近年来,采用射影几何和机器学习算法结合的方法,较好的提升基于图像的3D检测算法。
由于特定类型物体具有较强的尺寸先验,比如车辆的宽、高、长,往往由车辆类型决定。而观察车辆的角度对于车辆在图像中的外观特征具有很大的关联性,因此,通过收集数据集并进行前期的3D标定,对于学习图像特征到车辆3D属性具有重要的意义。但与单目单幅图像的特定类型3D目标检测,可以采用以深度学习为主的3D预测算法,综合射影几何的原理,得到比较可信的3D检测结果。对于双目立体视觉,进行合理的双目匹配,通过相机之间的相对位置计算,可以得到比单目视觉更强的空间约束关系,因此结合已有的物体先验知识,可能得到比单目相机更准确的检测结果。
对于基于视觉的3D目标检测,如何融合机器学习算法和射影几何约束,对于提升算法性能具有重要的意义。下文从几种单目图像到双目相机进行3D目标检测算法的详细介绍,来说明和讨论如何实现基于图像的3D目标检测。
三.单视图像3D目标检测算法介绍
3.1结合回归学习和几何约束的3D目标检测算法
A. Mousavian在CVPR2017提出了一种结合深度神经网络回归学习和几何约束的3D目标(主要针对车辆)检测和3维位置估计的算法[1]。
在论文中,对车辆的3D姿态和位置进行建模的参数包括:车辆的姿态包括车辆在场景中的位置和车辆相对于摄像机的角度,包括两方面参数:3D包络的中心位置相对相机的偏移T = [t x ,t y ,t z ]T,车辆的旋转矩阵R (由三个旋转角度θ, ϕ, α决定, θ是方位角azimuth, ϕ是仰角elevation, α是翻转角roll,对于自动驾驶场景ϕ=α=0)。除此之外,我们必须估算车辆的尺寸大小,包括三个方向的尺寸D = [d x ,d y ,d z ]。
假设以车辆中心为原点,世界坐标系中某一个点x 0 =[X, Y, Z, 1]T在图像上的投影点为x=[x, y, 1]T。则他们满足成像方程:
对于这9个参数的计算分为2个步骤:
第一步, 在得到2D的矩形之后,利用回归学习的方法估计方位角θ和物体尺寸D = [d x ,d y ,d z ]。这里忽略掉仰角和翻转角(ϕ=α=0)。
角度θ的回归:
直接估算全局方位角θ是很困难的,这里转而估算物体转角相对于相机的局部角度θl,类似于Faster-RCNN对目标的位置设定anchor位置,这里局部角度θl的估计也采用离散划分的方法,首先分为n个不同的区间,预测的目标转化为第i个角度区间的概率ci和角度偏差的余弦和正弦值cos(∆θ i )和sin(∆θ i )。
(a)
(b)
图3. (a):车辆方位角θ的俯视图。方位角是车辆绕y轴的旋转角(车辆高度dy),对于摄像机来说车辆在图像成像看到的是局部的转角θl,若θray为车辆相对于与摄像机的旋转角度,则θ=θl+θray。我们回归的角度是局部转角θl。图(b): 用于角度回归的网络设计。
尺寸d的回归:
在KITTI数据集中,车辆被粗略的分为4类{cars, vans(小货车), trucks(卡车), buses}。
每种类型的车辆形状相似,尺寸相近,变化很小。首先统计每类车辆的平均尺寸,这里估计得尺寸为与平均尺寸的偏差(residual)。
损失函数为:
这里D*为基准尺寸。是我们要估计的值。
第二步, 在得到方位角和物体尺寸之后,利用成像公式,计算中心点向量T = [t x ,t y ,t z ]T。
在R和D=[d x ,d y ,d z ]已知的情况下,可以利用下面投影公式,计算T的值。
3.2 基于引导和表面(GS)的3D车辆检测算法
本方法也是先计算2D检测结果,通过一些先验知识结合学习算法计算3D检测边界框的尺寸和方位[2]。本文的创新点是充分利用3D表面在2D图像的投影特征,进行区分判别。
本方法以单张图像为输入,由粗到细逐步恢复目标(车辆)的3D结构。如下图所示:步骤(1): 借助于一个基于CNN的检测算法得到2D检测框和观测角度。步骤(2): 通过场景先验,计算粗糙3D边界框(3D guidance)。步骤(3): 3D框被重投影到图像平面,计算表面特征。步骤(4):通过子网络,由重投影特征进行分类学习,得到精化的3D检测框。
图4:GS-3D基本流程