摄像头定位:ICCV2019论文解析

SANet: Scene Agnostic Network for Camera Localization

论文链接:

http://openaccess.thecvf.com/content_ICCV_2019/papers/Yang_SANet_Scene_Agnostic_Network_for_Camera_Localization_ICCV_2019_paper.pdf

The code is available at: https://github.com/ sfu-gruvi-3dv/sanet_relocal_demo

摘要

提出了一种场景不可知的摄像机定位神经网络结构,模型参数和场景相互独立。尽管最近在基于学习的方法方面取得了进展,但大多数方法都需要对每个场景逐一进行训练,这不适用于SLAM和机器人导航等在线应用,因为在这些应用中,模型必须建立在平面上。本文的方法学习建立分层的场景表示,并预测查询的密集场景坐标图给定任意场景的地面上的RGB图像。利用预测出的场景坐标图可以估计出查询图像的6D摄像机姿态。此外,稠密预测还可用于其他在线机器人和AR应用,如避障。本文在室内和室外基准上证明了本文的方法的有效性和效率,实现了最先进的性能。

1.       Introduction

摄像机定位就是根据摄像机拍摄的图像来确定摄像机的方位和位置。它是SLAM、位置识别、机器人导航和增强现实等许多应用的关键组件。传统的[30,26,25,16,15,7]方法是首先在输入图像和参考场景(由点云或一组参考图像表示)之间找到一组特征对应,然后通过最小化在这些对应上定义的能量函数来估计相机姿态。

由于手工制作组件(即图像检索、特征对应匹配和相机姿态估计)的长管道,这种方法通常很脆弱。

近年来,基于学习的方法[18,4,11,3]提高了随机森林(RFs)和卷积神经网络(CNNs)的摄像机定位性能。一些作品[11,10,32,2]使用CNNs直接回归相机姿势;而另一些作品[9,31,27,3,5]首先估计场景坐标图,定义查询图像中每个像素的xyz坐标,然后计算相应的相机姿态,这是一个适定优化问题。这些方法通常比传统的流水线具有更好的鲁棒性。然而,RFs或cnn通常是从特定场景的图像中学习的,在应用于不同场景之前需要重新训练或调整。虽然在线自适应是可能的,但它仅用RGBD查询图像和RF[6]来演示。CNNs通常能产生更高的定位精度,但是CNN如何快速适应不同的场景还不清楚,这限制了CNN的应用。

本文遵循这种基于学习的方法进行摄像机定位,目的是建立一个场景不可知的网络,该网络可以在未经重新训练或调整的情况下工作在看不见的场景上。这种能力对于在线应用程序(如SLAM和机器人导航)非常重要,因为在这些应用程序中,再训练是不可能的。针对场景坐标地图的估计问题,采用与文献[5]相似的方法从估计的场景坐标地图中计算出摄像机的姿态,同时力求使该过程不受场景的影响。估计出的稠密场景坐标图可进一步应用于机器人避障等其他应用中。为了实现这一目标,本文设计了一个网络SANet,从一些参考场景图像和3D点中提取场景表示,而不是在网络参数中编码特定的场景信息,这样本文的网络就可以应用于不同的场景,而无需任何再训练或调整。

具体来说,本文的场景表示是不同分辨率的特征层次金字塔。在查询时,该场景表示与查询图像的特征相结合,以预测从粗到细的密集场景坐标图。直观地,网络学习以视觉一致的方式将查询图像输入到三维场景表面。为了融合查询图像特征和场景特征,本文采用了与PointNet[21,22]相似的结构来预测场景坐标特征,PointNet可以处理无序的点云。为了证明所提方法的有效性,本文在包括室内场景(7个场景[27])和室外场景(剑桥[11])在内的多个基准数据集上评估了本文的方法。本文已经达到了最先进的表现,而本文的方法工作在没有再训练或适应的任意场景。

2.       Related Work

特征匹配和摄像机拟合:在传统方法中,首先检索几个相邻图像,然后基于一些手工描述子在查询图像和3D场景点之间匹配一组2D-3D对应关系,最后通过PnP算法恢复摄像机姿态[8,13]。这些作品致力于使手工绘制的描述符更加高效[17,26],更加健壮[24,29],或者更易于扩展到大型室外场景[15,23,26]。

然而,手工制作的特征检测器和描述符只适用于纹理良好的图像。最近,InLoc[30]将手工制作的特征替换为CNNs,即NetVLAD[1]用于图像检索,VGG[28]用于特征匹配,从而推动了这一方向的发展。虽然获得了强大的性能,但它仍然是基于传统的管道通信匹配和相机模型设置。相比之下,基于学习的方法(包括本文的工作)可以直接从查询图像中回归场景坐标图,其优点是利用图像中的全局上下文信息来恢复无纹理区域的三维结构。密集场景坐标图作为一种密集的三维重建方法,除了具有较好的鲁棒性外,还可以应用于机器人避障等领域。

随机森林:Shotton等人[27]提出了利用随机森林回归场景坐标的方法,并在接下来的几项工作中扩展了该管道。GuzmanRivera等人[9] 训练一个随机森林来预测不同的场景坐标来解决场景的模糊性。Valentin等人[31]训练一个随机森林来预测场景坐标的多模型分布,以提高姿态精度。Brachmann等人[4] 利用自动上下文随机林增强的预测能力,从RGB图像(而不是RGB-D)定位摄像机。这些作品都不是场景不可知的。

最近的一项工作[6]已经将这种方法推广到使用RGBD相机和在线自适应的不可见场景。与这些工作相比,本文的方法是场景不可知的,只需要一个RGB图像进行摄像机定位,这在室内和室外场景中都是适用的。卷积神经网络:基于CNN的方法带来了性能上的重大进步。PoseNet[11]将相机定位作为一个分类问题来解决,其中6自由度相机姿态直接回归。

一些后续工作进一步改善了训练损失[10]或利用视频的时间依赖性来提高定位精度[32]。最近的工作[2]学习了一个连续的度量来测量图像之间的重叠,并且在查询图像与其最近的邻居之间回归相对相机姿态。与直接的相机姿态回归不同,最近的研究使用CNNs将场景坐标作为中间量进行回归[14,3,5],因为从场景坐标图中进行的以下相机姿态估计是一个性能良好的优化问题。本文的方法属于这一类,使用CNNs来预测图像的场景坐标。然而,本文的网络从场景中提取层次特征,而不是学习一组场景特定的网络参数。这样,本文的方法是场景不可知的,可以应用于未知场景。

3.       Overview

本文的管道概述如图1所示。本文的方法的输入是一组场景图像{Is}all及其关联的3D点云{Xs}all和在同一场景中捕获的查询图像q。输出是查询图像的估计6D相机姿势q=[Rq | tq]。为了缩小输入空间以提高效率和性能,本文首先使用NetVLAD[1]从所有场景图像中检索查询图像的n个近邻。然后,本文提出了一个网络,通过插值与检索到的场景图像相关联的3D点来回归查询的场景坐标图(第4节)。插值是通过本文的网络分别构建场景和查询图像的层次表示来完成的,称为场景金字塔和查询特征金字塔(第4.1节)。利用两个金字塔,本文设计了两个模块:查询场景注册(QSR)和融合,并迭代应用它们以粗略到精确的方式回归场景坐标图(第4.2节)。该体系结构可进行端到端的训练,以执行构建金字塔和预测密集场景坐标图的任务。最后,利用RANSAC+PnP估计查询图像的相机姿态,如[5]所示(第4.3节)。

4.       Method

4.1.  Constructing Pyramids

场景金字塔

NetVLAD[1]检索到的场景包含n个参考RGB图像{Is | s=1,…,n}vlad(在本文的实现中是256×192像素)的集合,每个图像都与世界坐标系中定义的场景坐标地图Xs∈{Xs}vlad(稠密或稀疏)相关联。本文将场景表示为一个金字塔,它以不同的比例编码几何和外观信息。每个金字塔层由一组三维点坐标组成,这些点坐标与CNN提取的图像特征一起附加在一起。

为了构建这样的场景金字塔,本文首先通过卷积神经网络从每个场景图像中提取特征。具体地说,本文使用扩张残差网络(DRN38)[34]作为特征提取器,通过去除所有扩张并在每个分辨率级别的第一个重新分块处应用跨2下采样,获得不同分辨率的特征图。

本文从DRN38中提取特征映射{Fl s | l=1,…,5},分辨率从4×3到64×48乘以2。所有场景帧图像共享网络的权重。此外,场景坐标贴图Xs被缩放以匹配不同级别的特征贴图的分辨率。在这里,本文通过应用平均池过滤器和2×2内核来降低它们的分辨率,并且在输入稀疏时忽略不存在的点。

4.2.  Predicting Scene Coordinate

考虑到这两种金字塔和E,本文预测了查询图像q的场景坐标图。为了更好地编码全局场景上下文并加快计算速度,本文采用了从粗到精的策略来预测场景坐标图。该网络首先以4×3的分辨率生成一个粗略的场景坐标图作为粗略估计,然后逐级迭代地重新确定最终的场景坐标图更详细的预测。

在每次迭代中,本文依次应用两个模块来预测场景坐标图:

(1)查询场景注册(QSR)模块通过基于视觉相似性的场景金字塔点的场景坐标插值,学习将每个查询特征像素注册到三维场景空间中;

(2)融合模块融合跨像素图像上下文用于正则化QSR给出的像素级注册的信息。为了简化,本文现在将QSR模块作为一个黑盒来解释迭代场景坐标地图预测。本文稍后将详细讨论QSR模块。迭代管道如图2所示。

5.       Experiments

表1还显示了室外场景的定位精度。与场景专用模型相比,本文的性能低于DSAC[3]和DSAC++[5],但仍优于PoseNet[11]。与场景无关的方法相比,本文的方法在4个场景,即国王学院、老医院、商店门面和圣玛丽教堂,与主动搜索[26]的结果相当,并且比InLoc[30]的结果稍好。由于大规模场景中的模糊模式和查询图像中的光照变化剧烈,本文在大球场和街道上产生的结果较差。请注意,本文将输入场景帧分辨率调整为480×270,以加快InLoc算法的速度。

图5将几个预测的场景地图可视化为彩色编码坐标和三角形网格。与InLoc[30]相比,本文的方法产生了密集的预测,甚至在没有特征的区域也很健壮,因为本文的网络在解码场景坐标图时利用了查询图像中的全局上下文。例如,InLoc[30]无法在墙和天花板上产生合理的结果,而本文的方法可以。密集预测使定位以外的应用成为可能,例如机器人避障。

时间成本

表2列出了7个场景中每个步骤w.r.t 7000场景图像的时间,并与DSAC++[5]和InLoc[30]进行了比较。以ORB-SLAM[19]为例,它为TUM RGB-D SLAM室内序列大约每0.7s创建一个新的关键帧。本文的方法和InLoc[30]可以通过NetVLAD[1]向前传递(平均0.06s)在fley上索引传入的关键帧,而DSAC++[5]运行多个时间段来训练模型,如他们的论文所述,需要几天时间。

本文用传统的特征匹配管道来评估本文的网络的有效性。具体地说,本文设计了一种基线方法,将查询图像中的特征El[p]直接与场景金字塔中的采样特征fl i∈Slsub进行角度相似性匹配。与本文的网络相比,这种基线方法有两个缺点:第一,它独立处理像素,因此在场景坐标预测过程中无法利用全局图像上下文;第二,角度相似性的距离度量可能不是最优的。本文报告了图4中估计的相机姿态和图6中场景坐标图的精度,两者都表示为本文的(基线)。显然,本文提出的方法在两个评估指标上都超过了这一基线方法,具有不可忽视的裕度。场景参考特征:本文进一步设计了两个实验来探索场景参考特征Rl的物理意义。

Rl编码相应像素的场景坐标。本文从查询图像特征图中随机选择一个像素Que,其位置由图7(a)中的绿点标记。在场景图像特征图中,其地面真值对应的像素位置由图7(b)中的红点标记,而Neg是由蓝点标记的随机无关像素。现在,本文只对场景金字塔中的两个点Pos和Neg进行编码,并通过网络传递查询像素Que以生成其场景参考特征R3[Que]。在这里,本文选择分辨率为16×12的l=3进行实验,每个特征像素有256个通道。

图7通过PCA将这两组场景参考特征投影到二维空间,其中{R3[Que]}fix-pos和{R3[Que]}fix-neg分别显示为红点和蓝点。很明显,红点的变化比蓝点小得多。换言之,改变地面真实场景点的位置会导致场景参考特征发生更大的变化。这有力地证明了本文的场景参考特征编码了相应像素的场景坐标。

6.       Conclusions

本文提出了一种场景不可知的网络结构,它可以在任意环境下预测查询RGB图像的密集场景坐标图。然后使用坐标预测来估计相机的姿态。本文的网络不仅学习将场景环境编码成一个层次化的表示,而且还通过查询场景注册来预测场景坐标图。特别地,本文设计了一个可学习的模块,该模块在不同的层次上迭代地将查询图像注册到场景中,并生成由上下文图像信息正则化的稠密坐标图。本文的网络在室内和室外数据集上都得到了验证,并实现了最先进的性能。

摄像头定位:ICCV2019论文解析的更多相关文章

  1. 视频动作定位的分层自关注网络:ICCV2019论文解析

    视频动作定位的分层自关注网络:ICCV2019论文解析 Hierarchical Self-Attention Network for Action Localization in Videos 论文 ...

  2. 人脸真伪验证与识别:ICCV2019论文解析

    人脸真伪验证与识别:ICCV2019论文解析 Face Forensics++: Learning to Detect Manipulated Facial Images 论文链接: http://o ...

  3. 细粒度语义分割:ICCV2019论文解析

    细粒度语义分割:ICCV2019论文解析 Fine-Grained Segmentation Networks: Self-Supervised Segmentation for Improved L ...

  4. 人脸标记检测:ICCV2019论文解析

    人脸标记检测:ICCV2019论文解析 Learning Robust Facial Landmark Detection via Hierarchical Structured Ensemble 论 ...

  5. 大型图像数据聚类匹配:ICCV2019论文解析

    大型图像数据聚类匹配:ICCV2019论文解析 Jointly Aligning Millions of Images with Deep Penalised Reconstruction Conge ...

  6. 深度学习数据特征提取:ICCV2019论文解析

    深度学习数据特征提取:ICCV2019论文解析 Goal-Driven Sequential Data Abstraction 论文链接: http://openaccess.thecvf.com/c ...

  7. 目标形体形状轮廓重建:ICCV2019论文解析

    目标形体形状轮廓重建:ICCV2019论文解析 Shape Reconstruction using Differentiable Projections and Deep Priors 论文链接: ...

  8. 结构感知图像修复:ICCV2019论文解析

    结构感知图像修复:ICCV2019论文解析 StructureFlow: Image Inpainting via Structure-aware Appearance Flow 论文链接: http ...

  9. 深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析

    深度学习白平衡(Color Constancy,AWB):ICCV2019论文解析 What Else Can Fool Deep Learning? Addressing Color Constan ...

随机推荐

  1. TCP的三次握手和四次挥手和UDP协议

    目录 TCP 三次握手 四次挥手 为什么建立连接是三次而断开连接是四次呢? TCP和UDP的区别 TCP数据包的封装 UDP数据包封装 SCTP SYN Flood泛洪攻击 TCP TCP(Trans ...

  2. MySQL三种报错注入方式下的insert,update,delete命令注入示例

    select 查询数据(大部分) 在网站应用中进行数据显示查询操作 insert 插入数据 在网站应用中进行用户注册添加等操作 delete 删除数据 后台管理里面删除文章删除用户等操作 update ...

  3. Day003 注释、标识符和关键字

    注释.标志符.关键字 注释 当项目逐渐复杂,注释就很重要了. 注释不会被执行,是给我们写代码的人看的. 书写注释是一个非常好的习惯. Java中的注释有三种: 当行注释 // 多行注释 /* 注释 * ...

  4. 如何将代码托管到Github

    Github是最火热的源代码管理平台,你可以通过这个平台,将代码托管起来,防止代码丢失,或者将自己的代码展示给世界. 首先要下载Git,请自行在各大应用平台下载. 下载完成后,在你的菜单上下文中就会出 ...

  5. Asp.NetCore Web开发之创建项目

    ​这一节,开始讲一下如何创建一个Asp.netCore Web项目,有两种常用的方式,一种是通过.NetCore SDK使用命令创建,另一种如果你使用的VisualStudio,可以直接根据引导创建. ...

  6. UA: Literally Vulnerable靶机

    前言 略有点虎头蛇尾.主要有一步没想通. web打点 nmap -sP 192.168.218.0/24 #发现主机IP 192.168.218.138 #端口扫描 nmap -sV -p- 192. ...

  7. 关于调试器中int3断点引发异常的思考

    INT3断点 INT3断点是利用0Xcc指令实现的,cpu在执行0xcc指令时会引发断点异常调试器会捕捉这个异常. INT3断点引发的异常属于陷阱型异常,在执行完0xcc指令后eip指向下一条指令.但 ...

  8. [源码解析] 并行分布式框架 Celery 之 容错机制

    [源码解析] 并行分布式框架 Celery 之 容错机制 目录 [源码解析] 并行分布式框架 Celery 之 容错机制 0x00 摘要 0x01 概述 1.1 错误种类 1.2 失败维度 1.3 应 ...

  9. SprintBoot使用Validation

    1.为什么要使用Validation 在开发过程中有没有使用一堆的if来判断字段是否为空.电话号码是否正确.某个输入是否符合长度等对字段的判断.这样的代码可读性差,而且还不美观,那么使用Validat ...

  10. Linux常见错误解决办法

    1. 程序运行的一些基础知识 1. 编译程序时去哪找头文件? 系统目录:就是交叉编译工具链里的某个 include 目录:也可以自己指定:编译时用 " -I dir "选项指定. ...