目前深度学习在SLAM上的应用可以分为三类,一类是end2end,输入连续帧图像,经过网络直接得到pose信息,例如DeepVO,D3VO;
第二类是还是利用slam前后端的整体框架,用DL来替换某一模块,例如Magicleap团队用SuperPoint和SuperGlue进行特征点的提取和匹配,普林普顿Jia Deng团队的RAFT光流,DroidSLAM主要用学习的方法进行BA,类似工作还有BANet;还有一些工作用深度学习来做场景识别,可以用来SLAM中的回环检测阶段。
第三种则是利用深度学习的其他模块来提取一些更高级的语义特征,也就是语义SLAM,例如Yang Shichao的CubeSlam,利用图像检测出图像的语义信息例如车,然后恢复出三维Box,加入到系统中一起优化,提升鲁棒性。
我认为即使是想用DL来做slam,那基于几何方法的SLAM也是必须掌握的,尤其是后端的优化部分,cost function需要自己设计吧,光流或者描述子的网络也得自己设计吧,这些如果几何方法不懂又何谈用学习的方法替代,或者说如果不知道传统法在这个场景不好的原因,那又如何说服别人学习就一定可以呢。总之,个人的观点是不太看好直接前后端在一起来一个大的网络,把中间完全当成黑箱,这种不是SLAM的初衷,SLAM的后端是一个有明确数学模型的阶段,相信很多企业也不敢这么用。反之按照前后端的思路,进行模块的替换,或者说几何和学习一起来用,提升系统的性能,这才是应该注意的地方。
作者 王小二
深度学习和slam的结合,我倒是做过一点,不过都是视觉slam方向。就以我知道的做一个讨论吧。我们以视觉slam的基本组件作为脉络来进行梳理。
数据采集:单目,双目,深度图,这块儿和深度学习结合的话可以考虑。单目深度图估计,双目深度图估计,双目匹配参数估计(用于计算深度图),动态物体提取,语义物体提取(为后续建立语义地图做基础),图像降噪,运动模糊恢复。不过这些东西其实和slam不是强绑定的,你做不做都能扯一波。
-
前端里程计:这块视觉一般叫做VO,可以完成基本的位姿信息输出,很多没做过slam的人就会认为slam的功能就是vo+建图就搞定了,不太知道后端优化和回环检测的作用。这里的化可以做的就包括。图像特征点提取,图像特征描述子生成,图片映射参数估计,局部优化(BA)参数估计,映射矩阵求解,直接位姿预测。比较好做的还是图像的特征点和描述子部分,这块我们自己也是成功实现了。王小二:UnsuperPoint阅读和踩坑记录
后端优化:感觉和深度学习没啥结合点,虽然可以去学习优化,强行上深度学习就是为了用而用。
回环检测:回环的话和特征提取部分也有关系,可以考虑一些方向。全局+局部的回环确认(先用图像帧搜索定位范围,然后精细匹配)图像搜索就可以用深度学习做,语义地图,表述意义更好的描述子,搜索加速(比如用dhash去替换高维特征)。
建立地图:做目标检测,语义分析最火了。想办法去除动态信息,有用而且很火的方向,我们只做了简单的分割去已知目标的部分。
所以用啥或者怎么结合就看是为了应付领导,还是真的想在系统里面用了。如果真的想用,可以考虑的点:深度估计,特征提取,描述子生成,目标检测,语义分割,动态目标去除,搜图全局定位。这几个点我们基本都尝试过,有坑但是可以用。