当前位置: 首页 > news >正文

【辐射场】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原论文里面指出故意的。
  remain primitives

你可以简单地把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每日一题)

冒泡排序&#xff1a; 每次将相邻的两个数比较,将小的调到前头--升序 冒泡排序一个结论&#xff1a; n个数要进行n-1轮比较&#xff0c;第j轮要进行n-j次两两比较 循环体代码&#xff1a; int main() {int i, j,n,a[10],t;//n是几个数比较for(j1;j<n-1;j)//控制轮次for…...

每日一练:LeeCode-347. 前 K 个高频元素(中) - 【优先级队列】

本文是力扣LeeCode-347. 前 K 个高频元素 学习与理解过程&#xff0c;本文仅做学习之用&#xff0c;对本题感兴趣的小伙伴可以出门左拐LeeCode。 给你一个整数数组 nums 和一个整数 k &#xff0c;请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1: 输…...

<蓝桥杯软件赛>零基础备赛20周--第11周--贪心

报名明年4月蓝桥杯软件赛的同学们&#xff0c;如果你是大一零基础&#xff0c;目前懵懂中&#xff0c;不知该怎么办&#xff0c;可以看看本博客系列&#xff1a;备赛20周合集 20周的完整安排请点击&#xff1a;20周计划 每周发1个博客&#xff0c;共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独立组件开发-动态组件

文章目录 一、前言二、实现三、优化四、总结五、最后 一、前言 在开发中&#xff0c;你经常会遇到这么一种情况&#xff1a;根据条件动态地切换某个组件&#xff0c;或动态地选择渲染某个组件。 Vue 提供了另外一个内置的组件 <component> 和 is 特性&#xff0c;可以更…...

前端八股文(HTML篇)

目录 1.什么是DOCTYPE,有何用呢&#xff1f; 2.说说对html语义化的理解 3.src和href的区别&#xff1f; 4.title与h1的区别&#xff0c;b与strong的区别&#xff0c;i与em的区别&#xff1f; 5.什么是严格模式与混杂模式&#xff1f; 6.前端页面有哪三层构成&#xff0c;分…...

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()&#xff1a;为每个像素生成光线 这里你需要为每个像素生成一条对应的光 线&#xff0c;然后调用函数 castRay() 来得到颜色&#xff0c;最后将颜色存储在帧缓冲区的相 应像素中。 我们要做的就是将屏幕空间下的坐标最后转换到世界空间的坐标…...

Golang解决跨域问题【OPTIONS预处理请求】

Golang解决跨域问题 前置知识&#xff1a;跨域问题产生条件及原因 跨域是是因为浏览器的同源策略限制&#xff0c;是浏览器的一种安全机制&#xff0c;服务端之间是不存在跨域的。 所谓同源指的是两个页面具有相同的协议、主机和端口&#xff0c;三者有任一不相同即会产生跨域…...

复试 || 就业day05(2023.12.31)算法篇

文章目录 前言找不同最长回文串找到所有数组中消失的数字下一个更大元素 I键盘行 前言 &#x1f4ab;你好&#xff0c;我是辰chen&#xff0c;本文旨在准备考研复试或就业 &#x1f4ab;文章题目大多来自于 leetcode&#xff0c;当然也可能来自洛谷或其他刷题平台 &#x1f4ab…...

Spring-4-代理

前面提到过&#xff0c;在Spring中有两种类型的代理&#xff1a;使用JDK Proxy类创建的JDK代理以及使用CGLIB Enhancer类创建的基于CGLIB的代理。 你可能想知道这两种代理之间有什么区别&#xff0c;以及为什么 Spring需要两种代理类型。 在本节中&#xff0c;将详细研究代理…...

设计模式:抽象工厂模式(讲故事易懂)

抽象工厂模式 定义&#xff1a;将有关联关系的系列产品放到一个工厂里&#xff0c;通过该工厂生产一系列产品。 设计模式有三大分类&#xff1a;创建型模式、结构型模式、行为型模式 抽象工厂模式属于创建型模式 上篇 工厂方法模式 提到工厂方法模式中每个工厂只生产一种特定…...

C语言中的Strict Aliasing Rule

文章目录 前言没有警告不代表没有问题目前的应对方法 前言 很久没写了&#xff0c;水一篇。 最近有个代码在gcc 4.8.5上编译失败。编译失败的提示是&#xff1a; error: dereferencing type-punned pointer will break strict-aliasing rules [-Werrorstrict-aliasing]查了下…...

单字符检测模型charnet使用方法,极简

Git链接 安装按照上面的说明&#xff0c;说下使用。 把tools下面的test做了一点修改&#xff0c;可以读取一张图片&#xff0c;把里面的单个字符都检测和识别出来。 然后绘制到屏幕上。 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官网下载址&#xff1a;Installing on Windows — RabbitMQ&#xff0c;找到 2.配置RabbitMQ环境变量&#xff0…...

2023年终总结丨很苦,很酷!

文章目录 个人简介丨了解博主写在前面丨博主介绍年终总结丨博主成就年终总结丨博主想说年终总结丨学习芝士年终总结丨未来展望写在后面丨新年快乐 个人简介丨了解博主 主页地址&#xff1a;https://blog.csdn.net/m0_68111267 荣誉身份 ⭐2022年度CSDN 社区之星 Top6 ⭐2023年…...

鸿蒙 DevEco Studio 3.1 入门指南

本文主要记录开发者入门&#xff0c;从软件安装到项目运行&#xff0c;以及后续的学习 1&#xff0c;配置开发环境 1.1 下载安装包 官网下载链接 点击立即下载找到对应版版本 下载完成&#xff0c;按照提示默认安装即可 1.2 下载SDK及工具链 运行已安装的DevEco Studio&…...

ubuntu多用户环境dockerbug,卸载重装docker流程

之前不小心误操作删除重装docker&#xff0c;结果删除没成功&#xff0c;更没法重装&#xff0c;每次apt install都会报一个docker错误&#xff0c;虽然不影响软件的常规安装&#xff5e;但是现在还是需要装一个完整docker&#xff0c;还是选择删除一下&#xff0c;重点是关闭服…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

c#开发AI模型对话

AI模型 前面已经介绍了一般AI模型本地部署&#xff0c;直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型&#xff0c;但是目前国内可能使用不多&#xff0c;至少实践例子很少看见。开发训练模型就不介绍了&am…...

ios苹果系统,js 滑动屏幕、锚定无效

现象&#xff1a;window.addEventListener监听touch无效&#xff0c;划不动屏幕&#xff0c;但是代码逻辑都有执行到。 scrollIntoView也无效。 原因&#xff1a;这是因为 iOS 的触摸事件处理机制和 touch-action: none 的设置有关。ios有太多得交互动作&#xff0c;从而会影响…...

基于matlab策略迭代和值迭代法的动态规划

经典的基于策略迭代和值迭代法的动态规划matlab代码&#xff0c;实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)

推荐 github 项目:GeminiImageApp(图片生成方向&#xff0c;可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

【C++特殊工具与技术】优化内存分配(一):C++中的内存分配

目录 一、C 内存的基本概念​ 1.1 内存的物理与逻辑结构​ 1.2 C 程序的内存区域划分​ 二、栈内存分配​ 2.1 栈内存的特点​ 2.2 栈内存分配示例​ 三、堆内存分配​ 3.1 new和delete操作符​ 4.2 内存泄漏与悬空指针问题​ 4.3 new和delete的重载​ 四、智能指针…...

Linux系统部署KES

1、安装准备 1.版本说明V008R006C009B0014 V008&#xff1a;是version产品的大版本。 R006&#xff1a;是release产品特性版本。 C009&#xff1a;是通用版 B0014&#xff1a;是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存&#xff1a;1GB 以上 硬盘&#xf…...

ubuntu22.04有线网络无法连接,图标也没了

今天突然无法有线网络无法连接任何设备&#xff0c;并且图标都没了 错误案例 往上一顿搜索&#xff0c;试了很多博客都不行&#xff0c;比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动&#xff0c;重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...