概述
本文是基于图像的3D目标检测方法。
和伪点云原论文在流程上是相同的,但是基于伪点云的方法将深度图转换成伪点云之后直接使用了已有的工作,而本文中作者进行了自己的改进,包括前景分割代替实例分割,添加颜色嵌入等。
细节
整体流程
主要分为两个阶段,3D数据生成以及3D边界框预测
- 第一个阶段中,做2D目标检测和深度估计,将深度图转换成伪点云,然后基于候选框提取候选区域点云
- 第二个阶段中,首先给目标点云加上图像信息,然后进行前景分割得到目标点云,采用PointNet预测相关参数
第一阶段:3D数据生成
这部分和之前的做法一样,就是将深度图转换成伪点云,但是有一点还蛮有意思的
之前一直都是用相机的内参矩阵做的这个操作,本文作者提了可以使用encoder-decoder的结构做,但是做出来效果没什么差别,所以作者也就没采用。
第二阶段:3D边界框估计
前景分割
背景:
基于2D目标检测得到的候选框提取对应的点云,这个过程会包含很多的背景点(无用点),我们应该想办法将这部分的点去掉,只留下我们需要的目标点(前景点)就好了。
以往的做法:
Frustum 中使用3D实例分割来完成,但是存在一些问题。第一个问题是需要额外的分割标注,另一个就是伪点云和真实点云之间的差距会导致分割效果的不佳。
作者的方法:
首先计算2D检测框中的平均深度(也就代表了ROI的位置信息),并将其作为门限值。候选区域点云中z坐标的值大于门限值的点被认为是背景点。最后在前景点中采样若干个点作为当前模块的输出。(因为PointNet的输入是固定的)
疑惑:
这里好像有点含糊,是检测框中计算平均深度,剔除背景点,然后前景点投影到点云空间中;还是全部投影到点云空间中,计算平均z坐标,剔除背景点。感觉上应该是前者,但是流程图上画的是后者,可能是后者效果好吧
颜色嵌入
这部分做的是将颜色信息嵌入到伪点云中,一个直观的想法是直接将颜色信息作为额外特征加到伪点云上,也就是伪点云中点的特征从 [ x , y , z ] [x,y,z] [x,y,z]变成 [ x , y , z , r , g , b ] [x,y,z,r,g,b] [x,y,z,r,g,b],这个是好做的,但是实验结果不佳,因此作者提出了一个基于注意力机制的颜色嵌入方式,这个过程发生在上面流程图中的 D − N e t D-Net D−Net部分。
具体的过程:
使用1D卷积将伪点云对应的空间特征和颜色特征都转换到特征空间,然后从空间特征中学习到一组注意力系数,并将这一组系数作用到颜色特征上,然后将处理完之后的颜色特征添加到空间特征中作为额外的补充特征。
下面两张图分别是产生注意力系数以及产生最终的伪点云特征
3D 边界框估计
类似Frustum ,先用一个小网络估计边界框的中心点,然后再回归7个参数。
损失函数
本文的结构主要是两部分
第一部分就是用原论文作者的策略优化的
第二部分的损失类似于Frustum,包含中心点预测的损失以及7个参数回归的损失,还有角点损失。