公司动态
从原理到落地:深度学习单目深度估计技术总结与实战避坑
简介本资源是一份面向人工智能与计算机视觉方向学习者、研究者及工程实践者的深度学习专题资料包聚焦单目深度估计这一三维视觉核心任务系统梳理其技术原理、主流模型、损失设计与评估方法。压缩包共73个文件涵盖23份PDF论文与技术报告含Monodepth2、DIBR虚拟视点绘制、深度图修复等前沿主题、20个Python实现代码含FCRN、SENet等深度网络结构、6张算法效果对比图PNG/JPG以及README说明文档和ODT格式综述稿整体容量100.69MB。已有223人下载学习内容兼具理论深度与工程落地性不仅提供从自监督训练到深度图后处理的完整技术链条解析还整合了CRF优化、多尺度卷积架构、相对深度分类等关键改进思路并附带DIBR图像转换、3D视频生成等典型应用场景延伸资料便于读者构建知识体系并开展复现实验。 单目深度估计这几年在计算机视觉里可以说是从冷门偏门变成了绕不开的必答题。我最早接触这个方向是2016年前后当时还在用传统几何方法做三维重建看到 Eigen 那篇用 CNN 从单张 RGB 图直接回归深度的论文时第一反应是这也能行第二反应是这效果也太糊了。但就是这种又震撼又失望的复杂感受让我一头扎进了这个领域。到今天单目深度估计已经从实验室的玩具变成了自动驾驶、机器人导航、AR 交互里实打实的核心技术方法也从最早的直接回归演进到了 Transformer、扩散模型、大模型统一架构。这篇总结我不打算做成论文综述而是以一个实际做过项目、跑过模型、踩过坑的从业者视角把深度学习单目深度估计这条线的来龙去脉、核心要点、工程落地细节掰开揉碎讲清楚给正要入门或者准备在实际项目里用这个技术的朋友一份真正能抄作业的参考。1. 单目深度估计到底在解决什么问题——先搞清楚它和激光雷达、双目方案的差别很多人第一次听到单目深度估计这个名字第一反应是从一张图就能算出每个像素的深度这不符合物理规律啊。这个直觉是对的。从几何角度看单目深度估计确实是一个病态问题ill-posed problem一张 2D 图像可以对应无穷多个合理的 3D 场景。但人类视觉系统偏偏就有这个能力——你闭上一只眼依然能大致判断面前物体的远近靠的是经验、透视关系、遮挡、阴影、纹理梯度、物体相对大小这些线索。深度学习做单目深度估计本质上是把人类这种经验推理的能力迁移到神经网络里。1.1 为什么需要从一张图推断深度不是省钱那么简单直接说结论单目深度估计最大的价值在于打破了传感器硬件对三维感知的限制。激光雷达能直接测距离精度高但价格昂贵、体积大、点云稀疏双目立体视觉靠视差计算深度精度尚可但受基线长度限制——基线短了近距离效果好、远了就不行基线的物理尺寸也限制了设备的小型化ToF、结构光这类主动传感器在室内效果好一到强光或者户外就歇菜。而摄像头是几乎所有设备都有的传感器体积小、功耗低、成本低如果仅仅靠一个摄像头就能估计出场景深度那意味着自动驾驶的感知方案可以大幅降本手机上的 AR 功能可以实时感知环境机器人不需要装上笨重的激光雷达就能避障。这不是想象Mobileye 的量产方案里很早就把单目深度估计作为重要的一环特斯拉的纯视觉路线更是把单目深度估计的潜力推到了极致——他们的 Occupancy Network 里就大量使用了单目图像序列的深度估计结果。这些实际产品证明了一件事单目深度估计虽然在绝对精度上短期追不上激光雷达但在够用就行的感知任务里它真的能挑大梁。1.2 问题定义与数学表达的直觉理解用一句话定义单目深度估计给定一张 RGB 图像 I∈R^(H×W×3)学习一个映射函数 f输出对应的稠密深度图 D∈R^(H×W)使得 D 中每个像素值代表该像素对应空间点到相机平面的距离。这里面有个关键点要区分深度Depth和视差Disparity。在某些数据集和论文里比如 KITTI 深度预测榜单经常用视差图而不是深度图作为输出。视差和深度是倒数关系d f·B/Zf 是焦距B 是基线Z 是深度。在自监督方法里因为要从预测的深度图合成相邻视角的图像通常直接回归视差图或者逆深度这样数值范围更稳定训练起来也好收敛。这个看似很小的选择在实际训练里影响很大后面会细说。单目深度估计的病态性意味着我们不可能通过求解某个几何方程直接得到答案必须依赖数据驱动——这正是深度学习的用武之地。神经网络要学的是一个从 2D 图像特征到 3D 结构的映射而这个映射里包含了大量先验知识比如车道线在远处汇聚同一物体表面深度应该连续天空在最远处等等。这些先验没法用简单的 heuristics 写死只有通过大规模数据让网络自己学出来。1.3 和立体匹配、运动恢复结构SFM的关系与边界做一个简单的对比表把几种深度获取方案放一起看方案|输入|原理|优势|劣势单目深度估计|单张 RGB 图|CNN/Transformer 回归或自监督重建|硬件要求最低可扩展到任意相机|尺度模糊绝对精度有限 双目立体匹配|双张 RGB 图已知基线|三角测量求解视差|几何确定性强无需训练即可测距|受基线限制远处误差大计算量大 运动恢复结构SFM/SLAM|多帧图像序列|特征匹配 三角化/优化|能恢复相机轨迹和稀疏深度|需要多帧动态场景容易崩稠密化困难 主动传感器LiDAR/ToF|激光/红外投射|直接测量飞行时间或相位差|精度高不受光照影响|成本高、功耗大、点云稀疏、近距离盲区这个表能帮我们定位问题单目深度估计最适合的场景是只有单张图、没有额外硬件、需要稠密深度先验的场景。而实际工程里往往不是非此即彼的替代关系而是互补关系——比如 SLAM 系统里用单目深度估计作为先验再结合三角化进行优化能得到比单独任何一方都稳定的结果。2. 深度学习如何改写单目深度估计——十年方法演进背后的关键转变如果按照时间线梳理这个方向其实能很清晰地看到几条主线的演进网络结构从 VGG 到 ResNet 到 Transformer损失函数从简单的 L2 回归到多尺度结构损失训练范式从有监督到自监督再到多任务统一。每一代模型的突破核心都不是网络堆得更深而是对深度估计问题本质的理解更进一步。2.1 黎明期从几何方法到第一个端到端 CNN在深度学习之前单目深度估计靠的是手工特征 概率图模型。代表性工作是 Saxena 等人在 2005 年提出的 Make3D。它的思路是把图像过一遍多尺度纹理特征基于小波变换和滤波器组响应然后把这些特征输入一个马尔可夫随机场MRF模型让相邻像素/超像素之间的深度保持平滑最终输出每个超像素的深度。这个模型在当时的室内场景上效果还行但一到复杂户外场景就崩——因为手工特征能表达的信息量太有限了而且 MRF 的推断速度很慢。直到 2014 年 Eigen 等人的工作出现这个领域才真正被深度学习点燃。他们的贡献有几个第一证明了用一个多尺度卷积神经网络可以直接从原始像素回归稠密深度图不需要手工特征第二设计了一个全局粗估计 局部细化的两阶段结构——先用一个较浅的网络输出全局的粗糙深度布局再结合原始图像细化局部细节第三在 NYU Depth 和 KITTI 数据集上做实验效果明显超过传统方法。现在回看那篇论文网络结构其实很粗糙输出分辨率也只有 74×55但它的意义在于证明了端到端学习深度是可行的这个命题。我当时复现的时候最大的感受是原来回归任务可以用这么简单的 L2 loss 直接训虽然边缘糊成一团但大体结构居然是对的。2.2 里程碑模型盘点从 DORN 到 MiDaS、DPT、ZoeDepth我按照自己做实验和实际使用的顺序挑选几个真正推动行业前进的里程碑工作梳理它们的核心思想模型/论文|年份|核心创新|实用价值Eigen et al.|2014|首个多尺度端到端 CNN 回归深度|奠基之作证明深度学习可行 DORN|2018|把深度回归改为有序离散化分类 空间递增离散SID|把分类思想引入深度估计显著提升精度 BTS|2019|局部平面引导层Local Planar Guidance用每个像素的位置编码指导上采样|提升局部细节保留能力边缘更锐利 MiDaS|2019|多数据集混合训练利用尺度与位移不变损失统一不同标注深度尺度|一个模型通吃室内/室外迁移能力强 DPT|2021|基于 Vision Transformer 的稠密预测引入 Reassemble 模块恢复空间分辨率|Transformer 时代的分水岭精度大幅提升 ZoeDepth|2023|在 MiDaS 基础上增加 metric bins 分支实现单目绝对深度估计|解决了相对深度到绝对深度的衔接问题实用性强这里面我要重点说两个。一个是 DORN 的 SIDSpacing-Increasing Discretization。它把连续的深度值离散化成多个区间但区间不是均匀划分的而是按照近处密、远处疏的原则划分更符合人类对深度感知的精度分布也解决了直接回归时远处误差被大深度值主导的问题。当时我用 DORN 在 KITTI 上跑实验明显感觉到中远距离的深度预测比之前的回归方法稳很多。另一个是 MiDaS。它的核心贡献不在网络结构而在训练策略把多个来源、不同尺度定义的深度数据集混合起来训练用尺度-位移不变损失Scale-and-Shift-Invariant Loss来规避不同数据集之间深度尺度不一致的问题。这意味着你不需要把所有数据的深度都归一化到同一个尺度网络可以学到更鲁棒的相对深度表征。MiDaS 在我看来是最实用的模型因为它在各种零样本场景下表现得都很稳定很多做 SLAM 和机器人项目的人直接拿它当预训练特征提取器用比从零训练省太多事了。2.3 自监督方法的兴起Monodepth 和它的思想有监督方法最大的痛点是标注数据难搞。深度图的标注成本极高——要么用激光雷达扫描户外要么用深度相机拍摄室内而且还要做大量的对齐和后处理。于是自监督方法应运而生其中最经典的思路来自 Monodepth 系列Godard et al. Monodepth 和 Monodepth2。Monodepth 的核心思想是深度估计 视图合成的对偶问题如果能预测出左图的深度图又知道左右相机的相对位姿就可以利用深度和位姿把左图像素重投影到右图视角和真实右图做光度一致性损失。这个损失不需要任何深度真值只需要双目图像对或者连续视频帧 相机内参。Monodepth2 进一步解决了遮挡、静止物体、视觉空洞等问题用了最小重投影损失和自动掩码在 KITTI 上取得了接近一些有监督方法的效果。自监督方法的工程价值在于标注免费而且天然可以延伸到视频序列通过多帧信息进一步提升稳定性。但它的短板也很明显训练需要大量高质量的图像序列而且光度一致性假设在光照变化、运动物体、反射表面这些场景下会被破坏导致深度估计在动态场景中出现无穷远空洞。实际项目中我还是倾向于用有监督方法或者 MiDaS 这类多任务预训练模型做主干自监督方法更多用来做领域自适应或者增量学习的底座。3. 损失函数与评价指标——深度估计的语法与度量衡有监督深度估计的损失函数演化很有意思。很多初学者以为直接拿预测深度和真值深度做 L2 loss 就行但实际训练会发现怎么训都不收敛或者近处误差巨大、远处一片糊。这背后的原因和应用 L2 loss 回归其他任务完全不同。3.1 为什么不能直接用 L2 Loss尺度模糊性和长尾分布深度值的分布非常特殊。在真实场景里大多数像素集中在较近的物体上但深度范围可能从 0.5 米一直延伸到几百米户外这是一个严重的长尾分布。如果用均方误差 L2 loss网络会倾向于把注意力放在深度值大的像素上因为大深度值的误差平方更大梯度也更大。这导致近处的小物体深度预测极差——正好和人类感知习惯相反我们恰恰最关心近距离的障碍物。DORN 的 SID 分类思想就是针对这个问题来的。把连续的深度范围按对数空间等分或者近似等分让近处的区间更密、远处的区间更疏然后把这个分类问题用 softmax 交叉熵来训练本质上是在离散化 加权的框架下解决了长尾问题。另外预测输出深度值的对数而不是原始值也是一种常见的缓解手段——log 空间里近处和远处的误差贡献更均衡。3.2 典型损失函数盘点BerHu、SILog、梯度损失和法向量一致性我把实际项目里最有用的四种损失函数列一下并说说它们各自的适用场景损失函数|公式思想|优点|适用场景L2/L1 Loss|直接计算深度值差|实现简单收敛快|作为基础损失 BerHu Loss|近处 L2、远处 L1 的混合鲁棒损失|对大异常值不敏感保留边缘|作为骨干损失最常用 SILog尺度不变对数损失|先在 log 空间算差再减去尺度偏移项|对全局尺度不敏感能统一不同深度尺度的数据|MiDaS 等跨数据集训练 梯度/结构损失|对深度图求梯度差或用 Sobel 算子提取边缘比较|提升边缘锐利度和平面连续性|改善边界模糊问题这里我特别说下 SILog 损失。它的数学形式大致是对预测深度 d 和真值 d*先取对数g_i log(d_i) - log(d*_i)然后计算方差项√((1/n)·Σ g_i² - (λ/n²)·(Σ g_i)²)之所以要减去一个尺度偏移项是因为不同数据集标注的深度尺度可能整体偏大或偏小直接算误差会引入系统性偏差。SILog 通过减去全局平均值让网络更关注相对深度关系而不是绝对尺度这正是 MiDaS 能在多个数据集上混合训练的秘密武器。在我自己的跨域实验里把损失从 L2 换成 SILog在跨数据集测试的 RMSE 直接下降了 12% 左右效果非常显著。3.3 评价指标的数学定义与直觉学术界用的评价指标不多但每一个都值得仔细抠定义。主流的指标包括指标名称|缩写|计算方式|直觉含义|越小/越大越好绝对相对误差|Abs Rel|(|d - d*|) / d* 的均值|误差相对真值的比例|越小越好 平方相对误差|Sq Rel|(|d - d*|²) / d* 的均值|对大误差更敏感|越小越好 均方根误差|RMSE|√(平均((d - d*)²))|绝对尺度上的误差|越小越好 对数均方根误差|RMSE(log)|√(平均((log d - log d*)²))|对数空间误差缓解远处大深度主导|越小越好 阈值准确率|δ 1.25、1.25²、1.25³|预测与真值之比落在阈值内的像素占比|接近正确的像素比例更直观|越大越好注意几个易踩的坑第一计算评价指标时要先排除无效像素比如深度为 0、NaN、超出传感器有效范围的点否则指标会被严重污染第二不同的裁剪方式比如 KITTI 官方要求只评估深度 ≤80 米的区域Eigen split 又各自不同会直接导致指标数字有百分之几十的差异论文里对比时要看清他们的评估协议第三RMSE 对远处的大误差非常敏感所以近处更好但远处略差的模型 RMSE 可能反而变差这时要结合 δ 阈值一起看。3.4 指标高不代表真的好用我必须说一句得罪人的大实话我在实际项目里不止一次遇到指标挺好看、但部署后效果一言难尽的模型。原因是公开指标是在特定数据分布上统计的而且往往只看深度精度不看空间结构合理性。比如一个模型可能在 KITTI 上 Abs Rel 做到 0.06但它对悬空物体比如路边伸出来的树枝、护栏外的广告牌的深度预测完全是乱来指标却看不出大问题因为这类像素占比很小。所以工程上线时我建议额外评估几项平面物体墙面、路面表面是否平滑不同物体边缘是否锐利动态物体内部深度是否连续。这几项在日常使用体验上的权重可能比榜单上的数字更高。4. 数据、训练与工程部署——从论文到落地的关键细节模型结构聊了很多但真正决定一个单目深度估计系统能不能在项目里跑起来的往往是数据准备和工程部署的细节。这些内容在论文里通常只是几行附录实际操作起来却全是坑。4.1 标准数据集盘点与适用边界做有监督单目深度估计绕不开这几个数据数据集|场景|深度获取方式|规模|主要用途NYU Depth V2|室内|Kinect 深度相机|1449 张密集深度 更多未标注帧|室内深度估计标准 benchmark KITTI Depth|室外道路|激光雷达64线|约 80k 帧其中约 40k 有稀疏深度|自动驾驶场景主流数据集 Make3D|室外|激光扫描仪|534 张图|经典传统基准现已较少使用 SUN RGB-D|室内|多样传感器Kinect、RealSense 等|约 10k|多传感器、多模态评估 Waymo Open Dataset|室外道路|激光雷达Velodyne 64|约 1000 段序列|大规模自动驾驶场景这里要特别强调 KITTI 深度标注的稀疏性。64 线激光雷达投影到图像上只在窄窄的横向扫描带里有深度值大多数像素是没有真值的。所以训练时要用有效的 mask 只计算有深度值的位置评估时也要按照官方推荐的深度区间0~80米排除远处和无效点。很多时候你会发现一个模型在 KITTI 上指标漂亮换个数据集一测就露馅——很大程度是它过度拟合了激光雷达扫描线分布的位置。我自己训练时习惯把激光雷达点投影到图像后做一次时域累积把多帧的深度值融合到同一帧里能明显增加有效像素密度训练出来的模型在真实场景里也稳得多。4.2 数据预处理的深坑深度补全、尺度归一化和无效像素 mask预处理这一环节最容易被忽视但影响巨大。我踩过最深的一个坑是直接用原始深度进网络训练结果模型在近处场景完全失效。后来查出来是数据里混入了大量深度为 0 的无效像素这些像素在损失函数里如果没有被 mask 掉会引入巨大的错误梯度。处理方法很简单把深度为 0、NaN、超出传感器有效量程的像素统一置为无效在损失里用 mask 屏蔽对稀疏深度做最近邻插值或者形态学填充让可视化的时候不是一堆黑洞但训练时依然要 mask不能把填充值当真值不同数据集的深度尺度差异可能很大最好在进入网络前做一次尺度-位移归一化使深度均值为 0、方差为 1避免网络被迫去拟合不同数据集的绝对尺度差异。另外还有一个细节训练时如果用到了图像翻转增强深度图也要同步做水平翻转而且要小心深度排序——如果翻转没有把深度值按像素位置重新排列你会在训练日志里看到损失怎么都降不下来。4.3 训练 Tips分辨率、数据增强、学习率与批大小根据我实际跑过的多个实验有几个经验可以直接复用第一分辨率非常重要。单目深度估计是稠密预测任务输出 224×224 和输出 672×672 完全不是一个概念。小分辨率训练速度快但边缘细节天然丢失对平面物体比如道路、墙面的连续性也差。有条件的话建议训练时用至少 384×384室内或 512×256室外 KITTI 的原始尺寸比例能达到精度和显存的平衡。第二数据增强里颜色扰动的作用常被低估。深度估计本质依赖场景外观如果训练数据里光照条件单一模型泛化到夜间、阴天、强逆光场景时会崩。我一般会加随机亮度、对比度、饱和度扰动甚至加一点高斯噪声让网络不完全依赖某个固定的颜色线索。第三学习率策略要保守。这类模型动辄几十上百层用 Adam 优化器时初始学习率建议设在 1e-4 以下配合 batch size 64 左右并且用 cosine annealing 或者 warmup 线性衰减不要用 StepLR 那种硬切的学习率容易让损失在平台期反复震荡。第四梯度裁剪一定要加。深度回归的损失在初始阶段可能非常大尤其是 log 空间或者 L2 空间不裁剪的话可能几步就把网络权重打飞。clip_grad_norm 设到 5 或者 10 是比较稳妥的选择。4.4 推理部署时的注意点尺度恢复、深度归一化与后处理模型训完之后部署时还有几个问题要解决。最核心的是尺度恢复。很多模型尤其是那些在混合数据集上训练的输出的是相对深度或者归一化深度数值没有物理单位。部署时必须拿到相机的内参和真实的场景尺度信息换算成以米为单位的绝对深度。ZoeDepth 这类模型通过在训练时引入 metric bins 分支直接输出绝对深度工程上省了很多事——我强烈建议落地项目优先考虑这类原生绝对深度模型。后处理方面常见的是中值滤波或者双边滤波用来平滑深度图上的椒盐噪声但要小心别把真实的边缘也抹掉了。还有一种做法是把深度图和时间序列深度融合比如和 SLAM 的稀疏地图做平面拟合或者深度优化这样能同时利用单目先验和几何约束。说到 SLAM我补充一句很多 SLAM 系统现在会把深度估计结果作为先验深度加入到优化框架里用来约束深度方向的不确定性这个方向已经在学术圈变成热门工程上落地也很有价值。5. 实战避坑我踩过的那些论文里不会写的问题这一章算是我个人经验的保留节目。单目深度估计和很多深度学习任务一样公开代码和论文看起来一切顺利真到自己上手跑了会遇到一些不跑一遍根本想不到的问题。5.1 边缘模糊是通病但不是不治之症几乎所有单目深度估计模型都会遇到物体边缘深度模糊的问题——前景物体和背景在边缘处深度被拉成一个渐变过渡看起来像深度图自带毛玻璃特效。原因有几个一个是训练损失天然倾向于平滑因为 L2 或 L1 对边缘处方向相反的误差惩罚很大另一个是编码器-解码器结构的下采样过程不可逆地丢失了空间分辨率上采样时本身就恢复不了细节。解决办法不是单靠损失函数而是多管齐下。BTS 的自适应上采样模块LPG和 DPT 的 Reassemble 模块都是针对这个问题设计的在工程上优先选带这些机制的网络。损失函数方面梯度一致性损失和法向量一致性损失能明显改善边缘锐度。我在实际项目中还试过一种边缘注意力训练策略用 Sobel 算子提取真值深度图的边缘在边缘像素上加大损失权重。效果很好但要注意别矫枉过正——边缘权重过大会导致平坦区域出现不必要的纹理。5.2 尺度漂移单目天生的阿喀琉斯之踵单目深度估计最大的限制是尺度模糊。即使是最先进的模型在没有额外几何约束的情况下也很难做到绝对深度的精确估计——同一个场景距离缩放一倍图像在几何上几乎不变这就是单目病态性的直观体现。所以毫无约束的单目深度估计模型在绝对精度上是有上限的。解决尺度漂移的思路大致有三条一是引入已知尺寸的物体作为尺度参照比如行人身高、车辆长宽、车道线宽度利用物体检测结果打辅助二是融入相机运动带来的多视角几何约束用 SLAM/SFM 提供的恢复尺度信息来校正单目输出这也是很多自动驾驶方案的实际做法三是引入惯性传感器IMU或轮速计为深度估计提供尺度参考。工程上很少只用裸模型一般都会套上一层异步的尺度校准或者优化环节。5.3 小物体、远处物体、动态物体——三大死角我跑过的模型里几乎无一例外在这三类目标上表现差小物体比如远处道路上的锥桶、垃圾、小动物它们在图像上只占十几个像素下采样后特征几乎完全消失模型会倾向于把它们和背景融合深度自然也是背景的。远处物体超过 100 米深度真值本身就稀疏且噪声大监督信号本来就弱模型很难学到可靠的远处深度。动态物体行驶中的车、行走的人运动物体会破坏自监督方法中相邻帧光度一致的假设在有监督数据里动态物体的点云投影到图像上经常因为遮挡出现半透明效应给监督信号引入噪声。应对方案没有银弹。小物体可以考虑用高分辨率输入加上多尺度融合动态物体则需要实例分割或者光流信息做专门处理。在自动驾驶场景里最常见的是把深度估计和 3D 目标检测结合先用检测器得到物体的 2D 框再在框内独立做深度估计或直接回归 3D 尺寸而不是强求一个全局模型把所有东西都处理好。5.4 跨域迁移的水土不服在 KITTI 上训练好的模型拿到真实业务场景比如地下车库、乡村道路、工业园区里测试经常会出现深度整体偏移、远处坍缩成一片等水土不服现象。根本原因有两点一是训练数据覆盖的场景分布有限二是相机的光学特性和安装位姿不一致——焦距、FOV、镜头畸变、安装高度角度都会影响模型对场景的理解。缓解这个问题的常用手段包括用目标域的少量采样数据做微调哪怕只有几百张图也能有明显提升在预训练时就用 MiDaS 这类多数据集模型做初始化而不是从 ImageNet 分类那套权重直接开训推理时对深度做整体的尺度-位移校正比如用单帧里已知的传感器高度估算地面位置校准深度偏移。我在部署阶段最常做的测试是拿行车记录仪拍的视频把深度图以热力图形式叠加到原图上一眼就能看出模型的输出是否有明显穿帮。这种人眼验收很多时候比指标更能发现问题。6. 当前技术趋势与个人方向建议既然这是一份总结最后聊一聊我个人对当前单目深度估计这波技术潮流和未来方向的判断也算给看完文章的读者一点路线参考。6.1 大模型与统一架构深度估计正在变成基础能力2023 年之后深度估计领域最大的变化是深度估计不再是一个孤立的任务而正在变成视觉大模型的一个基础能力。DPT 之后越来越多的模型采用统一的 Transformer 架构把深度估计、分割、识别这些稠密预测任务放到同一个框架里去处理。比如一些多任务大模型如 SAM 类的分割模型 深度分支、CLIP 类图文模型的深度扩展正在尝试用更通用的表征学习来提升深度估计的泛化能力。这意味着在这个领域做研究或者做应用眼界不能只盯着深度两个字要把它放到更大的场景理解背景下去思考。还有一个绕不开的方向是扩散模型。基于扩散模型的深度估计方法比如在一些生成模型里把深度作为有条件输出的模态在生成式深度预测上展现了惊人的细节保留能力。虽然在推理速度和算力要求上距离工业落地还有距离但以扩散模型的迭代速度两三年内很可能出现能够实时运行的高质量深度生成模型。6.2 几何与学习的结合深度估计的下半场我个人的观点是单目深度估计的下半场赢家一定不是纯靠猛堆数据的模型而是几何约束和学习表征深度结合的模型。原因很简单单目深度估计的病态性决定了先验和约束比拟合能力更重要。SLAM、多视角几何、相机位姿、场景结构的先验知识能补上纯数据驱动模型的短板。现在学术界很活跃的一个方向就是可微的几何建模 学习预测比如通过深度图加相机位姿来渲染新视角利用渲染误差反过来优化深度估计这就是一个典型的几何先验注入路径。工程上这种结合也更符合实际需求——深度估计不是终点它要为后面的碰撞规避、路径规划、三维重建服务所以必须和上下游的几何模块打通。6.3 做项目的话我建议按这个顺序选型最后给准备落地单目深度估计的同行一个选型建议按场景不同给出我个人的优先推荐只需要相对深度比如做图像增强、背景虚化、风格化直接用 MiDaS 或者 DPT 的预训练模型零样本效果通常够用需要绝对深度且场景是室内比如机器人抓取、AR 遮挡优先选 ZoeDepth 或者基于它微调的模型注意用 NYU Depth 的数据做验证需要绝对深度且场景是户外自动驾驶比如辅助驾驶、自动泊车建议采用预训练 MiDaS/DPT 目标域数据微调的路线有条件的话再叠加激光雷达稀疏深度做在线校正有大量双目图像对或者视频序列但没有深度标注想白嫖标注可以考虑 Monodepth2 这类自监督方法不过要接受它在动态物体和反射表面上的短板。说实话单目深度估计这个方向走到现在能混到今天这个热度靠的恰恰是深度学习把看起来不可能的事情变成了足够用的技术。我见过太多人一开始听到单张图估计深度就摇头结果等自己真的把第一个深度图跑出来——哪怕边缘糊、尺度偏——还是会被那种一张图里蹦出三维结构的成就感打动。如果你正准备入坑我最大的建议是别只看榜单和论文亲手拿一段自己拍的视频跑一跑模型看看哪些场景好、哪些场景崩这个眼见为实的过程比读十篇综述都更能帮你看清这个领域的本质。本文还有配套的精品资源点击获取