作者丨cc.fy@知乎

来源丨https://zhuanlan.zhihu.com/p/460001686

编辑丨3D视觉工坊

问题定义

给定一份高精度地图或环境模型,给定相机(不限于单目,双目,多目,针孔或者鱼眼),输出相对于这份地图的高精度的相机的pose,在这个过程中其他传感器信息是可选的(optional)

https://news.developer.nvidia.com/drive-labs-how-localization-helps-vehicles-find-their-way/

https://github.com/ethz-asl/hfnet

高精地图, 高精定位, 感知的关系

高精地图、高精定位和感知三者相辅相成。假如具备高精地图和感知结果,就可为定位提供先验信息:

artisense_visual_slam

假如具备高精地图和定位结果,就可把地图元素投影到车体坐标系中,为感知提供先验信息:

https://www.atlatec.de/localization.html

假如具备定位和感知结果,就可把感知元素反向投影回地图坐标系,将感知元素与地图已有元素进行比对更新或者构建新的地图:

kitti vector mapping

行业现状

·NVIDIA

在国内和高德,四维,宽凳合作,在国外和tomtom, here, zenrin等合作. DRIVE LOCALIZATION(https://www.bilibili.com/video/BV1cp4y1e7NM), localization within the world robustly and accuratly.

·Mobileye

Localization in the road book (REM)

上图分别是road book 投影到图像空间上和投影到google earth的结果, 个人觉得mobileye一方面是一家自动驾驶公司,随着rem系统不断发展,可能也是一家全球地理数据资产管理公司

·Baidu

DA4AD: End-to-End Deep Attention-based Visual Localization for Autonomous Driving,ECCV 2020

·NIO 蔚来

高精地图加持下定位精度20cm:https://www.bilibili.com/video/BV1Bf4y1D7Lx

·Momenta

Related Paper

1、Coarse-to-fine Semantic Localization with HD Map for Autonomous Driving in Structural Scenes(https://arxiv.org/abs/2107.02557)

coarse-to-fine semantic localization for autonomous driving,IROS 2021_哔哩哔哩_bilibili(https://www.bilibili.com/video/BV11A411c7Dq?spm_id_from=333.999.0.0)

2、Monocular Vehicle Self-localization method based on Compact Semantic Map

Input: 单目相机 + 地图 Output: 6DOF pose,总体流程图如下:

3、Monocular Localization with Vector HD Map(MLVHM): A Low Cost Method for Commerial IVs (2020)

提出了一种耦合单目相机和轻量级矢量地图的定位方法,建立地图特征和图像检测出的相对稳定的语义特征之间的关联,从而进行相机的位姿估计,同时为了增加约束让轨迹更加鲁棒平滑,引入了两帧之间的视觉里程计的约束,最终达到了约24cm的定位的rmse精度.

众所周知,GNSS-RTK + 高质量的IMU + 多线束激光雷达在室内外都可以交付高精度的定位结果,然后由于成本的原因无法大规模商业化使用。然后作者团队也希望能够只需要一个单目相机 + hdmap来完成这件事情,尽管hdmap本身是需要昂贵的传感器来构建,当然也有公司采用众包技术使用消费级传感器就可以进行地图的构建与更新,但是地图一旦构建起来的边际成本接近于0,通过云端分发,分发的车辆越多,其分摊的构建成本也越低,自动驾驶中使用的地图形式也五花八门,如下图, 有激光定位需要使用的包含环境原始几何信息的激光点云图,也有如特征点法视觉slam中建立的特征点地图,也有对环境进行拓扑表达的类似于右图中的矢量地图,这些地图都可以完成定位任务,考虑到地图大小,简洁的要求,矢量地图可能是一个更合适的选择,并且在这篇文章中被使用,当然同样一份矢量地图,国际上存在大量的格式标准,如opendrive, apollo, nds等. 如下展示了两种不同形式的地图:

由于在室外环境中,光照变化,视角变化,遮挡等会频繁发生,所以选择从环境特征中选择一些相对这些条件更加鲁棒的特征是必要的,借助于CNN对图像极强的表达能力,我们可以获得这些稳定的语义特征所在的像素或者描述,而矢量地图中存储的也是这些不变的相对稳定的东西,所以问题很自然的简化为数据关联问题。文章所提出的方法的整体流程如下:

与前作不同的是,同时解算帧间vo(利用了传统视觉特征orb),并在滑窗中引入帧间的约束来提升鲁棒性。在影像处理模块,通过分割提取关键像素,并将其拟合成point feature(sign)和line feature(lane and pole),同时为了进行帧间vo的计算,会进行orb特征的提取;在基于地图的定位模块会进行初始pose估计,利用初始pose通过随机采样的方式确定最优的匹配,然后根据匹配关系就可以进行pose的优化求解;最后为了确保定位输出的鲁棒,增加了滑窗的位姿优化。

数据关联的过程:确定地图上的特征和图像上的特征的对应关系
1. 先生成可能的对应关系集合,从集合中随机采样三条同语义的线特征的对应关系来进行相机pose的计算,
2. 根据计算出的相机的pose投影地图元素,如果和图像feature距离低于设定的阈值则认为是inlier,然后会计算估计出的pose和初始pose的距离,如果满足阈值,则对应关系会加入假设集合
3. 最终选择inlier数最多的一组对应关系作为最终的对应关系

实现细节:
1. 图像特征提取层面,用修改版的pspnet来对图像进行分割,然后根据置信度概率选择特定的像素,用区域生长的方法划分为不同的区域,线特征进行最小二乘拟合,从sign区域拟合点特征,从图像域上得到这些特征分别的位置描述
2. compact map的使用,所使用的地图是opendrive格式,sign使用的是质心点,pole使用的是两个端点,lane用0.2m进行采样散点,然后每两个散点构成拟合成一条线来进行使用
3. 优化与初始化, 系统初始化也是使用了低成本的GNSS的测量值作为初值,优化就是标准的LM算法

3、HDMI_LOC: Exploiting High Definition Map Image for Precise Localization vai Bitwise Particle Filter (IROS 2020)

文章提出了一种方法,结合双目相机和hdmap来进行6dof的位姿估计,将地图转换为8bit的影像代表,使得query image可以和地图进行bitwise operation(位运算)来进行匹配,使用粒子滤波框架来进行pose优化估计,11km的测试条件横纵向误差约为0.3m,运行速度为10hz,整个定位过程可以分为4步:
1. 图像处理步骤, 从双目图像中得到语义分割图和视差图(所以这个方法比较慢)
2. 将hdmap转化为8 bit image
3. 利用粒子滤波估计4dof (三个平移 + yaw)pose, 通过当前影像的patch和地图影像,因为这两个东西都是8bit影像,所以可以进行位与操作来快速计算
4. 通过优化额外计算roll和pitch来估计完整的6自由度pose

整体流程图如下:

4、From Coarse to Fine: Robust Hierarchical Localization at Large Scale(CVPR 2019)

视觉定位是指,在大尺度场景下,已知环境地图,给定任意一张图片,计算出该图片对应的位姿。
在视觉定位领域,基本上有两种主要的方向,一种是所谓的 End-to-end 方法,代表作是 PoseNet,这类方法直接用图片和 pose 真值作为监督学习,对于给定的同一场景的图片可以回归出 6dof 的真值。这种方法优点是数据库很小,一个网络可以覆盖一个很大的场景,而且虽然需要 Pose 真值但并不需要显式的空间三维重建。但是缺点也很明显,这类方法无非是简单地通过学习建立起了图像和pose之间的映射关系,本质上就是一个图像相似度匹配的过程,因此不可能回归出精确地真值以及获得对于未学习场景的迁移能力。目前比较流行的方法是,由粗到细两步定位。先通过图像检索的方式找到最接近的关键帧,再与该关键帧匹配局部特征。由于关键帧位姿已知,所以通过PnP等方法可以估计出当前帧位姿。两步定位可以避免从所有关键帧中直接匹配带来的时间复杂度,同时避免了将整个环境地图加载进内存带来的空间复杂度。文章主要提出了一种由粗到精的hierarchical的定位网络,hfnet, 对输入的query image, 会通过一个单一的CNN同时预测影像的局部特征和全局特征来进行6自由度的精确定位,采用的这样一种coarse to fine的定位范式: 先通过一个全局的retrieval获取候选帧,然后和候选的位置做局部特征匹配来进行定位。类似于人类定位的模式一样,作者希望利用这样一种coarse to fine的定位范,同时又希望能够结合深度学习在图像特征检测和描述领域的一些进展,这些学习到的detector 和descriptor提高了对环境变化的鲁棒性。为了达到上面的目的,并且最大的提升效率,提出了HF-NET(hierarchical feature network),同时估计局部和全局特征,并且最大化的共享计算。通过多任务蒸馏的方式进行网络的训练.

类似于人类定位的模式一样,作者希望利用这样一种coarse to fine的定位范式,同时又希望能够结合深度学习在图像特征检测和描述领域的一些进展,这些学习到的detector 和descriptor提高了对环境变化的鲁棒性。为了达到上面的目的,并且最大的提升效率,提出了HF-NET(hierarchical feature network),同时估计局部和全局特征,并且最大化的共享计算。通过多任务蒸馏的方式进行网络的训练.

离线模式下,根据db image利用网络提取局部特征和全局特征,局部特征传入到sfm三维重建框架进行环境模型构建,全局特征构建参考图像索引db, 然后在线运行的时候,对query image 做相同的特征提取操作,根据全局描述子利用NN搜索得到候选帧,建立候选帧共视的地图点和query图像特征点的对应关系利用ransac + pnp框架求解pose.

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

3D视觉精品课程推荐:

1.面向自动驾驶领域的多传感器数据融合技术

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

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

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

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

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

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

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

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

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

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

一文详解基于先验地图的视觉定位相关推荐

  1. 一文详解基于测距的空间定位算法

    一文详解基于测距的空间定位算法 文章目录 一文详解基于测距的空间定位算法 0 定位算法分类 0.1 基于测距与非基于测距的定位算法 0.2 集中式与分布式定位算法 0.3 绝对与相对定位算法 0.4 ...

  2. 两篇基于语义地图的视觉定位方案:AVP-SLAM和RoadMap

    本文介绍两篇使用语义地图进行视觉定位的论文,两篇论文工程性很强,值得一学. AVP-SLAM是一篇关于自动泊车的视觉定位方案,收录于 IROS 2020.论文链接为:https://arxiv.org ...

  3. 一文详解回环检测与重定位

    标题:VINS-Mono代码解读-回环检测与重定位 pose graph loop closing 作者:Manii 来源:https://blog.csdn.net/qq_41839222/cate ...

  4. 基于百度地图实现Android定位功能实现(详解+教程)

    基于百度地图实现Android定位功能实现(详解+教程) 1.初始化 (一)获取到SHA1 (1)找到View中的Tool Windows并打开Terminal (2)找到你的jdk的bin目录,小编 ...

  5. 一文详解自动驾驶的运行设计域(ODD)| 自动驾驶系列 1

    一文详解自动驾驶的运行设计域(ODD)| \n 自动驾驶系列 2021年4月30日,SAE发布了第四版J3016<驾驶自动化分级>,这是即2014年1月16日.2016年9月30日.201 ...

  6. 【卷积神经网络结构专题】一文详解AlexNet(附代码实现)

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! [导读]本文是卷积神经网络结构系列专题第二篇文章,前面我们已经介绍了第一个真正意义 ...

  7. 一文详解 YOLO 2 与 YOLO 9000 目标检测系统

    一文详解 YOLO 2 与 YOLO 9000 目标检测系统 from 雷锋网 雷锋网 AI 科技评论按:YOLO 是 Joseph Redmon 和 Ali Farhadi 等人于 2015 年提出 ...

  8. 一文详解决策树算法模型

    AI有道 一个有情怀的公众号 上文我们主要介绍了Adaptive Boosting.AdaBoost演算法通过调整每笔资料的权重,得到不同的hypotheses,然后将不同的hypothesis乘以不 ...

  9. OpenCV-Python实战(12)——一文详解AR增强现实

    OpenCV-Python实战(12)--一文详解AR增强现实 0. 前言 1. 增强现实简介 2. 基于无标记的增强现实 2.1 特征检测 2.2 特征匹配 2.3 利用特征匹配和单应性计算以查找对 ...

最新文章

  1. 深入理解PHP原理之变量分离/引用(Variables Separation)
  2. 4 信道编码之循环码
  3. ubuntu上使用cron执行定时任务计划
  4. javascript高级程序设计之引用类型
  5. 快手公司厕所装计时器,网友:再也不能带薪拉屎了!
  6. 【嵌入式Linux】嵌入式Linux驱动开发基础知识之Pinctrl子系统和GPIO子系统的使用
  7. RabbitMQ 如何保证消息的可靠性
  8. Unity3D游戏开发之开发游戏带来的问题
  9. MRAppMaster类
  10. 改动Oracle GoldenGate(ogg)各个进程的读检查点和写检查点
  11. Luogu1060 开心的金明
  12. 认识XP下的NetBEUI
  13. java怎么将文件传到服务器,Java文件传到服务器
  14. 批评性思维工具第11章 应对自身非理性
  15. SPSS入门教程——如何分析两个变量之间的关联度?
  16. 一致性算法 - Distro协议在Nacos的实践
  17. 80端口和443端口的作用
  18. 中国农业大学计算机专业在陕西录取分数线,中国农业大学2018年在陕西省高考一本投档录取分数线...
  19. mac找到local文件夹
  20. 【Java】获取当前时间(毫秒级)

热门文章

  1. PHP中foreach详细分析—一般数组与对象数组
  2. 如何在HTML页面中插入百度地图
  3. iOS纯代码工程手动快速适配
  4. 一个不错的安卓下ssh客户端
  5. 网页分析利器:IEDevToolBar
  6. 去一家小公司从0到1搭建后端架构,做个总结!
  7. 从零开始搭建创业公司后台技术栈!
  8. 搞 Java 怎么达到年薪 50w ?我的一些想法和经历
  9. 大厂面试必问的 4 大开源框架,你真会吗?
  10. 深度学习在高德的探索与实践