当前位置: 首页 > news >正文

PTT:Point Tree Transformer for Point Cloud Registration 论文解读

目录

一、导言

二、相关工作

1、基于Transformer的点云配准

2、针对点云的局部注意力

三、PTT

1、KPconv提取特征

2、Tree Transformer Encoder

3、Decoder 

4、估计姿态

5、损失函数

四、实验

1、对比不同Backbone

2、运行时间对比

3、对比不同PTT方法下RR指标的影响


一、导言

        本文提出了一种名为Point Tree Transformer(PTT),该方法可以有效地提取全面的局部和全局特征,同时保持线性计算复杂度,也在点云配准精度和效率方面均达到SOTA水平。

(1)提出了一种新型Transformer模型PTT,用于点云配准任务

(2)提出了PTA机制,遵循分层树结构,并将注意力权重聚焦到关键点上,从而提取丰富的局部特征以及保持线性复杂度。

(3)将粗糙特征引导方法引入特征提取中,以便关注局部结构,促进多尺度的集成。

二、相关工作

1、基于Transformer的点云配准

        对于以往基于Transformer的点云配准。

        CoFiNet:交替使用自注意力机制和交叉注意力机制,并使用又粗糙到精细的方式提取特征。

        RegTR:利用Transformer直接进行配准,而不需要RANSAC后处理

        GeoTransformer:在Transformer中引入几何结构,来计算超点匹配。

        RegTransformer:结合了Transformer和图神经网络。

        基于Transformer的点云配准可以保证有效地建立源点云与目标点云之间的全局关系,但存在一些局限性,难以专注于稀疏且有意义的关键点,而是分散在所有点上,另外也存在复杂度随点云规模呈二次增长问题。

        该论文中提出树形结构的Transformer,保证有局部特征能力的情况下,计算复杂度为线性。

2、针对点云的局部注意力

        对于以往的引入局部注意力的基于Transformer的点云配准工作。

        Sparse voxel transformer:基于体素编码短程局部关系,基于聚类编码长程上下文关系。

        Voxel transformer:收敛注意力区域到局部邻域并采样远距离点,在实现大感受野的情况下删掉低相关点的影响,也优化了注意力机制的计算效率和关注度。

        PatchFormer:将点云分块后再分别计算每个patch的局部特征并逐渐逼近全局信息。

        由于以往的方法都是使用一种固定的限制注意场的方法,而并不能很好地关注何为高相关点,而是用一个统一的方法近似关注高相关点(对比各种方法删除离群点,和分类离群点)

三、PTT

        PTT网络结构类似于REGTR的结构,但是他在transformer改用树状Transformer。

        PTT网络分为四部分构成,KPConv提取特征,Tree Transformer Encoder,Decoder,加权Procrutes估算姿态。

1、KPconv提取特征

         类似于REGTR中的KPconv接Resnet的残差结构,用于降采样以及提取特征。最终输出特征F^{\hat{X}},F^{\hat{Y}},下采样的点云坐标\tilde{X},\tilde{Y}

2、Tree Transformer Encoder

        Tree Transformer编码器由Tree Construction、特征池化、Tree Transformer Layer构成。

(1)Tree Construction(树建立)

        目的:将点云特征信息,转换为树的信息。

        首先经过下采样的点云\tilde{X},\tilde{Y}分别划分为多个体素结构,并将相邻的N个体素合并为更加粗糙的体素,并不断重复上述步骤,得到多层次的体素结构,也就建立两个从底到上的树状结构\tau^{\tilde{X}},\tau^{\tilde{Y}}。        

        对于不同的树状结构层l下,一个体素由N_l^{\tilde{X}}个点构成的P_l^{\tilde{X}}点集合。由于最开始从最密集层输入点云,并从密集到稀疏进行构建聚合到上层的父节点上,所以我们定义两个索引,分别由密集到稀疏和稀疏到密集。

        密集到粗糙的索引\rho _{d \rightarrow c}^{\hat{X}}:从某一密集层d的每个点对应上一粗糙层c的哪些点的映射关系。

        粗糙到密集的索引\rho _{c \rightarrow d}^{\hat{X}}:从某一粗糙层d的每个点对应上一密集层c的哪些点的映射关系。

        对于应该是那一层密集层或是粗糙层收到上标i的影响。

        第i层体素的坐标情况为C^{\hat{X}_i}_d,与下一层C^{\hat{X}_j}_d坐标之间的关系如下:

        其中,索引的模代表对应关系数量,所以这个公式代表密集层的若干点的坐标的中心点定为上一层粗层的体素中心。其中d=c+1。

(2)特征池化

         特征池化目的:通过树的建立得到的不同层体素中心点的建立后,计算不同层的特征的关系。

        在不同层之间使用两个全连接层的MLP夹一个ReLU的感知层进行映射,粗糙层的特征,使用下一层密集层一团体素特征和两层的这团体素坐标差的concat作为输入并经过MLP后再取体素特征中心。

(3)位置编码

         为了有效地集成位置信息,将密集特征进行特征池化之前提前将最密集的特征通过正弦编码汇入特征池化过程,后续特征池化过程可以自适应地校准点特征,根据相对位置进行聚合特征。

(4)PTA注意力机制

        首先你要了解一般的交叉注意力机制和自注意力机制结合的结构,参照REGTR博客。

REGTR: End-to-end Point Cloud Correspondences with Transformers 论文解读_3dregnet-CSDN博客

        之后对于PTA注意力机制,我们对自注意力机制和交叉注意力机制分别解体,先送第一层的特征(最粗糙层)进入自注意力机制,得到的输出特征与第二层特征相加,再次送入自注意力机制,重复规则直到最细层特征之后送入交叉注意力机制,重复上述工作,由于对于源点云和目标点云特征均进行相同工作,最终encoder分别输出特征F^{\tilde{X}},F^{\tilde{Y}}

        下图为概述,层间体素图示以及层间二维下的图示。

        另外在论文中,计算了对于树形态的PTA结构的复杂度,在层数为2和层数大于2情况下,均可以达到线性时间复杂度,大幅降低了计算开销。

        公式丢在这里,确实不太想看了。

3、Decoder 

        Decoder部分还是采用了传统的两层MLP夹一个ReLU的形态,并且两个分支的权重共享,输入Encoder的输出特征F^{\tilde{X}},F^{\tilde{Y}},得到Decoder输出特征\hat{\mathcal{X}},\hat{\mathcal{Y}}。(题外话:这个latex花体是\mathcal{X})

        共享参数:减少了模型参数数量,提高了可拓展性。

        另外,使用FC+Sigmoid计算重叠分数。输入Encoder的输出特征F^{\tilde{X}},F^{\tilde{Y}},输出重叠分数\hat{o}^{\tilde{X}},\hat{o}^{\tilde{Y}},用于计算loss。

4、估计姿态

        使用加权的Procrustes估算姿态(但是在REGTR中使用的是Kabsch-Umeyama算法,在3DRegNet中使用加权的Procrustes计算是因为存在内外点,他需要解决内外点问题,所以此处是不是有错,不太清楚)

5、损失函数

         见REGTR损失函数,一模一样。

四、实验

1、对比不同Backbone

        基于3DMatch、ModelNet40、KITTI数据集,对比往年的SOTA的Backbone,在RTE、RRE、CD、RR等多指标下均达到SOTA水平。(如下图部分实验)

2、运行时间对比

        线性计算量下运行时间较快,也看到与RegTR相当近似(其实也是网络结构相近)

3、对比不同PTT方法下RR指标的影响

        由于树的结构取决与树的层数与不同层的体素大小,而实验表明将最密集层的V设置为KPConv最终下采样层的体素距离,并将树结构设置为八叉树可以达到最好性能。

        过大的体素大小会妨碍对于细粒度区域的提取,过小的体素大小会限制粗糙层的信息,过浅的树结构会导致粗糙层包含过多无关区域,而过深的结构阻碍训练收敛。

 参考论文:https://arxiv.org/abs/2406.17530

相关文章:

PTT:Point Tree Transformer for Point Cloud Registration 论文解读

目录 一、导言 二、相关工作 1、基于Transformer的点云配准 2、针对点云的局部注意力 三、PTT 1、KPconv提取特征 2、Tree Transformer Encoder 3、Decoder 4、估计姿态 5、损失函数 四、实验 1、对比不同Backbone 2、运行时间对比 3、对比不同PTT方法下RR指标的…...

C++速通LeetCode中等第7题-和为K的子数组(巧用前缀和)

巧用哈希表与前缀和&#xff0c;前缀和差为k的两个序号之间的数组就是满足条件的子数组&#xff0c;用哈希表来存放每个序号的前缀和。 前缀和就是头元素到当前序号子数组元素的和 class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_…...

【读书笔记-《30天自制操作系统》-23】Day24

本篇内容依然比较简单&#xff0c;主要是优化窗口功能以及开发定时器应用程序。首先是优化窗口的切换功能&#xff0c;实现通过键盘和鼠标切换窗口&#xff0c;然后是实现通过鼠标关闭窗口。接着实现不同窗口输入状态的切换&#xff0c;最后是实现定时器的API与应用程序。 1.…...

XML:DOM4j解析XML

XML简介&#xff1a; 什么是XML&#xff1a;XML 是独立于软件和硬件的信息传输工具。 XML 的设计宗旨是传输数据&#xff0c;而不是显示数据。XML 标签没有被预定义。您需要自行定义标签。XML不会做任何事情&#xff0c;XML被设计用来结构化、存储以及传输信息。 XML可以发明…...

15.5 创建监控控制平面的service

本节重点介绍 : k8s中service的作用和类型创建k8s控制平面的service 给prometheus采集用&#xff0c; 类型clusterIp kube-schedulerkube-controller-managerkube-etcd service的作用 Kubernetes Service定义了这样一种抽象&#xff1a; Service是一种可以访问 Pod逻辑分组…...

【Docker Nexus3】maven 私库

1.部署环境 window 11 x64Docker Desktop 4.34.1 (166053) Docker Engine v27.2.0 1.1.Docker 镜像源 1.1.1.Docker Engine 配置 {"builder": {"features": {"buildkit": true},"gc": {"defaultKeepStorage": "32…...

Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互

文章目录 前言1. 拉取相关的Docker镜像2. 运行Ollama 镜像3. 运行Chatbot Ollama镜像4. 本地访问5. 群晖安装Cpolar6. 配置公网地址7. 公网访问8. 固定公网地址 前言 本文主要分享如何在群晖NAS本地部署并运行一个基于大语言模型Llama 2的个人本地聊天机器人并结合内网穿透工具…...

MySQL:用户管理

添加用户 create user usernamelocalhost identified by user_password;删除用户 drop user usernamelocalhost;查看所有用户 输入格式 select user,host from mysql.user; 输出 mysql> select user,host from mysql.user; ----------------------------- | user …...

论文《Mixture of Weak Strong Experts on Graphs》笔记

【Mowst 2024 ICLR】论文提出了一种新的图神经网络架构&#xff0c;称为Mixture of weak and strong experts&#xff08;Mowst&#xff09;&#xff0c;通过将轻量级的多层感知机&#xff08;MLP&#xff09;作为弱专家和现成的GNN作为强专家相结合&#xff0c;以处理图中的节…...

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解(3)】

【诉讼流程-健身房-违约-私教课-诉讼书提交流程-民事诉讼-自我学习-铺平通往法律的阶梯-讲解&#xff08;3&#xff09;】 1、前言说明2、流程说明3、现场提交&#xff08;线下&#xff09;4、网上提交1-起诉书样例2-起诉书编写&#xff08;1&#xff09;原告信息&#xff1a;&…...

数据结构(Day14)

一、学习内容 结构体 概念 引入&#xff1a;定义整数赋值为10 int a10; 定义小数赋值为3.14 float b3.14; 定义5个整数并赋值 int arr[5] {1 , 2 , 3 , 4 ,5}; 定义一个学生并赋值学号姓名成绩 定义一个雪糕并赋值名称产地单价 问题&#xff1a;没有学生、雪糕 数据类型 解决&…...

Paragon NTFS for Mac和Tuxera NTFS for Mac,那么两种工具有什么区别呢?

我们在使用Mac系统读取U盘的过程中往往会遇到一个问题&#xff0c;那就是U盘插进电脑无法显示&#xff0c;或者只能读取不能编辑。出现这种情况的原因就一般是格式错误。 很多小伙伴在解决这种问题的时候会选择使用U盘读写工具&#xff0c;那么哪一种读写工具比较好呢&#xf…...

HashTable结构体数组实现

写了个哈希表&#xff0c;底层逻辑基于结构体数组&#xff0c;核心结构:HashNode,结构外壳:HashTable_R,冲突处理以后会加的(QwQ)~ 目前代码&#xff1a; #ifndef PYIC_X #define PYIC_Xunsigned int PYIC_Hash(unsigned int Val, unsigned int Mov) {unsigned int Ht[4] { …...

Python 管理 AWS ElastiCache 告警

在 AWS 环境中,监控和管理 ElastiCache 集群的性能是至关重要的。本文将介绍如何使用 Python 和 AWS SDK (boto3) 来自动创建和删除 ElastiCache 集群的 CloudWatch 告警。我们将分两部分来讨论:创建告警和删除告警。 第一部分:创建 ElastiCache 告警 首先,让我们看看如何…...

【无人机设计与控制】四旋翼无人机俯仰姿态保持模糊PID控制(带说明报告)

摘要 为了克服常规PID控制方法在无人机俯仰姿态控制中的不足&#xff0c;本研究设计了一种基于模糊自适应PID控制的控制律。通过引入模糊控制器&#xff0c;实现了对输入输出论域的优化选择&#xff0c;同时解决了模糊规则数量与控制精度之间的矛盾。仿真结果表明&#xff0c;…...

[数据集][目标检测]不同颜色的安全帽检测数据集VOC+YOLO格式7574张5类别

重要说明&#xff1a;数据集里面有2/3是增强数据集&#xff0c;请仔细查看图片预览&#xff0c;确认符合要求在下载&#xff0c;分辨率均为640x640 数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件…...

确保 App 跟踪透明度权限:Flutter 中的实践

确保 App 跟踪透明度权限&#xff1a;Flutter 中的实践 在数字广告领域&#xff0c;用户隐私保护已成为一个重要议题。随着 iOS 14 的发布&#xff0c;Apple 引入了 App Tracking Transparency (ATT) 框架&#xff0c;要求开发者在跟踪用户行为以提供个性化广告之前必须获得用…...

李沐 过拟合和欠拟合【动手学深度学习v2】

模型容量 模型容量的影响 估计模型容量 难以在不同的种类算法之间比较,例如树模型和神经网络 给定一个模型种类,将有两个主要因素: 参数的个数参数值的选择范围 VC维...

Go Testify学习与使用

文章目录 1. **安装 Testify**2. **Testify 的主要功能**3. **Testify 使用示例**3.1 断言 (Assertions)3.2 使用 require3.3 使用 Mock3.4 测试套件 (Test Suites) 4. **Testify 的其他功能**5. **总结**常用资源 Testify 是 Go 语言中一个常用的单元测试库&#xff0c;它为标…...

Word中引用参考文献和公式编号的方法

文章目录 应用参考文献对于单个文献引用多于多个文献同时引用 公式编号手动编号自动编号 参考&#xff1a; 应用参考文献 对于单个文献引用 word中的参考文献用交叉应用实现。 首先&#xff0c;将参考文献编号&#xff1a; 然后&#xff0c;在需要引用的地方用交叉引用插入…...

Opencv中的addweighted函数

一.addweighted函数作用 addweighted&#xff08;&#xff09;是OpenCV库中用于图像处理的函数&#xff0c;主要功能是将两个输入图像&#xff08;尺寸和类型相同&#xff09;按照指定的权重进行加权叠加&#xff08;图像融合&#xff09;&#xff0c;并添加一个标量值&#x…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

Swagger和OpenApi的前世今生

Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章&#xff0c;二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑&#xff1a; &#x1f504; 一、起源与初创期&#xff1a;Swagger的诞生&#xff08;2010-2014&#xff09; 核心…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅!

【把数组变成一棵树】有序数组秒变平衡BST,原来可以这么优雅! 🌱 前言:一棵树的浪漫,从数组开始说起 程序员的世界里,数组是最常见的基本结构之一,几乎每种语言、每种算法都少不了它。可你有没有想过,一组看似“线性排列”的有序数组,竟然可以**“长”成一棵平衡的二…...

数据结构:泰勒展开式:霍纳法则(Horner‘s Rule)

目录 &#x1f50d; 若用递归计算每一项&#xff0c;会发生什么&#xff1f; Horners Rule&#xff08;霍纳法则&#xff09; 第一步&#xff1a;我们从最原始的泰勒公式出发 第二步&#xff1a;从形式上重新观察展开式 &#x1f31f; 第三步&#xff1a;引出霍纳法则&…...

32位寻址与64位寻址

32位寻址与64位寻址 32位寻址是什么&#xff1f; 32位寻址是指计算机的CPU、内存或总线系统使用32位二进制数来标识和访问内存中的存储单元&#xff08;地址&#xff09;&#xff0c;其核心含义与能力如下&#xff1a; 1. 核心定义 地址位宽&#xff1a;CPU或内存控制器用32位…...