代码改变世界

「学习路线」SLAM/深度估计/三维重建/标定/传感器融合...(本文较长,建议收藏)

2022-01-15 18:51  计算机视觉life  阅读(595)  评论(0编辑  收藏  举报

原文链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合...(本文较长,建议收藏)

经常有粉丝问视觉/激光/SLAM、三维重建等方向的学习路线,这里我再总结给大家,如下所示:



随着最近几年智能机器人、自动驾驶、AR/MR等领域的快速发展,企业对3D视觉算法及SLAM算法需求越来越强烈,该领域迎来了爆发式发展。

按照应用不同我们把3D视觉及SLAM算法分为如下方向:

  • 视觉深度估计

  • 视觉(惯性)SLAM

  • 激光/多传感器融合SLAM

  • 几何/深度学习三维重建

  • 视觉传感器标定

下面分别介绍(本文较长,建议收藏):

视觉深度估计

视觉深度估计的目的就是估计图像中场景的深度,即场景中各点像素到相机成像平⾯的垂直距离,分为绝对距离和相对距离。我们看下面这个例子,左边是原图,右边是算法估计的对应深度图:

最近⼏年,⾃动驾驶 、⼈机交互、虚拟现实、机器⼈等领域发展极为迅速,尤其是视觉⽅案在⾃动驾驶中取得惊艳的效果,在这些应⽤场景中,如何获取场景中的深度信息是关键且必须的。同时,从深度图中获得前后的关系更容易分辨出物体的边界,简化了CV中很多任务的算法,例如3D⽬标检测和分割、场景理解等。相⽐于激光雷达测距,相机价格低廉、体积小巧,操作简单等优点,目前视觉深度估计是三维视觉最重要的基础模块之一,不仅在学术届各大CV顶会上有很多深度估计相关新的论文,在工业界应用也非常广泛,是比较热门的研究⽅向。

深度估计在自动驾驶领域的应用

视觉(惯性)SLAM

SLAM是指某种移动设备(如机器人、无人机、手机、汽车、智能 穿戴设备等) 从一个未知环境里的未知地点出 发, 在运动过程中通过传感器(如相 机、激光雷达、 IMU等)观测定位 自身位置和姿态,再根据自身位 姿进行增量式的地图构建, 从而达到同时定位和地图构建的 目的。SLAM技术是智能机器人、自动驾驶汽车、AR/MR等领域的底层核心技术之一。

如果SLAM过程使用的主要是视觉相关的传感器(如单目、双目、RGB-D、鱼眼、全景相机),一般称之为视觉SLAM。目前最知名的、效果最好的视觉SLAM是ORB-SLAM2/3系列和VINS-Mono/Fusion系列。

2015年,西班牙萨拉戈萨大学机器人感知与实时研究组开源了ORB-SLAM第一个版本,由于其出色的效果受到广泛关注。该团队分别在2016年和2020年开源了第二个版本ORB-SLAM2和第三个版本ORB-SLAM3。

其中ORB-SLAM2是业内最知名、应用最广泛的开源代码。它有如下优点:

  • 支持单目,双目和RGB-D相机的完整开源SLAM方案,能够实现地图重用、回环检测和重新定位的功能。

  • 支持轻量级定位模式,可以达到零漂移,此时不使用局部建图和回环检测的线程,可以用视觉里程计来跟踪未建图区域。

  • 采用ORB特征,具有旋转不变性、光照不变性、尺度不变性,匹配速度快,适合实时应用。无论是在室内的小型手持设备,还是到工厂环境的无人机和城市里驾驶的汽车,ORB-SLAM2都能够在CPU上进行实时工作。

  • 跟踪、局部地图、闭环、重定位等所有的任务都采用相同的ORB特征,使得系统内数据交互更高效、稳定可靠。

  • 单目初始化和应用场景解耦,不管是平面还是非平面场景,都可以自动初始化,无需人工干预。

  • 地图点和关键帧创建比较宽松,但后续会进行严格筛选,剔除冗余关键帧和误差大的地图点,增加建图过程的弹性,在大旋转、快速运动、纹理不足等恶劣情况下可以提高跟踪的鲁棒性。

  • 采用共视图,使得跟踪和建图控制在局部共视区域,与全局地图大小无关,可以在大场景下运行。

  • 使用本质图(Essential Graph)来优化位姿实现回环检测,耗时少精度高 。

  • 相比于直接法,可以用于宽基线特征匹配,更适合于对深度精度要求较高的场景,比如三维重建。

  • 定位精度高,可达厘米级,是特征点法SLAM的经典代表作品。

  • 代码可读性强,包含很多工程化技巧,非常实用。

下面是ORB-SLAM2的算法框架

ORB-SLAM2 在汽车上应用

ORB-SLAM2 用于室内三维重建

ORB-SLAM3是在特征点法SLAM经典之作ORB-SLAM2的基础上开发的,于2020年7月发布。它在定位精度和效果上几乎碾压了同类的开源算法,被称为VIO算法的巅峰之作。受到极大关注。该算法流程图如下所示

该算法的特点如下所示:

  • 1、 第一个可以运行视觉、视觉惯性和多地图,支持单目、双目和RGB-D相机,且支持针孔和鱼眼镜头模型的SLAM系统。

  • 2、该算法可以在不同大小,室内和室外环境中鲁棒、实时的运行,精度上相比于以前的方法提升了2~5倍。

  • 3、 多地图系统可以让系统在视觉信息缺乏的场景下长时间运行。比如当跟踪丢失的时候,它会重新建立新的地图,并在重新访问之前的地图时,无缝地与之前的地图合并。

  • 4、实验结果证明,双目惯性模式下,该算法在无人机数据集EuRoC上可以达到平均3.6cm的定位精度,在手持设备快速移动的室内数据集TUM-VI上达到了9mm的定位精度。

先来直观的看看视觉效果

看 ORB-SLAM3 疯狂绕圈,稳的很!甚至滑滑梯从黑管子中穿过!

从室内到室外,丝滑闭环

ORB-SLAM3效果展示

上面是定性的结果,下图是量化结果。

从统计数据来看,ORB-SLAM3确实碾压同类算法。功能强大到让SLAM算法研究者感慨“把自己想做的都做了”

VINS即Visual-Inertial navigation Systems,是视觉惯性导航系统的统称,不过我们平时所说的一般是指VINS-Mono/Fusion。香港科技大学飞行机器人实验室(沈邵劼团队)在2018年开源了VINS-Mono算法。第一作者秦通(2019华为天才少年),该论文获2018年机器人顶级期刊IEEE Transactions on Robotics最佳论文奖。它用一个单目相机+惯性测量单元(Inertial Measurement Unit,简称IMU)实现了紧耦合的视觉和惯性联合状态估计,在保证高精度里程计效果的同时,还可以同时估计出传感器外参,IMU零偏以及传感器时延。2019年该团队开源了VINS-Mono的升级版VINS-Fusion,它支持多种视觉惯性传感器类型,包括单目+IMU,双目+IMU,以及纯双目。VINS-Mono和VINS-Fusion在当年一骑绝尘,是非常经典且优秀的VIO框架。

以下是VINS-Mono效果展示,在室外大尺度效果也非常鲁棒,以下是它在香港科技大学操场的SLAM效果:

在手机AR上应用,该算法完胜当前最先进的Google Tango效果如下:

以下是VINS-Fusion在汽车SLAM上的效果:

激光/多传感器融合SLAM

如果SLAM过程使用的主要是激光雷达相关的传感器,一般称之为激光SLAM。目前最知名的、效果最好的激光SLAM是Google发布的Cartographer,以及LOAM、LEGO-LOAM。

Cartographer是Google推出的一套基于图优化的激光SLAM算法,它同时支持2D和3D激光SLAM,可以跨平台使用,支持Lidar、IMU、Odemetry、GPS、Landmark等多种传感器配置。是目前落地应用最广泛的激光SLAM算法之一。

Cartographer建图过程

Cartographer代码最重要的 贡献不仅仅是算法,而是工程实现实在是太优秀了!它不依赖PCL,g2o, iSAM, sophus, OpenCV等第三方库,所有轮子都是自己造的,2D/3D的SLAM的核心部分仅仅依赖于Boost、Eigen(线性代数库)、Ceres(Google开源的非线性优化库)等几个底层的库。

这明显不是搞科研的玩儿法,就是奔着产品去的!因为依赖库少,可以直接在产品级嵌入式系统上应用,关键是开源免费,而且效果还针不戳!极大的降低了开发者的门槛。目前在GitHub的star数目是非常高的。

因此Cartographer非常适合于扫地/清洁机器人、仓储物流机器人、送餐机器人等室内服务机器人场景的实时定位和建图。

如果SLAM过程使用了3种以上传感器,比如视觉、激光、IMU、GPS等,一般称之为多传感器融合SLAM。比较知名的是LIO-SAM、LVI-SAM、R3LIVE等。

LIO-SAM 是Tixiao Shan在LeGO-LOAM的扩展,添加了IMU预积分因子和GPS因子:前端使用紧耦合的IMU融合方式,替代原有的帧间里程计,使得前端更轻量;后端沿用LeGO-LOAM,在此基础上融入了GPS观测。同时前端后端相互耦合,提高系统精度。

LIO-SAM效果展示

几何/深度学习三维重建

指用相机拍摄真实世界的物体、场景,并通过计算机视觉技术进行处理,从而得到物体的三维模型。常见的重建方法包括视觉几何三维重建,以及最近的基于 深度学习的三维重建。它是增强现实(AR)、混合现实(MR)、机器人导航、自动驾驶等领域的核心技术之一。三维重建通常需要SFM或者SLAM得到的位姿和地图点作为输入条件,下图是视觉三维重建的基本流程:

视觉几何三维重建效果展示

根据不同的实现方法,我们可以将三维重建分为:传统****基于几何的三维重建深度****学习方法三维重建。具体细分如下所示:

传统的重建方法是使用光度一致性等来计算稠密的三维信息。虽然这些方法在理想的Lambertian场景下,精度已经很高。但也有一些常见的局限性,例如弱纹理,高反光和重复纹理等,使得重建困难或重建的结果不完整。因此,传统三维重建方法在重建的完整性等方面仍有很大的改进空间。

近年来深度学习在三维重建上取得了很大的成功。基于学习的方法可以引入比如镜面先验和反射先验等全局语义信息,使匹配更加鲁棒,从而解决传统方法无法克服的难题。因此掌握基于深度学习的三维重建前沿算法非常重要。另外,在这个大数据时代,深度学习已经是大家必须掌握的技能,传统视觉算法已经很难有新的突破,各个领域都在朝深度学习方向研究,近几年各大视觉会议论文都是基于深度学习来实现三维重建,各个大厂招聘也越来越看重深度学习三维重建方法。

下图是我们整理的独家深度学习MVS网络演化图:

下面学习路线以深度学习MVS网络演化图为主线,重点讲解三个优秀的开源框架 MVSNet(经典的深度学习MVS开源库)、PatchMatchNet(有监督MVS网络中最新最佳)、JDACS-MS(无监督MVS网络中最新最佳),并梳理各种变种网络,覆盖目前深度学习MVS最前沿、最优秀的技术

视觉传感器标定

包括常见的单目/鱼眼/双目/阵列相机标定。相机标定是指借助专用的标志物(如棋盘格)来估计相机的图像传感器参数(内参、外参)和镜头参数(畸变系数)。相机标定是一切三维视觉的基础。它广泛应用于双目视觉、手眼机械臂、机器人定位建图、图像拼接、三维重建等场景。

相机标定学习路线

以上所有教程,我们都有对应的源码解析课程。

欢迎进入店铺查看↓

店铺链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合...(本文较长,建议收藏)
独家重磅课程!

1、详解Cartographer源码:多LiDAR时间同步/去畸变、IMU里程计融合、点云匹配、分支定界。。。

2、深度学习三维重建 详解深度学习三维重建网络:MVSNet、PatchMatchNet、JDACS-MS

3、三维视觉基础 详解视觉深度估计算法(单/双目/RGB-D+特征匹配+极线矫正+代码实战)

4、视觉SLAM必备基础 详解视觉SLAM核心:地图初始化、实时跟踪、局部建图、回环检测、BA优化,工程技巧

5、 VINS:Mono+Fusion SLAM面试官:看你简历上写精通VINS,麻烦现场手推一下预积分!

6、VIO进阶:ORB-SLAM3(单/双目/RGBD+鱼眼+IMU紧耦合+多地图+闭环)独家70+讲全部上线!

7、图像三维重建课程:视觉几何三维重建教程(第2期):稠密重建,曲面重建,点云融合,纹理贴图

8、重磅来袭!基于LiDAR的多传感器融合SLAM 系列教程:LOAM、LeGO-LOAM、LIO-SAM

9、系统全面的相机标定课程:单目/鱼眼/双目/阵列 相机标定:原理与实战

链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合...(本文较长,建议收藏)

全国最棒的SLAM、三维视觉学习社区↓

链接:「学习路线」SLAM/深度估计/三维重建/标定/传感器融合...(本文较长,建议收藏)