1. 深度估计概述:什么是深度估计?为什么ADAS需要它?单目与双目的核心区别
1.1 什么是深度估计?
深度估计,说白了就是让摄像头学会「看距离」。
你想想看,人眼为什么能判断前方物体有多远?因为我们有两只眼睛,大脑通过左右眼看到的微小差异来算距离。这就是立体视觉的基本原理。
在ADAS里,深度估计就是让算法从图像中恢复出每个像素到相机的距离。嗯,这里要注意——它不是直接测量,而是通过图像特征来推算。
我个人习惯把深度估计分成两类:
- 稀疏深度估计:只输出少数关键点的深度值,比如车道线、障碍物边缘
- 稠密深度估计:给每个像素都分配一个深度值,像一张深度图
我在项目中遇到过,很多刚入行的同学以为深度估计就是「测距」,其实它更接近「推理」。举个例子,一张图片里有个行人站在车前面,算法不仅要认出他是人,还要判断他离我们多远——这背后涉及几何、语义、甚至运动信息。
核心要点:深度估计不是传感器直接测量的结果,而是从图像中「计算」或「学习」出来的。这是它和激光雷达最本质的区别。
1.2 为什么ADAS需要深度估计?
这个问题其实很直接——没有距离信息,ADAS就是个瞎子。
你想想看,AEB(自动紧急制动)要判断要不要刹车,它得知道前车离你多远、相对速度多少。LKA(车道保持)要判断车辆是否偏离,它得知道车道线在三维空间中的位置。这些全都依赖深度信息。
我总结了一下,ADAS对深度估计的需求主要集中在几个场景:
- 障碍物检测与测距:行人、车辆、路障的距离判断
- 可行驶区域分割:区分路面和障碍物,需要深度辅助
- 3D目标检测:从2D图像中恢复物体的三维位置和朝向
- SLAM与定位:构建环境地图,需要深度来估计尺度
- 路径规划:知道前方地形起伏,才能规划安全路径
我曾经在一个项目中踩过坑——只用单目做AEB,结果在雨天场景下频繁误触发。后来分析发现,单目深度估计在低纹理区域(比如湿漉漉的路面)精度下降严重,导致距离判断出错。从那以后,我对深度估计的鲁棒性要求就特别高。
避坑指南:我曾经以为深度估计精度越高越好,后来发现实时性才是ADAS的第一优先级。一个200ms延迟的深度图,再精确也没用——车已经撞上去了。
1.3 单目与双目的核心区别
好,这是今天最核心的部分。单目和双目,到底差在哪?
我直接说结论:双目靠几何,单目靠学习。
| 对比维度 | 单目深度估计 | 双目深度估计 |
|---|---|---|
| 基本原理 | 从单张图像中学习深度线索 | 利用左右视图视差计算深度 |
| 硬件需求 | 单个摄像头即可 | 需要两个标定好的摄像头 |
| 深度尺度 | 无法恢复绝对尺度(尺度模糊) | 可以恢复绝对尺度 |
| 精度上限 | 受限于训练数据和场景泛化 | 受限于基线长度和匹配精度 |
| 计算复杂度 | 较低,适合嵌入式部署 | 较高,需要立体匹配 |
| 弱光表现 | 依赖纹理,弱光下降明显 | 同样依赖纹理,但可借助结构光 |
为什么会有这些区别?我展开说说。
单目深度估计,说白了就是「猜」。算法从一张图里找线索——比如物体大小、遮挡关系、纹理梯度、大气透视等。但这些线索都是相对的,没法告诉你「这个行人离我5米还是10米」。所以单目深度估计天然存在尺度模糊问题。
我记得有一次做单目深度估计的部署,模型在训练集上效果很好,但换到另一个城市的数据集上,距离全部偏大。后来发现是因为训练数据中车辆的平均尺寸和测试集不同——单目模型把「大车」当成了「近车」。
双目深度估计,原理就扎实多了。两个摄像头同时拍,左右眼看到的同一个点在图像上有位置差——这就是视差。通过三角测量,直接算出距离。公式很简单:
深度 Z = (基线长度 B × 焦距 f) / 视差 d
你看,这个公式里没有需要「学习」的参数。只要标定好相机、匹配好左右图的对应点,深度就出来了。这就是为什么双目能恢复绝对尺度。
但双目也有自己的痛点:
- 基线限制:两个摄像头距离越远,测距越准,但车装不下
- 匹配难题:低纹理区域、重复纹理、遮挡区域,匹配容易出错
- 标定要求高:左右相机需要精确标定,温度变化都会影响
我的经验:在实际ADAS项目中,我建议不要非此即彼。单目和双目各有优劣,很多量产方案是「双目为主+单目为辅」的融合策略。双目提供可靠的绝对深度,单目在双目失效时做补充。
1.4 一个小总结
嗯,到这里你应该对深度估计有了整体认识。
我再说一个个人观点:深度估计的本质是「从2D到3D的桥梁」。没有它,摄像头就只能看到一张平面图片,无法理解三维世界。而ADAS恰恰需要的是三维理解——知道物体在哪、有多远、往哪运动。
单目和双目,就像两个性格不同的工程师:
- 单目聪明但爱「猜」,依赖经验(数据)
- 双目严谨但「笨」,依赖工具(几何)
你想想看,如果让这两个人合作,是不是比单打独斗强得多?
下一章,我会深入讲单目深度估计的具体方法——从传统几何线索到深度学习,再到我在实际项目中踩过的那些坑。咱们到时候细聊。