CV | FSGS使用高斯喷溅的实时少样本视图合成论文详解与项目实现

本文是对论文的详解与项目实现。

Paper:2023.12.01_FSGS: Real-Time Few-Shot View Synthesis using Gaussian Splatting

arxiv.org/pdf/2312.00451.pdf

Code:VITA-Group/FSGS: "FSGS: Real-Time Few-Shot View Synthesis using Gaussian Splatting", Zehao Zhu, Zhiwen Fan, Yifan Jiang, Zhangyang Wang (github.com)

论文

介绍

 最近已成为在密集的摄像机透视集合中建模 3D 场景的有效表示。场景是使用 3D 高斯与复杂形状和外观建模属性的组合进行渲染的,而 2D 图像则通过基于飞溅的光栅化进行渲染。通过用高效的可微分溅射取代体积渲染,3D 高斯溅射实现了实时渲染速度,同时保持了从新角度渲染逼真的图像的能力。但是,3D-GS 是在 Structure-fromMotion (SfM) 点上初始化的,其性能高度依赖于初始化点的数量和精度。随后的高斯致密化可以增加重建不足和重建过度区域的高斯数量,但这种简单的策略在少数镜头设置中是不够的。由于缺乏初始化,结果往往会过度平滑和过度拟合学习视图。

本文的目标是构建一个简洁有效的表示,同时在有限的观察中保持视觉保真度。为此,作者提出了FSGS,它使用3D高斯作为表示,从sparseed的视角输入对大型场景进行建模。

弥合稀疏输入和密集覆盖之间差距的第一个挑战是如何有效地移动高斯位置以覆盖和表示 3D 场景。因此,作者提出了邻近引导的高斯解池,它测量现有高斯及其邻居的接近程度,以发展新的高斯。通过将新高斯放在最具代表性的位置,并用旧高斯的信息对其进行初始化,可以有效地增加高斯的数量,以实现全面的场景覆盖。

下一个挑战是如何让成年高斯正确地表示场景的几何形状,即使多视图线索不足。因此,为了控制和归一化新高斯的优化,必须利用额外的先验。具体来说,作者建议在训练视图和增强伪视图中使用预训练的单目深度估计器,以利用丰富的深度先验。这指导高斯解池收敛到有理解,并确保场景的几何平滑性。通过实现可微分深度光栅器实现积分深度先验的反向传播。

FSGS 可以以 203 FPS 的速度运行,这是真实世界渲染的实际速度,同时实现 SOTA 渲染质量。

 模型方法

 

FSGS框架的概述如上图所示。FSGS 接受在静态场景中捕获的有限数量的图像。相机姿态和稀疏点云在运动结构 (SfM) 中计算。用于进一步学习的初始 3D 高斯在 SfM 点使用颜色、位置和形状属性进行初始化。通过采用邻近引导高斯解池来增加高斯的密度,测量现有高斯之间的接近度,并战略性地将新高斯放置在最具代表性的位置,以填补空白,增加细节处理能力,从而解决了SfM点极度稀疏和观测不足的问题。利用 2D 深度估计器,确保针对正确的场景几何优化致密高斯。

1. 初步和问题表述

3D Gaussian Splatting(3D-GS)位置向量M和协方差矩阵S,使用 3D 通过高斯集合显式表示3D 场景。根据 3D 高斯分布,每个高斯都是 3D 空间中的一个点x.

3D-GS 采用启发式高斯致密化系统。在这里,高斯根据阈值上方的视空间位置斜率的平均大小进行致密化。此方法对于使用全面的 SfM 点进行初始化是有效的,但不足以用来自 sparseed 视图输入图像的极其稀疏的点云完全覆盖整个场景。此外,一些高斯倾向于以非常大的体积增长,导致过度拟合到学习视图并错误地用到新视图。

2. 接近引导高斯解池

建模场景的粒度很大程度上取决于表示场景的 3D 高斯的质量。因此,解决 3D 场景的有限范围对于有效的稀疏视图建模至关重要。

邻近分数和图构造

在高斯优化期间,计算欧几里得距离以确定每个现有的高斯距离对对为了与最近的邻居建立联系,构建了一个称为邻近图的方向图。将头部的高斯标记为“源”高斯,尾部的高斯作为源对对邻居之一,“目的地”高斯。分配给每个高斯的邻近分数为对对它计算为到最近的邻居的平均距离。在优化过程中,邻近图会根据致密化或修剪过程进行更新。

高斯解池

受计算机图形学中广泛使用的网格分割算法的顶点加法策略的启发,作者提出了基于邻近图和每个高斯的邻近分数的高斯解池。具体来说,如果高斯的邻近分数是阈值t代理,连接“源”高斯和“目标”高斯,在每个顶点的中心生长一个新的高斯,如上图所示。新创建的高斯不透明度设置为与“目的地”高斯不透明度相匹配。另一方面,其他属性(如旋转和 SH 系数)初始化为零。高斯解池策略鼓励新密集的高斯分布在最具代表性的位置周围,并在优化过程中逐渐填补观测空白。

3. 高斯优化的几何指导

在使用高斯解池实现密集覆盖后,将具有多视图线索的光度损失应用于高斯优化。但是,如果在稀疏视图设置中没有足够的观察值,学习一致几何的能力就会下降,这会增加训练视图过度拟合和向新视图泛化不良的风险。这需要结合额外的归一化或先验来指导高斯优化。特别是,从训练有素的单目深度估计器依赖于生成的深度先验中,以引导高斯几何得到合理的解。

从单目深度注入几何相干性

作者使用具有 140 万个图像深度对的预训练密集预测转换器 (DPT) 在训练视图中创建深度图。为了缓解实际场景比例尺与估计深度之间的比例模糊性,在估计深度图和渲染深度图中引入了 Pearson 相关性。Pearson 相关测量 2D 深度图之间的分布差异。

实验

  • 数据
    • LLFF:使用 3 个学习视图
    • Mip-NeRF360:使用 24 个学习视图
    • Blender:8 个学习视图
  • 实施细节
    • 使用 SfM 计算初始相机姿态和点云
    • 100 Gaussian densify 
    • 完全优化步骤:10,000
    • 经过 2,000 次迭代后,对伪视图进行采样 
    • 显卡:NVIDIA A6000

结果

项目

环境设置(env)

git clone https://github.com/VITA-Group/FSGS
cd FSGS

conda env create --file environment.yml
conda activate FSGS
# 如果使用yaml安装出错的话,可以新建一个req.txt文件
# pip install -r req.txt

# 值得一提的是,这里的submodules如果没有任何文件,可能需要单独设置,例如:
cd submodules
git clone https://github.com/graphdeco-inria/diff-gaussian-rasterization
cd diff-gaussian-rasterization
pip install .
cd ..

git clone https://github.com/YixunLiang/simple-knn
cd simple-knn
pip install .
cd ..

 req.txt文件

# python版本必须大于等于3.8,要不然会出错
# torch1.13+cu117的版本

matplotlib==3.5.3
torchmetrics==1.2.0
timm==0.9.12
opencv_python==4.8.1.78
imageio==2.31.2
open3d==0.17.0

数据集设置


mkdir dataset 
cd dataset

#下载 LLFF dataset
gdown 16VnMcF1KJYxN9QId6TClMsZRahHNMW5g

unzip nerf_llff_dataset.zip

# run colmap to obtain initial point clouds with limited viewpoints
# 得到数据集colmap文件
python tools/colmap_llff.py

# 下载 MipNeRF-360数据并压缩
wget http://storage.googleapis.com/gresearch/refraw360/360_v2.zip
unzip -d mipnerf360 360_v2.zip

# run colmap on MipNeRF-360 dataset
# 得到数据集colmap文件
python tools/colmap_360.py

训练(Train)

修改指定路径

# 

python train.py  --source_path dataset/nerf_llff_data/room --model_path output/room --eval  --n_views 3 --sample_pseudo_interval 1


#
python train.py  --source_path dataset/mipnerf360/garden --model_path output/garden  --eval  --n_views 24 --depth_pseudo_weight 0.03  

渲染(Render)

# 指定llff数据集场景,渲染
python render.py --source_path dataset/nerf_llff_data/horns/  --model_path  output/horns --iteration 10000

# NeRF
python render.py --source_path dataset/nerf_llff_data/horns/  --model_path  output/horns --iteration 10000  --video  --fps 30

# 指定mipnerf360数据集场景,进行渲染
python render.py --source_path dataset/mipnerf360/garden/  --model_path  output/garden --iteration 10000

# NeRF
python render.py --source_path dataset/mipnerf360/garden/  --model_path  outputgarden --iteration 10000  --video  --fps 30

验证(Evaluation)

python metrics.py --source_path dataset/nerf_llff_data/horns/  --model_path  output/horns --iteration 10000

遇到的问题及解决【PS】

[PS1]环境设置时遇到的问题cuda版本问题

计算机conda中的env环境与linux本地环境设置cuda版本相同,继承关系

而docker中的cuda版本和容器内的cuda版本不会有继承关系

附录

数学基本:缩放矩阵,旋转矩阵,协方差的激活函数,

 读取.ply文件,将数据转换为torch.nn.Parameter等待优化,ply文件内包含x,y,z,

基础的点云定义

输入的是经过colmap/blender处理后的数据,也就是ply文件,从中读取场景信息到变量scene_info

模型没被训练过,就调用

GaussianModel.create_from_pcdscene_info.point_cloud中建立模型。

COLMAP的输出中有一个sparse/0文件夹,其中有三个文件:

cameras.bin和images.bin分别是相机的内外参,points3D.bin是COLMAP产生的稀疏点云,由scene.colmap_loader.read_points3D_binary函数读取,它会返回各点的xyz、rgb和意义不明的error。我推测scene_info.point_cloud.points是稀疏点云中各点的3D坐标,scene_info.point_cloud.colors是各点的颜色。

如果是初次训练, 则从COLMAP创建的点云中初始化每个点对应的3D gaussian, 否则直接从之前保存的模型文件中读取3D gaussian。

参考文献

【1】FSGS (zehaozhu.github.io)

【2】FSGS:少视图输入的实时3D-GS新方法 - 知乎 (zhihu.com)

【3】FSGS: Real-Time Few-shot View Synthesis using Gaussian Splatting - 智源社区论文 (baai.ac.cn)

【4】【计算机视觉】Gaussian Splatting源码解读补充(三)-CSDN博客 

【5】[논문 리뷰] NeRF 간단 설명 & 원리 이해하기 | 새로운 방향에서 바라본 view를 생성하는 기술 (tistory.com)【6】NeRF: 2D 이미지를 3D로 바꿔준다고요? - 모두의연구소 (modulabs.co.kr)

【7】awesome-NeRF/awesome-NeRF: A curated list of awesome neural radiance fields papers (github.com) 

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

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

相关文章

DMR数字对讲机模块的特性有哪些?该如何选择?

DMR828S是思为无线公司研发的一款性价比高的2W全功能数字对讲机模块,可以和市场上通用的模拟制式对讲机兼容,带有DMR TierII数字对讲机的功能,内置Moto AMBE 声码器。模块内部集成了微控制器、数字对讲芯片、射频功放以及音频功放等电路&…

QT打包发布

参考:QT项目打包成软件进行发布的三种方式_qt程序打包-CSDN博客 这里只研究前两种: ①小技巧加图标: (1)下载一个合适的图标文件 .ico 格式。 (2)将图标放在QT工程的根目录,然后在…

【尚硅谷】Git与GitLab的企业实战 学习笔记

目录 第1章 Git概述 1. 何为版本控制 2. 为什么需要版本控制 3. 版本控制工具 4. Git简史 5. Git工作机制 6. Git和代码托管中心 第2章 Git安装 第3章 Git常用命令 1. 设置用户签名 1.1 基本语法 1.2 案例实操 2. 初始化本地库 2.1 基本语法 2.2 案例实操 3. 查…

利用常量数组解码的方法

【题目描述】 把手放在键盘上时,稍不注意就会往右错一位。这样,输入Q会变成输入W,输入J会变成输入K等。键盘如图所示。 输入错位后敲出的几行字符串,输出打字员本来想打出的句子。 输入仅包含数字、空格、大写字母或标点符号&am…

2025中国国际储能大会暨展览会(简称“CIES”)

2025年第十五届中国国际储能大会暨展览会 2025 15th China International Energy StorageConference and Exhibition 时间:2025年3月23-26日 地点:杭州国际博览中心主办单位:中国化学与物理电源行业协会承办单位:中国化学与物理电…

Argo基础课程3-BGC-Argo数据质量控制

数据获取: Coriolis/France: https://data-argo.ifremer.fr/dac/ FNMOC/USA: https://usgodae.org/pub/outgoing/argo/dac/ Real-Time数据 24小时内发布,提交至自动质量控制平台进行标记和调整,“R” Delayed-mode数据 经过仔细浏览时间序列…

【Python初学指南】:从零开始学习Python烟花代码实战案例

1. Python入门基础 Python是一种高级编程语言,具有简单易学、功能强大的特点。通过安装Python环境,我们可以进行第一个Python程序的编写和运行。Python的入门基础对于初学者来说是非常重要的第一步,因为它奠定了后续学习和应用的基础。 在P…

哪种裤子穿起来舒服?夏季舒适透气的男装裤子分享

想必大家都会十分注重自己的外观形象,所以对选择的衣服上有不少要求。但是现在市面上却有很多质量不好的裤子,一些商家为了利润而使用一些舒适性差的面料。 那到底裤子哪个品牌的质量比较好?作为一名服装测评师,这些年测评过的品牌…

open Gauss 数据库-05 openGauss数据库备份恢复指导手册

发文章是为了证明自己真的掌握了一个知识,同时给他人带来帮助,如有问题,欢迎指正,祝大家万事胜意! 目录 前言 openGauss数据库备份恢复 1 实验介绍 1.1 关于本实验 1.2 实验目的 2 实验前提 3 物理备份和恢复…

json diff patch

文件和图片的比对靠字符串 目录 流程 安装 效果 使用 自适应 数组:最长公共子序列(LCS) 数组中的对象,给定id,类似dom tree的比较 流程 安装 npm install jsondiffpatch import * as jsondiffpatch from jsondiffpatch; const jsond…

中电金信:夯实云原生时代的系统韧性建设——中电金信混沌工程金融业实践

IT系统建设在经历过单机、集中、分布式的演变历程后,系统运维演练、故障模拟测试的复杂度也不断提高。在复杂的分布式系统中,基础设施、应用平台都可能产生不可预知的故障,在不能确知故障根源的情况下,我们无法阻止故障的发生。更…

Transform结构

面试者经常会问transform这个模型,一个典型的seq2seq结构。 1 背景 试问几个问题,为什么提出了transform模型。RNN对于长时间序列(超过40)压缩到一个上下文向量中出现记忆退化现象,无法更好捕捉上下文信息。因此trans…

C语言知识(1) static修饰详解分享

1.前言 哈喽大家好啊,今天来给大家分享c中static的使用,希望能对大家有所帮助,请大家多多点赞,收藏支持我哦~ 2.正文 在讲解static之前,先给大家铺垫三个概念,方便大家理解。 2.1三则知识铺垫 2.1.1作…

写了一个 SRE 调试工具,类似一个小木马

远程操作机器有时会比较麻烦,我写了一个工具,主要功能:1.远程执行命令 2.上传下载文件。是一个 Web Server,通过 HTTP 请求来操作机器,类似一个小木马。当然,因为是一个 Web Server,所以也提供了…

批量人脸画口罩

网上参考的修改了一下,图片放在根目录,命名叫做1.png,批量人脸画口罩 这个程序的目的是为了解决人脸数据集中的特征点缺失的不足 # -*- coding: utf-8 -*- import os import numpy as np from PIL import Image, ImageFile__version__ 0.3…

短视频矩阵源头====技术文档交付

短视频矩阵源头技术文档交付 搭建短视频矩阵系统源码需要以下步骤: 1. 确定系统需求和功能:明确系统需要支持哪些功能,例如短视频的上传、存储、播放、分享、评论、点赞等。 2. 选择合适的编程语言和框架:根据需求选择合适的编程…

【python】描述性统计计算偏斜度和峭度

文章目录 1.编写计算偏斜度和峭度的函数。并用自己编写的函数计算课本23页的习题1.5数据的偏斜度和峭度。2.从1.5数据中随机抽取2个容量为20的样本,分别计算它们的平均数和标准差3.请绘制给定数据的频率分布直方图,计算数据的均值、标准差、偏斜度和峭度…

IDP之Backstage - 环境搭建

0. 目录 1. 前言2. 环境准备(Windows10下)2.1 安装nvm2.2 git和docker安装 3. 创建模板项目3.1 典型错误: fails on the yarn install step3.2 再次启动3.3 验证 4. 相关 1. 前言 本不想写这篇,因为看着官网文档写着挺简单的,但实…

【C语言】多字节字符、宽字符(涉及字符集和编码)

字符集、编码: 字符集:一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。例如:ASCII、Unicode、GB2312、GBK、GB18030、BIG5(繁体中文) ... 编码方式:符号…

半导体厂商

引言: 学习了这么久了, 突然发现对某些陌生类型的单片机的历史、公司、不是很了解, 很多只是听说过, 本文的分享就是为了解决关于上述疑问的。 目录 C51 STM32 AVR PIC NXP(恩智浦) Infineon (英飞凌…