【辐射场】3D Gaussian Splatting
三维高斯…喷喷
\, 3D Gaussian Splatting,下文简称3DGS,是好一段时间以来在三维内容创作和三维重建领域比较有热度的一项技术。
它属于基于图像的三维重建方法,意思就是你对现实物体或者场景拍照片,就能给你训练成一个场景模型,能够被渲染出来给你看。
它产生的模型可以作为三维内容创作的资产,什么意思呢,就是你可以搞一点视频或者很多图片作为输入,丢进什么应用等一会就变成一个3DGS,最后过几个插件就可以拖进大家最爱的blender/ue/unity里面用啦。
所谓的辐射场方法意思就是它们会存一些辐射度(radiance),类似于存储你位于某个地点、从某个视角、看场景里面的各个点发出的光的属性。这些方法一般基于体渲染、光线步进(Ray Marching)或者光线追踪(Ray Tracing),得到的重建结果模型自然属于一种独特的格式。虽然说还是比较方便兼容真实感渲染(PBR)的,就像houdini里面的SDF、VDB,都是根据体积组织的……不过万一如果想要变成有mesh那类表面建模的:那就还需要相当多的额外工作(Sugar、此外DreamGaussian也有一个小工具)
最新的一些工作例如4DGS、4K4D甚至可以把视频(连续图像序列)重建成动态场景,就是对于动态场景的修改暂时可能比较尴尬。GS的小物体比较有优势,静态大场景看起来比较捉急,但是4D的工作同向对比目前看起来会比较好看。
自然还有GS进SLAM的工作(GS-SLAM、SplaTAM),就不多嘴了。
先质疑再质疑
俗话说,demo都是骗人的 。上图只是相对第一张图稍微往右上转了一点点,把焦点从桌子转到背景物件,有点难看吧。当然如果增加训练步数和图片数量能好看一点,不过缺陷确实是存在的。随便抓一个3DGS的演示基本都能看到这个问题,只要你不是站在被训练到的视角,那么你往背景看大概率就会出现如上图所示的破洞。然而你拍场景的时候会对着墙角的杂草全方位覆盖吗?
如果你往被遮盖的地方、或者图上这种地方跑近了,你就会看到糊糊的Gaussian Splats。
如果你想要从3DGS得到一个完整的、有精细材质的、甚至能估计碰撞体积的物体,就需要首先保证那个物体不能动、其次从各个角度多拍点图(如果你有三十万相机能够同时从各个角度拍完也行吧)。对于大场景来说,这种要求就有点严苛了,结果就是稍微远一点、几米开外的地方都不能细看。
那么为啥会破洞呢?我们观察这个例子
上面是3DGS、下面是点云。这两幅图照样是在角落,那个桌子附近点特别多的。呃,当然点云初始化来自于NeRF360V2 dataset,其实跟他一开始大差不差,这也是我们亲爱的3DGS原论文里面指出故意的。
你可以简单地把3DGS理解成一种基于好多个点(点云)的结构,每个点在渲染的时候会变成一个从各个角度看可以有不同光泽的一坨球面高斯splat,形似椭球,上面的颜色是一个椭球面上的关于极坐标角度的函数,那不管是分段线性插值还是怎么的总要想个办法近似吧,GS就是用球谐函数(图是形似原子轨道,实际上还是球面上的函数,极坐标半径是指那个角度上球谐函数值大小)作为基函数,组合出一个比较丰富的函数,拉一拉变成椭圆。虽然在训练和优化的过程中这些椭圆的位置、尺寸朝向和圆润程度、不同方向上辐射折射反射出来的颜色等等(多元正态分布的均值、协方差、球面高斯的球谐系数)可以有一定变化,但是假如一开始点没安放好、分布相当不均匀,那就会四处破大洞了。
呃呃。虽然破洞,还是有不少优点。
表现上来说就和一般NeRF类似,着色还是相当真实的(可以补光,不好把场景本来有的光去掉(relighting));另外因为是把信息存在点里面、而不是像NeRF那样跟你的视线强相关,总的来说多个3DGS可以方便地合并到一起。
从效率来说、一个是炼起来不算龟速,另一个是渲染快。上面那个小花园拿A5k跑大概一小时能有好几万steps(参考:论文里面拿来抢SOTA用的是5k/7k/30k iters);渲染的时候能做到实时的,20系以上跑起来可以有一百到几百fps。
顺带一提一个3DGS一般是1GB起步。这方面也有能缩到1/15的工作。
咋办啊?
\, 3DGS的结果有时候看起来不理想,主要是那些位置本身并没有充分的信息。哪怕有,注意到直接对比渲染结果和ground truth图像的优化目标函数又不能很好地反应三维重建的质量和真实度,结果就是你从训练的时候相机的位置和姿态看过去它能拟合,结果挪动一下看见面前的splats马上偏离位置四处漏风。考虑到真实世界各种经验和物理先验,例如局部一般会有比较重复自相似的样式等等,或许能有帮助。
更加NeRF的Plenoctrees→Plenoxels几乎可以说是3DGS的前身,之前许多工作其实也是强相关的,可以作为参考(就像Mip-splatting干的那样)。
NeRF的时候一种思路是提出新的有关不确定性的量度(Bayes’ Rays),一种思路是利用真实世界信息来补全那些不确定的部分(Nerfbusters)。比如利用Segment Anything、利用3D Diffusion、配合深度等等(SparseGS)……反正能保证渲染实时就挺好的。
另外GS虽然又独创又高效、不过在诸多NeRF类方法之中,其他方法在精度方面也还是很有价值的,而且有相当一部分还能实现实时渲染。
顺带一提,如果你拍的时候拍太久了,环境光变化比较大;或者在涉及尤其是大面积阴影的情况下,呃,想想就知道会有麻烦。拍得充分一点,不然会起黑雾的。自己拍着玩还可能要小心镜头光晕。
能讲讲原理吗?
, , , 讲完啦!想看定义看公式听名词还是看代码啊?
3DGS整个过程主要包括从运动结构恢复(SfM)得到点云、通过渲染得到loss再反向传播训练其各点上球面高斯各项参数(它的位置都是比较清楚的,方便sort)。因为splat除了是各向异性之外基本可以类比一堆堆物理世界的粒子模型、有辐照度和各向异性颜色、有一定的不透明度以及一定的透光度,多个splat就要α-blending。训练的时候要把渲染结果跟ground truth比出loss,因为渲染过程是视野/视锥范围内部分点云各个点上根据存的系数得到3dsplat再被rasterize(三维正态分布沿一维积分(或者说求边缘分布)得到二维,alpha-blending到你的screen uv上光栅化),就能顺着或者逆着渲染过程变成图像,这样就有forward跟backward,顺便还可以做点小并行。得益于它的splats可以排序,backward的时候alpha blending的逆过程是比较直接可行的。光栅化时还希望在经过透视变换的时候splat不会被扭曲变形,要把变换矩阵近似一下。
3DGS的split clone prune有点被逼的,不过既然约等于一个个椭球球那也确实有一点难搞,不像NeRF那样隐式了根本操心不了这些问题。4DGS里面专门关于位置做了点工作,如果能够减轻对可能不太靠谱的SfM的依赖或许会更好一点,像COLMAP-free 3DGS等等。PAPR里面也指出SfM不给力的情况下,对于clone的情况因为梯度不对头,有的点如果一开始就离splat远,最后也几乎不可能被照顾到。此外,split clone的方式面对纹理上的精细细节也比较乏力。
此外,输入(多个)连续图像序列,一开始就重建出动态场景表示,有需要再截取某一帧或许不失为一种选择,也有机会利用其比较充分的信息让那一帧的状态更确定、说不定还能做一些物理模拟等等工作对比loss。
相关文章:
【辐射场】3D Gaussian Splatting
三维高斯…喷喷 \, 3D Gaussian Splatting,下文简称3DGS,是好一段时间以来在三维内容创作和三维重建领域比较有热度的一项技术。 它属于基于图像的三维重建方法,意思就是你对现实物体或者场景拍照片,就能给你训练成一个场景模型&a…...
冒泡排序--------(C每日一题)
冒泡排序: 每次将相邻的两个数比较,将小的调到前头--升序 冒泡排序一个结论: n个数要进行n-1轮比较,第j轮要进行n-j次两两比较 循环体代码: int main() {int i, j,n,a[10],t;//n是几个数比较for(j1;j<n-1;j)//控制轮次for…...
每日一练:LeeCode-347. 前 K 个高频元素(中) - 【优先级队列】
本文是力扣LeeCode-347. 前 K 个高频元素 学习与理解过程,本文仅做学习之用,对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输…...
<蓝桥杯软件赛>零基础备赛20周--第11周--贪心
报名明年4月蓝桥杯软件赛的同学们,如果你是大一零基础,目前懵懂中,不知该怎么办,可以看看本博客系列:备赛20周合集 20周的完整安排请点击:20周计划 每周发1个博客,共20周。 在QQ群上答疑&#x…...
PowerShell Instal 一键部署TeamCity
前言 TeamCity 是一个通用的 CI/CD 软件平台,可实现灵活的工作流程、协作和开发实践。允许在您的 DevOps 流程中成功实现持续集成、持续交付和持续部署。 系统支持 Centos7,8,9/Redhat7,8,9及复刻系列系统支持 Windows 10,11,2012,2016,2019,2022高版本建议使用9系列系统…...
将“渴望“乐谱写入AT24C02并读出播放
#include <reg51.h> // 包含51单片机寄存器定义的头文件 #include <intrins.h> //包含_nop_()函数定义的头文件 #define OP_READ 0xa1 // 器件地址以及读取操作,0xa1即为1010 0001B #define OP_WRITE 0xa0 // 器件地址以及写…...
Vue独立组件开发-动态组件
文章目录 一、前言二、实现三、优化四、总结五、最后 一、前言 在开发中,你经常会遇到这么一种情况:根据条件动态地切换某个组件,或动态地选择渲染某个组件。 Vue 提供了另外一个内置的组件 <component> 和 is 特性,可以更…...
前端八股文(HTML篇)
目录 1.什么是DOCTYPE,有何用呢? 2.说说对html语义化的理解 3.src和href的区别? 4.title与h1的区别,b与strong的区别,i与em的区别? 5.什么是严格模式与混杂模式? 6.前端页面有哪三层构成,分…...
RivaGAN 水印项目
git地址 https://github.com/DAI-Lab/RivaGAN Dockerfile (/tools下文件为git下的文件) ############################################### # 使用 NVIDIA CUDA 10.0 开发环境作为基础镜像 FROM kaldiasr/kaldi:gpu-ubuntu18.04-cuda10.0 # 设置非交互式安装模式以避免某些命…...
Games101作业5
1.实现Renderer.cpp 中的 Render():为每个像素生成光线 这里你需要为每个像素生成一条对应的光 线,然后调用函数 castRay() 来得到颜色,最后将颜色存储在帧缓冲区的相 应像素中。 我们要做的就是将屏幕空间下的坐标最后转换到世界空间的坐标…...
Golang解决跨域问题【OPTIONS预处理请求】
Golang解决跨域问题 前置知识:跨域问题产生条件及原因 跨域是是因为浏览器的同源策略限制,是浏览器的一种安全机制,服务端之间是不存在跨域的。 所谓同源指的是两个页面具有相同的协议、主机和端口,三者有任一不相同即会产生跨域…...
复试 || 就业day05(2023.12.31)算法篇
文章目录 前言找不同最长回文串找到所有数组中消失的数字下一个更大元素 I键盘行 前言 💫你好,我是辰chen,本文旨在准备考研复试或就业 💫文章题目大多来自于 leetcode,当然也可能来自洛谷或其他刷题平台 💫…...
Spring-4-代理
前面提到过,在Spring中有两种类型的代理:使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。 你可能想知道这两种代理之间有什么区别,以及为什么 Spring需要两种代理类型。 在本节中,将详细研究代理…...
设计模式:抽象工厂模式(讲故事易懂)
抽象工厂模式 定义:将有关联关系的系列产品放到一个工厂里,通过该工厂生产一系列产品。 设计模式有三大分类:创建型模式、结构型模式、行为型模式 抽象工厂模式属于创建型模式 上篇 工厂方法模式 提到工厂方法模式中每个工厂只生产一种特定…...
C语言中的Strict Aliasing Rule
文章目录 前言没有警告不代表没有问题目前的应对方法 前言 很久没写了,水一篇。 最近有个代码在gcc 4.8.5上编译失败。编译失败的提示是: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werrorstrict-aliasing]查了下…...
单字符检测模型charnet使用方法,极简
Git链接 安装按照上面的说明,说下使用。 把tools下面的test做了一点修改,可以读取一张图片,把里面的单个字符都检测和识别出来。 然后绘制到屏幕上。 import torch from charnet.modeling.model import CharNet import cv2, os import num…...
Erlang、RabbitMQ下载与安装教程(windows超详细)
目录 安装Erlang 1.首先安装RabbitMQ需要安装Erlang环境 2.点击下载好的.exe文件进行傻瓜式安装,一直next即可 3.配置Erlang环境变量 安装RabbitMQ 1.给出RabbitMQ官网下载址:Installing on Windows — RabbitMQ,找到 2.配置RabbitMQ环境变量࿰…...
2023年终总结丨很苦,很酷!
文章目录 个人简介丨了解博主写在前面丨博主介绍年终总结丨博主成就年终总结丨博主想说年终总结丨学习芝士年终总结丨未来展望写在后面丨新年快乐 个人简介丨了解博主 主页地址:https://blog.csdn.net/m0_68111267 荣誉身份 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年…...
鸿蒙 DevEco Studio 3.1 入门指南
本文主要记录开发者入门,从软件安装到项目运行,以及后续的学习 1,配置开发环境 1.1 下载安装包 官网下载链接 点击立即下载找到对应版版本 下载完成,按照提示默认安装即可 1.2 下载SDK及工具链 运行已安装的DevEco Studio&…...
ubuntu多用户环境dockerbug,卸载重装docker流程
之前不小心误操作删除重装docker,结果删除没成功,更没法重装,每次apt install都会报一个docker错误,虽然不影响软件的常规安装~但是现在还是需要装一个完整docker,还是选择删除一下,重点是关闭服…...
微信小程序开发系列-09自定义组件样式特性
微信小程序开发系列目录 《微信小程序开发系列-01创建一个最小的小程序项目》《微信小程序开发系列-02注册小程序》《微信小程序开发系列-03全局配置中的“window”和“tabBar”》《微信小程序开发系列-04获取用户图像和昵称》《微信小程序开发系列-05登录小程序》《微信小程序…...
数据结构 模拟实现LinkedList单向不循环链表
目录 一、链表的简单介绍 二、链表的接口 三、链表的方法实现 (1)display方法 (2)size得到单链表的长度方法 (3)addFirst头插方法 (4)addLast尾插方法 (5…...
2023-12-24 LeetCode每日一题(收集足够苹果的最小花园周长)
2023-12-24每日一题 一、题目编号 1954. 收集足够苹果的最小花园周长二、题目链接 点击跳转到题目位置 三、题目描述 给你一个用无限二维网格表示的花园,每一个 整数坐标处都有一棵苹果树。整数坐标 (i, j) 处的苹果树有 |i| |j| 个苹果。 你将会买下正中心坐…...
Oracle 19c OCP 1z0 082考场真题解析第17题
考试科目:1Z0-082 考试题量:90 通过分数:60% 考试时间:150min 本文为云贝教育郭一军guoyJoe原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 17. Which three …...
掌握这十几个Python库才是爬虫界的天花板,没有你搞不定的网站!实战案例:Python全网最强电影搜索工具,自动生成播放链接
掌握这十几个Python库才是爬虫界的天花板,没有你搞不定的网站!实战案例:Python全网最强电影搜索工具,自动生成播放链接。 用来爬虫的十几个Python库。只要正确选择适合自己的Python库才能真正提高爬虫效率,到达高效爬虫目的。 1.PyQuery from pyquery import PyQuery as …...
模型 KANO卡诺模型
本系列文章 主要是 分享 思维模型,涉及各个领域,重在提升认知。需求分析。 1 卡诺模型的应用 1.1 餐厅需求分析故事 假设你经营一家餐厅,你想了解客户对你的服务质量的满意度。你可以使用卡诺模型来收集客户的反馈,并分析客户的…...
启明智显开源项目分享|基于Model 3c芯片的86中控面板ZX3D95CM20S-V11项目软硬件全开源
前言: 本文为4寸 480*480 RGB接口IPS全面触屏的86中控面板(RT-ThreadLVGL)软硬件开源干货内容,该项目是综合性非常强的RTOS系列项目!项目主控芯片使用 Model 3c,整体实现了简化版本的86中控面板的功能需求…...
Kind创建k8s - JAVA操作控制
kind 简介kind 架构安装 Kind (必备工具)docker官网kubectl官网kind官网校验安装结果 关于kind 命令 安装一个集群查看当前 Kubernetes 集群中的节点信息。查看当前命名空间下中的Pod(容器实例)的信息。使用 kind create cluster 安装,关于安…...
Qt sender()函数
sender函数原型: QObject *sender() const; 如果在由信号激活的插槽中调用该函数,返回指向发送信号的对象的指针,否则返回0,该指针仅在从该对象的线程上下文调用此函数的槽执行期间有效。 主要代码如下: 其中运用了Q…...
Java开发框架和中间件面试题(6)
目录 61.什么是Spring Batch? 62.请举例解释Required与Qualifier注解? 61.什么是Spring Batch? Spring batch是一个轻量级的,完善的批处理框架,他主要的目的在于帮助企业建立健壮,高效的批处理应用。Spri…...
安陆网站建设推广/百度网盘资源搜索
本章首要介绍一下搜索引擎蜘蛛都有哪些类型。了解类型之前要先知道什么是搜索引擎蜘蛛。百度百科上有相关解说,我们用一个形象的表述重新说一下。以百度为例,大家要为什么能在百度上搜到各类网站网页的内容,是由于百度派出去的小弟—百度蜘蛛…...
中国建设银行在哪里/seo排名优化有哪些
0x01.问题 给定一个非负整数数组,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 我们可以先跳 1 步,从位置 0 到达 位置 1, 然后…...
微信小程序开发注册/seo排名是什么意思
/*游标的简单学习*/一.概念:1.游标:游标是用于在存储过程中迭代SELECT查询出的数据。2.什么是游标?①游标(cursor)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果。每个游标区都有一个名字。用户可以用SQL语句逐一从游标…...
web网站开发有什么作用/网络营销课程去哪里学
文章目录基本初始化添加用户和组创建存储池创建数据集共享数据集数据集权限控制基本初始化 去官方网站www.truenas.com下载iso镜像,直接安装就可以启动了,Turenas最新版是基于debian11X,这里忽略安装步骤,安装完成启动࿰…...
做家务的男人们在哪个网站播出/河北seo技术交流
SQL分组获取随机记录 2017-12-30 08:59:32 一木剑 阅读数 1038更多 分类专栏: SQL 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/q…...
互联网网站seo优化/广州网站设计制作
Rsync安装配置昨天由于部门研发同事要做个小项目,要我提供一份rsync的安装配置文档,就简单了写了份,顺便发出来了。1, 测试环境:CentOS release 5.8 2.6.18-308.el5 x86_64IP_S: 192.168.104.137IP_C: 192.168.…...