PointNet系列论文阅读与理解
PointNet是斯坦福大学研究人员提出的一种点云处理网络,其可以直接输入无序点云集合进行处理,而不像基于投影的方法需要先对点云进行预处理再输入网络。其可以用作与点云分类和点云分割。由于其可以直接输入无序点云,因此对深度学习点云处理产生了巨大的影响。而同一个作者的进阶版网络PointNet++ 则解决了PointNet局部特征使用不足的问题,提高了其局部特征的处理能力。
点云的特征
点云往往是欧几里德空间点的子集,往往拥有以下三个主要特征:
-
无序性
与图像的像素矩阵或体积栅格中的体素阵列不同,点云是一组没有特定顺序的点,也就是说,N个3D点集会有
种排列。 -
点之间相互作用
这些点来自具有距离度量的空间,这就意味着点与点之间不是鼓励的,相邻点可能形成一个有意义的子集。因此,模型应该捕获局部结构以及局部结构互相之间的特征。 -
变换不变性
对点云全集进行刚性变换,点之间的相对位置是不变的。
PointNet
PointNet的整体架构如下图所示:
下面将分解PointNet的每一部分。
MLP
共享多层感知机在PointNet的max pool前用了两次,其为共享MLP,第一次是在对原始点云transform后的点将特征升到64维,第二次是在对64维特征transform后再次升维到1024维度,本质上就是使用MLP对输入的点进行两次特征升维提取。
在进行max pool后,根据网络功能的不同,使用的MLP次数也不同。对于分类网络,对池化后的特征进行MLP,最终输出分类分数矩阵。而对于分割网络,通过了两次shared MLP,最后输出一个
的分数矩阵。
Max Pool
Max Pool 可以说是PointNet的核心思想了,但细究原理其实很简单。由于PointNet 是直接将点云集合输入到网络中,因此要求点云输入顺序不同,提取出来的特征也是不能改变的,即需要找到一个函数,可以使得输入的顺序改变,结果也不改变。自然而然的可以找到一些可选选项:取最大值、取平均值,取和等方法。而PointNet使用的就是取最大值这个方法,也做了相关实验,这些方法都是可行的,并且取最大值这个方法取得了最好的效果。Max Pool方法示意图如下:
在进行特征升维后,我们分别取各个维度中每个点最大的一个值,将他们组成最后的特征矩阵,就是Max Pool的做法。易得,这种方法不管输入点的顺序是什么,得到的特征矩阵都是一致的。
T-Net
T-Net用在input transform和feature transform中,其本质也是一个微型的PointNet,作用是将原始点矩阵或特征矩阵转换为标准的朝向,这样的话就可以适应不同朝向的点云了,对应点云特征第三点。
但实际作用并不是太大,可以略微改善效果,聊胜于无。但其也添加了相应的计算量。因此在PointNet++中就完全删除了T-Net。
Segmentation Network
PointNet用作于分割相对于用于分类稍复杂一些,其结构如下:
由于分割任务需要把每个点都考虑进去,因此最后用于MLP的矩阵不能只含有全局特征(global feature),还需要包含每个点的特征。最左边的矩阵白色部分是经过特征第一次升维和transform的矩阵,右边灰色部分是将全局特征重复n次,将这两个部分拼接到一起,最后再经过两层MLP,最后得到每一个点的分类,以完成分割任务。
以上三个部分是作者认为的PointNet核心的三个思想。下面来谈一下我觉得PointNet比较有意思的点。
Critical Point Sets
在Max Pool中我们提到了其作用是提取各个点的每个维度中的最大值,如果只保留对最后全局特征有起到作用的点,将他们集合起来,这就称之为Critical Point Sets。
可以看到,Critical Point Sets往往是点云的边界,这些点往往定义了点云的形状。网络的鲁棒性就来源于此处,只要保留了关键点,及时点云有变换和扰动结果也不会受到影响。
Voxel Feature Encoding
目前来说有一种比较好用的特征提取方法,如图所示:
其先进行一次PointNet特征提取,然后将获得的全局特征拼接到原有的特征上,在进行一次PointNet特征提取,最后获得一个新的全局特征,这样的取样方式会获得兼具局部和全局的特征,PointNet++也是用了类似的思想进行特征提取。
总结
PointNet的创新点如下:
- 直接用点数据进行操作,不损失精度
- 对无序数据的效果比较好
- 证明了PointNet也可以和正常神经网络一样,可以拟合任何函数
同时,局限性如下:
缺陷:
- 缺少了逐层特征提取
- 仅仅是对每个点表征,对局部结构信息整合能力太弱
- 分割任务的全局特征global feature是直接复制与local feature拼接
PointNet++
PointNet的一个比较突出的不足就是无法获取局部特征,因为在PointNet中,只存在对点进行1 * 1的卷积操作,或者全局点进行最大池化操作,因此获得的特征严重损失了大量珍贵的局部特征。这就导致了PointNet在分割,特别是部分分割场景下的效果并不好。
因此,PointNet的作者借鉴了CNN的思想,通过先把点云划分为具有重叠部分的局部区域,再局部区域中使用PointNet提取局部特征,再扩大范围,再局部特征的范围上再次提取更高层次的特征,直到最后提取点云的全局特征。基于这种思想,提出了PointNet++。PointNet++的整体结构如下:
整个网络可以看作为encoder-decoder的结构,encoder是一个采样的过程,通过多层set abstraction将数据进行局部到全局的采样。decoder分为分类和分割,分类decoder比较简单,将encoder获得的全局特征经过一个PointNet降维,再通过多层感知机获得分类分数。分割decoder相对较复杂,需要通过反向插值的方法实现采样回复点云,再通过一个unit PointNet获得每个点的分类。
Set abstraction
每个set abstraction包括sampling、grouping和一个PointNet。
- sampling:
使用farthest point sampling(FPS)选择个点,作者使用FPS而不是随机取样的原因是,FPS更容易囊括整个点云。 - grouping:
使用Ball Query或KNN的方法,生成在sampling的邻域中选择个点。这一步使用具体哪个方法差别不太大:
- PointNet:
对Sampling+Grouping以后的点云进行局部的全局特征提取
整体的流程如图所示:
经过多个set abstraction后,可以获得一个兼具局部和全局的特征。
MSG&MRG
通过多层的特征提取,可以使得点云分类和分割性能都有所提升,但是也损失了其鲁棒性。激光所收集的点云中,总是有近处密度高,远处密度低的特性,而PointNet对于不均匀点云的处理性能不佳。
在论文中,作者给出了对比试验,在密度不均匀的点云中使用原始PointNet++,其效果甚至不如PointNet。PointNet++提出了两个解决方案:多尺度分组(MSG)和多分辨率分组(MRG)。
- MSG
MSG在每一个分组层都使用多个尺度(半径)来确定领域范围,每一个范围经过PointNet特征提取后再整合起来得到一个多尺度的新特征。 - MRG
MRG的每一个特征都由两部分组成:本层领域范围经过PointNet获得的的特征,以及上一层领域范围经过PointNet获得的特征。当点云密度不均时,可以通过判断当前patch的点云密度给予左右两个特征向量不同的权重。例如,当patch中密度过小,左边特征向量中包含的点更稀疏,容易受到抽样不足的影响,因此提高右边特征向量的权重。
MSG效果较好,但相对的计算量也较大(经过三次PointNet)。作者在论文中给出了分类实验结果对比图,可以看出多尺度(MSG, MRG)和单一尺度(SSG)相比分类准确率没有什么提升,但当点云很稀疏的时候,使用MSG可以保持很好的鲁棒性。random input dropout(DP)对于鲁棒性提升也很大。
random input dropout(DP)指的是输入的时候随机选择原输入点的一部分进行最终输入,也就是随机抛弃掉一些点,在原文中,保留了95%的点。
Classification
分类网络比较简单,用Encoder层获得的全局特征经过一次PointNet在提取一次全局特征,然后通过全连接网络就可以获得分类结果了,分类网络的结构图如下:
Segmentation
经过Encoder部分,我们获得的是一个全局的特征,而如果我们需要做分割,需要的是逐点特征(point-wise feature)。PointNet的解决方法很简单除暴,将全局特征copy了和local feature进行拼接,这样获得的特征具有一定的邻域信息,但是辨别性(discriminative)并不好。
而PointNet++使用反向插值+skip connection的方法获得一个兼具全局和局部的特征。分割网络的结构图如下:
总结
PointNet++是PointNet的延续,一定程度上弥补了PointNet的一些缺陷。PointNet++提供了比较好的表征网络,后序的点云处理发展很多论文都是用到了这种表征方式。不过PointNet++相对于PointNet不管是分类还是分割任务,总体的准确率大概只提升了2-4个点。
参考资料
- PointNet论文
- PointNet++论文
- PointNet作者演讲
- 三维点云网络——PointNet论文解读
- PointNet++论文解读以及代码分析
- 搞懂PointNet++,这篇文章就够了!
作者:0x2a
文章来源:知乎
推荐阅读
- 深入浅出 | 谈谈MNN GPU性能优化策略
- 使用 Ollama AI 在本地 Raspberry Pi 运行大语言模型
- ResNeXt学习
更多芯擎AI开发板干货请关注芯擎AI开发板专栏。欢迎添加极术小姐姐微信(id:aijishu20)加入技术交流群,请备注研究方向。
相关文章:

PointNet系列论文阅读与理解
PointNet是斯坦福大学研究人员提出的一种点云处理网络,其可以直接输入无序点云集合进行处理,而不像基于投影的方法需要先对点云进行预处理再输入网络。其可以用作与点云分类和点云分割。由于其可以直接输入无序点云,因此对深度学习点云处理产…...

反转链表解题思路
题目描述 给定一个单链表的头结点pHead,长度为n,反转该链表后,返回新链表的表头。 示例:当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。 解题思路:迭…...

【MySQL 保姆级教学】数据库基础(重点)(2)
目录 1. 什么是数据库1.1 数据库的定义1.2 mysql 和 mysqld1.3 文件和数据库 2. 数据库的分类3. 连接数据库3.1 数据库的安装3.2 连接服务器(数据库)3.3 服务器 数据库 表 三者的关系 4. 数据库-表 和目录-文件 的关系5. MySQL 框架6. SQL 分类7. 储存引…...

Nginx从入门到实战(八):版本平滑无感知,不停机升级
一、查看旧版本信息 可以通过nginx -V命令,来查看当前nginx的版本信息,和配置参数。 [rootnb001 sbin]# nginx -V -bash: nginx: command not found [rootnb001 sbin]# ./nginx -V nginx version: nginx/1.20.1 built by gcc 4.8.5 20150623 (Red Hat …...

jQuery 用户登录页面非空校验与登录测试
文章目录 实战介绍准备工作创建网页导入样式表和jQuery库编写页面代码编写脚本代码创建成功页面浏览网页和测试结束语 实战介绍 大家好,今天我们将一起学习如何使用jQuery来为用户登录页面进行非空校验和登录测试。通过这个实战项目,你将学会如何通过jQ…...

《Linux从小白到高手》综合应用篇:深入理解Linux进程调优
本篇深入介绍Linux进程调优. 1. Linux系统进程类型: Linux的进程可能有成千上万个: 新建状态:进程刚刚被创建,但尚未运行。 就绪状态:进程已经准备好运行,等待CPU分配。 运行状态࿱…...

Linux安装elasticsearch单机版
下载地址: Download Elasticsearch | Elastic 下载的安装包是elasticsearch-7.12.0-linux-x86_64.tar.gz 解压缩文件 tar -zxvf elasticsearch-7.12.0-linux-x86_64.tar.gz #编辑文件 vim config/elasticsearch.yml# 加入如下配置 # 集群名称,一个…...

el-table表头加红色星标
代码: <el-table-column prop"name" label"姓名" width"auto"><template #header><span style"color: red; margin-right: 4px">*</span><span>姓名</span></template></el…...

2.1 HTML5 - Canvas标签
文章目录 引言Canvas标签概述定义实例:创建画布 理解Canvas坐标系概述实例:获取Canvas坐标 获取Canvas环境上下文概述实例:获取Canvas环境上下文设置渐变色效果 结语 引言 大家好,今天我们要一起探索HTML5中一个非常有趣且强大的…...
T-Box联网安全定义
T-Box,即Telematics BOX,也称远程信息处理控制单元(Telematics Control Unit,TCU),是车联网中的重要组成部分。它集成了GPS、外部通信接口、电子处理单元、微控制器、移动通信单元和存储器等功能模块&#…...

7. 整数反转【数学】
文章目录 7. 整数反转解题思路Go代码 7. 整数反转 7. 整数反转 给你一个 32 位的有符号整数 x ,返回将 x 中的数字部分反转后的结果。 如果反转后整数超过 32 位的有符号整数的范围 [ − 2 31 , 2 31 − 1 ] [−2^{31}, 2^{31} − 1] [−231,231−1] ࿰…...
Windows环境NodeJS下载配置安装运行
Windows环境NodeJS下载配置安装运行 (1)下载 Node.js — Run JavaScript Everywhere 安装文件。 一路傻瓜式安装。 如果安装正常,输入命令可显示版本号: (2)可以查询nodejs默认的后续依赖安装包位置及缓存…...

石化巡检必备神器,AORO A30防爆手机让“跑冒滴漏”无处藏身!
在石油化工企业生产现场,设备种类繁多,巡检项目错综复杂,任何微小的疏忽都可能引发严重的安全事故。遨游通讯推出了AORO A30防爆手机,精准定位细微故障,在源头上有效控制或消除“跑冒滴漏”等安全隐患。 AORO A30防爆手…...

Smartfusion2开发环境的搭建
Libero软件安装包括libero安装、bibero补丁安装、bibero的license添加和官方ip库的添加等4部分内容组成。具体内容如下所示: 1 Libero软件安装 1、解压LiberoSoC_v11.8的安装包到当前目录,然后运行Libero中的可执行软件进行安装; 图1 双击l…...

使用C++编写一个语音播报时钟(Qt)
要求:当系统时间达到输入的时间时,语音播报对话框中的内容。定时可以取消。qt界面如上图所示。组件如下: countdownEdit作为书写目标时间的line_edit start_btn作为开始和停止的按钮 stop_btn作为取消的按钮 systimelab显示系统时间的lab tex…...
架构师之路-学渣到学霸历程-11
权限管理 我们可以通过一下命令来了解Linux的用户权限; Linux的用户权限真的涉及得非常好,让我们了解一下用户权限的知识吧; let’s go go go~! chmod命令: 作用:变更文件或者目录的权限语法:…...

Java Mail腾讯企业邮箱或其他邮箱发送邮件失败bug记录
问题出现情况 邮件发送时debug用F8逐步运行可以成功发送邮件,但是用F9或者直接运行程序却发送失败未开启mail的debug模式的报错日志是下面这个:org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is java…...
【大数据】HBase集群断电文件坏块导致集群无法启动处理
hfile文件有坏块 Corrupt文件目录:/hbase/data/… HBase异常:region无法在正常上线,http://master:16010页面看region 一直处于transition状态 wal文件损坏 Corrupt文件目录:/hbase/oldWALs/…或/hbase/WALs/… HBase异常&…...
400行程序写一个实时操作系统(三):Sparrow的学习方法
千里之行始于足下,为了让大家的学习更加事半功倍,笔者将会介绍RTOS的学习方法。 可能很多人拿到一份源码,就想通过各种方式搞懂它,例如抄代码或者读代码。 笔者认为,单纯抄一个实时操作系统是没有任何用处的。比如对…...

为什么人工智能用 Python?
人工智能领域倾向于使用Python,主要归因于Python的多个显著优势: 简洁性与可读性:Python的语法设计简洁明了,代码易于阅读和理解,这对于涉及复杂算法和逻辑的人工智能项目尤为重要。它降低了编程门槛,使得…...
挑战杯推荐项目
“人工智能”创意赛 - 智能艺术创作助手:借助大模型技术,开发能根据用户输入的主题、风格等要求,生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用,帮助艺术家和创意爱好者激发创意、提高创作效率。 - 个性化梦境…...

C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

Spark 之 入门讲解详细版(1)
1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室(Algorithms, Machines, and People Lab)开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目,8个月后成为Apache顶级项目,速度之快足见过人之处&…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...