基于图像对齐和不确定估计的深度视觉里程计

2022-11-20 13:57闫子飞
计算机工程与应用 2022年22期
关键词:位姿光度不确定性

秦 超,闫子飞

哈尔滨工业大学 建筑学院 媒体技术与艺术系,互动媒体设计与装备服务创新文化和旅游部重点实验室,哈尔滨 150001

同时定位与建图(simultaneous localization and mapping,SLAM)技术是计算机视觉的一个重要分支领域[1],其中结合深度学习方法直接估计场景深度和视觉里程计正越来越受到广泛关注。

较早的研究[2-5]通过特征匹配的方法来估计相机之间的运动,计算成本很高。LSD-SLAM[6]提出了一种通过基于李代数的直接法,能够实时计算相机的位姿并且构建出全局的半稠密地图。ORB-SLAM[7]提出一种基于关键帧提取的单目SLAM算法,使用多线程进行特征匹配和全局优化,是一个较为完整的SLAM系统。通过结合深度学习的方法,Zhou等[8]提出一种建立在单目相机的无监督生成框架直接估计图像深度和相机位姿。在此基础上,Vijayanarasimhan等[9]提出了添加额外的模块,学习场景中的多个物体的刚体运动以减少估计的误差。Bian等[10]提出了一种尺度一致性的约束方法,解决单目视觉尺度不一致的问题。而Yin等[11]则通过添加额外的光流,估计车辆、行人的运动,与图片深度估计和相机位姿估计协同工作。更进一步,Zou等[12]通过对画面进行分割,在运动部分计算光流、静止的背景区域计算相机变换,分别计算两部分的光度误差,从而得到最终的损失函数。此外,Godard等[13]提出一种基于双目图像左右视图的一致性约束来得到深度估计,达到了主流的深度估计水平。但是这些方法往往需要更多的监督信息,不但获取的成本更高,也在一定程度上加重了训练的负担,并且使得估计结果对训练集的依赖较高。

这些无监督的方法主要依靠光度误差作为约束,而光度误差又是建立在灰度不变假设之上,因此在违背该假设的区域产生的估计结果误差较大。为了处理这些区域,Yang等[14]提出一种基于贝叶斯概率的不确定性估计方法,除了计算每个像素点光度误差,还同时估计这个点光度误差的不确定性方差,在一定程度上对不满足灰度不变假设的区域进行弥补。但是他们的不确定性估计设计太过简单,而且只能在物体边缘处得到较好的不确定性估计结果,难以对整片违背灰度不变假设的区域进行处理。

本文提出了一种非监督的深度视觉里程计方法AUDVO,以端到端的方式对深度估计网络和相机位姿估计网络进行优化,并且通过图像对齐操作和不确定性估计提高了网络的鲁棒性。本文主要贡献如下:

(1)通过图像对齐网络对相邻图像之间由于相机曝光引起的图像整体亮度变化进行处理,并且确定全局的运动尺度来对相机位姿的估计结果进行约束,可以在一定程度上解决单目相机尺度不一致的问题。

(2)通过不确定性网络估计得到光度误差的方差,减少了运动物体和被遮挡区域对估计结果的影响。为了得到更具鲁棒性的深度估计和不确定性估计结果,结合卡尔曼滤波的原理,将输入图像水平翻转后得到对应的深度估计和不确定性估计结果,然后再次翻转,并与正常计算的结果进行融合得到最终的输出。

(3)在公共数据集KITTI上进行大量实验,证明了本文方法的有效性。对于图像深度的估计结果来说,可以保证物体边缘处轮廓完整,深度估计准确清晰;而对于相机位姿的估计结果来说,也达到了传统单目VO的水准。

1 整体算法框架

传统的视觉里程计求解依靠特征点的提取和匹配来实现,各个模块之间高度耦合,算法复杂度高[15]。而在本文的实现中,直接通过神经网络估计场景深度和相机位姿,并且使用图像对齐和不确定性预测对整体框架进行优化,保证了灰度不变假设的成立,不但降低了算法的复杂度,还提升了估计的精度。

1.1 基于不确定估计的图像深度估计

通过非监督学习的方式进行估计时需要计算光度误差对网络进行优化,其基本假设是同一点在不同图像中的灰度是一致的。但是在实际情况中,物体运动不可避免,这就会产生离散的深度值,在对远距离的物体进行深度估计时这种情况尤其明显[16]。并且物体的运动还会形成遮挡,使得估计得到的深度图中这部分出现空洞。一些现有的方法[11-12,17-18]通过分割运动物体和静态背景以及加入光流估计的方法,在一定程度上减少了运动对灰度一致性假设的影响。此外,由于光照变化在小尺度深度图上估计产生的空洞区域会在训练过程中因为插值操作被进一步放大,使得最终的估计结果较差。光度误差的计算公式如下:

其中,p表示像素坐标,It和^分别表示t时刻和s时刻的图像。这里的损失是绝对值误差,在已知从t时刻到s时刻相机的运动下,有:

其中,K表示相机的内参,Dt是估计得到的t时刻对应图片的深度图,Tt→s表示相机运动的变换矩阵,pt和ps分别是t时刻和s时刻对应图片的像素点。由于像素点并不是连续的,对于式(2)直接计算出的ps值,还需要通过对最近邻的4个像素点进行插值得到近似的

对于场景中违背灰度不变假设的区域,Kendall等[19]提出可以将这些区域视为观测噪声,并且在计算损失函数时消除这些噪声带来的影响,在假设噪声是Laplacian分布的前提下,深度预测的最大似然可以表示如下:

其中,y′表示预测的深度值,y表示真实值,Σ表示误差项的方差。在光度误差的计算中,y是目标图像中的像素强度,Σ是通过自监督的方式学习得到的。通过添加不确定估计,式(1)的误差函数改写为:

在深度图中,纹理缺乏区域会出现空洞以及物体的边缘模糊等问题。为此,Yang等[20]提出使用分层技术,输出不同精度的结果来解决这个问题,这也证明了更高的图像分辨率会提高深度估计的准确性。还有一些工作[21]提出利用反卷积网络和双边插值的方法建立深度图像金字塔以得到更高分辨率的深度图。但是简单的插值操作效果并不好,还会使得在小尺度深度图中预测得到的空洞区域被进一步放大。为此本文提出添加超分辨网络对深度图像金字塔进行上采样,得到质量更佳的高分辨率深度图并且计算不同尺度下的光度误差之和。

1.2 基于图像对齐的相机位姿估计

场景中光照的变化使得实际情况中不同图像之间并不严格满足灰度不变假设,因此在计算光度误差前,先将目标图像和源图像进行亮度对齐,这可以通过a和b两个参数来实现,计算公式如下:

其中,参数a和b是通过自监督的方式从网络中学习得到的。使用经过投影变换后的源图像和经过亮度对齐后的目标图像计算光度误差。对齐后的图像表示为Ias,bs t=at→sIt+bt→s,将式(4)表示的误差函数改写为:

单目视觉还存在尺度不确定性的问题,通过位姿估计网络得到的相机运动Tt→s只是局部VO,缺乏全局一致性。为此,通过反向合成的形式预先将源图像对齐到目标图像上,得到一个预估的全局运动尺度,由于每段序列在估计的时候都会预先经过这层反向合成层进行对齐,可以确保不同序列估计得到的相机运动是尺度一致的。

同样,在尺度上进行的图像对齐操作也不需要监督信息,位姿网络会在估计的时候学习到一个相机运动的全局尺度,并且通过光度误差约束对深度估计网络和相机位姿估计网络进行优化。

1.3 深度视觉里程计的网络结构

整体的网络结构如图1所示。在深度估计模块,主体部分是基于DispNet[22]的编-解码器结构,通过跳跃连接和上采样得到多尺度的预测结果。深度估计网络的输入是单张图片,在经过对称的7层卷积和7层上采样网络后得到4个不同尺度的深度图。网络最后一层通过sigmoid进行激活以限制输出范围,即假设卷积层输出x,最终输出1/(γ*sigmoid(x)+β),其中γ和β的值分别是10和0.01。

在上采样部分,使用的是ESPCN[23]超分辨率网络,将输入图片先后通过4层卷积和1层像素重置(pixel shuffle)并且使用sigmoid激活得到两倍分辨率的深度特征。

相机位姿估计模块的骨干部分是PoseNet[24],输入的是连续的几帧图片,经过7层卷积后接1×1的卷积层输出6自由度的相机位姿。图像对齐模块是嵌入位姿估计网络当中的,在进行亮度对齐时,共享位姿估计网络的前5层卷积层的参数,然后经过两层卷积得到两个亮度对齐参数a和b。而在进行尺度对齐时,使用和Jaderberg[25]相同的结构,先让源图像通过STN层进行仿射变换以确定全局的运动尺度,然后将目标图像和源图像联结送入位姿估计网络。

为了去除动态区域对结果的影响,通过一个不确定性估计网络表示光度误差的方差。不确定性估计网络和深度估计网络共享前5层卷积层参数,然后采用和深度网络类似的上采样操作,通过反卷积层得到不同尺度的不确定性估计。

1.4 损失函数

最终的损失函数是由重建误差和正则化误差构成,所有误差都是在4个尺度下分别计算然后求平均值,表示为:

其中,重建误差的计算表示为:

因为在式(6)中对数的计算有可能让该项损失为负值,影响训练甚至无法收敛,所以通过网络直接学习表示不确定的σ2,这样原始的光度误差的权重就是1/exp()σ2。

正则化误差是为了提高整体的鲁棒性,保证估计的深度和位姿准确,表示为:

Lsmooth是平滑损失项,通过计算图像的拉普拉斯算子对估计得到的深度图进行限制,表示为:

其中,∇2表示对深度图中的像素点求二阶微分。

Lab是为了限制亮度对齐参数引入的正则化项,表示为:

2 实验结果

2.1 实验环境和训练参数

实验在KITTI数据集上进行,通过pytorch框架实现,从深度估计和相机位姿估计两方面对结果进行评测,同时通过消融实验对各个模块的有效性进行验证。使用的硬件设备为Intel®Xeon®W-2123 CPU@3.60 GHz,显卡是12 GB显存的NVIDIA GeForce RTX 2080 Ti。

在实际的训练过程中,选取连续的5张图片序列输入位姿估计网络,指定最中间的图片为目标图像,其余相邻的图片作为源图像。深度估计网络输入的只有目标图像,输出的是对应的逆深度图,按照Poggi等[26]的想法,在进行深度图估计的时候,除了正常的深度图,还会计算一个水平翻转后的图像对应的深度图,然后将深度图翻转回来与正常得到的深度图进行融合。如果正常得到的估计和不确定性为d1和σ1,翻转后的估计结果是d2和σ2,根据卡尔曼滤波的原理,融合后的不确定性和方差表示为(σ2d1+σ1d2)/(σ1+σ2)和σ1σ2/(σ1+σ2)。训练过程使用Adam[27]优化器加速收敛,参数设定β1为0.9,β2为0.999。初始学习率为2E-4,mini-batch的大小设置为4,动量(momentum)设为0.9,权值衰减5E-4,训练时的图片分辨率为416×128。

2.2 数据集和评估指标

实验在KITTI数据集进行,预先将图片分辨率处理成416×128。和Eigen等[28]的设置一样,首先去除相邻两帧之间没有运动的图片,然后从数据集中分别划分出40 378、3 994张图像序列和697张图片作为训练集、验证集和测试集用于评价深度图估计。评价的指标包括:绝对相对误差(abs_rel)、平方相对误差(sq_rel)、均方根误差(rmse)和对数平方根误差(log_rmse),这些数值越小表示结果越好;预测准确度小于阈值1.25、1.252、1.253的像素点占总像素的百分比,这些数值越大结果越好。而评估相机位姿估计性能使用的是KITTI odometry中的序列09和序列10,通过绝对轨迹精度(ate)比较估计的相机运动轨迹和真值之间的差异,数值越小表示结果越好。

2.3 图像深度估计验证

为了验证深度估计的准确度,和其他基于深度学习的估计方法进行对比。其中Sfmlearner[8]和本文的工作最相似,也是最早提出通过深度网络和位姿网络共同优化来提升两个网络性能的方法。深度估计的对比结果如表1所示,可以看出和传统的单目方法相比,各项指标上的表现都更优,但是整体表现不如一些网络设计更复杂的方法。如Godard等[13]通过左右视图的真实位姿信息作为监督信号,提升了估计的准确性;而GeoNet[11]、DF-Net[12]和CC[17]则是利用光流网络处理场景中的运动物体,减少深度估计时这些区域产生的影响。图2更直观展示了不确定性网络的可视化结果,其中高亮区域表示估计的不确定性较高。可以看出场景中的车辆、树木等相较于房屋有更高的不确定性。而且在强曝光和大面积阴影区域的不确定性也较其他部分更高,这也说明了为什么通过计算光流和残差估计的不确定性可以有效提高估计的准确度。

表1 KITTI数据集上的深度图估计对比结果Table 1 Comparison of depth estimation on KITTI dataset

2.4 相机位姿估计验证

在相机位姿估计方面,除了基于深度学习的方法,还和传统的ORB-SLAM和DSO方法进行对比,这两者都是非常成熟的SLAM框架,可以适用于单目、双目、深度摄像头等多种条件,被广泛移植到了许多的实际项目中。相机位姿估计的对比结果如表2所示,其中ORBSLAM的full和short分别表示在整段视频和选取较短的序列上运行的结果。

表2 KITTI odometry上的绝对轨迹误差对比结果Table 2 Comparison of absolute trajectory errors on KITTI odometry

从对比结果可以看出,提出的AUDVO超越了传统的估计方法和仅依靠深度估计网络对位姿估计进行优化的方法,并且达到了与GeoNet[11]、DF-Net[12]和CC[17]这些通过光流估计物体运动的方法相近的水平,证明了AUDVO对于处理场景中的运动物体和被遮挡的区域有相当的鲁棒性。

图3展示了估计得到的相机轨迹的可视化结果,其中蓝色曲线是数据集提供的真实运动轨迹,可以看出相较于其他方法,AUDVO在序列09上更加接近真实的轨迹并且没有出现明显的轨迹漂移,这验证了图像对齐网络的有效性,可以捕获运动的全局尺度并且减少误差的积累。但是在序列10上的表现就显得稍微逊色一些,虽然还是优于传统的ORB-SLAM方法和基于深度学习的Sfmlearner方法,但却不如添加了光流估计的DF-Net更加接近真实值。

2.5 消融实验

为了证明本文提出的方法中各个模块的有效性,确认其对于最终结果的贡献,在保证其他部分一致的情况下从深度估计和位姿估计两方面设计消融实验。基准线(baseline)表示DepthNet和PoseNet构成的骨干网络,通过双线性插值进行上采样操作。在此基础上分别添加超分网络(SR)、图像亮度对齐(IA-B)、图像尺度对齐(IA-S)和不确定性估计网络(U-CNN)来验证各部分的有效性。

表3是深度估计的消融实验结果,通过对比可以看出添加的不同模块都提高了估计的准确度。其中使用超分网络代替简单的双线性插值后,估计的准确度有了显著提高(对比B和B+SR),而相比之下图像对齐模块的提升效果就没有那么明显,而且通过比较B+SR、B+SR+IA-B和B+SR+IA-S可以发现,在进行图像对齐的时候,亮度对齐模块比尺度对齐模块更能提高深度估计的准确度,这说明了相较于相机运动的细小偏差,相邻图像之间的亮度变化更能影响对于深度的估计。这也再次验证了灰度不变假设对于计算光度误差的重要性。为了处理运动物体和被遮挡区域这些明显违背灰度不变假设的部分,通过不确定性网络对每个像素点深度估计的不确定性进行建模,并且将图像水平翻转后预测得到的深度估计和正常得到的估计融合以进一步提高整体的鲁棒性。通过对比实验B+SR+IA-B+IA-S和B+SR+IA-B+IA-S+U-CNN的结果,证明了这样的方法大幅提升了网络的预测能力。

表3 深度估计的消融实验结果Table 3 Ablation results of depth estimation

图4更加直观展示不同模块对深度估计的影响。第一行是KITTI数据集的原始数据,第二行是基准线(B)的估计结果,第三行是基准线加上超分网络(B+SR)的结果,第四行和最后一行分别是在第三行的基础上添加了图像对齐模块(B+SR+IA-B+IA-S)和完整的AUDVO的估计结果。从结果中可以看出,添加超分网络后深度图中的更多边缘细节部分被保留下来,车辆、树木、电线杆等物体的轮廓也更加清晰;而通过加入图像对齐模块,深度图中的细节变得更加丰富,说明网络可以很好区分较远处的物体边缘而不是将其视为一个整体;不确定性网络的加入也在一定程度上提高了对于阴影区域和更远处物体的区分能力,并且保证了物体轮廓的完整性。

表4是位姿估计的消融实验结果,展示了缺少不同模块后在序列09和序列10上的绝对轨迹误差结果。可以看出在缺少图像对齐模块之后估计的结果下降明显,这是因为图像对齐模块对不满足灰度一致性假设的区域进行了修正,使得估计的误差更小,而且通过估计全局的运动尺度作为约束,有效地限制了误差的累积。相比之下,缺少不确定性网络和超分网络对于位姿估计准确度的影响就小了很多,这说明了即使在局部物体边缘深度估计不够清晰甚至有较大的错误,只要在全局这种预测能力是保持一致的,就不会对相机位姿的估计产生较大的影响。

表4 位姿估计的消融实验结果Table 4 Ablation results of pose estimation

3 结束语

本文提出了一种基于深度学习的单目视觉里程计方法,称为AUDVO。可以通过非监督的方法估计出每帧图像的深度和其对应的相机位姿。考虑到实际场景的复杂情况对于计算光度误差的影响,通过添加图像对齐模块来处理图像之间的亮度和尺度的不一致,对于运动物体、场景受遮挡部分以及天空、地面等大面积纹理缺失部分,通过不确定网络估计处理这部分像素点,提高了深度和相机位姿估计的准确度,使结果更加具有鲁棒性。在KITTI数据集上的实验证明了AUDVO的有效性,不但可以很好预测物体边缘部分的深度值,在估计相机位姿的时候也超过了传统的DSO方法。但是单目视觉始终存在尺度模糊的问题,从实验结果看来,对于远处物体之间的距离估计还是存在较大的误差。在之后的研究中,还需要结合多种传感器或者语义分析来确认真实的距离和进行复杂的定位,并且通过多任务学习将传统SLAM方法和深度学习的思想结合,进一步提高算法的性能。

猜你喜欢
位姿光度不确定性
法律的两种不确定性
一种基于SOM神经网络中药材分类识别系统
考虑误差不确定性的航空安全预测新方法
基于位置依赖的密集融合的6D位姿估计方法
全球不确定性的经济后果
曲柄摇杆机构的动力学仿真
英镑或继续面临不确定性风险
优化ORB 特征的视觉SLAM
乘用车后回复反射器光度性能试验研究
皎皎月光