服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

2023-12-20 16:54自动驾驶之心 编程技术

基于Pillar-based的感知算法,如经典的PointPillar、PillaNext、PillarNet等算法。Pillar-based的算法模型并不依赖3D的卷积网络来获取点云特征,而是直接将点云数据构建成柱状的数据从而实现更快的检测速度,方便后续的上车部署等任务。

写在前面 && 笔者的个人理解

目前在自动驾驶领域中,一辆自驾汽车会配备多种传感器,如:激光雷达传感器采集点云数据、相机传感器采集图像数据等。由于激光雷达传感器可以更加准确的获取待检测物体的几何和位置信息,所以基于点云的感知算法模型在快速的迭代和发展当中。目前主流的基于点云的感知算法主要分成以下两大类。

  • 一类是基于Voxel-based的感知算法,如经典的SECOND、VoxelNet等算法。Voxel-based的算法模型首先会将输入的点云数据转换成3D的体素结构表示,然后利用3D的卷积算法模型实现后续的特征提取,将提取后的3D特征送入到后续的模块当中。
  • 另外一类是基于Pillar-based的感知算法,如经典的PointPillar、PillaNext、PillarNet等算法。Pillar-based的算法模型并不依赖3D的卷积网络来获取点云特征,而是直接将点云数据构建成柱状的数据从而实现更快的检测速度,方便后续的上车部署等任务。

虽然目前基于Pillar-based的算法模型由于其部署方便、精度高而广泛采用,但目前Pillar-based的算法模型还主要使用随机初始化的方式来对2D的卷积神经网络进行初始化,这就导致很多在ImageNet上预训练的2D主干网络并未有效的被Pillar-based的算法模型利用起来,从而造成资源的浪费。除此之外,就目前来看,基于点云的感知算法模型还没有出现因模型尺寸的放大而出现精度上升的现象。而在2D检测任务当中,在大规模数据集上预训练的主干网络和更大尺寸的主干网络均展现出了更好的优势。

所以,今天解析的这篇论文就是要探索2D主干网络的规模大小和预训练对于Pillar-based的3D目标检测器的性能影响。

论文的arxiv链接如下:https://arxiv.org/pdf/2311.17770.pdf

PillarNeSt的算法解析

首先,先放出来PillarNeSt算法模型的整体框架结构,如下图所示。

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?PillarNeSt算法模型的网络框图

通过上图可以看出,PillarNeSt也是沿用了点云感知算法中经典的架构模型(CenterPoint-Pillars)作为基线模型,但是论文中的作者为了为了构建一个更强的基线模型,对原有的PointPillars算法模型进行了更改。为了读者们更加清晰的了解每个部分的更改位置,先简单列举出来CenterPoint-Pillars算法模型的几个基础模块。

  • 点云的伪图像表示:利用Pillar Encoder模块完成原始输入到模型中的点云数据向伪图像格式的表示
  • 2D的主干网络完成伪图像的特征提取
  • 利用Neck模块融合2D主干网络提取出来的多尺度特征图
  • 利用3D检测头(CenerHead)输出最终的3D检测结果
  • 根据损失函数计算损失loss,利用反向传播代码更服务器之家络的参数值

接下来就根据上述提到的每个基础模块来一步步的更改和增强,最终构建出PillarNeSt算法模型~

Pillar Encoder

在原始的CenterPoint-Pillars算法模型中,Pillar Encoder模块部分先使用一个多层感知机结构来提取点云数据的特征,然后采用Max Pooling层来提取Pillar特征。但是在本文中,作者认为仅采用一个Max Pooling层会导致信息的丢失,基于此,论文作者在原有Max Pooling层的基础上又添加了一个Mean Pooling层来获取更多的有用信息。除此之外,论文作者也引入了每个点相对于几何中心高度的偏移量作为模块的输入来补偿Z轴上的信息丢失。

In this paper, we simultaneously employ max pooling and average pooling to preserve more information. Moreover, we also introduce the height offset of points, relative to the geometric center, as the input to compensate for the information loss on the z axis.

2D Backbone的重新设计
  • 采用更大尺寸的卷积核
    论文的作者提出,在2D图像领域中,通过增加网络模型的层数或者是深度,模型的有效感受野大小并没有得到有效的增加。而针对Pillar-based的算法模型也需要对伪图像点云数据进行特征提取。受到最近几篇Large-Kernel工作的启发,作者认为通过使用更大的卷积核可以使模型的有效感受野(ERF)增加,从而增加基于点云的感知算法的检测性能。同时,论文的作者为了平衡好模型速度和精度二者之间的关系,在本文中,采用了卷积核大小为7x7的深度可分离卷积层。

Some recent works argue that large ERF can be effectively achieved by employing convolution with larger kernels. Moreover, a larger receptive field contributes to enhancing the capability of point cloud detectors.

  • 在第一层移除下采样操作
    论文的作者考虑到图像当中有很多像素的信息都是存在冗余的,而常见的2D主干网络通常都会包括步长为2的卷积层对提取的图像特征进行下采样操作,从而降低后续卷积操作的运算成本。
    但是对于点云信息而言却有所不同,由于原始的点云数据是稀疏而且是不规则的,而且包含了物体非常丰富的几何和结构信息。但是如果过早的应用下采样层就会导致点云中关键信息的损失。论文的作者基于这些考虑,在新设计的算法模型当中,删除了在第一个层存在的下采样层,从而保证了输入到后续层的分辨率,保存了输入数据的有效信息。

Our backbone design removes the stem and refrains from implementing down-sampling in the first stage block. This strategic choice ensures the preservation of the original resolution of the input features.

  • 模型早期添加更多的block
    作者指出,针对2D图像领域而言,通常都会在网络模型的后面几层堆叠更多的block来提取更抽象的语义特征,从而获取更加丰富的语义表达。但是考虑到点云数据是不规则同时也是稀疏的特点,这就意味着应该在模型的早期堆叠更多的block来完全提取出点云中包含的数据信息。作者也在论文中提到,通过实验结果也可以得出类似的结论,与在主干网络的后期堆叠block相比,在主干网络的前几层堆叠block可以获得更高的检测结果收益。

Our extensive experiments suggest that increasing the number of blocks in early stages yields superior gains compared to adding more blocks in later stages.


  • 更深层次的层
    论文的作者通过对点云的场景进行分析认为,不同物体的尺寸大小变化是非常巨大的。在针对Pillar-based的算法中而言,当Pillar的的尺寸设置为0.2m时,8倍的下采样后最大可感知范围为1.6m。然而,现实场景中的许多对象超过了有限的可感知范围。这意味着8倍下采样后的特征点不能完全感知大物体的整个物体。
    基于此,作者采用了一种简单易行的方法来缓解这个问题,在主干网络第四层的输出基础上,额外再添加一层并标记为第五层。第五层模块包含的模块数量可以根据模型的规模进行扩展。

we adopt a simple way and add one more stage (named stage-5) on top of stage-4, which contains only one or two ConNeXt blocks. The block number of stage-5 can be scaled up based on the model size. The output of added stage-5 is served as one of the multi-scale inputs of the neck network.

主干网络缩放

论文的一大目标就是希望设计出一组可以缩放的网络结构模型,从而实现模型的参数量和精度的权衡。本文中论文作者设计了一系列的2D主干网络从PillarNeSt-Tiny到PillarNeSt-Large用于满足不同的参数量和精度的要求。不同尺度的网络模型配置如下图所示

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?不同PillarNeSt模型的参数配置情况

通过上图可以看出,不同版本的模型共用相似的模型结构。每个模型包括五层结构,上文已经提到过的第一层去掉了降采样层,对于剩余的其它层都会进行降采样的操作。

论文中还对不同规模的主干网络模型提供了更加便捷的表示方法,如下图所示

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

不同PillarNeSt模型的通道数及block数统计

主干网络预训练

由于作者的另外一个目标是希望可以利用在ImageNet上预训练2D主干网络的优势,而且论文中的主干网络是基于ConvNeXt进行更改的,这就导致原有的在ImageNet上预训练的ConvNeXt无法直接迁移到新设计好的网络结构上。基于此,论文采用了两种形式的参数初始化方法,分别是基于stage view和micro view的初始化方法。

  • stage view
    直接简单地从预训练的ConvNeXt模型中复制权重,用于用于Stage1-4,而添加的最后层(Stage-5)进行随机的初始化。对于Stage1-4,如果块数小于ConvNeXt的块数,我们只根据块标识复制相应块的参数
  • micro view
    从预训练的ConvNeXt模型的前Cin个通道复制训练好的参数,而对于剩余的通道则采用随机初始化的方式赋值参数
实验部分

作者分别在nuScenes和Argoverse2数据集上来测试设计好的PillarNeSt算法模型的有效性。首先放出来在nuScenes上的结果。

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

通过实验结果可以看出,最大参数量的PillarNeSt-Large算法模型实现了64.3的mAP,较大幅度的超过了其他的基于点云的感知算法模型。

除了nuScenes数据集上的对比结果之外,论文设计的PillarNeSt在Argoverse2数据集上依旧有很好的表现。

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

通过表格结果可以看出,无论是mAP还是CDS指标,采用PillarNeSt-Base算法模型已经实现了最优的检测性能,大幅度的超过其他的基于点云的感知算法模型。

通过上面的实验表格,已经可以比较好的说明了该方法成功实现了一组可缩放的网络结构,可以根据具体的情况选择不同参数量的算法模型来达到不同的精度效果。针对论文中提出的预训练问题,论文同样给出了实验结果图,如下所示

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

实验结果已经很好的说明了,论文中设计的网络结构非常出色的继承了来自ImageNet上预训练得到的知识信息,无论是mAP还是训练损失,加载了预训练模型的效果均要优于不采用预训练模型的效果。

总结

目前虽然基于点云的感知算法已经取得了很大的进步,但是针对Pillar-base算法模型中的2D主干网络依旧采用随机初始化的方式,没有使用到来自ImageNet预训练的网络模型,同时基于点云的算法模型也没得到不同尺度规模带来的优势。

本文介绍的PillarNeSt很好的解决了上述提到的这两个问题,希望本篇解析可以给大家带来帮助。

PillarNeSt:如何进一步提升基于Pillar的3D目标检测性能?

原文链接:https://mp.weixin.qq.com/s/NJoAOyTuk9INQRJtJKz__g

延伸 · 阅读

精彩推荐
  • 编程技术WorkManager从入门到实践,有这一篇就够了

    WorkManager从入门到实践,有这一篇就够了

    一般情况下,我们大部分的操作都是在app打开的时候进行的,但是在某些情况下,即使app关闭了,我们也可能需要执行必要的动作,或者会采取一个动作,...

    程序员巴士4562021-11-25
  • 编程技术好玩又实用的查看函数图像网站Desmos

    好玩又实用的查看函数图像网站Desmos

    这个网站的最大优点,就是省去了安装数学绘图软件或计算软件的麻烦,只要打开浏览器就能使用了。看了介绍之后,可别忘了把这个好网站加到书签...

    Raven4292022-09-07
  • 编程技术JSON是什么?对JSON的简单理解

    JSON是什么?对JSON的简单理解

    一、什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言:JSON 使用 Javascript语法来描述...

    燕穗子博客9272023-08-22
  • 编程技术开源的最大谎言

    开源的最大谎言

    开发人员对开源软件有很多假设,因为我们通常不会为此付费。话虽这么说,这些假设是错误的,并影响到项目本身及其作者和维护者的生活。...

    今日头条11492021-02-27
  • 编程技术鸿蒙轻内核M核源码分析系列之Newlib C

    鸿蒙轻内核M核源码分析系列之Newlib C

    LiteOS-M内核LibC实现有2种,可以根据需求进行二选一,分别是musl libC和newlibc。本文先学习下Newlib C的实现代码。文中所涉及的源码,均可以在开源站点。...

    鸿蒙社区7342022-01-12
  • 编程技术五分钟了解一致性哈希算法

    五分钟了解一致性哈希算法

    一致性哈希算法是一种常用的分布式算法,其主要用途是在分布式系统中,将数据根据其键(key)进行散列(hash),然后将散列结果映射到环上,再根据数...

    小许code7862023-12-12
  • 编程技术一文读懂何为私域流量(附案例模型拆解)

    一文读懂何为私域流量(附案例模型拆解)

    近两年,随着微信社群营销的兴起,互联网里面兴起一种爆火的变现模式,那就是把流量承接到微信个人号或者社群里面,然后通过活动,促销,私聊等方...

    鸟哥笔记10672021-04-09
  • 编程技术Git 教程之创建仓库详解

    Git 教程之创建仓库详解

    本文主要介绍Git 创建仓库的知识,这里整理了相关资料及简单示例代码,帮助大家学习理解此部分的知识,有兴趣的小伙伴可以参考下 ...

    菜鸟教程4982020-08-02