Posts /

Point Cloud 3D Object Detection - A Summary

Twitter Facebook
13 Nov 2018

Point Cloud 3D Object Detection - A Summary

近期在做点云感知方面的工作,所谓感知,当然包括目标检测/跟踪、分割、depth、SLAM 等多个方面,目前我的工作重点在目标检测方面,在本文中,我将对近期阅读的一些论文,以及它们的结构演进,我的实践和经验总结,以及如何将这一模块部署到嵌入式设备上,做一个全面且细致的介绍。

[TOC]

1. Background

在自动驾驶场景中,LiDAR 广泛应用于目标检测、SLAM、双目等领域。基于激光雷达的目标检测,就是要根据图像和对应的点云,准确的检测出车辆、行人、汽车人等物体的 3D Bounding Box。目前常用的数据集有 KITTI,Nuscenes, BDD 等。本文主要介绍基于点云或者结合图像进行 3D 目标检测方面的工作进展。

2. Data Overview

2.1 RGB/RGB-D

RGB-D 顾名思义,就是带有 Depth 信息的 RGB 图片。RGB-D图像其实是两幅图像:一个是普通的RGB三通道彩色图像,另一个是Depth图像。Depth图像类似于灰度图像,只是它的每个像素值是传感器距离物体的实际距离。通常RGB图像和Depth图像是配准的,因而像素点之间具有一对一的对应关系。常用的数据集有以下一些:

2.2 LiDAR

LiDAR 的全称是 Light Detection and Ranging(激光探测和测量),也就是激光雷达;是利用GPS(Global Position System)和IMU(Inertial Measurement Unit,惯性测量装置)机载激光扫描。其所测得的数据为数字表面模型(Digital Surface Model, DSM)的离散点表示,数据中含有空间三维信息和激光强度信息。如下图所示:

生产激光雷达的厂家有很多,比如大名鼎鼎的 Velodyne,还有 HESAI 等,激光雷达一般长这个样子:

拿 KITTI 的数据举例,每帧点云大约有 12 w 个点,包含 (x, y, z) 以及对应的 intensity。intensity(强度/反射值) 指的是某个位置有多少百分比的点被反射了回来,在实际的应用场景中,由于各家的激光雷达的品质不同,以及在不同的场景中,反射值较不稳定,因此一般我们主要使用 x,y,z 来进行目标检测。

2.3 Data Annotation

有了数据,如何准确的进行标注,可以说是整个点云感知任务中,最困难的一部分。

在学术届,我们只需要方便的使用公开的已标注好的数据集,比如 KITTI,这些数据大都很标准,没有什么误差,以至于我们不知道哪些地方会产生误差。这就是学术界和工业界不同的地方,要想让自己的算法落地,就需要自己搭建采集数据的车,设计好整个采集车的框架;数据采集回来之后,需要进行清洗、校正,然后在送到标注团队受伤进行标注。

要想标注质量达标,离不开准确好用的标注工具。所以需要在标注工具中充分利用自己采集到的数据,并且最大程度简化标注人员的工作量,这意味着我们可能需要使用训练好的模型预刷一遍数据,再给标注人员。同时,针对训练过程中发现的标注错误的 boxes,需要一遍遍对标注进行迭代。

再返回去说采集车的问题,相机、雷达的坐标系是不同的,而且它们采集数据的频率也不同步,如果没有预先设置好同步,则需要手动对图片和点云进行同步。收集到的照片也是不能直接用的,对于双目、SLAM、以及结合图片进行 3D 感知的任务来说,我们还需要对图像进行畸变校正,这又离不开准确的对相机内外参进行标定。

一般来说,数据采集车会同时接很多路摄像头,如何准确的联合标定好所有的相机参数,也是一个十分复杂的问题。关于相机标定的简单介绍,可以参考这里:https://blog.csdn.net/a083614/article/details/78579163

激光雷达的标注过程中,如果没有图像的辅助,很难判断某个位置是否有物体,以及是什么类型的物体,这个物体有多大。因此,即使是只使用 LiDAR 进行感知的模型,其数据也免不了需要使用图像进行辅助标注。

在实际使用中,不同品牌的激光雷达的数据间存在较明显的 Domain gap,需要针对不同地点的数据、不同的激光雷达进行调整。

Last but not the least,鉴于国庆复杂,我们会发现很多 KITTI 中没有的 objects,比如老年代步车,两截大巴,三轮车,货车车匣里装满了人等等复杂的场景,这些都给真实场景中的感知带来了层层阻碍。

3. Architectures

目前主要有三种方式进行 3D Box 的检测,一种是只基于图像的方法;另一类是只利用点云进行感知的方法;以及基于图像和点云融合的方法。从目前 SOTA 的结果来看,只利用点云就可以做到非常好的效果,下面将一一介绍。

3.1 Image based

3.1.1 3D Bouding Box Estimation Using Deep Learning and Geometry

关于什么是位姿:

https://www.leiphone.com/news/201802/BLRhMfwMC7dlT3iQ.html

https://www.zhihu.com/question/51510464/answer/132005467

本文解决的问题是,从 2D 检测框回归初物体的 3D 边界框。

核心思想:

文章通过一张图片获取图像中的3D物体以及位姿,相对于目前只能回归物体3D方向的技术,我们的方法利用深度学习网络和2D物体Bounding box的几何约束生成一个完整的3D Bounding Box 和 6个自由度的位姿(位置和角度), 注意:先回归方向和尺寸,在结合几何约束产生3D位姿。 第一层网络输出一个混合离散-连续损失(MultiBin)来表示3D物体的方向,这个损失优于L2. 第二层网络回归3D物体的尺寸(可以从很多物体类别中得到先验)

创新点:
  1. 一种通过2D bounding box (方向和大小由CNN产生) 和几何约束(几何投影)估计物体3D位姿和尺寸。
  2. 一个叫MultiBin回归的离散-连续 CNN 结构用来估计物体的方向。
  3. 相对原来的KITTI数据库,只有3D box 方向的估计,文章提出了三个另外的判断3D box精度效果指标:box 中心离相机的距离,最近的bounding box 离相机的距离,所有的bounding box 跟ground truth 的 overlap(通过 3D intersection over Union (3DIoU))。
  4. 方法在KITTI 车辆数据库中的良好表现
  5. 在Pascal 3D+ 数据库的视角估计。

本文基于的一个前提是:

that the perspective projection of a 3D bounding box should fit tightly within its 2D detection window.

一个物体的 3D 框用一个 9 自由度的量来表示,Center T,Dimension D 和 Orientation R。给定了物体在相机中的位姿 (R, T) 和相机内参 K,那么一个 3D 空间中的点和 2D 空间的映射为:

例如X0=[dx/2,−dy/2,dz/2]TX0=[dx/2,−dy/2,dz/2]T 和2Dbb左边的最小的xminxmin 链接,点到带你的对应约束可以如下方程: xmin=(K[R T][dx/2,−dy/2,dz/2,1]T)xxmin=(K[R T][dx/2,−dy/2,dz/2,1]T)x

The constraint that the 3D bounding box fits tightly into 2D detection window requires that each side of the 2D bounding box to be touched by the projection of at least one of the 3D box corners.

也就是说,3D box 的每个点,经过映射都要落在 2D box 的至少一条边上。

由于相机内参 K 是定值,因此本文需要解决的问题就是,如何求得旋转矩阵 R,平移向量 T,目标中心 X0。即确定物体的方向和尺寸。具体来说就是要确定9个自由度:旋转矩阵R (3个自由度:方位角、俯仰角、翻滚角)、平移向量T (3个自由度:xyz方向)、X0(3个自由度:长宽高)。

那么,如何选择需要回归的参数呢?

选择的第一组回归参数是第一组参数是围绕每个轴的方向(θ,φ,α);第二组参数是3D边界框尺寸,因为边界框的尺寸变化较小,且如果对2D检测结果进行了分类得到物体类别时,物体的平均尺寸就可以得到,从而可以回归物体真实尺寸与类平均尺寸的差,而不是平移矩阵T,因为尺寸估计的方差比较小(先验所有的车具有相同的大小) 也不会因为物体的方向角变化而变化。。

回归了方向(θ,φ,α)和尺寸,则根据上面的公式,就可以求T,具体做法:https://cs.gmu.edu/~amousavi/papers/3D-Deepbox-Supplementary.pdf

Correspondance Constraints

通过CNN获取的 3Dbb 的方向角和尺寸以及 2Dbb 的约束,最小重投影误差就可以得到平移矩阵 TT 详细的处理过程可以参考上面的补充材料。

2D detection box 可以对应到 3Dbb 8个角点 中的任意一个,这样可能性就有 84=409684=4096 种, 很多情况下我们假设物体是朝上的。2Dbb 上面和下面的只对应3D box 的上部和下部,可能性就降为 10241024 种, 另外当物体的roll 为0 的时候,2D box 的边坐标 xmin,xmaxxmin,xmax 就是可以对应3Dbb 的边。相似的,ymin,ymaxymin,ymax 只对应水平3D box 的点。因此, 每个2D detection box的垂直边 对应[±dx/2,..,±dz/2][±dx/2,..,±dz/2],

每个2D detection box的水平边 对应[±dy/2,..,±dz/2][±dy/2,..,±dz/2] 因此得到的 44=25644=256 种。 在KITTI 数据库中,物体 pitch 和 roll 的角度都是零,所以随后得到 64 种的映射关系。如下图所示:

3.2 LiDAR based

3.2.1 VoxelNet

3.2.2 PIXOR

3.3 Fusion Methods

3.3.1 MV3D

4. Optimization

4.2 Regression Target / Loss Design

4.3 Input Feature Design

4.4 Time/Accuracy Tradeoff

5. Deploy on Embedded Devices

5.1 Mobilenet v1/v2 and its Variants

5.2 Quantized Neural Networks

6. Future

6.1 Detection based on Tracking on LiDAR


Twitter Facebook