Splatt3R: Zero-shot Gaussian Splatting from Uncalibrated Image Pairs 论文解读

目录

一、概述

二、相关工作

1、近期工作

2、DUSt3R

3、MASt3R

三、Splatt3R

1、MASt3R的Backbone 

2、高斯预测头

3、点云与3D高斯参数结合

5、损失函数


一、概述

        该论文首次提出了一种无需任何相机参数和深度信息,从未校准图像中预测3D高斯模型的方法。该论文建立在MASt3R模型架构之上,并添加了高斯解码器预测3DGS原语。

(1)在MASt3R基础上加了一个高斯预测头,可以从未校准的图像中预测高斯原语,而MASt3R只能预测3D点云。

(2)训练过程中只训练高斯预测头,其他部分使用预训练好的MASt3R模型,利用了MASt3R的泛化能力,并且减少重复训练消耗。

(3)提出一种新的损失掩码策略,可以更好地处理输入相机看不见的部分的外推视点,避免预测这些无法观测的区域。

二、相关工作

1、近期工作

        在三维新视图合成领域(NVS),NeRF技术依赖于光线追踪的方式,通过密集收集图片送入神经网络训练隐式神经辐射场。3DGS通过训练3D高斯原语,并通过光栅化方法来提高训练和渲染速度。

        在pixelSplat、MVSplat、GPS-Gaussian、SplatterImage、Flash3D模型都需要依赖相机参数预测3DGS原语,FlowCam论文考虑了未知相机参数的问题,但仍需要将图片按序的输入,而该论文Splatt3R中考虑到对于未知相机参数的影响,不需要按序输入。

        GGRt论文中考虑不使用已知相机或内在技术的情况下建立3DGS模型,但仍需要密集的采集图像集进行迭代优化来拟合3DGS原语(依赖密集图像集),而且在梯度过大,过于偏离正确位置的情况下容易陷入局部最优(存在局部最优,可能难以泛化到未校准图像)

2、DUSt3R

        DUSt3R:提出了一种从一对无校准立体图像中预测点云的方法,但是预测的点云无法直接渲染,原因有三:一是,点云中点的具体位置并不清晰,二是,由于输出经过了归一化,缺乏真实的尺度信息,三是,由于输出是建立在相机坐标系下,需要全局对齐到世界坐标才能得到真实三维点云场景,但DUSt3R没有做这一步。

        DUSt3R的流程:

(1)输入一对RGB图像I_1,I_2,分别经过一个共享权重的ViT编码器得到特征F_1,F_2

(2)将这两个特征输入到两个Transformer解码器中,解码器通过交叉注意力机制交换信息(类似于配准前面的匹配工作)。

(3)利用两个回归头输出两个点云X^{1,1},X^{2,1}以及置信度C^1,C^2。这两个点云都是在第一个图片I_1坐标系下。

(4)损失函数两部分构成,三维空间回归损失和置信度感知损失。

三维空间回归损失:预测点云与地面GT点云之间的欧式距离的归一化。(所以也就照应了前面没有比例的问题)。

置信度感知损失:置信度分数的似然函数。

总损失:在每个像素下的三维空间回归损失与置信度感知损失的差。

3、MASt3R

        MASt3R:考虑在DUSt3R基础上增加了密集局部特征图回归的头部,并使用InfoNCE损失进行训练,并且采用了由粗到细的匹配方案,在多个尺度进行匹配(参考了CoFiNet?),另外输出更为密集的3D点云,同时估计相机的位姿。

        下图为网络结构(跟DUSt3R类似吧)

        MASt3R流程:

(1)特征预测头:相较于DUSt3R,增加了新的Head_{desc},用来预测局部的特征,Head_{desc}实现为两层MLP加一层GELU。

(2)快速最近邻匹配:用于两个预测的特征图和点云提取特征或者点云对应关系。最近邻公式其实就是满足条件像素i(或者特征,点云位置)在D_1中的最近邻是像素j在D_2的最近邻。

(3) Coarse2Fine:首先在小分辨率图像中进行匹配,得到粗的对应关系,再逐渐迭代到高分辨率的图像的进行匹配。(这不就是CoFiNet吗,乐)

(4)损失函数:由三部分构成,在之前的基础上加了匹配损失函数。

        匹配损失函数L_{match }:采用InfoNCE损失,鼓励每个局部描述子只与另一幅图像中表示同一3D点的描述子匹配。

        总损失:L=L_{conf}+\beta L_{match}

三、Splatt3R

         Splatt3R的网络结构由MASt3R的Backbone,新增加的高斯头,点云与3D高斯参数结合,视角渲染四个部分。

1、MASt3R的Backbone 

        首先使用MASt3R训练一个Backbone然后frozen住。对于特征预测头只是用于前期训练MASt3R Backbone阶段的损失函数,对于后面Splatt3R的损失函数是用不到的。对于点云头只输出点云。

2、高斯预测头

        在训练Splatt3R的部分,我们只训练高斯预测头。高斯预测头预测四个参数(偏移量\Delta,协方差矩阵\Sigma,球谐函数S,不透明度\alpha),然后3D高斯的平均位置\mu转换为偏移量加原来的3D高斯位置x其实这个就是MVSplat对于3D高斯原语的预测方法。

3、点云与3D高斯参数结合

        这一部分就是将点云位置x,作为3D高斯的位置,然后将高斯预测头预测的偏移量\Delta叠加到点云位置上,输出3D高斯原语。

        另外在原来训练好的MASt3R模型进行frozen,也保证了3D高斯原语训练时由于梯度离正确位置过远,而导致陷入局部最优,也之间监督3D点云位置到高斯原语之间的一条单调递减的损失函数,保证训练。(其实就是锁住原始3D点云位置x,但是3D点云位置一定可以做3D高斯椭球集的中心初始化吗??

4、3D高斯渲染

        首先使用3D高斯参数直接进行3DGS渲染,另外使用Mask的策略,只对被重建的部分进行监督,避免对看不见的区域进行更新。

        在训练过程中Splatt3R会选择两张上下文图像(允许上下文无关视图监督?)和三张目标图像,由于上下文图像之间存在一定的直接对应关系,另外目标图像中也存在一定像素在上下文图像中。但由于模型会预测无限远的距离,这不仅浪费一些无用的计算,也会将较远的距离(看不到的图像)叠加在三维场景中,造成错误图像视角,所以论文加入了一些掩码在损失中,用于限制损失的计算范围,避免模型去预测无法从输入图像中推断的区域。

5、损失函数

        损失函数由两部分组成,MSE和LPIPS的损失,并且我们只计算掩码覆盖的区域的损失。

        MSE损失用于限制生成图像与目标图像之间的像素级差异(均方差)

        LPIPS损失用于衡量生成图像与目标图像之间的相似度。

        总损失:L=\lambda_{MSE}L_{MSE}+\lambda_{LPIPS}L_{LPIPS},一般建议\lambda_{MSE}=1.0,\lambda_{LPIPS}=0.25

四、实验 

1、对比实验

        对比视角不同下的的不同模型的性能,视角越近重叠越高,视角越远重叠越低。

2、消融实验

 

参考文献:Splatt3R: Zero-shot Gaussian Splatting from Uncalibrated Image Pairs 

参考代码:https://github.com/btsmart/splatt3r/tree/main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值