JA EN ZH

单目深度估计技术与应用 - 从单张图像推断深度

· 9 分钟阅读

什么是单目深度估计 - 从 2D 图像恢复 3D

单目深度估计是从单张 2D 图像推断场景中每个像素深度(距离)的技术。人类可以通过透视、遮挡、纹理梯度等视觉线索从单眼图像感知深度,深度学习模型学习了类似的能力。

与传统方法的对比:

  • 双目立体视觉:需要两个相机,通过视差计算深度。精度高但需要校准和匹配
  • 结构光:投射已知图案并分析变形。精度极高但受环境光影响,适用距离有限
  • LiDAR:激光测距,精度最高但成本高、分辨率低、设备体积大
  • 单目深度估计:仅需普通相机一张照片。成本最低、适用性最广,但精度相对较低

应用领域:AR/VR 中的遮挡处理、自动驾驶的障碍物检测、机器人导航、3D 照片效果(如 Facebook 3D Photo)、景深模拟(人像模式)。

监督学习深度估计模型

监督学习方法使用带有真实深度标注的图像对训练模型。深度标注通常来自 LiDAR、结构光传感器或双目立体匹配。

代表性数据集:

  • NYU Depth V2:室内场景,Kinect 传感器采集深度。464 个场景,约 120K 对 RGB-深度图像
  • KITTI:户外驾驶场景,LiDAR 采集稀疏深度。自动驾驶深度估计的标准基准
  • ScanNet:室内 3D 重建数据集,提供稠密深度图

网络架构演进:

  • 编码器-解码器:编码器提取多尺度特征,解码器逐步上采样恢复深度图。跳跃连接保留细节
  • 多尺度预测:在多个分辨率上预测深度并融合,处理不同尺度的结构
  • Transformer 架构:DPT(Dense Prediction Transformer)使用 ViT 编码器,全局注意力机制捕获长距离依赖,显著提升精度

损失函数:L1/L2 像素损失、尺度不变损失(Scale-Invariant Loss)、梯度损失(保持边缘锐利)、多尺度损失的组合。

自监督深度估计 - 从立体和视频中学习

自监督方法无需昂贵的深度标注,利用立体图像对或连续视频帧中的几何约束作为监督信号。

基于立体对的方法:

  • 训练时使用左右相机图像对
  • 网络预测左图的深度,利用深度将左图变换到右图视角
  • 变换后的图像与实际右图的差异作为损失函数
  • 推理时仅需单张图像即可预测深度

基于单目视频的方法(Monodepth2):

  • 同时训练深度网络和位姿网络
  • 深度网络预测当前帧深度,位姿网络预测相邻帧间的相机运动
  • 利用深度和位姿将当前帧变换到相邻帧视角,重建误差作为损失
  • 自动遮挡处理:检测被遮挡区域并在损失计算中排除

优势与局限:无需深度传感器,可利用海量无标注视频训练。但在纹理缺失区域、动态物体、遮挡边界处精度下降。尺度模糊性是固有问题(单目无法确定绝对尺度)。

MiDaS 和 DPT - 通用深度模型的演进

MiDaS(Mixing Datasets for Monocular Depth)和 DPT(Dense Prediction Transformer)是目前最广泛使用的通用深度估计模型,在各种场景中表现出色。

MiDaS 的核心创新:

  • 混合数据集训练:同时使用多个不同来源的深度数据集训练。不同数据集的深度尺度和范围不同,通过尺度不变损失统一
  • 零样本泛化:在训练中未见过的场景类型上也能产生合理的深度预测
  • 多种模型大小:从轻量级(MiDaS Small)到高精度(MiDaS Large),适配不同计算预算

DPT 的改进:

  • 将编码器从 CNN 替换为 Vision Transformer(ViT)
  • 全局自注意力机制使模型能理解图像中远距离元素的空间关系
  • 在所有基准测试中显著超越 CNN 基础的 MiDaS

Depth Anything:

  • 最新的通用深度模型,使用大规模无标注数据进行自监督预训练
  • 在 62M 张无标注图像上预训练,再在标注数据上微调
  • 精度超越 MiDaS/DPT,同时保持良好的泛化能力

应用 - AR、自动驾驶与 3D 重建

单目深度估计在多个领域有重要应用,从消费级 AR 到工业级自动驾驶。

AR/VR 应用:

  • 遮挡处理:虚拟物体被真实物体遮挡时需要正确渲染。深度图判断虚拟物体是否应被遮挡
  • 物体放置:在 AR 中将虚拟物体放置在真实平面上,需要估计平面的深度和法线
  • 景深效果:智能手机的人像模式利用深度图模拟大光圈散景效果

自动驾驶:

  • 障碍物距离估计:判断前方车辆、行人、障碍物的距离
  • 可行驶区域检测:结合深度和语义分割确定安全行驶区域
  • 与 LiDAR 融合:用单目深度填补 LiDAR 稀疏区域,提供稠密深度

3D 重建:

  • 单图 3D 重建:从单张照片生成 3D 网格模型。结合深度图和法线估计
  • 新视角合成:利用深度图将 2D 图像变换到新视角,实现 3D 照片效果
  • 点云生成:深度图反投影为 3D 点云,用于场景理解和测量

实现与评估 - Python 深度估计流水线

使用 Python 构建完整的深度估计流水线,从模型加载到深度图可视化。

使用 MiDaS/DPT 的基本流程:

  • 安装:pip install torch torchvision timm
  • 加载预训练模型:model = torch.hub.load('intel-isl/MiDaS', 'DPT_Large')
  • 图像预处理:缩放到模型输入尺寸,标准化
  • 推理:prediction = model(input_tensor)
  • 后处理:将输出缩放回原始图像尺寸,归一化到 0-1 范围

深度图可视化:

  • 灰度图:近处亮、远处暗(或反转)
  • 伪彩色:使用 matplotlib 的 colormap(如 plasma、inferno)增强可读性
  • 3D 点云:利用相机内参将深度图反投影为 3D 点,用 Open3D 可视化

评估指标:

  • AbsRel(绝对相对误差):预测深度与真实深度的相对误差均值
  • RMSE(均方根误差):像素级深度误差
  • δ < 1.25:预测深度与真实深度比值在 1.25 倍以内的像素比例

性能优化:ONNX Runtime 加速推理、TensorRT 部署到 GPU、模型量化(INT8)减少内存和计算量。移动端可使用 MiDaS Small 或 Core ML 转换后的模型。

Related Articles

全景拼接算法深度解析 - 从特征检测到无缝融合

深入解析全景图像拼接的完整流程,涵盖特征匹配、单应性估计、图像变形、曝光补偿、接缝查找和多频段融合。

目标检测概述 - YOLO、SSD 和 Faster R-CNN 架构与性能对比

全面解析目标检测技术,从 Faster R-CNN 到 YOLO 系列和 SSD,比较各架构的精度、速度和适用场景。

立体视觉与距离测量 - 从视差恢复 3D 信息

详解立体视觉的原理,从对极几何到立体匹配算法 (SGM、深度学习),涵盖视差图到 3D 点云的转换和实际系统搭建。

点云基础与 3D 重建 - 从采集到处理

全面介绍点云数据的基础知识,涵盖 LiDAR 和深度相机采集、预处理、配准、网格重建及实用工具链。

图像去模糊原理与实践 - 从运动模糊到散焦恢复

系统讲解图像去模糊技术,涵盖维纳滤波、盲反卷积以及最新深度学习方法的实现细节。

GAN 图像生成的应用 - 从超分辨率到风格迁移

系统讲解 GAN 在图像处理中的实际应用。涵盖超分辨率、风格迁移、图像修复、人脸生成和实用部署方案。

Related Terms