《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性
一、论文简介
论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体的三维结构。他们通过一系列实验,使用特定任务的探针和零样本推理程序来分析这些模型的3D感知能力,并发现当前模型存在一些限制。在论文《Probing the 3D Awareness of Visual Foundation Models》中,作者探讨了视觉基础模型(visual foundation models)对于三维(3D)结构的意识,特别是它们在多视图一致性(multiview consistency)方面的表现。
二、实验设置
评估模型:包括多种大规模预训练的视觉模型,如MAE、iBOT、DeiT III、CLIP、MiDaS、DINO、DINOv2、StableDiffusion、SigLIP和SAM等。
数据集:使用Paired ScanNet数据集评估室内场景的表现,以及NAVI数据集评估单个对象的表现。

输入:
- 展示了同一对象或场景,但是从不同的视角拍摄的一对图像。例如,在NAVI数据集中,可能包括同一物体在不同环境中的视图;在Paired ScanNet数据集中,则可能是室内场景的不同视角。
- 能够从图像中提取特征预训练的视觉模型。在实验中,研究人员使用了多种不同的预训练模型,如DINO、CLIP、StableDiffusion等。
输出
- 对应点匹配:对于每一对图像,输出是两图像间像素点的对应关系。具体来说,就是识别出在两个不同视图中代表同一3D点的像素点对。
- 召回率:评估模型识别对应点的准确性,通过计算召回率来衡量,即正确匹配的对应点占所有可能对应点的比例。
三、实验步骤
1.特征提取(密度特征图)
使用预训练的视觉模型(如DINO、CLIP、StableDiffusion等)的冻结特征(不改变模型权重),从每张图像中提取密集特征图。这些特征基于深度学习架构,如卷积神经网络(CNN)或视觉变换器(ViT),能够捕捉图像中的视觉信息,如纹理、颜色和形状等。特征提取通常在模型的中间层进行,以获得对图像内容的丰富表示。
2.特征匹配(像素之间的匹配)
不依赖于传统的特征点检测和描述符匹配,而将两个视图的密集特征图进行比较,以找到相互之间的对应点。这通常涉及到计算特征之间的相似度,如通过余弦相似度等度量。对于每个像素点,找到另一个视图中与之最相似的像素点,从而建立对应关系。
3.对应点优化:
给定同一对象或场景的两个视图,目标是识别在不同视图中代表同一3D点的像素点。为了提高匹配的准确性,可能需要进一步的优化步骤,如空间变换模型(Homography)或基础矩阵(Fundamental Matrix)的估计,这些模型能够考虑几何约束来优化对应点。使用几何一致性检查来移除错误的匹配,如RANSAC算法,它能够识别并排除异常值。
4.性能评估:
通过地面真实数据(ground truth)来比较预测的对应点。,计算召回率来评估匹配的准确性,即预测的对应点中有多少比例与真实对应点在一定距离阈值内。
5.结果分析:
分析模型在不同视图变化条件下的性能,如小视图变化和大视图变化。通过定性和定量的结果来评估模型的3D意识能力,即它们是否能够准确地识别和匹配不同视图中的相同3D点。
四、相关示例代码分析
以下提供一些简单的Python示例代码以展示多视图一致性的概念。这些示例将使用假设的数据和简单的逻辑来模拟多视图一致性的基本思想。
1.简单的多视图一致性检查
这个示例将检查两幅图像是否具有一致的3D结构表示。
import numpy as npdef check_multiview_consistency(image1, image2, threshold=0.5):"""检查两幅图像是否具有多视图一致性。:param image1: 第一幅图像的特征向量:param image2: 第二幅图像的特征向量:param threshold: 一致性阈值:return: 布尔值,表示是否一致"""# 计算两幅图像特征向量之间的余弦相似度dot_product = np.dot(image1, image2)norm1 = np.linalg.norm(image1)norm2 = np.linalg.norm(image2)similarity = dot_product / (norm1 * norm2)# 如果相似度大于阈值,则认为两幅图像具有多视图一致性return similarity > threshold# 假设的图像特征向量
image1_features = np.array([1, 2, 3, 4, 5])
image2_features = np.array([1.1, 2.1, 2.9, 4.1, 5.1])# 检查一致性
is_consistent = check_multiview_consistency(image1_features, image2_features)
print(f"The images are {'consistent' if is_consistent else 'not consistent'}.")
2.多视图一致性的平均视图重建
这个示例将展示如何使用多个视图的平均特征来重建一个一致的3D视图。
import numpy as npdef average_views(*views):"""计算多个视图的平均特征向量。:param views: 多个视图的特征向量:return: 平均特征向量"""# 计算平均特征向量average_feature = np.mean(views, axis=0)return average_feature# 假设的多个视图特征向量
view1 = np.array([1, 2, 3])
view2 = np.array([1, 2, 3.5])
view3 = np.array([1, 2, 2.5])# 计算平均视图
average_view = average_views(view1, view2, view3)
print("Average view features:", average_view)
3.多视图一致性的特征匹配
这个示例将展示如何在两个视图之间找到一致的特征点。
import numpy as np
from scipy.spatial import distancedef match_features(view1, view2, threshold=0.5):"""在两个视图中匹配特征点。:param view1: 第一个视图的特征点:param view2: 第二个视图的特征点:param threshold: 匹配阈值:return: 匹配的特征点对"""matches = []for feature1 in view1:for feature2 in view2:# 计算两个特征点之间的欧氏距离if distance.euclidean(feature1, feature2) < threshold:matches.append((feature1, feature2))return matches# 假设的两个视图特征点
view1_features = np.array([[1, 2], [3, 4], [5, 6]])
view2_features = np.array([[1.1, 2.1], [3.1, 4.1], [6, 7]])# 匹配特征点
matched_features = match_features(view1_features, view2_features)
print("Matched feature pairs:", matched_features)
这些示例提供了多视图一致性的基本框架和概念。在实际应用中,您可能需要使用更复杂的算法和数据集来处理真实的图像和3D数据。
相关文章:
《Probing the 3D Awareness of Visual Foundation Models》论文解析——多视图一致性
一、论文简介 论文讨论了大规模预训练产生的视觉基础模型在处理任意图像时的强大能力,这些模型不仅能够完成训练任务,其中间表示还对其他视觉任务(如检测和分割)有用。研究者们提出了一个问题:这些模型是否能够表示物体…...
使用pip安装esp32的擦除、写入固件的esptool库
esptool库可以为esp32的开发板烧录新的固件,但是如果为了烧录固件就要装esp-idf软件包,甚至需要用make编译安装很久,实在太费时费力了! 好消息就是,esp提供了python的esptool库,这样只要使用pip安装上这个…...
传奇996_23——杀怪掉落,自动捡取,捡取动画
一、杀怪掉落 前置: 添加地图地图刷怪怪物掉落(术语叫爆率,掉落叫爆率,而且文档上叫爆率) 刷怪步骤:在\MirServer\Mir200\Envir\MonItems文件夹中建立以怪物名字为文件名的txt文件写法案例: …...
【030】基于51单片机甲醛检测报警器【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统 ZE08-CH2O甲醛传感器AT24C02存储芯片LCD1602液晶显示按键设置蜂鸣器报警。 1、本设计采用STC89C52、AT89C52、AT89S52作为主控芯片; 2、采用ZE08-CH2O甲醛传感器采集环境中的甲醛浓度值,LCD1602实时显示…...
微信小程序:vant组件库安装步骤
前言:在微信小程序中引用vant组件报错,提示路径不存在,这很有可能是因为没有安装构建vant组件库导致。下面是我整理的安装vant组件库的步骤: 第一步:安装node.js(执行完第一步请重启小程序) 具体步骤请看链接:node.js…...
处理namespace问题:Namespace not specified for AGP 8.0.0
How do I fix ‘namespace not specified’ error in Android Studio? Namespace not specified for AGP 8.0.0 解决方案 <?xml version"1.0" encoding"utf-8"?> <manifest xmlns:android"http://schemas.android.com/apk/res/androi…...
C++(Qt)软件调试---内存分析工具Heob(26)
C(Qt)软件调试—内存分析工具Heob(26) 文章目录 C(Qt)软件调试---内存分析工具Heob(26)[toc]1、概述🐜2、环境配置🪲3、功能说明4、使用Heob分析qt 程序内存泄漏🦧5、使用Heob检测qt 程序野指针…...
Redis五大基本类型——String字符串命令详解(命令用法详解+思维导图详解)
目录 一、String字符串类型介绍 二、常见命令 1、SET 2、GET 3、MGET 4、MSET 使用MGET 和 使用多次GET的区别 5、DEL 6、SETNX SET、SET NX和SET XX执行流程 7、INCR 8、INCRBY 9、DECR 10、DECYBY 11、INCRBYFLOAT 12、APPEND 13、GETRANGE 14、SETRANGE …...
Flutter中的Material Theme完全指南:从入门到实战
Flutter作为一款热门的跨平台开发框架,其UI组件库Material Design深受开发者喜爱。本文将深入探讨Flutter Material Theme的使用,包括如何借助Material Theme Builder创建符合产品需求的主题风格。通过多个场景和代码实例,让你轻松掌握这一工…...
Python 第三方库 PyQt5 的安装
目录 前言 PyQt5安装 不同操作系统PyQt5安装 一、Windows 系统 二、macOS 系统 三、Linux 系统(以 Ubuntu 为例) 安装 PyQt5 可能会遇到的问题 一、环境相关问题 二、依赖问题 三、网络问题 四、安装工具问题 五、运行时问题 六、环境配置问…...
CSS基础也要进行模电实验
盒子阴影 圆角边框已经介绍过哩,现在先介绍一下盒子阴影的效果如何实现 CSS3中新增了盒子阴影,可以使用box-shadow属性为盒子添加阴影 这是固定的语法: text-shadow: h-shadow v-shadow blur color; 它有这些可选的值: 哦。 …...
贴代码框架PasteForm特性介绍之markdown和richtext
简介 PasteForm是贴代码推出的 “新一代CRUD” ,基于ABPvNext,目的是通过对Dto的特性的标注,从而实现管理端的统一UI,借助于配套的PasteBuilder代码生成器,你可以快速的为自己的项目构建后台管理端!目前管…...
3D Gaussian Splatting 代码层理解之Part3
最后,内容到达了高斯泼溅过程中最有趣的阶段:渲染!这一步可以说是最关键的,因为它决定了模型的真实性。然而,它也可能是最简单的。在本系列的Part 1和Part2,文章演示了如何将 Raw 3D椭球 转换为可渲染的格式,但现在我们实际上必须完成这项工作并渲染到一组固定的像素上。…...
Ceph 中PG与PGP的概述
在Ceph分布式存储系统中,PG(Placement Group)和PGP(Placement Group for Placement purpose)是两个至关重要的概念,它们共同决定了数据在集群中的分布和复制方式。以下是关于Ceph中PG和PGP关系的详细解释&a…...
已解决:spark代码中sqlContext.createDataframe空指针异常
这段代码是使用local模式运行spark代码。但是在获取了spark.sqlContext之后,用sqlContext将rdd算子转换为Dataframe的时候报错空指针异常 Exception in thread "main" org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: java.lang.Nu…...
flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例
flutter字体大小切换案例 小字体,标准字体,大字体,超大字体案例 Android iOS设备带有选择记录 我的flutter项目版本 environment: sdk: ‘>3.4.4 <4.0.0’ 图片案例 pubspec.yaml 添加依赖 # 屏幕尺寸适配 https://github.com/OpenF…...
智慧建造-运用Trimble技术将梦幻水族馆变为现实【上海沪敖3D】
项目概述 西雅图水族馆耗资1.6亿美元对海洋馆进行扩建。该项目包括建造三个大型栖息地,每个建筑物几乎都没有直边,其中一个主栖息地由520立方米混凝土和355吨钢筋组成。特纳建筑公司的混凝土团队通过强大的贸易合作伙伴和创新的数字制造技术,…...
【NOIP提高组】计算系数
【NOIP提高组】计算系数 C语言实现C实现Java实现Python实现 💐The Begin💐点点关注,收藏不迷路💐 给定一个多项式 (ax by)^k ,请求出多项式展开后 x^n y^m 项的系数。 输入 共一行,包含 5 个整数&#x…...
IDEA部署AI代写插件
前言 Hello大家好,当下是AI盛行的时代,好多好多东西在AI大模型的趋势下都变得非常的简单。 比如之前想画一幅风景画得先去采风,然后写实什么的,现在你只需描述出你想要的效果AI就能够根据你的描述在几分钟之内画出一幅你想要的风景…...
【阅读记录-章节1】Build a Large Language Model (From Scratch)
目录 1. Understanding large language models1.1 What is an LLM?补充介绍人工智能、机器学习和深度学习的关系机器学习 vs 深度学习传统机器学习 vs 深度学习(以垃圾邮件分类为例) 1.2 Applications of LLMs1.3 Stages of building and using LLMs1.4…...
web vue 项目 Docker化部署
Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage):…...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
Flask RESTful 示例
目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题: 下面创建一个简单的Flask RESTful API示例。首先,我们需要创建环境,安装必要的依赖,然后…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...
【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制
目录 节点的功能承载层(GATT/Adv)局限性: 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能,如 Configuration …...
