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

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://www.lryc.cn/news/396039.html

相关文章:

  • disql使用
  • SpringBoot Mybatis-Plus 日志带参数
  • 【WebGIS平台】传统聚落建筑科普数字化建模平台
  • Zookeeper分布式锁原理说明【简单易理解】
  • 去除Win32 Tab Control控件每个选项卡上的深色对话框背景
  • iis部署前后端分离项目(React前端,Node.js后端)
  • 【前端项目笔记】9 数据报表
  • 等保测评推动哈尔滨数字化转型中的安全保障
  • #pragma 指令
  • 【Excel】 批量跳转图片
  • 网站更新改版了
  • 初识大模型
  • Open3D SVD算法实现对应点集配准
  • bWAPP靶场安装
  • SpringBoot + MyBatisPlus 实现多租户分库
  • 【数据挖掘】银行信用卡风险大数据分析与挖掘
  • 使用 Qt 和 ECharts 进行数据可视化
  • 【机器学习】在【Pycharm】中的实践教程:使用【逻辑回归模型】进行【乳腺癌检测】
  • 【搭建Nacos服务】centos7 docker从0搭建Nacos服务
  • 将 build.gradle 配置从 Groovy 迁移到 Kotlin
  • 5G(NR) NTN 卫星组网架构
  • WEB安全-文件上传漏洞
  • Python函数 之 函数基础
  • 昇思25天学习打卡营第11天|SSD目标检测
  • MySQL篇五:基本查询
  • FreeBSD@ThinkPad x250因电池耗尽关机后无法启动的问题存档
  • pdfplumber vs PyMuPDF:PDF文本、图像和表格识别的比较
  • 深入Django系列
  • 【Python】找Excel重复行
  • 重读AI金典算法模型-GPT系列