双目和单目最后都能输出一张深度图,但两者不是同一种测距方式。
- 双目先在左右图中找到同一个三维点,再利用相机基线做三角测量。它的尺度来自真实的镜头间距。
- 单目只看一张图,依靠透视、遮挡、纹理、对象大小和训练数据中的场景规律推断深度。它的尺度主要来自模型先验。
所以,理解深度估计不能只盯着某个网络名称。更重要的是看清楚:图像从哪里进入,经过哪些模块,中间产生什么,最终深度的尺度和可信度来自哪里。
本文资料检索截止到 2026 年 7 月 14 日。
先看完整通路
双目:先求视差,再求深度
离线,只在装配或镜头状态改变后重新执行
标定板图像
│
├── 左右相机内参、畸变
├── 左右相机外参 R、T
└── 基线 B、校正映射 mapL/mapR、重投影矩阵 Q
│
▼
在线,每一对图像执行
左相机 ──┐
├─ 同步曝光 ─ ISP ─ 去畸变/极线校正 ─┐
右相机 ──┘ │
▼
左右对应搜索与代价聚合
│
▼
视差图 d(u,v)
│
┌─ 左右一致性、遮挡、量程、置信度检查
│
▼
深度 Z = fx × B / d
│
▼
深度图 + 有效掩码 + 置信度
│
▼
反投影点云 / 障碍物地图
双目算法真正解决的核心问题是:左图中的像素,在右图同一条极线上对应哪个像素。 找到对应点后,视差和深度之间是明确的几何换算。
单目:网络直接从图像回归深度
单张 RGB
│
├─ resize、归一化
└─ 可选相机内参或视场角
│
▼
CNN / ViT 编码器
│
├─ 局部纹理、轮廓
├─ 透视和消失点
├─ 物体与场景语义
└─ 多尺度全局特征
│
▼
深度解码器 / 几何预测头
│
├─ 相对深度或逆深度
├─ 米制深度
├─ 三维点图
└─ 可选置信度、法向、相机参数
│
▼
尺度处理
│
├─ 无锚点:使用模型原始相对或米制预测
└─ 有锚点:相机高度、IMU、轮速、稀疏 LiDAR、双目
│
▼
时序滤波 / 多帧融合
│
▼
深度图 + 有效掩码 + 置信度
单目在线推理没有“在另一张图里寻找对应点”这一步。网络在训练阶段已经把大量图像与几何之间的统计关系压进参数,部署时做的是一次前馈预测。
两条通路的根本差异可以压缩成一句话:
双目尺度 = 相机基线提供的几何尺度
单目尺度 = 训练先验或外部锚点提供的推断尺度
双目通路怎样一步步运行
离线标定先建立几何关系
双目在线计算依赖一组离线产物。标定板需要覆盖实际工作距离、视场边缘和不同姿态,不能只在画面中心拍几张。
左标定图 ── 单目标定 ──> KL、DL ──┐
│
右标定图 ── 单目标定 ──> KR、DR ──┤
├─ 双目标定 ─> R、T、B
左右同步标定图对 ──────────────────┘
│
▼
stereoRectify
│
▼
RL、RR、PL、PR、Q
│
▼
initUndistortRectifyMap
│
▼
mapL、mapR、有效 ROI
其中:
- $K_L,K_R$ 是左右相机内参;
- $D_L,D_R$ 是畸变参数;
- $R,T$ 描述右相机相对左相机的位置,$B=\lVert T\rVert$ 是基线;
- $R_L,R_R$ 和 $P_L,P_R$ 是左右校正旋转与投影矩阵;
- mapL、mapR 是由校正参数生成的在线查找表;
- $Q$ 或等价的内参、基线参数用于把视差重投影为三维坐标。
这条链出错时,后面换更强的匹配网络也救不了。常见问题包括结构件热变形、镜头重新对焦、左右相机装配松动、标定板覆盖范围不足。检查标定不能只看一个平均重投影误差,还要看校正后同名点的纵向残差是否接近零。
在线链先把双目变成一维搜索
双目在线入口必须是一对尽量同时曝光的图像。
硬件触发
│
├─ 左图 IL,时间戳 tL
└─ 右图 IR,时间戳 tR
│
├─ 检查 |tL - tR|
├─ 曝光、增益和白平衡尽量一致
└─ 对滚动快门运动畸变做约束或补偿
│
▼
remap(IL, mapL) ──> 校正左图 IL'
remap(IR, mapR) ──> 校正右图 IR'
未经校正时,对应点可能出现在另一个画面的任意位置,需要二维搜索。极线校正后,对应点基本落在同一行,只需要沿水平方向搜索:
左图第 v 行: ... A(uL,v) ........................
右图第 v 行: ............. A(uR,v) ..............
视差 d = uL - uR
如果左右图不同步,运动物体在两张图里的位置差不仅包含空间视差,还混入了时间位移。此时算法会得到一个数值正常、物理意义却错误的深度。
匹配模块是双目的核心
传统双目和学习式双目都在解决相同问题,只是构造、聚合匹配证据的方式不同。
BM:局部窗口直接比较
校正左图 IL' ──┐
├─ 对每个候选视差 d 比较左右窗口
校正右图 IR' ──┘
│
├─ SAD / SSD
├─ NCC
└─ Census + Hamming
│
▼
C(u,v,d):每个候选视差的代价
│
▼
选择最小代价 d
BM 计算简单,适合 CPU、DSP、FPGA 和 ISP。但窗口太小容易受噪声影响,窗口太大会把深度边界两侧混在一起。白墙没有纹理时,许多候选位置的代价几乎一样,算法无法知道应该选哪一个。
SGM/SGBM:给视差加空间连续约束
SGM 不只看当前像素,还沿多个方向累计代价:
原始匹配代价 C(u,v,d)
│
├─ 水平路径 ─┐
├─ 垂直路径 ─┤
├─ 斜向路径 ─┼─ 路径代价累加 ─> S(u,v,d)
└─ 反向路径 ─┘
│
▼
最小代价视差 d0
│
▼
亚像素拟合 + 左右一致性
相邻像素视差小幅变化时付出惩罚 $P_1$,大幅跳变时付出更大的 $P_2$。这样做相当于告诉算法:同一表面通常连续,但物体边缘允许突然变化。
OpenCV StereoSGBM 是常用工程起点。它的完整输出链应当是:
SGBM 原始视差
│
├─ 唯一性检查:第一名是否明显好于第二名
├─ 左右一致性:dL 与 dR 是否互相对应
├─ speckle 检查:去掉孤立小块
├─ 亚像素插值:从整数视差细化
└─ 遮挡和越界标记
│
▼
视差 d + valid mask,而不是一张被全部填满的图
学习式双目:用网络学习匹配和聚合
学习式双目(Deep Stereo)没有取消视差,它只是把手工特征和固定聚合规则替换成学习模块。
IL' ─> 共享特征编码器 ─> FL ─┐
│
├─ 相关/拼接 ─> 代价体 V(u,v,d,c)
│
IR' ─> 共享特征编码器 ─> FR ─┘
│
├─ 3D CNN 聚合
├─ Transformer 聚合
└─ GRU 迭代更新
│
▼
初始视差 d0
│
查询局部代价并反复修正
│
▼
亚像素视差 d
GC-Net和 PSMNet代表完整代价体与 3D 卷积路线;RAFT-Stereo和 IGEV-Stereo代表相关体或几何编码体加循环更新路线。
深度网络的优势是能利用更大范围的上下文,弱纹理和复杂边界往往比 SGM 完整。但要注意:网络可能依据语义把没有匹配证据的区域补全。输出更稠密,不代表每个像素都来自可靠的左右对应。
视差怎样变成深度
校正后的平行双目中:
$$ d=u_L-u_R $$
已知像素焦距 $f_x$ 和基线 $B$ 后:
$$ Z=\frac{f_xB}{d} $$
再把像素反投影到左相机坐标系:
$$ X=\frac{(u-c_x)Z}{f_x},\qquad Y=\frac{(v-c_y)Z}{f_y} $$
视差误差会随距离快速放大:
$$ |\delta Z|\approx\frac{Z^2}{f_xB}|\delta d| $$
例如 $f_x=700$ 像素、$B=0.12$ 米、视差误差为 0.1 像素时:
- 2 米处的深度误差约 4.8 毫米;
- 10 米处的深度误差约 11.9 厘米。
所以双目并不是在所有距离上精度相同。更长基线、更高分辨率有利于远处测距,但会增加近处遮挡、最小测量距离、结构尺寸和标定稳定性问题。
视差转深度之后仍不能直接结束。完整输出至少要保留:
depth(u,v) 深度值和单位
disparity(u,v) 原始视差,便于诊断
valid(u,v) 是否有可靠对应
confidence(u,v) 匹配或模型置信度
timestamp 这张深度对应的曝光时刻
K / frame_id 相机模型和坐标系
单目通路怎样一步步运行
在线推理不是几何搜索,而是模型回归
单目网络看到一张图后,主要经过编码、解码和输出解释三段。
输入 RGB:H × W × 3
│
├─ resize 到模型输入分辨率
├─ 像素归一化
├─ 记录缩放和裁剪关系
└─ 输入内参 K,或由模型估计视场角
│
▼
编码器
│
├─ 浅层:边缘、纹理、局部形状
├─ 中层:物体部件、遮挡关系
└─ 深层:房间、道路、天空、物体尺度和全局透视
│
▼
多尺度特征 F1、F2、F3、F4
│
▼
解码器
│
├─ 从低分辨率全局结构逐级上采样
├─ 融合浅层边缘,恢复细节
└─ 深度头输出每个像素的数值
│
▼
原始预测
│
├─ 相对逆深度 r(u,v)
├─ 米制深度 Z(u,v)
└─ 三维点图 P(u,v) = (X,Y,Z)
│
▼
恢复到原图尺寸并生成 valid/confidence
网络为什么能从一张图判断远近?因为训练数据让它学会了这些统计规律:
- 遮挡别人的物体通常更近;
- 平行线向消失点汇聚;
- 地面纹理随距离变密;
- 常见人、车、门和桌子有大致尺寸;
- 天空、道路、墙面和室内结构有常见空间布局;
- 焦点、阴影和材质也会提供弱线索。
这些线索能产生很强的视觉判断,但它们不是物理基线。模型遇到缩微模型、巨型物体、特殊镜头或视觉错觉时,可能给出结构自然却尺度错误的结果。
相对深度和米制深度不是同一个任务
透视投影只与 $X/Z$、$Y/Z$ 有关。如果把整个场景乘以同一个比例 $s$:
$$ (X,Y,Z)\rightarrow(sX,sY,sZ) $$
像素投影不变。也就是说,仅从单张图的几何关系无法唯一判断“这是小物体在近处,还是大物体在远处”。
因此,单目输出要分清三类:
| 输出类型 | 模型真正保证什么 | 能否直接用于测距 |
|---|---|---|
| 相对深度 / 逆深度 | 像素之间的远近和几何结构,整体尺度、偏移可不确定 | 不能直接当米使用 |
| 米制深度 | 根据训练分布和相机建模预测米制距离 | 可以输出米,但必须验证跨域尺度误差 |
| 点图 | 每个像素直接预测三维点,可同时预测相机和法向 | 是否有真实尺度取决于模型与监督 |
Depth Anything V2的通用模型首先是一条强相对深度路线;Metric3D v2、Depth Pro、UniDepth V2和 MoGe-2进一步处理相机、米制尺度、点图、边缘和置信度。
这里最容易误判的是:模型张量的单位写成米,只说明训练目标是米制深度,并不说明新场景中的每个值都是测量值。
训练通路决定模型学到什么
部署时单目网络可以只输入一张图,但它在训练时可能走过完全不同的监督链。
米制标签监督
RGB ───────────────> DepthNet ─────────> 预测深度 Zpred
│ │
└─ LiDAR / ToF / 合成真值 Zgt ─────────────┤
▼
深度 + 梯度 + 法向 + 边界等损失
│
▼
更新模型参数
优点是尺度直接;问题是稠密真值昂贵,而且 LiDAR 空洞、反射飞点、累积扫描畸变和相机分布会一起进入训练数据。
混合相对深度与教师蒸馏
多种真实/合成数据
│
├─ 深度单位不同
├─ 深度范围不同
└─ 部分只有相对排序
│
▼
尺度或尺度-平移不变损失
│
▼
大教师模型
│
├─ 学习开放域相对几何
└─ 为海量未标注图像产生伪深度
│
▼
蒸馏小模型
MiDaS建立了混合异构数据训练相对深度的典型路线。Depth Anything V2 又加强了教师、合成标签和大规模真实图像伪标签。它们优先解决“换场景后远近关系仍然合理”,不是先解决绝对米制尺度。
单目视频自监督
目标帧 It ─────────────> DepthNet ─────> Dt
│ │
│ │
相邻帧 Is ─┐ │
├─ PoseNet ─> Tt→s ────────────┤
目标帧 It ─┘ │
▼
K + Dt + Tt→s 将 Is 重投影到 It
│
▼
重建图 Ît 与真实 It 比较
│
▼
光度/结构/平滑损失
SfMLearner和 Monodepth2是这条路线的代表。
这类方法省掉了人工深度标签,但依赖以下条件:
- 场景大部分静态;
- 相邻帧有足够相机位移;
- 亮度和曝光近似一致;
- 遮挡、动态物体和静止相机片段被正确屏蔽。
单目视频同时学习深度与位姿时,$D$ 和平移 $T$ 可以一起缩放,重投影仍不变,因此通常只有相对尺度。若训练时使用已知基线的双目对,基线可以把米制尺度注入模型。
要特别区分:
视频用于训练,部署只输入一帧
与
部署时连续输入多帧,在线利用运动视差
后者已经是多帧深度、SfM、VIO 或多视图几何,不再是纯单图回归。
怎样给单目补尺度和稳定性
单目原始预测之后,可以增加尺度锚定与时序处理:
单目预测 Dmono ───────────────────────────┐
│
相机高度 + 地平面 ──> 全局尺度 s ─────────┤
已知物体 / 标志物 ──> 局部尺度 ───────────┤
IMU / 轮速 / VIO ───> 运动尺度 ───────────┤
稀疏 LiDAR / ToF ───> 稀疏真实深度 ───────┤
▼
尺度拟合或分段优化
│
▼
米制深度 Dmetric
│
位姿或光流对齐后做时序滤波
│
▼
稳定深度 + 置信度
只拟合一个比例 $s$ 只能修正全局尺度。如果相对深度在不同物体上存在不同的局部形变,就需要分段尺度或稀疏深度补全。2026 年的 Midas Touch for Depth就是“相对深度 + 极稀疏 3D 锚点 + 分段恢复”的代表。
时序滤波只能减少闪烁,不能修正稳定存在的系统性尺度错误。若每一帧都把 5 米预测成 4 米,平均多帧后仍然是 4 米。
各种实现方案到底差在哪里
下面不按论文榜单,而按完整数据通路比较。
| 方案 | 端到端通路 | 尺度来源 | 主要优势 | 主要失效点 |
|---|---|---|---|---|
| 被动双目 + BM/SGM | 同步双图 → 校正 → 手工代价 → 聚合 → 视差 → 三角测量 | 物理基线 | 可解释、实时、无需训练,CPU/FPGA 友好 | 白墙、重复纹理、遮挡、反射 |
| 主动双目 + SGM | 红外投影 + 同步双图 → SGM → 深度 | 物理基线 | 室内弱纹理区域更稳定 | 强日光、投影互扰、透明物体 |
| 学习式双目 | 双图 → 特征 → 代价体 → 网络聚合/迭代 → 视差 → 深度 | 物理基线 | 能利用上下文改善弱纹理和细节 | GPU/NPU 开销、域偏移、可能语义补错 |
| 单目相对深度 | RGB → 基础模型 → 相对深度 | 无绝对尺度 | 单摄像头、开放域远近结构好、模型可小型化 | 不能直接测米,时序可能闪烁 |
| 单目米制深度 | RGB + 可选相机信息 → 米制模型 → 深度 | 训练先验与相机建模 | 硬件最简单,可直接产生米制输出 | 换相机、焦距、对象尺度后可能整体偏移 |
| 单目视频 / 多视图 | 图像序列 → 对应/位姿 → 几何深度 → 多帧融合 | 运动基线;绝对尺度仍需锚点 | 跨帧几何一致,适合重建和 SLAM | 动态物体、低视差、位姿误差 |
| 单目先验 + 双目/稀疏深度 | 单目全局结构 + 双目或稀疏真实尺度 → 置信度融合 | 基线或稀疏传感器 | 兼顾稠密结构、困难区域和尺度 | 系统复杂,冲突时必须知道信谁 |
还要区分两个经常混用的词:
- 主动双目描述是否用投影器增加纹理;
- 学习式双目描述匹配模块是否使用神经网络。
主动双目也可以使用深度网络,被动双目也可以使用 SGM。它们是两条不同分类轴。
过去、现在与前沿改变了哪一段通路
双目:几何骨架没变,匹配模块不断升级
| 阶段 | 被替换的通路节点 | 代表方案 | 结果 |
|---|---|---|---|
| 传统时期 | 手工匹配代价与局部/全局优化 | BM、Graph Cuts、Belief Propagation | 建立完整视差求解框架,但速度和边界难兼顾 |
| 工程主流 | 多方向半全局聚合 | SGM/SGBM | 精度、实时性和硬件实现取得平衡 |
| 深度学习早期 | CNN 学匹配特征,3D CNN 聚合代价体 | GC-Net、PSMNet | 基准精度提升,但显存随 $H\times W\times D$ 增长 |
| 当前主流 | 相关体/几何体 + GRU 迭代更新 | RAFT-Stereo、IGEV-Stereo | 能按迭代次数交换速度和精度 |
| 2025–2026 前沿 | 单目基础先验注入双目分支,再压缩为实时模型 | FoundationStereo、Stereo Anywhere、MonSter、Fast-FoundationStereo | 零样本泛化和困难区域改善,同时仍输出几何视差 |
前沿双目并没有绕过左右对应:
左右图 ─> 双目特征 ─> 双目代价体 ─────────┐
│
左右图 ─> 单目基础模型 ─> 全局深度先验 ──┤
▼
置信度控制的代价融合
│
▼
迭代更新视差 d
│
▼
Z = fx × B / d
FoundationStereo通过侧向适配把 Depth Anything V2 的单目先验注入双目特征与代价过滤;Stereo Anywhere和 MonSter显式维护单目、双目两条分支:可靠双目区域帮助单目恢复尺度,单目结构再指导弱纹理和遮挡附近的匹配。
Fast-FoundationStereo则对这条链做蒸馏、聚合模块搜索和 GRU 结构化剪枝。前沿重点已经从“只追求榜单精度”转向“跨域泛化能否与实时部署同时成立”。
单目:从单张深度回归走向统一三维几何
| 阶段 | 通路变化 | 代表方案 | 核心边界 |
|---|---|---|---|
| 手工线索 | 透视、阴影、纹理和场景模型 → 粗深度 | shape-from-shading、Make3D | 只适合受限场景 |
| 监督 CNN | 单图 → 多尺度 CNN → 稠密深度 | Eigen 等 | 依赖米制标签和训练域 |
| 自监督几何 | 视频 → 深度网络 + 位姿网络 + 重投影损失 | SfMLearner、Monodepth2 | 动态、遮挡、曝光和尺度不确定 |
| 相对深度基础模型 | 多数据集 + 教师伪标签 → 通用相对深度 | MiDaS、Depth Anything V2 | 泛化强,但原始输出不是米 |
| 米制几何模型 | RGB + 相机建模 → 深度、点图、法向、置信度 | Metric3D v2、Depth Pro、UniDepth V2、MoGe-2 | 米制尺度仍来自训练先验 |
| 任意视图模型 | 一张到多张图 → 相机、射线、深度、点图联合预测 | VGGT、Depth Anything 3 | 大场景、动态、长序列和端侧部署仍在发展 |
VGGT从一张到多张图联合输出相机参数、深度、点图和点轨迹;Depth Anything 3进一步使用统一的深度—射线表示处理任意数量视图。
通路正在从:
先估相机 ─> 再找对应 ─> 再算深度 ─> 再拼点云
逐步变成:
任意数量图像 ─> 统一 Transformer ─> 相机 + 射线 + 深度 + 点图
这种前馈模型简化了模块边界,但不会自动消除动态物体、遮挡、长序列漂移、尺度不确定和置信度失真。传统几何优化仍可用来验证或细化网络结果。
工程上怎样选通路
需要稳定米制深度
室内机器人、机械臂近场感知和固定设备优先从下面的链开始:
全局快门双目
│
├─ 室内弱纹理:增加红外投影
└─ 室外:被动双目,重视 HDR 与同步
│
▼
标定与极线校正
│
▼
SGBM 建立可解释基线
│
├─ 精度够:继续优化参数和硬件
└─ 困难区域不够:评估 IGEV / FoundationStereo
│
▼
disparity + valid + confidence
│
▼
深度 / 点云 / 占据图
第一版不要一上来就用最大网络。先用 SGBM 暴露同步、标定、曝光、量程和材质问题,再判断真正瓶颈是否在匹配模块。
只能使用一颗 RGB
如果成本、体积或存量硬件只允许单摄像头:
RGB
│
▼
小型相对或米制深度模型
│
├─ 相机固定:用本机内参、本域数据校准
├─ 地面机器人:可用相机高度/地平面校正尺度
├─ 有轮速/IMU:与 VIO 或运动尺度融合
└─ 有稀疏深度:做分段尺度与深度补全
│
▼
时序滤波 + 置信度门控
│
▼
近似米制深度
这条链适合远近排序、语义增强、低成本导航提示和图像处理。若要承担近障碍制动或人员安全,仍应增加独立的测距与安全链。
追求开放域与高质量三维
双目 / 多视图 RGB
│
├─ FoundationStereo:高质量零样本双目
├─ VGGT / Depth Anything 3:相机与三维联合预测
└─ 稀疏 LiDAR / ToF:提供真实尺度锚点
│
▼
网络几何结果
│
├─ 置信度和冲突检查
├─ 束调整 / 位姿图 / TSDF 等几何融合
└─ 本域尺度与时间一致性验证
│
▼
重建、AR、空间理解、机器人地图
前沿模型适合作为强前端,不应因为它能一次输出完整点云,就省掉坐标系、时间同步、外点剔除和长期一致性检查。
验证一条通路是否真的可用
先检查每个节点的数据契约
一张可用深度图不只有二维数值。上下游至少要约定:
| 数据 | 必须明确的内容 |
|---|---|
| 图像 | 曝光时刻、frame_id、分辨率、像素格式、是否已校正 |
| 相机模型 | 内参、畸变、裁剪缩放后的新内参、标定版本 |
| 双目关系 | R、T、基线、左右顺序、允许的同步误差 |
| 视差 | 符号、缩放倍率、无效值、搜索范围、是否亚像素 |
| 深度 | 单位、Z 深度还是射线距离、量程、无效值 |
| 质量 | valid mask、confidence、遮挡和量程外标记 |
| 点云 | 坐标系、时间戳、是否过滤、颜色与置信度字段 |
如果中间节点只传一张彩色深度图,很多错误会在可视化阶段被掩盖,到了导航或抓取阶段才暴露。
再按通路选择指标
- 双目匹配看视差 EPE、Bad-1/2/3、D1,同时按距离换算深度误差;
- 相对单目看尺度对齐后的 AbsRel、$\delta_1$、排序和边界,但不能据此宣称米制准确;
- 米制单目禁止使用真值中值缩放后再声称绝对测距;
- 视频还要看相邻帧抖动、漂移和运动边缘拖影;
- 产品必须看有效率、错误率、近障碍漏检率和置信度是否校准;
- 部署性能要统计包含校正、拷贝、上采样、后处理和点云转换的 P95/P99 时延。
测试数据要主动覆盖白墙、栅栏、重复纹理、薄杆、黑色物体、镜子、玻璃、逆光、LED 闪烁、左右曝光不一致、快速运动、雨雾和量程外区域。
最重要的不是模型在正常场景输出多漂亮,而是困难场景发生时:
它能否知道自己不确定
│
├─ 能:标记 invalid / low confidence,系统降级
└─ 不能:输出平滑但错误的深度,下游会把错误当事实
最后抓住四个结论
- 双目先估视差,再通过基线和焦距换成深度。 传统和深度网络只是在替换匹配与聚合模块,标定、同步、校正和质量检查不能省。
- 单目在线做的是学习回归,不是几何测量。 相对深度、米制深度和点图是三种不同输出,必须先看尺度从哪里来。
- 视频训练不等于视频推理。 单目模型可以用多帧重投影训练、部署只看一帧;在线使用多帧运动视差时,已经进入 SfM、VIO 或多视图深度通路。
- 前沿不是单目取代双目,而是先验与几何融合。 单目基础模型处理全局结构和歧义区域,双目、运动或稀疏 3D 提供尺度与真实几何证据,置信度负责决定何时相信谁。
评论