主要包含了点云对齐/转换、mpl学习、最大池化得到全局特征三个主要的部分。
-T-Net用于将不同旋转平移的原始点云和点云特征进行规范化;
- mpl是多层感知机,n个共享的mpl用于处理n个点/特征;
- max pooling 用于融合多个特征并得到全局的1024维的特征;
- 最后根据任务的不同,利用一个MPL实现分类;结合局部信息利用多个mpl实现分割。
1.T-Net
首先我们来看T-Net模型的代码,它的主要作用是学习出变化矩阵来对输入的点云或特征进行规范化处理。其中包含两个函数,分别是
学习点云变换矩阵的: 学习特征变换矩阵的:
mpl网络的定义如上,其输入为点云数据,每一个点云作为一个batch。
- 首先将三通道的点云拓展为4-D的张量,tf.expend_dims(),ref,将得到batchn3*1的数据作为网络的输入;
- 随后构建网络,利用1*1的卷积来实现全连接。每一层单元依次为的网络结构;
接下来需要将mpl得到的256维度特征进行处理,以输出的旋转矩阵:
通过定义权重,将上面的256维特征转变为的旋转矩阵输出。
同样对于特征层的规范化处理,其输入为的特征输出为的旋转矩阵,网络结构与上面完全相同,只是在输入输出的维度需要变化:
mpl网络定义每一层的神经元数量为。同样在得到256维的特征后利用来计算出的特征旋转矩阵,其中K为64,为默认输出特征数量。
代码链接
2.MPL处理点云
在得到点云的规范化选择矩阵后,将原始输入进行处理。旋转后的点云作为MPL的输入抽取特征。
此时输入是旋转后的点云,并通过一个两层的得到了64维的特征;
随后利用特征旋转矩阵对特征进行规范化处理,得到校正后的特征。此时的新特征将输入到下一个MPL中进行处理
3.MPL处理特征
这部分包含三层,最终输出维度的特征矩阵.
4.Max Pooling(对称函数)得到全局特征
此时每个输入点从三维变成了1024维的表示,此时需要对n个点所描述的点云进行融合处理以得到全局特征,源码中使用了最大池化层来实现这一功能:
输出为全局特征表示将每一个点云的n个点最大池化为1个特征,这个特征的长度为1024。此时通过了两次mpl的处理将一个点云的特征逐点进行描述,并合并到了1024维的全局特征上来。
5.分类
利用上面的1024维特征,就可以基于这一特征对点云的特性进行学习实现分类任务,PointNet利用了一个三层感知机来对特征进行学习,最终实现了对于40类的分类.
这一感知机由全连接层组成,其中包含了两个防止过拟合。最终就可以根据输出K个分类值分数的大小来确定输入点云的分类了。
源码链接
6.分割
对于分割任务,需要加入局域信息来进行学习。所以分类任务的输入包括了1024维的全局信息还包括了的从点云直接学习出的局部信息。PointNet的做法是将全局信息附在每一个局部点描述的后面,形成了维的向量,而后通过两个感知机来进行分割:
新得到的特征输入两个连续的感知机都通过卷积实现:
由于点云的分割问题可以看做是对于每一个点的分类问题,需要对每一个点的分类进行预测。在通过对全局+局部特征学习后,最后将每一个点分类到50类中,并输出的输出。
代码链接
到此这篇pointnet++网络模型(pointnet网络结构)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/cjjbc/44396.html