阅读笔记《DID-M3D: Decoupling Instance Depth for Monocular 3D Object Detection》

DID-M3D

  • 概念引入
    • 绝对深度
    • 相对深度~(本文未提到,仅作摘录扩展)~
  • 思路方法
  • 介绍/引文 Introduction
    • SMOKE的思路
  • 问题设定
  • 方法
    • Backbone
    • 3D detection
      • Keypoint Branch
      • Regression Branch
  • 实验结果

源代码:https://github.com/SPengLiang/DID-M3D

概念引入

参考博客·博客1 博客2

绝对深度

绝对深度,用RGB彩色图片表示,像素点的值代表距离摄像机的真实距离,通常用米为单位的数值来度量。常用的设备有激光测距仪,Kinect设备,通常为专业设备直接获取
阅读笔记《DID-M3D: Decoupling Instance Depth for Monocular 3D Object Detection》_第1张图片

相对深度(本文未提到,仅作摘录扩展)

由于室外场景的真实深度往往很难获取,有人就想到能不能由人工来标注深度估计的数据集,答案是肯定的。但是人工不能准确地标注出物体距摄像机多少米,而只能标注出哪些点离摄像机更近,哪些点离摄像机更远,这样标注出来的深度图就是相对深度图。使用相对深度图中作为训练数据训练出来的模型也就只能预测相对深度(比如这篇论文:Learning Ordinal Relationships for Mid-Level Vision
),其与真实深度之间差了一个基准值,这个值我们是不知道的。因此这种类型的算法在自动驾驶领域的应用是十分受限的。

思路方法

作者认为除了数据集所提供的object的直观可见的表面深度(这是仿射敏感的,进行缩放时,其深度值应相应缩放),我们还应该去促使模型去学习object的固有属性(比如车辆的尺寸、方向)(这是仿射不变的,物体的缩放不影响该部分)
我们不应该

摘要部分首先提到了一般基于单目视觉下的两个步骤:

  1. 通过一个2D检测网络生成2D平面上的建议区域,个人理解为是圈画出一张图片中可能包含目标的部分图片
  2. 通过一个3D检测网络(文中举例为RCNN),利用建议区域预测物体的3D姿态

但是本文认为如果2D检测网络结果有问题会对3D网络引入噪声
本文提出的3D目标检测通过将单个关键点估计与回归的三维变量相结合,预测每个被检测物体的三维包围框。

介绍/引文 Introduction

作者认为目前2D目标检测有着极佳的成果,但3D目标检测仍道阻且长,因为它旨在同时估计每个物体的姿态(角度、速度等)和位置。
作者认为当前比较成功的3D目标检测多依赖于昂贵的且使用寿命又短的激光雷达传感器,并不经济,而基于摄像头方案的比较划算,当然,摄像头方案也存在一些缺点:

  1. 单个相机本身无法获得整个环境的足够空间信息,单个RGB图像无法提供现实世界中的物体位置信息或维度轮廓,而激光雷达传感器则能获得一个足够立体的空间信息
  2. 双目视觉虽然可以恢复缺失的空间信息,但在许多机器人应用中,特别是无人机应用中,双目视觉很难实现。

然后作者简单介(批)绍(判)了一下以往的一些SOTA:严重依赖于基于区域的学习到的大量二维建议,这些方法通常附加一个额外的网络分支来学习三维信息或生成伪点云并将其馈送到点云检测网络。多阶段复杂过程会持续引入来自2D检测的噪声,大大增加了网络学习3D信息的难度。(即前文提到的2D检测网络结果有问题会对3D网络部分引入噪声)
作者说迄今为止还没有可靠的单目3D检测方法可以避免多阶段方法,直接从图像平面学习3D信息。

SMOKE的思路

消除了二维检测分支,变为直接估计图像平面上的投影3D点(3D盒子几何中心)。并添加3D参数回归分支,将这些参数与投影的关键点一起转换为8角表示的3D框,并使用统一的损失函数进行回归。(这种设计产生了具有两个估计线程的简单网络结构。即一个估计中心点,一个估计3D信息)

此外,作者还提出了multi-step disentanglement的方法使得每个参数在3D包围盒编码阶段和回归损失函数中都能单独发挥作用(后文中再做介绍)

问题设定

作者将单目三维物体检测问题表述如下:给定单个RGB图像I∈RW×H×3, W为图像的宽度,H为图像的高度,为每个当前物体找到它的类别标签C和它的三维包围框B,其中后者由7个变量(H,W, l, x, y, z,θ)参数化。其中,(h, w, l)表示每个物体的高度、重量和长度,单位为米,(x, y, z)为物体在相机坐标系中的中心坐标(单位为米)。θ为对应立方盒的水平偏转角。此外遵循KITTI规定将横滚角和俯仰角设置为零。
此外作者假设,相机的内在矩阵K是已知的超参。

方法

在该部分我们直接介绍网络架构,如下所示
网络架构
网络直接从单目图像中估计检测到的对象实例的3D包围框。
框架分为三个部分:

  • backbone(用于提取图片特征)
  • 3D detection
  • 损失函数

Backbone

使用DLA-34来作为backbone,因为它可以跨层聚合信息。与原来的实现相比,作者将网络中所有的BatchNorm (BN)[8]操作替换为GroupNorm (GN)[35]。在实验环节将验证此操作的作用,在后文中我们继续介绍(原文称这种调整不仅提高了检测精度,而且大大减少了训练时间)

3D detection

此处将会分为两个分支,分别为

  • Keypoint Branch
  • Regression Branch

Keypoint Branch


【2D中心点(红色)和3D投影点(橙色)】
该分支套用了Center-Net的关键点检测
(原Center-Net网络结构中也是使用的DLA-34作为backbone,此处应该是直接把整个Center-Net搬过来之后,修改了原Center-Net中的backbone,也就是将BN替换为GN)

在这里插入图片描述
这是个经典的3D世界到相机平面投影的公式,K是相机内参。
关键点被定义为物体在图像平面上的投影3D中心,而不是识别2D包围框的中心。

Regression Branch

该分支主要为每个关键点构建3D包围框,对于该部分内容,我的理解是该分支使用统计学的方法,先对数据集进行一个统计,统计出目标信息的一些信息,包括均值、方差等,从而得到目标值的一个可能范围,然后通过预测出的残差等与均值方差等进行数学代换来确定在某位置的目标信息具体值。这样就可以避免直接预测深度信息,简化训练任务。
SMOKE以中心点为核心构建3D包围框的3D信息被编组为8元组
τ = [δzxcychwl,sinα,cosα]

其中δz表示深度偏移量,先得出平移均值μ,尺度方差σ,将预测值δ视为缩放量后
如下图,得到最终的深度z在这里插入图片描述
δxcyc为heatmap中点由于下采样引起的量化误差,与centernet中一样;δhwl表示长、宽、高相对于模板的残差,和深度预测的用法类似,相对于平均值(每类单独统计均值)的长宽高进行缩放。通过下式得到最终长宽高;
在这里插入图片描述
在一些大佬的解读中,这里使用e的幂次是为了保证正数乘到均值上,结果一定为正,而在文章的loss部分又提到实际在网络输出加了sigmoid来映射:在这里插入图片描述
其中o代表网络的具体输出,-1/2是为了将eδ的值限制在值域[e-1/2,e1/2],因为长宽高相对平均值一般变化不会太大,所以这里缩放系数在1附近波动。

sinα,cosα为旋转角度α的矢量表示
该部分解释比较复杂可以参考https://zhuanlan.zhihu.com/p/452676265

接下来,作者将投影的3D点通过一个变换操作F,得到3D包围框B=F(τ)∈R3×8
回归结果的特征图大小为SrRH/R×W/R×8
在这里插入图片描述
其实从上图我们还可以发现,这八个3D信息大致可以分为3组,分别是方向θ、维度[h,w,l]、位置[x,y,z],事实上作者也是这么分的,所以在后面loss部分作者有下面一个公式在这里插入图片描述

实验结果

在这里插入图片描述

你可能感兴趣的:(目标检测,3d,计算机视觉)