论文阅读:《Rethinking Pseudo-LiDAR Representation》

Rethinking Pseudo-LiDAR Representation

  该论文是商汤2020年发表在ECCV上的一篇论文。2018年的CVPR论文《Pseudo-LiDAR From Visual Depth Estimation: Bridging the Gap in 3D Object Detection for Autonomous Driving》使用视觉伪点云来进行单目3D目标检测,获得了大幅性能提升,并将性能提升归因为数据表达形式。商汤在该论文中提出了不一样的观点。

  1. 论文链接:https://arxiv.org/abs/2008.04582
  2. 论文代码:https://github.com/xinzhuma/patchnet

1. 论文动机

  视觉3D检测方法在当时基本可以分成两个“流派”:基于图像表征的方法和基于伪点云表征的方法。

  基于图像表征的方法中,比较出名的有Mono3D、MonoDIS、M3D-RPN等。从图像预测目标3D信息的难点在于,2D图像到3D世界的映射是一个ill-posed problem,天然少了一维深度信息。所以基于图像表征的方法大体上是通过增加人工设计的先验知识来辅助网络学习,比如目标尺寸、地平面假设、2D检测框约束。

  基于伪点云表征的方法最开始由论文《Pseudo-LiDAR From Visual Depth Estimation: Bridging the Gap in 3D Object Detection for Autonomous Driving》提出,后文统一将该方法简称为pseudo-LiDAR。pseudo-LiDAR极大地缩小了视觉3D和激光3D检测方法之间的差距,其方案非常简单明了,就是模仿激光3D检测的Pipeline,但激光3D检测输入的是点云数据,没有怎么办?直接用单目深度生成伪点云,然后再用现成的激光3D检测模型从伪点云中进行目标检测。从结果上看,基于伪点云表征的方法性能普遍高于基于图像表征的,虽然pseudo-LiDAR作者指出两类方法性能差距主要是数据表征方式的不同,但该观点一直缺乏直接证据的支撑,其正确性值得考究。

  为了弄清基于伪点云表征的方法为什么能取得这么大的性能提升,作者构建了一个名为PatchNet-vanilla的模型,除了输入数据表征方式不同外,其余和pseudo-LiDAR保持一直,是pseudo-LiDAR的等价实现。通过该等价模型,作者用实验证明了数据表征形式和3D检测性能没有任何关系,真正起作用的是图像坐标系到激光坐标系的坐标转换。 PointNet是一种针对point的CNN,相比标准CNN的发展还没有那么充分,如果摆脱伪点云输入格式的限制,那么就能使用更成熟的CNN结构,理论上可以获得比PointNet更好的性能,基于这个假设,作者提出了PatchNet,也确实获得了超出pseudo-LiDAR的性能表现。

2. 方法介绍

  方法分成两部分来介绍:PatchNet-vanilla和PatchNet,第一个模型主要是为了验证输入数据表征形式对性能的影响,第二个模型是PatchNet-vanilla的增强版,主要是为了达到更好的性能。

2.1 PatchNet-vanilla

  作者将pseudo-LiDAR分成四个步骤:
  Step1:深度估计 给定一张单目图像或双目图像对,使用独立的模型预测每个像素 ( u , v ) (u,v) (u,v)对应的深度值 d d d
  Step2:2D检测 使用另一个CNN生成2D目标的区域提议。
  Step3:3D数据生成 根据Step2生成的区域提议将感兴趣区域从Step1生成的深度图中抠下来,然后利用相机内参将深度值转化为3D世界坐标 ( x , y , z ) (x,y,z) (x,y,z)
  Step4:3D目标检测 将Step3生成的伪点云视为激光信号,并使用PointNet预测结果。PointNet将点云视为无序点集 { x 1 , x 2 , … , x n } \{x_1,x_2,\dots,x_n\} { x1,x2,,xn},并通过一个集合函数 f f f将点集映射到输出向量: f ( x 1 , x 2 , … , x n ) = γ ( max ⁡ i = 1 , … , n { h ( x i ) } ) (1) f(x_1,x_2,\dots,x_n)=\gamma(\max_{i=1,\dots,n}\{h(x_i)\}) \tag{1} f(x1,x2,,xn)=γ(i=1,,nmax{ h(xi)})(1)其中 γ \gamma γ h h h是MLP。

  PatchNet-vanilla的前三步和pseudo-LiDAR完全一样,第四步会有所差别。如图2所示,PatchNet-vanilla将 M M M个3D点重构成 N × N × 3 N\times N \times 3 N×N×3的图像块,作为PatchNet-vanilla的输入,然后可以使用一个 1 × 1 1\times 1 1×1接收域的2D卷积层以及一个全局最大池化来实现式(1)一样效果的函数。最终性能如表1所示,可以看到PatchNet-vanilla获得了和pseudo-LiDAR几乎一样的性能,这也证明了伪点云的数据表征形式不是必要的。

2.2 PatchNet

  在PatchNet中,首先训练两个CNN分别用于预测2D框和深度图,对于每个检测到的2D目标框,从深度图中抠出对应的区域,利用相机内参将深度值转换成3D空间坐标(得到Fig.3中的cropped patches)。紧接着用一个主干CNN提取这些ROI的深层特征,然后使用mask global pooling分离出前景目标特征,最后通过一个检测头来进行回归目标的3D框 ( x , y , z , h , w , l , θ ) (x,y,z,h,w,l,\theta) (x,y,z,h,w,l,θ)

  mask global pooling是论文提出了一种增强版global pooling方式,利用一个二值掩模(通过卡阈值的方式从深度图中获得)只对前景目标的特征进行global pooling操作,以获得更加鲁棒的特征。

  检测头则是针对KITTI定制化设计的,简单、中等、困难样本分别对应一个检测头,因此增加了一个样本困难程度分类器。

3. 实验结果

3.1 什么才是影响检测性能的关键因素

  PatchNet效果如表2所示,其中AM3D是另一种基于伪点云的视觉3D检测方法,它通过将RGB值和伪点云融合的方式提升性能。作者将pseudo-LiDAR和AM3D的伪点云表征方式替换成图像表征方式,分别对应PatchNet-vanilla和PatchNet-AM3D,可以看到两种方法在替换数据表征方式后的性能都基本持平。说明数据表征不是影响3D检测性能的关键因素。

  为了验证输入模型的数据中哪些字段是真正起作用的,作者进行了表3中的实验。从前3行实验数据可以看出,像素对应的世界坐标值 ( x , y , z ) (x,y,z) (x,y,z)每一维对于3D检测性能都有正面作用。但如果直接输入视觉深度的预测值 ( u , v , z ) (u,v,z) (u,v,z),性能是远远不如直接输入世界坐标的 ( x , y , z ) (x,y,z) (x,y,z) ( u , v , z ) (u,v,z) (u,v,z) ( x , y , z ) (x,y,z) (x,y,z)之间的差了一步像素坐标系到相机坐标系的坐标转换,因此作者提出:相比数据本身的表征,坐标系转换才是影响性能的关键因素

  但这个结论本人持怀疑态度,像素坐标系到相机坐标系转换只涉及相机内参,以及相机坐标系到激光坐标系的转换矩阵,我不觉得区区几个相机参数CNN都没法过拟合。虽然说KITTI每天都会对传感器进行重新标定,但理论上在传感器的安装位置和姿态没有有明显变化的条件下,标定参数数值的变化幅度也非常有限,除非采集数据过程中由于设备老化或者碰撞事故导致传感器架设发生较大变化。如果要作者的结论要成立,我觉得至少得加一个实验,证明模型无法学习 ( u , v , z ) (u,v,z) (u,v,z) ( x , y , z ) (x,y,z) (x,y,z)的映射才可以。

3.2 PatchNet的优化点

  作者提出,相比PointNet这类新兴的针对点云的3D主干,标准的2D主干发展的更成熟,能够获得更好的性能,不同主干的性能对比结果如表4所示。

  mask global pooling的消融实验结果如表5和图4所示,可以看到分离前景目标还是能够将模型的注意力集中到目标本身。

  第三点改进就比较定制化了,针对KITTI数据集简单/中等/困难设立3个检测头分别预测,不过作者后来发现,使用距离对不同目标进行分区检测能够获得更好的性能,感觉上是一种3D空间中的多尺度策略。

3.3 横向对比结果

  PatchNet和其他视觉3D检测算法的性能对比如下表所示,其中PL-FPointNet就是前文表格中的psedudo-LiDAR方法。

猜你喜欢

转载自blog.csdn.net/qq_16137569/article/details/123769737