《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数据集评估单个对象的表现。

输入:

  1. 展示了同一对象或场景,但是从不同的视角拍摄的一对图像。例如,在NAVI数据集中,可能包括同一物体在不同环境中的视图;在Paired ScanNet数据集中,则可能是室内场景的不同视角。
  2. 能够从图像中提取特征预训练的视觉模型。在实验中,研究人员使用了多种不同的预训练模型,如DINO、CLIP、StableDiffusion等。

输出

  1. 对应点匹配:对于每一对图像,输出是两图像间像素点的对应关系。具体来说,就是识别出在两个不同视图中代表同一3D点的像素点对。
  2. 召回率:评估模型识别对应点的准确性,通过计算召回率来衡量,即正确匹配的对应点占所有可能对应点的比例。

三、实验步骤

        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 np

def 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 np

def 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 distance

def 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数据。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++ | Leetcode C++题解之第565题数组嵌套

题目&#xff1a; 题解&#xff1a; class Solution { public:int arrayNesting(vector<int> &nums) {int ans 0, n nums.size();for (int i 0; i < n; i) {int cnt 0;while (nums[i] < n) {int num nums[i];nums[i] n;i num;cnt;}ans max(ans, cnt);…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-11-04目录1. Alopex: A Computational Framework for Enabling On-Device Function Calls with LLMs摘要&#xff1a;研究背景&…

智能运维:提升效率与响应速度的关键能力

在当今这个信息化高速发展的时代&#xff0c;运维工作的重要性日益凸显。一个高效、智能的运维系统不仅能够确保企业IT环境的稳定运行&#xff0c;还能在出现问题时迅速响应&#xff0c;最小化业务中断的影响。本文将深入探讨现代运维系统应具备的关键能力&#xff0c;包括告警…

Linux 下网络套接字(Socket) 与udp和tcp 相关接口

文章目录 1. socket常见API2 sockaddr结构体及其子类1. sockaddr结构体定义&#xff08;基类&#xff09;2. 子类 sockaddr_in结构体用于(IPv4)3 子类 sockaddr_un(Unix域套接字)4. 总结画出其结构体 3.实现一个简单的tcp Echo 服务器和客户端(cpp&#xff09;3.1 客户端3.2 服…

IPv6基础知识

IPv6是由IEIF提出的互聯網協議第六版&#xff0c;用來替代IPv4的下一代協議&#xff0c;它的提出不僅解決了網絡地址資源匱乏問題&#xff0c;也解決了多種接入設備接入互聯網的障礙。IPv6的地址長度為128位&#xff0c;可支持340多萬億個地址。如下圖&#xff0c;3ffe:1900:fe…

24首届数证杯(流量分析部分)

目录 流量分析 流量分析 1、分析网络流量包检材&#xff0c;写出抓取该流量包时所花费的秒数?(填写数字&#xff0c;答案格式:10) 3504相加即可 2、分析网络流量包检材&#xff0c;抓取该流量包时使用计算机操作系统的build版本是多少? 23F793、分析网络流量包检材&#x…

Linux(CentOS)安装达梦数据库 dm8

CentOS版本&#xff1a;CentOS 7&#xff0c;查看操作系统版本信息&#xff0c;请查阅 查看Linux内核版本信息 达梦数据库版本&#xff1a;dm8 一、获取 dm8 安装文件 1、下载安装文件 打开达梦官网&#xff1a;https://www.dameng.com/ 下载的文件 解压后的文件 2、上传安…

vue-i18n下载完报错

解决方法&#xff1a; 这是i18n版本太高了&#xff0c;与当前VUE版本不谦容&#xff1b; 查看版本&#xff1a;npm view vue-i18n versions 选择其中一个低版本&#xff0c;不要太低的 npm install vue-i18n7.3.22.可以删掉依赖包重新下载试试 报错类似如下&#xff1a; 1…/…

Docker环境搭建Cloudreve网盘服务(附shell脚本一键搭建)

Docker搭建Cloudreve Cloudreve介绍&#xff1a; Cloudreve 是一个基于 ThinkPHP 框架构建的开源网盘系统&#xff0c;旨在帮助用户以较低的成本快速搭建起既能满足个人也能满足企业需求的网盘服务。Cloudreve 支持多种存储介质&#xff0c;包括但不限于本地存储、阿里云OSS、…

凹凸/高度贴图、法线贴图、视差贴图、置换贴图异同

参考&#xff1a; 凹凸贴图、法线贴图、置换贴图-CSDN博客 视差贴图 - LearnOpenGL CN 1,Learn about Parallax(视差贴图) - 知乎 “视差贴图”的工作流程及原理(OpenGL) - 哔哩哔哩 法线与置换贴图原理讲解以及烘焙制作&#xff01; - 知乎 1. Bump Mapping 凹凸贴图 BumpMap…

Vant组件

结合项目学习下Vant组件。 Vue2&#xff1a;Vant 2 - Mobile UI Components built on Vue Vue3&#xff1a;Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. 课程地址&#xff1a;【vue-vant组件库】 https://www.bilibili.com/video/BV1q5411E7…

【DEKF算法】DEKF(双扩展卡尔曼滤波算法)估计锂电池荷电状态,SOC与SOH联合仿真

摘要 本文研究了基于双扩展卡尔曼滤波&#xff08;DEKF&#xff09;算法对锂电池荷电状态&#xff08;SOC&#xff09;和健康状态&#xff08;SOH&#xff09;的估计问题。通过构建锂电池的等效电路模型&#xff08;ECM&#xff09;&#xff0c;将SOC与SOH联合估计&#xff0c…

4-3 AUTOSAR BSW IO抽象

返回总目录->返回总目录<- 目录 一、概述 二、示例接口 一、概述 在AUTOSAR中,IO抽象模块的主要作用是提供对硬件设备的控制和访问。它包括了以下几个主要模块: DIO(Digital Input/Output):用于控制数字输入和输出信号,例如控制LED灯的开关或读取按键状态…

【动手学深度学习Pytorch】1. 线性回归代码

零实现 导入所需要的包&#xff1a; # %matplotlib inline import random import torch from d2l import torch as d2l import matplotlib.pyplot as plt import matplotlib import os构造人造数据集&#xff1a;假设w[2, -3.4]&#xff0c;b4.2&#xff0c;存在随机噪音&…

【数据结构】树——顺序存储二叉树

写在前面 在学习数据结构前&#xff0c;我们早就听说大名鼎鼎的树&#xff0c;例如什么什么手撕红黑树大佬呀&#xff0c;那这篇笔记不才就深入浅出的介绍二叉树。 文章目录 写在前面一、树的概念及结构1.1、数的相关概念1.2、数的表示1.3 树在实际中的运用&#xff08;表示文…

Linux常用命令,持续更新钟

在Linux系统中&#xff0c;你可以使用多种命令来拷贝和移动文件及目录。以下是常用的几个命令及其用法&#xff1a; 一、拷贝文件或目录 cp 命令 cp 命令用于拷贝文件或目录。 拷贝文件&#xff1a; cp source_file destination_file 例如&#xff1a; cp file1.txt /hom…

计算机视觉中的双边滤波:经典案例与Python代码解析

&#x1f31f; 计算机视觉中的双边滤波&#xff1a;经典案例与Python代码解析 &#x1f680; Hey小伙伴们&#xff01;今天我们要聊的是计算机视觉中的一个重要技术——双边滤波。双边滤波是一种非线性滤波方法&#xff0c;主要用于图像去噪和平滑&#xff0c;同时保留图像的边…

Ubuntu 22.04 上快速搭建 Samba 文件共享服务器

Samba 简介 Samba 是一个开源软件&#xff0c;它扮演着不同操作系统间沟通的桥梁。通过实现 SMB&#xff08;Server Message Block&#xff09;协议&#xff0c;Samba 让文件和打印服务在 Windows、Linux 和 macOS 之间自由流动。 以下是 Samba 的特点&#xff1a; 跨平台兼…

在MATLAB中实现自适应滤波算法

自适应滤波算法是一种根据信号特性自动调整滤波参数的数字信号处理方法&#xff0c;其可以有效处理噪声干扰和信号畸变问题。在许多实时数据处理系统中&#xff0c;自适应滤波算法得到了广泛应用。在MATLAB中&#xff0c;可以使用多种方法实现自适应滤波算法。本文将介绍自适应…

AWTK-WIDGET-WEB-VIEW 发布

awtk-widget-web-view 是通过 webview 提供的接口&#xff0c;实现的 AWTK 自定义控件&#xff0c;使得 AWTK 可以方便的显示 web 页面。 项目网址&#xff1a; https://gitee.com/zlgopen/awtk-widget-web-view webview 提供了一个跨平台的 webview 接口&#xff0c;是一个非…