为什么目前落地的主流SLAM技术很少用神经网络进行特征提取
假如我选dso,或者最新继承者dm-vio,或者时髦的3DGS-SLAM,如果是因为它定位效果好我选它自然ok,但是如果是为了它炫酷的稠密点云选它,此时就需要仔细琢磨一下我的需求到底是定位还是建图,因为我大可以在特征点法vslam的基础上加一个深度滤波的建图线程。因此算力成本是一个非常重要的因素。如果让我选,我更可能选滤波的方案,它对算力要求比优化更少,现有开源方案工程化程度高,需要的修改少,也比
点击下方卡片,关注「3D视觉工坊」公众号
选择星标,干货第一时间送达
来源:3D视觉工坊
「3D视觉从入门到精通」知识星球(点开有惊喜) !星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉算法源码、求职招聘等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!

SLAM目前在各领域都已经有很多的应用,但为什么大部分已经落地的都用的还是最传统的方法,比如目前最主流的ORB-SLAM,即使到ORB3也依旧用的是传统的FAST和BRIEF方法来检测和提取特征点,而不用CV领域里早已经普遍的神经网络如VGG等来提取特征点。
当然最新的很多语义SLAM论文里都已经用到了如GCN等神经网络提取特征,但为什么目前落地和应用的大部分还用的是传统的方法?提取速度和所需算力应该不会有太大差异才是?
作者:forward等人
连接:https://www.zhihu.com/question/419264201
forward的回答
这个问题本身其实已经包含了回答:“落地”。
在企业届里,所有人最关注的事情其是就是“落地”二字,也就是把事办成。这个思想,不光光局限于SLAM领域,其它算法,其它行业也是如此。把事办成了,代码能用起来,产品有机会卖出去,企业能赚钱,开发者才会不毕业,我们都有美好的未来。“落地”是企业界对算法选型的核心原则,不会像学院派那样追求fashion。
“落地” = “需求” + “能力”。其中“需求”是对业务的理解,“能力”是对自身的理解。
对于SLAM或者LIO,VIO而言,前者是 “实时+定位+建图”,后者是里程计,其是就是定位。对于SLAM而言,它的建图部分大多也是为定位服务的,所以说,SLAM讲的仍然是一个定位的故事。当然咯,也有需求是为了建图,例如各种手持式的扫描仪,他们的目的是为了构建一个精确且稠密的点云地图,然后在基于这个点云地图,服务于后续的其它需求。因此,确定SLAM技术方案的时候,首先要确认,我们真实的业务需求是什么?

一、需求
假如我现在要开发一款VIO/VSLAM,第一个问题是我用他干什么事情?如果是为了恢复漂亮的稠密点云,或者搞出NERF/3DGS那种酷炫的新视角合成效果,那么我可能会去搜索DSO,DM-VIO或者各种新出的3DGS-SLAM,这就更像是一个建图问题;如果是为了提供鲁棒的长期局部定位,那么我就不会考虑回环检测,全局描述子地图,也不会被直接法恢复的稠密的点云所诱惑,此时我需要考虑的是,哪个方案在综合考虑鲁棒性,精确性,低成本后更有性价比。
第二个问题是在什么场景下会用这个方案?如果是白天纹理丰富的静态场景,可能传统角点+光流/描述子的方案就能work,使用深度学习的特征当然更好咯,只是没必要。如果是公开道路那种多动态的场景,要么我加个雷达做LIO,要么我的确迫不得已得使用深度学习提更鲁棒的匹配特征和去除动态障碍物。好在对于实际业务,场景往往是限定的。
所以,明确需求,要确定哪些是真实需求,哪些是伪需求。slam领域而言,定位往往是设备端实时进行的,鲁棒性和低功耗更被看重;而建图是可以离线做的,这就可以堆各种策略。

二、能力
能力包含三点,原型方案能力,硬件能力,和人员能力。原型方案可以是开源代码,可以是组里祖传代码,假如你是狠人也可以是你的原创代码。假如说原型代码放设备上直接就能用,那我一行都不用改。
再举一个例子,假如我做vslam,我该怎么选。比如说orbslam3,我们都知道这个方案比较重,orb描述子计算量大,更可怕的是这个框架是一个有多处内存泄露的系统。假如我选这个方案,要么我人员能力强,把代码改的效率更高,内存泄漏的地方一个个改掉;要么我硬件能力强,搞一个超大的内存和newbee的CPU。假如我选dso,或者最新继承者dm-vio,或者时髦的3DGS-SLAM,如果是因为它定位效果好我选它自然ok,但是如果是为了它炫酷的稠密点云选它,此时就需要仔细琢磨一下我的需求到底是定位还是建图,因为我大可以在特征点法vslam的基础上加一个深度滤波的建图线程。此外直接法vio普遍大家都不熟悉,这意味着人员能力不够,代码改不动维护不动。
隔壁话题,为什么工程上选择vins-mono而不是orbslam,先不说这个结论是否对,但是在代码量上,落地需要的修改和理解的代码行数上,算力要求上,vins-mono要比orbslam少的多,说明vins落地性要比orbslam强。
如果让我选,我更可能选滤波的方案,它对算力要求比优化更少,现有开源方案工程化程度高,需要的修改少,也比较成熟,采用静止初始化,有些地方没看懂也不影响使用,这就是原型方案能力强可以弥补人员能力弱和硬件能力弱的缺点。
原型方案能力,硬件能力,和人员能力这三者往往是相互制约的,原型方案能力越弱,就要求硬件能力和人员能力越强,以此类推。要想高毛利,要想多出货,那就必须限制硬件能力,加强原型方案能力和人员能力。
好在,业务场景往往是固定的,原型方案能力和人员能力往往是够用的,同时也是在不断进步的。能力的比拼,到最后,都是钞能力的比拼。而且,人员能力不够是必然的,无需为此沮丧。假如说你是vslam天才,但是3DGS你玩得过后来者吗?会因为你是vslam天才就让你一辈子只搞vslam不搞别的吗?因此使用别人的方案是正常的,看不懂人家每一行代码也是正常的。
综上所述,选择技术方案的原则是它能否“落地”,“落地”是“需求”和“能力”的组合。回到问题要不要用神经网络提特征,取决于2点:有没有这个必要,和你会不会搞。

心态炸裂男孩的回答
谈一下个人看法,可能不对。
首先slam是一个偏工程化的应用技术。因此算力成本是一个非常重要的因素。传统的特征提取速度快,算力成本低,可以在cpu运行。如果利用深度学习特征提取,算力包括gpu,深度学习特征带来的额外CPU和内存成本。问题是传统方法特征提取已经能满足大部分场景了。
深度学习提取的特征就一定好?显然不是的。因为数据集的原因,利用深度学习训练出的特征子适用性并不一定好。貌似网上有一篇论文,利用orbslam框架,对比了orb和superpoint的效果。发现有几组superpoint效果确实好,但是有几个序列视频利用superpoint的slam直接track lost.这就表现的不好了。
因此在大多数场景下,传统特征可以解决。利用深度学习特征就显得画蛇添足了,没有必要。当然在某些场景利用传统特征就不可行。如光照变化剧烈,相机运动剧烈等场景。在long term slam这个话题下,深度学习特征效果明显。
slam方法不仅仅是为了定位,个人觉得slam终极目的是复用地图。显然长时间定位这块大部分人的目光都是投入到深度学习特征上,去superpoints.r2d2特征。毕竟长时间定位会有时间,天气,光照,动态物体变化,传统方法根本就不能解决。而深度学习特征却可以保证长时间定位的准确度。
所以个人看法,虽然深度学习特征虽然用的不多。但未来基于深度学习特征slam会越来越多。

余世杰的回答
其他答主都说了好多了,算力问题以及提升率啥的。我个人是觉得还有个原因是,特征匹配在视觉SLAM中的重要性没有到夸张的地步,在传统算法情况下,有一定的错误匹配也能得到较好的结果,前端重要的同时,后端更加重要。
那么多SLAM算法,前端都大同小异,而且帧之间的位姿变换好多都是先用匀速模型做初始值,去适配优化,实在不行再进行特征点的匹配求位姿。真正区别还是关键帧的处理,强调运动的整体性,而不是两张图之间单纯的匹配精度。这是我个人的观点,有不对的还请大佬指正。
以上来自2020年9月,回过头2023年5月自己使用测试过之后发现,目前的特征提取依赖性并不强,传统的也能做得比较好,反而神经网络的提取稳定性和重复性可能不够强。但是对描述子的计算和匹配上,还是有一定参考性,更实用,感兴趣的朋友可以自己也测试看看。
本文仅做学术分享,如有侵权,请联系删文。
3D视觉方向论文辅导来啦!可辅导SCI期刊、CCF会议、本硕博毕设、核心期刊等
3D视觉硬件
3D视觉学习圈子
「3D视觉从入门到精通」知识星球(点开有惊喜) !星球内新增20多门3D视觉系统课程、入门环境配置教程、多场顶会直播、顶会论文最新解读、3D视觉算法源码、求职招聘等。想要入门3D视觉、做项目、搞科研,欢迎扫码加入!
3D视觉全栈学习课程:www.3dcver.com
3D视觉交流群成立啦
更多推荐


所有评论(0)