• 【3D目标检测】Rethinking Pseudo-LiDAR Representation


    概述

    本文是基于图像的3D目标检测算法。
    贡献:

    • 作者认为基于伪点云的3D目标检测算法效果好的原因并不是伪点云这种数据表示本身,而是坐标系的转换。
    • 对于深度图,作者采用图像表示而不是伪点云的表示,之后采用2D CNN处理,成为了新的SOTA

    ps:点云【3D目标检测】Monocular 3D Object Detection with Pseudo-LiDAR Point Cloud

    细节

    证明基于伪点云的3D目标检测算法效果好的原因并不是伪点云这种数据表示

    作者构建了一个基于伪点云表示的目标检测器和一个基于图像表示的目标检测器,两者除了深度图的表示不同其余部分都相同。

    实验中的深度图表示成伪点云的方法:

    • 使用一个CNN对输入图像做深度估计得到深度图
    • 使用另一个CNN进行目标检测得到ROI
    • 在深度图中裁剪ROI对应的部分
    • 基于相机成像原理的逆过程将像素坐标和深度图转换成3D坐标,并将3D坐标使用伪点云进行表示
    • 使用PointNet类的方法进行检测(也就是转换成高维特征,在使用max pool得到全局特征,基于这个特征进行检测)

    实验中深度图表示成图像的方法(PatchNet-vanilla):

    • 使用一个CNN对输入图像做深度估计得到深度图
    • 使用另一个CNN进行目标检测得到ROI
    • 在深度图中裁剪ROI对应的部分
    • 基于相机成像原理的逆过程将像素坐标和深度图转换成3D坐标,并将3D坐标使用图像进行表示
    • 使用CNN的方法(效果与上面类似,使用 1 ∗ 1 1*1 11卷积得到高维特征图,然后使用全局maxPooling得到全局特征,基于这个特征进行检测)

    可以发现,前三步是一模一样,第四步中只有深度图表示不一样,第五步思想一样,也就是说两个实验的设置中几乎只有深度图表示这一项不一样。
    左图就是伪点云的表示,每个点对应3个特征,总共有M个点;右图是图像的表示,总共有 N ∗ N = M N*N=M NN=M个像素,每个像素对应3个通道,完全一样的数据,就是表示或者理解不同而已。
    在这里插入图片描述
    下面是实验的结果:一二行是同样的结构两次训练的结果(为了消除实验设置的影响),可以发现两个实验的结果几乎是相同的,那么通过实验也就证明了作者的观点,算法的效果和深度图的表示没有关系。
    在这里插入图片描述

    基于深度图的图像表示的算法PatchNet

    基于上面的发现,作者就有了新的想法,既然效果一样,那就可以用基于深度图的图像表示来做了。
    因为基于图像的表示可以采用成熟的2D CNN做,并且是端到端的,而且生成的图像是稠密的(因为点云的稠密的或者说是对原图上所有的点进行了深度估计得到的),而基于伪点云的表示只能采用基于点云的方法做,后者一方面没那么成熟,另一方面伪点云与真实点云也存在不同(点密度、局部不对齐、长尾问题,详情见【3D目标检测】Monocular 3D Object Detection with Pseudo-LiDAR Point Cloud)。

    算法流程:

    • 使用一个CNN对输入图像做深度估计得到深度图
    • 使用另一个CNN进行目标检测得到ROI
    • 在深度图中裁剪ROI对应的部分
    • 基于相机成像原理的逆过程将像素坐标和深度图转换成3D坐标,并将3D坐标使用图像进行表示
    • 使用一个特征提取网络提取ROI的特征,并使用掩码全局池化(mask global pooling )以及前景掩码(foreground mask)进行特征过滤(实现类似于硬注意力机制的过程)
    • 用检测头进行相关参数的回归
      在这里插入图片描述

    骨干网络:作者采用了ResNet-18+SE模块

    掩码全局池化(mask global pooling ):就是对特征提取网络中得到的特征做了一个mask,后面的全局最大池化只对前景做,能够使得特征更具有鲁棒性
    mask生成:主要参考了【3D目标检测】Accurate Monocular Object Detection via Color-Embedded 3D Reconstruction for AD中前景分割的部分,关键就是在深度图中设置门限值,作者在每个patch的平均深度的基础上添加一个偏移作为门限值,小于这个门限的就是前景,否则就是背景。
    检测头:检测头是专门为KITTI数据集设计的,三个分支对应三个难度,每个分支预测7个参数。为了避免无效计算,设置了一个小模块用来预测难度,然后使用对应难度的分支。
    损失函数:参考了 【3D目标检测】Frustum PointNets for 3D Object Detection from RGB-D Data 的损失函数,分别计算中心点、尺寸和航向角的损失,并且额外使用角点的损失。
    在这里插入图片描述

    证明基于伪点云的3D目标检测算法效果好的原因是从图像到点云坐标系转换的过程

    因为上面的实验证明了基于伪点云表示的方法和一个基于图像表示的方法是等价的,因此作者对图像表示方法中的中间图像进行了消融实验,证明了从图像到点云坐标系转换的过程的重要性。(我感觉最多就只能证明这个过程的重要性,要说它是决定性因素,实验未免太少了吧。)

    实验做法就是深度图的图像表示中有3个patch,选中其中的一部分,效果不好,说明需要完整的3D数据;将得到的点云坐标系下的3D坐标 ( X , Y ) (X,Y) (X,Y)转换成原始图像坐标系下的2D坐标 ( x , y ) (x,y) (x,y),效果差了,说明深度图代表的深度信息应该在点云坐标系下使用3D坐标表示而不是原始图像坐标系下的2D坐标表示。
    在这里插入图片描述

    本文提到的坐标系转换不一定是真正的本质原因,但是给这种提升数据做3D目标检测的算法开拓了新的思路。

  • 相关阅读:
    C/C++标准库和标准模板库总结
    自然语言处理基础——词表示
    【雷达通信】Matlab实现广义自适应多项式窗函数
    docker 已经配置了国内镜像源,但是拉取镜像速度还是很慢(gcr.io、quay.io、ghcr.io)
    Flutter笔记:拖拽手势
    Git基础(一)——Git
    跳槽字节跳动社招Java面试分享
    让你认识C++中的模板
    java毕业设计希望酒店信息管理系统mybatis+源码+调试部署+系统+数据库+lw
    从小朋友抢饼干想到的传统思想和管理学智慧
  • 原文地址:https://blog.csdn.net/qq_44173974/article/details/128154396