实验笔记之——基于COLMAP的Instant-NGP与3D Gaussian Splatting的对比

之前博客进行了COLMAP在服务器下的测试

实验笔记之——Linux实现COLMAP-CSDN博客文章浏览阅读794次,点赞24次,收藏6次。学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)-CSDN博客NeRF 所做的任务是 Novel View Synthesis(新视角合成),即在若干已知视角下对场景进行一系列的观测(相机内外参、图像、Pose 等),合成任意新视角下的图像。传统方法中,通常这一任务采用三维重建再渲染的方式实现,NeRF 希望不进行显式的三维重建过程,仅根据内外参直接得到新视角渲染的图像。之前博客跑instant-NGP的时候,除了用官方的数据集,用自己的数据则是通过手机采集,同时获得pose与image。https://blog.csdn.net/gwplovekimi/article/details/135389922?spm=1001.2014.3001.5501而下面两个博客则分别实现了NGP与3DGS

实验笔记之——基于Linux服务器复现Instant-NGP及常用的tmux指令-CSDN博客文章浏览阅读255次,点赞7次,收藏6次。学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)-CSDN博客NeRF 所做的任务是 Novel View Synthesis(新视角合成),即在若干已知视角下对场景进行一系列的观测(相机内外参、图像、Pose 等),合成任意新视角下的图像。传统方法中,通常这一任务采用三维重建再渲染的方式实现,NeRF 希望不进行显式的三维重建过程,仅根据内外参直接得到新视角渲染的图像。配置好后,通过./instant-ngp或者scripts/run.py就可以运行了。这个编译好像比较耗费时间~https://blog.csdn.net/gwplovekimi/article/details/135365847?spm=1001.2014.3001.5501实验笔记之——Gaussian Splatting-CSDN博客文章浏览阅读691次,点赞23次,收藏8次。之前博客对NeRF-SLAM进行了调研学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)-CSDN博客NeRF 所做的任务是 Novel View Synthesis(新视角合成),即在若干已知视角下对场景进行一系列的观测(相机内外参、图像、Pose 等),合成任意新视角下的图像。传统方法中,通常这一任务采用三维重建再渲染的方式实现,NeRF 希望不进行显式的三维重建过程,仅根据内外参直接得到新视角渲染的图像。https://blog.csdn.net/gwplovekimi/article/details/135349210?spm=1001.2014.3001.5501这两篇博客中,测试public的数据集效果都不错,但是用iphone的record3D录制的要么不能用要么效果很差,为此统一采用COLMAP来计算pose,再次进行测试以及对比两个方法

目录

基于COLMAP的3DGS

基于COLMAP的NGP

3DGS训练好的模型加载进行可视化


基于COLMAP的3DGS

GitHub - graphdeco-inria/gaussian-splatting: Original reference implementation of "3D Gaussian Splatting for Real-Time Radiance Field Rendering"

首先分别运行下面的命令来启动3DGS并可视化其在线训练的过程

conda activate 3DGS

cd gaussian-splatting/

python train.py -s /home/gwp/dataset/30fps

下面在MobaXterm下运行

conda activate 3DGS

cd gaussian-splatting/

./SIBR_viewers/install/bin/SIBR_remoteGaussian_app

训练5分钟左右的结果

训练过程的各种视角请见下视频

基于COLMAP测试3D Gaussian Splatting(训练过程可视化)

基于COLMAP的NGP

GitHub - NVlabs/instant-ngp: Instant neural graphics primitives: lightning fast NeRF and more

https://github.com/NVlabs/instant-ngp/blob/master/docs/nerf_dataset_tips.md

由于NGP支持的数据格式跟3DGS稍有不同,为此需要进行处理

对于参数“aabb_scale ”,如说明文档所言:

“The aabb_scale parameter is the most important instant-ngp specific parameter. It specifies the extent of the scene, defaulting to 1; that is, the scene is scaled such that the camera positions are at an average distance of 1 unit from the origin. For small synthetic scenes such as the original NeRF dataset, the default aabb_scale of 1 is ideal and leads to fastest training. The NeRF model makes the assumption that the training images can entirely be explained by a scene contained within this bounding box. However, for natural scenes where there is a background that extends beyond this bounding box, the NeRF model will struggle and may hallucinate "floaters" at the boundaries of the box. By setting aabb_scale to a larger power of 2 (up to a maximum of 128), the NeRF model will extend rays to a much larger bounding box. Note that this can impact training speed slightly. If in doubt, for natural scenes, start with an aabb_scale of 128, and subsequently reduce it if possible. The value can be directly edited in the transforms.json output file, without re-running the scripts/colmap2nerf.py script.”

aabb_scale 参数是最重要的 instant-ngp 特定参数。指定场景的范围,默认为1;也就是说,场景被缩放,使得摄像机位置距原点的平均距离为 1 个单位。对于小型合成场景(例如原始 NeRF 数据集),默认的 aabb_scale 1 是理想的,并且可以实现最快的训练。 NeRF 模型假设训练图像可以完全由该边界框内包含的场景来解释。然而,对于背景超出此边界框的自然场景,NeRF 模型将陷入困境,并可能在框的边界处产生“漂浮物”的幻觉。通过将 aabb_scale 设置为更大的 2 次方(最大可达 128),NeRF 模型会将光线扩展到更大的边界框。请注意,这可能会稍微影响训练速度。如果有疑问,对于自然场景,请从 128 的 aabb_scale 开始,然后在可能的情况下减小它。该值可以直接在transforms.json输出文件中编辑,无需重新运行scripts/colmap2nerf.py脚本。

那么此处就先设置为128吧~

data-folder$ python ~/instant-ngp/scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 128

注意图片的文件名字需要是images(当然也可以通过输入参数修改了)

过程感觉跟3DGS中的差不多~也是一样的耗时hhh(记得要开tmux),只是数据格式支持不一样~

不知道为啥生成的transform.json只有2个camera~

改为下面的命令测试则可以了!(添加了--colmap_camera_model SIMPLE_PINHOLE)

data-folder$ python ~/instant-ngp/scripts/colmap2nerf.py --colmap_matcher exhaustive --run_colmap --aabb_scale 32 --colmap_camera_model SIMPLE_PINHOLE

同时用colmap gui也试试

NGP的运行代码如下:

conda activate nerf-ngp

cd instant-ngp/

./instant-ngp /home/gwp/dataset/30fps_for_ngp/

结果如下图所示

虽然渲染久一些效果会有点提升

但是这个效果应该是不如3DGS的~(这可能也跟上面提到的aabb_scale有关)

把值从32改为1的效果如下:

好像更差~那改为128呢?

好像有点提升,但是比起3DGS还是差一些~

渲染的过程可视化如下

基于COLMAP测试Instant-NGP(训练过程可视化)

3DGS训练好的模型加载进行可视化

上面的测试中都是边训练边看效果,此处看看直接训练好开奖的结果吧哈~

如下图所示,大概半个小时左右,训练好了一个3DGS,看着PSNR还挺高的,打算加载看看效果~

平时边训练边看结果的代码如下:

conda activate 3DGS

cd gaussian-splatting/

./SIBR_viewers/install/bin/SIBR_remoteGaussian_app

但如果当前没有训练会看到加载的空空如也~

细看gaussian-splatting/的文件组成会发现,它会把训练的结果保存在output中

这个就是当前训练好的模型了。如果要指向某个训练好的模型,应该是

./<SIBR install dir>/bin/SIBR_gaussianViewer_app -m <path to trained model>


./SIBR_viewers/install/bin/SIBR_gaussianViewer_app -m "/home/gwp/gaussian-splatting/output/1f6d93f1-5/"

效果如下视频所示

基于COLMAP测试3D Gaussian Splatting(训练好的模型)

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

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

相关文章

史上最牛逼的fiddler抓包操作,【工具】Fiddler使用教程

eb调试工具之一&#xff0c; 它能记录所有客户端和服务器的http和https请求。允许你监视、设置断点、甚至修改输入输出数据。Fiddler包含了一个强大的基于事件脚本的子系统&#xff0c;并且能使用.net语言进行扩展。换言之&#xff0c;你对HTTP 协议越了解&#xff0c;你就能越…

【DevOps-07-2】Sonarqube基本使用

一、简要说明 Sonar Qube的使用方式很多&#xff0c;Maven可以整合&#xff0c;也可以采用sonar-scanner的方式&#xff0c;再查看Sonar Qube的检测效果 Sonarqube集成在Maven实现代码检测使用sonar-scanner客户端的方式 二、Sonarqube管理后台安装中文插件 1、登录Sonarqube管…

案例253:基于微信小程序的懂球短视频管理系统

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SpringBoot JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder …

无人机发动机,预计到2025年将保持相对稳定

随着无人机技术的不断发展&#xff0c;无人机应用领域越来越广泛&#xff0c;市场需求也不断扩大。而无人机发动机是无人机的核心部件之一&#xff0c;市场前景也十分广阔。全球市场分析&#xff1a; 目前&#xff0c;全球无人机发动机市场主要分为四类&#xff1a;燃气涡轮发动…

【自学笔记】01Java基础-09Java关键字详解

介绍java&#xff08;基于java11&#xff09;中所有关键字&#xff0c;以及主要重要的关键字详解。 1 Java 11中的关键字&#xff1a; 1.1 类型声明与变量定义 boolean&#xff1a;声明布尔类型变量&#xff0c;只有两个可能值 true 或 false。byte&#xff1a;声明一个8位有…

公共用例库计划--个人版(二)主体界面设计

1、任务概述 计划内容&#xff1a;完成公共用例库的开发实施工作&#xff0c;包括需求分析、系统设计、开发、测试、打包、运行维护等工作。 1.1、 已完成&#xff1a; 需求分析、数据库表的设计&#xff1a;公共用例库计划–个人版&#xff08;一&#xff09; 1.2、 本次待…

vmware安装centos 7.6 操作系统

vmware安装centos 7.6 操作系统 1、下载centos 7.6 操作系统镜像文件2、安装centos 7.6操作系统3、配置centos 7.6 操作系统3.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载centos 7.6 操作系统镜像文件 这里选择 2018年10月发布的 7.6 版本 官方下载链…

33--反射

1、反射(Reflection)的概念 1.1 反射的出现背景 Java程序中&#xff0c;所有的对象都有两种类型&#xff1a;编译时类型和运行时类型&#xff0c;而很多时候对象的编译时类型和运行时类型不一致。 Object obj new String("hello"); obj.getClass(); 例如&#xf…

互联网广告行业发展历程

在20年的历程中&#xff0c;广告主与媒体方持续面对着一些问题&#xff0c;一些核心问题推动了行业的迭代。 互联网广告经过了20年左右的高速发展&#xff0c;已愈发成熟&#xff0c;其历程是有趣的。 对互联网广告发展的理解&#xff0c;网上的文章并不多&#xff0c;已有的…

力扣1944.队列中可以看到的人数--单调栈

思路&#xff1a; 由题知一个人能 看到 他右边另一个人的条件是这两人之间的所有人都比他们两人 矮 &#xff0c;也就是说&#xff0c;在自己右边第一个比自己高的人后面的人就肯定看不到了那么只需要找到右边第一个比自己高的人与自己之间的所有满足要求的人就行了&#xff0…

大数据毕业设计:python房源数据爬虫分析预测系统+可视化 +商品房数据(源码+讲解视频)✅

毕业设计&#xff1a;2023-2024年计算机专业毕业设计选题汇总&#xff08;建议收藏&#xff09; 毕业设计&#xff1a;2023-2024年最新最全计算机专业毕设选题推荐汇总 &#x1f345;感兴趣的可以先收藏起来&#xff0c;点赞、关注不迷路&#xff0c;大家在毕设选题&#xff…

15|检索增强生成:通过RAG助力鲜花运营

15&#xff5c;检索增强生成&#xff1a;通过RAG助力鲜花运营 什么是 RAG&#xff1f;其全称为 Retrieval-Augmented Generation&#xff0c;即检索增强生成&#xff0c;它结合了检索和生成的能力&#xff0c;为文本序列生成任务引入外部知识。RAG 将传统的语言生成模型与大规…

Pygame和Cocos2d

Pygame和Cocos2d都是 Python 中常用的游戏引擎&#xff0c;但它们的设计目标、特点和使用场景略有不同。 Pygame与Cocos2d&#xff0c;目前是使用人数最多的两个Python游戏库。根据某知名产品点评网站的数据显示&#xff0c;排名前五的Python 2D游戏库如下图所示。其中&#x…

聚观早报 |小米汽车SU7官图发布;优酷上线“AI搜片”功能

聚观早报每日整理最值得关注的行业重点事件&#xff0c;帮助大家及时了解最新行业动态&#xff0c;每日读报&#xff0c;就读聚观365资讯简报。 整理丨Cutie 12月29日消息 小米汽车SU7官图发布 优酷上线“AI搜片”功能 小米汽车智能驾驶技术公布 百度投资AIGC公司必优科技…

硬链接和软链接以及inode的简述【Linux】

硬链接和软链接 inode是什么&#xff1f;面试题 硬链接软链接 inode是什么&#xff1f; 认识inode之前&#xff0c;先来看一下一个文件在磁盘里面是怎么存储的。   首先一个物理的圆盘形状且多层的一个磁盘会被逻辑化成为一个数组&#xff0c;找到一个文件在这个数组里面叫做…

JavaScript新加入的**运算符,哪里有些不一样呢?

JavaScript语法(四)&#xff1a;新加入的**运算符&#xff0c;哪里有些不一样呢&#xff1f; 上一节课我们已经给你介绍了表达式的一些结构&#xff0c;其中关于赋值表达式&#xff0c;我们讲完了它的左边部分&#xff0c;而留下了它右边部分&#xff0c;那么&#xff0c;我们…

HarmonyOS4.0系统性深入开发14AbilityStage组件容器

AbilityStage组件容器 AbilityStage是一个Module级别的组件容器&#xff0c;应用的HAP在首次加载时会创建一个AbilityStage实例&#xff0c;可以对该Module进行初始化等操作。 AbilityStage与Module一一对应&#xff0c;即一个Module拥有一个AbilityStage。 DevEco Studio默…

1-并发编程线程基础

什么是线程 在讨论什么是线程前有必要先说下什么是进程&#xff0c;因为线程是进程中的一个实体&#xff0c;线程本身是不会独立存在的。 进程是代码在数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位&#xff0c;线程则是进程的一个执行路径&#…

创意与技术的结晶:AI魔法绘图与中文描述的完美结合

在人类文明的长河中&#xff0c;创意与技术一直是推动发展的重要动力。随着科技的日新月异&#xff0c;人工智能&#xff08;AI&#xff09;在创意领域的应用逐渐崭露头角&#xff0c;而AI魔法绘图与中文描述的结合&#xff0c;更是将这一趋势推向了新的高度。AI魔法绘图是一种…

各类Java对象

相关概念的混淆 在某一时间段&#xff0c;人们对某种编程困境感到烦恼&#xff0c;不少人脑中产生了一种新开发方式的概念 一些代表人物提出了他们的意见&#xff0c;而同一时期可能又不少人对同一问题&#xff0c;用自己的不同语言提出不同概念 如果又官方组织维护概念&#x…