【论文笔记】点云配准网络 3DRegNet: A Deep Neural Network for 3D Point Registration 2020

本文主要是介绍【论文笔记】点云配准网络 3DRegNet: A Deep Neural Network for 3D Point Registration 2020,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Instituto Superior T ́ecnico, Lisboa; Google;印度科学研究所,班加罗尔;马里兰大学帕克分校
代码链接:https://github.com/3DVisionISR/3DRegNet

本文提出了一种基于深度学习的点云配准方法3DRegNet,超越了现有RANSAC和ICP的精度,同时在CPU上也达到了25倍RANSAC的速度。

注意3DRegNet假设两个点云之间的对应关系是给定的,3DRegNet只负责剔除噪声点,生成位姿变换矩阵这两个任务。

实验部分对现有的旋转量的各种表示方法、位姿损失的度量方法进行了结果对比。
此外,还对SVD分解和DNN回归两种位姿解算方法进行了对比。

3DRegNet

在这里插入图片描述

a: 使用DNN进行位姿回归的网络结构
b: 使用SVD进行位姿解算的模型结构
ab是本文提出的两种模型,实验部分对其性能进行了对比。
c: 分类网络,对给定的对应关系进行内点、噪声点的分类。
d: 使用DNN进行位姿解算的配准模块

分类block

网络层结构如上图所示,主要是FC+ResNet级联
输入N个对应关系(两个对应点坐标)N X 6,输出 N X 1,即每个对应关系的置信度(权重)。

DNN 配准网络:

该网络将分类网络中的输入和每一层输出进行最大池化后进行context normalization,然后作为输入进行配准。最后输出旋转量预测值和平移量预测值。

SVD配准模块:

使用预测的对应关系的权重将噪声点去除,然后再内点中进行中心化操作,使用SVD分解求解变换矩阵和平移向量:
M = ∑ i ∈ I w i p i q i T \mathbf{M}=\sum_{i \in \mathcal{I}} w_{i} \mathbf{p}_{i} \mathbf{q}_{i}^{T} M=iIwipiqiT
R = U diag ⁡ ( 1 , 1 , det ⁡ ( U V T ) ) V T \mathbf{R}=\mathbf{U} \operatorname{diag}\left(1,1, \operatorname{det}\left(\mathbf{U V}^{T}\right)\right) \mathbf{V}^{T} R=Udiag(1,1,det(UVT))VT
t = 1 N I ( ∑ i ∈ I p i − R ∑ i ∈ I q i ) \mathbf{t}=\frac{1}{N_{\mathcal{I}}}\left(\sum_{i \in \mathcal{I}} \mathbf{p}_{i}-\mathbf{R} \sum_{i \in \mathcal{I}} \mathbf{q}_{i}\right) t=NI1(iIpiRiIqi)

损失函数:

L = α L c + β L r 其 中 : L c = 1 K ∑ k = 1 K L c k 以及  L r = 1 K ∑ k = 1 K L r k L c k = 1 N ∑ i = 1 N γ i k H ( y i k , σ ( o i k ) ) L r k = 1 N ∑ i = 1 N ρ ( q i k , R k p i k + t k ) L = \alpha L_c + \beta L_r\\ 其中: \mathcal{L}_{c}=\frac{1}{K} \sum_{k=1}^{K} \mathcal{L}_{c}^{k} \text { 以及 } \mathcal{L}_{r}=\frac{1}{K} \sum_{k=1}^{K} \mathcal{L}_{r}^{k}\\ \mathcal{L}_{c}^{k}=\frac{1}{N} \sum_{i=1}^{N} \gamma_{i}^{k} H\left(y_{i}^{k}, \sigma\left(o_{i}^{k}\right)\right)\\ \mathcal{L}_{r}^{k}=\frac{1}{N} \sum_{i=1}^{N} \rho\left(\mathbf{q}_{i}^{k}, \mathbf{R}^{k} \mathbf{p}_{i}^{k}+\mathbf{t}^{k}\right) L=αLc+βLrLc=K1k=1KLck 以及 Lr=K1k=1KLrkLck=N1i=1NγikH(yik,σ(oik))Lrk=N1i=1Nρ(qik,Rkpik+tk)
第一项是分类损失,H为交叉熵函数,y是label,0或1
第二项是配准损失,衡量配准后的点对之间的距离,距离度量可以选择是L1,weighted leastsquares,L2, 或者Geman-McClure等。

3DRegNet 细化

其实是迭代配准的方法,将两个3DRegNet级联在一起进行配准。
第二个3DRegNet用于细化较小的旋转平移。
结构图:
在这里插入图片描述

该网络的损失函数是将两个网络的损失平均了一下:
L c = 1 K ∑ k = 1 K 1 2 ∑ r = 1 2 L c k , r and  L r = 1 K ∑ k = 1 K 1 2 ∑ r = 1 2 L r k , r \mathcal{L}_{c}=\frac{1}{K} \sum_{k=1}^{K} \frac{1}{2} \sum_{r=1}^{2} \mathcal{L}_{c}^{k, r} \text { and } \mathcal{L}_{r}=\frac{1}{K} \sum_{k=1}^{K} \frac{1}{2} \sum_{r=1}^{2} \mathcal{L}_{r}^{k, r} Lc=K1k=1K21r=12Lck,r and Lr=K1k=1K21r=12Lrk,r

实验

作者使用FPFH方法提取对应关系,每对点云提取3000个对应关系。
在数据扩增阶段,作者使用了Curriculum learning 的方法对网络进行训练,将随机旋转平移的尺度逐渐增大。(后面逐渐减小尺度因为内殿数目也在减少)

距离度量实验

在这里插入图片描述

可以看出L1范数最好,精度最高,后续全部使用L1进行实验

旋转量的表示形式:

最小李代数表示、四元数、旋转矩阵、SVD解算
在这里插入图片描述

最小李代数精度最佳。后续全部使用其进行实验
同时可以看出sVD解算的精度低于使用DNN回归的精度,因此后续采用DNN方法进行实验。

对应点对数目的影响:

在这里插入图片描述
数目越少,配准精度越低,但是不影响分类的精度。

数据扩增的效果:

在这里插入图片描述

没有使用数据扩增训练的网络在应对大的旋转时误差越来越大。
使用了CL数据扩增的模型则很好的克服了这一点。
后续网络不进行数据扩充。

级联3DRegNet细化效果:

在这里插入图片描述

时间代价不是很大,但是各项指标都有提升,后续采用该级联方法进行评估

与ICP、RANSAC、FGR对比

在这里插入图片描述

3DRegNet+U 达到了SOTA的性能,其中U是指least square non-linear Umeyama refinement technique(《least-squares estimation of transformationparameters between two point patterns.》)
达到了与现有baseline相同的精度,但是其速度更快:

  • 8被FGR,25倍RANSAC

泛化性对比:

在未见数据集上的评估结果:
在这里插入图片描述

这篇关于【论文笔记】点云配准网络 3DRegNet: A Deep Neural Network for 3D Point Registration 2020的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

使用Python高效获取网络数据的操作指南

《使用Python高效获取网络数据的操作指南》网络爬虫是一种自动化程序,用于访问和提取网站上的数据,Python是进行网络爬虫开发的理想语言,拥有丰富的库和工具,使得编写和维护爬虫变得简单高效,本文将... 目录网络爬虫的基本概念常用库介绍安装库Requests和BeautifulSoup爬虫开发发送请求解

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

vue解决子组件样式覆盖问题scoped deep

《vue解决子组件样式覆盖问题scopeddeep》文章主要介绍了在Vue项目中处理全局样式和局部样式的方法,包括使用scoped属性和深度选择器(/deep/)来覆盖子组件的样式,作者建议所有组件... 目录前言scoped分析deep分析使用总结所有组件必须加scoped父组件覆盖子组件使用deep前言

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五