以上为DeepVIO的整体框架图,简单介绍下它和传统VIO的区别及它里边的主要贡献。
以VINS-mono为例,传统VIO的架构为输入camera图像数据及IMU数据,分别对上述两种数据建模,利用ICP计算图像间的位姿信息,利用预积分计算IMU的状态信息。
DeepVIO为视觉前端部分,使用监督学习,根据上述整体框架图,将整个系统分为Training和Inference两部分。Training部分先将双目的图像信息传入Setreo network,产生3D光流信息及自身运动的轨迹(用于监督训练),另外则是同样camera与IMU输入数据,分别通过2D flow network和IMU preintegration network,产生2D光流信息和位姿信息,最后通过VI fusion work将两者进行融合,最后产生轨迹。Inference部分与Training部分重合(不过多赘述)。
(1)第一次使用自监督学习,端到端的单目VIO(从双目中获取监督信息)。
(2)使用3D几何约束(包括3D光流和6-DoF)构成校正2D OFF,IMU姿势和VIO轨迹不一致估计(翻译可能有误)。
(3)使用FC-fusion network的姿势反馈更新IMU的额外偏差,类似于传统的紧耦合VIO方法。
(4)实验结果取得了良好的效果,与EuRoC和KITTI数据集上基于VO和VIO系统的最先进学习相比,准确性和数据适应性方面都表现较好。
上图为实现细节图,Stereo Supervision部分上一时刻和现时刻的左右图像输入PSM Net,进行深度计算,利用ICP算法将两个时刻的深度信息进行计算,得到3D光流信息和Stereo se3(即R,t的李代数),Stereo se3用于约束Fusion Loss(合成函数损失)和IMU Loss(IMU损失), 3D光流信息转换合成2D光流信息去约束CNN-Flow Loss(2D光流损失)。左边为Inference部分,使用单目将前一时刻和现时刻的图像传入CNN Flow,生成2D光流信息;另外将IMU上时刻的值和Bias输入LSTM进行状态估计,生成IMU_se3,同时利用IMU_se3进行状态更新。利用FC-Fusion 将两个输出进行融合,产生VIO_se3。
存在漂移现象,重定位与场景识别失误等问题,只是SLAM前端部分并没有后端和回环等。