实验笔记之——基于windows复现Instant-NGP

之前博客对NeRF-SLAM进行了调研,本博文先复现一下Intant-NGP。

学习笔记之——NeRF SLAM(基于神经辐射场的SLAM)-CSDN博客文章浏览阅读851次,点赞22次,收藏21次。NeRF 所做的任务是 Novel View Synthesis(新视角合成),即在若干已知视角下对场景进行一系列的观测(相机内外参、图像、Pose 等),合成任意新视角下的图像。传统方法中,通常这一任务采用三维重建再渲染的方式实现,NeRF 希望不进行显式的三维重建过程,仅根据内外参直接得到新视角渲染的图像。为了实现这一目的,NeRF 使用用神经网络作为一个 3D 场景的隐式表达,代替传统的点云、网格、体素、TSDF 等方式,通过这样的网络可以直接渲染任意角度任意位置的投影图像。https://blog.csdn.net/gwplovekimi/article/details/135083274?spm=1001.2014.3001.5501Intant-NGP论文链接:https://dl.acm.org/doi/pdf/10.1145/3528223.3530127

代码链接:https://github.com/NVlabs/instant-ngp

原理解读部分在调研博客里面已经写了,此处就不再详述。本博文仅仅记录配置实验过程。本博文部分资料来源于网络,仅供本人学习记录用~

首先看看电脑的gpu信息。点击“此电脑-管理-设备管理器-显示适配器”。

电脑的GPU是3090,那么应该就是属于下面第一个类别的了

  • RTX 3000 & 4000 series, RTX A4000–A6000, and other Ampere & Ada cards
  • RTX 2000 series, Titan RTX, Quadro RTX 4000–8000, and other Turing cards
  • GTX 1000 series, Titan Xp, Quadro P1000–P6000, and other Pascal cards

解压后打开exe文件即可。

它的UI长这样:

GUI包括以下部分:

  • 全面控制以交互方式探索神经图形基元
  • 通过虚拟现实头戴设备查看神经图形基元的VR模式
  •  保存和加载“快照”,以便在互联网上分享您的图形基元
  • 相机路径编辑器用于创建视频,
  • NeRF->Mesh和SDF->Mesh转换,
  • 相机位置和镜头优化,

然后把data里nerf的fox拖进去就可以,如下面视频所示

Instant NGP testing fox

GUI按键各个功能如下:

Instant NGP testing GUI

通过下图中所示的按键也可以可视化相机的位置

fox里面一共115张图片,确实是瞬间就渲染出比较好的纹理效果~

对于fox文件里面还有一共transform.json文件,里面记录的就是相机的内参和外参(pose)了。

再测试一下用其他序列的效果,从视频可以看到,这个算法确实是挺不错的,再这些序列下都可以出来不错的效果~

Instant NGP testing different dataset

接下来看看用SDF作为输入的效果

Instant NGP testing SDF as input

好了~测试完作者给出的gui后,接下来看看用自己的采集数据测试的效果。作者提供了三个不同的script来处理数据,使得可以用inatant-ngp作为输入

  • COLMAP to create a dataset from a set of photos or a video you took
  • Record3D to create a dataset with an iPhone 12 Pro or newer (based on ARKit)
  • NeRFCapture to create a dataset or stream posed images directly to instant-ngp with an iOS device.

首先作者建议用python3.7以上的版本来处理。先安装Anaconda(Free Download | Anaconda) 

然后打开Anaconda Promp,并创建虚拟环境( nerf-ngp)

conda create -n nerf-ngp python=3.8

然后切换到虚拟环境下

conda activate nerf-ngp

再把下面的依赖包安装一下

pip install commentjson imageio numpy opencv-python-headless pybind11 pyquaternion scipy tqdm

应该都安装齐全了~

由于我的手机正好是iphone 12 pro,因此采用Record3D来测试。Record3D是一个IOS的app,可以用ARKit来估算camera的pose。

首先安装这个app(Record3D — 3D Videos and Point Cloud (RGBD) Streaming for iOS)。

然后,录制一段视频。如下所示,应该就是利用了iphone12的lidar测深度?

Record3D in Iphone 12 pro

然后用“Shareable/Internal format (.r3d)”格式导出,将文件传到电脑。然后将.r3d变为.zip文件,并且解压如下

然后执行下面命令

python record3d2nerf.py --scene ..\data\mydesk

如果采用横向方位捕捉视频,就添加-- rotate

就成功生成了pose与image序列~

然后用instant-NGP测试,结果报错如下

是因为序列太多了?那改一下用少点的序列看看~

还是不行~应该是由于图片太大?,占满了gpu的内存导致的?

但是看了一下图片的尺寸只是1140*1920(但一共有1573张图片,好像确实有点多,因此改一下帧率,让图像少些吧~)

结果要付费了。。。cao,为了科研,冲!

测试了几次,需要有足够的激励的~如下所示

Instant NGP testing self collect dataset

对于实际的场景,如果大大的超出了cube(如上视频所示),需要将将transforms.json中的参数aabb_scale设置为2的整数次方,最大为128(即1、2、4、8、...、128)(目前上面的视频展示为16,修改成4,截图如下)

这个值变小了后,场景就集中于这个杯子上了。那如果变为64呢?恢复的场景会大些,但是效果看上去是差不多的~感觉这个工作还是要继续深入了解一下,看看这些参数背后的意义~

至于渲染的效果好像都差不多没有太大的提升

根据作者给出的tips

NeRF模型在展示最佳效果时,需要50至150张图像,这些图像表现出最小的场景移动、运动模糊或其他模糊的伪影。重建的质量取决于先前的脚本能够从图像中提取准确的相机参数。请查看前面的部分,了解如何验证这一点的信息。

colmap2nerf.py 和 record3d2nerf.py 脚本假设训练图像大致指向一个共同的兴趣点,并将其放置在原点。该点是通过计算所有训练图像对中心像素射线的最近交点的加权平均值找到的。在实践中,这意味着当训练图像朝向感兴趣的对象时,脚本效果最佳,尽管它们不需要完整地围绕该对象完成全景视图。如果aabb_scale设置为大于1的数字,解释如上所述,仍然会重建出感兴趣对象背后可见的任何背景。

参考资料

https://github.com/MarvinChung/Orbeez-SLAM

Creating your own NeRF

快速跑 nerf instant-ngp 快速调试与配置,跑自己的数据_instant ngp在2080ti训练-CSDN博客

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

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

相关文章

在前端开发中,如何优化网站的加载速度?

在前端开发中,网站的加载速度是一个至关重要的因素,它直接影响着用户体验和搜索引擎优化(SEO)。一个快速、响应迅速的网站不仅能让用户更加满意,还能提高网站的排名和流量。那么,如何优化网站的加载速度呢&…

el-radio-button自适应充满盒子的写法

业务场景&#xff1a;当盒子较宽时&#xff0c;希望 el-radio-button 自适应充满盒子。 el-radio-button 自适应充满盒子的写法 <el-form :inline"true" :model"searchForm"><el-form-item style"display: flex; align-items: center;"…

【Java EE初阶七】多线程案例(阻塞队列与生产者消费者模型)

1. 阻塞队列 队列是先进先出的一种数据结构&#xff1b; 阻塞队列&#xff0c;是基于队列&#xff0c;做了一些扩展&#xff0c;适用于多线程编程中&#xff1b; 阻塞队列特点如下&#xff1a; 1、是线程安全的 2、具有阻塞的特性 2.1、当队列满了时&#xff0c;就不能往队列里…

串口通信要点解析

目录 简介&#xff1a; UART 协议解析&#xff1a; 串口协议工作过程&#xff1a; 简介&#xff1a; 串行通信协议包括&#xff1a; UART通用异步收发传输器 (Universal Asynchronous ReceiverTransmitter) 是一种串行异步收发协议 (异步是指通信双方使用各自的时钟控制数据…

fineBI web组件传参

1、fineBI web组件传参 1.1、 Web组件- FineBI帮助文档 FineBI帮助文档1. 概述1.1 版本FineBI 版本HTML5移动端展现功能变动6.0--V11.0.83web组件适配移动端效果优化6.0.13-web组件支持传递参数 ${过滤组件https://help.fanruan.com/finebi/doc-view-143.html 1.2、自己做的例…

分布式(6)

目录 26.雪花算法如何实现的&#xff1f; 27.雪花算法有什么问题&#xff1f;有哪些解决思路&#xff1f; 28.有哪些方案实现分布式锁&#xff1f; 29.基于数据库如何实现分布式锁&#xff1f;有什么缺陷&#xff1f; 30.基于Redis如何实现分布式锁&#xff1f;有什么缺陷&…

VS 2022 控制台程序运行时不显示控制台

Visual Studio 2022&#xff0c;C#控制台程序运行时不显示控制台。此外&#xff0c;C#程序修改运行时的程序名。 文章目录 不显示控制台修改运行时的程序名打包成.exe 文件 不显示控制台 1 选中需要项目&#xff0c;右击属性&#xff0c;选中常规。 2 将输出类型从控制台改为…

微服务-@FeignClient 与 Feign 隔离

FeignClient 扫描 FeignClientsRegistrar#registerBeanDefinitions public void registerBeanDefinitions(AnnotationMetadata metadata,BeanDefinitionRegistry registry) { // 注册默认配置 registerDefaultConfiguration(metadata, registry); registerFeignClients(metada…

服务异步通讯---RabbitMQ实用篇

目录 一、初识MQ 一、同步调用 1、同步通讯和异步通讯 2、同步调用的问题 3.同步调用总结 二、异步调用 1、优势&#xff1a; ​编辑 2、异步总结 二、什么是MQ 一、RabbitMQ快速入门 1、RabbitMQ的结构和概念 2、常见消息模型 2.1、基础消息队列模型 2.2、总结 二…

Sharding-JDBC快速使用【笔记】

1 引言 最近在使用Sharding-JDBC实现项目中数据分片、读写分离需求&#xff0c;参考官方文档&#xff08;Sharding官方文档&#xff09;感觉内容庞杂不够有条理&#xff0c;重复内容比较多&#xff1b;现结合项目应用整理笔记如下供大家参考和自己回忆使用&#xff1b; 在…

为什么要太空探索?未来万亿人口 人类移居太空是不可避免的。大语言模型是发现 贝索斯

管理的思考 「最以客户为中心」「果断」「如何决策」 贝索斯给亚马逊的使命是「世上最以客户为中心的公司」(以客户需求为起点&#xff0c;反向推动工作)。贝索斯给蓝色起源的使命是「世上最果断的公司」(我们将变得非常擅长在技术上恰当地冒险&#xff0c;并快速地作出那些决…

一篇了解springboot3请求参数种类及接口测试

SpringBoot3数据请求&#xff1a; 原始数据请求&#xff1a; //原始方式RequestMapping("/simpleParam")public String simpleParam(HttpServletRequest request){//获取请求参数String name request.getParameter("name");String age request.getParame…

钉钉-蓝牙打卡和平台打卡的区别

钉钉的群是部门概念。 你的账号归属到哪个群&#xff0c;就是哪个群的员工。 -------------------------------------------------------------------- 蓝牙打卡是对账号归属进行打卡的。 平台打卡是只对属于自己平台内的账号打卡的。 ----------------------------------…

【MATLAB】PSO粒子群优化BiLSTM(PSO_BiLSTM)的时间序列预测

有意向获取代码&#xff0c;请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 基于PSO粒子群优化的BiLSTM的时间序列预测算法的基本原理如下&#xff1a; 「双向长短时记忆&#xff08;BiLSTM&#xff09;模型」&#xff1a;这是一种深度学习模型&#xff0c;特别适用…

感恩客户相伴23载,泛微2024持续向上!

2023年&#xff0c;国家大力推动数字经济发展&#xff0c;各行各业在加速数字化转型&#xff0c;在这一年&#xff0c;泛微保持持续增长&#xff0c;引领行业发展&#xff0c;为组织的数字化转型助力。感恩客户与伙伴朋友的支持与信任&#xff01; 01.泛微中大客户总量突破8万余…

Unity中Shader的Reversed-Z(DirectX平台)

文章目录 前言一、在对裁剪坐标归一化设置NDC时&#xff0c;DirectX平台Z的特殊二、在图形计算器中&#xff0c;看一下Z值反转前后变化1、在图形计算器创建两个变量 n 和 f 分别 控制近裁剪面 和 远裁剪面2、带入公式得到齐次裁剪空间下Z值3、进行透视除法4、用 1 - Z 得出Z值反…

VS+QT五子棋游戏开发

1、首先安装好VS软件和QT库&#xff0c;将其配置好&#xff0c;具体不在此展开说明。 2、文件结构如下图&#xff1a; 3、绘制棋盘代码&#xff0c;如下&#xff1a; void Qwzq::paintEvent(QPaintEvent* event) {QPainter painter(this);painter.setRenderHint(QPainter::An…

【响应式编程-01】Lambda表达式初体验

一、简要描述 Lambda初体验Lambda表达式的语法格式Lambda表达式应用举例Lambda表达式底层实现 二、什么是Lambda表达式 Java8新特性&#xff0c;来源于数学中的λ[l:mdə]演算 是一套关于函数(f(x))定义、输入量、输出量的计算方案 Lambda表达式 -> 函数 使代码变得简洁…

维生素B5和琥珀酰辅酶A可以改善SF3B1基因突变引起无效造血过程

今天给同学们分享一篇实验文章“Vitamin B5 and succinyl-CoA improve ineffective erythropoiesis in SF3B1-mutated myelodysplasia”&#xff0c;这篇文章发表在Sci Transl Med期刊上&#xff0c;影响因子为17.1。 结果解读&#xff1a; SF3B1突变导致MDS-RS患者COASY异构体…

短视频账号矩阵系统源码/技术交付3年开发源头

账号矩阵3年技术独立开发打造是一个非常有挑战性和前景的项目。以下是一些建议&#xff0c;帮助你成功打造一个成功的短视频账号矩阵&#xff1a; 1. 确定目标受众&#xff1a;首先需要明确你的目标受众是谁&#xff0c;了解他们的兴趣爱好、年龄、性别等&#xff0c;以便为他们…