【代码阅读】PointNet++具体实现详解
发布日期:2021-09-16 07:31:58 浏览次数:1 分类:技术文章

本文共 1442 字,大约阅读时间需要 4 分钟。

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是按照中PointNet++的实现总结的。但具体的计算过程与PointNet++相同。

转载地址:https://blog.csdn.net/wqwqqwqw1231/article/details/90757687 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【代码阅读】PointRCNN网络可视化,代码详解
下一篇:【论文阅读】【综述】3D Object Detection 3D目标检测综述

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年03月28日 13时43分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

c语言程序设计 科学出版社习题答案,C语言程序设计(科学出版社)第4章 课后习题参考答案.doc... 2019-04-21
c语言 无错 但只运行一半,求哈夫曼编码时程序运行到一半就终止了,编译无错... 2019-04-21
deepin linux 2014安装,2014.2版本的Deepin虚拟机安装浅谈(就是深度Linux) 2019-04-21
android 限速工具,Android下载器之限速篇 2019-04-21
html刷新ajax实现原理,AJAX的原理—如何做到异步和局部刷新 2019-04-21
html中列表菜单加文字请选择,html中下拉菜单 2019-04-21
读书郎平板中android,读书郎学生平板电脑怎么用 使用方法详解【图文】 2019-04-21
html5 调用摄像头 支持IE,JS调用本地摄像头拍照(兼容各大浏览器及IE8+) 2019-04-21
rust和gta5哪个吃配置_盘点4款Steam“自由度”很高的游戏,GTA5众所周知,目前最热门... 2019-04-21
es审计日志_elasticsearch 事务日志translog 2019-04-21
文件未找到mathpage.wll_解决MathPage.wll文件找不到的问题(找了好久的良心之作)... 2019-04-21
java 图片旋转保存_Java 对图片90度旋转 2019-04-21
用java实现文学研究助手_数据结构文学研究助手 C语言代码实现(带源码+解析)... 2019-04-21
java gc的几种方式_GC 的三种基本实现方式 2019-04-21
wget linux java 32_通过wget在Linux上下载Java JDK会显示在许可证页面上 2019-04-21
babylonjs 设置面板位置_babylonjs 空间坐标转为屏幕坐标 2019-04-21
oracle里面如何查询sqlid,CSS_oracle中如何查看sql, --查询表状态:  select uo.O - phpStudy... 2019-04-21
php局部页面滚动,在访问另一页面后保留浏览器滚动位置 - php 2019-04-21
jmeter运行linux命令行,Jmeter在linux上运行(命令行运行Jmeter) 2019-04-21
linux服务器怎么添加站点,如何增加站点或虚拟主机及文件说明 2019-04-21