CVPR 2024最佳论文候选-pixelSplat论文解读

news2024/11/17 12:55:49

目录

一、概述

二、相关工作

1、单场景下的视角合成

2、基于先验的三维重建和视图合成

3、多视图几何测量

三、3DGS的缺点

1、容易陷入最小值

2、需要大量输入图像

3、尺度模糊性

四、pixelSplat

1、解决尺度模糊性(深度信息生成)

2、编码器

3、外极线采样

4、外极线注意力机制

5、GS预测头

五、数据集

六、实验

1、评价指标

2、深度正则化

3、相机的高斯分布转换为世界空间

4、三视图对重构


一、概述

        本文提出一种前馈模型pixelSplat,可以从输入图像对中重建参数化为3D高斯模型的辐射场,并具有实时和内存高效的渲染能力,可以实现可扩展的训练和快速的3D重建。

(1)为了克服稀疏和局部支持表示固有的局部最小值问题,该模型预测了一个密集的 3D 概率分布,并通过重参数化技巧从该概率分布中采样高斯均值,从而使梯度可以反向传播到高斯溅射表示中 。

(2)提出了一种前馈模型pixelSplat,使得从图像对中重建3DGS辐射场。

(3)重建了一个可解释和可编辑的3DGS辐射场。

二、相关工作

1、单场景下的视角合成

        对于单视图深度估计方面,使用微分器反向传播图像空间光度误差来创建三维场景表示。

        早期的方法采用体素网格和学习渲染技术,而最近的方法更多使用神经网络和体渲染方法。

        但这些方法依赖于高计算需求,而离散的数据不能实时渲染一个pixel,使用3DGS可以通过三维高斯表示辐射场的方式,解决这个问题。

基于学习的渲染

        基于学习的渲染使用机器学习算法生成RGBA体积(RGB+alpha不透明度),然后通过光线投射算法进行渲染,没有学习的参数,而一般的神经网络+体渲染的方法存在大量的参数,导致可解释性困难。

2、基于先验的三维重建和视图合成

        这一部分考虑从每个场景少量的图像中实现三维重建以及新视图合成。

        首先是提供一些先验,比如深度图作为代理几何信息,然后与图像渲染结合,得到不错的三维重建。

        另外使用神经网络来直接回归多平面图像,来实现小的视角合成。

        对于大视角的生成,需要完整的三维重建,早期的基于神经辐射场的工作职能将三维场景编码成隐式编码,而且仅限于单个物体的场景。

        对于无界场景,考虑到使用像素对齐特征来保持端到端的局部性和变换偏移,另外也通过transformer来进行泛化。

        另外收到多视图立体视觉的启发,神经网络也与成本体积相结合,来匹配更多不同视角的特征,但最近的光场场景用可解释性换取更快地渲染,而我们的论文提到了一个可解释的3D场景表示,同时保证渲染质量和速度。

3、多视图几何测量

        多视图几何测量,是指从多个视角获取的图像中恢复3D场景的几何信息,这也通常存在尺度模糊性的问题。

        而在该论文,提出了一种基于双视图编码器的方法,通过利用沿着像素对应的极线的深度信息,来记录场景的真实尺度,从而在3D重建和视图合成中恢复到正常的尺度,解决尺度模糊性的问题。

三、3DGS的缺点

1、容易陷入最小值

        由于Gaussian的几何结构参数(论文称为primitive,包括均值、均方差、不透明度、球谐系数,用于建立3DGS场景辐射场)在空间中移动时,梯度会迅速消失。在3DGS算法中使用了自适应密度控制方法来解决这个问题,但在泛化场景中并不适用(无界场景)。

2、需要大量输入图像

        3DGS算法需要数十张图片,才能实现高质量视角合成。

3、尺度模糊性

        由于3DGS是使用Sfm进行初始化点云的,而没有考虑深度问题,所以只能保持比例一致性,不能保证场景尺度一致,不能得到真实尺度。

四、pixelSplat

        下图为pixelSplat的网络结构。由单一图片的编码器、外极线采样、外极线注意力机制和GS预测头四部分构成。

1、解决尺度模糊性(深度信息生成)

        使用双视角来计算第一视角的图片的深度,之后进行位置编码作为Attention的位置编码。

        原理:

(1)假设两个图像分别是I\tilde{I},我们将对于I图像的每一个像素点利用\tilde{I}的视角来标注对应的深度关系。

(2)对于第二张图像\tilde{I}的每个像素坐标u,根据其相机射线在第一张图像的投影,得到对应的外极线。

(3)在第二张图像\tilde{I}上沿着外极线(epipolar line)采样一系列像素\tilde{u}_l,并根据三角测量计算出该像素点到第一张图像相机原点的距离\tilde{d}_{\tilde{u}l},作为深度信息。

(4)将深度信息进行位置编码\gamma(\cdot)作为后续attention的位置编码的输入。

2、编码器

        对于输入的双视角图片分别进行编码,同时使用resnet(被DINO预训练过的backbone)以及DINO VIT-B/8作为编码器。

        resnet50以图片作为输入,输出不同layers的特征。

        DINO VIT-B/8以图片的全局信息输入到一个MLP结构中输出整个图像的上下文或全局特征,另外输入图像中的除了全局token外的局部区域信息到同样的一个MLP,得到局部区域信息。

        之后对他们进行concat并上采样得到图像的特征。

3、外极线采样

        通过计算深度信息后,将深度信息编码后叠加到第二个图像的特征上作为key和value,第一个图像的特征作为query,作为后续多头注意力机制的输入。

4、外极线注意力机制

        看图就行。先一次多头注意力机制然后一次第一张图片的自注意力机制,重复两遍。对第一张图片的输出特征用来后续的3DGS原语的预测。

5、GS预测头

(1)首先将外极线注意力机制的输出特征输入到一个神经网络中,输出四个参数,一般来说会预测三个高斯模型,并取三个高斯模型的并集,而下面我们只对一个高斯模型进行介绍

        \phi:离散深度概率分布的参数向量,表示对每个深度桶z的离散概率分布p_{\phi}(z)

        \delta:偏移向量,用于调整采样后得到的深度值

        \Sigma:3D高斯的协方差矩阵

        S:3D高斯的球谐系数。

(2)深度桶:将深度空间离散化为多个深度区间桶。设定近平面d_{near}和远平面d_{far},在这两个平面之间离散化为Z个深度桶,每个深度桶z对应一个深度值b_z。通过计算可以看到第0个桶是d_{near},第Z个桶是d_{far}(这个东西不太理解!)

        b_z=((1-\frac{z}{Z})(\frac{1}{d_{near}}-\frac{1}{d_{far}})+\frac{1}{d_{far}})^{-1}

(3)高斯椭球位置计算\mu,其中o是原始位置,b_z代表深度值,\delta_z代表第z个桶的偏移量,由神经网络预测出来,d_u是根据相机内参和外参计算出来的3D光线方向向量,u是光线上的采样点坐标位置。

        \mu=o+(b_z+\delta_z)d_u

        d_u=TK^{-1}[u,1]^T

        原来的高斯椭球位置预测会存在陷入局部最小值的方法,过去的3DGS算法预测μ时,由于3DGS与正确位置的距离超过几个标准差的时候梯度就会消失,另外就算足够接近正确位置,也需要存在一条沿着损失函数单调递减的路径才能到达最终位置,所以本文提出了一种新的方法。

(4)不透明度计算\alpha,根据采样概率计算不透明度\alpha =\phi_z

五、数据集

1、RealEstate10k

        一个YouTube上的家庭步行视频组成的数据集,从1万个Youtube视频中收集到大约8万个视频片段,对应1000万帧。

2、ACID

        由航拍景观视频组成的数据集

这两个数据集均由SfM软件计算的相机姿态,后续也使用这两个数据集进行训练和评估。

六、实验

1、评价指标

        PSNR:(Peak Signal-to-Noise Ratio,峰值信噪比)评估图像质量的客观指标,衡量的是图像中信号强度和噪声强度的比值,PSNR越高,图像质量越好。

        PSNR=10 \times log_{10}(\frac{Max_1^2}{\sqrt{MSE}}),其中Max_1^2代表图片可能得最大像素值。

        SSIM:(Structural Similarity Index,结构相似性指数) 是一种评估图像质量的指标,它考虑了图像的亮度、对比度和结构三个方面。SSIM值越接近1,表示两幅图像越相似。

        SSIM公式以前写过。

        LPIPS:(Learned Perceptual Image Patch Similarity,感知相似性) 是一种基于深度学习的图像质量评估指标,它能够更好地模拟人类视觉感知。LPIPS值越小,表示两幅图像越相似。

        LPIPS使用预训练的卷积神经网络,一般是VGG和AlexNet,同时提取不同层的特征,并计算L2距离或者相似度度量,然后对不同层的特征差异计算加权求和,权值通过学习得到。

2、深度正则化

        对于模型进行5w次的微调,并计算深度正则化损失L_{reg.depth},对于每一个渲染的视角,我们生成一个对应的深度图D,并且计算深度图D的损失。

        分别计算深度图D在x轴和y轴方向的深度梯度,以及计算原图像在x轴和y轴方向的梯度。并且计算深度正则化损失。

        另外也做了消融实验,证明深度正则化损失是有效的。 

3、相机的高斯分布转换为世界空间

        其中D_R代表球谐函数的转换矩阵Wigner D矩阵。

4、三视图对重构

        三视图对重构效果一定是好于二视图对的,有显著的提升,但是数据量的增加可能会对内存造成影响。

参考文献: https://arxiv.org/abs/2312.12337

参考代码:https://github.com/dcharatan/pixelsplat

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT实现QMessageBox中文按钮

这是我记录Qt学习过程心得文章的第二篇,主要是为了方便QMessageBox弹出框的使用,通过自定义的方式,将其常用的功能,统一封装成一个函数,还是写在了Skysonya类里面。 实现代码: //中文提示对话框 bool Sky…

线程(四)线程的同步——条件变量

文章目录 线程线程的同步和互斥线程同步--条件变量什么是线程同步示例--条件变量的使用示例--使用两个线程对同一个文件进行读写示例--一个读者一个写者使用条件变量来实现同步 线程 线程的同步和互斥 线程同步–条件变量 是一个宏观概念,在微观上包含线程的相互…

新160个crackme - 078-CodeZero.1

运行分析 需要破解Serial PE分析 VB程序,32位,无壳 静态分析&动态调试 使用VB Decompiler进行分析找到check按钮事件: Form1 -> Command1_Click_4055F4发现直接爆出了Serial55555 验证成功

【xilinx-versal】【Petalinux】I2C驱动开发问题记录

问题 调试中发现系统起来后无I2C设备。 仔细查找后发现没有配置versal的I2C控制器。 解决方法 打开versal的I2C控制器的配置 起来后I2C设备注册成功

Acwing 区间问题

Acwing 905.区间选点 实现思路: 将每个区间按照右端点从小到大排序从前往后依次枚举每个区间 若当前区间中已经包含点,则跳过;否则(即当前区间的左端点大于该点),选择当前区间的右端点; 证明&a…

设计模式:单例

一.什么是单例模式 单例模式是一种设计模式,指在整个程序生命周期中有且仅有一个实例的类。可以分为懒汉式以及饿汉式。 懒汉式:只有在类的实例被使用时才生成唯一实例。但是存在线程安全以及内存泄露的问题。可以节省系统资源。 饿汉式:程序…

《Oracle DB备份与恢复》:一文千字教你掌握备份基础知识

** List item 备份需要扎实掌握基础知识,这样才能规划好适合自己的备份恢复策略,才能在出故障的时候不慌不忙,从容应付。 好了不多逼逼了,直接上干货。** 1. 备份分类: 备份根据性质和目的不同分为以下几种&#…

车辆路径规划问题(VRP)优化方案

车辆路径规划问题(VRP)优化方案 车辆路径规划问题(Vehicle Routing Problem, VRP)是物流领域中一个经典的组合优化问题,目标是在满足客户需求的情况下,找到一组车辆的最优配送路径,以最小化总的…

如何让员工意识到六西格玛项目对公司和个人的长期利益?

当下,六西格玛作为一种以数据驱动的管理方法论,正逐步成为许多企业实现卓越运营的重要工具。然而,要让员工深刻认识到六西格玛项目不仅对公司长远发展至关重要,也对他们个人职业生涯有着深远的积极影响,并非易事。下面…

C++ day05(模版与容器)

目录 【1】模版 template 1》概念 2》函数模版 3》类模版 【2】容器 1》STL标准模版库 2》容器的概念 3》顺序容器 1> arrry(C11) 2> vector 3> list 4> deque 4》 关联容器 5》迭代器 iterator 【1】模版 template 1》概念 C模版可以让类或函数声…

javacpp调用pdfium的c++动态库

1、.h头文件 2、生成java代码的conf PdfiumDocumentConfigure.java package org.swdc.pdfium.conf;import org.bytedeco.javacpp.annotation.Platform; import org.bytedeco.javacpp.annotation.Properties; import org.bytedeco.javacpp.tools.InfoMap; import org.byte…

网络知识点之—EVPN

EVPN(Ethernet Virtual Private Network)是下一代全业务承载的VPN解决方案。EVPN统一了各种VPN业务的控制面,利用BGP扩展协议来传递二层或三层的可达性信息,实现了转发面和控制面的分离。 EVPN解决传统L2VPN的无法实现负载分担、…

springboot+vue前后端分离-使用腾讯云服务器部署网站

项目打包 参考链接 CSDN springboot打包 idea默认新建的shell窗口在项目根目录位置,可以看到项目根目录下有mvnw HELP.md log mvnw mvnw.cmd pom.xml src target./mvnw clean package -Dmaven.test…

Kali Linux中安装配置影音资源下载神器Amule

一、Debian系列Linux安装amule命令: sudo apt update sudo apt-get install amule amule-utils 二、配置Amule的要点: 1、首次运行Amule,提示是否下载服务器列表,点击是。 2、搜索选项的类型选择全球,类型的默认选项…

数据恢复与数据取证:Visual NAND Reconstructor 闪存数据恢复工具

天津鸿萌科贸发展有限公司是专业闪存数据恢复工具 VNR (Visual NAND Reconstructor) 的授权代理商。 VNR(Visual NAND Reconstructor)可视化 NAND 重建工具套件由硬件和软件构成。其中硬件部分包含 NAND 读卡器和一组用于不同 NAND 芯片封装的适配器。读…

LeetCode 48 Rotate Image 解题思路和python代码

题目: You are given an n x n 2D matrix representing an image, rotate the image by 90 degrees (clockwise). You have to rotate the image in-place, which means you have to modify the input 2D matrix directly. DO NOT allocate another 2D matrix and …

序列化流和反序列化流

序列化流 ObjectOutputStream 序列化流/对象操作输出流 包装基本流,属于字节流的一种,负责输出数据。可以把Java中的对象写到本地文件中去。 构造方法: public ObjectOutputStream(OutputStream out)把基本流包装成高…

【Java 并发编程】解决多线程中数据错乱问题

前言 承接上回,我们已经理解了线程的一些相关操作,本篇内容将会讲到如何去解决线程竞争导致的数据错乱。 前期回顾:线程操作 目录 前言 线程竞争的场景 竞态条件的详解 synchronized 关键字 ReentrantLock 类 线程竞争的场景 概念&#xff1a…

异步场景: promise、async函数与await命令介绍

如果你也对鸿蒙开发感兴趣,加入“Harmony自习室”吧!扫描下方名片,关注公众号,公众号更新更快,同时也有更多学习资料和技术讨论群。 在鸿蒙的开发中,我们时常会遇到promise异步场景,有同学反馈说…

Adobe Acrobat Pro和Adobe Acrobat DC有什么区别?

主要区别 Adobe Acrobat Pro: 以单次购买的方式提供,用户需要一次性付费购买,之后即可永久使用该版本。不会频繁更新,通常只在发行新版本时进行更新。 Adobe Acrobat DC: 以订阅方式提供,用户需要每年支付…