PointNet++实现第2步——PointNet++理解

一、PointNet的局限性(PointNet++出现的原因)

对每一个点映射到高维空间,再通过max结合。由于其网络直接暴力地将所有的点最大池化为了一个全局特征,因此局部点与点之间的联系并没有被网络学习到。PointNet本质上要么时对同一个进行操作,要么是对全局的点进行操作,所以PointNet实质上时没有局部概念的,这样子,会缺失一些精细的特征。在分类和物体的Part Segmentation中,这样的问题还可以通过中心化物体的坐标轴部分地解决,但在场景分割中,这就导致效果十分一般了。

1.PointNet缺失局部特征

2.PointNet有平移不变性的缺陷

关于平移不变性,此介绍详细可见【转载博文】。这里,我将其种有关的部分放到这里。

在欧几里得几何中,平移是一种几何变换,表示把一幅图像或一个空间中的每一个点在相同方向移动相同距离。比如对图像分类任务来说,图像中的目标不管被移动到图片的哪个位置,得到的结果(标签)应该是相同的,这就是卷积神经网络中的平移不变性。平移不变性意味着系统产生完全相同的响应(输出),不管它的输入是如何平移的 。

(平移不变性质)图来源于:https://blog.csdn.net/voxel_grid/article/details/79275637?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

(平移等变性质)图来源于:https://blog.csdn.net/voxel_grid/article/details/79275637?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2

二、PointNet++

1.层级点云特征学习

核心思想:在局部的区域区域内,重复的,迭代性使用PointNet。由于局部具有置换不变性,所以整体也具有局部不变性。PointNet++这个核心思想主要借鉴了CNN的多层感受野的思想。CNN通过分层不断地使用卷积核扫描图像上的像素并做内积,使得越到后面的特征图感受野越大,同时每个像素包含的信息也越多。

下面以2D进行解释:
如下图,先找到一个局部的区域,我们想学习小区域的特征,因为我们不想受到整体平移的影响,所以,我们第一步是先把小区域的部分转移到一个局部坐标系下,这样整体的点云不会影响这个局部区域。第2步,在这个小区域内再使用PointNet来提取它的特征,得到一个新的点,不仅包含在整个点云的位置(X,Y),还有向量特征(F),F表示其几何形状。


重复上述操作,可以得到一组新的点(新的点集,该点集数量上少于原始点集,但每一个点表示周围一个区域的几何特点)。文章将这样的一个层成为Set Abstraction。:

1.1. Set Abstraction组成简介

点集的特征提取即Set Abstraction由三部分组成,分别为Sampling layer、Grouping layer、Pointnet layer。
(1) Sampling:利用FPS(最远点采样)随机采样点
(2)Grouping:利用Ball Query划一个R为半径的圈,将每个圈里面的点云作为一簇
(3)PointNet: 对Sampling+Grouping以后的点云进行局部的全局特征提取

1.2.Sampling layer

采样层在输入点云中选择一系列点,由此定义出局部区域的中心。采样算法使用迭代最远点采样方法 iterative farthest point sampling(FPS)。其中,FPS为先随机选择一个点,然后再选择离这个点最远的点作为起点,再继续迭代,直到选出需要的个数为止。相比随机采样,能更完整得通过区域中心点采样到全局点云。
图来源于:深蓝学院公开课,点云上的卷积神经网络及其部分应用-李伏欣老师

1.3. Grouping layer

目的是要构建局部区域,进而提取特征。思想就是利用临近点,并且论文中使用的是neighborhood ball,而不是KNN,是因为可以保证有一个fixed region scale,主要的指标还是距离distance。

图来源于:深蓝学院公开课,点云上的卷积神经网络及其部分应用-李伏欣老师

1.4. PointNet layer

在如何对点云进行局部特征提取的问题上,利用原有的Pointnet就可以很好的提取点云的特征,由此在Pointnet++中,原先的Pointnet网络就成为了Pointnet++网络中的子网络,层级迭代提取特征。

2.分类网络


分类网络只要通过这样逐层的提取局部特征,最后总结出全局特征就可以输出分类结果了

3.分割网络

这一部分强烈pick这个博主的解释,太精彩了!!!【点此此处获取】

4.非均匀采样密度下的鲁棒特征学习

通过上述方法实现的PointNet++虽然在点云上的分类和分割效果有了一定的提升,但是作者发现,其在点云的缺失鲁邦性上似乎变得更差了。其原因是因为激光收集点云的时候总是在近的地方密集,在远的地方稀疏,这种不均匀性给点集特征学习带来了很大的挑战——【在密集数据中学习到的特性可能无法推广到稀疏采样区域。当然,为稀疏点云训练的模型可能无法识别细粒级高精度的局部结构。】
因此当Sampling和Grouping的操作在稀疏的地方进行的时候,一个点可能代表了很多很多的局部特征,因此一旦缺失,网络的性能就会极大的受影响。

作者对其的改进是通过引入了不同分辨率/尺度的Grouping去对局部做PointNet求局部的全局特征,最后再将不同尺度的特征拼接起来;同时也通过在训练的时候随机删除一部分的点来增加模型的缺失鲁棒性。
在论文中,作者提及两种方案:

  • 多尺度组合(multi-scale grouping, MSG)
  • 多分辨率组合(multi-resolution grouping, MRG)

方案一:多尺度分组MSG
如上图(a)所示,比较直观的思想是,在每一个分组层都通过多个尺度来确定每一个中心点的邻域范围,并经过pointnet提取特征之后将多个特征联合起来,得到一个多尺度的新特征。 很明显,通过上述做法,对于每一个中心点都需要多个patch的选取与卷积,其计算量的增加也是很显著的。

方案二:多分辨率分组MRG
为了解决MSG计算量太大的问题,作者提出了MRG。。如上图(b)所示,类似的,新特征通过两部分连接起来。左边特征向量是通过一个set abstraction后得到的,右边特征向量是直接对当前patch中所有点进行pointnet卷积得到。并且,当点云密度不均时,可以通过判断当前patch的密度对左右两个特征向量给予不同权重。例如,当patch中密度很小,左边向量得到的信息就没有对所有patch中点提取的特征可信度更高,于是将右特征向量的权重提高。以此达到减少计算量的同时解决密度问题。

5.实验结果

PointNet++理解(PointNet++实现第2步)相关推荐

  1. PointNet理解(PointNet实现第4步)

    PointNet第4步--PointNet理解 前面,我们讲到了点云的挑战,针对点云的挑战,PointNet论文提出了下面的解决方案. 下面用到的PPT来源于PointNet作者本人,不得不说大佬还是 ...

  2. 3D点云(3D point cloud)及PointNet、PointNet++

    文章目录 一.什么是3D点云 二.基于3D点云的一些任务 三.如何提取3D点云数据的特征:PointNet (1)在PointNet之前也有工作在做点云上的深度学习 (2)PointNet (1)置换 ...

  3. 最全PointNet和PointNet++要点梳理总结

    一.基本简介   本篇博文主要是对 PointNet,PointNet++ 论文的要点进行梳理和总结.认真阅读本博文后,不仅能够深刻理解论文的核心算法思想,而且对模型训练数据.模型的训练流程也能了然于 ...

  4. Pointnet与Pointnet++论文笔记

    Pointnet与Pointnet++论文笔记 近期由于课题需要,研读了Pointnet系列文章,在此总结个人心得,并结合了部分博客进行阐述,不足之处希望各位批评指正,也欢迎各位同学来进行学习交流. ...

  5. 点云3D目标检测学习(1):pointnet、pointnet++模型

    3D目标检测学习笔记 开始正式进入3D目标检测的学习!!! 1.点云数据 无序性:只是点而已,排列顺序不影响 近密远疏 非结构化数据,直接CNN有点难 2.PointNet CVPR2017 Poin ...

  6. 从PointNet到PointNet++理论及代码详解

    从PointNet到PointNet++理论及代码详解 1. 点云是什么 1.1 三维数据的表现形式 1.2 为什么使用点云 1.3 点云上以往的相关工作 2. PointNet 2.1 基于点云的置 ...

  7. ansys的kbc_怎样理解ansys中的载荷步

    怎样理解 ansys 中的载荷步? 一 . 载荷步的含义 一个载荷步是指边界条件和载荷选项的一次设置, 用户可对此进行一次或多次求 解. 一个分析过程可以包括: 1. 单一载荷步(常常这是足够的) 2 ...

  8. 【3D计算机视觉】从PointNet到PointNet++理论及pytorch代码

    从PointNet到PointNet++理论及代码详解 1. 点云是什么 1.1 三维数据的表现形式 1.2 为什么使用点云 1.3 点云上以往的相关工作 2. PointNet 2.1 基于点云的置 ...

  9. 对于FlowNet3D论文代码的理解(pointnet++)

       把这个作为自己学习的记录,鞭策自己努力推进任务,认真学习,保持更新. 目录 train.py model_concat_upsa.py get_model pointnet_util.py po ...

最新文章

  1. mysql脚本文件长什么样_在linux下执行mysql脚本文件,内容是创建一个FUNCTION,总是报错,请帮看下原因是什么?多谢...
  2. Python网络爬虫之图片懒加载技术、selenium和PhantomJS
  3. C/C++ scanf 函数中%s 和%c 的简单差别
  4. Javascript内部类
  5. findbugs 接口文档_Java代码审查工具findbugs的使用总结
  6. shell 简介(常用shell之bash)
  7. 接口与事件之图形界面的认证登录
  8. ceph搭建_【实战演练】基于各种存储模拟器与软件存储的存储实验07-Ceph分布式存储的3种存储类型使用方法...
  9. 微软并购雅虎案:世界商业三巨头的财智较量
  10. js 剩余时间,天,小时,分钟,秒
  11. 奔驰S400商务型升级前排座椅通风系统,夏天必备功能
  12. ToC战场进入尾声,ToB市场战争厮杀即将升级?
  13. Scrapy框架学习 - 爬取豆瓣电影排行榜TOP250所有电影信息并保存到MongoDB数据库中
  14. 快速掌握Charles抓包工具 [MP4] (115M)
  15. 关于公网摄像机直播公网视频直播的基本思考方法
  16. 通用计算机系统和嵌入式计算机系统相同点,嵌入式计算机系统同通用型计算机系统相比有什么特点?...
  17. 怎样看懂电路板?电路板短路检查方法是什么?
  18. cleanmymac x有用吗值得下载安装吗?
  19. 收藏下一个适合用来做宣传页背景的色调和CSS代码
  20. 咖啡汪译文 —— 2021最新IBM消息 祝贺2020年度 Code for Global挑战赛冠军Agrolly! 结识全球五强 这些方案正在争夺20万美元的大奖,并有机会看到他们的解决方案的部署。

热门文章

  1. 有关Amazon站内信邮件类别处理
  2. 认证模式之Digest模式
  3. 10张程序员喜爱的壁纸,需要自取~
  4. JavaScript中基本数据类型的强制转换
  5. SQL中各关键字以及DBeaver工具的使用
  6. Quartus II 8.1 安装破解 方法
  7. cf不能全屏win7的解决方法_怎么解决win7电脑没声音 win7电脑没声音解决方法介绍【详解】...
  8. RK312x机顶盒Android4.4系统编译
  9. VBScript脚本运用(脚本程序与宿主程序的交互)
  10. 递归算法(练习习题)