单目的3D目标检测近几年一直是研究的热点,虽然往算法中添加先验知识,能够一定程度的提升准确率,但是也增加了获取标签的难度和算法设计的复杂性。本文介绍一种端到端且轻量化的单目3D检测技术——基于关键点获取目标在图像空间的透视投影位置。
三维目标检测是自动驾驶领域中常见的视觉任务,感知模块需要将周围的环境信息,包括目标的三维坐标、朝向角、类别、速度、加速度等输出给规控模块。那么如何得到一个物体的三维信息呢?我们可以从KITTI算法测评数据集中浏览一些主流方法:从上图中可以发现,MAP靠前的算法还是以激光雷达的感知为主,毕竟此类主动触发式传感器能够提高准确的距离信息。但问题是20万以下的车型很难负担得起激光雷达的高额成本,所以单目相机的3D检测逐渐成为主要的研究方向,图像中的3D外接框由于缺少深度信息,其三维空间中的8个顶点是通过透视投影映射到图像空间的,如下图所示:1. 基于现在的二维检测算法,在目标的ROI中添加额外的回归分支预测三维参数。但是这种直接回归的方法由于搜索空间过大很难取得好的效果。如下图所示:使用CNN检测2D的外接框以及图像中的朝向角,然后利用相关的引导信息得到粗略的3D检测框。然后再对粗略的检测框进行提炼,得到最终的检测框。2.利用2D外接框和3D目标属性作为监督数据。将投影几何引入作为一种约束用深度回归网络去预测3D信息,但是2D外接框只能提供四个约束,这就要求BBox的预测相当精准。如下图所示:使用CNN提取特征估计2D外接框中的尺寸和方向,然后采用最小二乘求解基于相机投影矩阵解决2D到3D逆几何映射问题来获得物体的位置。这个约束依据某个3D点会被投影到2D边界框的边缘,但是相应关系和投影的具体位置存在多种可能性,所以只能提供四个约束不足以在9个参数(8个顶点+1个中心)中进行完整的3D表示,需要估计其他先验信息。 同时2D框的偏移也会带有约束结果的不准确性,为降低2D框的预测偏差此类方法大多通过两阶段检测来获得精确的2D框,这样就很难保证实时性。3. 利用复杂特征比如语义分割、CAD模型、对象轮廓、深度图等,在多阶段融合模块中选择最佳建议计算目标的3D外接框。但是训练这些网络大多也需要额外的标注,同时在推理过程中也会耗费更多的资源。如下图所示:此类方法从车辆关键点推断出完整形状,可以提高遮挡物和截断物的检测精度。一般使用线框模板(CAD模型)来表示常规形状的车辆。但是为了训练关键点检测网络,需要额外标注相关数据,甚至需要提供深度图来增强检测能力。4.参照人体姿态估计中的关键点检测技术,对车辆行人等道路障碍物进行关键点提取和组合,最后再通过相机的内外参进行图像的透视约束。如下图所示:此类将3D检测重新构造为稀疏关键点检测任务,无需基于现成的2D检测器或其他数据生成器来预测3D框,而是建立一个网络预测3D框的8个顶点和1个中心投影的9个2D关键点,同时将重投影误差最小化以找到最佳结果 。几何信息融入深度学习方法的一个局限性在于2D外接框的四条边所能提供的约束有限,2D框的4条边只提供恢复3D框的4个约束,而3D框的顶点可能与2D外接框任何一条边都有关。而且对2D框的过度依赖使得当2D框有轻微的错误会对3D框的预测效果有很大影响。但是如果采用提取关键点的方法对遮挡和截断的物体就能具有良好的特性,试想一下即使检测出几个特征点,其它信息的也可以根据物体的表示模型推断出来。近几年来由于anchor-free技术的日渐成熟,基于关键点检测的方法越来越受到工业界追捧。相比于以前采用2D检测器提供的ROI来回归顶点坐标,两阶段的检测算法限制了推理速度,在一些需要算法快速相应的场景中已经逐渐销声匿迹。关键点检测较早的应用出现在人脸识别或者姿态估计中,从这些应用中我们了解到直接回归特征点一般没有热度图的精度高。因此拟采用单阶段生成热度图的方法,考虑只预测3D外接框的8个顶点和1个中心点。不过考虑到9个特征点尽管可以提供18个约束,但尺度还没办法确定,所以需要一些额外的先验信息。根据上面的分析也就和RTM3D的主要思想基本吻合:建立全卷积网络预测目标的3D信息,包括目标的9个关键点投影(1个中心点,8个顶点),9个关键点提供对3D框的18个几何约束。8个顶点和1个中心的关系通过建模来解决关键点聚集和顶点的顺序问题。同时为了解决搜索空间较大的问题,该算法利用3D外接框顶点到2D外接框边缘之间的几何约束来修正并预测目标参数,得到更加精确的9个空间点。第一步:输入单RGB图像,输出关键点的热度图,顶点热度图和顶点坐标,用于预测由8个顶点和3D对象的中心点在图像空间中投影的序数关键点;第二步:使用透视投影的几何约束将预测的3D边界框估计重新构造为使能量函数最小化的问题,来修正空间点坐标;针对输入图像使用因子S=4进行下采样,源码中提供了ResNet-18和DLA-34两个网络进行提取特征,编码环节进行5次采样,然后通过三次双线性插值和1×1卷积层对瓶颈进行了三次上采样。引入FPN将低级特征图和高级特征图连接用于整合多尺度特征,同时添加一个1×1的卷积层以减少信道尺寸。图像中的关键点的大小基本不会随着目标的远近产生太大的变化。所以传统的特征金字塔网络并不适用于关键点检测。这里使用关键点特征金字塔网络来检测点向空间中的尺度不变性。具体做法如下:假设有F尺度的特征图,可以先将每个尺度f还原到最大尺度,然后通过softmax运算生成轻权重以表示每个尺度的重要性。通过线性加权和获得最终的尺度空间得分图(有点类似与注意力机制)。检测头由三个基本组件和六个可选组件组成,在网络训练时可以选择输出特征图的个数,附加的可选项越多可以达到精度上限越高,但是训练时任务头之间的权衡也需要仔细调节。RTM3D算法中将一个关键点作为连接所有功能的主要中心,由于在截断的情况下对象的三维投影点可能超过图像边界不利于检测,所以最终选择二维框的中心点作为主点。传统Harris等算子提取角点
区域生长等角点检测算法
直接在图像中回归坐标点
高斯分布角点区域进行分割
方法1和2是在图像处理中最常见的提取角点手段,如下图所示:在做相机标定时提取棋盘格的角点坐标是必不可少的一项工作。那么在深度学习蓬勃发展的今天,如何在神经网络中得到角点或者关键点坐标呢?方法3是最直接也最容易想到的,有监督的学习要么是分类任务要么是回归任务,在图像中定位关键点的位置好像和坐标回归的关系更大一些哦~~~但是在整张图片中回归几个坐标点总感觉比较困难,试想一副720P分辨率的图片包括100万个像素的,回归几个或者几十个像素点坐标难度可想而知。实验证明用神经网络直接回归点的二维坐标是很难收敛的,这是一个极其非线性的过程,而且损失函数对权重的约束会比较弱。方法4在关键点上附加了二维高斯分布,因为关键点附近的点其实也很像关键点,如果直接将其标为负样本,可能给神经网络的训练带来干扰噪声(人工打标注也是存在偏差的),将其用高斯函数做一个软标签能够促使网络更好的收敛。并且高斯分布也能够给训练增加方向性引导,距离关键点越近真值概率越大,这样网络能有方向的去快速到达关键点。
本文仅做学术分享,如有侵权,请联系删文。