1. 引言
三维场景信息在自动驾驶[1]、机器人[2]和增强现实[3]等领域具有重要意义。然而,由于深度传感器成本较高,利用神经网络从图像中估计深度图像成为一种有效的解决方案。早期的深度估计模型需要真实的深度标签进行训练,但收集大量准确深度信息的数据既昂贵又费力。为了解决这一问题,Godard [4]等人利用立体图像对单目视频的几何信息,通过最小化源图像与目标图像之间的重投影误差来优化模型。这种方法仅需相邻帧即可进行模型训练,具有巨大的实际应用潜力。因此,本文主要研究单目视频的自监督深度估计。
在训练过程中,自监督单目深度估计模型包括深度网络和姿态网络。深度网络用于预测深度图,姿态网络用于估计相机的位姿。在估计出深度图和位姿后,利用n点透视法[5]重建图像并计算光度损失以更新神经网络。这些方法在室外数据集[6]-[8]上表现出色,但单目深度估计的训练面临着动态场景的挑战。
自监督深度估计模型是基于静态环境构建的,这在大多数现实世界场景中并不成立。动态物体将违反自监督深度估计模型的假设,并导致重投影不匹配问题。动态物体区域中的深度损失值无法反映真实的损失值,这将误导模型训练。静态场景的假设在KITTI [9]等数据集中是有效的,在这些数据集中,建筑物、停放的车辆、树木等静态物体主导了场景,使神经网络能够通过静态区域学习运动物体的深度。然而,当使用具有更多运动物体的数据集时,如nuScenes [10]和DDAD [11],相机的位姿估计会受到影响,导致估计的深度图精度降低。最近的工作[12] [13]试图优化动态对象区域的深度预测,并取得了显著的改进,但它们仍然存在几个缺点。它们仅在损失函数级别解决了失配问题,仍然无法通过动态物体的时间帧来推理几何约束,这限制了其准确性潜力,并且忽略了刚性物体的运动一致性。此外,静态区域应该没有运动,这种零运动约束可以促进运动物体的运动估计。
本文提出了一种适用于动态场景的自监督单目深度估计模型。为了处理动态场景,本文引入分割网络将动态物体分割出来,形成一个掩码。然后,利用光流网络估计相邻两帧图像的运动。通过结合动态物体掩码和两帧图像的运动信息,重构源图像,并用该重构源图像与深度重构图像进行相互监督。此外,为了增强光流网络对运动物体的运动估计能力,本文提出了一种动态物体重构损失。然后,重构的目标图像通过共享权重的深度估计网络生成深度图,并用重构目标图像的深度图与目标图像的深度图进行相互监督。本文的方法重点在于损失函数的校正和相应的解耦训练过程,因此几乎可以应用于任何自监督单目深度估计模型。
2. 研究方向
2.1. 整体架构
为了解决动态物体在传统自监督单目深度估计中估计不准确的问题,本文提出了一种自监督训练模型,整体框架如图1所示。本文首先使用Depth Net和Pose Net得到深度和姿态先验信息,通过这两个先验信息重构目标图像。由于目标图像中存在深度估计不准确的动态物体,因此本文引入Segmentation Net从目标图像中分割出动态物体掩码。然后将目标图像和源图像输入Flow Net得到两帧之间的光流,由于光流能够直接的表示两帧之间的物体运动,因此本文利用动态物体掩码和光流还原动态物体的原始位置,还原原始位置的图像本文称其为重构源图像,本文用重构源图像监督重构目标图像以此来矫正动态物体的图像信息。最后为了深度信息的一致性,本文把重构源图像输入共享权重的Depth Net中得到重构源图像的深度图,并且用重构源图像的深度图和先验深度图相互监督。在本文的模型中提出了两个损失以保证监督的有效性。
Figure 1. The overview of model framework
图1. 模型框架总览
2.2. 先验知识
为了便于介绍,本文在本小节介绍一下自监督单目深度估计的基础知识。自监督单目深度估计是基于对极几何的原理构建的。当训练深度估计模型时,需要先找到相邻的两帧图片,然后得到两帧图片的相对位姿。有了深度信息和相对位姿之后就能够重构图像,用图像中一个点为例,源图像上的点
可由目标图像上的点
通过以下公式得到。
(1)
公式中的
是Depth Net估计的深度,
以及
分别是目标图像到源图像的旋转矩阵和平移矩阵,
是相机内参矩阵,
是相机内参矩阵的逆矩阵。
从对极几何的坐标转换公式可以看出,传统的自监督单目深度估计模型只考虑了相邻两帧之间的相机变换,当图像中有动态物体时如图2所示。目标图像上一点经过Depth Net后的深度为
,此深度经过对极几何得到重投影到源图像位置上,此时这一个点的深度为
,但是由于汽车时运动的,上一帧汽车的位置应该在此位置之前,即真实深度应该为
,因此因为汽车的自我运动导致传统的自监督单目深度估计方法会出现
的深度误差。本文主要就是解决此问题。
Figure 2. Schematic diagram of depth estimation error for dynamic objects
图2. 动态物体深度错误估计原理图
2.3. 运动物体解耦
由于传统的自监督单目深度估计模型需要使用Depth Net得到的深度图
来重构目标图像,但是因为传统的监督方式在动态物体区域会把错误的深度也认定为正确的,为了解决动态物体导致的深度估计不准确问题,本文采用动态物体与静态场景分开处理的方法。首先利用COCO数据集上预训练好的分割网络把目标图像
中的动态物体分割出来得到动态物体掩码
。之后为了得到目标图像到源图像的自我运动,把这两帧图片输入Flow Net中得到目标图像到源图像的光流
。使用动态物体掩码和光流能够用不同于公式1的方法重构源图像以此解决用不准确深度图重构图像的情况。
(2)
公式中
是源图像上的点,
是重构源图像上动态物体的新位置,
表示逐点相乘。
由于在传统的自监督单目深度估计当中没有重构源图像这个操作,为了能够很好的利用重构源图像本文提出了额外的两个损失来促进网络的训练。
在动态区域本文使用了光流来进行重构,因为光流对于每个点的运动估计各不相同,然而在现实生活当中大多数的动态物体都是刚性的,因此在训练过程当中只需要考虑平移运动。
(3)
公式中
,
分别为
方向和
方向的导数,
表示动态区域光流的平均值。
传统自监督单目深度模型对于静态区域的良好性能是无法否认的,因此在静态区域直接使用
损失进行监督。
(4)
公式中的
表示取动态区域相反的区域。
因此动态物体重构损失为
(5)
公式中
和
为超参数,经过实验调整最后的值分别为0.65和0.35。
2.4. 深度一致损失
如图1右侧所示,把目标图像
和重构源图像
输入共享权重的Depth Net中分别得到了相应的深度图并且让他们相互监督,由于本文的动态物体解耦只重构了源图像的动态区域,因此本文提出了动态区域一致性损失
来增强
和
的动态区域一致性,并且只有在不一致性大于阈值后才会激活。
(6)
(7)
在运动物体解耦中,为了重构源图像
,本文直接使用光流对动态区域进行位移,这会导致在源图像
原来的动态区域出现部分丢失。为了解决这一个问题本文同时重构了目标图像
的前后帧
,在前一帧丢失的部分通常在都会出现在后一帧当中,本文应用此现象提出了静态区域缺失损失
。
(8)
公式中
表示目标图像
的前后帧
。
最后深度一致性损失
是由动态区域一致性损失
和静态区域缺失损失
相加得到。
(9)
2.5. 模型损失
与依赖于真实标签监督的单目深度估计方法不同,自监督单目深度估计方法主要涉及图像重建[14],其中目标图像用于监督重建目标图像。除了图像重建损失外,还需利用边缘感知平滑度损失[15]来获得深度图的合理平滑度。
图像重构损失:首先使用源图像重建目标图像。
(10)
公式中表示
重构过程,是
估计的相机位姿。在获得重构目标图像之后,使用结构相似性指数(SSIM)和
损失测量重构目标图像与目标图像的距离。
(11)
公式中为超参数,设置为0.85。
边沿平滑损失:为了防止估计的深度图过于平滑和粗糙,本文采用了边沿平滑损失。
(12)
公式中
,
分别是
和
方向上的导数,
表示平均归一化逆深度。
总损失:本文的模型是一个多尺度编码器–解码器结构,从三个尺度共同计算损失。
(13)
公式中
表示图像的尺度,
是超参数由实验最终设置为1/10³。
3. 实验结果与分析
3.1. 数据集与评价指标
nuScenes:来自Motional的nuScenes [10]数据集是一个大规模的自动驾驶数据集,提供来自6个摄像头、1个激光雷达、5个雷达、GPS和IMU的全面传感器数据。它包含140万张图像、390K激光雷达扫描、140万次雷达扫描和140万个物体边界框。提供了23个类别的2Hz精确3D注释以及对象属性。这些数据涵盖了波士顿和新加坡的不同地点,跨越了不同的时间和天气条件。
KITTI:KITTI和TTIC创建的KITTI [9]数据集是自动驾驶的基准。它以现实世界的城市、农村和高速公路场景为特色,每张图像最多有15辆汽车和30名行人。该数据集包括389个立体和光流对、39.2公里的视觉里程计、200K+3D注释图像(10赫兹)、全景图像、激光雷达数据和导航信息。深度预测通常在[0, 80]米以内。
DDAD:TRI提供的DDAD [11]数据集支持自动驾驶的密集深度估计研究。它包含来自跨大陆自动驾驶车队的单目视频和激光雷达生成的深度数据。场景覆盖美国和日本城市,支持长距离(高达250米)深度估计。它有助于自动驾驶的精确障碍物检测和场景理解。
评价指标:为了定量地评价深度估计模型,本文使用以下常用的度量作为评价指标:绝对相对误差(Absolute Relative Error, Abs Rel)、平方相对误差(Square Relative Error, Sq Rel)、均方根误差(Root Mean Square Error, RMSE)、均方根对数误差(Root Mean Square Logarithmic Error, RMSElog)、
,
,
。
(14)
(15)
(16)
(17)
(18)
这里
是像素点
的深度,
是真实标签,
表示真实标签点的数量,
表示阈值。
3.2. 实验细节
该方法在PyTorch中实现,并在两块NVIDIA 3090 GPU上进行训练。Depth Net初始学习率为
,在2个迭代周期后降至
,而其他部分的初始学习率都设置为
。本文使用带有线性调度器的AdamW [16]优化器来衰减学习率,模型总共训练了25个epoch。采用图像翻转和抖动的数据增强方法来增强模型的泛化能力。本模型的基础Depth Net使用的是深度估计性能优秀且网络轻量的Lite-Mono [6],Flow Net使用的是RAFT [17],Pose Net则是用了基本的Resnet18。
Table 1. Experimental results on the nuScenes dataset. “OM” denotes whether moving objects are considered, and “-” indicates that the data is not provided in the paper
表1. nuScenes数据集上的实验结果。“OM”表示是否考虑运动物体,“-”表示文章中没有提供该数据
方法 |
OM |
Abs Rel |
Sq Rel |
RMSE |
RMSElog |
ξ < 1.25↑ |
ξ < 1.25²↑ |
ξ < 1.25³↑ |
Monodepth2 [18] |
|
0.425 |
16.592 |
10.040 |
0.402 |
0.723 |
0.827 |
0.887 |
Packnet [19] |
|
0.309 |
2.891 |
7.994 |
- |
0.547 |
0.796 |
0.899 |
FSM [20] |
|
0.334 |
2.845 |
7.786 |
- |
0.580 |
0.761 |
0.894 |
VoluFusion [21] |
|
0.271 |
- |
7.391 |
- |
0.726 |
- |
- |
zeroDepth [11] |
|
0.236 |
- |
7.054 |
- |
0.747 |
- |
- |
Lite-Mono [6] |
|
0.491 |
15.578 |
9.807 |
0.449 |
0.720 |
0.831 |
0.879 |
SurroundDepth [7] |
|
0.245 |
3.030 |
6.835 |
- |
0.719 |
0.878 |
0.935 |
ZoeDepth [22] |
|
0.504 |
- |
7.717 |
- |
0.255 |
- |
- |
WSGD [23] |
|
0.176 |
1.603 |
6.036 |
0.245 |
0.750 |
0.912 |
0.963 |
MonoProb [24] |
|
0.219 |
- |
9.559 |
- |
0.684 |
- |
- |
Dynamo (MD2) [8] |
√ |
0.193 |
2.285 |
7.357 |
0.287 |
0.765 |
0.885 |
0.935 |
Dynamo (LM) [8] |
√ |
0.179 |
2.118 |
7.050 |
0.271 |
0.787 |
0.896 |
0.940 |
Ours |
√ |
0.152 |
1.627 |
7.083 |
0.252 |
0.792 |
0.916 |
0.965 |
Figure 3. Comparison of visualization results on the nuScenes dataset
图3. nuScenes数据集上可视化比较结果
3.3. 对比与分析
为了验证模型的先进性,本文在两个公共数据集上训练和测试方法,并且在DDAD数据集上零样本验证模型的泛化性。
nuScenes:nuScenes是一个具有挑战性的数据集,其中包含了大量的动态对象,并且还跨越了不同的天气和时间。表1和图3分别显示了模型在nuScense数据集上定量和定性结果。表中可以发现模型在性能上远远优于其他现有的方法。并且因为上述的动态物体深度估计不准确的问题,Monodepth2在性能上遭到灾难性的打击。他们只采用传统自监督模型来监督自己的网络。然而这种方法实际上并没有解决动态区域估计不准确的问题。相比之下,通过本文的方法网络性能在所有指标上都有明显的提升。
KITTI:本文也在KITTI这个大家广泛使用的公开数据集中进行了训练和测试。实验结果如表2和图4所示。实验表明本模型难以在KITTI数据集的动态区域受益,这是因为KITTI数据集中的大多数动态物体在前后两帧中没有移动。然而动态物体解耦会默认人,车这一类常见的动态物体时刻都在运动,当数据集中大量出现这一类物体时,会给模型带来一定的噪声进而影响模型的最终性能。虽然运动物体解耦模块会对静态区域造成一定的影响。但是对于模型几乎是可以接受的。
Table 2. Experimental results on the KITTI dataset. “OM” denotes whether moving objects are considered, and “-” indicates that the data is not provided in the paper
表2. KITTI数据集上的实验结果。“OM”表示是否考虑运动物体,“-”表示文章中没有提供该数据
方法 |
OM |
Abs Rel |
Sq Rel |
RMSE |
RMSElog |
ξ < 1.25↑ |
ξ < 1.252↑ |
ξ < 1.253↑ |
Monodepth2 [18] |
|
0.115 |
0.903 |
4.863 |
0.190 |
0.877 |
0.959 |
0.981 |
Packnet [19] |
|
0.111 |
0.785 |
4.601 |
0.189 |
0.878 |
0.960 |
0.982 |
Lite-mono [6] |
|
0.103 |
0.798 |
4.514 |
0.179 |
0.897 |
0.964 |
0.983 |
Geonet [25] |
√ |
0.155 |
1.296 |
5.857 |
0.233 |
0.793 |
0.931 |
0.973 |
TrianFlow [26] |
√ |
0.113 |
0.704 |
4.581 |
0.184 |
0.871 |
0.961 |
0.984 |
Dynamic [27] |
√ |
0.130 |
0.950 |
5.138 |
0.209 |
0.843 |
0.948 |
0.978 |
Insta-DM [28] |
√ |
0.112 |
0.777 |
4.772 |
0.191 |
0.872 |
0.959 |
0.982 |
Dynamo (MD2) [8] |
√ |
0.120 |
0.864 |
4.850 |
0.195 |
0.858 |
0.956 |
0.982 |
Dynamo (LM) [8] |
√ |
0.112 |
0.785 |
4.505 |
0.166 |
0.873 |
0.959 |
0.984 |
Ours |
√ |
0.109 |
0.795 |
4.605 |
0.186 |
0.883 |
0.960 |
0.983 |
Figure 4. Comparison of visualization results on the KITTI dataset
图4. KITTI数据集上可视化比较结果
DDAD:为了验证模型的泛化能力,本文拿nuScenes数据集上训练的网络直接在DDAD数据集上测试。实验结果如表3和图5所示。尽管模型是零样本在DDAD数据集上测试,但模型性能上也优于大多数非零样本模型。这归功于本文在训练之前对训练数据的数据增强,使得模型在相似环境中仍然能够拥有强大的性能。
Table 3. Experimental results on the DDAD dataset. “OM” denotes whether moving objects are considered, and “-” indicates that the data is not provided in the paper
表3. DDAD数据集上的实验结果。“OM”表示是否考虑运动物体,“-”表示文章中没有提供该数据
方法 |
OM |
Abs Rel |
Sq Rel |
RMSE |
RMSElog |
ξ < 1.25↑ |
ξ < 1.252↑ |
ξ < 1.253↑ |
Monodepth2 [18] |
|
0.239 |
12.547 |
18.392 |
0.316 |
0.752 |
0.899 |
0.949 |
Packnet [19] |
|
0.182 |
7.945 |
15.021 |
0.259 |
0.828 |
0.925 |
0.961 |
zeroDepth [11] |
|
0.156 |
- |
10.678 |
- |
0.814 |
- |
- |
Lite-Mono [6] |
|
0.199 |
10.851 |
15.151 |
0.261 |
0.802 |
0.919 |
0.959 |
SurroundDepth [7] |
|
0.200 |
3.392 |
12.270 |
- |
0.740 |
0.894 |
0.947 |
ZoeDepth [22] |
|
0.647 |
- |
16.320 |
- |
0.265 |
- |
- |
Ours |
√ |
0.162 |
3.592 |
14.083 |
0.252 |
0.798 |
0.918 |
0.965 |
Figure 5. Comparison of visualization results on the DDAD dataset
图5. DDAD数据集上可视化比较结果
3.4. 消融实验
为了全面评估本文提出的模块的有效性,本文在具有挑战性的nuScenes数据集上对动态物体解耦(Dynamic Object Disentanglement, DOD)、动态物体重构损失(Dynamic Object Reconstruction Loss, DRL)以及深度一致损失(Depth Consistency Loss, DCL)三个关键部分进行了消融实验。实验的基线模型采用的是Lite-Mono模型,具体结果如表4所示。实验表明,当引入动态物体解耦模块时,深度估计性能已显著提升。进一步地,加入动态区域一致性损失和深度一致损失后,性能得到了进一步的改善。因此,可以得出结论,这三个模块对模型的性能提升均有显著贡献。
Table 4. Results of ablation experiment
表4. 消融实验结果
方法 |
Abs Rel |
Sq Rel |
RMSE |
RMSElog |
ξ < 1.25↑ |
ξ < 1.252↑ |
ξ < 1.253↑ |
Baseline |
0.425 |
16.267 |
10.392 |
0.416 |
0.722 |
0.839 |
0.889 |
Baseline + DOD |
0.202 |
2.944 |
7.549 |
0.274 |
0.769 |
0.911 |
0.957 |
Baseline + DOD + DRL |
0.167 |
1.944 |
7.349 |
0.264 |
0.774 |
0.912 |
0.961 |
Baseline + DOD + DRL + DCL |
0.152 |
1.627 |
7.083 |
0.252 |
0.792 |
0.916 |
0.965 |
4. 总结
为了解决传统自监督单目深度估计在动态场景中精度不足的问题,本文提出了一种新型的自监督单目深度估计模型。该模型通过引入动态物体掩码将动态物体从目标图像中分离出来,并引入光流网络估计目标图像到源图像的光流。利用动态物体、源图像及其光流信息重构新的图像,以提高动态物体深度估计的准确性。为了确保光流网络的估计精度,本文提出了动态物体重构损失。最后,通过共享权重的深度估计网络对重构源图像和原始目标图像进行深度估计,并利用这两个深度图进行相互监督,以保证深度信息的一致性,为确保深度能够有效地监督,提出了深度一致损失。本文在nuScenes,KITTI,DDAD数据集上的实验结果表明,模型能够有效解决动态场景深度估计不准确的问题,并且在KITTI这种静态场景较多的数据集也有一定的增益。尽管实验验证了所提方法的有效性和适用性,但仍存在一定的局限性。由于使用光流重构图像会导致重构源图像出现缺失,我们为解决这一问题在本文中采用的是使用目标图像前后帧共同监督的方法。我们认为这一方法并不是解决此问题的最优解,因此这也是我们未来研究的重点方向之一。