点云检测网络PointPillar

news2024/11/19 11:30:39

1. 提出PointPillar的目的

在此之前对于不规则的稀疏的点云的做法普遍分为两派:

一是把点云数据量化到一个个Voxel里,常见的有VoxelNet和SECOND , 但是这种做法比较普遍的问题是由于voxel大部分是空集所以会浪费算力(SECOND利用稀疏卷积解决了它) ,但是二者都还存在高度的信息所以还需要计算三维卷积的。
一是从俯视角度将点云的数据进行处理,将高度信息通过一系列手段去除从而获得一种类似Pseudo image的方式从而去用一些经典的图像网络去处理一些任务比如,MV3D和AVOD。

本文也有点类似上面的思想二,有以下几个明显的亮点:

  • 是一种结合了点试图思想(忽略非空区域)以及俯视图(量化2D平面而得到伪图片)的点云融合感知算法
  • 将三维点云处理为二维伪图像,用传统CNN对伪图像进行特征提取,推理速度显著提升,是其他方法(含3维卷积)的2-4倍。

2. PointPillar网络结构

整个算法逻辑包含3个部分:数据预处理,神经网络,后处理。其中神经网络部分,原论文将其结构描述为3个部分:

PFN(Pillar Feature Net):将输入的点云转换为稀疏的伪图像的特征形式。
Backbone(2D CNN):使用 2D 的 CNN 处理伪图像特征得到高维度的特征。
Detection Head(SSD):检测和回归 3D 边界框。

在实际部署的时候,结构拆分和论文中的稍微有些出入。主要是分成PFN(Pillar Feature Network),MFN和RPN。其中MFN是用来将PFN提取的Pillar级的点云深度特征进一步转化为伪点云图像。RPN就是Backbone,而检测头的部分功能被包含在后处理的逻辑里面。

2.1. PFN(Pillar Feature Network)模块

因为不同点云帧的点云数量是变化的,非空Pillar的数量自然也是不同的,在考虑将PFN导出为ONNX模型时,需要采用dynamic shape。

从PFN的8个输入可知,num_points表示每个Pillar包含的实际点云数量,这个轴是dynamic的。

  • 首先将一个样本的点云空间划分成(在 X 轴方向上点云空间的范围/pillar size,在 Y 轴方向上点云空间的范围/pillar size)pillar 网格,样本中的点根据会被包含在各个 pillar 中,没有点的 pillar 则视为空 pillar。
  • 假设样本中包含的非空 pillar 数量为 P,同时限制每个 pillar 中的点的最大数量为 N,如果一个 pillar 中点的数量不及 N,则用 0 补全,若超过 N,则从 pillar 内的点中采样出 N 个点来。并对 pillar 中的每个点进行编码,其中每个点的表示会包括点的坐标,反射强度,pillar 的几何中心,点与 pillar 几何中心的相对位置,将每个点的表示的长度记为 D。这样我们的一个点云样本就可以用一个(P,N,D)的张量来表示。
  • 得到点云的 pillar 表示的张量后,我们对其进行处理提取特征,通过使用简化版的 PointNet 中的 SA 模块来处理每个 pillar。即先对每个 pillar 中的点使用多层 MLP 来使得每个点的维度从 D 变成 C,这样张量变成了(P,N,C),然后对每个 pillar 中的点使用 Max Pooling,得到每个 pillar 的特征向量,也使得张量中的 N 的维度消失,得到了(P,C)维度的特征图。
  • 最后将(P,C)的特征根据 pillar 的位置展开成伪图像特征,将 P 展开为(H,W)。这样我们就获得了类似图像的(C,H,W)形式的特征表示。

总结:shape变化,(P,N,D)->(P,N,C)->(P,C)->(C,H,W)

2.2. PFN的输入

PFN有8个输入:

pillar_x:包含Pillar化后的点云x坐标,shape为(1,1,P,100);
pillar_y:包含Pillar化后的点云y坐标,shape为(1,1,P,100);
pillar_z:包含Pillar化后的点云z坐标,shape为(1,1,P,100);
pillar_i:包含Pillar化后的点云强度值,shape为(1,1,P,100);
num_points:保存每个Pillar包含的实际点云数量,shape为(1,P);
x_sub_shaped:保存Pillar的中心x坐标,shape为(1,1,P,100);
y_sub_shaped:保存Pillar的中心y坐标,shape为(1,1,P,100);
mask:pillar点云掩码,shape为(1,1,P,100);

2.3. PFN的输出

PFN的输出shape为(1,64,pillar_num,1),pillar_num表示非空pillar的数量,是dynamic shape。因为不同点云帧的点云数量是变化的,非空Pillar的数量自然也是不同的。

参考文献

点云深度学习-PointPillar_哔哩哔哩_bilibili

点云检测算法之PointPillar深度解读-CSDN博客 

PointPillars: Fast Encoders for Object Detection from Point Clouds 

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

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

相关文章

本地大模型运行框架Ollama

什么是 Ollama ? Ollama 是一个简明易用的本地大模型运行框架。能在本地启动并运行 Llama 2、Mistral、Gemma 及其他大语言模型。 和老苏之前介绍的 LocalAI 比较类似,但是加载模型更容易,感觉上比较像 docker,也采用了 tags 来区…

Eureka 入门教程

Eureka 介绍 1. 注册中心概述 什么是注册中心? 给客户端提供可供调用的服务列表,客户端在进行远程调用(RPC)时,根据服务列表选择服务提供方的服务地址进行服务调用 注册中心的核心功能 注册:服务提供者上…

androidjetpack应用指南,超通俗解析

前言 每年的3、4月份是各大企业为明年拓展业务大量吸纳人才的关键时期,招聘需求集中、空缺岗位多,用人单位也习惯在初秋进行大规模招聘。 金九银十,招聘旺季,也是一个求职旺季。 不打无准备的仗,在这种关键时期&…

文件上传之后再次打开,文件依然存在

目录 1.上传说明 2.问题1 3.问题2 4.其他问题 1.上传说明 文件上传使用了单独的组件,使用对话框内嵌套上传组件的方式,在主画面中点击导入按钮,弹出对话框。 2.问题1 问题: ①上传文件后,点击遮罩层取消或者点击…

Maven下载、安装、配置教程

maven是一个项目管理的工具,maven自身是纯java开发的,可以使用maven对java项目进行构建、依赖管理。 通常我们靠手动下载jar包引入项目中是非常浪费时间的,我们可以通过maven工具帮我们导入jar包提高开发效率。 第一步:下载Mave…

【QT+QGIS跨平台编译】之五十五:【QGIS_CORE跨平台编译】—【qgsmeshcalcparser.cpp生成】

文章目录 一、Bison二、生成来源三、构建过程一、Bison GNU Bison 是一个通用的解析器生成器,它可以将注释的无上下文语法转换为使用 LALR (1) 解析表的确定性 LR 或广义 LR (GLR) 解析器。Bison 还可以生成 IELR (1) 或规范 LR (1) 解析表。一旦您熟练使用 Bison,您可以使用…

C++设计模式——抽象工厂模式

文章目录 抽象工厂模式的主要组成部分抽象工厂模式的一个典型例子抽象工厂模式用于其他场景抽象工厂模式与其他设计模式结合使用 C 中的抽象工厂模式是一种创建型设计模式,它主要用于处理对象家族的创建,这些对象之间可能存在一定的关联关系或属于相同的…

springboot227旅游管理系统

springboot旅游管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本旅游管理系统就是在这样的大环境下诞生,其可以帮助使用者在…

C++ deque详解以及容器适配器

目录 1.容器适配器 2.deque的使用 2.1deque的介绍 2.2deque的缺陷 2.3deque作为stack和queue的可行性 2.4 deque类的使用 2.4.1deque的构造函数 2.4.2deque容量操作 2.4.3deque赋值,插入 1.容器适配器 适配器是一种设计模式(设计模式是一套被人…

STL常见容器(stack、queue容器)---C++

STL常见容器目录: 4.stack容器4.1 stack 基本概念4.2 stack 常用接口 5.queue容器5.1 queue常用接口5.2 queue常用接口 4.stack容器 4.1 stack 基本概念 概念: stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口. 注意…

重推请求之curl和fiddler

在实际的项目中会有出现问题,想重现的场景,比较重新调用一个服务,那么如何进行快速的重推请求呢,记录下来,方便备查。 主要有curl和fiddler两种方式,下面详细说。 方式一、curl 命令 curl 是一个利用URL规…

MySQL:索引有哪些(清晰明了)

一提到索引,可能就会想到B树索引、Hash索引、聚簇索引、主键索引、唯一索引、联合索引等等,但这些名词并不能混为一谈,他们有重复的部分,是从不同方面给索引取的名字。 从数据结构上来讲:B树索引、Hash索引、Full-text…

Spring注解之处理常见的 HTTP 请求

5 种常见的请求类型: GET :请求从服务器获取特定资源。举个例子:GET /users(获取所有学生)POST :在服务器上创建一个新的资源。举个例子:POST /users(创建学生)PUT :更新…

总结成果,擘画蓝图 | 易我科技召开2023年度总结暨2024年规划大会

2024年2月1日下午,易我科技举行了2023年度总结暨2024年规划大会。 01 首先,易我科技总经理万建华对2023年度整体工作进行了总结,对取得的经营成果给予了充分肯定。 ▲ 万总公布2023年经营成果 在肯定成绩的同时,也必须正视存在…

Leetcode : 移动零

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 思路:遍历数组元素,判定为0,则采用erase从数组删除&…

P沟道与N沟道MOSFET的基本概念

N沟道与P沟道MOSFET基本原理与区别 学习MOSFET时的简单笔记作为个人总结,仅供学习参考,实际电路设计请直接略过!!! 文章目录 N沟道与P沟道MOSFET基本原理与区别前言一、MOSFET ?二、N沟道MOS管原理三、P沟…

TCP/UDP模型:2024/2/29

作业1&#xff1a;TCP模型 服务器端&#xff1a; #include <myhead.h> #define SER_IP "192.168.199.129" #define SER_PORT 8899int main(int argc, const char *argv[]) {//1.创建用于连接的套接字文件int sfdsocket(AF_INET,SOCK_STREAM,0);if(sfd-1){per…

【Javascript编程实操02】1、判断一个年份是闰年还是平年 2、找到三个数中最小的数

目录 前言 1、判断一个年份是闰年还是平年 原理&#xff1a; 代码&#xff1a; 实现效果&#xff1a; 2、找到三个数中最小的数 流程图&#xff1a; 代码&#xff1a; 实现效果&#xff1a; 总结 前言 本次继续针对Javascript阶段的if...else...的实操练习&#xff0…

【MySQL】SQL 入门和 DDL

1. 通用语法 SQL语句可以单行或多行书写&#xff0c;以分号结尾SQL语句可以使用空格/缩进来增强语句的可读性MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写注释&#xff1a; 单行注释&#xff1a;-- 注释内容 或 # 注释内容多行注释&#xff1a;/* 注释内容…

探索JavaScript中的构造函数,巩固你的JavaScript基础

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…