PointNet原理详解


在这里插入图片描述

一、3D点云的挑战

  1. 以无序点云作为输入,因此模型需要具备排序不变性
  2. 点云的旋转,平移不应该改变点云的类别,因此模型需要具备几何变换不变性

二、排序不变性

排序不变性,即输入的点云的顺序不应该改变点云所代表的物体类别
在这里插入图片描述
当一个 N × D N \times D N×D 在 N的维度上随意的打乱之后,其表述的应该是同一个物体。为了实现这一点。一个简单的方法是使用对称函数,如SUM和MAX等函数:
在这里插入图片描述
因此我们可以利用max函数设计一个很简单的点云网络,如下:
在这里插入图片描述
因此我们构造的网络也应是一个具有对称函数特特性的网络。但是这样的网络有一个问题,就是每个点损失的特征太多了,输出的全局特征仅仅继承了三个坐标轴上最大的那个特征,此时我们发现,当我们将点云的每个点先映射到一个冗余的高维空间后(例如1024维),再去进行max的对称函数操作,损失的特征就没那么多了。由此,就可以设计出这PointNet的雏形,称之为PointNet(vanilla)

在这里插入图片描述
h:高维映射
g:对称函数
r:MLP

三、几何变换不变性

对于一个点云,进行平移和旋转之后应该表示的仍然是同一物体。
对于普通的PointNet(vanilla),如果先后输入同一个但是经过不同旋转角度的物体,它可能不能很好地将其识别出来。在论文中的方法是新引入了一个T-Net网络去学习点云的旋转,将物体校准,剩下来的PointNet(vanilla)只需要对校准后的物体进行分类或者分割即可。
在这里插入图片描述
对于三维点的旋转只需乘以一个 3 × 3的旋转矩阵,即可将其矫正;同样的将点云映射到K维的冗余空间后,也是学习一个k×k的旋转矩阵,只不过因为旋转矩阵具有正交性,因此这次校对需要引入一个正则化惩罚项,希望其尽可能接近于一个正交矩阵。
在这里插入图片描述

四、网络结构和代码实现

在这里插入图片描述
对于每一个 N × 3 的点云输入,网络先通过一个T-Net将其在空间上对齐(旋转到正面),再通过MLP将其映射到64维的空间上,再进行对齐,最后映射到1024维的空间上。这时对于每一个点,都有一个1024维的向量表征,而这样的向量表征对于一个3维的点云明显是冗余的,因此这个时候引入最大池化操作,将1024维所有通道上都只保留最大的那一个,这样得到的 1 × 1024的向量就是 N个点云的全局特征。

  1. 果做的是分类的问题,直接将这个全局特征再进过MLP去输出每一类的概率即可;
  2. 如果是分割问题,由于需要输出的是逐点的类别,因此其将全局特征拼接在了点云64维的逐点特征上,最后通过MLP,输出逐点的分类概率。

代码实现

  • 10
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
PointNet是一种用于处理三维点云数据的深度学习模型。它是由Charles R. Qi等人在2017年提出的。PointNet的目标是对不同形状的物体进行分类、分割和识别等任务。 PointNet的网络结构包括两个主要部分:特征提取网络和全局特征编码器。特征提取网络将输入的点云数据转化为局部特征,而全局特征编码器则将局部特征集成为全局特征。具体而言,特征提取网络包含几个全连接神经网络和最大池化层,用于提取每个点的局部特征。全局特征编码器则使用一个全连接神经网络,将所有点的局部特征整合为全局特征。最后,全连接神经网络将全局特征映射到具体的任务空间中,例如物体分类、物体分割等。 PointNet的特点是可以对点云数据进行任意排序和排列,从而能够处理不同形状和大小的物体。此外,PointNet还可以处理不完整和噪声干扰的点云数据,具有较强的鲁棒性。 关于PointNet的代码详解,可以参考以下资源: - PointNet的原始论文提供了详细的网络结构和算法描述,可以通过阅读该论文来深入了解代码的实现细节。 - 在GitHub上可以找到PointNet的开源代码,可以通过下载和阅读代码来了解其实现方式和具体细节。 - 在相关的博客和教程中,也有人对PointNet的代码进行了解析和解释,可以通过阅读这些博客和教程来获取更多的代码解释和示例。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值