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

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

目录

一、导言

二、先导知识

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 解题-写一个程序判断当前机器的大小端存储模式 #两种方法
  • uniapp + Vue3自定义封装弹窗组件
  • Linux 数据结构 顺序表 链表
  • SpringBoot SSM vue在线作业考试系统
  • RISC-V单片机智能落地扇方案
  • 华为云征文|部署个人博客管理系统 Ghost
  • Golang 字面量的表示
  • 【Docker】容器挂载文件修改后 Commit 新镜像,挂载文件不会更新
  • 用Python实现时间序列模型实战——Day 6: ARIMA 模型的理论基础
  • R 语言学习教程,从入门到精通,R 绘图饼图(23)
  • Flink 1.14.* Flink窗口创建和窗口计算源码
  • 链动2+1与消费增值模式的协同效应
  • NestJs bull 用法
  • Linux驱动开发基础(sr04超声波模块)
  • 算法day16|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树
  • 《Java编程思想》读书笔记-对象导论
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • miaov-React 最佳入门
  • php中curl和soap方式请求服务超时问题
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • 百度小程序遇到的问题
  • 初识 beanstalkd
  • 分享几个不错的工具
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 马上搞懂 GeoJSON
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 小程序测试方案初探
  • 一起参Ember.js讨论、问答社区。
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • # Maven错误Error executing Maven
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • #pragma预处理命令
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (安卓)跳转应用市场APP详情页的方式
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第27天)Oracle 数据泵转换分区表
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (四) Graphivz 颜色选择
  • (转)iOS字体
  • .a文件和.so文件
  • .cfg\.dat\.mak(持续补充)
  • .CSS-hover 的解释
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .NET Core跨平台微服务学习资源