REGTR: End-to-end Point Cloud Correspondences with Transformers 论文解读

news2024/11/26 13:39:17

目录

一、导言

二、先导知识

1、3DRegNet

2、Kabsch-Umeyama算法

3、InfoNCE损失函数

三、相关工作 

1、基于对应关系的配准

2、全局配准工作

3、过滤问题

4、Transformer

四、REGTR网络

1、降采样和特征提取

2、Transformer 交叉编码器

Transformer为什么要用FFN?

3、输出解码器

4、刚性变换估计

5、损失函数

五、实验

1、对比不同模型评估性能指标

2、算法时间比较 

3、位置编码问题


一、导言

        该论文来自NUC大学某组的CVPR2022,其中该组的代表论文还有RPM-Net,3DFeat-Net。本文提出一种REGTR的端到端点云配准框架,该框架直接使用Transformer注意力层预测两个点云间的最终对应关系,而不需要RANSAC等后处理方法。

(1)REGTR通过Transformer取代以往的RANSAC后处理算法,输入中添加正弦编码的坐标点信息。Transformer中使用自注意力和交叉注意力机制(传统方法)

(2)输出编码器中,预测对应点变换坐标以外,还同时预测每个点重叠概率,来过滤不在重叠区域的对应关系。

(3)另外,单头注意力来预测对应点的坐标的方法,一定程度提高了配准精度,但降低了配准召回率。

二、先导知识

1、3DRegNet

        3DRegNet提出一个统一的深度学习框架,首先对于点云中的内点和外点(噪声)使用交叉熵损失函数进行分类,并对内点的集合使用可微分的Procrustes方法计算姿态(回归),完成点云配准。

        3DRegNet方法不需要初始化,同时解决内点分类(直接预测清晰的对应关系)和变换参数估计(回归计算姿态),来实现点云配准。

        对于提到的可微分的Procrustes方法来估计姿态,其实本质就是存在内外点问题的SVD方法。该方法首先过滤外点,并将内点的质心移动到原点,再进行SVD工作,最后计算平移向量时也使用内点平均位置减旋转后内点平均位置。(保证一切姿态依据内点计算,而不考虑外点)

2、Kabsch-Umeyama算法

        Kabsch-Umeyama算法和ICP算法在流程上基本相近,KU算法用于计算已经对应好的两个点云间的变换关系。ICP是使用迭代的方式,从源点云逐步对齐到目标点云。前一个是输出变换关系,后一个是通过每一轮的变换关系来逐步优化到两者点云对齐。

        算法流程:

        输入原点集X,目标点集Y,输出旋转矩阵R。

(1)计算内点的质心\bar{X},\bar{Y},并根据内点质心进行中心化(与质心作差X'=X-\bar{X})得到新的点集X',Y'

(2)计算协方差矩阵H=X'Y'^T

(3)对H进行SVD分解,H=U\Sigma V^T

(4)计算旋转矩阵R=VU^T

(5)如果det \ R=1,返回R

(6)否则,R=Vdiag(1,1,...,1,-1)U^T

(7)计算平移矩阵t=\bar{Y}-R\bar{X}

建议看这个:https://zhuanlan.zhihu.com/p/532444005

3、InfoNCE损失函数

         InfoNCE(Information Noise Contrastive Estimation)损失函数是一种用于对比学习的损失函数,一般用于训练无监督学习模型,核心是通过对比正样本和负样本来学习数据的表示。

        InfoNCE目的:最大化正样本与当前样本的相似度,并且最小化负样本与当前样本之间的相似度。

        一般的InfoNCE损失函数如下:

                                   \mathcal{L}_{\text{InfoNCE}} = -\log \frac{\exp\left(\frac{\text{sim}(x_i, x_j)}{\tau}\right)}{\sum_{k=1}^{K} \exp\left(\frac{\text{sim}(x_i, x_k)}{\tau}\right)}

        其中x_i代表当前样本,x_j代表正样本,x_k代表负样本,sim(a,b)代表样本a和b之间的相似度(一般使用余弦相似度,但该论文并没有使用),\tau代表温度参数,用于控制分布的平滑程度。

三、相关工作 

1、基于对应关系的配准

        这一段可以看做是更关注局部关系。

        对于以往的基于对应关系的配准有,基于关键点检测和局部描述子(3DMatch)、注意力机制来聚合上下文信息(Predator),但大多数都是优化匹配点和非匹配点的特征间对比损失,并依赖后处理来选择正确的姿态。

2、全局配准工作

        DCP->IDAM、PCAM->PointNetLK->OMNet

        这些网络更关注全局的特征匹配上。

3、过滤问题

         由于基于对应关系的方法中,一定会存在一定的异常值,所以通常使用RANSAC来过滤错误的匹配。

        但同时由于RANSAC方法,是一个非差分算法,无法在训练中反向传播优化,所以在训练过程中只能进行点对特征的匹配,不能进行点对的过滤,导致一直存在错误点对。

        对于这个问题,3DRegNet通过直接回归清晰的对应关系,来进行配准,而不去过滤错误点对。

4、Transformer

        近期Transformer主要使用自注意力机制加交叉注意力机制来进行源点云和目标点云之间的交互和提取信息,也是达到一个全局提取特征的工作。

四、REGTR网络

1、降采样和特征提取

        首先对输入的源点云和目标点云进行降采样,通过KPConv+残差结构(两侧共享权重),得到关键点(少于原来的点数量)和D维特征(一般取256维),也就是将几何空间线性投影到一个256维的低维空间。

        Backbone结构对于不同的数据集的处理如下:

2、Transformer 交叉编码器

        编码器部分由层编码器块组成,每个编码器块中,位置编码由正弦函数对关键点三维坐标进行编码,且多层编码器块中位置编码不变(作为权重)。每个编码器块由三个部分组成,多头自注意力层,多头交叉注意力层、前馈神经网络。在六层编码器块中输入输出维数固定。

        多头自注意力层:点云内部上下文特征交互

        多头交叉注意力层:两个点云交互,用另一个点云的特征更新当前点云特征。

        注意:源点云和目标点云自注意力层的输出均会加和(不是concat)分别作为两者交叉注意力层的输出(GeoTransformer也是这么做的,当时没有注意到,由于输出维度相同,所以通过加和提高点云之间的几何信息)

        前馈神经网络:一共两层线性层,使用残差结构相连,第一层结束后通过dropout,激活函数(代码用的ReLU)+bn。

Transformer为什么要用FFN?

        FFN结构一般来说是两层线性层,先增大维数,再转回原来维数。

        提高特征提取能力:通过增大维数,升到高维空间。通过非线性变换,增强特征表达能力。

        防止模型退化:引入ReLU这种激活函数,防止Transformer再多次迭代后变为线性结构,通过引入非线性变换,保持复杂的表达能力。

        提高计算效率:由于线性层可以并行计算,这也使得在GPU上可以并行处理,相比于使用RNN来说,这种简单的方法更加有效的提高效率。

        增加位置独立性:由于自注意力机制捕捉输入序列中不同位置关系,但不能完全消除位置间的依赖,所以通过FFN非线性映射,来进一步减少位置间的干扰,使得各个位置更加独立。

网络模型中的字母解释:

X,Y:输入点云

\tilde{X},\tilde{Y}:backbone输出的关键点点云

F_{\tilde{X}},F_{\tilde{Y}}:backbone输出的关键点特征

\bar{F}_{\tilde{X}},\bar{F}_{\tilde{Y}}:Transformers编码器器输出的特征

\hat{X},\hat{Y}:解码器输出的关键点点云(两种方法)

\hat{o}_x,\hat{o}_y:没有经过解码器,通过全连接层输出的重叠分数

\hat{X}_{corr},\hat{Y}_{corr},\hat{o}_{corr}:最终的关键点点云和重叠分数,通过源点云和目标点云concat而来

3、输出解码器

        REGTR使用了两种方法用来回归出关键点坐标。

        注意:关键点坐标计算的公式的对应性。

(1)回归法:通过两层MLP直接回归出变换关键点坐标\hat{X},\hat{Y}。使用backbone输出的X关键点特征回归Y的关键点,X变换后关键点回归相反。

                                        ​​​​​​​        ​​​​​​​        \hat{Y}=ReLU(\bar{F}_{\tilde{X}}w_1+b_1)w_2+b_2

(2)单头注意力法:

        使用单头注意力层计算变换后的关键点坐标。backbone输出的关键点特征F_{\tilde{X}},F_{\tilde{Y}}分别作为query和key,backbone输出的X关键点点云\tilde{Y}作为value。X变换后关键点回归相反。

                                                      \hat{Y}=Attn(\bar{F}_{\tilde{X}}W^Q_{out},\bar{F}_{\tilde{Y}}W^K_{out},\tilde{Y})

        对于单头注意力机制法,在RTE和RRE指标中较好,RR的效果较差。

        另外,引入重叠分数作为后续刚性变换估计的权值,重叠分数利用带有Sigmoid激活的全连接层,输入Transformers解码器输出的特征\bar{F}_{\tilde{X}},\bar{F}_{\tilde{Y}},输出重叠分数\hat{o}_x,\hat{o}_y

4、刚性变换估计

        首先concat两轮的关键点作为最终的关键点,concat两路的重叠分数作为最终的重叠分数。

        姿态估计使用Kabsch-Umeyama算法,通过两个点的坐标来最小化下式:

        KU算法对于该网络的优化如下:

5、损失函数

损失函数中的字母解释:

o_{x_i}^*:代表原点云X中第i个点X_i的真实重叠标签

o_{\tilde{x}_i}^*:代表o_{x_i}^*经过下采样后的真实重叠标签

T^*:代表真实的刚体变换(论文中的花体T)

NN( \cdot ):最近邻算法

r_o:重叠阈值

        损失函数由重叠损失,对应损失,特征损失三部分构成。其中\lambda_o=1.0,\lambda_f=0.1

                ​​​​​​​        ​​​​​​​        ​​​​​​​        L=L_c+\lambda_oL_o+\lambda_fL_f

(1)重叠损失:用二元交叉熵监督预测重叠得分,下面每一个损失函数公式只计算单边,但每个损失都是源点云和目标点云相应损失函数的和。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        L_o^X-\frac{1}{M'}\sum_i^{M'}o_{\tilde{X_i}}^* \cdot logo_{\tilde{X_i}}^*+(1-o_{\tilde{X_i}}^*) \cdot log (1-o_{\tilde{X_i}}^*)

        其中o_{\tilde{X_i}}^*o_{​{X_i}}^*进行下采样得到,下采样使用KPConv中的平均池化,并保证与KPConv的参数一致。关键点下采样的可视化图

        o_{​{X_i}}^*真实重叠标签,值要么1,要么0,如果原始点云经过真实刚体变换后T^*(\mathbf{x}_i)与目标点云Y中最近邻点的距离小于预定义的重叠阈值r_o,则o_{​{X_i}}^*取1,否则取0。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        o_{\mathbf{x}_i}^*=\left\{ \begin{array}{ll} 1, & ||T^*(\mathbf{x}_i)-NN(T^*(\mathbf{x}_i),\mathbf{Y})||<r_o \\ 0, & \text{otherwise} \end{array} \right.

(2)对应损失:加权平均的L1损失,o_{\tilde{x}_i}^*作为权值。其实就是源点云backbone输出的关键点经过真实刚体变换后与目标点云decoder输出的关键点作差,另一条路对应损失相对。

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​L_c^X=\frac{1}{\sum_i o_{\tilde{\mathbf{x}_i}}^*}\sum_i^{M'} o_{\tilde{\mathbf{x}_i}}^* |T^*(\tilde{\mathbf{x}}_i)-\hat{\mathbf{y}_i}|

(3) 特征损失:使用InfoNCE损失函数鼓励网络在计算对应关系时考虑几何属性。InfoNCE损失中的相似度计算使用log-bilinear模型。

        对于正负样本的处理,规定p_x为与点x匹配的目标点云中的点(正样本),n_x为与点x不匹配的目标点云的点(负样本)。

        p_xn_x是由样本边界(r_p,r_n)来确定,r_p以内作为匹配点的边界,r_n之外作为非匹配点边界,中间区域作为模糊处理。

        r_p的值设置为mr_n的值设为2m,其中m是backbone最后一层下采样层使用的体素距离。

        特征损失公式如下:

                                 L_f^X=-\mathbb{E}_{x \in \tilde{X}}[log \frac{f(\mathbf{x},\mathbf{p_x})}{f(\mathbf{x},\mathbf{p_x})+\sum_{\mathbf{n_x}}f(\mathbf{x},\mathbf{n_x})}]

        相似性度量计算如下:

                ​​​​​​​        ​​​​​​​        f(\mathbf{x,c})=exp(\mathbf{\bar{f}_x^\mathit{T}W_f \bar{f}_c})

        其中,\bar{f}_x表示Transformers编码器输出的特征\bar{F}_{\tilde{X}}W_f表示一个可学习的线性变换矩阵,被参数化为上三角矩阵U_f和其转置U_f^T之和。

为什么没有使用余弦相似度或者L2范数作为度量?

​​​​​​​        一方面是关键点稀疏,不太可能在两个点云的同样位置,几何特征也不同。另外transformer层加了点云坐标的位置编码,所以特征中包含了关于点云位置的信息,这种位置信息也有助于模型捕捉点云的刚性约束。所以我们使用这种对称结构的相似性度量来作为特征损失中的一部分,保证特征之间的相互关系。

五、实验

1、对比不同模型评估性能指标

        基于3DMatch和3DLoMatch比较3DSN、FCGF、D3Feat等模型,评估RR、RTE、RRE、CD等性能指标,均达到SOTA性能。

2、算法时间比较 

        比较不同方法的时间比较,在保证前处理、特征提取、位姿估计三步骤的情况下算法时间最短,而OMNet方法没有前处理,时间最短。

3、位置编码问题

         在没有使用位置编码,模型的RR、RRE、RTE指标均有显著下降,通过正弦位置编码,效果最好,并且参数量少,另外也使用了5层MLP网络使用深度学习的方式进行编码,但参数量多且性能略低。

        下图基于3DMatch和3DLoMatch两个数据集,在Dec.(解码器方法)和Pos.(位置编码)上进行评估,Dec.有Wt.(加权方法也就是自注意力机制法)和Reg.(回归法)两种解码器方法,Pos.有None,Learned(基于深度学习),Sine(基于正弦)三种编码方法。

 论文参考:https://arxiv.org/abs/2203.14517v1

 代码参考:GitHub - yewzijian/RegTR: End-to-end Point Cloud Correspondences with Transformers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2092534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL高阶练习题2-没有广告的剧集

目录 题目 准备数据 分析数据 实现代码 总结 题目 找出所有没有广告出现过的剧集。 返回结果 无顺序要求 。 准备数据 create database db; use db;Create table If Not Exists Playback(session_id int,customer_id int,start_time int,end_time int); Create table I…

数据结构:(LeetCode 965)相同的树

给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是相同的。 示例 1&#xff1a; 输入&#xff1a;p [1,2,3], q [1,2,3] 输出&#xff1a;true示例 2&…

「草莓」即将上线,OpenAI新旗舰大模型曝光,代号「猎户座」

本月初,OpenAI 创始人、CEO 山姆・奥特曼突然在 X 上发了一张照片,勾起了大家强烈的好奇心。 「四个红草莓,其中还有一个未成熟的青色草莓,这不妥妥地是在说下一代 AI 大模型 GPT-5 要来了吗?」奥特曼在回应网友时也在暗示,惊喜马上就来。 据科技媒体 The Information 报…

前胡基因组与伞形科香豆素的进化-文献精读42

The gradual establishment of complex coumarin biosynthetic pathway in Apiaceae 伞形科中复杂香豆素生物合成途径的逐步建立 羌活基因组--文献精读-36 摘要&#xff1a;复杂香豆素&#xff08;CCs&#xff09;是伞形科植物中的特征性代谢产物&#xff0c;具有重要的药用价…

JAVA:文字写入图片、图片插入图片

一、前言 在实际应用中&#xff0c;需要通过Java将目标信息写在图片上&#xff0c;生成小卡片。 二、实现 1.定义一个工具类&#xff0c;代码如下&#xff1a; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.Fil…

C++(1)基础语法

C(1)之基础语法 Author: Once Day Date: 2024年8月29日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: 源码分析_Once-Day的博客-CSDN博客 参考文…

使用控制台与键盘进行输入输出

1、控制台简介与初始化 计算机在上电启动后&#xff0c;显示器被默认配置成80x25列的文本显示模式 。其使用从0xb8000开始&#xff0c;一共32KB的显存用于显示。如要在屏幕上指定位置显示特定的字符&#xff0c;则只需找到该位置对应的显存地址&#xff0c;写入2字节的数据&am…

ctfshow之web58~web71

目录 web58 思路一&#xff1a; 思路二&#xff1a; 思路三&#xff1a; web59~web65 web66~web67 web68~web70 web71 web58 if(isset($_POST[c])){$c $_POST[c];eval($c); }else{highlight_file(__FILE__); } PHP eval() 函数介绍 定义和用法 eval() 函数把字符串按…

【Sceneform-EQR】通过filament(gltfio)加载gltf模型动画(Filament使用Animator)

Sceneform-EQR 简介 Sceneform-EQR是EQ基于sceneform&#xff08;filament&#xff09;扩展的一个用于安卓端的三维渲染器。 相关链接 Git仓库 Sceneform-EQR 码云 EQ-Renderer的示例工程 EQ-R相关文档 文档目录CSDN专栏 实现通过filament加载gltf模型动画 运行示例 …

U盘无法访问?揭秘原因与高效恢复策略

一、U盘困境深度剖析 在日常的数字生活中&#xff0c;U盘作为我们存储和传输数据的重要工具&#xff0c;其重要性不言而喻。然而&#xff0c;当U盘突然显示“无法访问”时&#xff0c;这种突如其来的困境往往让人措手不及。U盘无法访问的现象可能由多种原因造成&#xff0c;包…

Question mutiple pdf‘s using openai, pinecone, langchain

题意&#xff1a;使用 OpenAI、Pinecone 和 LangChain 对多个 PDF 文件进行提问。 问题背景&#xff1a; I am trying to ask questions against a multiple pdf using pinecone and openAI but I dont know how to. 我正在尝试使用 Pinecone 和 OpenAI 对多个 PDF 文件进行提…

ssh远程连接服务

1、概述 一种安全访问远程服务器的协议&#xff0c;远程管理工具&#xff0c;通过加密方式管理连接&#xff0c;使服务器更安全。 2、加密算法 对称加密 发送密码前将密码数据加密成密文&#xff0c;然后发送出去 接收方收到密文后&#xff0c;使用同一个密钥将密文解密。…

基于爬山法MPPT和PI的直驱式永磁同步风力发电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PMSM 4.2 MPPT 4.3 PI 控制器原理 5.完整工程文件 1.课题概述 基于爬山法最大功率点跟踪 (Maximum Power Point Tracking, MPPT) 和比例积分控制器 (Proportional Integral, PI) 的直驱式永磁同步…

《软件工程导论》(第6版)第5章 总体设计 复习笔记

第5章 总体设计 一、总体设计概念 1&#xff0e;定义 总体设计的基本目的就是回答“系统应该如何实现”这个问题&#xff0c;总体设计又称为概要设计或初步设计。 2&#xff0e;主要任务 &#xff08;1&#xff09;划分出组成系统的物理元素程序、文件、数据库、人工过程…

大模型种草书籍——BERT基础教程:Transformer大模型实战,看完头皮发麻!

《BERT基础教程&#xff1a;Transformer大模型实战》 是一本专注于介绍自然语言处理&#xff08;NLP&#xff09;领域的先进技术——BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;及其应用的教程书籍。 以下是这本书的简要介绍&#…

C++:string类(1)

1.标准库中的string类 1.1 string类(了解) string类的文档介绍在使用string类时&#xff0c;必须包含#include头文件以及using namespace std; 1.2 auto和范围for auto关键字 用auto声明指针类型时&#xff0c;用auto和auto*没有任何区别&#xff0c;但用auto声明引用类型…

gdb 教程

文章目录 GDB启动 GDB 的方法GDB 命令工具参考 GDB GDB是Linux下的调试工具&#xff0c;可以调试C、C、Go、java等语言 GDB提供了以下四个功能&#xff1a; 程序启动时&#xff0c;可以按照自定义的要求运行程序&#xff0c;如设置参数和环境变量可以让被调试的程序在所指定…

Netflix Feign:微服务HTTP调用如何简化?

Netflix Feign&#xff1a;微服务HTTP调用如何简化&#xff1f; 1、什么是Netflix Feign&#xff1f;2、Feign的优点3、示例4、总结 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、什么是Netflix Feign&#xff1f; Feign是一个声明式的…

MFC工控项目实例之十添加系统测试对话框

承接专栏《MFC工控项目实例之九选择下拉菜单主界面文本框显示菜单名》 参考前期我的博客文章《MFC3d立体按钮制作》 这里只给出相关代码 1、在SysTest.h文件中添加代码 #include "ShadeButtonST.h" #include "BtnST.h" class CSysTest : public CDialog {…

OpenAI“草莓”模型及全能型与专业型AI的思考

一、OpenAI“草莓”模型的全能性及其未来趋势 近日&#xff0c;OpenAI预计在秋季推出的代号为“草莓”的新AI模型&#xff0c;展现了其在自然语言处理&#xff08;NLP&#xff09;和深度学习领域的又一重大突破。该模型不仅增强了推理能力&#xff0c;还提供了更为人性化的互动…