通过场景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

相关文章

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

Hadoop企业开发案例调优场景

需求 (1)需求:从1G数据中,统计每个单词出现次数。服务器3台,每台配置4G内存,4核CPU,4线程。 (2)需求分析: 1G / 128m = 8个MapTask;1个ReduceTask;1个mrAppMaster 平均每个节点运行10个 / 3台 ≈ 3个任务(4    3    3) HDFS参数调优 (1)修改:hadoop-env.sh export HDFS_NAMENOD

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

js定位navigator.geolocation

一、简介   html5为window.navigator提供了geolocation属性,用于获取基于浏览器的当前用户地理位置。   window.navigator.geolocation提供了3个方法分别是: void getCurrentPosition(onSuccess,onError,options);//获取用户当前位置int watchCurrentPosition(

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

嵌入式技术的核心技术有哪些?请详细列举并解释每项技术的主要功能和应用场景。

嵌入式技术的核心技术包括处理器技术、IC技术和设计/验证技术。 1. 处理器技术    通用处理器:这类处理器适用于不同类型的应用,其主要特征是存储程序和通用的数据路径,使其能够处理各种计算任务。例如,在智能家居中,通用处理器可以用于控制和管理家庭设备,如灯光、空调和安全系统。    单用途处理器:这些处理器执行特定程序,如JPEG编解码器,专门用于视频信息的压缩或解压。在数字相机中,单用途

一次生产环境大量CLOSE_WAIT导致服务无法访问的定位过程

1.症状 生产环境的一个服务突然无法访问,服务的交互过程如下所示: 所有的请求都是通过网关进入,之后分发到后端服务。 现在的情况是用户服务无法访问商旅服务,网关有大量java.net.SocketTimeoutException: Read timed out报错日志,商旅服务也不断有日志打印,大多是回调和定时任务日志,所以故障点在网关和商旅服务,大概率是商旅服务无法访问导致网关超时。 后

定位cpu占用过高的线程和对应的方法

如何定位cpu占用过高的线程和对应的方法? 主要是通过线程id找到对应的方法。 1 查询某个用户cpu占用最高的进程号 top -u 用户名 2 查询这个进程中占用cpu最高的线程号 top –p 进程号-H    3 查询到进程id后把进程相关的代码打印到jstack文件 jstack -l pid > jstack.txt 4 在jstack文件中通过16进制的线程id搜索到

『功能项目』更换URP场景【32】

上一章已经将项目从普通管线升级到了URP管线 现在我们打开上一篇31项目优化 - 默认管线转URP的项目, 进入战斗场景 将Land的子级全部隐藏 将新的URP场景预制体拖拽至Land子级 对场景预制体完全解压缩 将Terrain拖拽至Land的直接子级 将Terrain设置为Land 与 静态Static 清除烘培 重新烘培 修改脚本:LoadRe

70-java write类应用场景

在Java中,我们可以使用java.io包中的FileWriter和BufferedWriter类来写入数据到文件。以下是一个简单的例子,展示了如何使用FileWriter和BufferedWriter来写入数据到文件: import java.io.BufferedWriter;import java.io.FileWriter;import java.io.IOException;pub