【代码阅读】PointNet++具体实现详解

Pointnet++

Pointnet系列是直接使用三维数据处理点云的代表之作。Pointnet++为Pointnet系列的第二篇文章。Pointnet++的分析文章有很多,但我发现大多数文章也就是对其思想进行一些探究,其思想固然重要,但代码的分析也必不可少。本文将深入探究其代码,尝试恢复整个运算过程,从运算过程的角度帮助读者更好地理解PointNet++的思想。话不多说,直接上图。在这里插入图片描述

图1 Pointnet++卷积过程

在这里插入图片描述

图2 Pointnet++反卷积过程
  • 图的解释
    • 虚线大框:一个虚线框代表一个完整的子网络,对应代码中的一个class
    • 红色小框:每个子网络的名称
    • 蓝色小块:一个蓝色小块代表一个tensor,蓝色小框的第一行为tensor的名称,第二行为tensor的尺寸(也有特别个例为操作,例如插值和选取最近3个点的操作)
    • 橘色小块:一个子网络的输出
    • 箭头:一种操作,没有标的大部分为resize或者permutation操作,也有concatenate操作

  • PointNet网络结构
    • 特征提取操作:由一些SA子网络构成
      • SA1:输入xyz,输出new_xyz, feature
        • 对输入的xyz做permutation,然后使用Furtherst Point Sample方法寻找4096个最远点
        • 提取这4096个最远点作为new_xyz,作为下一层的输入
        • 寻找对于new_xyz中的每个点,在给定的距离内寻找点(BallQuery),得到grouped_xyz,给定的距离不同,寻找到的点的数量不同,从而分为两支。
        • 按照grouped_xyz的id对feature进行选取,在SA1中feature就是xyz,所以没有变化
        • 使用MLP对feature提取特征并做maxpooling操作得到高级特征。
        • 对在BallQuery中不同距离下得到的高级特征记性concatenate操作,得到子网络的feature输出。
      • SA2:输入SA1.new_xyz,SA1.feature,输出new_xyz,feature
        • 不同于SA1的地方在于SA2的MLP的输入是由SA1.new_xyz和SA1.feature进concatenate操作而成
        • 所以,不同于SA1的第4步,按照grouped_xyz的id选取的是concatenate后的feature,而不是xyz
      • SA3
      • SA4
    • Upsampling操作:由一些FP子网络构成
      • FP1:输入SA4.new_xyz,SA4.feature,SA3.new_xyz,SA3.feature,输出feauture
        • 对于 SA3.new_xyz中的每个点,寻找SA4.new_xyz中的3个最近点
        • 对这3个最近点,记录id,并计算距离,然后通过距离的倒数计算权重
        • 使用这个3个最近点的特征进行加权平均求取SA3.new_xyz的点的feature
        • 得到的feature与SA3.feature进行concatenate操作
        • 通过MLP和MaxPooling得到FP1的输出,feature。SA3.new_xyz中的每个点对应一个feature,从而完成了Upsampling
      • FP2
      • FP3
      • FP4
    • 分类头:使用conv1d完成最后的分类

注意:本文PointNet++的子网络数量与原文不同,tensor的尺寸也与原文不同。网络和tensor是按照PointRCNN中PointNet++的实现总结的。但具体的计算过程与PointNet++相同。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值