当前位置: 首页 > news >正文

Metric3D:Towards Zero-shot Metric 3D Prediction from A Single Image

参考代码:Metric3D

介绍

在如MiDas、LeReS这些文章中对于来源不同的深度数据集使用归一化深度作为学习目标,则在网络学习的过程中就天然失去了对真实深度和物体尺寸的度量能力。而这篇文章比较明确地指出了影响深度估计尺度变化大的因素就是焦距 f f f,则对输入的图像或是GT做对应补偿之后就可以学习到具备scale表达能力的深度预测,这个跟车端视觉感知的泛化是一个道理。需要注意的是这里使用到的训练数据集需要预先知道相机的参数信息,且这里使用的相机模型为针孔模型。

在下图中首先比较了两种不同拍摄设备得到的图片在文章算法下测量物体的效果,可以说相差不大。
在这里插入图片描述

有了较为准确的深度估计结果之后,对应的单目slam、里程记这些都不是问题了。在配上大量的深度估计训练数据,那么泛化能力将会得到巨大提升,届时之前许多病态的问题都将得到解决。

方法设计

明确影响深度scale学习关键因子为焦距 f f f

对于针孔相机其内参主要参数为: f x δ x , f y δ y , u 0 , v 0 \frac{f_x}{\delta_x},\frac{f_y}{\delta_y},u_0,v_0 δxfx,δyfy,u0,v0,其中 f x , f y , δ x , δ y f_x,f_y,\delta_x,\delta_y fx,fy,δx,δy分别代表两个方向的焦距(一般情况下取两者相等)和像素大小,物理单位为微米。在相机中还有一个参数是成像传感器的尺寸,但是这个只影响成像的大小,就好比残画幅单反和全画幅单反的区别。

对于另外一个因素 δ \delta δ代表的是一个像素大小,在单孔成像原理中焦距、深度和成像大小的关系为(使用下图A图做相似三角形计算得到):
d a = S ^ [ f S ^ ′ ] = S ^ ⋅ α , α = [ f S ^ ′ ] d_a=\hat{S}[\frac{f}{\hat{S}^{'}}]=\hat{S}\cdot\alpha,\alpha=[\frac{f}{\hat{S}^{'}}] da=S^[S^f]=S^α,α=[S^f]
其中, S ^ , S ^ ′ \hat{S},\hat{S}^{'} S^,S^分别代表物体真实与成像大小,因而物体的深度大小只与焦距和物体像素下大小组成的比例因子有关系。
在这里插入图片描述

那么其中因素 δ \delta δ代表的是像素大小,在相同焦距情况下不同的因素 δ \delta δ会导致生成等比例的像素表达下的焦距 f ′ f^{'} f,但是由于不同因素 δ \delta δ它们在图像上呈现出来的分辨率也是不一样的,好比上图中的B图。则经过等比例抵消之后因素 δ \delta δ的影响被消除,剩下产生影响的只有焦距这个变量了。下面对比了不同焦距、不同距离下的成像差异:
在这里插入图片描述

训练数据对齐

为了使得网络能够有效利用多种来源数据,这里需要首先假设一个虚拟相机参数,其中的关键参数为 f x c , f y c f_x^c,f_y^c fxc,fyc,一般情况下取两者相等,记为 f c f^c fc。则按照下图所示的两种变换关系便可使得网络在统一的尺度上完成训练。
在这里插入图片描述
对于对齐的策略可以从两个维度出发:

  • 1)深度对齐(CSTM_label):确定当前图片拍摄相机与期望相机的焦距比例 w d = f c f w_d=\frac{f^c}{f} wd=ffc,则这里不需要变换图片只需要修改对应深度GT就可以, D c ∗ = w d ⋅ D ∗ D_c^*=w_d\cdot D^* Dc=wdD,在预测得到结果之后深度再做一个逆变换就可恢复到真实图像表示的深度下。
  • 2)图像对齐(CSTM_image):确定当前图片拍摄相机与期望相机的焦距比例 w r = f c f w_r=\frac{f^c}{f} wr=ffc,用这个比例来确定图像的缩放比例,但是这里需要保持图像原本的图像尺寸不变,将缩放之后的图像会贴在光心所在的位置上,GT也是对应的操作。相当于是人为做了scale对齐。

然后对比俩个对齐方式对性能的影响:
在这里插入图片描述

只能说在不同数据集下表现各异,差异也大不到哪里去。反倒是期望焦距的选择对最后性能还有一些影响:
在这里插入图片描述

深度监督与约束

参考scale-invariable深度估计中的损失函数设计,这里设计了一个与之类似的损失函数,y也就是在图像上去截取对应区域进行计算,定义为:
L R P N L = 1 M N ∑ p i M ∑ j N ∣ d p i , j ∗ − μ ( d p i , j ∗ ) 1 N ∑ j N ∣ d p i , j ∗ − μ ( d p i , j ∗ ) ∣ − d p i , j − μ ( d p i , j ) 1 N ∑ j N ∣ d p i , j − μ ( d p i , j ) ∣ ∣ L_{RPNL}=\frac{1}{MN}\sum_{p_i}^M\sum_j^N|\frac{d_{p_i,j}^*-\mu(d_{p_i,j}^*)}{\frac{1}{N}\sum_j^N|d_{p_i,j}^*-\mu(d_{p_i,j}^*)|}-\frac{d_{p_i,j}-\mu(d_{p_i,j})}{\frac{1}{N}\sum_j^N|d_{p_i,j}-\mu(d_{p_i,j})|}| LRPNL=MN1piMjNN1jNdpi,jμ(dpi,j)dpi,jμ(dpi,j)N1jNdpi,jμ(dpi,j)dpi,jμ(dpi,j)
其中, μ ( ) , M = 32 \mu(),M=32 μ()M=32分别代表截取区域内的深度取中值操作和取的总块数量,对于块的大小设置为图像尺寸比例倍率,取值区间为 [ 0.125 , 0.5 ] [0.125,0.5] [0.125,0.5]

总的损失函数描述为(structure ranking + virtual norm + silog):
L = L P W N + L V N L + L s i l o g + L R P N L L=L_{PWN}+L_{VNL}+L_{silog}+L_{RPNL} L=LPWN+LVNL+Lsilog+LRPNL
这些损失函数对于性能的影响:
在这里插入图片描述

实验结果

KITTI和NYU数据集下的性能比较:
在这里插入图片描述

相关文章:

Metric3D:Towards Zero-shot Metric 3D Prediction from A Single Image

参考代码:Metric3D 介绍 在如MiDas、LeReS这些文章中对于来源不同的深度数据集使用归一化深度作为学习目标,则在网络学习的过程中就天然失去了对真实深度和物体尺寸的度量能力。而这篇文章比较明确地指出了影响深度估计尺度变化大的因素就是焦距 f f f…...

k8s ingress获取客户端客户端真实IP

背景 在Kubernetes中,获取客户端真实IP地址是一个常见需求。这是因为在负载均衡架构中,原始请求的源IP地址会被替换成负载均衡器的IP地址。 获取客户端真实IP的需求背景包括以下几点: 安全性:基于客户端IP进行访问控制和认证授…...

Mysql主从搭建 基于DOCKER

创建目录 #主节点目录 mkdir -p /home/data/master/mysql/#从节点目录 mkdir -p /home/data/slave/mysql/创建配置文件 # 主节点配置 touch /home/data/master/mysql/my.cnf# 从节点配置 touch /home/data/slave/mysql/my.cnf编辑配置文件 主节点配置文件 vim /home/data/m…...

Leaflet入门,地图平移跳转到指定位置和飞行到指定位置效果

前言 本章讲解如何Leaflet如何实现操作地图平移到指定位置或者飞行到指定位置效果。 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定式的使用Leaflet地图,以及初始化后拿到leaflet对象,方便调用leaflet的api》 vue3如何使用:《L…...

iMX6ULL驱动开发 | 让imx6ull开发板支持usb接口FC游戏手柄

手边有一闲置的linux开发板iMX6ULL一直在吃灰,不用来搞点事情,总觉得对不住它。业余打发时间就玩起来吧,总比刷某音强。从某多多上买来一个usb接口的游戏手柄,让开发板支持以下它,后续就可以接着在上面玩童年经典游戏啦…...

Java 实现 SCP 携带密码拷贝文件

背景说明 涉及通过程序进行机器间的文件Copy的场景,我们一般会使用ssh连接机器,通过scp命令进行文件copy。 此种方案的前提是:机器间事先要配置免密码互通。 但是,如果客户现场机器数量过多,配置免密操作比较麻烦&a…...

Flink CEP(三)pattern动态更新

线上运行的CEP中肯定经常遇到规则变更的情况,如果每次变更时都将任务重启、重新发布是非常不优雅的。尤其在营销或者风控这种对实时性要求比较高的场景,如果规则窗口过长(一两个星期),状态过大,就会导致重启…...

抽象工厂模式(C++)

定义 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 使用场景 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种…...

程序员面试金典17.*

文章目录 17.01 不用加号的加法17.04 消失的数字17.05字母与数字17.06 2出现的次数17.07 婴儿名字17.08 马戏团人塔17.09 第k个数17.10 主要元素17.11 单词距离17.12 BiNode17.13 恢复空格(未做,字典树dp)17.14 最小K个数17.15 最长单词17.16…...

【瑞吉外卖项目复写】基本部分复写笔记

Day1 瑞吉外卖项目概述 mysql的数据源配置 spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/regie?serverTimezoneAsia/Shanghai&useUnicodetrue&characterEncodingutf-8&zeroDateTimeBehaviorconvertTo…...

用html+javascript打造公文一键排版系统15:一键删除所有空格

现在我们来实现一键删除所有空格的功能。 一、使用原有的代码来实现,测试效果并不理想 在这之前我们已经为String对象编写了一个使用正则表达式来删除所有空格的方法: //功能:删除字符串中的所有空格 //记录:20230726创建 Stri…...

苍穹外卖day12(完结撒花)——工作台+Spring_Apche_POI+导出运营数据Excel报表

工作台——需求分析与设计 产品原型 接口设计 工作台——代码导入 将提供的代码导入对应的位置。 工作台——功能测试 Apache POI_介绍 应用场景 Apache POI_入门案例 导入坐标 <!-- poi --><dependency><groupId>org.apache.poi</groupId><ar…...

SQL与NoSQL概念(详细介绍!!)

先搞清楚全称 SQL全称为Structured query language &#xff0c;即结构化查询语言&#xff0c;可以把他理解为一门特殊的编程语言。 那么nosql是什么意思呢&#xff1f;这里的no并不仅是not&#xff0c;而是not only的意思&#xff0c;所以nosql全称应该是Not Only Structure…...

node debian 镜像 new Date 获取时间少 8 小时问题

问题 在 node debian 镜像中&#xff0c;用 (new Date()).getHours() 与系统时间&#xff08;东 8 区&#xff09;少了 8 小时 系统时间 $ node > (new Date()).getHours() 11容器中的时间 $ node > (new Date()).getHours() 3原 Dockerfile FROM node:20.5-bullsey…...

【N32L40X】学习笔记13-软件IIC读写EEPROM AT24C02

AT24C02 8个字节每页,累计32个页 通讯频率MAX 400K AT24C02大小 2K 芯片地址 对于at24c02 A2A1A0 这三个引脚没有使用 写时序 由于设备在写周期中不会产生ACK恢复&#xff0c;因此这可用于确定周期何时完成&#xff08;此特性可用于最大限度地提高总线吞吐量&#xff09;…...

JVM 调优

点击下方关注我&#xff0c;然后右上角点击...“设为星标”&#xff0c;就能第一时间收到更新推送啦~~~ JVM调优是一项重要的任务&#xff0c;可以提高Java应用程序的性能和稳定性。掌握JVM调优需要深入了解JVM的工作原理、参数和配置选项&#xff0c;以及历史JVM参数的调整和优…...

DP-GAN剩余代码

在前面计算完损失后&#xff0c;该进行更新&#xff1a; 1&#xff1a;netEMA是模型的生成器&#xff1a; 遍历生成器的state_dict&#xff0c;将每一个键对应的值乘以EMA_decay。 接着根据当前迭代步数计算num_upd&#xff0c;每1000,2500,10000代倍数就执行一次。 当num…...

在word的文本框内使用Endnote引用文献,如何保证引文编号按照上下文排序

问题 如下图所示&#xff0c;我在word中插入了一个文本框&#xff08;为了插图&#xff09;&#xff0c;然后文本框内有引用&#xff0c;结果endnote自动将文本框内的引用优先排序&#xff0c;变成文献[1]了&#xff0c;而事实上应该是[31]。请问如何能让文本框内的排序也自动…...

SpringBoot项目上传至服务器

1.服务器安装JDK1.8 通过包管理器安装 2.服务器安装数据库 参考链接&#xff1a; CentOS 7 通过 yum 安装 MariaDB - 知乎 1. 安装之后没有密码&#xff0c;所以需要设置密码&#xff0c;使用下面的语句 set password for rootlocalhost password(111111); 2.在数据库中建…...

C++中实现多线程的三种方式

目录 1 背景2 方法 1 背景 力扣1116题 打印零和奇偶数。 2 方法 方法1&#xff1a;原子操作 class ZeroEvenOdd { private:int n;atomic<int> flag 0; public:ZeroEvenOdd(int n) {this->n n;}// printNumber(x) outputs "x", where x is an integer.…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

基于当前项目通过npm包形式暴露公共组件

1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹&#xff0c;并新增内容 3.创建package文件夹...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Robots.txt 文件

什么是robots.txt&#xff1f; robots.txt 是一个位于网站根目录下的文本文件&#xff08;如&#xff1a;https://example.com/robots.txt&#xff09;&#xff0c;它用于指导网络爬虫&#xff08;如搜索引擎的蜘蛛程序&#xff09;如何抓取该网站的内容。这个文件遵循 Robots…...

【决胜公务员考试】求职OMG——见面课测验1

2025最新版&#xff01;&#xff01;&#xff01;6.8截至答题&#xff0c;大家注意呀&#xff01; 博主码字不易点个关注吧,祝期末顺利~~ 1.单选题(2分) 下列说法错误的是:&#xff08; B &#xff09; A.选调生属于公务员系统 B.公务员属于事业编 C.选调生有基层锻炼的要求 D…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

OPENCV形态学基础之二腐蚀

一.腐蚀的原理 (图1) 数学表达式&#xff1a;dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一&#xff0c;腐蚀跟膨胀属于反向操作&#xff0c;膨胀是把图像图像变大&#xff0c;而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...