前言:本系列文章主要介绍自动驾驶中的感知算法,根据传感器类型,主要可分为相机、激光雷达、毫米波雷达等三大部分。基于感知任务,又可分为检测和分割两大部分。
1. 3D感知任务
(1)输入:单摄像头或多摄像头生成的图像数据(单张图像或图像序列)
(2)输出
- 稀疏:物体在3D坐标系中的位置,大小,朝向,速度等
- 稠密:像素点的类别标签和深度信息
(3)算法
- 按输入来分:单目,双目,多目
- 按输出来分:3D物体检测,场景深度估计
(4)主要难点
- 图像是真实世界在透视视图下的投影,透视投影会导致距离/深度信息丢失
- 图像上物体的大小随着距离而变化,很难估计物体的实际距离和大小
(5)解决方案
- 借助其它传感器,比如激光雷达,直接获取物体的距离
- 借助几何假设和约束来辅助求解病态问题
- 借助深度学习自动地从图像中提取3D信息
- 借助多个摄像头和立体视觉算法
2. 单目3D感知
2.1 单目3D物体检测——反变换
(1)基本思路:将2D图像反变换到3D世界坐标,再进行物体检测
(2)病态问题:从2D到3D需要通过一些额外信息来辅助解决,如已知一些几何假设或深度假设的先验信息。
- 几何假设:已知目标位于地面上
假设路面和车辆坐标系都与世界坐标系平行,这样在像素高度值已知的情况下,将图像转换到BEV视图。然后,采用YOLO网络在BEV视图下检测目标的下边框(与路面接触部分)。
- 深度假设:已知目标深度值——Pseudo-LiDAR
依据深度图将输入图像转换为3D点云数据,采用点云和图像融合的算法来检测3D物体。
2.2 单目3D物体检测——关键点和3D模型
基本思路
- 待检测的目标(比如车辆)其大小和形状相对比较固定
- 将3D模型与2D图像上检测的关键点进行匹配
2.3 单目3D物体检测——2D/3D几何约束
基本思路
-
2D物体框的表示
- 4维变量:2D的中心点和大小
-
3D物体框的表示
- 9维变量:3D的中心点,大小和朝向
- 无法直接通过2D物体框求解
- 大小和朝向与视觉特征相关性强
- 中心点3D位置很难通过视觉特征预测
-
两步流程
- 采用2D物体框内的图像特征来估计物体大小和朝向
- 通过2D/3D的几何约束来求解物体3D中心点的位置
2.4 单目3D物体检测——直接预测3D信息
(1) 基本思路
-
两阶段检测,Anchor-based
- 根据先验知识生成稠密的3D物体候选
- 通过2D图像上的特征对所有的候选框进行评分
- 评分高的候选框作为最终的输出
-
单阶段检测,Anchor-free
- 直接从图像回归3D信息
- 根据先验知识设定物体3D参数的初始值
- 神经网络只需要回归与实际值的偏差即可
(2)两阶段检测——Mono3D
论文:Chen et al., Monocular 3D Object Detection for Autonomous Driving, CVPR 2016.
- 基于目标先验位置(z坐标位于地面)和大小来生成稠密的3D候选框;
- 3D候选框投影到图像坐标后,通过2D图像上特征进行评分;
- 特征来自语义分割、实例分割、上下文、形状以及位置先验信息;
- 分数较高的候选再通过CNN进行分类和边框回归,以得到最终的3D物体框。
(3)单阶段检测——FCOS3D
论文:Wang et al., FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection, 2021.
如下图所示,整体网络结构与2D物体检测非常相似,只是增加了3D回归目标。
3D回归目标
- 3D物体框的中心在2D图像上的投影
- 3D大小(L,W,H)和朝向 θ \theta θ
Centerness的定义:以3D中心点的2D投影为原点的高斯分布
2.5 单目3D物体检测总结
方法 | 主要思路 | 存在的问题 |
---|---|---|
图像反变换 | 2D图像反变换到3D世界坐标,在3D坐标下进行物体检测 | 病态问题,需要额外先验知识或者深度信息 |
关键点和3D模型 | 在2D图像上检测目标的关键点,与数据库中的3D模型进行匹配 | 受限于3D模型,不是所有目标都适用;受特征点检测精度影响较大 |
2D/3D几何约束 | 2D图像特征来估计目标大小和朝向,2D/3D几何约束求解目标3D中心点 | 需要非常精确的2D物体框检测;几何约束求解过程非常耗时 |
直接预测3信息 | 对3D候选进行评分,直接由图像回归3D信息 | 大量的3D候选影响算法速度;需要大量训练数据来学习3D线索 |
3. 双目3D感知
(1)双目匹配
如下图所示,根据相似三角形可以得到:
{ f z = x l x f z = x r x − B ⇒ z = f B x l − x r = f B d \left\{ \begin{array}{rcl} \frac{f}{z} = \frac{x_l}{x} \ \ \ \ \\ \frac{f}{z} = \frac{x_r}{x-B} \end{array}\right. \ \ \ \ \ \ \ \ \ \ \Rightarrow \ \ \ \ \ \ \ \ \ \ z = \frac{fB}{x_l - x_r} = \frac{fB}{d} {
zf