Pointnet Tutorial

目录

 .1 intro-点云特性

 1.1 点云特性

1.2 motivation

1.3 pointnet的处理

.2 Pointnet

2.1 contribution

2.2 solution

2.3 backbone

2.4 代码部分

 2.5 小结

 .4 应用

References

 .1 intro-点云特性

Q1:什么是点云?

简单来说就是一堆三维点的集合,必须包括各个点的三维坐标信息,其他信息比如各个点的法向量、颜色等均是可选项

num_channels一般为3,表示点云的三维坐标。

 1.1 点云特性

点云几个两个很重要的特性。

(1)无序性。点云中的点在打乱它们的索引之后,依然能表达空间结构。

(2)旋转不变形。点云整体经过旋转之后,类别没有改变。

1.2 motivation

related work

  1. Volumetric CNNs:对体素应用3DCNN。缺点是点云的坐标空间的稀疏性导致转成体素后的分辨率问题,以及3D卷积带来的开销

  2. Multiview CNNs:将点云或者shape渲染成视图,使用传统的图像卷积来做特征学习。这种方法确实取得了不错的效果,但是缺点是应用非常局限,像分割、补全等任务就不太好做

  3. Spectral CNNs

  4. feature-based DNN

why we want to do this?

直接对点云做特征学习也不是不可以,但有几个问题需要考虑:特征学习需要对点云中各个点的排列保持不变性、特征学习需要对rigid transformation保持不变性等。

1.3 pointnet的处理

 对于(1)

 所以设计的ML模型必须是一个对称函数,因为对称函数的结果与输入的参数的顺序无关。比如sum、max函数。可以类比二维卷积神经网络中的max pooling操作。实际上论文中的max pooling操作在代码里用的就是max函数。

 以上这种直接对坐标进行max的操作会使大量的点丢失(可能会导致特征丢失),所以要先使用多层感知器(MLP)将每个点映射到更高的维度(此时信息会冗余)

对于(2)

论文中使用了T-Net去学习物体的旋转,相当需要学习一个3x3的矩阵

 我们希望不论点云在怎样的坐标系下呈现,网络都能正确的识别出。这个问题可以通过STN(spacial transform netw)来解决。二维的变换方法可以参考这里,三维不太一样的是点云是一个不规则的结构(无序,无网格),不需要重采样的过程。pointnet通过学习一个矩阵来达到对目标最有效的变换。

 小结:

为什么PointNet是重要的?

真正让PointNet具备很大影响力的,还是它的简洁、高效和强大。
首先要说清楚,PointNet所作的事情就是对点云做特征学习,并将学习到的特征去做不同的应用:分类(shape-wise feature)、分割(point-wise feature)等。

PointNet之所以影响力巨大,就是因为它为点云处理提供了一个简单、高效、强大的特征提取器(encoder),几乎可以应用到点云处理的各个应用中,其地位类似于图像领域的AlexNet。

.2 Pointnet

2.1 contribution

  1. 设计了一个新颖的深层网络架构来处理三维中的无序点集

  2. 设计的网络表征可以做三维图形分类、图形的局部分割以及场景的语义分割等任务

  3. 提供了完备的经验和理论分析来证明PointNet的稳定和高效。

  4. 充分的消融实验,证明网络各个部分对于表征的有效性。

网络的亮点

  1. 空间变换网络解决旋转问题:三维的STN(空间变换网络--spatial transform network)可以通过学习点云本身的位姿信息学习到一个最有利于网络进行分类或分割的DxD旋转矩阵(D代表特征维度,pointnet中D采用3和64)。至于其中的原理,我的理解是,通过控制最后的loss来对变换矩阵进行调整,pointnet并不关心最后真正做了什么变换,只要有利于最后的结果都可以。pointnet采用了两次STN,第一次input transform是对空间中点云进行调整,直观上理解是旋转出一个更有利于分类或分割的角度,比如把物体转到正面;第二次feature transform是对提取出的64维特征进行对齐,即在特征层面对点云进行变换。

  2. maxpooling解决无序性问题:网络对每个点进行了一定程度的特征提取之后,maxpooling可以对点云的整体提取出global feature。

2.2 solution

challenges

点云的几个特点:

  1. 无序性 --> 对称函数设计用于表征

  2. 点不是孤立的,需要考虑局部结构 --> 局部全局特征结合

  3. 仿射变换无关性 --> alignment network

2.3 backbone

 

 

其中,mlp是通过共享权重的卷积实现的,第一层卷积核大小是1x3(因为每个点的维度是xyz),之后的每一层卷积核大小都是1x1。

即特征提取层只是把每个点连接起来而已。经过两个空间变换网络和两个mlp之后,对每一个点提取1024维特征,经过maxpool变成1x1024的全局特征。

再经过一个mlp(代码中运用全连接)得到k个score。

分类网络最后接的loss是softmax。

n*3 输入

输出 n*64

输入 n*64

输出 n*1024

然后max pooling (每个n取出一个最大值)输出1*1024

2.4 代码部分

变换矩阵部分,以第一个STN为例 

 2.5 小结

本质上pointnet就是一种可以对无序点集提取出特征的网络结构

先输入n*3个点

然后进行仿射变换输出 n*3

经过mlp输出 n*64

再进行仿射变换

再经过mlp 输出 n*1024

然后 max pooling后输出1*1024

并且拼接之前的n*64 输出 n*1088

再经过mlp输出 n*128

然后最后再经过mlp

输出n*m的打分

在PointNet中 网络对每一个点做低维到高维的映射进行特征学习,然后把所有点映射到高维的特征通过最大池化最终表示全局特征。

 .4 应用

PointnetGPD

https://github.com/Hymwgk/PointNetGPD

应用于抓取

本质上就是先preprocess得到夹爪内部点云,然后处理进入网络打分,输出打分高的

 

References:

细嚼慢咽读论文:PointNet论文及代码详细解析 - 知乎

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
TensorFlow是一个开源的机器学习框架,用于构建和训练各种机器学习模型。TensorFlow提供了丰富的编程接口和工具,使得开发者能够轻松地创建、训练和部署自己的模型。 TensorFlow Tutorial是TensorFlow官方提供的学习资源,旨在帮助新手快速入门。该教程详细介绍了TensorFlow的基本概念、常用操作和各种模型的构建方法。 在TensorFlow Tutorial中,首先会介绍TensorFlow的基本工作原理和数据流图的概念。通过理解数据流图的结构和运行过程,可以更好地理解TensorFlow的工作方式。 接下来,教程会详细介绍TensorFlow的核心组件,例如张量(Tensor)、变量(Variable)和操作(Operation)。这些组件是构建和处理模型的基本元素,通过使用它们可以创建复杂的神经网络和其他机器学习模型。 在教程的后半部分,会介绍如何使用TensorFlow构建不同类型的模型,例如深度神经网络(DNN)、卷积神经网络(CNN)和递归神经网络(RNN)。每个模型都会有详细的代码示例和实践任务,帮助学习者掌握相关知识和技能。 此外,教程还包含了关于模型的训练、评估和优化的内容,以及如何使用TensorBoard进行可视化和调试。 总结来说,TensorFlow Tutorial提供了全面而详细的学习资源,通过学习该教程,可以快速入门TensorFlow,并且掌握构建和训练机器学习模型的方法。无论是初学者还是有一定经验的开发者,都可以从中受益并扩展自己的机器学习技能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值