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的语法设计简洁明了,代码易于阅读和理解,这对于涉及复杂算法和逻辑的人工智能项目尤为重要。它降低了编程门槛,使得…...

大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...
使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装
以下是基于 vant-ui(适配 Vue2 版本 )实现截图中照片上传预览、删除功能,并封装成可复用组件的完整代码,包含样式和逻辑实现,可直接在 Vue2 项目中使用: 1. 封装的图片上传组件 ImageUploader.vue <te…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据
微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...

uniapp手机号一键登录保姆级教程(包含前端和后端)
目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号(第三种)后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...