Pointpillar 论文解读

news2024/11/29 9:00:17

Pointpillar 论文解读

主要贡献:

  • 这篇文章的主要贡献在于 “Fast Encoder”, 也就是将点云稠密的Pillar(上文提到2847个)**输入给网络,**这才是这篇论文的精髓所在, 这大大提升了识别速度, 论文写可以达到62Hz.
  • 仅使用2D卷积层进行端到端学习
  • PointPillars uses a novel encoder that learn features on pillars (vertical columns) of the point cloud to predict 3D oriented boxes for objects.PointPillars 使用了一种新颖的编码器,它学习点云支柱(垂直列)上的特征来预测对象的 3D 定向框。
    • First, by learning features instead of relying on fixed encoders, PointPillars can leverage the full information represented by the point cloud.首先,通过学习特征而不是依赖固定的编码器,PointPillars可以利用点云表示的全部信息。
    • Further, by operating on pillars instead of voxels there is no need to tune the binning of the vertical direction by hand.此外,通过对柱子而不是体素进行操作,不需要手动调整垂直方向的分箱。
    • Finally, pillars are highly efficient because all key operations can be formulated as 2D convolutions which are extremely efficient to compute on a GPU.最后,支柱非常高效,因为所有关键操作都可以表述为2D卷积,这在GPU上计算非常高效。
    • An additional benefit of learning features is that PointPillars requires no hand-tuning to use different point cloud configurations. For example, it can easily incorporate multiple lidar scans, or even radar point clouds.学习特征的另一个好处是 PointPillars 不需要手动调整来使用不同的点云配置。例如,它可以很容易地合并多个激光雷达扫描,甚至雷达点云。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  1. 点云和图像的区别?

    • 两个主要区别:1)点云是一种稀疏表示,而图像密集,2)点云是 3D,而图像是 2D。

    • 因此,来自点云的目标检测不容易适用于标准的图像卷积管道。

  2. 数据处理流程是怎样的,点云怎么生成伪图像?

    • lidar-based,数据上只使用激光雷达。HDL-64E Velodyne 64线激光雷达。
    • 在最常见的范例中,点云组织在体素中,每个垂直列中的体素集被编码为固定长度的、手工制作的特征编码,形成一个伪图像,可以通过标准的图像检测体系结构进行处理。
    • 借鉴 Complex YOLO(原论文使用yolo v2,TODO Complex-YOLO v5实现 数据部分 yolov4)
    • Pillar Feature Network Pointcloud to Pseudo-Image 点云到伪图像
      • l(x,y,z,r), |P| = B
      • (xc, yc,zc)、(xp,yp) 扩充pillar中的点,c表示pillar中所有点的算术平均值的距离。p表示与pillar(x,y)中心的偏移量。
      • 增强后的liar数据 l 是9维,l(x ,y ,z ,r ,xc ,yc ,zc ,xp , yp)
  • 通过对每个样本的非空柱子数量 § 和每个柱子 (N) 的点数量施加限制来创建大小为 (D, P, N ) 的密集张量
    • 如果样本或支柱拥有太多的数据来拟合这个张量,则随机抽样数据
    • 相反,如果样本或支柱的数据太少而无法填充张量,则应用零填充
    • pillars -> MLP -> BatchNorm -> ReLU -> 生成(C, P, N ) 大小的张量 -> 对通道的最大操作以创建大小为 (C, P) 的输出张量 -> 创建大小为 (C, H, W ) 的伪图像
    • TODO: ??? 注意,线性层可以表述为张量上的 1x1 卷积,从而产生非常高效的计算。
  1. 数据增强是怎么操作的(离线,在线)?

    • 参考SECOND、PIXOR
    • create a lookup table of the ground truth 3D boxes for all classes and the associated point clouds that falls inside these 3D boxes,感觉这里类似FastBev的LUT。猜测是使用预定义内参创建查找表。TODO:具体实现过程是怎样的?
      • 为所有类创建ground truth 3D 框的查找表以及落在这些 3D 框内的相关点云
      • 然后对于每个样本,我们分别随机选择汽车、行人和骑自行车的人的15,0,8个ground truth样本,并将它们放入当前点云中。
    • 接下来,单独增强所有的ground truth。
      • 每个框都均匀地从 [−π/20, π/20])和 N (0, 0.25) 独立旋转 (x, y 和 z) 轴以进一步丰富训练集。
    • 最后,我们执行两组全局增强,共同应用于点云和所有框。
      • 首先,在x轴上应用随机镜像翻转
      • 然后进行全局旋转和缩放
      • 最后,随机噪声,类似2D平移抖动,x, y, z 随机抖动 N (0, 0.2) 。
    • 最小框增强效果更好,引入ground truth采样减轻了对每个框增强的广泛需求。
    • During the lidar point decoration step, we perform the VoxelNet [31] decorations plus two additional decorations:xp and yp which are the x and y offset from the pillar x, ycenter. These extra decorations added 0.5 mAP to final detection performance and provided more reproducible experiments.
      • (xp, yp)提升了0.005map Point Decorations 这个是干啥的?
  2. pointpoillarss 的 one-stage 网络结构是怎样的?

    • 三个部分: A Pillar Feature Network, Backbone, and SSD Detection Head.
    • 将点云转换为稀疏伪图像的特征编码器网络;
    • 二维卷积主干,将伪图像转换为高级表示;pillars怎么提取出dense 2D convolutions ?
    • 检测并回归3D框的检测头。
    • Backbone主干有两个子网络: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 一个自上而下的网络,它在相对较小的空间分辨率上产生特征
      • 第二个网络执行自上而下上采样和连接特征。自上而下的主干可以用一系列块 Block(S, L, F) 来表征。什么意思?Block具体指什么?
      • 一个块有 L 3x3 2D conv 层,具有 F 个输出通道,每个层后跟 BatchNorm 和 ReLU。
      • 层内的第一个卷积具有步幅 S/Sin,以确保块在接收到步幅 Sin 的输入blob 后在步幅 S 上运行。
      • 块中的所有后续卷积步长为 1。每个自上而下块的最终特征通过上采样和连接进行组合
      • 首先,从初始步幅 Sin 对特征进行上采样,Up(Sin, Sout, F) 到最终步幅 Sout(两者都再次测量 wrt。使用具有 F 个最终特征的转置 2D 卷积的原始伪图像)
      • 接下来,将 BatchNorm 和 ReLU 应用于上采样的特征。
      • 最终输出特征是源自不同步幅的所有特征的串联。
      • 下图是BackBone实际用的是RPN.??
      • img
    • Detection Head
      • 与 SSD 类似,我们使用 2D Intersection over Union (IoU) 将先验框与地面ground truth进行匹配。边界框高度和高程不用于匹配;相反,给定一个 2D 匹配,高度和高程成为额外的回归目标。
      • 使用SSD目标检测头进行bbox回归,高度z单独回归。
  3. loss、optimizer等超参数计算方式,以及使用位置在哪里?

    • Network
      • 均匀分布随机初始化所有权重
      • The encoder network has C = 64 output features.编码器网络有 C = 64 个输出特征。
      • The car and pedestrian/cyclist backbones are the same except for the stride of the first block (S = 2 for car, S = 1 for pedestrian/cyclist). 除了第一个块的步幅(汽车的 S = 2,行人/骑自行车者的 S = 1)外,汽车和行人/骑自行车的骨干是相同的。
      • Both network consists of three blocks, Block1(S, 4, C), Block2(2S, 6, 2C), and Block3(4S, 6, 4C). 两个网络由三个块组成,Block1(S, 4, C)、Block2(2S, 6, 2C) 和 Block3(4S, 6, 4C)。
      • Each block is upsampled by the following upsampling steps: Up1(S, S, 2C), Up2(2S, S, 2C) and Up3(4S, S, 2C).每个块通过以下上采样步骤进行上采样:Up1(S, S, 2C)、Up2(2S, S, 2C) 和 Up3(4S, S, 2C)。
      • Then the features of Up1, Up2 and Up3 are concatenated together to create 6C features for the detection head.然后将Up1、Up2和Up3的特征连接在一起,为检测头创建6C特征。
    • Loss
      • 和SECOND相同。(x, y, z, w, l, h, θ),定位回归残差计算如下:
      • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 总定位损失为: 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 分类focal loss 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
        • 其中 pa 是锚点的类别概率。我们使用α = 0.25和γ = 2的原始论文设置。
      • Ldir = softmax()
      • 总loss外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
      • 其中 Npos 是正锚点的数量,βloc = 2,βcls = 1,βdir = 0.2。
    • Adam lr=2e-4, 每15 epoch衰减为0.8, 总共160epoch。 batch = 2val, 4test。
  4. 实验设置?

    • 样本最初分为 7481 个训练和 7518 个测试样本。后分为 3712 个训练样本和 3769 个验证样本
    • xy 分辨率:0.16 m,最大支柱数 §:12000,每个支柱的最大点数 (N):100
    • 使用与VoxelNet相同的锚点和匹配策略。
      • 每个类锚都由一个宽度、长度、高度和 z 中心描述,并在两个方向上应用:0 和 90 度。
      • 使用具有以下规则的 2D IoU 将锚点与ground truth匹配。
      • 正匹配要么与基本事实框最高,要么高于正匹配阈值,而负匹配低于负阈值。
      • 损失中忽略了所有其他锚点。TODO:这段具体是什么意思?怎么实现的?继续看
    • axis aligned non maximum suppression (NMS) 轴对齐非最大抑制(NMS) 0.5
    • Car.
      • x, y, z 范围分别为 [(0, 70.4)、(-40, 40)、(-3, 1)] 米。汽车锚的宽度、长度和高度为 (1.6, 3.9, 1.5) m,z 中心为 -1 m。匹配使用 0.6 和 0.45 的正负阈值。
    • Pedestrian & Cyclist.
      • x, y, z 范围分别为 [(0, 48)、(-20、20)、(-2.5, 0.5)] 米。
      • 行人锚的宽度、长度和高度为 (0.6, 0.8, 1.73) 米,z 中心为 -0.6 米,
      • 自行车锚的宽度、长度和高度为 (0.6, 1.76, 1.73) 米,z 中心为 -0.6 米。
      • 匹配使用 0.5 和 0.35 的正负阈值。
    • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  5. 验证时的坐标转换方式和评价指标bbox ,3d,AOS计算方式的具体实现?

    • 见最上方计算方式。
  6. CUDA下的部署有什么区别?PillarNeXt是否具备可迁移性?

    • The main inference steps are as follows.
      • First, the point cloud is loaded and filtered based on range and visibility in the images (1.4 ms).
      • Then, the points are organized in pillars and decorated (2.7 ms).
      • Next, the PointPillar tensor is uploaded to the GPU (2.9 ms), encoded (1.3 ms), scattered to the pseudo-image (0.1 ms), and processed by the backbone and detection heads (7.7 ms).
      • Finally NMS is applied on the CPU (0.1 ms) for a total runtime of 16.2 ms.
    • Encoding.
      • The key design to enable this runtime is the PointPilar encoding.
        • For example, at 1.3 ms it is 2 orders of magnitude faster than the VoxelNet encoder (190 ms) [31].
        • Recently, SECOND proposed a faster sparse version of the VoxelNet encoder for a total network runtime of 50 ms.
        • They did not provide a runtime analysis, but since the rest of their architecture is similar to ours, it suggests that the encoder is still significantly slower; in their open source implementation1 the encoder requires 48 ms.
    • Slimmer Design.
      • 单个 PointNet,输出64维,减少4.5ms
      • 上采样特征输出减半到128,减少3.9ms
    • 可以通过改变空间分箱的大小来实现速度和准确性之间的权衡。较小的柱子允许更精细的定位并导致更多的特征,而较大的柱子更快,因为更少的非空柱子(加速编码器)和更小的伪图像(加速 CNN 主干)。
      • pillar尺寸{0.122,0.162,0.22,0.242,0.282}m2
      • 最大柱的数量随分辨率而变化,分别设置为16000、12000、12000、8000、8000。
  7. 每个网络层的参数怎么计算?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/992023.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

攻防世界题目练习——Web难度1(二)

题目目录 1. fileinclude2. fileclude3. easyphp4. file_include5. unseping 1. fileinclude 一道文件包含题,对文件包含还是不太懂,直接看flag.php文件什么都没有。 根据WriteUp提示先f12查看源码,发现了文件包含的漏洞点lan.php文件&#…

【LeetCode75】第五十题 无限集中的最小数字

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 这是我们在LeetCode75里遇到的第二道设计类题目,难度比上一次的设计题目要难上一些。 题目假设我们拥有一个从1开始的无限集…

Vivado XADC IP核 使用详解

本文介绍Vivado中XADC Wizard V3.3的使用方法。 XADC简介 XADC Wizard Basic Interface Options: 一共三种,分别是AXI4Lite、DRP、None。勾选后可在界面左侧看到相应通信接口情况。Startup Channel Selection Simultaneous Selection:同时监…

小米将推出中端手机,高通骁龙7系列再添一员,能否吸引消费者?

小米将于近日推出一款新的中端智能手机,该手机将搭载全新的处理器——骁龙SM7550。这个代号为“Crow”的处理器引起了广泛的关注和猜想,因为它是高通骁龙7系列的一员,但性能可能低于7 Gen 2,那么它的亮点和面向用户群体是什么呢&a…

字符串讲解

文章目录 字符串一.String概述二.创建String对象的两种方式三.Java的内存模型四.字符串的比较五.StringBuilder的基本操做六.StringJoiner概述七.字符串相关类的底层原理 字符串 一.String概述 1.String是Java定义好的一个类,定义在java.long包中,所以使用的时候不需要导包 …

群晖 NAS WebDAV服务手机ES文件浏览器远程访问【无公网IP内网穿透】

📱 iOS开发上架主页 在强者的眼中,没有最好,只有更好。我们是移动开发领域的优质创作者,同时也是阿里云专家博主。 ✨ 关注我们的主页,探索iOS开发的无限可能! 🔥我们与您分享最新的技术洞察和实…

解除百度安全验证

使用chrome浏览器用百度浏览时,一直弹百度安全验证: 在设置里进行重置: 然后重启浏览器就可以了。

算法通过村第六关-树青铜笔记|中序后序

文章目录 前言1. 树的常见概念2. 树的性质3. 树的定义与存储方式4. 树的遍历方式5. 通过序列构建二叉树5.1 前中序列恢复二叉树5.2 中后序列恢复二叉树 总结 前言 提示:瑞秋是个小甜心,她只喜欢被爱,不懂的去爱人。 --几米《你们 我们 他们》…

uni-app 之 表格设置

uni-app 之 表格设置 image.png <view style"padding: 3%; border: #1296db;"><table style"width: 100%; border-collapse: collapse; "><tr style"height: 50px;border: 2px solid;border-color: #F7F7F7;"><td style&qu…

企业架构LNMP学习笔记26

通过Keepalived可以实现主服务器整机不可用&#xff0c;实现VIP的切换。保证用户可以通过VIP进行访问服务。但是实际上&#xff0c;往往不是服务器整机不可用&#xff0c;只是对应的服务或者软件不可用。 比如说&#xff0c;nginx提供的web的服务&#xff0c;nginx进程关闭。 …

什么是JVM常用调优策略?分别有哪些?

目录 一、JVM调优 二、堆内存大小调整 三、垃圾回收器调优 四、线程池调优 一、JVM调优 Java虚拟机&#xff08;JVM&#xff09;的调优主要是为了提高应用程序的性能&#xff0c;包括提高应用程序的响应速度和吞吐量。以下是一些常用的JVM调优策略&#xff1a; 堆内存大小…

【系统设计系列】数据库

系统设计系列初衷 System Design Primer&#xff1a; 英文文档 GitHub - donnemartin/system-design-primer: Learn how to design large-scale systems. Prep for the system design interview. Includes Anki flashcards. 中文版&#xff1a; https://github.com/donnemarti…

8路编码器脉冲计数器或16路DI高速计数器,Modbus RTU模块 YL69-485 可识别正反转

特点&#xff1a; ● 编码器解码转换成标准Modbus RTU协议 ● 可用作编码器计数器或者转速测量 ● 支持8个编码器同时计数&#xff0c;可识别正反转 ● 也可以设置作为16路独立DI高速计数器 ● 编码器计数值支持断电自动保存 ● DI输入和电源之间3000V隔离 ● 通过RS-4…

奇舞周刊第 505 期:实践指南-前端性能提升 270%!

记得点击文章末尾的“ 阅读原文 ”查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 实践指南-前端性能提升 270% 当我们疲于开发一个接一个的需求时&#xff0c;很容易忘记去关注网站的性能&#xff0c;到了某一个节点&#xff0c;猛地发现&#xff0c;随着越来越多…

为什么Python在数据分析行业备受欢迎?优势在哪?

在今天的数据驱动世界中&#xff0c;数据分析已经成为各行业的核心工作之一。数据分析的应用场景非常广泛&#xff0c;例如金融、医疗、教育、电商、社交等领域。数据分析师是一种专门从事数据分析的职业&#xff0c;他们需要掌握一定的编程技能和统计知识&#xff0c;以及对数…

JavaScript实现广告倒计时和跳过广告

倒计时和跳过广告 最近打开手机上的app&#xff0c;映入眼帘的都是一个几秒的广告&#xff0c;带有倒计时&#xff0c;当然如果不喜欢的话可以点击跳过&#xff0c;跳过广告其实质应该就是关闭广告。以前用JavaScript做过一个定时关闭的广告&#xff0c;于是把代码完善了一下&…

作为数据分析师,如何能把AI工具和数据分析工作更好的结合?

​ 做为数据分析师&#xff0c;如果能够学会把AI工具应用到实际的数据分析工作当中&#xff0c;可以把一些重复性很强的工作交给AI来完成&#xff0c;这样数据分析师在提升效率的过程中能够去有更多的时间考虑具有创意的工作。 数据分析师&#xff0c;在使用AI工具完成数据分…

Android相机-架构3

目录 引言 1. Android相机的整体架构 2. 相机 HAL 2.1 AIDL相机HAL 2.2 相机 HAL3 功能 3. HAL子系统 3.1 请求 3.2 HAL和相机子系统 3.2.1 相机的管道 3.2.2 使用 Android Camera API 的步骤 3.2.3 HAL 操作摘要 3.3 启动和预期操作顺序 3.3.1 枚举、打开相机设备…

Java(二)数据类型与变量以及运算符

数据类型与变量以及运算符 二、数据类型与变量&#xff08;重要&#xff09;2.数据类型2.1 基本数据类型 1.变量与常量1.1常量&#xff08;字面常量&#xff09;1.2变量数据类型小总结 三、运算符1.运算符号&#xff08;重要&#xff09;1.1计算运算符1.2增量运算符1.3 自增或自…

AUTOSARCAN-Tp协议

目录 一.单帧、首帧、连续帧、流控帧 单帧传输 SF单帧&#xff1a; 多帧传输 FF&#xff08;首帧&#xff09;&#xff1a; CF&#xff08;连续帧&#xff09;&#xff1a; FC&#xff08;流控帧&#xff09;&#xff1a; 一.单帧、首帧、连续帧、流控帧 CAN诊断由发送端…