Zhangzhe's Blog

The projection of my life.

0%

FCOS3D: Fully Convolutional One-Stage Monocular 3D Object Detection

URL

TL;DR

  • 本文基于 FCOS 论文提出一种架构简单的 Anchor Free 的单目 3D 检测算法 FCOS3D,在 NeurIPS 2020nuScenes 3D 检测比赛纯视觉赛道上取得了第一名。

Algorithm

问题定义

  • 本文提出的 FCOS3D 要解决的核心问题是一个 图片到 7-DoF 属性(x, y, z, w, l, h, yaw+dir)的预测

    • DoF 是指 degree of freedom(自由度)。

    • (x, y, z, w, l, h, yaw+dir) 分别表示物体在相机坐标系下的 3 维坐标和长宽高(单位都是米),和偏航角(俯视图角度,单位是弧度)和方向 2 分类共同构成朝向。

  • 对于 nuScenes 3D 检测比赛,还需要解决的非核心问题包括:

    • 预测出的 3D 框物体的类别(10类物体)

    • 预测出的 3D 框物体的属性(9种属性)

    • 预测出的 3D 框物体的 x, y 轴速度(不是 “病态” 问题了,已经属于癌症问题了…)

网络结构

fcos3d.png

  • backboneFPN 比较常规

  • decode headFCOS 一样,使用了不同 level feature 的参数共享(反正是全卷积,不存在 shape 问题)

  • decode head 中包括:

    • 分类分支:

      • class: output_shape = (N, 10, H, W),使用 FocalLoss

      • attribute: output_shape = (N, 9, H, W),使用 CrossEntropyLoss

    • 回归分支:

      • box: output_shape = (N, 9, H, W)(dx, dy, log(z), log(w), log(l), log(h), yaw, vx, vy),使用 SmoothL1Loss

      • centerness: output_shape = (N, 1, H, W),使用 BCEWithLogitsLoss

      • direction: output_shape = (N, 2, H, W),使用 CrossEntropyLoss

target 设置

  • target 设置中使用了很多 2D 引导 3D 的思想。

(x, y, z) target 设置

  • 由于是 3D 检测,所以 GT 的 3D 框坐标(x, y, z, w, l, h)单位都是米,这对神经网络是不友好的(因为神经网络看到的是像素,预测以像素为单位更容易)。

  • 因此,本文实际是一个 2.5D 的预测(xy 2D, z 3D),实际预测的 x, y 是像素坐标系下相对于 feature map 每一个点的偏移量(由相机坐标系和相机内参可计算得到像素坐标系),z, w, l, h 的预测是相机坐标系下的米为单位的真值取 log

centerness target 设置

  • FCOS 不同,FCOS3D centerness: c=eα((Δx)2+(Δy)2)c = e^{-\alpha((\Delta x)^2+(\Delta y)^2)}α=2.5\alpha=2.5

yaw target 设置

  • 本文将 yaw (0 ~ 2π2\pi)编码成 yaw (0 ~ π\pi)和方向

正样本选择

  • FCOS 是将 feature map 上的每个位置到 GT 中心点的距离小于 1.5 * stride 的点作为正样本。

  • FCOS3D3D 检测,没办法直接使用 FCOS 提出的方法;解决方法和 x, y 坐标回归方法类似,如果 2.5D 坐标下的 x, yfeature map 位置距离小于 1.5 * stride,则算作正例。

GT 尺度分配

  • FCOS 思想一样

不同尺度 feature map 缩放

  • FCOS 思想一样,只是更丰富 scale.shape == (num_of_level, 3),分别表示 scale_offset(for xy) / scale_depth(for z) / scale_size(for wlh)

Thought

  • 本文极大程度的借鉴了 FCOS,相当于 FCOS2.5D

  • 加入了很多 trick: log(z), centerness target 定义,encode yaw 等,很 work