目录

基本信息

摘要

I 介绍

II 技术方法

A.匹配步骤

网络结构

B. 定位步骤

C. 迭代细化

D. 训练细节

III 实验结果

A.数据集

B. LiDAR地图生成

C.训练多个数据集

D.初始姿态采样和数据扩充

E.推论 Inference

F.结果

IV 结论

参考:


基本信息

  • 题目:CMRNet++: Map and Camera Agnostic Monocular Visual Localization in LiDAR Maps
  • 出处:Cattaneo D, Sorrenti D G, Valada A. CMRNet++: Map and Camera Agnostic Monocular Visual Localization in LiDAR Maps[J]. arXiv preprint arXiv:2004.13795, 2020.
  • PDF: https://arxiv.org/abs/2004.13795
  • Demo: http://rl.uni-freiburg.de/research/vloc-in-lidar
  • Video: https://www.youtube.com/watch?v=EUCloC6flr4
  • CMRNet 开源代码: https://github.com/cattaneod/CMRNet
  • 论文笔记_S2D.52_CMRNet++_运行记录

摘要

定位是实现自主机器人的关键。虽然深度学习在许多计算机视觉任务中取得了很大的进展,仍有待于提高视觉定位的能力。最近推出的CMRNet通过在LiDAR地图中实现单目视觉定位,有效地解决了这一局限性。在本文中,我们进一步引入了CMRNet++,这是一个非常健壮的模型,它不仅可以有效地推广到新的场景,而且与摄像机参数无关。将深度学习几何技术相结合,并将度量推理转移到学习过程之外,从而实现这种能力。这样,网络的权重就不会绑定到特定的相机。对CMRNet++在三个具有挑战性的自主驾驶数据集KITTI、ArgoverseLyft5进行了大量的评估,结果表明CMRNet++在很大程度上优于CMRNet以及其他基准。更重要的是,这也展示了一种深度学习方法的能力,在一个全新的环境中,无需任何训练或调试,并且不受摄像机参数的影响,能够精确定位

CMRNet++:在激光雷达地图中进行参数未知的相机的单目视觉定位

视频地址: https://www.bilibili.com/video/BV1DK4y1j74J

I 介绍

自主移动机器人(例如自动驾驶汽车)需要精确的定位才能安全地导航。尽管全球导航卫星系统(GNSS)提供了全球定位,但是其准确性和可靠性不足以用于机器人导航。例如,在城市环境中,建筑物经常会阻挡或反射卫星信号,从而导致非视距(NLOS)和多径问题。为了缓解此问题,使用了利用机器人上的传感器的定位方法来提高精度和鲁棒性。

人们已经提出了使用各种机载传感器来解决定位任务的多种方法。尽管基于LiDAR的方法[1],[2]通常可以实现足够准确的定位,但是由于相关的高昂成本,其使用受到了主要阻碍。另一方面,基于摄像头的方法[3] – [5]由于价格便宜,因此有望在自动驾驶汽车中广泛采用。

尽管从历史上看,基于摄像头的方法的性能比基于LiDAR的方法要差,但是计算机视觉和机器学习的最新进展已大大缩小了这一差距。其中一些方法采用CNN [6]-[10]和随机森林[11],[12],以给定单个图像直接回归摄像机的姿态。尽管这些方法在室内环境中已取得了显著成果,但在大型室外环境中其性能却受到了很大的限制[13]。而且,它们只能在以前已经训练过这些模型的位置使用。

在过去的十年中,地图提供商一直在开发针对汽车领域量身定制的下一代高清地图。这些地图包括点云形式的道路场景的精确几何重构,这些重构通常由LiDAR生成。这一因素促使研究人员开发出在LiDAR地图中定位照相机的方法。通常可以通过从摄像机重建场景的三维几何形状,然后将其与地图[14],[15]相匹配,或者在图像平面[16]-[18]中进行匹配,来进行定位。

在这篇文章中,提出的CMRNet++方法来实现相机到激光雷达地图的配准。建立了在之前提出的CMRNet模型的基础上,该模型的灵感来自camera to LiDAR姿态校准技术。CMRNet独立于地图进行定位,现在我们进一步改进它,使其也独立于摄影机的内部特性。与现有的基于CNN的姿态回归方法不同,CMRNet不学习地图,而是学习将图像与预先存在的地图进行匹配。因此,CMRNet可用于任何有激光雷达地图的环境中
但是,由于CMRNet的输出是以米为单位的(is metric)(从初始姿态开始的6自由度刚体转换),因此网络的权重与用于收集训练数据的摄像机的固有参数有关。在这项工作中,我们通过将定位解耦来缓解此问题,方法是先采用像素到3D点匹配步骤,然后再进行姿态回归步骤。虽然网络与摄像机的固有参数无关,但第二步仍需要它们。

我们在KITTI [20],Agroverse [21]和Lyft5 [22]数据集上评估了我们的模型,并证明了我们的方法超越了现有技术,同时又不了解地图和相机参数。可以在http://rl.uni-freiburg.de/research/vloc-in-lidar中获得现场演示和视频,这些视频和视频演示了我们的方法在这些数据集上的定性结果。。图1描述了我们提出的CMRNet++流程。

II 技术方法

我们通过将定位解耦(decoupling the localization)为两个步骤来扩展CMRNet像素到3D点匹配,然后进行姿态回归

  • 第一步,CNN仅专注于像素级别的匹配,而不是基于度量的匹配,这使网络独立于摄像机的固有参数。这些参数改为在第二步中使用,
  • 在第一步中给出给定的匹配条件下,利用传统的计算机视觉方法来估计摄像机的姿态。

因此,在训练之后,CMRNet ++还可用于与训练时使用的不同的相机和地图。我们提出的CMRNet ++管道的概述如图1所示。

图1 方法概述 (a) 输入的RGB图像和(b)激光雷达图像(bin->h5)被输入到我们的CMRNet++,它预测(c)两个输入之间的像素位移。(d) 预测的匹配用于使用PnP+RANSAC相机定位

A.匹配步骤

对于匹配步骤,我们通过将地图(即激光点云)投影到姿态(或写成Hinit)的虚拟图像平面(例如从GNSS获得的粗略姿态估计)中来生成合成的深度图像(称为LiDAR图像)。投影使用相机的内部特性。图1(b)显示了LiDARimage的示例。为了处理点云中的遮挡,我们采用z缓冲区技术,然后使用遮挡估计滤波器,有关更多详细信息,请参见[18]。一旦获得了网络输入(相机和LiDAR图像),对于LiDAR图像中的每个3D点,CMRNet ++都会估计代表相同世界点的RGB图像的像素(找对应关系)

CMRNet ++的架构基于PWC-Net [23],它是为两个连续RGB帧之间的光流估计而引入的。与PWC-Net不同,CMRNet ++不会在两个特征金字塔提取器之间共享权重,因为CMRNet ++的输入本质上是不同的(RGB和LiDAR图像)。此外,由于LiDAR图像仅具有一个通道(即深度),因此我们将特征提取器中第一卷积层的输入通道数从三个更改为一个。

如何训练? CMRNet++网络的输入输出是什么?

  1. 将原始bin点云数据通过 calib.txt中的 Tr (相机2和激光之间的变换)参数,将激光点云变换到RGB图像对应的相机坐标系下 (称为PC)
  2. 在训练阶段, 采样时,将RGB图像随机旋转正负5度(称为img_input), 上面的点云PC,也随机旋转正负5度
  3. 随机生成旋转矩阵和平移向量(rot_error, tr_error), 作为训练的真值(GT)监督训练
  4. 使用上述PC 乘以变换 (rot_error, tr_error), 再乘以相机内参K, 得到LiDAR-image(再处理遮挡等得到lidar_input), 则此时idar_input, img_input相差的变换正是: 旋转矩阵和平移向量(rot_error, tr_error)
  5. idar_input, img_input, rot_error, tr_error送入网络训练得到 transl_err, rot_err, 使用损失函数计算loss, 进行优化
  6. 网络的输出即为 图像相对于激光点云的旋转矩阵 transl_err, 平移矩阵 rot_err, 以此实现定位.

怎么应用?(TODO: 看公式再完善???)

  • 要提前知道相机相对于激光的变换Tr, 当前车辆在激光点云地图M的初始粗略位姿Twc
  • 在当前位置拍照得到RGB图像, 根据变换Tr, 粗略位姿Twc 和点云地图M, 算出粗略的点云图像(LiDAR-image)
  • 使用CMRNet++, 输入 RGB图像和LiDAR-image,计算精确的位姿 transl_err, rot_err
  • transl_err, rot_err = model(rgb_img, refl_img)

网络结构

网络结构作者未给出,只提到参考 2018 CVPR的 PWC-Net 结构(一篇光流估计的文章)(参考:PWC-Net是怎样实现的)

CMRNet ++的输出是 稠密特征图(a dense feature map),

  • 它的分辨率是输入分辨率的1/ 4
  • 并且由两个通道组成
    • 对于LiDARimage中的每个像素,来自同一个世界点的RGB图像中像素的位移(u和v)。图1(c)描绘了这种像素位移的视觉表示。

为了训练CMRNet ++,我们首先需要生成关于RGB图像的,LiDAR图像的真值像素位移。为此,我们首先使用方程(1)计算地图点参考坐标系中的坐标,并利用方程(2)中相机的内在矩阵K计算它们在雷达图像中的投影像素位置

我们跟踪数组VI中有效点的索引。这是通过排除,投影位于图像平面后方或外部的点,以及被遮挡估计滤波器标记为遮挡的点,的索引来完成的。随后,我们生成稀疏的LiDAR图像,并将地图上的点投影到位于地面真实姿态的虚拟图像平面中。然后,我们将这些投影的像素位置存储为

最后,我们通过比较两个像面中的投影来计算位移地面真值

对于没有关联3D点的每个像素[u; v],我们设置。此外,我们生成有效像素的掩码,如如果;否则为0。我们使用损失函数来使回归分量和平滑度分量的总和最小,以训练我们的网络。等式(6)中定义的回归损失对网络预测的像素位移进行了惩罚,该位移与有效像素上各自的地面真实位移不同。虽然平滑度损失会在没有地面真值的情况下强制像素发生位移,但与相邻像素中的像素相似。

如[24]所示,其中是广义的Charbonnier函数

B. 定位步骤

一旦训练完CMRNet++,我们就得到了地图,即坐标已知的一组3D点P,以及它们在LiDAR-image D中的投影,以及CNN预测的RGB图像中的一组匹配点p,p由下式给出

在给定一组2D-3D对应和相机特性的情况下,估计相机的姿态被称为视角-n-点(PnP)问题。我们使用随机样本一致(RANSAC)方案[26]内的EPnP算法[25]来解决这个问题,迭代次数最多1000次,内点阈值为2个像素。

C. 迭代细化

与CMRNet相似,我们采用迭代优化技术,在该技术中,我们训练CMRNet ++的不同实例,每个实例专门处理不同的初始误差范围。在推理过程中,我们将RGB和LiDAR图像馈送到训练有最大误差范围的网络,然后通过将地图投影到预测的姿态中来生成新的LiDAR图像。然后将后者馈送到以较低错误范围训练的CMRNet ++的第二个实例。此过程可以重复多次,以迭代方式提高估计的定位精度。

D. 训练细节

我们使用两个NVIDIA Tesla P100从零开始训练每个CMRNet ++实例300个epoch,批量batch大小为40个。网络的权重使用ADAM优化器进行了更新,初始学习率为,权重衰减为。在20和40个时代之后,我们的学习率降低了一半。

III 实验结果

A.数据集

为了评估CMRNet ++的本地化性能并评估其泛化能力,我们使用了三个不同的自动驾驶数据集,它们覆盖了不同的国家,不同的传感器和不同的交通状况。

1)KITTI:KITTI数据集[20]记录在德国卡尔斯鲁厄市附近。我们将测距序列03、05、06、07、08和09中的左摄像机图像用作训练集(总共11426帧),并将序列00作为验证集(4541帧)。

2)Argoverse:Argoverse数据集[21]记录在迈阿密和匹兹堡。我们使用了中央前置摄像头的图像,该摄像头以30 fps的速度提供1920×1200的图像。来自“ 3D跟踪数据集”的train1,train2和train3分割的图像用作训练集(36347帧),而train4分割用作验证集(2741帧)。

3)Lyft5:在Palo Alto中记录了Lyft Level 5 AV数据集[22]。我们使用从10个选定的城市场景中的前置摄像头记录的1224×1024图像作为验证集(1250帧)。我们利用Lyft5数据集来评估我们方法的泛化能力。我们首先在KITTI和Argoverse上训练我们的CMRNet ++,然后在Lyft5数据集上对其进行评估,以评估定位能力,而无需进行任何重新训练。因此,该数据集未包含在训练集中。

初始姿态是从[-2m,+2m],[-10,+10]的均匀分布中随机抽取的,第一行显示了相应的中值。CMRNet++是在KITTI和Argoverse上训练的,并且只在Lyft5上进行评估,以评估泛化能力,而不需要任何再训练。

KITTI 00数据集的定位误差比较

B. LiDAR地图生成

为了生成上述三个数据集的LiDAR映射,我们首先在其各自的地面真实位置上汇总一次扫描,这可以由数据集本身(Argoverse和Lyft5)提供,也可以由SLAM系统[1]生成(KITTI) 。然后,我们使用Open3D库[27]对分辨率为0.1 m的地图进行下采样。

此外,由于我们只希望地图中只有静态对象(例如,没有行人或汽车),因此我们通过利用Argoverse和Lyft5提供的3D边界框来删除动态对象。不幸的是,KITTI没有为里程表序列提供此类边界框,因此我们无法为这些序列移除动态对象。将来,我们将利用语义分割技术或3D对象检测器将其删除。

C.训练多个数据集

我们通过结合来自KITTI和Argoverse数据集的训练样本来训练CMRNet ++。在多个不同的数据集上训练CNN会带来某些挑战。首先,两个训练数据集的基数不同(分别为11426和36347)可能会导致网络在一个数据集上比另一个数据集表现更好。为了克服这个问题,我们在每个时期的开始对Argoverse的一个子集进行了随机采样,采样数量与KITTI相同。随着子集在每个时期被采样,网络最终将处理Argoverse数据集中的每个样本。

此外,这两个数据集的相机具有不同的视野和分辨率。为了解决此问题,我们调整图像的大小以具有相同的分辨率。一种简单的方法是裁剪Argoverse图像。但是,这将产生视野非常狭窄的图像,从而使RGB和LiDAR图像之间的匹配越来越困难。因此,我们首先将Argoverse图像降采样为原始分辨率的一半(960×600),然后将Argoverse和KITTI图像随机裁剪为960×320像素。我们在训练期间的运行时执行此随机裁剪,以使同一图像在不同时期具有不同的裁剪位置。我们以原始分辨率生成LiDAR图像D和地面真实位移,然后对其进行下采样和裁剪。此外,在下采样操作期间,我们还将像素位移减半。

D.初始姿态采样和数据扩充

通过培训CMRNet ++的三个实例,我们采用了第II-C节中介绍的迭代改进方法。为了模拟初始姿态Hinit,我们向每个样本独立的地面真实姿态HGT的所有分量添加均匀的随机噪声。我们添加到第一次迭代中的噪声范围对于平移为[±2 m],对于旋转为[±10°]。第二次和第三次迭代的最大范围分别为[±1 m,±2°]和[±0:6 m,±1°]。

为了提高我们方法的泛化能力,我们采用了数据扩充方案。首先,我们通过随机改变对比度,饱和度和亮度,对图像进行色彩抖动。随后,我们随机水平镜像图像,并相应地修改相机校准。然后,我们在[-5°,5°]范围内随机旋转图像。最后,在生成LiDAR图像之前,我们转换LiDAR点云以反映这些变化。

总而言之,我们对CMRNet ++的每个实例进行如下训练:

  • 随机绘制Argoverse数据集的子集,并用KITTI的样本对其进行混洗
  • 对于每批次batch:
    • 对图像I进行数据增强,并相应地修改相机矩阵和点云
    • 采样初始姿态
    • 生成LiDAR图像D,位移地面实况和蒙版mask
    • 批次中Argoverse样本的下采样和模板mask
    • 裁剪和模板mask为960×320。
    • 将批次(I, D)送入CMRNet ++,计算损失,并更新权重
  • 重复300个epochs

E.推论 Inference

在推论过程中,我们一次处理一张图像,并且由于网络体系结构是完全卷积的,因此我们不会将不同数据集的图像调整大小以具有相同的分辨率。因此,我们无需裁剪即可将整个图像输入到CMRNet ++。但是,我们仍然对Argoverse数据集的图像进行下采样,以具有与用于训练的图像相似的视野。一旦我们有了网络预测的2D-3D对应关系集,便可以应用PnP + RANSAC来估算摄像机的姿态。地图,如第II-B节中所述。我们使用CMRNet ++的三个专用实例将整个过程重复三次,以迭代地完善估计。在一个NVIDIA GTX 1080Ti上,单次迭代的推理时间对于CNN约为0.05 s,对于PnP + RANSAC约为1.25 s。

F.结果

我们在第III-A节中描述的三个数据集的验证集上评估CMRNet ++的本地化性能。重要的是要注意,所有验证集在地理位置上都与训练集分开;因此,我们在培训阶段从未见过的地方评估CMRNet ++。此外,由于未使用Lyft5数据集进行训练,因此我们在完全不同的城市以及使用不同传感器收集的数据上评估了我们方法的性能。表I中列出了迭代细化技术的三个迭代的中位定位误差。

此外,可以在 http://rl.uni-freiburg.de/research/vloc-in-lidar 中获得显示定性结果的视频。我们还提供了建议的CMRNet ++与CMRNet的比较以及表II中[14]的方法。结果表明,在KITTI数据集的序列00上,CMRNet ++的性能优于其他方法。尽管[14]实现了翻译组件较低的标准偏差,但它进一步利用了跟踪和时间过滤,而我们的方法则没有。因此,通过合并此类技术,可以进一步降低我们方法的方差。

与CMRNet相反,CMRNet ++可能无法对图像进行定位。当一半以上的预测匹配不正确时,这尤其可能发生在第一次迭代中,因此PnP + RANSAC估计了不正确的解决方案。我们认为原因在于地平面上的像素匹配:由于路面的外观均匀,几乎不可能识别出与特定3D点匹配的确切像素。为了识别这种情况,当第一次迭代后的估计姿态距离Hinit不到四米时,我们将样本标记为失败。失败的样本不会进入第二次和第三次迭代。表I中还报告了不合格样品的百分比。

IV 结论

在本文中,我们提出了CMRNet ++,这是一种新颖的基于CNN的LiDAR地图中单目定位方法。我们将CMRNet ++设计为独立于地图和相机内部要素。据我们所知,CMRNet ++是第一个基于深度神经网络(DNN)的姿态回归方法,该方法可以推广到新环境而无需任何重新训练。

我们在KITTI,Agroverse和Lyft5数据集上证明了我们的方法的性能,其中CMRNet ++将单个RGB图像定位在看不见的地方,中值误差低至0.14 m和0.43°,优于其他状态艺术方法。此外,从训练中排除的Lyft5数据集上的结果表明,CMRNet ++能够有效地推广到以前看不见的环境以及不同的传感器。我们计划调查是否可以采用差异化的RANSAC方法[9]以端到端的方式训练CMRNet ++,同时将相机参数保持在学习步骤之外。

参考:

  • CMRNet++:一种相机在激光雷达构建地图中的定位方案

论文笔记_S2D.52_CMRNet++:在激光雷达地图中进行内参未知的相机的单目视觉定位相关推荐

  1. CMRNet++:在激光雷达地图中与地图和相机无关的单目视觉定位

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 编辑丨当SLAM遇见小王同学 声明: 本文只是个人学习记录,侵权可删.论文版权与著作权等全归原作者所有 ...

  2. 【论文笔记】2019 基于激光点云pole检测的重定位方法 Long-Term Urban Vehicle Localization Using Pole Landmarks

    https://github.com/acschaefer/polex 本文提出了一个基于激光三维点云的二维车辆定位系统,其根据道路场景中的 "pole landmarks" (极 ...

  3. 论文笔记——HDD算法:异构网络中信息扩散的深度学习方法

    HDD算法 发表在knowledge-Based Systems上的一篇文章.有许多现实世界的复杂系统与多类型相互作用的实体,可以被视为异构网络,包括人类连接和生物进化.这类网络的主要问题之一是预测信 ...

  4. 论文笔记_S2D.77_2013_TOR_使用RGBD相机的3D建图(RGBD SLAM V2)

    目录 基本情况 摘要 介绍 系统流程 特征提取 运动估计 EMM:Environment Measurement Model 回环检测 图优化 建图OctoMap 参考 基本情况 出处:Endres ...

  5. 【论文笔记:场景】边缘计算中分布式协作的动态卸载模型:森林火灾管理的一个用例

    [摘要]:随着物联网(IoT)的发展,数据量不断增长并变得更加多样化.将数据传输到云端时存在几个问题,例如网络带宽和延迟的限制.这引起了人们对边缘计算研究的极大兴趣,边缘计算处理和分析数据导致的网络终 ...

  6. 【论文-笔记】海防雷达仿真系统中PPI的设计与实现

    摘要 重点介绍: 仿真系统中的PPI. 提出了矩阵融合法,实现雷达余晖效果,通过衰减矩阵来控制位图中任一维颜色向量,相对于逐点消隐法的速度提升较大. 针对干扰模型进行研究,构造出适用于雷达的干扰模型. ...

  7. 【论文笔记】Map-Based Localization Method for Autonomous Vehicles Using 3D-LIDAR

    [论文笔记]Map-Based Localization Method for Autonomous Vehicles Using 3D-LIDAR ~~~   ~~~~    精确和稳健的定位是复杂 ...

  8. 经验 | 深度学习中从基础综述、论文笔记到工程经验、训练技巧

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:本文授权转自知乎作者跑者小越,https://zhuanla ...

  9. 论文笔记 -- Communication Lower Bound in Convolution Accelerators 卷积加速器中的通信下界

    论文笔记 – Communication Lower Bound in Convolution Accelerators 卷积加速器中的通信下界 @(论文笔记) 文章目录 论文笔记 -- Commun ...

  10. 《使用机器视觉从照片中确定西瓜质量》论文笔记

    <使用机器视觉从照片中确定西瓜质量>论文笔记 链接:Watermelon Quality Determining from a Photo Using Machine Vision | I ...

最新文章

  1. DBA表现最好的7个习惯
  2. silverlight turntable
  3. c语言数组数据用指针查找,c语言数组与指针_指针篇_2011.ppt
  4. 20分钟快速了解Redis
  5. 全球首款采用离心风扇/90Hz刷新率的电竞手机红魔3发布
  6. 最强自定义PHP集成环境,系统缺失dll和vc也能正常运行
  7. MVC,MVP 和 MVVM详解
  8. java map 面试题_Java 面试系列:集合详解之 Map + 面试题
  9. python读取txt每一行-Python逐行读取txt文本,按符合分割词并逐行写入txt
  10. Oracle SQL篇(四)group by 分组与分组的加强 rollup
  11. Java练手项目-王者荣耀项目源码分享!
  12. Appstore下载Big Sur并使用U盘制作黑苹果系统安装盘
  13. GB50174《电子信息系统机房设计规范》(福建)贯标培训通知
  14. 【ShaderLab学习】AlphaTest AlphaBlend理解[1]
  15. 计算机是如何计算 log 函数的?
  16. 如何避免服务器被恶意网络攻击
  17. SpringCloud极简入门(三)服务提供者与消费者
  18. 计算机组成CPU最佳配置,计算机组成原理--CPU
  19. 硬件入门之: 滞回比较器分析计算
  20. 线条边框简笔画图片大全_植物简笔画素材大全赶紧收藏起来,一定用的上!

热门文章

  1. javascript中eval解析JSON字符串
  2. html中表格table的内容居中显示
  3. SqlServer触发器常用语法AFTER、INSTEAD OF及其详解
  4. python学习之正则表达式,StringIO模块,异常处理,搭建测试环境
  5. 【Python】学习笔记2-数据类型:数组、数组循环切片
  6. jmeter元件的作用域与执行顺序
  7. Java虚拟机 --- 内存区域
  8. C++ 编译发现 error C2146: syntax error : missing ';' before identifier 'm_ctrlserver'
  9. 创建一个jFinal项目
  10. ZOJ 2412 Farm Irrigation