返回专辑
·Johan·3 分钟阅读

单目深度:别当激光用

单目 depth 网络输出多为 relative / up-to-scale;米制精度、边缘对齐和动态物体与 LiDAR 不是一类问题,上线前要做尺度对齐。

单目深度:别当激光用

1. 看起来神奇,直到拿它规划抓取

单目深度网络输出边缘模糊、尺度漂移、行人阴影被当成静态结构——没校准尺度前,我不当唯一避障源。产线用相对深度直接算净空距离,机械臂撞框不是模型「不准」,是用错了输出类型。单目深度看起来能替代激光雷达,直到你拿它做米制路径规划。

2. 输出类型要分清

相对深度:逆深度比例对,米制不对。仿射不变深度:差一个尺度加平移。米制深度:需激光雷达监督或后处理标定尺度。OpenCV 传统立体视觉有米制:半全局块匹配得视差,重投影到三维输出 (基线准确时)。单目神经网络无额外先验无米制——常见网络输出逆深度,后处理 拟合。

python
stereo = cv2.StereoSGBM_create(minDisparity=0, numDisparities=128, blockSize=5)
disp = stereo.compute(left, right).astype(np.float32) / 16.0
points = cv2.reprojectImageTo3D(disp, Q)  # Q 来自 stereoRectify

MiDaS、DPT 类网络输出逆深度,语义是「远近排序」而非米制距离。部署前必须明确网络训练时的监督类型,别凭界面可视化「看起来有深度」就上产线。

3. 尺度对齐

已知相机高度、平面假设、或稀疏激光雷达点,做最小二乘拟合:

同一场景跑立体匹配与单目深度,在有效掩码 上拟合尺度平移。动态物体从 剔除再拟合,否则尺度被拖偏。每帧尺度飘说明网络在域偏移——别指望一次离线标定管全程。

同一帧可用 cv2.norm(d_mono_scaled - d_stereo, cv2.NORM_L1) 在有效掩码上统计对齐误差,作为在线监测指标。

4. 失效场景与融合

透明反光、训练域外纹理、纯旋转(无视差信号)、动态物体(静态世界假设)都会让单目深度失效。融合时深度图加立体或激光雷达卡尔曼滤波;置信度掩码来自网络熵或左右一致性(若有)。单目深度帧间闪烁大,光流 warp 上一帧深度做一致性检查可掩蔽不稳定区域。

6. 时序一致性与融合策略

单目深度帧间闪烁大,不能单独驱动紧急制动。光流 warp 上一帧深度做一致性检查可掩蔽不稳定区域;无真值时用左右目(立体)或激光雷达稀疏点当锚。融合时深度图加立体或激光雷达卡尔曼滤波,置信度掩码来自网络熵或左右一致性。别把 relative depth 当激光避障唯一源——至少两路几何交叉验证。

7. 案例:抓取深度误用

装配线用单目深度规划抓取高度,玻璃台面反射导致深度图在台面处塌陷,机械臂下插过深。根因是把相对深度当米制用,且未 mask 高反光区域。换立体相机作参考路,离线拟合尺度平移后,净空误差从二十厘米降到三厘米——但动态行人区域仍需剔除后再拟合。

8. 验收

  • 有真值:绝对相对误差、 比例
  • 无真值:边缘对齐分数、尺度漂移
  • 动态片段时间一致性
  • 障碍物边界 F1 与推理延迟一并报告

上线前必须完成尺度对齐验证,相对深度不能直接驱动米制避障。部署域与训练域光照差异大时,尺度因子需在线重估或周期性复标——别假设一次拟合永久有效。

← 全部文章

johan's blog