【计算机视觉】单目深度估计模型-Depth Anything-V2

概述

本篇将简单介绍Depth Anything V2单目深度估计模型,该模型旨在解决现有的深度估计模型在处理复杂场景、透明或反射物体时的性能限制。与前一代模型相比,V2版本通过采用合成图像训练、增加教师模型容量,并利用大规模伪标签现实数据进行学生模型教学,显著提高了预测精度和效率。

项目地址:Depth Anything V2 论文地址:https://arxiv.org/abs/2406.09414 代码地址:https://github.com/DepthAnything/Depth-Anything-V2/tree/main

微信截图_20241024151920.png

一、模型改进

将所有标记的真实图像替换为合成图像。

微信截图_20241024155319.png

 在Depth Anything V2的研究中,研究团队提出了一种创新的方法,即使用完全合成的图像来替代所有带有标签的真实图像,以训练单目深度估计模型。这一决策背后的原因有几个关键点:

  • 标签精度:研究发现,真实图像中的标签存在粗略的情况,这会导致模型学习到错误的深度信息。特别是在处理细粒度的深度预测时,真实标签的粗糙性会对最终的预测结果造成负面影响。
  • 领域转移问题:虽然合成图像可以提供高质量的深度标签,但它们与真实世界的图像之间存在分布上的差异。为了解决这一问题,研究团队采取了两方面的策略:一是通过增加合成数据的规模来提高其多样性;二是引入了大规模未标记的真实图像,并利用强大的教师模型为这些图像生成伪标签,以作为学生模型训练的数据来源。

通过完全使用合成图像来训练教师模型,并借助教师模型生成的伪标签来训练学生模型,研究团队成功地提高了单目深度估计模型的性能,尤其是在处理细粒度深度信息方面取得了显著进步。这种方法不仅克服了传统使用真实标记图像所带来的问题,也为未来的研究提供了一条可行的路径

扩大教师模型的容量。

微信截图_20241024161224.png

通过训练更大规模的模型来捕捉更丰富的特征表示,进而提高模型的学习能力。论文中采取了以下做法:

  • 教师模型的选择:选择DINOv2-G作为教师模型。DINOv2-G是一个强大的模型,其本身已经在大规模图像上进行了预训练,具备很强的特征提取能力。
  • 利用合成数据训练:使用了五个高精度的合成数据集(共包含595K张图像)来训练这个教师模型。而上一节中用到的合成数据,其好处是可以获得非常精确的深度标签,有助于教师模型学习到高质量的特征表示。
  • 伪标签生成:经过训练后的强大教师模型能够在未标注的真实图像上生成高质量的伪标签。这些伪标签随后被用来训练学生模型,帮助学生模型学习到更接近真实世界的深度预测。

扩大教师模型容量的目的就是为了使其能够更好地捕捉到输入图像中的细微特征,并且这些特征可以通过知识蒸馏的方式传递给学生模型,从而帮助学生模型在较小的规模下也能保持较高的预测精度。

通过大规模伪标记真实图像的桥梁来教授学生模型

微信截图_20241024161050.png

利用上述利用生成的伪标签,团队训练了四个不同规模的学生模型(small, base, large, giant)。学生模型通过模仿教师模型的行为,学习到了如何在真实图像上做出准确的深度预测。这种方法的主要优点是:

  • 增强场景覆盖范围:通过引入大量的未标注真实图像,可以覆盖更多的实际场景,从而增强模型的零样本深度估计能力。
  • 知识转移:通过伪标签,学生模型可以从教师模型那里“继承”到高质量的预测能力,类似于知识蒸馏,但不是在特征层面,而是在标签层面。
  • 安全性:这种方法在标签层面进行知识转移,比在特征或logit级别进行蒸馏更为安全可靠,特别是在教师与学生模型规模差距较大的情况下。

二、使用体验

我们可以在huggingface中在线体验该模型的强大,网址如下:https://huggingface.co/spaces/depth-anything/Depth-Anything-V2

微信截图_20241024161414.png

我们可以上传自己的照片,或者点击下方的示例图片,滑动右边箭头可以对比原图与深度图

微信截图_20241024161518.png

三、代码示例

1、准备工作

首先克隆项目到本地并且安装项目所需的所有 Python 依赖项

git clone https://github.com/DepthAnything/Depth-Anything-V2
cd Depth-Anything-V2
pip install -r requirements.txt
2、模型选择

根据需求,以及硬件选择合适的模型大小,下载下来并且放在checkpoints文件夹下

链接如下(giant尚未发布):

Depth-Anything-V2-Small

Depth-Anything-V2-Base

Depth-Anything-V2-Large

微信截图_20241129144350.png

3、简单示例代码

首先导入相关库

import cv2
import torch

from depth_anything_v2.dpt import DepthAnythingV2

DEVICE = 'cuda' if torch.cuda.is_available() else 'mps' if torch.backends.mps.is_available() else 'cpu'

这里定义了不同的模型配置,您可以根据需要选择不同的配置。

model_configs = {
    'vits': {'encoder': 'vits', 'features': 64, 'out_channels': [48, 96, 192, 384]},
    'vitb': {'encoder': 'vitb', 'features': 128, 'out_channels': [96, 192, 384, 768]},
    'vitl': {'encoder': 'vitl', 'features': 256, 'out_channels': [256, 512, 1024, 1024]},
    'vitg': {'encoder': 'vitg', 'features': 384, 'out_channels': [1536, 1536, 1536, 1536]}
}

encoder = 'vitl' # or 'vits', 'vitb', 'vitg'

创建了一个 DepthAnythingV2 实例,加载了预训练的权重,并将模型移到了之前确定的设备上,并设置为评估模式...

点击【计算机视觉】单目深度估计模型-Depth Anything-V2查看全文。

### DepthAI 技术文档和教程 #### 关于DepthAI及其应用领域 DepthAI 是一个跨平台 API,旨在与 OAK 摄像机进行交互和编程,从而充分利用这些设备的功能[^3]。此工具允许开发者构建复杂的视觉系统,并支持在硬件上执行自定义模型推断。 #### 开源项目实例:geaxgx/depthai_movenet 一个具体的例子是 `geaxgx/depthai_movenet` 项目,这是一个融合了 OpenCV 和 DepthAI 技术的人体姿态估计方案,特别适合实时处理和边缘计算环境下的应用场景。该开源项目的结构清晰地展示了如何集成不同组件来完成特定的任务目标[^1]。 #### 配置选项说明 对于某些不需要深度信息的应用场景来说,可以通过设置参数 `Enabled` 来控制是否启用深度功能。当禁用时,不仅会减少不必要的资源消耗,还能简化系统的复杂度[^2]。 #### 设备特性概述——OAK-D智能相机 作为一款具备神经网络加速能力和深度感知特性的摄像头模块,OAK-D 提供了强大的 Spatial AI 功能,使得机器不仅能看见周围的世界,还能够理解物体之间的相对位置关系,在机器人导航等领域有着广泛的应用前景[^4]。 #### 手势跟踪案例研究 另一个值得注意的是名为 `depthai_hand_tracker` 的项目,它实现了对手指动作的精准捕捉,为自然用户界面的设计提供了新的可能性。这个应用程序同样依赖于 DepthAI SDK 完成开发工作[^5]。 ```python import depthai as dai pipeline = dai.Pipeline() cam_rgb = pipeline.createColorCamera() # 创建RGB摄像头节点 spatialDetectionNetwork = pipeline.createYoloSpatialDetectionNetwork() # 添加YOLO空间检测网络节点 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值