深度图
深度图(Depth Image, Depth Map)会将图像中的每个像素编码为相机到场景中某个点的距离,从而提供图像中物体的空间信息。
需要注意的是,不同场景下深度的定义可能略有差异。有些数据集或传感器中,深度表示的是相机坐标系下沿光轴方向的 Z 值;有些场景中,深度也可能表示空间点到相机中心的欧氏距离。因此在使用深度图时,最好先确认数据来源对深度的定义。
深度图通过坐标转换可以转换为点云数据;反过来,有组织点云(organized point cloud)也可以转换为深度图数据。这里的有组织点云,是指点云仍然保留类似图像的二维网格结构,点和像素之间存在比较明确的对应关系。普通无序点云则通常不能直接无损地还原成一张深度图。

绝对深度和相对深度
- 绝对深度:空间中物体和相机之间的距离,有量纲,例如米、厘米等。绝对深度可以直接用于测距、三维重建和机器人避障等任务。
- 相对深度:描述图像中不同区域或物体之间的相对远近关系,通常没有明确量纲。它不一定是
[0,255]之间的 8-bit 数值,也可能是浮点深度图、归一化深度图或反深度形式。
相对深度的重点不是给出物体的真实距离,而是描述哪里更近、哪里更远。需要注意的是,数值越大是否代表越远并不固定,这取决于模型输出的是深度、反深度、视差风格结果,还是经过可视化映射后的图像。因此在使用模型输出时,需要先查看模型文档或代码中对输出结果的定义。
开源项目
介绍一个开源项目:MiDaS。
MiDaS 这个名字来自 Mixing Datasets for Zero-shot Cross-dataset Transfer。它的核心思路是混合多个深度估计数据集进行训练,从而提升模型在不同数据集、不同场景之间的泛化能力。最新的 v3.1 论文是 MiDaS v3.1 – A Model Zoo for Robust Monocular Relative Depth Estimation。
网络结构
-
Encoder-Decoder
MiDaS 基于 Encoder-Decoder 架构。Encoder 负责高级特征提取,计算得到的 Tensor 会作为 Decoder 的输入;Decoder 则通过上采样,根据高级特征生成深度图。MiDaS 设计了一种 Anchor 来连接 Encoder 和 Decoder。
-
Backbone
MiDaS 使用多个新的 Backbone,包括 BEiT 512-L、Swin-L、LeViT-224 等。这些 Backbone 有不同的精度和性能。
下图展示了在 RTX 3090 显卡下,不同 Backbone 的性能:

在实际选择 Backbone 时,需要自行在 FPS 和精度之间权衡。下图展示了不同 Backbone 的深度图结果:

[1] MiDaS GitHub 仓库
[2] MiDaS v3.1 – A Model Zoo for Robust Monocular Relative Depth Estimation
评论