一.导言
经典的计算机视觉问题是通过数学模型或者统计学习识别图像中的物体、场景,继而实现视频时序序列上的运动识别、物体轨迹追踪、行为识别等等。然而,由于图像是三维空间在光学系统的投影,仅仅实现图像层次的识别是不够的,这在无人驾驶系统、3604f85d04>增强现实技术等领域表现的尤为突出,计算机视觉的更高层次必然是准确的获得物体在三维空间中的形状、位置、姿态,通过三维重建技术实现物体在三维空间的检测、识别、追踪以及交互。近年来,借助于二维图像层面的目标检测和识别的性能提升,针对如何恢复三维空间中物体的形态和空间位置,研究者们提出了很多有效的方法和策略。
相比图像层面的二维物体检测问题,如何通过图像理解物体在三维空间中的位置通常更加复杂。较为准确的恢复物体的三维信息包含恢复物体表面每个点的三维坐标及三维点之间的关系,计算机图形学中物体三维特征可以表示为重建物体表面的三角化网格和纹理映射,不要求特别精确地场景下,也可以仅仅用三维空间中的立方体表示物体位置。由射影几何学,仅仅依赖一副图像是无法准确恢复物体的三维位置,即使能得到相对位置信息,也无法获得真实尺寸。因此,正确检测目标的3D位置最少需要多个相机或者运动相机组成的立体视觉系统,或者由深度相机、雷达等传感器得到的3D点云数据。
左图中,通过检测得到物体三角网格模型。右图中,由图像特征检测3D空间立方体来表示物体在空间中的位置。
对于特定类型目标,基于机器学习的方法使得通过单目相机进行物体3D检测成为可能。原因是特定类型目标往往具有很强的先验信息,因此依靠给真实物体做标注,联合学习物体类别和物体姿态可以大概估计出物体3D尺寸。不过,为了更好的估计物体的3D位置,更好的方法是结合学习的方法充分融合射影几何知识,来计算物体在真实世界中的尺度和位置。
在这篇文章中,将和大家一起回顾一下近年来几个效果较好的3D目标检测算法。针对无人驾驶场景下,如何采用单目相机和双目立体相机实现行人和车辆的3D检测的几个算法进行一些对比和总结。并帮助更好地理解视觉3D目标检测算法的框架和当前主流算法的算法框架和基本原理,如果对本文的观点持有不同的意见,欢迎向我们的公众号发消息一起讨论。
二.3D目标检测算法的分类
通过图像、雷达、深度相机等信号可以检测和识别3D场景信息,从而帮助计算机确定自身和周围物体的位置关系,做出正确的运动交互和路径规划。从相机得到图像信息,需要正确计算图像点和三维点的对应关系,而雷达和深度相机可以直接得到点云或者点的空间位置。按照传感器和输入数据的不同,可以把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 = [tx,ty ,tz]T,车辆的旋转矩阵R (由三个旋转角度θ, ϕ, α决定, θ是方位角azimuth, ϕ是仰角elevation, α是翻转角roll,对于自动驾驶场景ϕ=α=0)。除此之外,我们必须估算车辆的尺寸大小,包括三个方向的尺寸D = [dx,dy ,dz]。
假设以车辆中心为原点,世界坐标系中某一个点x0=[X, Y, Z, 1]T在图像上的投影点为x=[x, y, 1]T。则他们满足成像方程:
第一步,在得到2D的矩形之后,利用回归学习的方法估计方位角θ和物体尺寸D = [dx,dy ,dz]。这里忽略掉仰角和翻转角(ϕ=α=0)。
角度θ的回归:
直接估算全局方位角θ是很困难的,这里转而估算物体转角相对于相机的局部角度θl,类似于Faster-RCNN对目标的位置设定anchor位置,这里局部角度θl的估计也采用离散划分的方法,首先分为n个不同的区间,预测的目标转化为第i个角度区间的概率ci和角度偏差的余弦和正弦值cos(∆θi)和sin(∆θi)。
图3. (a):车辆方位角θ的俯视图。方位角是车辆绕y轴的旋转角(车辆高度dy),对于摄像机来说车辆在图像成像看到的是局部的转角θl,若θray为车辆相对于与摄像机的旋转角度,则θ=θl+θray。我们回归的角度是局部转角θl。图(b): 用于角度回归的网络设计。
尺寸d的回归:
在KITTI数据集中,车辆被粗略的分为4类{cars, vans(小货车), trucks(卡车), buses}。
每种类型的车辆形状相似,尺寸相近,变化很小。首先统计每类车辆的平均尺寸,这里估计得尺寸为与平均尺寸的偏差(residual)。
损失函数为:
第二步,在得到方位角和物体尺寸之后,利用成像公式,计算中心点向量T = [tx,ty ,tz]T。
在R和D=[dx,dy ,dz]已知的情况下,可以利用下面投影公式,计算T的值。
3.2 基于引导和表面(GS)的3D车辆检测算法
本方法也是先计算2D检测结果,通过一些先验知识结合学习算法计算3D检测边界框的尺寸和方位[2]。本文的创新点是充分利用3D表面在2D图像的投影特征,进行区分判别。
本方法以单张图像为输入,由粗到细逐步恢复目标(车辆)的3D结构。如下图所示:步骤(1): 借助于一个基于CNN的检测算法得到2D检测框和观测角度。步骤(2): 通过场景先验,计算粗糙3D边界框(3D guidance)。步骤(3): 3D框被重投影到图像平面,计算表面特征。步骤(4):通过子网络,由重投影特征进行分类学习,得到精化的3D检测框。
第一步:扩展Faster-RCNN判别回归网络部分,估计2D检测结果的类型、2D边框、方位角度。如下图左图。注意,这里估计的角度是观测角度α。如下图右所示:
图5:(a)通过多分支的RCNN框架预测2D检测框的对象类型、2D边框、以及目标的角度。(b)观测角度α和全局角度β的图示。这里y轴向下,所以角度正方向是顺时针方向。
第二步:计算粗化的3D框。给定相机内参数K, 2D边界框,以及方位角α,通过射影几何方法计算3D框。这里,用符号表示检测车辆的3D边框为Bg=(wg,hg ,lg,xg,yg ,zg,θg),其中((wg,hg ,lg)是物体的长、宽、高。(xg,yg ,zg)是物体的中心3D位置。θg是在空间中的朝向角度。这里粗略的估计车辆的长、宽、高采用了车辆识别类型的先验尺寸,即预先统计真实情况下,每种车辆的平均长、宽、高,按照前一步预测的类型直接设定物体尺寸为平均尺寸。根据上图中的观察,可以得到:
这里x和z是中心位置的x和z坐标值。因此,现在的问题是如何估计中心位置Cb的值。这里假设3D车辆顶面的中心投影在2D图像上为2D检测框的上边中点;3D车辆底面的中心投影到2D图像上为2D检测框的下边中点。可以根据这个假设,粗略的估计3D车辆的中心位置。若图像中2D框为,那么上边中心的奇次坐标为,下边中心的奇次坐标为。他们的正则化3D坐标(深度为1的3D投影)为:
由于车辆的高度为hg,因此可以估计深度d为d = hg/(ỹb- ỹt),所以车辆中心坐标可以估算为:
第三步:重投影表面特征,并精化3D检测框。上述第二步得到的3D框坐标是粗略的(采用平均尺寸作为已知尺寸总是有偏差的),为了计算更准确的3D框坐标,需要根据图像本身特征进行矫正。这里依然使用深度学习的方法。
下图表示如何计算可见的车辆表面:除了上表面(车底一般是看不到的),根据观察角度α的取值范围,可以确定观察到的是车的左侧或者右侧(|α|>π/2或者|α|<π/2); 以及车头或者车尾是否被观测到(α>0或者α<0)。根据具体观测的三个表面,可以对他们进行单应变换,在卷积特征上提取变换这三个表面,按通道拼接到一起。
这里对3D框的预测采用分类形式,分类目标为离散3D框残差尺寸。预测网络如下图:
网络的输入为变换的车辆表面和2D框图像上下文特征;输出为真实3D框坐标与预估坐标的差值,公式如下:
四.双目立体视觉3D目标检测算法介绍
4.1 基于3DOP的3D目标检测
本文采用类似于Fast R-CNN的二步检测算法。对于具有2副成对图像的双目立体视觉图像[8]。首先,采用Yamaguchi在ECCV2014年发表的方法[6]计算每个点的深度图像,由此生成点云数据,后续的处理是基于点云做为处理和输入数据。然后,采用Struct-SVM优化的方法选择3D检测的候选3D框y。最后,通过R-CNN方式,对每个候选框进行分类评估和位置回归。
第一步,产生3D检测的候选框。
这里,每个候选框用6维向量表示y=[x, y, z, θ, c, t]。其中[x, y, z]表示3D候选框的中心点,θ表示物体的水平方位角,c∈C表示目标的类别,这里类别指{车辆-car、自行车-Cyclist、行人-Pedestrian}。t表示在类型c中尺寸模板的下标,这里每种类型的尺寸模板是对训练数据中基准3D边框进行聚类得到的聚类中心尺寸大小。如果输入的点云数据表示为x,那么根据每个候选框y和输入x可以得到一些特征。本文设计了4种特征,然后令权重为w=。可以得到下面能量函数:
这里特征的构成主要是:(1)点云密度ϕpcd,平均立方体内的点云数目。(2)空间空置率ϕfs,,定义为点云与相机之间的空间大小。(3)离地面的平均高度ϕht, 定义为与高度先验的平均相似率。(4)高度对照率ϕht-contr,3D边界框周围点云的分布率。
为了优化这个能量函数,训练参数向量w, 本文采用结构化SVM优化模型,给定训练数据可以使用cutting-plane算法求上述最小化问题。
推导过程中,首先根据点云信息估计地面位置。候选3D框的计算采用穷举的方法得到,首先找到能量最低的3D框,然后找下一个,搜索的过程采用NMS(非最大抑止)的策略。以此找到m个候选框:
第二步,采用Fast-RCNN类似的框架,对候选3D框判别和回归,选择正确的3D边界框。
如上图,本文采用Fast-RCNN类似的框架,对候选3D框进行判别和矫正。不同的是,在5层卷积层之后,添加了一个图像上下文区域信息,对这个特征进行卷积和2层全连接运算后,拼接到原来Pooling后的特征中,输出为分类类别c, 3D边框的矫正估计,以及角度回归。
也可以考虑像素的深度数据(depth information)[2],为了处理深度数据,可以直接在输入图像中增加深度数据图像,也可以采用下面图中的双分支架构的判别和回归网络。但是这种双分支训练时需要更大的显存,对于显存的要求是原来的2倍。
4.2基于立体视R-CNN的3D目标检测算法
本方法是扩展 Faster-RCNN网络框架到双目立体视觉进行3D目标检测的方法[10]。方法的关键步骤是对左右图像的自动对齐学习,以及通过稠密匹配优化最终的检测结果。
第一步:左右视图的Stereo-RPN设计
由左右视图图像经过2个相同的Faster-RCNN中的RPN结构计算左右视图中匹配的推送(proposals)矩形框stereo-RPN。输出为六元组[∆u, ∆w, ∆u’, ∆w’, ∆v, ∆h]。其中∆u, ∆w, ∆u’, ∆w’为左右视图中目标2D框的横坐标与锚点(anchor box)的偏差。∆v, ∆h为纵坐标偏差和高度偏差。注意这里采用校正的双目相机,因此,左右视图的纵坐标和高度是相同的。
RPN主干网络采用Resnet-101或者FPN。与Faster-RCNN中的RPN相比,stereo-RPN同时计算了可能的2D框,并且对左右视图的2D框进行了配对(association)。
第二步:估计3D物体的尺寸(dimension)、角度(viewpoint)和关键点
采用学习的方法,可以估计物体的3D尺寸(dimension),在世界坐标中的转角(θ)。类似于六元组[∆u, ∆w, ∆u’, ∆w’, ∆v, ∆h],采用左右视图的特征拼接,经过2个全连接卷积得到3个全归目标:物体的类别, 立体框六元组,物体的尺寸,相对视角α。这里主要说明相对视角α。参考下图,为了估计物体3D位置,要确定全局转角θ,但是对于物体在相机中的投影来说,相同的相对视角α,具有相同的投影。因此,从投影回归全局转角θ并不直观。这里的方法采用[2]中类似的方法首先回归相对视角α,再计算全局转角θ。
图11:物体的全局方向角是θ,从相机观察的角度是β,物体相对于相机的视角是α=θ+β。由于相同的相机视角α得到近似相同的投影,因此这里回归的角度是物体转角相对于相机的视角α。和其他工作类似,回归采用α的三角函数[sin(α), cos(α)]。
对于物体的尺寸估计也借鉴了[2]中的方法,对于每个类物体估计与平均尺寸的尺寸偏差。
估计关键点,作者采用左视图特征。这里的关键点是指物体地面的4个三维角点。这4个角点投影到图像中,只有一个角点实在物体图像中间的,看作为投影关键点(perspective key point)。另外2个对3D重建有用的关键点是投影到图像中物体2D边界的,这两个点成为边界关键点(boundary key point),他们之间的像素看作在物体中。左视图特征经过6个卷积层和2个反卷积层得到6x28的特征,其中4个通道反映了这4个关键点投影到为投影关键点的概率,2个通道反映了投影到左、右边界的概率。
第三步: 粗略3D检测估计
在得到角度、物体尺寸之后,对于3D目标的位置描述主要包括中心点空间坐标和旋转角{x, y, z, θ}。
图12:3D矩形框在2D图像平面投影的示意图
根据上图空间关键点的投影示意图。可以得到如下公式组:
上式共有7个等式,其中b是校正的双目相机之间的基线长度。{w, h, l}是回归估计得目标空间尺寸。根据高斯-牛顿算法可以求解上式,得到(x, y, z)的值。
第四步:优化3D检测结果
为了得到更精确的3D位置,进一步考虑目标矩形框内的像素值,使用稠密像素匹配,可以得到左右视图像素偏差的和:
其中z是目标中心的深度,∆zi是每个像素与中心位置的深度偏差。对于上式中像素的范围取作车辆下半部分关键点之间的区域(Patch),优化的目标是最小化这个像素差和,计算最优的z值。可以采用集束优化(Bundle Adjustment)的思想进行优化,得到优化的深度值z。
五.视觉3D目标检测小结
相比2D目标检测问题,进行物体在3D空间的位置估计对于实际应用场景更有意义。通过估计实际位置,自主驾驶的车辆和机器人可以准确的预判和规划自己的行为和路径,避免碰撞和违规。同时,3D目标检测问题也面临更多的挑战,主要的区别在于不仅要找到物体在图像中出现的位置,还需要反投影到实际3D空间中,需要有绝对的尺寸估计。对于视觉3D目标估计,采用扩展图像目标检测算法的深度学习模型对于3D检测具有重要帮助,但是加入空间几何关系的约束是非常必要的前提,不仅可以提升检测精度,也可以去除可能的无意义的错检。而如何结合稠密匹配算法以及3D重建中的集束调整技术,对于进一步提升3D目标检测精度必然具有重要作用。