pointnet个人理解与实践

第一次进行三维数据的深度学习,都说pointnet是绕不过去的一篇文章,一周时间终于理解和跑通pointnet对于三维数据的分类和分割原理。

数据:

网上可搜到的点云数据很多,但几乎都是未经过整理的,对于pointnet,每个点云的点数量需要一致,因此需要对下载到的数据进行整理。

我对于点云的理解:每个点仅有三个信息,就是它们的坐标,不像图片那样还具有像元值。无论是网格,点云还是其他三维数据,它们归根结底都是只有三个坐标信息,网格也是由对点连接生成线,组成形状,进而成为三维格网。

pointnet可分类也可分割,我对ModelNet40数据进行分类,对ShapeNet数据进行分割,ModelNet40是不能进行分割的,因为它没有针对各个点云部件的标签,它只有针对一整个点云的标签。

模型:

分类:

输入形状为[B,N,3],在进行最后softmax前,形状为[B,K](K为类别数),这里相当于将每个点云整理成了一个值来代替,经过softmax后仍为[B,K],正好对应每个点云的标签。

模型主要就是进行[B,N,3]到[B,K]的变化(其中会多次涉及到维度交换,注意通道对应的维度)

  • 模型中的重要部分T-Net,这是一个矩阵,用来转化输入的点云数据。因为点云的特殊性,点的属性都是一致的,所以随意交换位置对点云本身并无影响,所以这里引入另一个矩阵使点云进行旋转变化,以获得最佳识别状态。points[B,N,3]要与T-Net矩阵相乘,T-Net的形状为[B,3,3],T-Net通过对points卷积,maxpooling,全连接等操作得到,如图模型所示。
  • 得到T-Net再与points相乘,得到了新的points[B,N,3],接着进行mlp,其实就是数个卷积,得到points[B,64,N]。
  • 与第一步相同的操作,再在新的points基础上求出第二个T-Net,与points相乘,得到新的points[B,N,64],
  • 继续对points进行mlp,得到[B,1024,1]
  • maxpooling后points=[B,1024],全连接使之得到分类前的形状[B,K]
  • 最后就是softmax

网上对于pytorch版本的pointnet大致有两个,一个简单易读,但我使用后分类效果不佳,而另一个分类效果极好,他们的不同之处在于以下几个地方:

  1. 较好的分类函数使用了log_softmax,相应的损失函数使用了nll_loss,这两个配套使用,数学中对应softmax+CrossEntropy,效果不好的则使用了后者,针对我的情况,我猜测,因为log_softmax对于大数据具有稳定性,计算速度也快,三维数据就是大量的点,因此配合前者效果明显。
  2. 每个T-Net计算得到后,效果好的代码会给T-Net加上一个形状对应的正交函数,也提升了模型的能力,这个方式我要记录一下,也是个改进模型的可行之策。

分割

相比于分类,只是多了右下角的一部分,可以将feature transform之后的[B,64,64]最终转换为[B,N,K],因为分割与分类的差别就是标签对象,分类标签对应的是整个点云,而分割标签对应的则是每个点。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Matlab PointNet是一个基于Matlab编程语言的深度学习框架,主要用于处理点云数据。PointNet是一个用于点云分类、分割和语义分析等任务的端到端架构。 Matlab PointNet框架具有以下特点和功能: 1. 网络结构:PointNet是一个全连接神经网络,并且具有旋转不变性。它可以处理任意数量的点,并将点云转换为固定大小的特征向量。 2. 特征学习:PointNet通过学习点云中每个点的局部特征来捕捉点云数据的整体结构和特性。它能够学习到点的位置、法线、颜色等信息,从而实现对点云的全局表示。 3. 点云分类:PointNet可以用于点云的分类任务,即将点云分为不同的类别。通过训练,网络可以学习到点云的特征表示,并最终判断点云所属的类别。 4. 点云分割:PointNet还可用于点云的分割任务,即将点云中的每个点分配给不同的物体或区域。通过训练,网络可以学习到点云的局部特征,从而实现对点云的细粒度分割。 5. 语义分析:PointNet可以用于点云的语义分析任务,即对点云中的每个点进行语义标签预测。通过训练,网络可以学习到点云中每个点的语义信息,从而实现对点云的语义分析和理解。 在使用Matlab PointNet框架时,可以从数据准备、模型定义、网络训练和评估等方面进行操作。Matlab提供了丰富的工具和函数,可以方便地进行点云数据的加载、处理和可视化。此外,Matlab还提供了各种深度学习工具箱,如Deep Learning Toolbox,用于构建和训练PointNet网络。 总而言之,Matlab PointNet是一个用于处理点云数据的深度学习框架,它具有强大的特征学习能力和广泛的应用领域。在处理点云相关任务时,可以使用Matlab PointNet框架来实现高效的点云处理和分析。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值