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

embedded/2024/9/23 21:44:23/

目录

一、导言

二、相关工作

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


http://www.ppmy.cn/embedded/113110.html

相关文章

基于python+django+vue的二手电子设备交易平台

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的二…

go单测报错 monkey undefined jmpToFunctionValue

今天老项目遇到 monkey 包下未找到 jmpToFunctionValue # bou.ke/monkey /Users/jasper/go/pkg/mod/bou.ke/monkeyv1.0.2/replace.go:24:14: undefined: jmpToFunctionValue FAIL zxy.com/demo/service [build failed]经过一番排查,原来是mac M1的arm64不支持mo…

Rust练手项目,写个有趣的小工具定时从一言网获取一段有趣的话并推送通知

Rust练手项目,写个有趣的小工具 代码 继续练习Rust, 写个小工具定时从一言网获取一段有趣的话并提示,如下 练习以下Rust点 并发编程 Mutex, Arc指针使用HTTP请求Windows Gui 代码 Cargo.toml [package] name "funny_word" edition "20…

【笔记】一维动态规划DP

文章目录 动态规划DPDP解题步骤例子1lanqiao3367 破损的楼梯题目描述输入格式输出格式解题思路代码 lanqiao3423 安全序列题目描述输入格式输出格式解题思路代码 动态规划DP 动态规划用于解决具有重叠子问题、最优子结构特征的问题。 重叠子问题:子问题是原问题的…

FastAPI与环境变量:实现无缝切换与高效运维

在现代软件开发中,尤其是构建RESTful API时,环境变量的管理显得尤为重要。它们不仅允许我们在不同环境中(如开发、测试、生产)灵活地调整应用的行为,还极大地增强了应用的安全性和可维护性。FastAPI作为一个新兴的、高…

SpringBoot3整合ELK实现日志可视化

SpringBoot整合ELK实现日志可视化 一、环境准备 Elasticsearch、Logstash、Kibana,组合起来可以搭建线上日志系统 ELK中各个服务的作用 Elasticsearch:用于存储收集到的日志信息; Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发…

OpenCV高阶操作

在图像处理与计算机视觉领域,OpenCV(Open Source Computer Vision Library)无疑是最为强大且广泛使用的工具之一。从基础的图像读取、 1.图片的上下,采样 下采样(Downsampling) 下采样通常用于减小图像的…

Redis命令:redis-cli

Redis 命令用于在 redis 服务上执行操作。 要在 redis 服务上执行命令需要一个 redis 客户端。Redis 客户端在我们之前下载的的 redis 的安装包中。 语法 Redis 客户端的基本语法为: $ redis-cli 实例 以下实例讲解了如何启动 redis 客户端: 启动…