《Probing the 3D Awareness of Visual Foundation Models》论文剖析——多视图同等性

[复制链接]
发表于 2025-12-23 17:55:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
一、论文简介

        论文讨论了大规模预训练产生的视觉根本模子在处理处罚恣意图像时的强大本事,这些模子不但可以或许完成训练任务,此中央表现还对其他视觉任务(如检测和分割)有效。研究者们提出了一个标题:这些模子是否可以或许表现物体的三维布局。他们通过一系列实行,利用特定任务的探针和零样本推理步伐来分析这些模子的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布局表现。
  1. import numpy as np
  2. def check_multiview_consistency(image1, image2, threshold=0.5):
  3.     """
  4.     检查两幅图像是否具有多视图一致性。
  5.    
  6.     :param image1: 第一幅图像的特征向量
  7.     :param image2: 第二幅图像的特征向量
  8.     :param threshold: 一致性阈值
  9.     :return: 布尔值,表示是否一致
  10.     """
  11.     # 计算两幅图像特征向量之间的余弦相似度
  12.     dot_product = np.dot(image1, image2)
  13.     norm1 = np.linalg.norm(image1)
  14.     norm2 = np.linalg.norm(image2)
  15.     similarity = dot_product / (norm1 * norm2)
  16.    
  17.     # 如果相似度大于阈值,则认为两幅图像具有多视图一致性
  18.     return similarity > threshold
  19. # 假设的图像特征向量
  20. image1_features = np.array([1, 2, 3, 4, 5])
  21. image2_features = np.array([1.1, 2.1, 2.9, 4.1, 5.1])
  22. # 检查一致性
  23. is_consistent = check_multiview_consistency(image1_features, image2_features)
  24. print(f"The images are {'consistent' if is_consistent else 'not consistent'}.")
复制代码
        2.多视图同等性的均匀视图重修

        这个示例将展示怎样利用多个视图的均匀特性来重修一个同等的3D视图。
  1. import numpy as np
  2. def average_views(*views):
  3.     """
  4.     计算多个视图的平均特征向量。
  5.    
  6.     :param views: 多个视图的特征向量
  7.     :return: 平均特征向量
  8.     """
  9.     # 计算平均特征向量
  10.     average_feature = np.mean(views, axis=0)
  11.     return average_feature
  12. # 假设的多个视图特征向量
  13. view1 = np.array([1, 2, 3])
  14. view2 = np.array([1, 2, 3.5])
  15. view3 = np.array([1, 2, 2.5])
  16. # 计算平均视图
  17. average_view = average_views(view1, view2, view3)
  18. print("Average view features:", average_view)
复制代码
        3.多视图同等性的特性匹配

        这个示例将展示怎样在两个视图之间找到同等的特性点。
  1. import numpy as np
  2. from scipy.spatial import distance
  3. def match_features(view1, view2, threshold=0.5):
  4.     """
  5.     在两个视图中匹配特征点。
  6.    
  7.     :param view1: 第一个视图的特征点
  8.     :param view2: 第二个视图的特征点
  9.     :param threshold: 匹配阈值
  10.     :return: 匹配的特征点对
  11.     """
  12.     matches = []
  13.     for feature1 in view1:
  14.         for feature2 in view2:
  15.             # 计算两个特征点之间的欧氏距离
  16.             if distance.euclidean(feature1, feature2) < threshold:
  17.                 matches.append((feature1, feature2))
  18.     return matches
  19. # 假设的两个视图特征点
  20. view1_features = np.array([[1, 2], [3, 4], [5, 6]])
  21. view2_features = np.array([[1.1, 2.1], [3.1, 4.1], [6, 7]])
  22. # 匹配特征点
  23. matched_features = match_features(view1_features, view2_features)
  24. print("Matched feature pairs:", matched_features)
复制代码
        这些示例提供了多视图同等性的根本框架和概念。在现实应用中,您大概须要利用更复杂的算法和数据集来处理处罚真实的图像和3D数据。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表