代码:https://github.com/utiasSTARS/ss-dpc-net
摘要:
提出一个自监督的deep pose correction (DPC)网络,对估计的VO进行姿态修复。我们没有对帧间的位姿变换直接进行估计,而是基于之前工作基础上也就是使用data-driven 学习来回归位姿校正,主要矫正的是由于违背模型假设造成的系统误差。本文没有使用6维位姿的ground-truth进行训练,甚至有时候超过了监督训练。
1.介绍
准确的自身定位对于可靠的自主移动(mobile autonomy)十分有必要,特别是在在全球导航系统(global navigation satellite)信号不准确的情况。特别是基于视觉的自定位,变得越来越普遍(ubiquitous),由于高质量的相机相对便宜且简便,除了在计算机视觉和机器人学中有很长时间应用,视觉定位也是一个开放的研究题目,特别是在大多数模型都不符合的动态环境中。
最近,为了得到鲁棒的位姿估计,端到端的学习方法完全替代了传统方法,通过直接从数据进行学习(监督/自监督方法),这些方法都潜意识的放松了传统方法中的假设约束,从而在移动物体,弱光照以及明显遮挡的条件得到鲁棒效果。但到目前为止都没有超过经典VO算法的准确度。
其他方法则用学习的部分加强了传统估计(不是取代)。例如,学习的测量模型在添加卡尔曼滤波器【5】后,用来从单目图像中提取照明方向来减少方向偏移【6】,或者作为准确初始化单目VO方法中的深度【7】。通过与传统方法结合,这些方法希望能够保留基于模型得可解释性和迁移性,同时利用data-driven的model-free learning的能力和灵活性来增强准确度和鲁棒性,
如图1,本方法利用学习后的位姿矫正单元将经典VO方法与data-driven模型进行融合。我们通过传统VO估计一个大致的先验结果,然后使用深度学习网络学习一个小的矫正,对传统方法在不利条件下的退化情况进行建模(如,场景中存在许多动态物体),而不是训练一个网络仅仅通过数据回归初整个图像间的位姿变化。
图1:通过自监督的DPC网络回归初传统VO估计的为自校正
我们扩展了DPC-Net,由[8]提出,介绍了deep pose corrections (DPC) ,并使用DNN通过监督训练对位姿的ground-truth进行correction预测,我们将原先监督方法的损失函数改成了光度重建损失的自监督,对于迁移到新的环境能够更适应,贡献如下:
- 使用自监督方法,不依赖真实标签训练DPC网络
- 在KITTI odometry上有效
- 公布代码
2.背景
VO是一个深入研究的导航方法,通过解决连续图像相机自运动,来估计机器人的六维位姿变化。特别是,连续帧的位姿变化是对位姿的优化后的结果,比如对单目或双目图像的两簇点云(间接法)或像素亮度(直接法)对齐后进行误差最小化。
外围剔除方法,例如RANSAC【10】或鲁棒损失被用来移除影响优化过程的特征。通过对相对位姿变化进行融合,能够求得一个全局位姿变化。然而,VO会受到超线性误差(superlinear error)增长:也就是任何相对方向的微小变化会造成更大的位置误差。特别是,VO的误差来源包含错误关联(特征匹配),特征检测差(由于相机运动模糊或光照不良)或场景中存在动态物体。具体见【11】中的观点。
新的data-driven方法使用学习模型替代了部分传统VO定位方法。【3】使用监督学习回归位姿变化,其他的【12】-【14】使用自监督的光度重建损失训练。这些损失函数惩罚的是目标图像的像素亮度与重建图像的亮度差,在假设为:固定场景,固定光照并没有遮挡的条件下。通过使用预测的帧间姿势变化,深度图和已知的相机固有参数的逆变换过程,从源图像重构目标图像。为了训练这种网络,通过一个可微的图像变换工具空间转换【15】能够有效合成图像,使得能够从重建损失中反向传递梯度。我们则基于相似的光度损失来学习位姿矫正。
其他方法在光度重建损失基础上添加额外的约束:
- 【16】的作者使用‘composite transform constraint’来确保多帧估计的位姿与两两帧单独估计的结果相似。
- 【13】中,对极几何约束用来确保原图中重投影的像素在目标图像的极线上。
- 【4】使用左右立体一致性损失,使深度网络在测试时能够输出尺度化的深度图。
- 【17】学习光流和视差,并使用RANSAC选出内圈像素用来估计位姿。
- 【12】额外训练一个网络回归一个“explainability mask”,忽略对重投影有影响的像素,因为违背了光度一致性或存在物体移动,我们使用了其中的mask
3.方法
我们将端到端的自监督学习与【6】中的DPC结构结合。使用光度重建损失替代自监督损失。与其他自监督方法相似,我们也输出帧间位姿和深度图,然而!我们估计的位姿是由传统VO方法的先验自运动进行初始化的。我们将这个先验与估计的位姿对比形成correction。 使用深度图和正确的位姿,我们将原图变换到目标图像,并计算光度重建损失。与【6】不同,它需要监督的位姿损失,并需要SE(3)真实标签用作训练。
我们的位姿网络没有直接估计位姿变换,而是想回归出一个SE(3)矫正矩阵
,来对传统VO结果
进行矫正
为了对correction进行参数化,使用一个来自李代数的无约束向量
,并通过指数映射得到
表示:
本网络可以与任何传统VO估计进行配合并进行位姿校正;VO估计器的位姿变换由相邻帧得到,并通过最小化光度重建损失对位姿进行修正。这里,我们使用单目和双目VO估计器(分别为libviso2-m 和 libviso2-s [20] )训练我们的网络,并验证了我们的方法对两种估计器的位置精度都进行了提升。我们对libviso2-m 和 libviso2-s采用单目矫正(DPC网络输入为单目),因为我们的损失函数没有双目图像约束
A.图像变换函数
我们采用反向变换函数(inverse compositional warping function)即使用原图的估计深度图,相机内参以及相邻帧的估计位姿。假设在针孔相机模型下,对于场景中的3D点
,图像坐标为
,则:
其中是相机中心点,
是水平垂直方向的相机焦距,估计的位姿变换用来将
转换到下一时刻的3D位置:
3D坐标被投影到像平面,根据以下:
重建的目标图像,会保持原图的光度强度,我们没有单独对每个像素进行重建,我们使用空间转换(ST)【15】进行可微图像变换,从而有效从原图对整个目标图像进行重建
B.损失函数
我们使用带权重的光度重建损失,用来比较重建图像和目标图像。对于含有N个训练样本的数据集(每组包含C个图像通道,大小为的原图和目标图像),损失函数如下:
- 第一部分:像素级的权重光度重建损失,比较目标图像与重建图像相对应的像素光度差:
- 每个像素损失由解释(explainability)mask进行权重分配,
,表示该区域是否违背光度一致的假设(比如:由于光照变化,动态目标或遮挡)。一个高质量的图像重建应该是网络估计的深度和位姿矫正也是高质量的。为了避免所有权重都设为0,我们使用正则化项,
,一个对于每个像素都带有固定标签1的交叉熵损失
图2.b证明了mask可以消除场景中的运动物体的影响
图2.b 解释层对不稳定像素的降权重
- 最后,
是对训练样本中不正常的较大旋转的损失项,由于这些样本比小旋转的情况少见,但是对于自运动估计很重要,使用这项损失增加其损失权重,
损失项与光度重建项相同!!!,但除了大旋转(根据经典估计其的方向估计
)外,都设为0
C.模型结构
我们的网络同时估计位姿矫正,深度估计,和解释mask。图2a提供了网络结构图,是从【12】进行改进,使用的是U-Net的编码-解码器。网络同时输入2帧图像进行光流向量估计。添加了使用Gunnar-Farneb ̈算法 [22]的光流估计用来对现有表达进行额外信息输入来提高效果。此外,对网络提供传统VO估计(通过一个对数图得到的一个李代数),在网络中心部分被全连接层串联在一起。注意,与之前网络不同,我们将深度和位姿网络改为一个单独网络大大改进了能力,将光流和libviso2估计的位姿结合后输入,额外提高了效果
编码器由5个模块(蓝色)组成:每个包含一个2D卷积层(步长为2)、RELU激活、一个批归一化(batch normalization)层。我们没有使用池化层,因为会造成空间不变性,不利于视觉定位、在bottleneck,我们将网络分为深度、权重mask,以及位姿校正网络。对于深度和权重mask,使用包含2D转换卷积层【24】接一个RELU激活层的解码模块进行上采样。我们的深度估计层是一个2D卷积(步长为1)将通道数变为1,并添加RELU激活来确保输出为正值。最后的权重mask是一个sigmoid层,将像素值压缩在之内
4.实验
使用KITTI odometry数据集中的00,02,05-10和额外的24个来自raw KITTI中的''city”, “residential”, “road”训练序列,为了方便训练,将图像尺寸改为240*376,并使用ImageNet [27]统计进行whitened。预计于关键帧的方法相似,我们使用传统VO估计来过滤掉小运动的帧数,通过移除帧间偏移或旋转小于1.5m或0.4度的图像。对于所有序列,使用Libviso2库[20]对相机位姿进行估计,是一个传统VO方法(在DPC-Net也使用了)。我们对自运动估计分别使用单目(libviso2-m)、双目(libviso2-s)
使用Adam优化器【28】(minibatch为32)训练DPC网络30轮(epochs),双目和单目的初始学习率分别为1*10-3/5*10-5,对于单目和双目分别每隔10轮、4轮下降0.5因子。对所有的全连接层使用dropout(p=0.5),权重衰减为,其他参数不变。我们的损失函数(公式7)中,参数
,使权重Mask的回归值接近于1,逐渐增大的权重会导致权重Mask的输出平均减少,而不是只减少不可靠的像素权重。为了突出损失函数中的大旋转,参数设为
。
训练中最难的是选择训练周期来达到好的效果,由于没有使用真实值训练,网络学习的是最小化光度重建损失,而不是局部损失。虽然,大部分训练能产生高准确度的位姿矫正结果,但是有的时候会产生低损失但却效果差的矫正结果。为了解决这中现象,提出了两个标准来确定准确结果。
- 梯度标准:首先,只对梯度大的值(这部分的光度差对于位姿校正的误差高度敏感)进行光度差计算。为了计算梯度损失,通过过滤掉小于固定的阈值
,生成一个gradient mask:
从经验上讲,我们发现梯度损失比公式(7)损失对识别性能更高的模型更为有效。
- 闭环准则:第二,我们可以用验证数据集的闭环数量与测试集中位姿矫正的准确度进行联系,如图3。为了验证集的闭环,使用预定义的阈值并保存与验证集最接近的结果。我们强调,尽管此方法确实要求验证集具有闭环(通过选择包含同一条道路的00和05KITTI验证集来确保),但它对测试序列没有任何限制。所以,只要验证集中经过多次同一路径,这个准则就成立
5.结果
评价指标:mean absolute trajectory error (m-ATE)和the mean segment error (mSE).按照KITTI odometry其他方法,在长度为计算平均差。
单目结果:使用libviso2-m估计和比较其他SOTA方法,使用ground-truth对估计的相对位姿进行尺度变化后进行古刹计算。Table1是sequence09/10的结果。图4证明了矫正的准确性