你有没有试过闭上一只眼睛去接别人抛来的篮球?大概率会一把抓空。两只眼睛从略微不同的角度看到同一个物体,大脑再根据这段“角度差”算出距离——这就是人类的深度感知。可如果给你一张普通照片,你能说出照片里的汽车离镜头几米吗?凭经验可以猜个大概,却很难报出准数。深度估计,就是教计算机完成这件事:从一张或两张图片里,推断画面中每个物体离相机多远,并输出一张“深度图”——近处涂红、远处涂蓝,整张图就像一幅“距离地图”。这篇文章用一位篮球教练爷爷训练小孙子“练眼力”的故事,带你走完深度估计的完整旅程:先认识深度图,再看“独眼”单目怎么靠线索猜距离、“双眼”双目怎么用视差精确测距,然后聊聊算法如何一代代变强、考试该用什么标准打分,最后看看自动驾驶、AR 这些赛场上怎么用它、又踩过哪些坑。读完你会明白:让机器“看得懂远近”,是它走向 3D 世界的第一块基石。

岗位关联

深度估计是自动驾驶、AR、机器人感知的基石。掌握这套“从像素到距离”的方法论,能帮你在感知系统选型、模型评估与工程落地中做出更专业的判断。

目录
  1. 可视化演示
  2. 深度估计概述:给每个像素“量距离”
  3. 单目视觉线索:独眼也能“猜”出远近
  4. 双目立体匹配:两只眼睛的“视差标尺”
  5. 关键算法演进:从滑窗匹配到“万物可深”
  6. 性能评估体系:给“眼力”科学打分
  7. 应用挑战优化:从训练场走上赛场
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。

本节配有交互动效(进入视口后自动加载,约 3KB)。

系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T

深度估计概述:给每个像素“量距离”

爷爷的第一课从一个篮球开始。他把球放在孙子面前三米远,问:“球离你多远?”孙子答“大概两步”。爷爷摇头:“光知道'大概两步'不行,你得知道是 2.8 米还是 3.1 米,接球、传球、投篮都指望这个数字。'看一眼就报出准确距离',就是你今天要练的本事。”

在计算机视觉里,这个“球离我多远”的问题叫深度估计(Depth Estimation)。对一张照片来说,每个像素都对应真实世界里的某个点,深度估计的任务就是给每个像素算出一个深度值——这个值代表该点到相机平面的距离。所有像素的深度值拼在一起,就得到一张深度图(Depth Map):它和原图一样大,但每个像素记录的从颜色变成了距离。

为什么这事如此重要?因为一张 2D 照片天然丢失了深度信息。针孔相机模型里,三维世界的一点被投影到像平面时,坐标被压缩成二维,深度的分量被“除”掉了。没有深度值,你就永远无法把照片里的像素还原回三维世界,也就无从知道车距、物体大小和空间结构。深度估计本质上在做一道“反解”题:从被压缩的图像里,把丢掉的第三维捡回来。它也因此被称为“病态问题”——信息已经丢失,只能靠线索和先验去猜。

爷爷点点头:“所以第一课叫'认识距离'。你还没开始练接球,先要知道'距离'不是模糊的'大概两步',而是一个能写下来的数字——而且画面里每个点,都有自己的那个数字。”这,就是深度图。

x=f×XZ,y=f×YZ\displaystyle x = f \times \frac{X}{Z}, \qquad y = f \times \frac{Y}{Z}
这个公式是“近大远小”的数学根源:深度 Z 在分母上,物体越远,投影到画面上的坐标越小。它解释了为什么 2D 图像会丢掉深度——投影时 Z 被“除”进了坐标里。
  1. 三维世界的点 $(X, Y, Z)$物体上任意一点在相机坐标系里的真实位置,其中 $Z$ 正是我们要估计的深度。
    (X, Y, Z)(X,\ Y,\ Z)
  2. 像平面坐标 $(x, y)$三维点投影到图像传感器后所在的像素坐标,只有它能被相机直接看到。
    (x, y)(x,\ y)
  3. 焦距 $f$镜头“放大倍数”,决定同样深的物体在画面里有多大,是联系像素与真实尺寸的桥梁。
    ff
  4. 除以深度 $Z$坐标与深度成反比,深度越大投影越小——要想由像素反推三维坐标,必须先知道 $Z$。
    XZ,YZ\frac{X}{Z}, \quad \frac{Y}{Z}

单目视觉线索:独眼也能“猜”出远近

第二课,爷爷让孙子闭上一只眼睛接球。孙子一通乱抓,球砸在脸上。爷爷笑了:“独眼确实难,但并非不可能。你看远处的大楼和近处的路灯——就算闭上一只眼,你也知道大楼更远,因为你脑子里装了十几年的经验。”

单目深度估计(Monocular Depth Estimation)就是只用一张普通照片(一只“眼睛”)推断深度。它靠的是各种视觉线索:近大远小的相对尺寸、物体间的前后遮挡、阴影的走向、大气散射让远处略显模糊、地面纹理的疏密变化、地平线的位置……这些线索人类下意识地使用,模型则需要专门去学。

深度学习出现后,单目估计的玩法彻底变了:输入一张 RGB 图,输出同尺寸的深度图,训练目标就是让预测和真值尽量接近。MiDaS、Depth Anything 等代表性工作,先用千万级网络图片做“相对深度”预训练,再用少量带真值的数据微调,让模型在开放世界里也有了出色的相对深度感知。但单目有一个绕不开的天生短板——尺度模糊(Scale Ambiguity):一只真猫在 5 米外,和一只玩具猫在 1 米外,照片里可以长得一模一样;模型能判断“谁比谁近”,却无法确定“到底几米”。

爷爷总结:“独眼只能练'猜'——能分清前后,却报不出准数。这就是单目的天花板。要想接得稳,还是得用上两只眼。”

dabs=s×d^rel\displaystyle d_{\text{abs}} = s \times \hat{d}_{\text{rel}}
模型输出的通常只是相对深度(谁比谁近),要得到真实米数,还必须乘上一个未知的全局尺度因子 s——这就是单目测距“能排序、难定标”的本质。
  1. 相对深度 $\hat{d}_{\text{rel}}$模型从单张图像里预测出的“谁比谁更近”的相对远近关系,量纲未知。
    d^rel\hat{d}_{\text{rel}}
  2. 尺度因子 $s$把相对关系换算成真实米数所需的全局比例,单目无法从图中直接确定。
    ss
  3. 绝对深度 $d_{\text{abs}}$乘上尺度后的真实距离,是自动驾驶等任务真正需要的量。
    dabsd_{\text{abs}}

双目立体匹配:两只眼睛的“视差标尺”

第三课,爷爷让孙子睁开双眼,伸直手臂竖起一根手指,轮流闭左眼、闭右眼。奇妙的事发生了:手指在背景前“跳”了一下。爷爷说:“手指离得越近,跳得越厉害——这个'跳',就是两只眼睛在帮你测距。”

双目深度估计用两个平行放置、相隔一定距离的相机同时拍摄,模拟人的双眼。那段相机间距叫基线(Baseline)。同一个三维点,在左图和右图中落在不同的像素列上,这个水平位置差就叫视差(Disparity)。物体越近,视差越大;物体越远,视差越小。整个测距流程分三步:先做极线校正,让同名点只可能落在同一条水平线上,把二维搜索降成一维——这就是极线约束;再做立体匹配,沿水平线在右图寻找最相似的像素,得到视差图;最后用三角测量原理,代公式算出深度。

爷爷说:“两只眼配合,能报出'2.8 米'这种准数。但你发现没有?手指'跳'的时候,背景里的树几乎不动——这就是为什么双目测远距离时会力不从心。”匹配“找错人”的难题,我们下一节讲。

Z=f×Bd\displaystyle Z = \frac{f \times B}{d}
深度与视差成反比:视差越大,物体越近。这个公式把“两只眼睛的配合”翻译成了三个可测量的数——焦距 f、基线 B、视差 d。
  1. 视差 $d$同一个三维点在左右两幅图像中的水平像素差,单位是像素,物体越近视差越大。
    dd
  2. 基线 $B$左右相机光心的距离,相当于“眼距”,基线越长,同样的视差对应更远的可测距离。
    BB
  3. 焦距 $f$镜头把角度差放大到像素差的比例,是连接像素世界与物理世界的换算系数。
    ff
  4. 反比关系深度与视差成反比,视差趋近零即物体在无穷远处——这也解释了远距离测距为什么吃力。
    1d\frac{1}{d}

关键算法演进:从滑窗匹配到“万物可深”

第四课讲训练方法。爷爷说:“你先用最笨的办法练——球来了就伸手够,够十次接到一次;后来教你'预判',看对方肩膀动就知道往哪传;再后来请来数据分析师,把你每个接球动作拍下来拆解。这就是三代训练法的差别。”

深度估计算法也经历了类似的“三代”演进。第一代是传统方法:以 SGM(半全局匹配)为代表的立体匹配,靠人工设计代价函数和聚合策略,逐个像素滑窗比较,计算量大,遇到无纹理墙面、重复纹理的百叶窗就频繁“找错人”;单目方面则用手工几何线索加马尔可夫随机场做推测,效果有限。第二代是 CNN 时代:2014 年 Eigen 等人首次用卷积神经网络做单目深度回归,把“特征提取 + 深度回归”一并交给网络;双目方面,GC-Net、PSMNet 引入“代价体 + 3D 卷积”,精度远超传统方法。第三代是大模型时代:MiDaS 用混合数据集训练统一模型,Depth Anything 则把“伪标签自蒸馏”用到极致——先让大模型在无标注图片上生成伪标签,再蒸馏给学生模型,让模型学到开放世界的相对深度先验。

回看三代训练法:笨练、预判、数据驱动——深度估计算法正是沿着“手工设计 → 端到端学习 → 海量数据自监督”的路径一路进化,才从“接不到球”走到“球球必中”。

L=1N∑i=1N(di−di∗)2+λ×1N∑i=1Ne−∣∇Ii∣⋅∣∇di∣\displaystyle \mathcal{L} = \frac{1}{N}\sum_{i=1}^{N}\left(d_i - d_i^{*}\right)^2 + \lambda \times \frac{1}{N}\sum_{i=1}^{N} e^{-\lvert\nabla I_i\rvert} \cdot \lvert\nabla d_i\rvert
这是深度估计常用的训练损失:前半项像“批改作业”,预测与真值差得越多扣分越狠;后半项是“平滑要求”,但会在图像边缘处网开一面,保住物体轮廓。
  1. 真值深度 $d_i^{*}$由激光雷达或多目重建得到的“标准答案”,是网络学习的评分基准。
    di∗d_i^{*}
  2. 数据项 $(d_i-d_i^{*})^2$预测与真值的平方误差,对离谱大误差加倍惩罚,逼模型把整体深度学准。
    (di−di∗)2\left(d_i - d_i^{*}\right)^2
  3. 平滑项与权重 $\lambda$让深度在物体内部平缓过渡,$\lambda$ 控制平滑力度,越大深度图越“顺滑”。
    λ×1N∑i=1N∣∇di∣\lambda \times \frac{1}{N}\sum_{i=1}^{N}\lvert\nabla d_i\rvert
  4. 边缘保护 $e^{-\lvert\nabla I_i\rvert}$图像边缘处像素差大,这项指数趋近 0,平滑惩罚自动减弱,轮廓得以保留。
    e−∣∇Ii∣e^{-\lvert\nabla I_i\rvert}

性能评估体系:给“眼力”科学打分

第五课是月考。爷爷定了一套标准动作:站桩接球、跑动接球、蒙眼接球,每项按“接住没”和“接稳没”打分。“没有考试,你就不知道自己是进步还是退步。”孙子若有所思。

深度估计同样需要“月考”,也就是公开数据集和评价指标。主流数据集包括:KITTI——自动驾驶场景,车载双目相机拍摄的街景,是驾驶场景最常用的考场;NYU Depth v2——室内场景,用 Kinect 深度相机采集;此外还有 Make3D、Waymo、Cityscapes 等,覆盖不同领域。常用指标各有侧重:绝对相对误差(Abs Rel)衡量平均相对误差;均方根误差(RMSE)会放大离谱的大误差;而阈值准确率 δ₁ 最直观——把每个像素的预测与真值相除,比值落在指定范围内就记“合格”,最后统计合格像素占比。

爷爷看完月考成绩单说:“光看总分没用,得看单项——'接得稳'对应边缘清晰度,'接得住'对应整体准确度。好的评估指标能帮你定位:到底是远景飘了,还是近景糊了。”

δ1=1N∣{i  |  max⁡(didi∗, di∗di)<1.25}∣\displaystyle \delta_1 = \frac{1}{N}\left|\left\{ i \;\middle|\; \max\left(\frac{d_i}{d_i^{*}},\ \frac{d_i^{*}}{d_i}\right) < 1.25 \right\}\right|
δ₁ 是“达标率”:预测距离与真实距离之比(两个方向取最大)落在 [1/1.25, 1.25] 之内,就算这个像素“接住了球”。比值越接近 1,说明测距越准。
  1. 比值取最大同时衡量“预测偏大”和“预测偏小”两种误差,比值越接近 1 越好。
    max⁡(didi∗, di∗di)\max\left(\frac{d_i}{d_i^{*}},\ \frac{d_i^{*}}{d_i}\right)
  2. 达标线 $1.25$比值小于 1.25 视为该像素深度预测合格,相当于考试及格线。
    1.251.25
  3. 集合计数占比用集合符号收集所有合格像素,$\lvert\cdot\rvert$ 数出个数,$1/N$ 换算成比例。
    1N∣{i  |  ⋯<1.25}∣\frac{1}{N}\left|\left\{ i \;\middle|\; \cdots < 1.25 \right\}\right|

应用挑战优化:从训练场走上赛场

最后一课,爷爷带着孙子来到正式球场:“训练场和赛场不一样。赛场上对手会变、灯光会变、球速会变,你要学会临场调整。”

在场应用上,深度估计已是众多赛事的“主力队员”:自动驾驶用深度判断前车距离、触发防撞决策;AR/VR 要让虚拟沙发“真实地”摆在房间里,深度决定它的尺寸与遮挡关系;工业机器人从深度图得到点云,算出抓取位姿完成无序分拣;3D 重建、人像虚化同样依赖它打底。但工程落地时,四道坎最常见:一是传感器缺陷——镜面、玻璃、透明物体会让深度“测不准”;二是标注稀缺——真实场景稠密真值难以采集,因此催生了伪标签自蒸馏;三是实时性——车载芯片要跑几十帧,模型必须轻量化、做剪枝蒸馏;四是边缘模糊——深度图在物体边缘常“糊成一团”,需要用梯度损失把棱角“逼”出来。

六节课上完,爷爷拍拍孙子的肩膀:“你终于明白,眼力不是天赋,是方法、数据、反馈和临场应变堆出来的。机器也一样——它要'看宽',要'看深',更要在真实世界里'看准'。”

Lgrad=1N∑i=1N∣∇di−∇di∗∣\displaystyle \mathcal{L}_{\text{grad}} = \frac{1}{N}\sum_{i=1}^{N}\lvert \nabla d_i - \nabla d_i^{*}\rvert
这是梯度损失:比较预测深度与真值深度在“变化率”上的差异。它能逼着模型把物体边缘的落差学出来,让深度图告别“边缘糊成一片”。
  1. 梯度 $\nabla d_i$深度在图像空间里的变化率,刻画“这段是平地还是台阶”。
    ∇di\nabla d_i
  2. 梯度差异取绝对值预测与真值的梯度相减取模,误差越大,说明边缘“落差”学得越不到位。
    ∣∇di−∇di∗∣\lvert \nabla d_i - \nabla d_i^{*}\rvert
  3. 全图平均后加权对所有像素求平均,作为约束项与主损失叠加,共同优化模型参数。
    1N∑i=1N\frac{1}{N}\sum_{i=1}^{N}

AI 应用场景

自动驾驶环境感知测距

阶段:感知与融合

解决的问题:传统方案依赖激光雷达,成本高且点云稀疏;纯视觉方案又缺少距离信息。深度估计给每个前景像素补上“距离”,让 3D 目标检测和自动紧急制动(AEB)有了可靠的判断依据。

具体案例:某自动驾驶公司为园区接驳车配置双目相机 + 轻量化深度模型,实时输出稠密深度图,再与毫米波雷达做决策级融合:晴天以视觉深度为主,雨雾天雷达兜底,把急刹误报率降低 40%。

AR 虚拟家具按真实比例摆放

阶段:空间理解与交互

解决的问题:虚拟沙发要“落地”,就必须知道地板在哪里、沙发离用户几米、被茶几挡住多少。单目深度估计配合平面检测,让虚拟物体获得真实的尺度与遮挡关系。

具体案例:某家具电商 App 上线 AR 摆放功能:用户用手机扫一扫客厅,单目深度模型输出环境深度图,系统识别地面平面后把 1.8 米长的沙发按真实比例渲染出来,用户还能绕着走看各角度效果,下单转化率提升 22%。

工业机器人无序抓取

阶段:3D 视觉引导

解决的问题:货框里杂乱堆放的零件没有固定位姿,机器人“看不见”就抓不准。深度估计把 2D 图像升级为 3D 信息,为抓取提供目标点的空间坐标。

具体案例:某汽车零部件产线部署双目结构光相机,对料框输出高精度深度图,生成点云后做实例分割与位姿估计,机器人抓取成功率从 78% 提升到 96%,换型时间从半天缩短到 20 分钟。

Python 演示

python55 行
# -*- coding: utf-8 -*-# 微型双目深度估计: 合成左右视图 -> 块匹配 -> 视差 -> 深度 -> 精度评估.import numpy as npfrom numpy.lib.stride_tricks import sliding_window_view  def stereo_disparity(left, right, max_disp=32, win=5):    """块匹配(bm): 对每个像素搜索最佳视差, 返回视差图."""    h, w = left.shape    left = left.astype(np.float32)    right = right.astype(np.float32)    costs = []    for d in range(max_disp):        shifted = np.full_like(right, 255.0)   # 越界像素视为强不匹配        if d > 0:            shifted[:, d:] = right[:, :-d]     # 右图左移 d 列, 与左图对齐        diff2 = (left - shifted) ** 2        diff2 = np.pad(diff2, ((win // 2,) * 2, (win // 2,) * 2), mode='edge')        win_cost = sliding_window_view(diff2, (win, win)).mean(axis=(2, 3))        costs.append(win_cost)    return np.argmin(np.stack(costs), axis=0)  def disparity_to_depth(disp, f=500.0, b=0.12):    """深度与视差成反比: Z = f * b / d."""    d = np.maximum(disp.astype(np.float32), 1e-3)    return f * b / d  def depth_accuracy(pred, truth, thr=1.25):    """delta1 指标: 预测与真值之比落在 [1/thr, thr] 内算合格."""    ratio = np.maximum(pred / np.maximum(truth, 1e-6),                       truth / np.maximum(pred, 1e-6))    return float((ratio < thr).mean())  def main():    h, w = 80, 160    left = np.full((h, w), 128.0)    right = left.copy()    disp_true = np.zeros((h, w))    left[20:60, 40:80] = 255.0    # 左图方块    right[20:60, 20:60] = 255.0   # 右图方块左移 20 像素 -> 形成视差    disp_true[20:60, 40:80] = 20.0     disp = stereo_disparity(left, right, max_disp=40, win=5)    depth = disparity_to_depth(disp)    depth_true = disparity_to_depth(disp_true)    print("delta1 精度:", round(depth_accuracy(depth, depth_true), 4))    print("前景平均深度:", round(float(depth[20:60, 40:80].mean()), 3), "米")    print("背景深度:", round(float(depth[70, 120]), 3), "米")  if __name__ == "__main__":    main()
目的:从零实现一个微型双目深度估计器,演示“块匹配 → 视差图 → 深度图 → δ₁ 精度评估”完整链路,帮你直观看到视差与深度的反比关系。
  1. shifted[:, d:] = right[:, :-d]构造“视差为 d 时的右图对齐版本”,让左图像素能与右图像素逐列比较颜色差异。
  2. sliding_window_view(diff2, (win, win)).mean(axis=(2, 3))对窗口内像素差取平均,模拟传统方法里的代价聚合。
  3. np.argmin(np.stack(costs), axis=0)胜者为王:选代价最小的视差作为该像素的深度估计。
  4. d = np.maximum(disp.astype(np.float32), 1e-3)防止视差 0 造成除零,把无穷远背景近似为极大深度。
  5. return f * b / d双目测距核心公式“深度 = 焦距 × 基线 ÷ 视差”。
  6. ratio = np.maximum(pred / truth, truth / pred)两个方向的比值都考虑,再判断是否小于 1.25 达标。

常见误区

误区单目模型输出的伪彩色深度图看起来和激光雷达扫描结果差不多,那它输出的应该就是真实米数吧?我直接拿这个数去做刹车决策应该没问题。

正解单目天生存在尺度模糊。闭上一只眼,你能判断“手指在鼻子前、杯子在桌面上”,却很难说出“手指离我 0.3 米”。模型输出的往往是相对深度,需要借助已知物体大小、相机高度、IMU 等先验才能恢复绝对尺度。直接拿未标定输出做绝对测距,会出大事故。

为何常见:深度图用伪彩色渲染后视觉冲击力强,人脑会不自觉把它当成“测量结果”,而忽略了单目信息的物理缺失。

误区双目相机拍两张照片,把两张图重叠起来,像素位置不一样的地方就是视差,直接剪一剪不就得到深度了?

正解视差的前提是“找到同一个物理点的两个投影”,这叫立体匹配。左右图里每个像素颜色不同、光照有差异、还有遮挡区域,必须先通过相似度搜索找到对应点,再计算位置差。直接相减得到的只是颜色差异,根本不是视差。这就像让两个人站成一排看同一棵树,要先把“两人眼中树的位置”对准,才能谈“偏差了多少”。

为何常见:人眼处理视差是无意识的,让人觉得“差异是显而易见的”,忽略了背后复杂的匹配计算。

误区模型在 KITTI 上 Abs Rel 刷到 0.05,精度这么高,直接部署到新场景应该也没问题吧。

正解公开数据集是“考试”,真实世界是“考场”。训练集里没有的极端天气、陌生车型、特殊材质,都会让模型性能骤降(领域鸿沟)。而且 Abs Rel 是全局平均,远景飘、小物体糊、边缘模糊这些局部问题会被平均掩盖。工程上必须做跨域评测、边缘质量检查和长尾场景压力测试。

为何常见:排行榜文化让人默认“分数高 = 产品好”,忽视了训练分布与部署分布的差异。

误区深度学习让单目/双目深度估计精度越来越高,以后车上装个摄像头就够了,昂贵的激光雷达该退出历史舞台了。

正解纯视觉深度估计在弱纹理、逆光、雨雾、近距离大视差等场景仍不可靠,长期高精度测距尤其吃力;激光雷达直接测量时间飞行,物理上更稳健。业界主流是“视觉深度估计 + 毫米波/激光雷达”的融合方案,互为冗余,而不是互相取代。

为何常见:媒体对视觉方案的宣传容易让人误以为“纯视觉已经够安全”,忽略了工业级系统对可靠性和冗余的严苛要求。

面试题

Q1. 深度图中每个像素存储的核心信息是什么?

单选题 · easy

  • A.该点到相机平面的垂直距离← 正确答案
  • B.该点到图像中心的像素距离
  • C.该点在画面中的颜色亮度值
  • D.该点所在物体的类别标签

答案:A。深度图的每个像素记录的是该点离相机有多远(通常指到相机平面的垂直深度 Z),这也是“深度图”与“分割图”“彩色图”的根本区别。B 是图像坐标距离,C 是亮度,D 是语义类别,都不对。就像篮球训练里“距离”是球到人的空间数值,而不是球在图里的位置。

Q2. 双目测距公式 Z = fB/d 中,d 表示什么?

单选题 · mid

  • A.左右两幅图像之间的亮度差
  • B.相机的焦距与基线的乘积
  • C.左右图像同名点的水平像素差← 正确答案
  • D.物体在图像中的宽度像素数

答案:C。d 是视差,即同一个三维点在左右两幅图中投影列坐标的差值,单位是像素。物体越近视差越大,深度与视差成反比。A 是亮度差异,B 是分子上的 fB,D 是物体宽度,都与视差无关。类比竖手指轮流闭眼时“手指跳动的幅度”,那正是视差的直观体验。

Q3. 单目深度估计存在尺度模糊的根本原因是?

单选题 · mid

  • A.单目相机成像时存在径向畸变
  • B.单张图像缺少唯一的绝对尺度信息← 正确答案
  • C.单张图像的分辨率总是低于双目
  • D.单目相机无法聚焦远处的物体

答案:B。一张照片里,大物体远、小物体近可能投影出完全相同的像素区域,因此单张图像本身不包含绝对尺度。模型只能输出相对远近,必须靠外部先验补上尺度因子。A 是镜头光学问题,C、D 与分辨率、对焦无关。就像闭上一只眼能判断“谁在前谁在后”却猜不准“到底几米”。

Q4. 关于极线约束的作用,下列说法正确的是?

单选题 · mid

  • A.让单目模型输出绝对深度值
  • B.消除镜面反射造成的深度空洞
  • C.直接计算出稠密的三维点云
  • D.将匹配搜索从全图降维到极线上← 正确答案

答案:D。极线约束是双目立体匹配的加速前提:校正后,左图中一个点只可能在右图的同一条水平线上找到对应点,于是二维全图搜索变成一维沿线搜索,既提速又降低误匹配。A、B、C 都不是极线约束的功能。

Q5. KITTI 数据集最主要用于评估哪种深度估计场景?

单选题 · mid

  • A.室内机器人导航场景深度
  • B.无人机航拍场景深度
  • C.车载双目相机的街景深度← 正确答案
  • D.卫星遥感影像的深度

答案:C。KITTI 由车载双目相机在德国卡尔斯鲁厄街头采集,包含道路、车辆、行人等典型驾驶元素,是自动驾驶场景最常用的深度估计基准。NYU Depth v2 才是室内场景,B、D 也不是 KITTI 的定位。选数据集就像考试选科目,驾驶题得用驾驶卷子考。

Q6. 阈值准确率 δ1 中"1.25"的含义是?

单选题 · easy

  • A.模型准确率需比基线高 1.25 倍
  • B.预测深度的绝对误差小于 1.25 米
  • C.预测与真值的比值范围允许误差← 正确答案
  • D.深度误差的像素数少于 1.25 个

答案:C。δ1 要求预测与真值的比值 max(d/d*, d*/d) < 1.25,即误差控制在 25% 以内(两个方向都算),不是固定米数、像素数或倍数。这就像考试允许 25% 的容错率,超过就判不合格——它是比例容差,而不是绝对容差。

Q7. Depth Anything 提升泛化能力的关键策略是?

单选题 · hard

  • A.在仿真引擎中渲染无限真值数据
  • B.依赖激光雷达扫描稠密真值标注
  • C.人工逐像素标注百万张图片
  • D.用大模型生成伪标签进行自蒸馏← 正确答案

答案:D。Depth Anything 的核心是伪标签自蒸馏:先用一个较强的教师模型在千万级无标注图片上生成相对深度伪标签,再用这些伪标签蒸馏训练学生模型,让模型学到开放世界的深度先验。仿真渲染、激光雷达真值、人工标注都不是它的主要数据来源。

Q8. 属于单目深度估计可用线索的有哪些?

多选题 · mid

  • A.近大远小的相对尺寸关系← 正确答案
  • B.物体之间的前后遮挡关系← 正确答案
  • C.左右图像的视差信息
  • D.阴影与纹理的渐变规律← 正确答案

答案:ABD。单目靠一张图里的环境线索推断远近:相对尺寸、遮挡、阴影、纹理渐变、大气透视等都是有效线索;而视差是双目系统才有的信息,属于两个相机配合的产物。闭上一只眼接球靠的就是 A、B、D 这类经验线索。

Q9. 深度估计工程落地常见的难题有哪些?

多选题 · hard

  • A.弱纹理墙面的匹配空洞← 正确答案
  • B.镜面玻璃等反光材质失效← 正确答案
  • C.模型跨场景泛化能力不足← 正确答案
  • D.深度图边缘无需后处理优化

答案:ABC。弱纹理导致立体匹配找不到对应点(空洞),反光材质会破坏光度一致性假设,跨场景(室内→室外、白天→夜间)泛化差也是落地痛点。D 说反了——深度图边缘恰恰经常模糊,需要梯度损失、边缘感知后处理来优化。

Q10. 下列哪些应用依赖于深度估计提供的距离信息?

多选题 · easy

  • A.自动驾驶前车测距防碰撞← 正确答案
  • B.AR 虚拟家具按真实比例摆放← 正确答案
  • C.机器人抓取的目标位姿计算← 正确答案
  • D.JPEG 图像压缩的量化编码

答案:ABC。自动驾驶、AR 摆放、机器人抓取都需要知道“物体离我多远”才能决策;JPEG 压缩只关心颜色与频率信息,与三维距离无关。这三类应用就像球场上不同位置的球员——后卫要测距、前锋要测距、教练也要测距,但记分员(JPEG)只看有没有得分,不关心距离。