PointNet++改进策略 :模块改进 | OE Unit | PointSIFT,结合方向信息提升模型精度

本文主要是介绍PointNet++改进策略 :模块改进 | OE Unit | PointSIFT,结合方向信息提升模型精度,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Pasted image 20240830100720

  • 论文:PointSIFT: A SIFT-like Network Module for 3D Point Cloud Semantic Segmentation
  • 来源:ECCV 2020
  • 机构:清华大学 & 上海交通大学
  • 论文:http://arxiv.org/abs/1807.00652
  • 代码:
    • https://github.com/MVIG-SJTU/pointSIFT/
    • https://github.com/lelouedec/3DNetworksPytorch

Pasted image 20240830100712

  • 灵感来源:来着SIFT方法,该方法是提取2D图像中图像特征的方法,来生成类似图像中形状的描述
  • 方法实现:设计一个网络PointSIFT,能够提取物体中方向的信息同时能适应不同尺度的物体
  • 实验结果:在ScanNet数据集上语义分割任务中,相比PointNet++网络IOU提升2.3%Acc提升3.22%

网络整体

整体网络如下,PointSIFT对PointNet++中的MLP层进行了改进。
Pasted image 20240830101209

PointSIFT模块

通过堆叠多个 OE 单元,使得网络能够适应不同尺度的形状特征。在 PointSIFT 模块中堆叠多个 OE 单元,每个单元的感受野逐渐增大,以捕捉更大范围内的局部特征。使用shortcuts将各级 OE 单元的输出连接起来,然后通过一个点卷积(point-wise convolution)将多尺度特征融合,最终输出具有多尺度感知能力的特征表示。

Pasted image 20240830100754

Orientation-Encoding Unit

OE单元是一个方向编码单元来描述八个关键方向。

  • 其中主要两个步骤:
    • 八邻域搜索(Stacked 8-Neighborhood Search)对于每个输入点,PointSIFT 首先按照坐标轴将空间划分为八个象限,并在每个象限中找到距离最近的点作为邻居。如果某个象限内没有点,则将输入点自身复制为其最近邻。
      方向编码卷积(Orientation-Encoding Convolution, OEC):在八邻域点上进行三阶段的卷积操作(沿 X, Y, Z 轴),将这些点的特征进行融合。具体来说,卷积操作将 2×2×2 立方体中的特征依次沿各轴进行卷积,最终输出包含方向信息的特征表示。

Pasted image 20240830101158

代码实现

我在文章顶端中,有俩个PointSIFT实现版本分别是pytorch和tensorflow实现,大家根据需求迁移到自己的项目中,下面我讲以pytorch版本网络设计对代码进行注释,具体的实现细节可以参考上面的链接中

class PointSIFT(nn.Module):def __init__(self, nb_classes):super(PointSIFT, self).__init__()self.num_classes = nb_classes# 第一个 PointSIFT 残差模块,用于提取局部特征,半径为 0.1,输出通道为 64。self.pointsift_res_m3 = PointSIFT_res_module(radius=0.1, output_channel=64, merge='concat')# 第一个 PointNet 下采样模块,采样 1024 个点,半径为 0.1,32 个邻居点,输出特征维度为 128。self.pointnet_sa_m3 = Pointnet_SA_module(npoint=1024, radius=0.1, nsample=32, in_channel=64, mlp=[64, 128], group_all=False)# 第二个 PointSIFT 残差模块,半径为 0.2,输出通道为 128。self.pointsift_res_m4 = PointSIFT_res_module(radius=0.2, output_channel=128, extra_input_channel=128)# 第二个 PointNet 下采样模块,采样 256 个点,半径为 0.2,32 个邻居点,输出特征维度为 256。self.pointnet_sa_m4 = Pointnet_SA_module(npoint=256, radius=0.2, nsample=32, in_channel=128, mlp=[128, 256], group_all=False)# 第三个 PointSIFT 残差模块,第一个子模块,半径为 0.2,输出通道为 256。self.pointsift_res_m5_1 

这篇关于PointNet++改进策略 :模块改进 | OE Unit | PointSIFT,结合方向信息提升模型精度的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1120707

相关文章

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

C#实现获取电脑中的端口号和硬件信息

《C#实现获取电脑中的端口号和硬件信息》这篇文章主要为大家详细介绍了C#实现获取电脑中的端口号和硬件信息的相关方法,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 我们经常在使用一个串口软件的时候,发现软件中的端口号并不是普通的COM1,而是带有硬件信息的。那么如果我们使用C#编写软件时候,如

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

通过C#获取PDF中指定文本或所有文本的字体信息

《通过C#获取PDF中指定文本或所有文本的字体信息》在设计和出版行业中,字体的选择和使用对最终作品的质量有着重要影响,然而,有时我们可能会遇到包含未知字体的PDF文件,这使得我们无法准确地复制或修改文... 目录引言C# 获取PDF中指定文本的字体信息C# 获取PDF文档中用到的所有字体信息引言在设计和出

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

Redis过期键删除策略解读

《Redis过期键删除策略解读》Redis通过惰性删除策略和定期删除策略来管理过期键,惰性删除策略在键被访问时检查是否过期并删除,节省CPU开销但可能导致过期键滞留,定期删除策略定期扫描并删除过期键,... 目录1.Redis使用两种不同的策略来删除过期键,分别是惰性删除策略和定期删除策略1.1惰性删除策略

多模块的springboot项目发布指定模块的脚本方式

《多模块的springboot项目发布指定模块的脚本方式》该文章主要介绍了如何在多模块的SpringBoot项目中发布指定模块的脚本,作者原先的脚本会清理并编译所有模块,导致发布时间过长,通过简化脚本... 目录多模块的springboot项目发布指定模块的脚本1、不计成本地全部发布2、指定模块发布总结多模

C#读取本地网络配置信息全攻略分享

《C#读取本地网络配置信息全攻略分享》在当今数字化时代,网络已深度融入我们生活与工作的方方面面,对于软件开发而言,掌握本地计算机的网络配置信息显得尤为关键,而在C#编程的世界里,我们又该如何巧妙地读取... 目录一、引言二、C# 读取本地网络配置信息的基础准备2.1 引入关键命名空间2.2 理解核心类与方法

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一