欢迎进入仪商网!

关键点检测技术在自动驾驶视觉感知中的应用

在自动驾驶中,环境感知是一个非常重要的环节,它不仅可以帮助无人驾驶汽车进行定位,还可以告知障碍物等信息以帮助决策模块去调整驾驶行为。在视觉感知任务中,实际上有很多细分的任务类型,比如目标检测、目标跟踪、语义分割、实例分割、关键点检测等,而这些细分任务在我们的环境感知中都有着非常重要的应用。

1、关键点检测技术简介

在图像处理中,关键点本质上是一种特征。它是对一个固定区域或者空间物理关系的抽象描述,描述的是一定邻域范围内的组合或上下文关系。它不仅仅是一个点信息,或代表一个位置,更代表着上下文与周围邻域的组合关系。

比如在人脸关键点检测任务当中,有 28 个关键点,或是现在比较流行的 64 个、128 个关键点,这里面每个点在不同的人脸当中,代表了一类的特征,且具有一定的通用性。这一类特征不仅包含了像素的一些特性,比如嘴唇的特征点,包含了嘴唇与面部的位置关系。

右边的图片是前段时间比较火的阿里推出的服饰关键点比赛,比如在这件服饰中提供了 13 类关键点,每个关键点之所以被定位为一类关键点,因为它代表了服饰当中某一个特定的位置,或者某一个特定的位置所能代表的周围的关系。而在人体姿态检测当中,这个关键点不仅代表一个关节,还代表着这个关节和其他关节之间的关系,比如这个关节能跟其他哪些关节联系得比较紧密。

2、关键点检测在自动驾驶中的应用

在自动驾驶当中,有一些关键点检测的应用。

比如箭头的检测,检出箭头的同时,可以把它的关键节点回归出来,不同的颜色的点代表不同的类型,并且不同的点有它的位置信息。通过这些点,作为地图上的坐标,可以实时、精确地告诉车辆,告诉自动驾驶的大脑,我们现在的位置。箭头的关键点检测,也是用了类似的方法,虽然它的网络模型已经改得面目全非了,但是它的原理是一样的,通过不同等级的金字塔级别,可以把不同级别的点信息融合起来,从而提高它的精度,另一方面提高它的检测率。

在箭头或者是其他的一些关键点当中,也是需要知道每个点和另外一个点之间连接的关系,也就是它关系的回归。

并不是所有的点回归都能够很精确。比如有些点在图像上,车辆运行过程中,有些箭头的关键点可以准确地回归出来,有些可能识别出来错误,这受限于我们之前学习到的经验等。这类问题可以通过一些后续的改进,比如说网络的改进、摄像本身的改进。另外也可以通过后期的其他公式、其他算法上用的多一帧或是匹配的方式,去修正一下错误。

另外在自动泊车或者自主泊车当中,需要先检测出车位,我们用点回归的方式可以把车位的顶点回归出来。在一个图象当中,可以回归出车位当中的一些关键点,这个关键点是有不同类型的。通过车位的关键点,我们可以精确获知到我们实车或者是车辆自身距离这些关键点和车位之间距离是多少,我们相对的要调整控制模块,使得我们能够自动泊进去这个车位。所以,回归的车位顶点信息,对我们自动泊车或者是自主泊车来说是非常重要的信息。

另外,利用点回归的方式,同时结合语义分割的手段,可以给出一个信息更加丰富的结果,网络可以输出这方面的结果,相当于是分割出来的车位信息、车库当中车辆数的信息、车位是不是空车位、这个区域是不是空车位的信息。

同时通过点回归的方式,在网络的另一个分支,可以得到关键点的位置在哪里。比如我们知道这个地方是个空车位,我们也知道它车位的位置,这样对我们自动泊车来说,就可以直接去停,这是很好的感知功能。

除此之外,在室外的一些定位当中,可以用关键点回归的方法去回归路牌的定点。可以通过这个点反馈在地图上,更加精确地知道我们实时的位置。对路牌来说,2D 目标检测并不能全面描述其信息,因为图像中有很多倾斜的路牌。通过点回归的方式,可以清晰地得到它在图像中的真实形状与位置。通过一些摄像机的成像原理,或其他的修正手段,可以把这个位置信息投影到真实的三维信息当中去,更好地帮助我们确定车辆自身在三维世界当中的位置。

在图象当中做二维 bounding box 之或做三维bounding box 的目标检测,点和点之间的关系后剩下的顶点其实就可以看做是关键点,去掉的这个关系就是它的框,也就是它的连接关系。所以,去掉连线之后,就可以看成一个点回归的问题。做目标检测或者是做三维目标检测当中,比较重要的研究问题是如何把这个点回归的问题做得更精确。有很多人用一些模板的方式,比如说像目前百度的 Apollo 2.5 当中,其实有一个模式是相当于把这边真实的三维的候选做了很多匹配,看哪个跟检测出来的更相近或者更相匹。

这个方法,其他公司也有类似的状况,在做点回归的时候,都是直接在图片当中做三维的点回归,因为二维的点回归是比较相似的。我们可以看到在比较远处时候,就直接二维回归,在稍微近一点的时候,可以做三维的点回归。因为在远处的时候,这个侧面是很难看出来的,在相对比较近的时候,可以精确地描述。目标车辆下面这个斜边代表着它的航向角,这个航向角和公共的航向角定义不太一样,相当于这个车身的航向角,这个航向角对我们来说很主要的,可以判断出或者是辅助我们判断出前方车辆运动的趋势或者是运动的范围。

因为结合多帧信息,这个航向角会有变化的曲线,我们根据这个曲线可以预测出这个车辆是否有变道,或者是否有急转这样的趋势。通过这样的信息,可以帮助决策模块做一些重要的决策。比如预测出前方车辆要变道插队了,防插队也是我们自动驾驶当中遇到的很重要的问题;比如很多车,做 L1 和 L2 的方案当中,在尝试编程当中,前方车辆如果要插队,对我们自动驾驶的车辆来说很难识别。前面的车有没有插队的趋势,一般都是是有一定经验的司机能够准确或者是最高精度地判断出来。因为是否能够判断出前方车辆司机有插队趋势,对于我们正常的人类司机来说,也造成了很多的事故。因为判断不出来前面的车辆是否有插队的趋势,而前面的很多新手司机突然变道,这样就会发生一些比较经典的擦碰或者是追尾事故。这类事故放在自动驾驶车辆上来说,理论上可以做到比人类更高的精度。

用点回归的方式,可以去解决在一些场景当中三维目标检测的问题。对于点回归来说,需要根据周围的关系去判断这个点是不是应该在这里。而在三维检测的时候,经常会出现目标不全或者是目标存在一定遮挡的问题,这就需要我们去增加它的感受范围,或者是增强它在这方面的处理能力,这是可以去有效规避的事情。

可以用一些小的网络去做,比如说这张表当中描述的是用不同的方法去回归点不同的任务,如人体、箭头、车位线、路牌、车辆等,还有很多其他类型的点回归任务,都可以用这种方法,总体上来说,都是可以去解决,但是处理的能力是有限的。比如在车辆的关键点上来说,车辆的关键点回归的时候,整体回归的效果一般,因为车辆本身也是一个比较难的问题,整体的精度也比 2D 的要低很多。目前精度比较高的方法仍然是以激光雷达数据为辅助的方法,以视觉为主的方法目前还没有打进前三名,甚至只能排前十。

另外一方面,在用经典的 mask-rcnn 方法去做这类问题的时候,也受限于刚才所说的精度问题,下采样的倍数越高,回归得到的结果精度就越难以保证。这方面用到了很多级联的方法来提高精度,比如先用一个 28 x 28 的,再用 56 x 56 的,再用一个 112 x 112 的,这样精度逐渐提高了,但是它的运算量并没有被提高,或者复杂度并没有被提高,不是乘的关系而是加的关系,用两者的策略做的事情。这在我们的算法工程师或者是同行业当中,应该不是什么难的问题。


声明: 声明:凡本网注明"来源:仪商网"的所有作品,版权均属于仪商网,未经本网授权不得转载、摘编使用。
经本网授权使用,并注明"来源:仪商网"。违反上述声明者,本网将追究其相关法律责任。
本网转载并注明自其它来源的作品,归原版权所有人所有。目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。如有作品的内容、版权以及其它问题的,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
本网转载自其它媒体或授权刊载,如有作品内容、版权以及其它问题的,请联系我们。相关合作、投稿、转载授权等事宜,请联系本网。
QQ:2268148259、3050252122。