Skip to content

单目深度估计模型

单目深度估计是从单张 RGB 图像预测场景深度信息的技术,是 3D 感知的核心能力之一。近年来基于 Transformer 和扩散模型的深度估计方法取得了显著进展,从相对深度排序发展到度量深度预测。

深度估计模型示意

问题定义

单目深度估计是一个不适定问题(ill-posed problem):同一张 2D 图像可能对应多个不同的 3D 场景。因此,模型需要利用场景先验知识进行推理。

深度估计主要分为两类:

  • 相对深度:预测深度的相对排序关系(远/近),不提供绝对尺度
  • 度量深度:预测以米为单位的绝对深度值

MiDaS:相对深度估计

MiDaS(Mixed Data for Depth)是 Intel 推出的相对深度估计模型系列:

  • 混合多数据集训练,学习通用的深度先验
  • 输出逆深度图(inverse depth),值越小表示越远
  • 支持多种骨干网络(ResNet、ViT、DPT)
python
import torch

class MiDaSPipeline:
    """MiDaS 深度估计推理"""
    def __init__(self, model_type="DPT_Large"):
        self.model = torch.hub.load("intel-isl/MiDaS", model_type)
        self.transform = torch.hub.load("intel-isl/MiDaS", "transforms")

    def predict(self, image):
        input_batch = self.transform(image).unsqueeze(0)
        with torch.no_grad():
            prediction = self.model(input_batch)
        # 插值回原始尺寸
        prediction = torch.nn.functional.interpolate(
            prediction.unsqueeze(1),
            size=image.shape[:2],
            mode="bicubic",
            align_corners=False,
        ).squeeze()
        return prediction.cpu().numpy()

Depth Anything:基础深度模型

Depth Anything 是基于 ViT 的大规模预训练深度估计模型:

  • 数据扩展策略:使用自训练(self-training)将标注数据扩展到 6200 万张无标注图像
  • ViT-Large 骨干:利用 DINOv2 的视觉特征
  • 相对深度输出:适用于通用深度估计场景

Metric3D:度量深度估计

Metric3D 实现了从单目图像直接预测度量深度:

  • 引入相机内参作为输入,解决尺度模糊性
  • 使用 canonical camera space 统一训练
  • 支持零样本迁移到新场景

深度估计与 3D 重建

单目深度估计是 3D 重建的基础组件。结合深度估计和相机位姿估计,可以从视频序列重建 3D 场景,这在自动驾驶、AR/VR 等领域有广泛应用。

Depth Pro:Apple 的快速深度估计

Depth Pro 是 Apple 推出的实时度量深度估计模型:

  • 0.3 秒内生成 2K 分辨率的度量深度图
  • 不需要相机内参输入
  • 基于扩散模型架构,但优化了推理速度

应用场景

应用需求推荐模型
图片背景虚化相对深度MiDaS / Depth Anything
3D 场景重建度量深度Metric3D / Depth Pro
自动驾驶度量深度Metric3D
AR 特效实时深度Depth Pro / FastDepth

相关资源

最近更新