Contents

DUSt3R系列学习

密集无约束三维重建

Dense and Unconstrained Stereo 3D Reconstruction

通过一种全新的方法简化几何3D视觉任务,特别是在密集3D重建方面

实质是结合深度学习技术进行多视图密集三维重建。基于ViT架构

当前理解:通过自定义的dust3r网络解决了3d视觉中核心的关键点匹配问题,通过该深度网络得到了PnP问题的输入(一些2d-3d对应点),并用于后续广泛的3d任务。

DUSt3R

整体理解

DUSt3R最大的创新点在于它提出了一种新的三维重建框架,该框架在以下几个方面实现了显著的突破:

  1. 无需相机校准信息:DUSt3R能够在没有任何相机校准信息(包括相机内参和姿态)的情况下进行三维重建。这一点与传统多视图立体重建(MVS)算法不同,后者通常需要这些信息来在三维空间中对齐像素。
  2. 点图映射(Pointmap)概念:该方法将成对的图像重建问题视为点图的回归问题,从而放宽了传统投影相机模型的严格约束。这种新的点图映射方法不仅统一了单目和双目重建的情况,而且还能够在多图像情况下,通过一个简单的全局对齐策略,将所有成对点图表达在一个共同的参考框架中。
  3. 基于Transformer的网络架构:DUSt3R的网络架构基于标准的Transformer编码器和解码器构建,这使得模型能够利用强大的预训练模型,并直接提供场景的3D模型和深度信息。
  4. 端到端的3D重建流程:该方法提供了一个端到端的解决方案,从输入图像直接到三维模型的输出,简化了重建流程,提高了效率和准确性。
  5. 全局对齐策略:DUSt3R提出了一种简单而有效的全局对齐策略,用于在提供两幅以上图像的情况下,将所有成对点图在一个公共参考系中表示。

总的来说,DUSt3R的创新之处在于它简化了三维重建的流程,提高了效率和准确性,并且能够在没有相机校准信息的情况下进行重建,这在计算机视觉领域是一个重大的进步。

croco网络

CroCo网络是一个创新的自我监督学习模型,主要用于3D视觉任务。
这个项目最初源于NeurIPS 2022年的论文《CroCo: 跨视图完成自监督预训练3D视觉任务》,并在ICCV 2023年进行了扩展。
CroCo的核心是通过跨视图图像的恢复和完成,为3D视觉任务提供一个强大的预训练框架。

技术特点

  1. 自我监督学习:CroCo利用跨视图图像之间的关系进行无监督学习,无需任何额外的标注数据。这种方法使得模型能够通过跨视图图像恢复实现自我监督训练。
  2. Transformer架构:CroCo基于Transformer,其编码器对输入图像进行特征提取,而解码器则负责完成遮挡部分的图像重建。
  3. RoPE位姿嵌入(CroCo v2):为了增强位置信息的学习,模型采用了旋转平移嵌入(RoPE),这是一种计算高效的嵌入方法,能更好地捕捉空间关系。
  4. 多阶段预训练:模型首先在合成数据集上预训练,然后在真实世界数据上进一步微调,以提高泛化能力。

应用场景

  • 3D视觉任务:如立体匹配(找到两个不同视角下相同物体的对应像素)和光流估计(追踪帧间的运动像素)。
  • 自动驾驶:通过准确的立体匹配和光流预测,提升自动驾驶系统的环境感知能力。
  • 机器人导航:在复杂的室内或室外环境中,帮助机器人理解并导航。

项目结构

CroCo项目的目录结构包括多个部分:

  • assets/:存放项目所需的静态资源文件。
  • datasets/:存放数据集相关文件,包括数据集的预处理和生成脚本。
  • models/:存放模型的定义和实现代码。
  • stereoflow/:存放与立体匹配和光流任务相关的代码。
  • utils/:存放项目中使用的各种工具函数和辅助代码。

此外,项目还包括一些关键的脚本和文件,如demo.py用于运行项目的核心功能,pretrain.py用于模型预训练。

使用方法

CroCo项目没有明确的配置文件,但可以通过命令行参数或环境变量来配置项目的行为。例如,使用python demo.py命令可以运行项目,并通过参数指定预训练模型的路径、数据集路径和输出结果保存路径等。

总的来说,CroCo是一个适用于多种3D视觉任务的开源项目,提供了创新的自我监督预训练策略和强大的3D视觉处理能力,非常适合深度学习研究人员和希望提升3D视觉应用性能的开发者使用

pnp问题的输入

PnP(Perspective-n-Point)问题的输入通常包括以下几部分,这些输入可以通过不同的方法获取:

  1. 图像特征点
    • 这些是从图像中检测到的与真实世界中的某些已知点相对应的像素坐标。通常,这些点是通过以下步骤获取的:
      • 特征检测:使用如SIFT、SURF、ORB、FAST等算法检测图像中的关键点。
      • 特征匹配:将检测到的关键点与已知的世界坐标系中的点进行匹配。这可以通过特征描述符的比较来完成,例如使用FLANN或BFMatcher。
  2. 对应的世界坐标点
    • 这些是与图像特征点对应的真实世界中的点的三维坐标。获取这些点的方法包括:
      • 手工测量:如果场景中包含已知尺寸的物体(如标定板),可以通过手工测量来获取这些点的世界坐标。
      • 三维扫描:使用三维扫描设备(如激光扫描仪)来获取物体的三维模型,并从模型中提取坐标点。
      • CAD模型:如果场景中的物体有CAD模型,可以直接从模型中提取坐标点。
  3. 相机内参
    • 这些参数描述了相机的内部属性,如焦距、主点坐标以及镜头畸变参数。获取内参的方法有:
      • 相机标定:使用已知尺寸的标定板(通常是棋盘格图案)进行标定,通过拍摄不同角度的标定板图像来计算内参。
      • 自标定:在某些情况下,可以使用自标定技术从图像序列中估计内参,无需使用特定的标定图案。

以下是获取PnP问题输入的一般步骤:

  1. 准备标定板:使用已知尺寸的标定板(通常是棋盘格或圆点图案)。
  2. 拍摄图像:从不同的视角拍摄标定板的图像。
  3. 检测特征点:在图像中检测标定板的角点或圆点中心。
  4. 建立对应关系:将检测到的图像特征点与标定板上的物理点对应起来。对于棋盘格,这通常意味着将每个角点与其在标定板上的三维坐标相对应。(一般是通过算法自动完成的)
  5. 相机标定:使用检测到的图像点和对应的三维坐标来计算相机的内参和外参。
  6. 求解PnP问题:一旦有了图像特征点、对应的世界坐标点和相机内参,就可以使用PnP算法来估计相机在拍摄图像时的姿态(旋转和平移)。

在实际应用中,获取PnP问题输入的过程可能需要精细的操作和校准,以确保准确性。此外,为了提高PnP算法的鲁棒性和准确性,通常会使用多个图像和特征点。

DPT

Deep Predictive Transformer

深度预测transformer

密集预测头 0311

点图

PointMaps是一种数据结构,常用于计算机图形学、地理信息系统(GIS)、机器人导航和3D建模等领域。它是用来存储、管理和查询三维空间中点的集合。以下是对PointMaps的详细解释和如何理解它:

  1. 定义
    • PointMaps是一个由点组成的集合,每个点在三维空间中都有其独特的坐标(通常表示为(x, y, z))。
  2. 特点
    • 空间索引:为了高效地查询和管理点,PointMaps通常使用空间索引,如KD树、八叉树或R树等数据结构。
    • 动态性:PointMaps可以动态地添加或删除点,而不需要重新构建整个数据结构。
    • 多维度:虽然通常指的是三维空间中的点,但PointMaps也可以扩展到更高维度的空间。
  3. 应用
    • 3D建模:在3D建模中,PointMaps可以用来表示物体的表面,尤其是在使用点云数据进行建模时。
    • GIS:在GIS中,PointMaps可以用来表示地理空间中的特定位置,如城市中的地标或监测点。
    • 机器人导航:在机器人导航中,PointMaps可以用来表示环境中的障碍物或关键点,帮助机器人规划路径。
  4. 如何理解
    • 直观理解:可以将PointMaps想象为一个三维空间中的散点图,每个点都有其特定的位置。
    • 功能理解:理解PointMaps的关键在于其背后的数据结构和算法,这些结构使得对点的快速检索和操作成为可能。
    • 应用理解:通过具体的例子来理解PointMaps的应用场景,如使用PointMaps来构建数字地形模型或进行城市规划设计。

简而言之,PointMaps是一个强大的工具,用于在三维空间中表示和管理点的集合,它的应用广泛,并且在各种技术和科学领域中扮演着重要角色。

PointMap 作为一种稠密点云的中间表示,帮助 DUST3R 处理场景的几何细节,翻译为点映射可能更好理解。

点图vs.点云

点图(Point Maps)和点云(Point Clouds)是两个在概念上相似但在应用和细节上有所不同的术语。以下是它们之间的主要区别:

点云(Point Clouds):

  1. 定义
    • 点云是由大量在三维空间中分布的点组成的数据集。这些点通常代表从现实世界中扫描或测量的物理对象的表面。
  2. 特性
    • 点云通常包含大量的点,可以非常详细地表示一个对象或环境的形状和结构。
    • 点云数据通常是无序的,每个点都是独立的,没有特定的顺序。
    • 点云可以包含额外的信息,如颜色、强度或其他传感器数据。
  3. 应用
    • 主要用于三维扫描、三维建模、建筑信息模型(BIM)、地形测绘、考古、机器人导航等领域。
    • 用于创建精确的数字副本或模型,用于设计、分析或记录。
  4. 数据管理
    • 点云数据量大,需要有效的数据管理和处理技术。
    • 常用的文件格式包括PLY、LAS、PCD等。

点图(Point Maps):

  1. 定义
    • 点图通常是指一种抽象的数据结构,用于存储和管理空间中的点数据。
  2. 特性
    • 点图可能包含较少的点,它们通常用于表示特定的信息或特征,而不是整个对象的详细结构。
    • 点图可能是有序的,用于特定的数据表示或计算任务。
  3. 应用
    • 主要用于地图制作、地理信息系统(GIS)、计算机图形学等领域。
    • 用于表示特定位置的数据,如地标、监测点或特定事件的位置。
  4. 数据管理
    • 点图的数据量可能较小,更注重于点的位置信息和查询效率。
    • 可能不依赖于特定的文件格式,而是作为数据库或软件应用程序的一部分。

总结:

  • 数据量和细节:点云通常包含大量的点,用于详细表示物理对象;而点图可能包含较少的点,用于表示特定的信息。
  • 应用领域:点云主要用于三维建模和扫描;点图则更多用于地图制作和GIS。
  • 数据结构:点云是无序的数据集合;点图可能是有序的,且可能包含更复杂的数据结构来支持特定的查询和操作。

尽管两者有区别,但在实际应用中,点图和点云的概念有时会交叉使用,尤其是在处理空间数据时。

Hugging Face

Hugging Face 是一家专注于自然语言处理(NLP)和生成式人工智能的开源平台与工具提供商,广受开发者和研究人员欢迎。它以其强大的开源库和社区支持而闻名,致力于简化机器学习模型的开发、训练、部署和共享过程。


Hugging Face 的主要组件

1. Transformers 库

  • 核心功能:

    • 提供大量预训练模型(如 BERT、GPT、T5 等)和 NLP 任务支持(如文本分类、翻译、生成、问答等)。
    • 支持主流深度学习框架(PyTorch 和 TensorFlow)。
    • 快速上手迁移学习,减少开发时间。
  • 示例代码:

    1
    2
    3
    4
    5
    6
    7
    8
    
    python
    Copy code
    from transformers import pipeline
    
    # 使用预训练模型进行文本分类
    classifier = pipeline("sentiment-analysis")
    result = classifier("Hugging Face is amazing!")
    print(result)
    

2. Datasets 库

  • 功能:

    • 提供多种开源数据集(包括 NLP 和多模态数据)。
    • 支持高效加载、预处理和流式处理。
    • 与 Transformers 完美集成。
  • 示例代码:

    1
    2
    3
    4
    5
    6
    7
    
    python
    Copy code
    from datasets import load_dataset
    
    # 加载 IMDb 数据集
    dataset = load_dataset("imdb")
    print(dataset["train"][0])
    

3. Hub

  • 描述:
    • 一个在线平台,用于共享和托管模型、数据集和相关资源。
    • 用户可以上传自己的模型或直接使用其他人共享的模型。
    • 提供 API 接口,方便集成到应用中。
  • 示例:
    • Hugging Face Hub 上可以找到 GPT、BERT 等预训练模型。

4. Accelerate

  • 功能:
    • 提供简单的分布式训练工具。
    • 支持多 GPU 和 TPU 环境下的高效训练。
    • 降低训练大规模模型的技术门槛。

5. Other Libraries

  • Tokenizers
    • 提供高效的子词分词工具,支持快速分词操作。
  • PEFT(Parameter-Efficient Fine-Tuning):
    • 提供轻量化的微调工具,适合低资源环境。
  • Diffusers
    • 主要用于生成式 AI 模型(如 Stable Diffusion)。

FAQ

1、输入是什么,几个视图?

默认应该是两视图(2张有重叠度图像),也可以是多视图

DUSt3R是一个基于 Transformer 的无监督三维重建模型,其核心优势在于能从单一视角的图像数据中生成稠密的三维点云。
虽然 DUST3R 本身并不是为多视角设计的,但它仍能处理多张来自不同视角的图像,只是每张图像通常会被独立处理,并在后期通过图像配准等技术合并成三维模型。

因此,DUST3R 本身主要针对两视角重建,虽然可以处理多个视角,但对于多视角图像的几何信息融合并没有专门的优化。它更多依赖于图像中的特征和深度估计进行重建。

DUST3R 处理的是图像对

DUST3R(Dense and Unsupervised Structure-from-Motion with Transformer-based Reconstruction)是一个无监督的三维重建模型,处理的输入通常是 一对图像,即两张从不同视角拍摄的图像。通过这种图像对,DUST3R 能够从图像的视差中推断出三维结构,生成稠密的三维点云。

  • 图像对:DUST3R 基于来自不同视角的图像对进行重建。例如,给定两张具有一定视角差异的图像(例如,左右视图),DUST3R 会计算这些图像之间的匹配关系(例如,图像的特征匹配),并利用这些信息进行三维重建。
  • 单视角和多视角:你是对的,DUST3R 是专门设计来处理图像对的,而不是单视角图像。在这种方法中,DUST3R 通过深度学习模型学习如何从两张图像推断深度信息,并生成稠密的三维重建。因此,DUST3R 主要关注 两个视角之间的关系(而非一个单独的视角)。

为什么 DUST3R 可以处理图像对

DUST3R 利用图像对的结构来进行无监督学习和三维重建。这一过程利用了以下几个关键的步骤:

  1. 特征提取
    • DUST3R 会从每一张图像中提取特征(通常使用卷积神经网络)并通过这些特征来计算视差(disparity)或深度信息。
  2. 视差估计
    • 通过计算两张图像之间的视差,DUST3R 能够推断出场景的深度信息。这个视差本质上是通过两张图像中同一物体的不同位置来估算的,这种方法与传统的立体视觉非常相似。
  3. 无监督学习
    • DUST3R 不依赖于人工标注的深度信息或相机位姿,而是通过无监督学习来优化三维重建。它通过最小化图像对之间的重建误差来优化模型,使得三维点云能够更好地匹配输入图像。

DUST3R 与多视角的关系

虽然 DUST3R 主要是处理图像对,但在理论上,它可以扩展为处理多个图像视角。然而,DUST3R 设计时并没有专门优化为多视角(三张或更多图像)的重建任务。它是基于图像对的重建方法,也就是说,每次输入的是一对图像,通过计算它们之间的深度信息进行重建。

如果要处理多视角场景(比如多个视角的图像序列),则需要进行一些额外的步骤,如 图像配准相机位姿估计 或其他图像对之间的匹配策略。MV-DUST3R+(DUST3R 的扩展版本)则专为处理多视角图像进行优化,能够在多个视角之间进行信息融合,从而提高重建精度。

总结

  • DUST3R 主要处理 图像对,而不是单一视角的图像。
  • 通过无监督学习,它从图像对中推断三维结构。
  • DUST3R 可以扩展到处理多视角图像,但其本身设计上是基于两张图像的立体重建模型。
  • 如果需要处理更多视角或多个图像,MV-DUST3R+ 是其更高版本,专门优化了多视角三维重建。

2、点图如何理解?

一种抽象的三维数据结构,用于存储和管理空间中的点数据,此处可理解为二维图像点和对应的三维空间点以及它们之间的关系。

基于生成的点图可以推导出各种3d几何量,如相机参数、像素对应关系、深度图和完全一致的三维重建。

NVS

Novel View Synthesis (NVS) 技术,中文通常称为“新视角合成”,是一种计算机视觉技术,旨在从一组给定的图像(通常是从不同视角拍摄的)中生成新的视角的图像。
通过这种技术,可以在没有真实拍摄的情况下生成从不同角度观察同一场景的图像。这项技术在计算机图形学、虚拟现实、增强现实、三维重建等领域具有广泛应用。

基本概念:

NVS 目标是基于已有的图像数据,通过深度学习或传统图像处理技术生成场景的新的视角。
传统的图像合成通常依赖于事先已知的视角和场景深度信息,而 Novel View Synthesis 需要从有限的视角生成那些原本没有捕获的视角图像。

技术实现方式:

Novel View Synthesis 的技术实现方法可以大致分为以下几种:

1. 基于图像的合成

这种方法基于给定的多个视角图像,通过几何重建和图像合成技术来生成新的视角图像。常见的实现方式包括:

  • 视差图像合成:利用图像之间的视差信息,通过几何变换(如视角变换或深度图估计)来生成新视角的图像。
  • 多视角立体视觉:通过多视角图像的立体配准和视差计算,重建场景的三维结构,并生成新视角的图像。

2. 基于深度学习的生成方法

近年来,基于深度学习的 Novel View Synthesis 方法得到了广泛关注。这些方法通常使用生成对抗网络(GAN)或卷积神经网络(CNN)进行训练,直接从多个输入视角图像中学习到场景的深层特征,并生成新的视角图像。

  • 视角变换网络(View Synthesis Networks):这些网络直接学习如何将已有视角的图像映射到新的视角图像。常见的模型有 DeepVoxelsNeRF(Neural Radiance Fields)Mip-NeRFPIFu 等。
  • 神经辐射场(Neural Radiance Fields, NeRF):NeRF 是一种基于深度学习的重建模型,采用全新的方式通过深度神经网络直接从多个视角的图像生成高质量的三维重建和新的视角图像。它通过对场景进行隐式建模来生成从任意视角的图像。

3. 基于体积渲染的合成

这种方法通过对场景的 3D 信息进行建模,通常需要场景的 体积数据深度信息,并利用这些数据通过渲染技术生成新视角的图像。

  • 体积渲染(Volume Rendering):通过体积渲染方法,将多个视角的图像数据投影到一个三维空间内,并对该空间进行渲染,生成从新视角看到的图像。

4. 基于稀疏/稠密点云的重建

利用多个视角的图像生成稀疏或稠密的三维点云,然后通过合成或体积渲染等技术生成新视角的图像。这种方法通常依赖于图像的匹配、立体视觉和三维重建技术。

关键技术与方法:

1. 神经辐射场 (NeRF)

NeRF 是一种新兴的 Novel View Synthesis 技术,通过训练一个神经网络,直接从多个视角的 2D 图像生成一个 3D 场景的隐式表示,然后可以用来合成从任意新视角的图像。NeRF 基于体积渲染的理念,能够生成高质量、逼真的 3D 图像,特别适用于复杂的场景和高质量渲染。NeRF 的工作原理大致如下:

  • 将每个视角的图像和相机参数输入到神经网络。
  • 神经网络学习从图像中提取特征,并输出每个点的颜色和密度。
  • 利用体积渲染技术,将这些信息整合在一起,从而生成不同视角的图像。

2. 视角变换网络(View Synthesis Networks)

这类方法使用深度卷积神经网络(CNN)来学习不同视角之间的映射关系,进而进行新视角图像的合成。例如:

  • DeepVoxels:通过学习不同视角图像的特征映射,生成目标视角的图像。
  • PIFu (Pixel-Aligned Implicit Function):一种基于深度学习的模型,能够生成更高精度的三维重建,并从任意视角生成图像。

3. 基于图像配准与几何建模的方法

通过图像之间的配准和深度图的重建,基于几何变换(如视差、立体视觉等)合成新视角图像。这种方法通常依赖于传统的计算机视觉技术,如光束法平差(Bundle Adjustment)和多视图立体重建。

应用领域:

  1. 虚拟现实与增强现实(VR/AR)
    • 在 VR/AR 应用中,用户可以从任何角度查看三维虚拟场景,Novel View Synthesis 可以在有限的视角下生成从其他视角观察场景的图像,提升沉浸感。
  2. 电影与游戏产业
    • 利用 NVS 技术,可以为电影和游戏制作逼真的虚拟环境或人物角色的不同视角动画。
  3. 三维重建与测绘
    • 使用 NVS 技术生成高质量的三维场景模型,广泛应用于建筑建模、城市规划、文化遗产保护等领域。
  4. 自动驾驶与机器人视觉
    • NVS 技术可以用来生成从不同视角观察到的环境图像,帮助自动驾驶系统或机器人进行决策与路径规划。
  5. 医学成像
    • 在医学领域,NVS 技术可以根据不同的医学影像(如 CT、MRI)生成新视角的图像,用于诊断和手术规划。

总结

Novel View Synthesis (NVS) 是一种基于现有图像数据生成新视角图像的技术,具有广泛的应用前景,尤其在虚拟现实、增强现实、三维重建和计算机图形学等领域。随着深度学习技术的进步,尤其是像 NeRF 这样的模型,NVS 的质量和应用范围正不断拓展,能够生成更加真实和高质量的三维场景。

MASt3R

和DUSt3R同一机构,naver

https://mp.weixin.qq.com/s/CYXz_T3wwM3eli7jRUgqRQ

改进dust3r,增强了特征匹配和鲁棒性

monst3R

待续…

MV-DUSt3R+

多视角密集无约束三维重建

Multi-View Dense Unconstrained Stereo 3D Reconstruction

是 DUSt3R 算法的扩展,通过优化算法组件和实现方式,在不牺牲准确性的情况下,实现了显著的计算效率提升。这种改进使得 DUSt3R+ 能够更快地处理大量图像数据,从而加快了三维重建的速度。

多视角支持

改进的 Transformer 模型,更好地处理图像之间的时序和空间依赖关系

General Comprehension

To handle more views, reduce errors, and improve inference time

多视角、高精度、快速

MV-DUSt3R its core are multi-view decoder blocks which exchange information across any number of views while considering one reference view.

MV-DUSt3R+ employs cross-reference-view blocks to fuse information across different reference view choices.

contrast

MV-DUST3R+ 相较于 DUST3R 的改进与提升

MV-DUST3R+DUST3R 的扩展版本,专门针对 多视角 的三维重建任务进行优化,改进和提升主要体现在以下几个方面:

  1. 多视角信息融合
    • DUST3R 主要依赖单视角图像的深度推断进行三维重建。而 MV-DUST3R+ 专为处理多视角图像序列设计,能够从多个视角的图像数据中有效地提取和融合空间几何信息。通过集成多个视角,MV-DUST3R+ 能够捕捉到更丰富的场景信息,提升了重建精度和细节。
    • MV-DUST3R+ 中,Transformer 模型 被用来增强不同视角之间的空间关系建模,能够更好地融合来自不同视角的特征和深度信息。这种方法提高了多视角图像中相对位置和场景几何信息的理解,从而提供更为精确的三维结构重建。
  2. 基于 Transformer 的增强特征建模
    • DUST3R 使用 Transformer 进行单视角图像特征的建模和三维重建,但它主要侧重于处理单张图像中的深度信息。
    • MV-DUST3R+ 在此基础上做了扩展,优化了 Transformer 模型的结构,使其能更好地处理多个视角图像的相互关系。特别是,它采用了 自注意力机制,能够通过不同视角的图像之间的信息传递,更好地捕捉和建模三维场景的全局几何。
  3. 多视角优化
    • MV-DUST3R+ 采用了多视角图像的联合优化,能够在不同图像之间共享信息,以减少由于单一视角带来的重建误差。传统的三维重建方法通常依赖图像匹配和相机位姿估计,而 MV-DUST3R+ 通过深度学习网络直接从图像中学习这些几何信息,避免了传统方法中的复杂预处理和人工干预。
    • 这使得 MV-DUST3R+ 能在更多复杂的场景中表现出更高的鲁棒性,例如动态场景、遮挡物、光照变化等。
  4. 端到端的无监督训练
    • 和 DUST3R 一样,MV-DUST3R+ 依然保持了无监督学习的特点,不需要人工标注的训练数据。这使得它能够在没有标定数据的情况下进行训练,并且能够根据输入的图像自动推断场景的三维结构。
    • 由于优化了多视角的联合训练,MV-DUST3R+ 在多视角的情况下,也能更好地学习到不同图像之间的几何关系,增强了场景的重建质量。
  5. 稠密点云和高精度重建
    • MV-DUST3R+ 改进了点云生成的策略,能够提供更高精度的稠密重建。通过多视角图像的联合推断,网络能够生成更细致、更准确的三维点云,相比单视角重建的精度和细节有显著提升。

总结

  • DUST3R 主要是为单视角三维重建设计的,虽然可以处理多张图像,但它的优化并未特别针对多视角信息的融合。
  • MV-DUST3R+ 在 DUST3R 的基础上进行了多视角支持的扩展,使用 Transformer 强化了多视角图像之间的几何关系建模,能够从多个视角中提取信息并进行联合优化,最终提供更高精度的稠密三维重建。

MV-DUST3R+ 相比 DUST3R 的提升主要体现在以下几个方面:

  1. 更强的多视角信息融合能力;
  2. 基于 Transformer 的全局空间建模;
  3. 无监督的端到端优化训练;
  4. 提高了稠密三维点云的精度。

这些改进使得 MV-DUST3R+ 在处理动态、复杂的三维场景时比 DUST3R 更加精确和鲁棒,特别是在多个视角图像的重建任务中表现更好。

FAQ

1、如何扩展到处理多视角,实现细节?

2、如何提升性能,精度和速度方面,实现细节?

Fast3R

FAQ

1、pts3d_in_other_view是哪个view(相机坐标系)

2、默认所有图像是相同焦距
first_view_from_global_head

3、位姿估计 fast_pnp 100个点

能否改进

4、convert to colmap format

instantsplat

老版基于dust3r,新版基于mast3r

pipeline

1、点云生成

load预训练模型,成对预测点图,并进行全局对齐(需要训练),将最终结果以类colmap数据格式写入原始数据目录

内参是换算成了原始图像分辨率下的

进行了根据置信度直接点云下采样(dsp)

.
├── images 原始图像
│   ├── IMG20250219135528.jpg
│   ├── IMG20250219135531.jpg
│   ├── IMG20250219135535.jpg
│   ├── IMG20250219135536.jpg
│   └── IMG20250219135538.jpg
└── sparse_5 colmap格式数据目录
├── 0 for train
│   ├── cameras.bin
│   ├── cameras.txt 相机内参(对应原始图像)
│   ├── confidence.npy 点图置信度(N_views,H*W*3)
│   ├── confidence_dsp.npy 过滤后的置信度(n_pts,1)
│   ├── images.bin
│   ├── images.txt 图像外参
│   ├── imgs_5 ViT模型缩放后的图像
│   │   ├── IMG20250219135528.jpg
│   │   ├── IMG20250219135531.jpg
│   │   ├── IMG20250219135535.jpg
│   │   ├── IMG20250219135536.jpg
│   │   └── IMG20250219135538.jpg
│   ├── non_scaled_focals.npy 模型直接估计出的focals(与缩放图像对应)
│   ├── overlapping_masks_5 根据置信度生成的mask
│   │   ├── IMG20250219135528.jpg depth_thre default=0.01
│   │   ├── IMG20250219135531.jpg
│   │   ├── IMG20250219135535.jpg
│   │   ├── IMG20250219135536.jpg
│   │   └── IMG20250219135538.jpg
│   ├── points3D.ply 置信度下采样后的点云(pts+col)(mask(n_views*h*w), 3)
│   ├── points3D_all.npy 完全密集点云(点图)(n_views,h,w,3)
│   └── pointsColor_all.npy 点图对应的颜色信息
└── 1 for eval

6 directories, 25 files

2、点云转高斯

初始化高斯模型和场景,读取上一步类colmap格式数据并生成场景信息,进行高斯参数的迭代训练(关闭了Densification环节)

loss = (1.0 - opt.lambda_dssim) * Ll1 + opt.lambda_dssim * (1.0 - ssim_value)

相比原版高斯,增加了优化相机位姿

图像读取的也都是原始分辨率的,dataset_readers.py

def readColmapCameras(cam_extrinsics, cam_intrinsics, images_folder)

3、渲染出图及合成视频

load高斯模型和场景信息,根据原相机位姿插值形成多个相机,对所有相机位姿进行render出图并保存,最后将图像沿路径合成视频

使用训练的模型、优化后的位姿、原始图像,去插值、渲染图像并合成视频

chunked pcd align

colmap format content:

1 图像外参

只要融合点云中有相关点就保留

需要将target点云变换到source点云坐标系

2 相机内参

同上,图像分辨率/像素尺寸不变就不变

3 ply点云 分为完全密集点云和dsp下采样之后的

完全密集点云只跟图像相关,好像用不到

dsp就是融合之后的实际点云

4 npy图像数据(即点云颜色)

只跟保留的图像相关,好像用不到

5 原图、下采样的mask

下采样的mask需要根据点云融合情况相应调整

merge input data structure

1 每个视频按文件名存放在assets下面,每个分块数据保存在一个chunk文件夹下,

/posts/dust3r%E7%B3%BB%E5%88%97/image.png

每个分块数据调用VGGT模型,生成分块目录下colmap格式文件,再将配准、融合结果生成到merged目录下,后续训练高斯直接读取merged目录

── images
│ ├── frame_0001.jpg
│ ├── frame_0004.jpg
│ ├── frame_0007.jpg
└── sparse_3
└── 0
├── cameras.txt
├── images.txt
├── points3D.ply
├── refined_transformation.xxx

FAQ

插值视频生成报错

1
2
3
4
5
6
7
`imageio` 默认不包含视频编解码器,需额外安装插件:

### **安装 FFMPEG 后端**
pip install imageio[ffmpeg]

### **安装 PyAV 后端**
pip install imageio[pyav]

分块融合的必要数据

1、图像(原始、缩放)

原始图像是直接提供的,缩放图像是经过ViT模型处理后输出保存的

instantsplat默认读取的是原始分辨率的(与内参对应),实际也可以读取缩放的,只要内参和分辨率对应就行

2、内外参

cameras_extrinsic_file = os.path.join(path, f"sparse_{args.n_views}/0", "images.txt")

cameras_intrinsic_file = os.path.join(path, f"sparse_{args.n_views}/0", "cameras.txt")

3、融合后点云

ply_path = os.path.join(path, "sparse/0/points3D.ply")
pcd = fetchPly(ply_path)

4、下采样置信度dsp(per-point-optimizer需要,融合时需要保存筛选后点云在输入点云中的索引信息,可能会增加耗时)

非必需,可以不要

VGGT