Slam发展多年,终于有了真正有意义的发展。Base改进主要有:特征点检测.特征点描述.全局特征描述。

-0-.SLAM的视觉前端

       SLAM:同时空间定位与构建地图。对于重建与定位,双目视觉倾向于使用稠密的方法,对已生成或者直接获得的稠密点云进行重建,有一系列方法。机器人行业最常用的slam是单目实时的空间稀疏重建与定位,双目的可以看做两个单目加一个固定的基线。

       稀疏方法与VO。视觉里程Visual Odometry,对于移动Agent所搭载的单目相机,相机获取两帧图像在世界坐标系中的位姿发生变化位移t(xyz)和三轴旋转R()。1.对两幅图像进行特征点检测KPs和计算描述子Fs,搜索特征点对应关系M(p1,p2);2.得知相机内参K,通过极线约束,解算出位姿转换的基础矩阵F(或本质矩阵E),同时可得到对应点的深度信息z;3.通过QR分解,计算Agent的位姿变化RT。即为Agent在获取两帧图像间隔的视觉里程VO。也就是所谓的视觉前端。

       初始化问题。视觉盲区,匹配失效,或者机器人绑架问题等等。

       漂移与优化。因各种硬件误差、延时误差、Global Shutter与Rolling Shutter、亚像素误差、计算误差等,两帧VO的误差在时间累积之后产生漂移,就需要进行全局优化。全局优化的一些方法有,三维重建方法中的BA方法,或者工程中使用回环检测之后使用BA或者其他方法纠正偏移,减少漂移。也就是所谓的后端优化。

      稀疏重建与定位的发展历程:十几年来,SLAM的发展框架趋近于成熟,从可应用于室内的EKFMono方法,到结合了BA方法之后各种工程上的扩充。EKFMono方法在小空间内取得成功,惯性导航IMU对视觉盲区和初始化问题有了很好的补充,并在一定角度内获得超过视觉VO的R计算准确度。ORBSlam是一个较为成熟的slam框架,其工程化的优良性能为业界做出巨大贡献,模块化的功能和可扩充性能良好,并覆盖了SLAM所需要的多个方面。

       无数的博客和书籍围绕着几个公式,阐述机器人SLAM中的整体方法,稀疏的、稠密的、半直接的等等。视觉前端框架基本没有多大改变,双目的、单目的,基本上图像处理方法的跟随。更多的是对后端优化进行系统的阐述,比如FK等滤波方法以及其他非线性优化方法。此处阐述基于深度学习视觉方面的基础改进。一、单目稀疏重建与定位

 

一、视觉检测和描述中的CNN方法

       单目稀疏重建与定位的视觉改进,硬件是一个最基础的方向。从软件和算法的角度,视觉前端的改进方法,有提升图像的分辨率、提升显著点/关键点的检测性能、以及提升关键点的局部描述子性能。

       传统的检测方法和描述子方法,请参考:图像局部显著性—点特征(SIFT为例)。大量的特征检测子比(如harris、fast等)和描述子(SIft、PCA-SIft、Surf、GLOH、Brief、Brisk、ORB、Freak等)有严格的理论证明,并且有完整的哈希性能分析。分类:基于显著性的检测,基于特征的检测、基于能量的检测等。

      基于深度学习CNN方法的特征检测和特征描述:以学习方法(ML)替代经验设计(handCrafted)特征。在此方面有两个基础方向:学习检测子和学习描述子。或者同时学习。

      描述子学习: LIFT特征是一种使用CNN来提取特征点(feature points / interests)的方法, 发表在ECCV 2016.众所周知, 尽管在2004年就已经发表出来, 但是SIFT(Scale Invariant Feature Transform)在三维重建中一直至今都无可替代. 随着学习的火热, 研究人员开始将目光更多转向于寻求一种基于学习的方法来提取特征点, 从而代替人工设计的特征点.

      检测点学习:SuperPoint 是基于自监督训练的特征点检测和描述符提取方法,是2018年MagicLeap发表的一篇文章中提出的()。通过卷积的方法对提取的Map进行显著性分析,获取区域极值点,即为关键点位置。同时特征描述子可以在原特征Map上获得,也可以使用新的方法生成描述子。

      转向CNN-DL火热的CVPR2019,视觉特征点的检测和描述有了大量的改进。应用在场景重建和定位方面的论文又有....

      LIFT使用了经验指导结构设计,使用数据训练优化的方法,旨在得到一个表达能力更强的特征。SP方法使用了指导学习的思想,使用数据增强方法,有时可以对网络不加详细的训练,得到端到端的检测网络。

 

二、回环检测与场景识别

        在后端优化过程中,回环检测是一个重要的部分,另一种描述为场景识别或者图像检索。图像检索方法的发展由来已久,百度Google阿里腾讯都有成熟的图片检索应用,以图搜图,或者搜图购物等。

       BOW方法与稀疏编码方法,获取图像全局特征。BOW在ANN下的解释。Bow与一般SparseCoding或LSH方法不同在于其典型的应用场景,LSH方法可以通过学习得到局部敏感hash函数族,SP使用学习方法寻找高维空间的一组稀疏完备基,可用于广泛的ANN查找。BOW方法源于文档检测,并在图像检索中广泛应用。BOW的方法依然性能基于Word的性能,在图像中为局部描述子,是一种图像稀疏描述的检索方法,只记载图像中的关键信息。

        BOW方法具有稀疏性,可以使用倒排索引提高检索性能,并具有在线扩展性,可以在查找时更新/更新叶子叶子节点,因此在SLAM方法中应用于基于局部特征描述图像的场景匹配-闭环检测。

        全局特征性能提升:为提升BOW方法的性能,FidherVector和VLAD方法得以应用。FidherVector方法使用局部特征点的线性组合,强化了全局性能,并丢失了一部分扩展性。VLAD方法收集了局部特征点和全部的距离信息,可看作对BOW全局特征的无损提升。

        VLAD-Net,使VLAD特征可学习。对VLAD的损失函数,进行指数平滑,使其变得可微可学习,称为VLAD层,并可以无缝嵌入任意CNN网络,获取全局特征,即为VLAD-Net。

        基于CNN的方法是一个离线的检索方法,只在特定的场景上得到更好的全局检索性能。

        BOW-VLAD-VLADNet-HFnet,CVPR2019的论文HFnet,使用MobileNetSSD-V2网络,借鉴SuperPoint网络思想和特征给你强化思想以及VLAD网络思想,使用指导学习同时实现了局部特征点检测.局部特征点描述.全局特征描述的功能。

        HfNet也 成为一个为三维重建/SLAM方法量身定制的一个CNN方法。其专门优化的网络结构,并使基于深度学习的实时定位方法成为一个可靠的途径。

         1.空间定位的传统方法,广泛使用Align匹配的方法,使用RANSAC方法选取模型,而后使用PNP方法,计算匹配/观测点集合和点集模型的刚性位姿变化R和t。2.实时定位基于CNN端到端的方法典型有MapNet系列,直接从图像回归出刚性位姿变化R和t,理论和实际性能远未达到可用性能。3.使用检索的方法,使用检索代替RANSAC方法,寻找最近邻图像,通过两帧VO,计算出R和t。3.1基于快速检索的方法有分为传统编码方法和CNN方法,典型方法分别为LSH和 VLADnet。

        RANSAC方法1在点集较大时候出现明显的性能下降,现阶段的实现证明,第三种方法是一种在大场景中合适的进行实时空间定位的方法。HfNet的优良性能为Agent实时视觉空间定位提供了很好的途径。

 

三. HfNet的网络结构

        SLAM发展多年,优化理论并未有有意义的创新,只是总结的更加系统,形式更加优美,并未能对SLAM性能有本质的提升。HfNet的网络结构基于MobileNetSSD-V2网络。融合了近年来,三维重建/SLAM方法的改进的最基础最重要的几个关键点:关键点检测性能 .描述子描述性能. 全局特征表达性能。

         

cnn变化检测 cnn-slam_cnn变化检测

       HfNet网络是深度学习对SLAM方法改进的集大成者。论文:*From Coarse to Fine: Robust Hierarchical Localization at Large Scale。  GitHub地址:https://github.com/ethz-asl/hfnet。Python 3.6 is required,By default, TensorFlow 1.12 GPU will be installed.PyTorch 0.4.1 is also required to run the original SuperPoint and perform GPU-accelerated feature matching.

        至于把基于CNN方法的应用于SLAM/三维重建/实时空间定位,是一个工程问题。

        使用教师网络比如SuprtPoint网络进行指导训练MobileNet-SSD.V2的局部特征网络,使用VLADNet等指导训练MobileNet-SSD的全局特征网络,并优化模型,通过减枝/压缩/量化等把模型移植到设备中。