如何研究视觉里程计?
- 作者 · 高翔
- 1555次浏览
- 2018-01-03
- 来源 · 知乎
- 分享
- 字体-+
这是一篇SLAM技术问答的文章,也是一篇朴素的科研精神指导的文章。
小编寄语:
这是一篇SLAM技术问答的文章,也是一篇朴素的科研精神指导的文章,虽朴实,但总有让你认同的一个地方。
这是一篇SLAM技术问答的文章,也是一篇朴素的科研精神指导的文章,虽朴实,但总有让你认同的一个地方。
楼主邀请:
首先感谢一下@半闲居士、@hitcm、@jing胖等大牛,在VO和SLAM上的科普,看了他们的文章,算是快速地入了这个坑……
我的课题就是要研究结合惯性测量的VO(博三,但是新换的课题,研究了半年VIO了,不想又双叒叕换课题了)。刚开始视觉里程计的研究,尝试实现了一下MSCKF,应该是程序写的不好,性能差的不忍直视,现在很是怀疑人生。
看了DVO、LSD、ORB-SLAM这些算法,思路都很有意思。在KITTI数据集中,误差和移动距离的比值差不多只有不到1%。今天又拿Google Tango试了一下,走了5分钟,应该有上百米,最后误差也不过1m左右。这样的性能我觉得已经可以满足绝大部分的需求了。
我知道,SLAM和VO都是很有用的东西,省略10万字。但是,我觉得,
首先,VO的性能上,虽然还能提高,但再提高的价值十分值得怀疑。今天跑了Tango,感觉精度很不错了,鲁棒性也可以,而且在平板上运行,实时性也很好。其次,现在主流的这些性能很好的方法,动辄几万行代码,看起来就足够吓人了。如果自己再写新的算法,写这么大的程序真是让人望而生畏。
求大神们能聊聊,自己的研究思路,大概怎么才能找到一个合适的突破点呢。
半闲居士回答:
谢邀。你这个问题应该提“怎么找VO中的研究点”,更好一些。
我本人每天也收到各种邮件询问怎么找slam中的研究点的(但是这类邮件我一般不怎么回)。在回答你这个问题之前,先纠正你提问中的几个偏见:
你研究vio半年,觉得自己写的程序很烂,和产品级的tango没法比,和开源的ORB/LSD也没法比——这很正常。我上个月刚听了DSO作者的博士答辩,先谈谈DSO是怎么做出来的:
此人的研究途径是“连续视频中的关键帧深度估计-LSD(往slam拓展)-DSO(光度标定、稀疏化)”,这是他从2012年至17年的研究成果。
他的导师是Daniel Cremers,同时接受A.J.Davison的联合指导。前者长年开MVG的课程,后者是著名slam研究先驱。
实验室之前有DVO(RGBD版直接法)。除他之外大约半个组的人在做(各种版本的)slam。17年实验室规模是6~7个博士后,25+博士。同时实验室其他人的工作就有双目/鱼眼LSD/DSO,LSD/DSO+IMU融合,等等。
他本人也是代码大神(当然由于我国计算机教育问题,很多研究生还得从Linux和c++学起)。
说这些事情的目的,是让你对slam方面的研究有一个合理的预期。如果你期待刚换课题半年就能从零写出比人家更好的代码,那或许不太现实。相反,你应当合理规划自己的研究路线,理想情况是毕业时候你能写出一个好的vio,然后把一些中间成果转化成几篇文章供你毕业。
然后来谈vo/vio。首先这并不是一个很新的问题,前人已经留下了大量的成果。对于这种方向,改进会比创造更容易一些。vo的改进也无非是老生常谈的几个方面:精度/速度/鲁棒性。
1. 精度。精度目前是个玄学问题,what makes a SLAM accurate? 这个问题并没有得到很好的解答,所以现在还有各种方法在争来争去。kitti榜单意义大不大?同样方法换个室内数据集是否依然准确?
2. 速度。速度主要是工程实现问题,包括binary描述/并行/稀疏化/中间结果缓存等等。当然也存在从理论上可能改进速度的方面,例如msckf相对于非线性优化肯定要更快一些。
3. 鲁棒性。比精度更玄学的问题,但是是今后slam的主要方向,主要目的是让slam能在各种场合下都能用,包括特征点不足/光照/动态物体等等。现阶段很多问题在现有slam框架里,还没法很好的回答,不过也催生着许多新思想的产生。IMU方面,理论上面比较固定但工程实现复杂,实际应用价值比较大所以很多人在做(而且由于公式多排出来的论文比较的高端)。也可以从上面三个方面考虑改进,但个人觉得更困难一些(把东西写对就很不容易了)。
再有就是与deep learning结合了。这里工作比较杂但是也比较有意思(相比vio每年都在说同样的事情)。大致来说分两个方面:
1. 学slam或学slam一部分的,所谓的真.玄学家。极端点的玄学家认为可以端到端学slam,但是多数slam研究人员觉得不靠谱(看到把CNN一串输出6自由度Pose我都惊呆了好吗)。此外就是学光流,学双目立体视觉,学单目深度预测,学场景等等(学pose坚决反对)。总之玄学家怎么搞都可以发文章。
2. 把deep learning结果用到slam里的。典型的是拿来做回环,做semantic mapping/semantic bundle adjustment的。把物体检测或分割的结果丢slam里就能出漂亮的物体地图哦?这方面现在的问题是缺少评测手段,因为你没有真实的3D物体地图(除非用游戏数据仿真)。同时也容易被审稿人指摘说对slam和detection/parsing都没有实质改进,因为多数时候都不太会去动原始的slam程序和检测网络。
最后,个人意见是,哪里有坑往哪里跳,而不是人家把坑都填完了你又从头挖一遍……多和导师,同学交流,多看看近期的会议论文。
祝科研顺利
--------------------------------------update:
评论区里要CNN出pose的文章,其实挺多的,随手举几篇:
Unsupervised Learning depth and Ego-motion from video,和直接法很像的一个网络,算pose那部分用了一个CNN。源码在:tinghuiz/SfMLearner 基于tensorflow的。文章introduction部分还列了一些相关工作可以看。
DeepVO: towards end-to-end visual odometry with deep recurrent convolutional neural networks. 先用的cnn后来改成了rnn,似乎没开源。
也不是说cnn出pose就不好,只是这把以前说清楚的事情反倒弄的不清楚了。至少orb/dso之类的你随便给个图像序列多半能跑起来,跑不起来你也知道是标定不好还是特征不够一类的问题。但cnn出的pose谁知道对不对呢……深度学习由于end-to-end的特性,不少人就是天天换各种end,无视中间原理,只要最后结果和他数据集对上就行,这种做法我感觉并不可取。
本文转载自知乎,作者:半闲居士,如若转载请联系原作者。
参与评论