Depth Anything V1,V2论文解读

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.mzph.cn/pingmian/35893.shtml

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

相关文章

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(十八)

课程地址: 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程,一套精通鸿蒙应用开发 (本篇笔记对应课程第 28 节) P28《27.网络连接-Http请求数据》 案例: 这里不懂后端假设服务器的前端小伙伴就需要课程源码资料了…

深度之眼(二十五)——研究生学习计划安排

文章目录 一、前言二、结构安排和规划2.1 夯实基础2.2 分方向训练(待)2.3 进阶训练 三、其他 一、前言 课题组这边是需要对机器视觉有所要求吧,也就是CV方向。这一届研三师兄也都是在大厂拿到30W的年薪了,也是需要拥抱深度学习这…

java收徒 java辅导 java试用期辅导 java零基础学习

💗博主介绍:✌全网粉丝1W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末报名辅导🌟 感兴趣的可以先收藏起来,还有大家…

守护变电箱消防安全,全氟己酮自动灭火片该安装在哪个位置?

变电箱、配电柜、换电柜是电力设备的重要组成部分,安全性至关重要。但在使用过程中,容易受到电气、机械、环境等因素影响,出现接触不良、短路、漏电等安全隐患,从而引发火灾事故。为了及时防范火灾风险,提前安装一款能…

Vue中数组的【响应式】操作

在 Vue.js 中,当你修改数组时,Vue 不能检测到以下变动的数组: 当你利用索引直接设置一个项时,例如:vm.items[indexOfItem] newValue当你修改数组的长度时,例如:vm.items.length newLength 为…

Java基础(二)——数组,方法,方法重载

个人简介 👀个人主页: 前端杂货铺 ⚡开源项目: rich-vue3 (基于 Vue3 TS Pinia Element Plus Spring全家桶 MySQL) 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 &#x1…

01_02_Mybatis的配置文件与基于XML的使用

1、引入日志 在这里我们引入SLF4J的日志门面&#xff0c;使用logback的具体日志实现&#xff1b;引入相关依赖&#xff1a; <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…

2024国内外音频转换器大盘点,盘点音乐剪辑的7个有效方法!

当遇到不支持的音乐文件时&#xff0c;您可能就会想要拥有一款优秀的音频转换器。当您想减小大量音乐文件以节省设备存储空间时&#xff0c;它也可以很好地帮上忙。如果您正在寻找这么一款音频转换器&#xff0c;那么&#xff0c;请不要错过这篇文章。一款顶尖的音频转换器不仅…

USB2.0学习1--基本概念

目录 1.USB概念 2.USB协议发展 3.USB接口类型 3.1 TYPE类型 3.2 Mini类型 3.3 Micro类型 4. USB体系结构和关键概念 4.1 USB工作原理 4.2 USB物理拓扑结构 4.3 USB逻辑拓扑结构 4.4 USB软件架构 4.5 USB数据流模型 4.5.1 USB设备端点 4.5.2 USB管道 4.6 USB即插…

网工内推 | 国企信息工程师,信息系统项目管理师优先,最高14薪

01 上海浦东软件园股份有限公司 &#x1f537;招聘岗位&#xff1a;信息化管理工程师 &#x1f537;岗位职责&#xff1a; 1. 根据公司战略、数字化总体架构规划和IT 技术趋势&#xff0c;制定信息化系统的规划与设计&#xff0c;并制定实施计划。 2. 统筹公司信息化系统管理…

Redis-实战篇-缓存击穿问题及解决方案

文章目录 1、缓存击穿2、常见的解决方案有两种&#xff1a;2.1、互斥锁2.2、逻辑过期2.3、两种方案对比 3、利用互斥锁解决缓存击穿问题3.1、ShopServiceImpl.java3.2、使用 jmeter.bat 测试高并发 4、利用逻辑过期解决缓存击穿问题 1、缓存击穿 缓存击穿问题 也叫 热点key问题…

<电力行业> - 《第4课:什么是电力?什么是发输变配用5环节?》

1 什么是电力&#xff1f; 我们对于平日生活中离不开的电很熟悉&#xff0c;但是电力是什么&#xff1f; 其实&#xff0c;电力就是电能作为动力的能源。电力就是我们说的电&#xff0c;不过更多了系统化。 19世纪70年代&#xff0c;电力的发明和应用掀起了第二次工业化高潮。…

关于WebSocket

WebSocket 与传统的 HTTP 协议对比 在实时通信领域&#xff0c;传统的 HTTP 协议存在以下一些问题&#xff1a; 频繁的请求和响应&#xff1a;每次通信都需要建立和关闭连接&#xff0c;带来额外的开销。高延迟&#xff1a;每次通信都需要经过多个网络层的传输&#xff0c;延…

Stm32的DMA的学习

一&#xff0c;介绍 二&#xff0c;DMA框图 三&#xff0c;DMA通道 四&#xff0c;相关HAL库函数 五&#xff0c;配置DMA 六&#xff0c;Stm32CubeMX配置 【13.1】减少CPU传输负载 DMA直接存储器访问—Kevin带你读《STM32Cube高效开发教程基础篇》_哔哩哔哩_bilibili

【鸿蒙 HarmonyOS】尺寸设置:size/layoutWeight/constraintSize

一、背景 常见尺寸&#xff1a;width&#xff08;宽度&#xff09;、height&#xff08;高度&#xff09;、padding&#xff08;内边距&#xff09;、margin&#xff08;外边距&#xff09; 主要整理下size&#xff08;设置高宽尺寸&#xff09;、layoutWeight&#xff08;对…

Redis数据库(五):Redis数据库基本特性

这一节我们来介绍如何使用C语言的库来操作Redis数据库。 目录 一、hiredis的安装 1.1 下载源码 1.2 解压 1.3 进入hiredis路径下 1.4 利用makefile文件进行编译 二、接口介绍 三、C程序操作Redis代码 四、redis.conf配置文件详解 五、Redis的持久化 5.1 RDB &#x…

STM32CubeMX与RT-Thread Studio协助使用(实现点亮LED)

1创建自己的项目 1-1选择板子 1-2生成的项目 运行一下看是否创建成功 零警告零错误 2配置STM32Cude 2-1找打如图图标点击&#xff08;CubeMX的图标&#xff09; 2-2输入自己安装的路径选中exe文件 点击Browse 找到如图选中&#xff0c;在打开&#xff08;STM32CubeMX的安装路…

echarts 5.5.0版本下的层叠柱形图,每个值都从0开始,会有覆盖情况

需求&#xff1a; 1、每个公司&#xff0c;需要两个柱子去展示&#xff08;stack: 1是第一个柱子&#xff0c;stack:2,是第二个柱子&#xff09;&#xff1b; 2、必须每个数据都是从0开始&#xff0c;不在上一个值上累加&#xff1b; 3、鼠标滑上去的时候&#xff0c;最大值…

什么是API?如何进行API对接?

目录 一、API和API对接的定义 二、API接口的应用场景 三、为什么需要API对接 四、如何进行API对接 GET请求 POST请求 五、API对接的注意事项 在这个数字化时代&#xff0c;API像一把万能钥匙&#xff0c;让数据流动起来&#xff0c;创造出无限可能。本文旨在介绍API及其…

点云处理实战 PCL求解点云表面曲率

目录 一、什么是曲率 二、曲率计算过程 三、pcl 求解点云局部曲率 四、思考?为何曲率计算会使用协方差矩阵? 五、推荐阅读 一、什么是曲率 曲率是几何学中用来描述曲线或曲面形状变化的一个量。它反映了曲线或曲面的弯曲程度。在不同的上下文中,曲率的定义和计算方式有…