Instruct-GS2GS:通过用户指令编辑 GS 三维场景

Paper: Instruct-GS2GS: Editing 3D Gaussian Splats with Instructions
Introduction: https://instruct-gs2gs.github.io/
Code: https://github.com/cvachha/instruct-gs2gs

Instruct-GS2GS 复用了 Instruct-NeRF2NeRF 1 的架构,将基于 NeRF 的三维场景编辑方法迁移到基于 3D GS 的三维场景中。

与 Instruct-NeRF2NeRF 不同的是,Instruct-GS2GS 并不采取 Instruct-NeRF2NeRF 中 Iterative DU 的迭代方式,而是在每一轮的迭代中更新所有训练视图,然后训练 GS 场景。

在这里插入图片描述

目录

  • 一. 研究思路
  • 二. Instruct-GS2GS 模型
  • 三. 训练方法
  • 四. 实验结果
  • 五. 总结
  • 六. 复现

一. 研究思路

二. Instruct-GS2GS 模型

三. 训练方法

在每一轮训练中,先使用 InstructPix2Pix 编辑 所有 训练视图并更新,然后使用全新的训练集训练当前 GS 场景 2.5k 轮。不断重复上述迭代直至收敛。

Instruct-GS2GS 并不采取 Instruct-NeRF2NeRF 中 Iterative DU 的迭代方式,而是在每一轮的迭代中更新所有训练视图,然后再训练 GS 场景。这是因为 NeRF 是基于像素优化的,而 GS 是基于图像优化的,需要一次性光栅化整个图像并计算其损失。如果 Instruct-GS2GS 只更新部分数据集,那么光栅化时必然有一些视角下的图像对应的场景是混合包含已编辑和未编辑图像信息,那么此时计算基于整张图像的损失函数就会失真,导致错误的更新。2

在这里插入图片描述

四. 实验结果

在这里插入图片描述

五. 总结

六. 复现

Instruct-GS2GS 基于 Nerfstudio:

  • 平台:AutoDL
  • 显卡:RTX 4090 24GB
  • 镜像:PyTorch 2.0.0、Python 3.8(ubuntu20.04)、Cuda 11.8
  • 源码:https://github.com/cvachha/instruct-gs2gs

实验记录

  1. 先按照 nerfstudio 教程 创建虚拟环境并激活:source activate nerfstudio。然后安装依赖包,执行到 conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit 即可;

  2. 安装 Instruct-GS2GS 包,然后克隆 Instruct-GS2GS 仓库并更新组件和包;

  3. 在 instruct-gs2gs 文件夹下克隆并安装 Nerfstudio 3,随后执行 ns-train -h 就可以成功验证;
    在这里插入图片描述

  4. Nerfstudio 安装完成后,就可以训练了。因为系统盘空间有限,因此将训练数据放在数据盘,使用 garden 数据集进行训练:ns-train splatfacto --data ../autodl-tmp/data/garden。需要注意的是,这里使用的是 1.0 版本的 Nerfstudio,不再有 gaussian-splatting 参数,这里选用 splatfacto
    在这里插入图片描述
    上一版本的 Instruct-GS2GS 因为 dataparser 的问题,训练时解析 colmap 数据时还会出现路径错误,新版本使用 Nerfstudio V1.0 修复了该问题:
    在这里插入图片描述

  5. 训练时遇到 FileNotFoundError 报错,找不到 colmap 数据中的 .json 文件:
    在这里插入图片描述
    一开始以为是 colmap 处理数据时的命名歧义,将 instruct-gs2gs/nerfstudio/nerfstudio/data/dataparsers/nerfstudio_dataparser.py 第 94 行的 "transforms.json" 修改为 "cameras.json",事实上并非如此。后来发现是训练数据中缺少 transforms.json 文件 4,尝试先安装 COLMAP 5,然后自行处理数据 6ns-process-data images --data ../autodl-tmp/data/garden --output-dir ../autodl-tmp/data/garden。随后就可以成功训练;

  6. garden 场景训练完成后,就可以进行编辑:ns-train igs2gs --data ../autodl-tmp/data/garden --load-dir outputs/garden/splatfacto/2024-05-11_142858/nerfstudio_models --pipeline.prompt "Delete the vase on the table" --pipeline.guidance-scale 12.5 --pipeline.image-guidance-scale 1.5
    在这里插入图片描述

  7. 如果是在服务器上训练的,想要使用监视窗口,需要转发:ssh -p <port> -L 7007:localhost:7007 <username>@<training-host-ip>
    在这里插入图片描述

  8. 训练和编辑后的场景可以再次查看:ns-viewer --load-config outputs/garden/splatfacto/2024-05-11_142858/config.yml,也可以渲染成视频:ns-render camera-path --load-config outputs/garden/splatfacto/2024-05-11_142858/config.yml --camera-path-filename ../autodl-tmp/data/garden/camera_paths/2024-05-11_142858.json --output-path renders/garden/2024-05-11_142858.mp4。渲染场景时,出现 RuntimeError: stack expects a non-empty TensorList 报错:
    在这里插入图片描述
    查询发现是 camera_pathskeyframes 为空导致的 7,机位为空应该是处理数据过程中的问题,目前还没找到解决办法。可以在 Nerfstudio 的可视化界面自行处理数据或者直接使用其他数据集处理得到的机位文件,但后者可能会失真。本次实验使用 Bear 场景的机位进行渲染:
    在这里插入图片描述

实验结果

借用 Bear 场景的机位路径渲染编辑前后的 garden 场景视频如下:

garden场景训练效果

garden场景编辑效果


  1. Instruct-NeRF2NeRF:通过用户指令编辑 NeRF 三维场景 ↩︎

  2. A question about Dataset Update #4 ↩︎

  3. Fresh install error #72 ↩︎

  4. Colab Notebook not generating transforms.json file for custom data #2272 ↩︎

  5. Nerfstudio | Installing COLMAP ↩︎

  6. Nerfstudio | Processing Data ↩︎

  7. Unable to render to mp4 with RuntimeError: stack expects a non-empty TensorList #2916 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

VS Code配置Graphviz和DOT语言环境

目录 Graphviz介绍 下载并安装Graphviz 安装插件 效果展示 Graphviz介绍 Graphviz 是一款开源图形可视化软件。图形可视化是一种将结构信息表示为抽象图形和网络图的方法。它在网络、生物信息学、软件工程、数据库和网页设计、机器学习以及其他技术领域的可视化界面中有着…

展开说说:Android服务之实现AIDL跨应用通信

前面几篇总结了Service的使用和源码执行流程&#xff0c;这里再简单分析一下如果需要Service跨进程通信该怎样做。AIDL&#xff08;Android Interface Definition Language&#xff09;Android接口定义语言&#xff0c;用于实现 Android 两个进程之间进行进程间通信&#xff08…

TensorFlow系列:第二讲:准备工作

1.创建项目&#xff0c;选择虚拟环境 项目结构如下&#xff1a; data中的数据集需要提前准备好&#xff0c;数据分为测试集&#xff0c;训练集和验证集。以下是数据集的下载平台&#xff1a;kaggle 2.随便选择一个和水果相关的数据集&#xff0c;下载到本地&#xff0c;导入的项…

C# Bitmap类型与Byte[]类型相互转化详解与示例

文章目录 一、Bitmap类型转Byte[]类型使用Bitmap类的Save方法使用Bitmap类的GetBytes方法 二、Byte[]类型转Bitmap类型使用MemoryStream将Byte[]数组转换为Bitmap对象使用System.Drawing.Imaging.BitmapImage类 总结 在C#编程中&#xff0c;Bitmap类型和Byte[]类型之间的相互转…

产品原型设计:从概念到实现的完整指南

如果你是一位产品经理&#xff0c;那么你一定会和原型图打交道&#xff0c;产品原型是产品设计方案和底层逻辑的可视化表达&#xff0c;需要完整清晰地表达出产品目的及需求&#xff0c;在整个产品创造的过程中发挥着不可或缺的作用。而对于一些刚入行的产品经理来说&#xff0…

【Linux】多线程_1

文章目录 九、多线程1. 线程概念2. 线程的控制 未完待续 九、多线程 1. 线程概念 我们知道&#xff1a;进程 内核数据结构 进程代码和数据 。那什么是线程呢&#xff1f;线程是进程内部的一个执行分支。一个进程内部可以有多个执行流&#xff08;内核数据结构&#xff09;&…

量产工具一一UI系统(四)

目录 前言 一、按钮数据结构抽象 1.ui.h 二、按键处理 1.button.c 2.disp_manager.c 3.disp_manager.h 三、单元测试 1.ui_test.c 2.上机测试 前言 前面我们实现了显示系统框架&#xff0c;输入系统框架和文字系统框架&#xff0c;链接&#xff1a; 量产工具一一显…

接口测试(2)

单接口测试 CtrlD 复制 因为单接口的时候主要改变测试用例数据 自动判定响应结果 postman断言 //断言响应状态码为200 pm.test("Status code is 200", function () {pm.response.to.have.status(200); }); //断言返回数据中包括&#xff08;成功&#xff09; //预期结…

线程池案例

秒杀 需求 10个礼物20个客户抢随机10个客户获取礼物&#xff0c;另外10无法获取礼物 任务类 记得给共享资源加锁 public class MyTask implements Runnable{// 礼物列表private ArrayList<String> gifts ;// 用户名private String username;public MyTask( String user…

285个地级市出口产品质量及技术复杂度(2011-2021年)

出口产品质量与技术复杂度&#xff1a;衡量国家竞争力的关键指标 出口产品质量是衡量国内企业生产的产品在国际市场上竞争力的重要标准。它不仅要求产品符合国际标准和目标市场的法律法规&#xff0c;而且需要保证产品质量的稳定性和可靠性。而出口技术复杂度则进一步体现了一…

Spring Cloud 引入

1.单体架构&#xff1a; 定义&#xff1a;所有的功能实现都打包成一个项目 带来的后果&#xff1a; ①后端服务器的压力越来越大&#xff0c;负载越来越高&#xff0c;甚至出现无法访问的情况 ②业务越来越复杂&#xff0c;为了满足用户的需求&#xff0c;单体应用也会越来越…

IEC62056标准体系简介-2.IEC62056标准体系及对象标识系统(OBIS)

1. IEC 62056标准体系 IEC 62056标准体系目前共包括六部分&#xff0c;见图1&#xff1a; 第61部分&#xff1a;对象标识系统第62部分&#xff1a;接口类第53部分&#xff1a;COSEM应用层第46部分&#xff1a;使用HDLC&#xff08;High Level Data Link Control&#xff09;协…

HNU小学期BSP软件编程基础十道测试题

http://t.csdnimg.cn/Yv0R1 文章参考了这位大佬的代码&#xff0c;在他的基础上进行了纠错、完善等处理。 配置 编程前的准备工作按大佬的流程即可&#xff0c;稍有不同的是学习通课程网站的资料里没有头文件的整个压缩包了&#xff0c;但我们可以下载某个BSP版的工程文件&am…

X12端口配置指南:ISA ID、测试指示符与997

通过知行之桥EDI系统实现X12 & 标准XML之间的格式转换时&#xff0c;需要完善交换头ISA ID及其限定符、测试标识符以及997的相关配置。 在X12文件中有两组EDI ID对&#xff0c;分别是发送方 ID 限定符 及发送方ID &#xff0c;接收方 ID 限定符及接收方ID。 比如&#xf…

谷粒商城-个人笔记(集群部署篇三)

前言 ​学习视频&#xff1a;​Java项目《谷粒商城》架构师级Java项目实战&#xff0c;对标阿里P6-P7&#xff0c;全网最强​学习文档&#xff1a; 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

【linux服务器篇】-Redis-RDM远程连接redis

redis desktop manager 使用远程连接工具RDM连接redis 市面上比较常见的其中一款工具redis desktop manager 简单的说&#xff1a; Redis Desktop Manager 简单的来讲就是Redis可视化工具&#xff0c;可以让我们看到Redis中存储的内容。 redis desktop manager是一款功能强…

C++:多态(继承)

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;多态》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 文章目录 :maple_leaf:多态的概念:maple_leaf:继承中的多态1.:leaves:虚函数表 :…

uniapp安卓端实现语音合成播报

最初尝试使用讯飞语音合成方式,能获取到语音数据,但是数据是base64格式的,在安卓端无法播放,网上有说通过转成blob格式的url可以播放,但是uniapp不支持转换的api;于是后面又想其他办法,使用安卓插件播报原生安卓语音播报插件 - DCloud 插件市场 方案一(讯飞语音合成) 1.在讯飞…

C语言入门基础题:奇偶 ASCII 值判断(C语言版)和ASCII码表,什么是ASCII码,它的特点和应用?

1.题目描述&#xff1a; 任意输入一个字符&#xff0c;判断其 ASCII 是否是奇数&#xff0c;若是&#xff0c;输出 YES &#xff0c;否则&#xff0c;输出 NO例如&#xff0c;字符 A 的 ASCI 值是 65 &#xff0c;则输出 YES &#xff0c;若输入字符 B(ASCII 值是 66)&#xff…

使用 Qt 和 ECharts 进行数据可视化

文章目录 示例图表预览折线图散点图柱状图使用 Qt 和 ECharts 进行数据可视化一、准备工作1. 安装 Qt2. 准备 ECharts二、在 Qt 中使用 ECharts1. 创建 Qt 项目2. 配置项目文件3. 在 UI 中添加 WebEngineView4. 加载 ECharts三、创建折线图、散点图和柱状图1. 折线图2. 散点图3…