AI-深度学习

嵌入式视觉模型进阶 27:深度估计与图像恢复:两个专题入口

展开合集目录
  1. 嵌入式视觉模型进阶 01:怎样读懂一个实际模型
  2. 嵌入式视觉模型进阶 02:卷积进阶:分组、深度、逐点与空洞卷积
  3. 嵌入式视觉模型进阶 03:MobileNet:深度可分离卷积与倒残差
  4. 嵌入式视觉模型进阶 04:通道注意力与 MobileNetV3
  5. 嵌入式视觉模型进阶 05:ShuffleNet:通道拆分与重排
  6. 嵌入式视觉模型进阶 06:结构重参数化:训练分支怎样合为一个卷积
  7. 嵌入式视觉模型进阶 07:Backbone、Neck、Head 与多尺度特征
  8. 嵌入式视觉模型进阶 08:FPN 与 PAN:怎样融合不同尺度的信息
  9. 嵌入式视觉模型进阶 09:检测头:分类、位置与置信度
  10. 嵌入式视觉模型进阶 10:检测训练:标签分配与损失计算
  11. 嵌入式视觉模型进阶 11:完整 YOLOv8 推理:从图片到原图目标框
  12. 嵌入式视觉模型进阶 12:训练自己的检测器与错误分析
  13. 嵌入式视觉模型进阶 13:检测器导出对照与其他结构路线
  14. 嵌入式视觉模型进阶 14:跟踪基础:运动预测、匹配与轨迹生命周期
  15. 嵌入式视觉模型进阶 15:ByteTrack 思路:用低分框恢复已有轨迹
  16. 嵌入式视觉模型进阶 16:外观特征与 ReID:怎样比较两个目标
  17. 嵌入式视觉模型进阶 17:目标跟随:从轨迹到云台控制接口
  18. 嵌入式视觉模型进阶 18:视频系统:队列、时间戳与异步流水线
  19. 嵌入式视觉模型进阶 19:人脸处理流程:检测、关键点与对齐
  20. 嵌入式视觉模型进阶 20:特征识别:人脸向量、相似度与阈值
  21. 嵌入式视觉模型进阶 21:人体关键点与姿态估计
  22. 嵌入式视觉模型进阶 22:OCR 检测:从文字区域到矫正图片
  23. 嵌入式视觉模型进阶 23:OCR 识别:序列模型与 CTC
  24. 嵌入式视觉模型进阶 24:完整 OCR 流程与识别错误分析
  25. 嵌入式视觉模型进阶 25:轻量语义分割与实例分割
  26. 嵌入式视觉模型进阶 26:工业异常检测:缺陷样本少时怎么办
  27. 嵌入式视觉模型进阶 27:深度估计与图像恢复:两个专题入口
  28. 嵌入式视觉模型进阶 28:面向 NPU 的计算图与算子兼容
  29. 嵌入式视觉模型进阶 29:量化、蒸馏与剪枝的实际取舍
  30. 嵌入式视觉模型进阶 30:综合项目:检测、跟踪与云台跟随验收
嵌入式视觉模型进阶 27:深度估计与图像恢复:两个专题入口的封面

第 27 / 30 课。 前置:上一课。本篇的运行范围以实验说明和验证记录为准,构造样例不代表真实任务精度或板端性能。

灰度深度图不能直接当作米

模型输出可能是深度、逆深度或仅可比较远近的相对量。颜色条上看起来远近合理,不表示数值已经标定。单目模型的尺度约定要从训练与模型说明确认;立体几何在完成标定后可使用 Z=fB/d,其中焦距以像素计、基线以米计、视差以像素计。

本课构造一个与逆深度呈仿射关系的输出,用已知参考距离拟合比例与偏移,再计算距离。这个拟合只对构造关系成立,不能据此保证实际单目网络经过两点标定就能准确测距。接近零的逆深度会放大误差,应拒绝无效范围。

图像恢复优化的目标不同

去噪、去模糊和超分辨率输出图像,不直接输出类别。更锐利不一定更真实,生成的细节也可能不适合测量或取证。恢复前后检测效果应独立验证,不能只凭主观观感判断。

本课用构造平滑图加噪,再以高斯滤波作传统基线。已知干净图使我们能计算 MSE 和 PSNR,数据范围固定为 0~1。不同值域、裁剪方式与颜色空间下的 PSNR 不应直接横比。

运行与练习

脚本分别运行逆深度标定和去噪对照,没有使用深度网络或超分模型。把干净图换为细密条纹,观察平滑滤波在去噪同时丢掉纹理。把一个参考距离标错,观察拟合结果。

若项目需要距离,下一专题应是相机标定、畸变、立体几何与误差传播;若需要图像增强,则继续学习恢复网络、数据合成、评价与分块推理。两者在本课并列作为入口,不意味着它们使用相同的模型或评价指标。

配套实验与运行记录

实验:深度估计与图像恢复:两个专题入口

查看完整代码:main.py
"""区分相对深度与米制距离,并通过去噪对照理解参考图、PSNR 和细节损失。"""

import cv2, numpy as np


def psnr(a, b):
    mse = float(np.mean((a - b) ** 2))
    return float("inf") if mse == 0 else 10 * np.log10(1 / mse)


def main():
    metric = np.array([1.0, 2.0, 4.0, 8.0])
    raw = 2 / metric + 0.3
    scale, offset = np.linalg.lstsq(
        np.c_[raw, np.ones_like(raw)], 1 / metric, rcond=None
    )[0]
    restored = 1 / (scale * raw + offset)
    np.testing.assert_allclose(restored, metric)
    rng = np.random.default_rng(7)
    clean = np.tile(np.linspace(0.2, 0.8, 64), (64, 1)).astype(np.float32)
    noisy = np.clip(clean + rng.normal(0, 0.05, clean.shape), 0, 1).astype(np.float32)
    denoised = cv2.GaussianBlur(noisy, (3, 3), 0.8)
    before, after = psnr(clean, noisy), psnr(clean, denoised)
    assert after > before
    print(
        "constructed inverse-depth scale/offset",
        scale,
        offset,
        "distance",
        restored.tolist(),
    )
    print("smooth synthetic image PSNR before/after", before, after)


if __name__ == "__main__":
    main()
下载代码

在项目根目录执行;下载包解压后,在解压目录执行 python3 main.py。

cd 'content/posts/AI-深度学习/嵌入式视觉模型进阶/27-深度估计与图像恢复/code' && python3 main.py

在本篇代码目录执行 python3 main.py。依赖安装、可选入口见包内 README.md;实际运行结果见 verification.md。下载包包含本课使用的辅助模块与样例。

参考与进一步阅读

原始论文或官方文档用于核对结构、接口和适用范围。本篇代码是围绕教学目标编写的最小实验;除明确注明的完整入口外,不视为对应论文模型的完整复现。


完整进阶目录 · 入门系列 · 上一篇 · 下一篇