Depth Anything V1,V2论文解读

news2024/11/20 9:45:46

Depth Anything

  • 引言
  • Depth Anything V1
  • 标注方法
    • 学习标注图像
    • 发挥未标注图像的潜力
    • 语义辅助感知
  • Depth Anything V2
    • 总体框架流程

引言

在深度估计领域,单目深度估计(Monocular Depth Estimation,MDE)是指利用单个摄像头拍摄的图像,通过计算机视觉技术推断出场景中每个像素点的深度信息。相较于多目深度估计方法,单目深度估计仅使用单个摄像头或传感器,通常依赖于图像的视觉信息进行深度推断。这种方法在实际应用中具有广泛的适用性,特别是在需要轻量级、成本低廉的场景中,如移动设备和自动驾驶中的实时深度感知。

单目深度估计的方法主要包括利用卷积神经网络(CNN)从单张输入图像中直接回归深度场景。这些网络结构经过多年的发展和优化,能够从RGB图像中学习并推断每个像素点的绝对深度值。为了训练这些模型,通常需要大量的真实深度信息来作为监督信号,这些信息可以通过RGB-D相机、激光雷达等传感器获得

近年来,随着深度学习技术的快速发展,单目深度估计方法在准确性和泛化能力上都取得了显著进展。新的网络结构和损失函数设计使得这些方法能够处理不同类型的场景和视角,从而提高深度估计的精度和鲁棒性。例如,通过数据集混合和尺度-平移不变损失的构建,研究人员能够在训练过程中有效地利用多样化的数据源,提升模型的泛化能力。

除了单目深度估计,多目深度估计利用多个摄像头或传感器来获取更丰富的场景信息。通过多视角的数据融合,这些方法能够有效解决单目方法中存在的深度不确定性和模糊性问题,尤其是在复杂的动态场景中。多目深度估计不仅可以提高深度估计的准确性,还能够增强系统的鲁棒性和对动态环境的适应能力。

最近国外发表Depth Anything V2版本,因此这里结合V1介绍

Depth Anything V1:https://arxiv.org/pdf/2401.10891v2

当谈及深度估计领域时,传统上数据集的构建主要依赖于传感器获取深度信息、立体匹配或结构光技术。然而,这些方法往往成本高、耗时长,并且在特定场景下难以实现。近年来,随着深度学习技术的兴起,研究人员开始探索更为经济高效的方法,文章作者利用单目未标注图像来生成深度标注,从而扩展数据集的规模和多样性

使用单目未标注图像生成深度标注的方法为深度估计领域带来了新的发展机遇。通过这种方法,研究人员可以利用大规模的公共数据集,例如SA-1B、Open Images和BDD100K,来训练初始的单目深度估计模型。这些数据集包含了丰富的场景和视角变化,能够有效提升模型的泛化能力和适应各种应用场景的能力。

Depth Anything V1

标注方法

利用标注和未标注的图像来促进更好的单目深度估计(MDE)

形式上,标注和未标注集分别表示为 D l = ( x i , d i ) i = 1 M D^l = {(x_i, d_i)}^M_{i=1} Dl=(xi,di)i=1M D u = { u i } i = 1 N D^u = \lbrace u_i \rbrace^N_{i=1} Du={ui}i=1N

✈️任务的目标是从 D l D^l Dl 中学习一个教师模型 T T T。然后,我们利用 T T T D u D^u Du分配伪深度标签。最后,我们在标注集和伪标注集的组合上训练一个学生模型 S S S

下图提供了一个简要说明。
在这里插入图片描述
图中:实线为标记的图像流,虚线为未标记的图像、

学习标注图像

这个过程类似于 MiDaS的训练。

MiDaS论文地址:https://arxiv.org/pdf/1907.01341v3
github地址:https://github.com/isl-org/MiDaS

论文内容总结:MiDaS论文通过整合多个数据源,提出了一种新的训练方法,解决了单目深度估计模型数据集规模有限和环境多样性不足的挑战。他们设计了鲁棒的训练目标函数处理深度范围和尺度的不一致性,采用多目标学习方法整合来自不同数据源的信息。实验证明,这种方法显著改进了单目深度估计的泛化能力,超越了现有方法,成为当前领域的前沿研究方向。

然而,由于 MiDaS 没有发布代码,文章作者首先对其进行了复现。

具体来说,首先将深度值通过 d = 1 / t d = 1/t d=1/t转换到视差空间,这样每个深度图上归一化到 0~1。为了实现多数据集联合训练,采用了仿射不变损失来忽略每个样本的未知尺度和位移公式如下:

这里的深度值(depth)通常指的是场景中物体到摄像头的距离,通常以米(m)为单位。在计算机视觉中,深度值用来描述图像中每个像素点的距离信息

仿射不变损失函数设计: 设计仿射不变损失函数,以在训练过程中对尺度变化和平移不变化具有鲁棒性。常见的仿射不变损失函数包括平方损失函数的变体或者其他形式的损失函数,如Huber损失函数等,用于惩罚预测值与真实值之间的差异,同时考虑到尺度和平移变化

L l = 1 H W ∑ i = 1 H W ρ ( d i ∗ , d i ) L_l = \frac{1}{HW}\sum_{i=1}^{HW}\rho(d^*_i,d_i) Ll=HW1i=1HWρ(di,di)

其中 d i ∗ d^*_i di d i d_i di分别是预测和真实值, ρ \rho ρ是仿射不变的平均绝对误差损失:

ρ ( d i ∗ , d i ) = ∣ d ^ i ∗ − d ^ i ∣ \rho(d^*_i,d_i)=|\hat d^*_i - \hat d_i| ρ(di,di)=d^id^i

d ^ i = d i − t ( d ) s ( d ) \hat d_i = \frac{d_i-t(d)}{s(d)} d^i=s(d)dit(d)

  • t ( d ) t(d) t(d)代表预测值或真实值的平移(translation),它的作用是将预测值或真实值的整体平移到零点附近。这样做的目的是消除预测值和真实值之间的整体偏移。
  • s ( d ) s(d) s(d)代表预测值或真实值的尺度(scale),它的作用是对预测值或真实值进行缩放,使得它们的范围映射到单位尺度。这样做的目的是消除预测值和真实值之间的整体比例差异,以便更准确地比较它们的相对关系。

t ( d ) = m e d i a n ( d ) , s ( d ) = 1 H W ∑ i = 1 H W ∣ d i − t ( d ) ∣ t(d)=median(d),s(d)=\frac{1}{HW}\sum_{i=1}^{HW}|d_i-t(d)| t(d)=median(d)s(d)=HW1i=1HWdit(d)

为了获得一个鲁棒的单目深度估计模型,我们从6个公开数据集中收集了150万张标注图像。此外,为了增强从这些标注图像中学习的教师模型 T T T,采用 DINOv2预训练权重来初始化编码器。在实践中,应用一个预训练的语义分割模型来检测天空区域,并将其视差值设置为0(最远)。

发挥未标注图像的潜力

🌎这是重点。

与之前需要大量构建多样化标注数据集的工作不同,强调未标注图像在增强数据覆盖方面的价值。

通过将单目未标注图像传递给预训练的表现良好的 MDE 模型,可以轻松获得密集的深度图。这比对立体图像或视频执行立体匹配或 SfM 重建要方便得多。选择了八个大规模公共数据集作为未标注来源,它们包含超过6200万张图像。下表下半部分提供了详细信息。

在这里插入图片描述

如何使用未标注的数据集技术上:给定先前获得的 MDE 教师模型 T T T,对未标注集 D u D^u Du 进行预测以获得伪标注集 D ^ u \hat D^u D^u

D ^ u = { ( u i , T ( u i ) ) ∣ u i ∈ D u } i = 1 N \hat D^u = \lbrace (u_i,T(u_i))|u_i \in D^u \rbrace^N_{i=1} D^u={(ui,T(ui))uiDu}i=1N

  • u i u_i ui 表示未标注数据集 D u D^u Du 中的每个样本,结合标注图像和伪标注图像的集合 D l ⋃ D u D^l \bigcup D^u DlDu,在其上训练学生模型 S S S
  • T ( u i ) T(u_i) T(ui) 则是由先前获得的单目深度估计(MDE)教师模型 T T T u i u_i ui 进行的深度预测。

作者发现,尽管使用自训练管道注入了大量未标注图像,但并没有带来性能改进,与过去少量标注图像的观察结果相矛盾。作者推测,这可能是因为已有的标注图像已经足够丰富,从额外的未标注图像中获得的额外知识有限。尤其是在教师和学生模型共享相同预训练和架构的情况下,它们在未标注集上倾向于做出类似的预测。

为了解决这一困境,作者提出了一种新方法:通过向未标注图像注入强扰动来挑战学生模型。这些扰动包括强色彩失真(如色彩抖动和高斯模糊)以及强空间失真(如CutMix)。这些修改使得模型能够从大规模未标注图像中积极地获取额外的视觉知识,并显著提高了标注图像的基线表现,从而增强了模型的鲁棒性和处理开放世界数据的能力。

具体关于 CutMix 的细节如下:

它最初是为图像分类提出的,在单目深度估计中很少探索。首先在空间上插值一对随机的未标注图像 u a u_a ua u b u_b ub:,相当于融合二张图像。

u a b = u a ⊙ M + u b ⊙ ( 1 − M ) u_{ab} = u_a \odot M +u_b \odot (1 - M) uab=uaM+ub(1M)

其中 M M M是一个矩形区域设为1的二进制掩码。未标注损失 L u L_u Lu首先在由 M M M 1 − M 1 − M 1M 定义的有效区域内计算仿射不变损失:

L u M = ρ ( S ( u a b ) ⊙ M , T ( u a ) ⊙ M ) L_u^M = \rho(S(u_{ab}) \odot M,T(u_a) \odot M) LuM=ρ(S(uab)M,T(ua)M)
L u 1 − M = ( S ( u a b ) ⊙ ( 1 − M ) , T ( u b ) ⊙ ( 1 − M ) ) L_u^{1-M} = (S(u_{ab}) \odot (1 - M), T(u_b)\odot(1-M)) Lu1M=(S(uab)(1M),T(ub)(1M))

然后通过加权平均来聚合两个损失:

L u = ∑ M H W L u M + ∑ ( 1 − M ) H W L u 1 − M L_u = \frac{\sum M}{HW}L^M_u + \frac{\sum(1-M)}{HW}L^{1-M}_u Lu=HWMLuM+HW(1M)Lu1M

在上述公式中:

  • S ( u a b ) S(u_{ab}) S(uab)表示对图像 u a b u_{ab} uab进行深度估计得到的预测深度图。
  • T ( u a ) T(u_a) T(ua) T ( u b ) T(u_b) T(ub)分别表示对未标注图像 u a u_a ua u b u_b ub进行深度估计得到的真实深度图。
  • M M M是一个二进制掩码,用于定义一个矩形区域,其中的像素值为1,其他区域为0。这个掩码用于控制在插值过程中哪些区域的信息来自于 u a u_a ua ,哪些来自于 u b u_b ub

语义辅助感知

在深度估计研究中,有一些工作尝试通过辅助语义分割任务来提升深度估计的性能。在深度估计模型中加入高层次的语义信息是非常有益的。尤其是在处理未标注图像时,这些来自其他任务的辅助监督信号可以有效对抗伪深度标签中的潜在噪声。

为了获得更有信息量的语义信号,参考了DINOv2模型在语义相关任务中的强大表现,例如图像检索和语义分割,即使在冻结权重且没有微调的情况下也能取得良好效果。基于这一观察,提出通过辅助特征对齐损失,将DINOv2的强大语义能力转移到深度模型中。特征空间是高维且连续的,因此比离散掩码包含更丰富的语义信息。特征对齐损失的公式为:

L feat = 1 − 1 H W ∑ i = 1 H W cos ⁡ ( f i , f i ′ ) L_{\text{feat}} = 1 - \frac{1}{HW} \sum_{i=1}^{HW} \cos(f_i, f_i') Lfeat=1HW1i=1HWcos(fi,fi)

其中 c o s ( ⋅ , ⋅ ) cos(·, ·) cos(⋅,⋅)衡量两个特征向量之间的余弦相似性。 f f f 是深度模型 S S S 提取的特征,而 f ′ f' f 是冻结的 DINOv2 编码器的特征。

特征对齐的关键点

为了解决这个问题,为特征对齐设置了一个容差边界 α α α。如果 f i f_i fi f i ′ f'_i fi的余弦相似度超过 α,这个像素将不被考虑在 L f e a t L_{feat} Lfeat 中。这允许的方法既享有来自 DINOv2 的语义感知表示,又享有来自深度监督的部分级别区分表示。作为副作用,生成的编码器不仅在下游 MDE 数据集上表现良好,而且在语义分割任务中也取得了强大的结果。这也表明的编码器有潜力作为一个通用的多任务编码器,适用于中级和高级感知任务。

最终,总体损失是三种损失 L l L_l Ll, L u L_u Lu L f e a t L_{feat} Lfeat 的平均组合。

Depth Anything V2

论文地址:https://arxiv.org/pdf/2406.09414v1
github地址:https://github.com/DepthAnything/Depth-Anything-V2
新版本提供了模型的代码

与第一版相比,V2通过三个关键实践显著提升了深度预测的精细度和鲁棒性:

  • 1)用合成图像替代所有标注的真实图像,
  • 2)扩大教师模型的容量,
  • 3)通过大规模伪标注的真实图像桥接训练学生模型

从模型架构的角度来看,这些工作可以分为两类。一类基于判别模型,如BEiT和DINOv2,另一类基于生成模型,如Stable Diffusion

深度估计中的标注数据问题与解决方案:
在这里插入图片描述

总体框架流程

训练Depth Anything V2的流程如下:

  • 基于高质量合成图像训练可靠的教师模型DINOv2-G。
  • 使用教师模型对大规模未标注的真实图像生成伪深度。
  • 在伪标注的真实图像上训练学生模型,实现稳健的泛化。

作者将发布四个学生模型,分别基于DINOv2的小、中、大和巨型版本。

使用五个精确的合成数据集(59.5万张图像)和八个大规模伪标注的真实数据集(6200万张图像)进行训练。训练过程中忽略每个伪标注样本损失最大的10%区域,认为这些区域可能含有噪声伪标签。使用的损失函数包括尺度和位移不变的损失Lssi和梯度匹配损失Lgm。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OpenGL-ES 学习(6)---- 立方体绘制

目录 立方体绘制基本原理立方体的顶点坐标和绘制顺序立方体颜色和着色器实现效果和参考代码 立方体绘制基本原理 一个立方体是由8个顶点组成,共6个面,所以绘制立方体本质上就是绘制这6个面共12个三角形 顶点的坐标体系如下图所示,三维坐标…

还没选好智能猫砂盆?今年最受好评的好用智能猫砂盆都在这了!

随着现代养猫文化的演进,智能化宠物用品逐渐走入千家万户,其中智能猫砂盆作为能帮助大家实现双手自由的自动铲屎神器,受到了广大铲屎官的喜欢。然而,市面上的智能猫砂盆种类繁多,品质参差不齐。一款优质的智能猫砂盆能…

从0到1构建自己的短链接系统

1. 短链系统简介 1.1 短链系统的定义与用途 短链系统是指将一个较长的URL地址,通过特定的算法生成一个较短的、具备唯一性的URL地址。这种系统广泛应用于社交网络、短信、邮件营销等场景,它能帮助用户在字数受限的情况下分享链接,并且还具有…

【干货】【全网最全】【全网最详细】 javaWeb关于Thymeleaf+SpringBoot 的学习教程,看这一篇就够了。

大家好,我是DX3906 第一部分:介绍 Thymeleaf 简介 1.什么是Thymeleaf Thymeleaf是一个用于Java和Java EE平台的服务器端模板引擎,它可以用来在服务端生成HTML、XML、JavaScript、CSS甚至纯文本的输出。Thymeleaf适用于需要快速开发和维护Web…

设备智能化:中国星坤线缆组件的解决方案!

在当今快速发展的电子行业中,产品小型化和成本效益是制造商追求的两大目标。中国星坤端子电缆组件以其灵活性和高效性,为电子设备制造商提供了一种理想的解决方案。本文将探讨星坤端子电缆组件的优势以及其在不同电子设备中的应用。 端子线:小…

Linux命令学习2

一.文件基础命令 1.alias-给某个命令取别名 使用方式:alias cl ls -la 说明:将ls -la命令取别名为cl,使用这种方式只是临时将命令取别名,重启中断后,就会失效。 问题1:如何永久性的设置命令的别名? 答…

简过网:专科生可以考的编制岗位有哪些?这5个铁饭碗要抓住了!

专科生可以考的编制岗位有哪些?以下这几种可以考的,尤其是应届毕业生,一定要抓住机会哦! ​ 一、三支一扶:专科生可报考,期满可转编。 三支一扶:支农、支医生、支教、扶贫 工作时间一般为2年&…

车载双向认证框架设计

最近工作需要,手写了一个双向认证库,可以用在Java、Android上,不限于PC/手机、车载平台。首先我们来看看双向认证的原理机框架设计思路,最后会给出下载链接大家可以体验或者源码参考。 因为可以和FlexNet网络库(参考我…

实现高效写入:Schemaless 写入性能优化指南

物联网应用常常需要收集大量的数据,用以支持智能控制、业务分析和设备监控等功能。然而,应用逻辑的更新或硬件的调整可能会导致数据采集项频繁变化,这是时序数据库(Time Series Database,TSDB)面临的一大挑…

Mybatis-映射文件中select标签resultType属性的使用

数据库的最最基本操作“增删改查”,“查”是最复杂的,有各种各样的查询,所以对应到Mybatis中的select标签也是这四个操作中最复杂的 resultType属性的使用 1.返回的结果是List集合的类型 select标签里的resultType类型设置为List集合里的元…

CCAA:认证通用基础 7(认证的基本概念)

7认证的基本概念 7.1认证类型(产品认证、管理体系认证、服务认证)及基本特征 第一节 认证 1.认证的定义和本质 1.1认证的定义 (1)认证:与产品、过程、体系或人员有关的第三方证明。 ①”产品,过程,体系或人员”是认证的对象,认证是对“产…

Rust: duckdb和polars读csv文件比较

一、文件准备 样本内容,N行9列的csv标准格式,有字符串,有浮点数,有整型。 有两个csv文件,一个大约是2.1万行;一个是64万行。 二、toml文件 [package] name "my_duckdb" version "0.1.0&…

Linux文件IO深入剖析

目录 一、文件IO引发的项目血案 1、分析 一、Linux文件系统基本概念 1、文件系统接口 2、文件系统缓存 二、文件IO 访问方式概述 1、标准文件访问方式 2、直接IO 3、实现方式 4、缓存同步 5、Linux 文件IO流程图 6、血案解决 一、文件IO引发的项目血案 事件经过&am…

甲骨文(Oracle)云AI专家级证书免费获取攻略

这次分享的是甲骨文云(Oracle)2024年最新最热门的AI专家级证书,活动截止日期7/31。 考试为闭卷监考形式,但小李哥已经把题库准备好,分享给大家。 甲骨文Oracle☁️云计算凭借其Oracle原生产品(数据库、ERP等)在云计算市场中具有一定地位。目前…

Kafka入门-分区及压缩

一、生产者消息分区 Kafka的消息组织方式实际上是三级结构:主题-分区-消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。 分区的作用就是提供负载均衡的能力,或者说对数据进行分区的主要原因,就是为…

【已解决】Pycharm:卡顿解决方案汇总

可能原因: 1、内存少 2、加载慢 3、文件多 4、硬件老 解决方案: 本机测试在 MAC,Windows、Linux也有相应的设置,请自行查询。 一、调整Pycharm使用内存 Help - Change Memory Settings 二、取消勾选 重复打开上次项目 Pych…

渗透测试之网络基础

文章目录 1. TCP/IP体系结构2. 什么是IP地址2.1 内网IP2.2 公网IP2.3 公网IP与内网IP的关系2.4 判断IP地址是公网或内网 3. 什么是TCP逻辑端口3.1 端口的定义3.2 查看开启的端口 4. HTTP超文本传输协议4.1 什么是HTTP4.2 HTTP协议特点4.3 请求消息——request4.4 HTTP的请求方式…

【研究】大模型应用场景分类与硬件升级

大模型应用#1:从Chatbot到AI Agent,个人助理重塑手机应用生态 AI大模型的能力进步推动Chatbot在C端广泛“出圈”。Chatbot(聊天机器人)通过自动化方式来处理和回复用户输入,可以模拟人类对话,通过文字或语…

软考系统架构师考试考点整理就看这一篇

软考系统架构师考试考点整理就看这一篇 最近软考成绩出来了不少同学与笔者沟通,聊到软考现在越来越难了,考了两三次都没过,也有不少新同学咨询软考考试的一些福利政策,投入大量的物力,财力,精力&#xff0c…

MySQL笔记——索引

索引 SQL性能分析使用原则SQL提示覆盖索引前缀索引单列索引和联合索引索引设计原则 学习黑马MySQL课程,记录笔记,用于复习。 查询建表语句: show create table account;以下为建表语句: CREATE TABLE account (id int NOT NULL …