1. 引言
单目深度估计 [1] 是计算机视觉的一项基础研究任务。高质量的深度信息可以为各个领域提供有用的信息,包括3D场景重建 [2] 和自动驾驶 [3] 等领域。虽然有监督的单目深度估计方法 [4] 已经可以取得不错的效果,但是它们受到地面实况数据收集成本高昂的限制。自监督方法 [5] 作为一种替代方案,可以在没有深度标签的情况下使用立体图像对或单目图像序列训练深度估计网络,该方法大大减轻了对深度标签的需求。其中,在利用立体图像对 [6] 时,摄像机的运动是已知的,因此可采用单个深度估计网络来预测深度。而仅使用单目图像序列 [7] 的训练需要联合估计深度图和相机的自我运动来计算光度损失的变换矩阵,这需要额外的姿态估计网络。尽管如此,使用单目图像序列的方法仍然更具有吸引力,因为它不需要额外的传感器,且无需复杂的立体数据处理操作。因此,本文将使用单目图像序列训练深度估计网络。
然而,仅使用单目图像序列的训练方法高度依赖于静态场景和朗伯表面假设,在存在一些动态对象的场景下(例如行人或汽车),其模型性能会受到严重影响。为了缓解这些问题,Godard等人 [7] 通过引入最小重投影损失和自动掩蔽来防止遮挡并隐藏场景中的移动物体。但是,该方法未能在边界模糊、形状复杂、高反射和颜色饱和的区域预测出精确的深度结果。Lyu等人 [8] 在Monodepth2的基础上,研究用于高分辨率自监督单目深度估计的网络结构HR-Depth,该网络重新设计了DepthNet的跳层来帮助预测更清晰的边缘。但是该网络对像素遮挡区域的深度信息估计不准确。为缓解该问题,Wang等人 [9] 设计一种高质量深度解码器HQDec,利用自适应细化模块建模像素依赖关系,以最大程度恢复深度图精细度。但该方法需要在已知相机内在参数的情况下训练,无法输出清晰度稳定的深度图。Ren等人 [10] 利用单目图像序列训练自适应知识蒸馏框架MUSTNet,并提出协同教学损失来实现更准确的深度估计。但是,该方法在蒸馏过程中需要分别完成教师模型和学生模型的训练,整个网络训练资源占用率高、效率低。虽然这些方法取得了可观的效果,但很少有研究来改进深度估计网络本身的架构。使用卷积神经网络(CNN) [11] 进行特征提取在现有的有监督和无监督训练中占主导地位。然而CNN缺乏对全局信息的感知力,卷积操作会使得输入数据的位置信息丢失,降低了对远处物体深度估计的准确性。Vision Transformer(ViT) [12] [13] 最近在目标检测和语义分割等任务上表现出出色的结果。ViT能够对像素之间的远程关系进行建模,从而获得全局感受野。但是传统的ViT架构 [14] 中的多头自注意力(MHSA)模块具有昂贵的计算成本,对硬件要求高。
为了获得整体场景更高精度深度估计结果的同时降低资源占用率,本文提出了一种混合CNN和ViT的自监督知识蒸馏单目深度估计方法HCVNet (Hybrid CNN and ViT for Self-Supervised Knowledge Distillation Monocular Depth Estimation Method)。设计CNN-ViT混合的特征编码器,捕捉细粒度高的局部和全局信息,通过重新排列卷积操作缓解内存访问成本高的问题;设计通道特征聚合模块,从通道层面上增强场景结构的感知,解决深度不连续的远处区域估计不清晰的问题;引入单阶段同步知识蒸馏 [15] 知识,将同一个模型的前一轮训练作为教师模型来蒸馏当前训练的学生模型,避免了同时训练两个模型效率低下的问题。实验结果表明HCVNet在真实户外场景数据集KITTI [16] 和Make3D [17] 上展现了优秀的性能与泛化能力。
2. 研究方法
2.1. HCVNet网络的基本原理
本文提出混合CNN和ViT的自监督知识蒸馏单目深度估计方法HCVNet,框架结构如图1所示,主要由深度网络、姿态网络和损失函数三个部分组成。深度网络包含教师和学生两个分支,教师和学生模型都为具有跳跃连接的编码器–解码器架构。在该架构中,特征编码器以CNN-ViT混合网络为主干从输入图像
中提取具有表达力的空间信息特征。此后特征图进入通道特征聚合模块,该模块增强场景结构感知,从而生成新的特征。新特征经过深度解码器的四次上采样和卷积层处理,最终输出深度图
,由
可计算得到平滑度损失。教师模型利用多视图检查过滤器来过滤掉视图中的异常值
,得到过滤后的深度图
。由
和
可得到学生分支的输出深度图
,
和
可被用来计算自蒸馏损失。姿态网络以ResNet18为主干,使用三个1 × 1卷积层来估计相邻帧之间的相机运动。网络通过执行投影和重投影操作得到合成目标图像
,根据
和
可计算光度损失。平滑度损失、自蒸馏损失和光度损失为网络训练提供更多监督信号,最终得到更高精度的深度图。
2.2. CNN-ViT混合特征编码器
现有深度估计任务中的CNN模型 [7] [8] 只是简单的将当前层的输入特征和输出特征相加并送入下一层,来提取局部特征,难以捕获高精度全局特征。Vision Transformer模型 [18] 有较强的长程依赖提取能力,但具有巨大的计算开销。为了高效提取到细粒度高的局部和全局信息,本文结合CNN和Vision Transformer的优点,提出了CNN-ViT混合特征编码器。CNN-ViT混合特征编码器的结构如图2所示,它包含一个Conv Stem和四个Stage,分别作用在不同的尺度上。
为了捕获更多低层局部细节信息,CNN-ViT特征编码器从一开始就设置具有多个卷积层的Conv Stem来提取图像特征。如图2(a)所示,Conv Stem接收大小为
的输入图像。该图像经过第一个步长为2的3 × 3常规卷积层和3 × 3深度可分离卷积层处理后,获得低级特征。1 × 1 Conv层和3 × 3 DWConv层被用来对低级特征进行二次提取。此外,Conv Stem在3 × 3 Conv层和3 × 3 DWConv层中间设置跳跃连接来避免信息丢失。最终得到大小为
的特征
。
为了改善计算延迟,该编码器重新排列卷积操作并删除部分非线性激活函数,在Conv Stem后设计

Figure 2. Hybrid CNN-ViT feature encoder
图2. CNN-ViT混合特征编码器
了4个stage。其中,前3个stage拥有相同的内部卷积架构,进一步提取局部细节信息。第四个Stage利用注意力机制捕获全局上下文信息。
Stage 1~3主要包括下采样层和ConvFFN。如图2(b)所示,下采样层使用3 × 3 DWConv将空间分辨率减半,通道数量加倍。随后使用批量归一化层,提高训练稳定性。以Stage1为例,该训练过程可表示为公式(1):
(1)
为了缓解计算时跳跃连接操作对内存带来的负担,推理时采用结构重构参数化技术来简化推理计算量。Stage1下采样层的推理过程可表示为公式(2):
(2)
在下采样层后,本文使用CNN风格的ConvFFN来融合局部信息,其结构如图2(c)所示。ConvFFN包含短连接、7 × 7 DWConv、批量归一化、1 × 1 Conv、激活层和1 × 1 Conv。研究发现,大核卷积有助于提高模型的鲁棒性和性能,因此选用7 × 7卷积核。由于DWConv具有较低的运算参数,因此选用7 × 7 DWConv来缓解使用大核卷积对计算带来的不利影响。批量归一化的使用有助于加强推理时特征与前一层的融合。
Stage4由多级特征交互MLFI(Multi Level Feature Interaction)和ConvFFN组成。MLFI的结构如图2(d)所示。输入大小为
的特征
,
经过条件位置编码(CPE)处理,被线性地投影到相同维度的查询
、键
和值
。MLFI使用互协方差注意力来增强
:
(3)
(4)
MLFI接着增强特征的非线性,该推理过程可表示为公式(5):
(5)
MLFI编码长程全局上下文,弥补了CNN只能提取局部特征的缺点。经过MLFI处理后的特征进入ConvFFN,Stage4最终输出大小为
的特征
。
2.3. 通道特征聚合模块
为了从远处区域获得更多相对深度信息,并显著增强场景的结构感知,本文提出通道特征聚合模块CFAM (Channel Feature Aggregation Module)。如图3所示,CFAM模拟通道之间的相互依赖关系,通过加权求和来聚合来自所有通道映射的特征,同时融合来自非连续区域的不同局部深度响应。
通道特征聚合模块的输入为编码器生成的特征映射
。
经过重塑得到
,其中
为像素数(
)。CFAM将
与
的转置
进行矩阵乘法,计算出特征相似度
。第i个通道特征和第j个通道特征之间的相似度
可表示为公式(6):
(6)
通道之间的相似度
反映了区域响应的空间关系,即任何两个特征图的相似度越高,它们对相同区域的响应越强。为了融合来自不同区域的更多响应,CFAM最大化某个通道的特征得到
,通过执行逐元素相减法将相似度
转换为区分度
。
测量第j个通道对第i个通道的影响,计算过程可表示为公式(7):

Figure 3. Channel feature aggregation module
图3. 通道特征聚合模块
(7)
对于每一个通道映射,具有不同区分特征的其他通道在特征聚合时将获得更高的区分度
值。CFAM将
应用到Softmax层得到注意力映射
,见公式(8):
(8)
此外,CFAM在
和
之间进行矩阵乘法,并将结果重塑为
。
和重塑结果进行按元素求和运算,得到最终输出
。第i个通道的输出特征
可表示为公式(9):
(9)
通过捕获特征映射之间的长程依赖关系,HCVNet获得了具有丰富上下文信息的场景结构聚合特征。深度解码器利用该聚合特征与特征解码器提取的多尺度特征来估计输出深度图。
2.4. 知识蒸馏的原理
知识蒸馏的目的是利用结构复杂的教师模型来引导轻量化的学生模型,获得更好的性能。传统的知识蒸馏需要分别训练两个模型,存在资源占用率过高的问题。为此,HCVNet在深度估计中引入了自蒸馏 [15] 的知识,即使用两个权重独立的相同模型来相互学习。
HCVNet需要训练一个性能良好且复杂的教师模型,然后使用冻结权重的教师模型来蒸馏学生模型。在网络方面,教师模型与学生模型具有相同的编解码器架构,唯一的区别是模型参数。如图1所示,HCVNet的学生模型首先进行自监督学习,该模型的权重将在训练结束后保存。来自前一个训练时期的权重被加载并应用于第二个训练时期,第二个训练时期对应于图1中的教师分支。教师模型输出的深度伪标签在通过多视图检查过滤器过滤出深度信息离群值
之后,计算自蒸馏损失来向学生模型提供更多的监督信息,引导后续训练的学生模型获得更好的深度估计性能。自蒸馏损失
可以用公式表示为:
(10)
2.5. 自监督损失函数
光度损失:光度损失
[7] 由L1和结构相似度损失SSIM组成,计算过程可表示为公式(11)。为了处理被遮挡的对象,计算最小光度损失
,如公式(12)所示:
(11)
(12)
平滑度损失:当图像出现低纹理的区域时,光度损失的影响变弱。为了生成平滑的逆深度图,本文使用逆深度图在x和y上的梯度,以及第0帧在x和y上的梯度计算平滑度损失
。计算过程可表示为公式(13):
(13)
式中
表示经过归一化的逆深度图。
综上,HCVNet训练中的总损失函数
由自蒸馏损失
、光度损失
和平滑度损失
组成,
(14)
其中,
和
为自蒸馏损失和平滑度损失的训练权重。
用来判断重投影的光度误差是否小于原光度误差,若小于则设为1,反之设为0。
3. 实验结果与分析
3.1. 数据集及实施细节
实验在KITTI和Make3D两个公开数据集上进行。KITTI数据集 [16] 提供了61个用于自动驾驶和机器人研究的立体道路场景。为了训练和评估所提出的方法,本实验遵循Eigen等人 [19] 提出的KITTI数据分割方法,其中39,810个图像用于训练,4424个图像用于评估,697个图像用于测试。本文在训练期间对所有图像使用相同的内在参数。Make3D数据集 [17] 是一个户外单目深度估计的数据集,它包含534个RGB-D室外场景图像对,即RBG图像及其对应的深度图像。其中,400个图像对用于训练,134个图像对用于测试。为了评估所提出方法的泛化能力,在KITTI数据集上训练的模型直接在Make3D的测试图像上进行加载和推断。
实验运行环境为Ubuntu16.04,python3.7,pytorch1.8,cuda11.3,处理器为Intel Core,内存16 GB,图形处理卡为一张Nvidia GTX1070 (8GB)。该方法使用AdamW优化器以端到端的方式在KITTI数据集上训练了20个epoch,输入图像分辨率为640 × 192,批大小设置为4,初始学习率设置为10−4。该实验采用数据扩充 [7] 作为预处理步骤,来提高训练的鲁棒性。
3.2. 评估指标
为了评价不同单目深度估计方法的效果,本文使用七个常用度量 [19] 作为深度评估指标:绝对相对误差(Absolute Relative Error, Abs Rel)、平方相对误差(Square Relative Error, Sq Rel)、均方根误差(Root Mean Square Error, RMSE)、均方根对数误差(Root Mean Square Logarithmic Error, RMSElog)、
、
、
。各指标具体定义见公式(15)-(19):
(15)
(16)
(17)
(18)
(19)
其中,
表示地面真实深度,
表示网络预测的相对尺度深度,n表示有效像素。误差指标Abs Rel、Sq Rel、RMSE、RMSE log的数值越低越好,而精度指标
的数值越高越好。
3.3. 对比与分析

Table 1. Comparison results of performance metrics on the KITTI dataset
表1. KITTI数据集上的性能指标比较结果
为了验证HCVNet的先进性,将HCVNet与当前先进的13种自监督单目深度估计方法在KITTI上进行性能比较。表1展示了HCVNet在KITTI数据集上的深度估计性能指标比较结果。在KITTI数据集上,HCVNet的Abs Rel、Sq Rel、RMSE和RMSElog指标值分别达到了0.101、0.750、4.417、0.177,
指标值分别达到了0.899、0.966、0.984。与最佳对比方法DIFFNet [27] 相比,HCVNet的误差指标Abs Rel、Sq Rel、RMSE、RMSElog分别降低了0.98%、1.87%、6.29%、1.12%,精度指标
分别提高了0.22%、0.10%、0.10%。HCVNet在所有指标设置上都达到最佳性能。这是因为以往的方法仅使用单一的U-Net架构,而HCVNet设置教师模型和学生模型来进行自监督同步知识蒸馏。教师模型可为学生模型提供更多增益信息,从而有效提高了学生模型的精度与性能。

Table 2. Comparison results of performance metrics on the Make3D dataset
表2. Make3D数据集上的性能指标比较结果
为了评估HCVNet在不同户外现实场景中的泛化能力,在Make3D数据集上运行实验评估模型性能。表2展示了HCVNet与其他5种方法的性能指标比较结果。在Make3D数据集上,HCVNet的Abs Rel、Sq Rel、RMSE和RMSElog指标值分别达到了0.279、2.781、6.537、0.146。与最具竞争力的方法DIFFNet [27] 相比,HCVNet的Abs Rel、Sq Rel、RMSE和RMSElog误差指标值分别降低了6.38%、4.14%、4.58%。由此可见,HCVNet的深度估计性能优于其他方法,且拥有先进的泛化效果。主要原因为CNN-ViT混合特征编码器具有强大的特征提取能力与鲁棒性。该编码器发挥CNN网络在局部特征提取方面的优势以及Transformer在全局信息建模方面的优势,使得HCVNet估计出的深度图具有更好的特征表示。

Figure 4. Comparison of visualization results on the KITTI dataset
图4. KITTI数据集上的可视化比较结果

Figure 5. Comparison of visualization results on the Make3D dataset
图5. Make3D数据集上的可视化比较结果
为了更加直观地表现本文方法的有效性,本文比较了HCVNet与其他先进方法在KITTI和Make3D数据集上的可视化效果图。图4展示了在KITTI数据集上的可视化比较结果。图5展示了在Make3D数据集上的可视化比较结果。相比于目前的主流方法,HCVNet预测的深度图中物体更贴合其本身形状,且物体边缘和轮廓细节更加清晰。如远处路灯、建筑、广告牌和树木,见图中白色线框标记处。在图4第一列中,其他方法仅估计出灯珠的轮廓,HCVNet准确感知到圆灯的深度信息。由此可见,HCVNet对深度不连续区域的深度估计性能优于其他方法。在图5第四行中,其他方法存在树木与背景模糊的问题,HCVNet的树木轮廓最为接近现实。由此可见,HCVNet能够比其他方法更准确地建模对象的结构。这得益于CNN-ViT混合特征编码器具有全局感受野,通道特征聚合模块丰富了上下文信息的整体场景几何感知。HCVNet可以有效地对前景和背景进行建模,最终获得细粒度更高的深度估计结果。
3.4. 消融实验
为了进一步证明所提出各结构的有效性,本实验在KITTI数据集上对CNN-ViT特征编码器(CNN-ViT)、知识蒸馏(KD)和特征聚合模块(CFAM)三个组件进行消融实验,实验结果如表3所示。本实验使用Monodepth2 [7] 为Baseline。从表3的结果可发现,本文所提出的三个组件均能有效提高单目深度估计网络的性能。与Baseline相比,HCVNet的误差Abs Rel、Sq Rel、RMSE、RMSElog指标值分别降低了12.17%、16.94%、9.17%、8.29%,精度
指标值分别提高了2.51%、0.73%、0.31%。与Baseline + CNN-ViT相比,HCVNet的误差Abs Rel、Sq Rel、RMSE、RMSElog指标值分别降低了7.82%、14.40%、8.40%、4.15%。与Baseline + CNN-ViT + KD (full)相比,HCVNet的误差Abs Rel、Sq Rel、RMSE、RMSElog指标值分别降低了9.57%、15.28%、9.10%、6.22%。由此可见,三个模块组合使用具有最佳增益效果,完整的HCVNet网络具有最好的深度估计性能。

Table 3. Ablation experiment of modules
表3. 模块消融实验
4. 结论
为了解决场景结构感知不足,深度估计精度与效率低下的问题,本文提出一种混合CNN和ViT的自监督知识蒸馏单目深度估计方法HCVNet。HCVNet使用CNN-ViT混合特征编码器,其中CNN关注局部细节,ViT关注全局结构,有效避免了局部-全局特征丢失的问题。此外,编码器重新排列卷积操作符,能够以更高的效率提取整体结构特征。本文设计通道特征聚合模块,在通道维度上捕获场景的长程依赖关系。该设计丰富了上下文特征表示,缓解了复杂场景整体布局感知不完整的问题。与传统的知识蒸馏框架相比,本文设置相同结构的教师模型和学生模型来进行自监督蒸馏,能够在提高模型性能的同时并减少资源占用率。在KITTI和Make3D数据集上的实验结果表明,HCVNet拥有最先进的性能和较强的泛化能力,可获得更清晰的深度估计结果。在未来工作中,我们将从去噪的角度来进一步优化图像特征,尝试引入扩散模型作为网络主干,以获得更高分辨率的深度图。