方向的概念

单目相机的 3D 目标检测,是从 2D 图像中估计目标的 3D BBox,包括位置、尺寸和方向。其中,目标方向估计是很重要的一环。

在单目相机 3D 视觉检测中,需要先理解一组重要概念:Egocentric 自我中心Allocentric 客体中心

这两个概念来自空间认知领域。Egocentric Frame 是基于观察者自身位置和方向建立的参考系,也就是以个体身体和感官输入为锚点。例如,当你站在房间里转头环顾四周时,你对房间中物体的感知,是基于你自己的位置和朝向:你左边的物体在你的左边,右边的物体在你的右边。

Allocentric Frame 则基于环境中物体之间的空间关系,不依赖观察者自身的位置或方向。比如你看一张房间平面图时,房间中的物体是相对于彼此在地图上表示,而不是相对于你在房间内的位置和朝向表示。

在自动驾驶领域,据 Patrick Langechuan Liu 的理解,Egocentric 指相对于相机或自车坐标系的方向,Allocentric 指相对于目标物体观察关系的方向。因此,Egocentric 也可以称为车辆全局方向,因为它的参考系是自车或相机坐标系;即使观察对象发生变化,同一个全局朝向本身也不会改变。Allocentric 则常被称为局部方向或观察角,参考关系会随着目标在图像中的位置变化而变化。

Egocentric 和 Allocentric

上图可以帮助理解 Egocentric 和 Allocentric。在图 (a) 中,目标汽车的全局方向都是向右的,但是当汽车在图像中移动时,局部方向和外观形状会变化。在图 (b) 中,目标汽车的全局方向不同,但是局部方向和外观形状保持不变。

可以看出,单目图像中物体的外观更直接地取决于局部方向,而我们通常只能根据外观来回归汽车的局部方向。如果要使用局部 \textstyle Yaw 来计算全局 \textstyle Yaw,就需要知道相机和目标之间的光线方向,这个方向可以通过目标在 2D 图像中的位置计算:

光线方向

光线方向的角度可以由 2D 位置中的关键点、相机主点和焦距计算得到。2D 关键点的选取规则有:

  • BBox 的中心,不过目标遮挡或截断时会产生偏差。
  • 模糊 BBox 的中心,可用于被遮挡或截断物体的扩展区域。
  • 3D BBox 在 pixel 上的投影。
  • 2D BBox 的底部中心,通常认为它位于地平面上。

若车辆距离很近,或者车辆被遮挡导致 BBox 截断,上述方法可能会产生 1 到 2 度的误差。

在 KITTI 数据集中

KITTI 数据集中,检测物体的 2D bbox 提供了两个与方向相关的角度:

  • \textstyle \alpha:物体的观察角度,范围为 \textstyle [-\pi,\pi],对应 allocentric 局部观察角。
  • \textstyle rotation_y:物体绕相机坐标系 \textstyle y 轴的旋转角,范围也是 \textstyle [-\pi,\pi],对应 egocentric 全局偏航角。

二者之间需要结合目标中心在相机坐标系下的位置进行转换。若目标中心坐标为 \textstyle (x,z),常见关系为:

\textstyle \alpha = rotation_y - \arctan2(x,z)

反过来:

\textstyle rotation_y = \alpha + \arctan2(x,z)

实际使用时,计算结果还需要归一化到 \textstyle [-\pi,\pi]

此外,KITTI 提供了关于方向估计的指标:Average Orientation Similarity(AOS,平均方向相似度)。AOS 的数值被 normalize 到 0 到 1 之间,数值越大,估计效果越好。具体推导过程见 Are We Ready for Autonomous Driving? The KITTI Vision Benchmark Suite

\textstyle AOS = \frac{1}{11}\sum_{r \in \{0,0.1,\ldots,1\}}\max_{\tilde{r}:\tilde{r}\geq r}s(\tilde{r})

在公式中,\textstyle r = \frac{TP}{TP+FN},即 recall。\textstyle s(r) 被定义为:

\textstyle s(r)=\frac{1}{|D(r)|}\sum_{i\in D(r)}\frac{1+\cos\Delta_{\theta}^{(i)}}{2}\delta_i

其中,\textstyle D(r) 为 recall 为 \textstyle r 时的所有检测结果集合,\textstyle \Delta_{\theta}^{(i)} 是第 \textstyle i 个检测结果的估计方向和 ground truth 方向之间的角度差。为了避免单个物体出现多个检测 bbox,如果检测 \textstyle i 被分配至某个重叠大于 50% 的 ground truth bbox,则认为 \textstyle \delta_i = 1,否则为 \textstyle 0

此外,还可以用 Average Angular Error(AAE,平均角度误差)来描述方向估计误差,参考 3D-RCNN 中的相关定义。


参考文章

[1] Orientation Estimation in Monocular 3D Object Detection

[2] Are We Ready for Autonomous Driving? The KITTI Vision Benchmark Suite

[3] 3D-RCNN: Instance-Level 3D Object Reconstruction via Render-and-Compare