通过场景landmark做定位的新思路(CVPR 2022)

2023-10-17 09:50

本文主要是介绍通过场景landmark做定位的新思路(CVPR 2022),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点击进入—>3D视觉工坊学习交流群

Learning to Detect Scene Landmarks for Camera Localization(论文阅读笔记)

2022 CVPR 微软与明尼苏达大学联合研究

项目地址和代码:https://github.com/microsoft/SceneLandmarkLocalization.

主要内容:

提出了一种基于学习的相机定位算法,其无需存储图像特征和场景三维点云,降低了存储限制,通过识别场景中稀疏但显著有代表性的landmark来找到2D-3D对应关系进行后续的鲁棒姿态估计,通过训练检测landmark的场景特定的CNN来实现所提出的想法,即回归输入图像中对应landmark的2D坐标。

5ac4931c32a8879d300c5f11383274ba.png

创新点与Contributions:

1)与大多数landmark通常可见的人体姿态估计不同,由于相机视野有限并且无法同时观察场景的不同部分,相机姿态估计任务中大多数场景landmark不会同时可见,文章通过提出一种新的神经方位估计器(Neural Bearing Estimator,NBE)来解决这一问题,该估计器可以直接回归相机坐标系中场景landmark的3D方位向量,NBE学习全局场景表示的同时学习预测场景landmark的方向向量,即使它们不可见。

2)提出了一个新的室内定位数据集,INDOOR-6,相对于传统的7-Scenes室内数据集,包含更多变化的场景、昼夜图像和强烈的照明变化

3)与现有的无存储定位方法相比,具有低存储的优点且性能较好

文章提出了两种预测图像中场景landmark的方法,在第一种方法中训练了一个模型来识别图像中的2D场景地标,称之为场景地标检测器(SLD),由于假设已知的相机内参,这些2D检测可以转换为3D方位矢量或射线。在第二种方法中训练了一个不同的模型直接预测相机坐标系中landmark的3D方位向量,称之为神经方位估计器(NBE)。注:使用SLD,只能检测到相机视场(FoV)中可见的landmark,而NBE预测所有landmark的方位,包括相机视场外不可见的landmark。

f7b3cfc344ff8b4896b903b7d7c797e7.png

首先会有一个SFM构建的点云模型,会在这些点云中挑选出有代表性的点云子集,用这些子集以及建图时SFM算法生成的数据库图像的伪真值来训练两个提出的网络模型。

SLD:

SLD被设计为将RGB图像I作为输入并输出一组像素似然图(热图)表示每个可见地标的位置,其模型架构如下:

1ae31c389b8c58ef3950a39cc5091214.png

由四个主要组件组成:使用ResNet-18为backbone,删除最后三个最大池化层以保留高分辨率特征图(输出分辨率为输入图像分辨率的四分之一),其次在ResNet-18之后使用扩张卷积块,扩张率设置为1、2、3和4,接下来转置卷积层执行上采样,并负责生成分辨率为输入图像一半的热图,最后一层由1×1卷积组成,预测L个热图通道,每个地标一个。

训练损失:

d29fc73a79c67f4a0db2ce41cd43323b.png

在推断过程中,假设当其最大热图值超过阈值τ=0.2时表明检测到地标,利用亚像素精度计算热图峰值位置处裁剪的17×17 patch的期望值。

NBE:

设计了一个模型在给定图像I的情况下回归全部场景landmark(即使它不可见)的方位向量。

CNN将图像I作为输入以生成深度特征图,然后是多个MLP(多层感知器)块,每个块输出指向landmark的方向向量,MLP包含两个全连接层,具有128个ReLU激活节点。

23fb2f604f55c7270e3637b902feea94.png

b1fffb335a0d7757834d68fd6c28d044.png

训练好两个模型后,将每个查询图像输入SLD网络以获得2D检测,然后根据内参将其转换为一组landmark方位向量B1,如果检测到超过八个场景landmark,使用鲁棒最小解算器(P3P+RANSAC)计算相机姿态,然后使用基于Levenberg-Marquardt的非线性细化。如果没有8个,将相同的图像输入NBE网络并获得预测方位B2,然后合并方位估计B1和B2的集合以形成新的集合B3,当集合B1和B2中的方位指向同一地标时,保留来自B1的估计,因为SLD通常比NBE更准确。最后使用上面描述的相同过程但使用B3计算相机姿态。

如何从点云中选择有代表性的场景landmark提供给网络进行训练?

从SfM点云P中找到L个场景landmark的最佳子集是一个组合问题,其中评估每个子集都是困难的。本文受之前以贪婪的方式寻找有区别的关键点或场景元素工作的启发,去选择鲁棒性(具有更长的轨迹)、可重复性(在多个场景中看到)和可概括性(从许多不同的观看方向和深度观察)的场景landmark,测量轨迹长度大于阈值t的3D点x的显著性得分A(x),如下所示:

f3df53467e1dc7e1fa8f10d0e606c26d.png

除了最大化总体显著性得分之外还寻找在空间上覆盖3D场景的场景landmark以便从场景内的任何地方都可以看到一些地标,例如无论摄像机在场景中的哪个位置都希望一些地标可见。为此使用算法1中描述的约束贪婪方法

a09da7b6c8708e90912108e15aa1a80c.png

下图表述一些挑选到的landmark在二维图像中的投影的裁剪patch

7958b1d15b1bda05943e4a3354982ce2.png

实验:

训练模型的细节可去论文中查看

实验数据集是在自己提出的INDOOR-6数据集和7Scenes数据集上

b5d24d3d8c9c5f4b4d271e1c6dd9458f.png

评估了单独使用NBE, SLD,联合使用NBE+SLD, NBE+SLD(E)(是更紧凑的网络),和SOTA的基于分层定位方法结合HLoc+SLD

Baseline为Posenet、DSAC、HLoc

在INDOOR-6数据集上的结果:

2599ee4649391fe108d1a3418dbe8740.png

6ce9631d04d6cc1ea569b74fd57d614c.png

存储比较和消融研究:

cc2ce8658b10c34df6b7cfc3dd04602c.png

7Scenes数据集上的实验结果:

7a4b5671d6b31ec5983af01d5135ed27.png

总结:

算法是一种存储要求低但精度高的方法。主要见解是在人和物体姿态估计中广泛用于关键点检测的现代CNN架构也适用于检测显著的、场景特定的3D landmark。

实验结果表明,其方法优于以前的无存储方法,但不如HLoc(顶级检索和匹配方法之一)准确,但是HLoc需要高存储。而且基于landmark的2D–3D对应关系补充了HLoc的对应关系,并且在计算姿态之前结合这些对应关系进一步提高了HLoc精度。

局限性:首先神经网络是特定于场景的,像其他学习方法一样每个场景需要许多训练图像,而且在使用之前需要仔细选择场景landmark集。

本文仅做学术分享,如有侵权,请联系删文。

点击进入—>3D视觉工坊学习交流群

干货下载与学习

后台回复:巴塞罗自治大学课件,即可下载国外大学沉淀数年3D Vison精品课件

后台回复:计算机视觉书籍,即可下载3D视觉领域经典书籍pdf

后台回复:3D视觉课程,即可学习3D视觉领域精品课程

3D视觉工坊精品课程官网:3dcver.com

1.面向自动驾驶领域的3D点云目标检测全栈学习路线!(单模态+多模态/数据+代码)
2.彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
3.国内首个面向工业级实战的点云处理课程
4.激光-视觉-IMU-GPS融合SLAM算法梳理和代码讲解
5.彻底搞懂视觉-惯性SLAM:基于VINS-Fusion正式开课啦
6.彻底搞懂基于LOAM框架的3D激光SLAM: 源码剖析到算法优化
7.彻底剖析室内、室外激光SLAM关键算法原理、代码和实战(cartographer+LOAM +LIO-SAM)

8.从零搭建一套结构光3D重建系统[理论+源码+实践]

9.单目深度估计方法:算法梳理与代码实现

10.自动驾驶中的深度学习模型部署实战

11.相机模型与标定(单目+双目+鱼眼)

12.重磅!四旋翼飞行器:算法与实战

13.ROS2从入门到精通:理论与实战

14.国内首个3D缺陷检测教程:理论、源码与实战

15.基于Open3D的点云处理入门与实战教程

16.透彻理解视觉ORB-SLAM3:理论基础+代码解析+算法改进

重磅!粉丝学习交流群已成立

交流群主要有3D视觉、CV&深度学习、SLAM、三维重建、点云后处理、自动驾驶、多传感器融合、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、ORB-SLAM系列源码交流、深度估计、TOF、求职交流等方向。

扫描以下二维码,添加小助理微信(dddvisiona),一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

424efdc2959a1fc74fa400d30e3755dd.jpeg

▲长按加微信群或投稿,微信号:dddvisiona

3D视觉从入门到精通知识星球:针对3D视觉领域的视频课(三维重建系列、三维点云系列、结构光系列、手眼标定、相机标定、激光/视觉SLAM、自动驾驶等)源码分享、知识点汇总、入门进阶学习路线、最新paper分享、疑问解答等进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,6000+星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看,3天内无条件退款

0630318e4d389ad18a24d4ad9d232b90.jpeg

高质量教程资料、答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~ 

这篇关于通过场景landmark做定位的新思路(CVPR 2022)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

ModelMapper基本使用和常见场景示例详解

《ModelMapper基本使用和常见场景示例详解》ModelMapper是Java对象映射库,支持自动映射、自定义规则、集合转换及高级配置(如匹配策略、转换器),可集成SpringBoot,减少样板... 目录1. 添加依赖2. 基本用法示例:简单对象映射3. 自定义映射规则4. 集合映射5. 高级配置匹

python中Hash使用场景分析

《python中Hash使用场景分析》Python的hash()函数用于获取对象哈希值,常用于字典和集合,不可变类型可哈希,可变类型不可,常见算法包括除法、乘法、平方取中和随机数哈希,各有优缺点,需根... 目录python中的 Hash除法哈希算法乘法哈希算法平方取中法随机数哈希算法小结在Python中,

CSS Anchor Positioning重新定义锚点定位的时代来临(最新推荐)

《CSSAnchorPositioning重新定义锚点定位的时代来临(最新推荐)》CSSAnchorPositioning是一项仍在草案中的新特性,由Chrome125开始提供原生支持需... 目录 css Anchor Positioning:重新定义「锚定定位」的时代来了! 什么是 Anchor Pos

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛