【代码阅读】PointNet++具体实现详解
图1 Pointnet++卷积过程 图2 Pointnet++反卷积过程
发布日期:2021-09-16 07:31:58
浏览次数:1
分类:技术文章
本文共 1442 字,大约阅读时间需要 4 分钟。
Pointnet++
Pointnet系列是直接使用三维数据处理点云的代表之作。Pointnet++为Pointnet系列的第二篇文章。Pointnet++的分析文章有很多,但我发现大多数文章也就是对其思想进行一些探究,其思想固然重要,但代码的分析也必不可少。本文将深入探究其代码,尝试恢复整个运算过程,从运算过程的角度帮助读者更好地理解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
- SA1:输入xyz,输出new_xyz, feature
- 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
- FP1:输入SA4.new_xyz,SA4.feature,SA3.new_xyz,SA3.feature,输出feauture
- 分类头:使用conv1d完成最后的分类
- 特征提取操作:由一些SA子网络构成
注意:本文PointNet++的子网络数量与原文不同,tensor的尺寸也与原文不同。网络和tensor是按照中PointNet++的实现总结的。但具体的计算过程与PointNet++相同。
转载地址:https://blog.csdn.net/wqwqqwqw1231/article/details/90757687 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2024年03月28日 13时43分19秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
c语言 无错 但只运行一半,求哈夫曼编码时程序运行到一半就终止了,编译无错...
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
es审计日志_elasticsearch 事务日志translog
2019-04-21
java 图片旋转保存_Java 对图片90度旋转
2019-04-21
用java实现文学研究助手_数据结构文学研究助手 C语言代码实现(带源码+解析)...
2019-04-21
java gc的几种方式_GC 的三种基本实现方式
2019-04-21
babylonjs 设置面板位置_babylonjs 空间坐标转为屏幕坐标
2019-04-21
php局部页面滚动,在访问另一页面后保留浏览器滚动位置 - php
2019-04-21
linux服务器怎么添加站点,如何增加站点或虚拟主机及文件说明
2019-04-21