【计算机视觉】单目深度估计模型-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查看全文。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/949934.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

jenkins入门12-- 权限管理

Jenkins的权限管理 由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,我们使用Role-based Authorization Strategy 插件 只有项目读权限 只有某个项目执行权限

【Microi吾码】开源力量赋能低代码创新,重塑软件开发生态格局

我的个人主页 文章专栏:Microi吾码 一、引言 在当今数字化浪潮汹涌澎湃的时代,软件开发的需求呈现出爆发式增长。企业为了在激烈的市场竞争中脱颖而出,不断寻求创新的解决方案以加速数字化转型。传统的软件开发方式往往面临着开发周期长、技…

HTB:Bank[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 提取出靶机TCP开放端口 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用curl对域名进行访问…

操作手册:集成钉钉审批实例消息监听配置

此文档将记录在慧集通平台怎么实现钉钉审批实例结束或发起或取消时,能够实时的将对应的实例数据抓取出来送入第三方系统 集成平台配置 1、配置中心库,存储钉钉发送的消息,可以忽略,若不配置,则钉钉的消息将不再记录到…

【C++】B2118 验证子串

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 💯前言💯题目概述题目描述输入格式输出格式输入输出样例样例 1样例 2 题目提示 💯解决方案分析初步分析与思路 💯我的代码实现与分析代码回顾实现逻辑与优缺…

68.基于SpringBoot + Vue实现的前后端分离-心灵治愈交流平台系统(项目 + 论文PPT)

项目介绍 本系统将严格按照软件开发流程进行各个阶段的工作,采用B/S架构,面向对象编程思想进行项目开发。在引言中,作者将论述心灵治愈交流平台的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进…

【分布式缓存】一致性Hash原理剖析,一致性Hash与Hash的区别(详解)

文章目录 Hash算法Hash算法的缺陷一致性Hash算法一致性Hash存储规则一致性Hash解决Hash的缺陷问题一致性Hash的偏斜问题一致性哈希在实际中的应用总结 更多相关内容可查看 假设有一个场景:有三万张图片,有三台服务器S0,S1,S2 要求…

Clisoft SOS与CAD系统集成

Clisoft SOS与CAD系统集成 以下内容大部分来自官方文档,目前只用到与Cadence Virtuoso集成,其他还未用到,如有问题或相关建议,可以留言。 与Keysight ADS集成 更新SOS客户端配置文件sos.cfg,以包含支持ADS的模板&am…

Java-数据结构-链表-高频面试题(1)

在上一篇文章中,我们学习了链表中的"单向链表",但学可不代表就是学会了,能够运用链表的地方比比皆是,解题方法也是层出不穷,今天就让我们巩固一下"单向链表"的知识吧~ 第一题:相交链表…

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是:建立一套监控平台,比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台,就可以接入系统异常的监控和报警,可以设置当系统出现OOM异常&…

照片做成图书小程序开发制作介绍

照片做成图书小程序系统,主要是让用户直接通过小程序选择需要做成书的类型和照片排版布局模板,以及上传照片的数量。照片上传完成后,生成模板图片样式进行预览或编辑修改。修改完成全部保存。保存后生成完整的照片书进行预览没问题&#xff0…

云商城--业务+架构学习和环境准备

云商城业务架构学习和环境准备 B2B:Business to Business,交易双方的身份都是商家,也就是商家将商品卖给商家,类似采购、批发类购物,国内代表性网站阿里巴巴批发网 C2C:Customer to Customer,…

Elasticsearch:Lucene 2024 年回顾

作者:来自 Elastic Chris Hegarty 2024 年对于 Apache Lucene 来说又是重要的一年。在本篇博文中,我们将探讨主要亮点。 Apache Lucene 在 2024 年表现出色,发布了许多版本,包括三年来的首次重大更新,其中包含令人兴奋…

基于LabVIEW的BeamGage自动化接口应用

设置 National Instruments LabVIEW可执行程序需要被配置为使用.NET 4框架。.NET允许自定义可执行程序的运行方式。可通过以下方式实现: 在LabVIEW安装目录中创建一个名为LabVIEW.exe.config的文本文件(例如:C:\Program Files\National Ins…

卸载干净 IDEA(图文讲解)

目录 1、卸载 IDEA 程序 2、注册表清理 3、残留清理 1、卸载 IDEA 程序 点击屏幕左下角 Windows 图标 -> 设置-控制面板->intellij idea 勾选第一栏 Delete IntelliJ IDEA 2022.2 caches and local history,表示同时删除 IDEA 本地缓存以及历史。 Delete I…

李宏毅机器学习课程笔记02 | 机器学习任务攻略General Guide

第一步:分析loss on training data 先检查在训练数据上模型是否很好的学习 情况1:如果在训练集上,loss很大,说明在训练资料上没有训练好 可能性1:设置的模型太简单了,模型存在model bias模型偏差&#x…

【C++】19.多态

文章目录 1. 多态的概念2. 多态的定义及实现2.1 多态的构成条件2.1.1 实现多态还有两个必须重要条件:2.1.2 虚函数 (Virtual Function)定义:特性:示例代码:代码分析1. 类定义部分2. 主函数部分运行结果 重点讲解1. 虚函数的作用2.…

光伏仿真与设计系统应用架构深度剖析

在光伏产业蓬勃发展的时代背景下,绿虫光伏仿真与设计系统成为推动其高效发展的核心力量。其应用架构涵盖多个关键步骤,每个环节都紧密相扣,共同构建起精准且高效的设计体系。 气象分析作为开篇之笔,起着基石般的重要作用。系统全…

进程间通讯

简介: 进程间通讯方式有: 1.内存映射(mmap): 使用mmap函数将磁盘空间映射到内存 2.管道 3.信号 4.套接字(socket) 5.信号机制 通过进程中kill函数,去给另一个函数发送信号&a…

空压机接入配置实例:利用 MODBUS - TCP 转 Ethernet IP 网关实现连接

在工业自动化生产环境中,空压机作为重要的气源设备,其稳定运行和有效监控对于整个生产流程至关重要。然而,不同厂家生产的空压机可能采用不同的通信协议,这给集中监控和管理带来了挑战。在本次案例中,我们遇到的空压机…