Frustum PointNets for 3D Object Detection from RGB-D Data论文阅读(CVPR2018)

Main Idea

利用RGB图进行2D detection,然后取出2D detection框柱的视锥中的3D点。在视锥中接上segmentation网络对视锥进行object mask。取出mask出的object点云,接上T(ranslation)-Net对object点云中心进行微调,然后接上Box-Net对Box的center,height,width,length,heading angle进行回归。

implement

  • tensorflow
  • pointnet框架
  • pointnet++框架

Trick:

  1. 因为数据集是马路场景,所以一共就3种目标:pedestrian,car,cyclist,他们的size都有一个差不多的值。
  2. heading angle是一个角度,范围为 0 ∘ {0^ \circ } 0~ 36 0 ∘ {360^ \circ } 360

所以这两个需要回归的项目都是有范围的,对这三种目标的size进行pre-define;把 0 ∘ {0^ \circ } 0~ 36 0 ∘ {360^ \circ } 360的等分成几个bins。先对size和heading angle进行classification然后再回归size residual和angle residual。猜测目的是因为classification比regression容易,这样尽量缩小了回归的范围,容易收敛。

input

RGB-D图

output

3+4 × \times ×NS+2 × \times ×NH

  • Box中心坐标(3)
  • 1个size属于该size template的概率+size residual(长宽高)(1+3)一共有NS个size template。(4 × \times ×NS)
  • 1个heading angle属于该bin的概率+heading angle residual(1) 一共有NH个heading angle bins。(2 × \times ×NH)

method

总方法论

Frustum PointNets for 3D Object Detection from RGB-D Data论文阅读(CVPR2018)_第1张图片

实现步骤

  1. 利用成熟的2D detection的网络比如FPN找出RGB图中的object
  2. 截取这个object框住的视锥中的点云
  3. 调整坐标系(b图)
  4. 进行3D segmentation(视锥点云中是与不是Object)(mask)
  5. 截取3D segmentation中认为是Object的点云
  6. 算出Object初步的形心
  7. 调整坐标系(c图)
  8. 输入一个T-Net中回归出一个center residual
  9. 调整坐标系(d图)
  10. 输入BoxNet回归出一个Box(3+4 × \times ×NS+2 × \times ×NH个参数)
    Frustum PointNets for 3D Object Detection from RGB-D Data论文阅读(CVPR2018)_第2张图片
    Frustum PointNets for 3D Object Detection from RGB-D Data论文阅读(CVPR2018)_第3张图片

Loss Function

一共8个项目,5个regression,3个classification。
在这里插入图片描述
c1-reg是T-Net的center residual,c2-reg是box-net的center residual,实际在代码中,这两个是用同一个center-label在监督,所以我认为box-net输出的的center-residual没作用,而且监督也不是监督center residual,而是加上之前segmentation出的object的初步的centroid一起监督,也就是直接监督输出的center(毕竟因为初步的centroid是变化的,要监督center residual的话,ground-truth都不好算)。
Frustum PointNets for 3D Object Detection from RGB-D Data论文阅读(CVPR2018)_第4张图片
corner loss是本文独创,其实就是监督box的8个corner的xyz位置,这是为了结合box的angel和size还有center,防止size和center都对但是angel差很多的情况发生,8个角的位置natural整合这三者。论文里写用anchor监督,实际代码里直接用的ground truth监督的,这比anchor监督更直接更正常,corner的loss是假设前面的classification都正确,corner loss只管监督residual部分。

others

因为loss众多,数据准备花费了代码实现的大半篇幅,还有一些工具函数,计算box iou,2D iou等,实际模型文件很短。

你可能感兴趣的:(论文阅读)