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

Haque A, Tancik M, Efros A A, et al. Instruct-nerf2nerf: Editing 3d scenes with instructions[J]. arXiv preprint arXiv:2303.12789, 2023.

Instruct-NeRF2NeRF 是 ICCV 2023 Oral 论文,首次将图像编辑任务从二维提升到三维。

Instruct-NeRF2NeRF 所做的任务是根据用户指令编辑 NeRF 表示的三维场景。Instruct-NeRF2NeRF 使用预训练的 InstructPix2Pix 对 NeRF 的训练数据(即多视角视图)进行编辑,然后用编辑后的视图继续训练 NeRF,从而达到编辑三维场景的效果。为了确保编辑后的三维场景的连续性,使用 Iterative DU 的方式进行训练。

在这里插入图片描述

目录

  • 一. 研究思路
  • 二. Instruct-NeRF2NeRF 模型
  • 三. 训练方法
    • 1. 编辑 NeRF 训练图像
    • 2. 更新 NeRF 训练集
  • 四. 实验结果
  • 五. 总结
  • 六. 复现

一. 研究思路

Instruct-NeRF2NeRF 的目的是按照人为指令对 NeRF 表示的三维场景进行编辑,因此训练模型只需要编辑指令和 NeRF 场景。正如 DreamFusion 中所说,三维场景的本质就是从多个视角观测一个场景 1,因此 Instruct-NeRF2NeRF 使用 InstructPix2Pix 对 NeRF 的多视角训练数据进行编辑,编辑后的图像就可以用来优化 NeRF 的三维表示。为了方便编辑,给定场景的 NeRF 表示时还保留了其训练数据(视图、机位等信息)。

二. Instruct-NeRF2NeRF 模型

Instruct-NeRF2NeRF 在 NeRF 表示的三维场景上使用 InstructPix2Pix 进行微调:

  • 输入:NeRF 场景及其训练数据和编辑指令;
  • 输出:编辑后的 NeRF 场景;

三. 训练方法

直接对不同视角的训练数据进行编辑会导致三维场景的不连续 (inconsistent edits across viewpoints),因为不同视角的图像编辑之间相互独立:
在这里插入图片描述

于是, Instruct-NeRF2NeRF 的训练使用 迭代数据集更新 (Iterative Dataset Update, Iterative DU) 的方式,即交替编辑 NeRF 训练集图像和更新 NeRF 三维场景。

这也就是为什么不对所有训练图像编辑后从头训练 NeRF 的原因:NeRF 的训练数据可以保证三维场景的连续型,而 InstructPix2Pix 编辑后的多视角图像之间构成的三维场景很有可能不连续。

在这里插入图片描述

1. 编辑 NeRF 训练图像

编辑 NeRF 训练集图像时,将视角 v v v 下的原始图像 c I c_I cI、编辑指令 c T c_T cT、噪声 z t z_t zt 输入 InstructPix2Pix 模型。记 I i v I_{i}^{v} Iiv 表示第 i i i 轮视角 v v v 下的图像, I 0 v = c I I_{0}^{v}=c_I I0v=cI,则有随着迭代不断更新图像:
I i + 1 v ← U θ ( I i v , t ; I 0 v , c T ) I_{i+1}^{v} \leftarrow U_{\theta}(I_{i}^{v},t;I_{0}^{v},c_T) Ii+1vUθ(Iiv,t;I0v,cT)

2. 更新 NeRF 训练集

Instruct-NeRF2NeRF 的核心就是交替编辑 NeRF 训练集图像和更新 NeRF 三维场景,称为 Iterative DU。训练前对 NeRF 训练集的多视角视图指定顺序,在每一轮训练中,先更新 d d d 张图像,再采样 n n n 条射线训练 NeRF:

  1. 图像更新时,随机选取部分视图进行编辑,然后将其替换成编辑后的视图;
  2. NeRF 训练时,从新旧数据混合的训练集中采样部分视图对 NeRF 进行训练;

在这里插入图片描述

上述训练方法在训练初期可能也会出现不连续的三维场景,但随着不断迭代,会收敛到一个连续的三维场景:
在这里插入图片描述

四. 实验结果

使用 Nerfstudio 框架 2 表示三维场景,每次编辑都需要在三维场景上重新训练。训练过程可视化如下:

在这里插入图片描述

不同方法效果对比如下:
在这里插入图片描述

五. 总结

Instruct-NeRF2NeRF 通过使用预训练的 InstructPix2Pix 对 NeRF 的训练数据进行编辑,然后以 Iterative DU 的方式使用编辑后的视图继续训练 NeRF,从而实现了三维场景的编辑,保持了场景的连贯性和真实感。3

其实 Instruct-NeRF2NeRF 在处理三维场景一致性时使用了 tricks:既然已经保留了 NeRF 的所有训练数据,为什么不对所有数据编辑后再训练 NeRF?因为 NeRF 的原始训练数据可以保证三维场景的连续型,而 InstructPix2Pix 编辑后的多视角图像之间构成的三维场景很有可能不连续。因此采用迭代更新数据集的方式来训练,使得 NeRF 逐渐收敛到一个连续三维场景。

但 Instruct-NeRF2NeRF 也有一些局限性:

  • Instruct-NeRF2NeRF 一次只能在一个视图上进行编辑,因此可能出现伪影;
  • 有时 InstructPix2Pix 编辑不理想,因此 Instruct-NeRF2NeRF 的编辑也会因此出问题;
  • 即使 InstructPix2Pix 编辑成功,Instruct-NeRF2NeRF 的编辑也可能不理想;
    在这里插入图片描述

六. 复现

Instruct-NeRF2NeRF 基于 Nerfstudio:

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

实验记录

  1. 先按照 教程 创建 nerfstudio 环境并安装依赖包,执行到 conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit 即可;
  2. 再克隆 Instruct-NeRF2NeRF 仓库并更新组件和包;
  3. 此时执行 ns-train -h 查看安装情况会出现 TypeEror
    在这里插入图片描述
    需要先在 instruct-nerf2nerf 文件夹下安装 Nerfstudio 4 ,然后就可以成功验证:
    在这里插入图片描述
(nerfstudio) root@autodl-container-9050458ceb-3f1684be:~/instruct-nerf2nerf/nerfstudio# ns-train -h
usage: ns-train [-h]
                {depth-nerfacto,dnerf,gaussian-splatting,generfacto,in2n,in2n-small,in2n-tiny,instant-ngp,instant-ngp-bounded,mipnerf,nerfacto,nerfact
o-big,nerfacto-huge,neus,neus-facto,phototourism,semantic-nerfw,tensorf,vanilla-nerf,kplanes,kplanes-dynamic,lerf,lerf-big,lerf-lite,nerfplayer-nerfac
to,nerfplayer-ngp,tetra-nerf,tetra-nerf-original,volinga}

Train a radiance field with nerfstudio. For real captures, we recommend using the nerfacto model.

Nerfstudio allows for customizing your training and eval configs from the CLI in a powerful way, but there are some things to understand.

The most demonstrative and helpful example of the CLI structure is the difference in output between the following commands:

    ns-train -h
    ns-train nerfacto -h nerfstudio-data
    ns-train nerfacto nerfstudio-data -h

In each of these examples, the -h applies to the previous subcommand (ns-train, nerfacto, and nerfstudio-data).

In the first example, we get the help menu for the ns-train script. In the second example, we get the help menu for the nerfacto model. In the third 
example, we get the help menu for the nerfstudio-data dataparser.

With our scripts, your arguments will apply to the preceding subcommand in your command, and thus where you put your arguments matters! Any optional 
arguments you discover from running

    ns-train nerfacto -h nerfstudio-data

need to come directly after the nerfacto subcommand, since these optional arguments only belong to the nerfacto subcommand:

    ns-train nerfacto {nerfacto optional args} nerfstudio-data

╭─ arguments ─────────────────────────────────────────────────────────────╮ ╭─ subcommands ──────────────────────────────────────────────────────────╮
│ -h, --help        show this help message and exit                       │ │ {depth-nerfacto,dnerf,gaussian-splatting,generfacto,in2n,in2n-small,i… │
╰─────────────────────────────────────────────────────────────────────────╯ │     depth-nerfacto                                                     │
                                                                            │                   Nerfacto with depth supervision.                     │
                                                                            │     dnerf         Dynamic-NeRF model. (slow)                           │
                                                                            │     gaussian-splatting                                                 │
                                                                            │                   Gaussian Splatting model                             │
                                                                            │     generfacto    Generative Text to NeRF model                        │
                                                                            │     in2n          Instruct-NeRF2NeRF primary method: uses LPIPS, IP2P  │
                                                                            │                   at full precision                                    │
                                                                            │     in2n-small    Instruct-NeRF2NeRF small method, uses LPIPs, IP2P at │
                                                                            │                   half precision                                       │
                                                                            │     in2n-tiny     Instruct-NeRF2NeRF tiny method, does not use LPIPs,  │
                                                                            │                   IP2P at half precision                               │
                                                                            │     instant-ngp   Implementation of Instant-NGP. Recommended real-time │
                                                                            │                   model for unbounded scenes.                          │
                                                                            │     instant-ngp-bounded                                                │
                                                                            │                   Implementation of Instant-NGP. Recommended for       │
                                                                            │                   bounded real and synthetic scenes                    │
                                                                            │     mipnerf       High quality model for bounded scenes. (slow)        │
                                                                            │     nerfacto      Recommended real-time model tuned for real captures. │
                                                                            │                   This model will be continually updated.              │
                                                                            │     nerfacto-big                                                       │
                                                                            │     nerfacto-huge                                                      │
                                                                            │     neus          Implementation of NeuS. (slow)                       │
                                                                            │     neus-facto    Implementation of NeuS-Facto. (slow)                 │
                                                                            │     phototourism  Uses the Phototourism data.                          │
                                                                            │     semantic-nerfw                                                     │
                                                                            │                   Predicts semantic segmentations and filters out      │
                                                                            │                   transient objects.                                   │
                                                                            │     tensorf       tensorf                                              │
                                                                            │     vanilla-nerf  Original NeRF model. (slow)                          │
                                                                            │     kplanes       [External] K-Planes model tuned to static blender    │
                                                                            │                   scenes                                               │
                                                                            │     kplanes-dynamic                                                    │
                                                                            │                   [External] K-Planes model tuned to dynamic DNeRF     │
                                                                            │                   scenes                                               │
                                                                            │     lerf          [External] LERF with OpenCLIP ViT-B/16, used in      │
                                                                            │                   paper                                                │
                                                                            │     lerf-big      [External] LERF with OpenCLIP ViT-L/14               │
                                                                            │     lerf-lite     [External] LERF with smaller network and less LERF   │
                                                                            │                   samples                                              │
                                                                            │     nerfplayer-nerfacto                                                │
                                                                            │                   [External] NeRFPlayer with nerfacto backbone         │
                                                                            │     nerfplayer-ngp                                                     │
                                                                            │                   [External] NeRFPlayer with instang-ngp-bounded       │
                                                                            │                   backbone                                             │
                                                                            │     tetra-nerf    [External] Tetra-NeRF. Different sampler - faster    │
                                                                            │                   and better                                           │
                                                                            │     tetra-nerf-original                                                │
                                                                            │                   [External] Tetra-NeRF. Official implementation from  │
                                                                            │                   the paper                                            │
                                                                            │     volinga       [External] Real-time rendering model from Volinga.   │
                                                                            │                   Directly exportable to NVOL format at                │
                                                                            │                   https://volinga.ai/                                  │
                                                                            ╰────────────────────────────────────────────────────────────────────────╯
  1. Nerfstudio 安装完成后,就可以训练了。使用 bear 数据集进行训练:ns-train nerfacto --data data/bear
    在这里插入图片描述
    训练时可以复制网址 https://viewer.nerf.studio/versions/23-05-15-1/?websocket_url=ws://localhost:7007 监控实时效果 5。需要注意的是,在服务器上训练想要监视训练过程需要转发 6 7,监视窗口如下:
    在这里插入图片描述
  2. NeRF 场景训练完成后,就可以进行编辑:ns-train in2n --data data/bear --load-dir outputs/bear/nerfacto/2023-12-17_230904/nerfstudio_models --pipeline.prompt "Turn the bear into a polar bear" --pipeline.guidance-scale 7.5 --pipeline.image-guidance-scale 1.5。但 GPU 内存有限,加载全部模型会超限 8 9 10
    在这里插入图片描述
    作者也考虑到了这一点,因此提供了占用内存更小但效果更差的模型 in2n-smallin2n-tinyns-train in2n-small --data data/bear --load-dir outputs/bear/nerfacto/2023-12-17_230904/nerfstudio_models --pipeline.prompt "Turn the bear into a polar bear" --pipeline.guidance-scale 7.5 --pipeline.image-guidance-scale 1.5

实验结果

  1. 原始 NeRF 场景训练结果如下,3w 轮迭代大概需要 1h:
    在这里插入图片描述

  2. 为了呈现可视化效果,在训练完成后可以使用 ns-viewer --load-config outputs/bear/nerfacto/2023-12-17_230904/config.yml 加载监视页面 11;在监视页面 LOAD PATH 选择 final-path 即可,点击 RENDER 即可复制指令:ns-render camera-path --load-config outputs/bear/nerfacto/2023-12-17_230904/config.yml --camera-path-filename data/bear/camera_paths/2023-12-17_230904.json --output-path renders/bear/2023-12-17_230904.mp4。原始场景是用完整 NeRF 训练的,参数量太大超过显存容量,无法渲染成视频,截一张图以供参考:
    在这里插入图片描述

  3. 使用 in2n-small 模型编辑三维场景,迭代到 4k 次已经完全收敛,不必再继续训练(完整编辑会执行到 6w 步,没有必要),大概需要 2h:
    在这里插入图片描述

  4. 继续使用 ns-viewer 指令可视化三维场景,并使用 ns-render 指令可以渲染成视频。由于显存容量问题,无法渲染成视频,截一张图以供参考:
    在这里插入图片描述


  1. MAV3D:从文本描述中生成三维动态场景 ↩︎

  2. Tancik M, Weber E, Ng E, et al. Nerfstudio: A modular framework for neural radiance field development[C]//ACM SIGGRAPH 2023 Conference Proceedings. 2023: 1-12. ↩︎

  3. 一行字实现3D换脸!UC伯克利提出「Chat-NeRF」,说句话完成大片级渲染 ↩︎

  4. Fresh install error #72 ↩︎

  5. nerfstudio-project | nerfstudio # 2-training-your-first-model ↩︎

  6. nerfstudio | Using the viewer # training-on-a-remote-machine ↩︎

  7. AutoDL帮助文档 | VSCode远程开发 ↩︎

  8. RuntimeError: CUDA out of memory. Tried to allocate 12.50 MiB (GPU 0; 10.92 GiB total capacity; 8.57 MiB already allocated; 9.28 GiB free; 4.68 MiB cached) #16417 ↩︎

  9. How to avoid “CUDA out of memory” in PyTorch ↩︎

  10. How to avoid “CUDA out of memory” in PyTorch ↩︎

  11. nerfstudio-project | nerfstudio # Visualize existing run ↩︎

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

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

相关文章

b站高可用架构 笔记

b站高可用架构 关键点:主机房,多活和多活机房 参考文章:bilibili技术总监毛剑:B站高可用架构实践 1. 前端和数据中心负载均衡 前端负载均衡(动态CDN):最近节点、带宽策略、可用服务容量 数据中心负载均衡:均衡流量、识别异常节…

微软近日推出了Phi-2,这是一款小型语言模型,但其性能却十分强大

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

数据的个人视角:数据可视化的意义

当谈论到数据可视化对个人用户的实用价值时,很多人可能会想到它仅适用于企业或专业领域。然而,数据可视化对个人用户同样具有重要的实用价值。本文将从可视化从业者的角度出发,简单说说数据可视化对个人用户的实用价值。 首先,数…

【大数据存储与处理】第四次作业

一. 简答题(共8题) 1. (简答题)此题为mongodb操作题,使用在线平台或分享的虚拟机平台软件,写出命令,并把结果截图一起提交。对testdb数据库items集合进行聚合分组,然后在统计卖出的平均数量(“…

云存储在 AIOps、数字人以及训练推理场景的最佳实践

云布道师 在以 AIGC 大模型为代表的技术新浪潮中,存储作为数据基础设施,将在数据采集、训练与推理、应用部署、内容审核与协同等多个关键环节发挥重要作用,助力 AI 创新加速。据 IDC 调研显示,67% 的中国企业已经开始探索 AIGC 在…

【PIE-Engine 数据资源】全球2.5分分辨率累积降水量数据集

文章目录 一、 简介二、描述三、波段四、示例代码参考资料 一、 简介 数据名称全球2.5分分辨率累积降水量数据集时间范围1961年- 2018年空间范围全球数据来源worldclim代码片段var images pie.lmageCollection(WORLDCLIME/GLOBAL_PREC_MONTH") 二、描述 全球2.5分分率果…

Linux笔记---用户和权限管理基本命令介绍

🍎个人博客:个人主页 🏆个人专栏:Linux学习 ⛳️ 功不唐捐,玉汝于成 目录 ​编辑 前言: 命令: whoami: passwd: useradd: userdel: chm…

直升机产权共享,让飞行成为触手可及的梦想!

你曾想过能开直升机?甚至想拥有一架直升机?那种飞跃人生的心境,翱翔蓝天白云。可面临居多疑问,比如:学开直升机需要怎样的条件(年龄、学历、费用、学习内容及周期等)?到哪里学/买直升机比较安全…

【C语言】自定义类型之联合和枚举

目录 1. 前言2. 联合体2.1 联合体类型的声明2.2 联合体的特点2.3 相同成员的结构体和联合体对比2.4 联合体大小的计算2.4 判断当前机器的大小端 3. 枚举3.1 枚举类型的声明3.2 枚举类型的优点3.3 枚举类型的使用 1. 前言 在之前的博客中介绍了自定义类型中的结构体,…

利用Spark构建房价分析与推荐系统:基于58同城数据的大数据实践

利用Spark构建房价分析与推荐系统:基于58同城数据的大数据实践 基于Spark的房价数据分析预测推荐系统引言技术栈功能概述项目实现1. 数据爬取与处理2. 大数据分析与可视化3. 房价预测模型4. 协同过滤推荐系统5. Web应用开发6. 数据管理与用户管理 总结与展望 基于Sp…

常见的Web攻击手段分析总结,实战案例:通过 X-Forwarded-Host 的密码重置令牌泄漏

常见的Web攻击手段分析总结,实战案例:通过 X-Forwarded-Host 的密码重置令牌泄漏。 常见的 Web 攻击手段主要有 XSS 攻击、CSRF 攻击、SQL 注入攻击、DDos 攻击、文件漏洞攻击等。这几种攻击方式的防护手段并不复杂,却还是有很多企业遭受了该攻击,朔源到头,还是因为人为的…

【实时绘画】krita + comfyUI 实时绘画 儿童海报

1:打开comfyUI 2: 打开krita 打开 cd custom_nodes 输入命令 安装控件 git clone https://github.com/Acly/comfyui-tooling-nodes.git

Gamma分布

分布的概率密度为: 其中参数 分布的数学期望等于,方差等于。

java:用ClassLoader将文件转化为输入流

代码示例: package com.thb;import java.io.IOException; import java.io.InputStream;public class Demo4 {public static void main(String[] args) throws IOException {String resource "com/thb/test.properties";// 获得ClassLoaderClassLoader c…

大数据HCIE成神之路之数据预处理(3)——数值离散化

数值离散化 1.1 无监督连续变量的离散化 – 聚类划分1.1.1 实验任务1.1.1.1 实验背景1.1.1.2 实验目标1.1.1.3 实验数据解析 1.1.2 实验思路1.1.3 实验操作步骤1.1.4 结果验证 1.2 无监督连续变量的离散化 – 等宽划分1.2.1 实验任务1.2.1.1 实验背景1.2.1.2 实验目标1.2.1.3 实…

用户管理第2节课-idea 2023.2 后端--删除表,从零开始

一、鱼皮清空model文件夹下 二、鱼皮清空mapper文件夹下 三、删除 test 测试类下的部分代码 3.1删除SampleTest 3.2删除部分代码 UserCenterApplicationTests

自动化测试|Eolink Apikit 如何保存、使用测试用例

测试用例是测试过程中很重要的一类文档,它是测试工作的核心,是一组在测试时输入和输出的标准,是软件需求的具体对照。 测试用例可以帮助测试人员理清测试思路,确保测试覆盖率,发现需求漏洞,提高软件质量&a…

VC++ MinGW编译器将图片、字体等资源文件编译进程序和使用

Mingw使用附带的windres.exe可以将资源文件编译成.o文件, 之后与其他目标文件一起g++.exe链接生成程序 为了方便,使用mingw编译器版本的codeblock编写程序 用位图资源作为例子,新建一个空项目,在项目下新建一个资源文件,resource.rc,一个cpp文件main.cpp,一个头文件reso…

YOLOv8轻量化模型:模型轻量化创新 | MobileNetV3结合轻量级MLCA模块

💡💡💡本文解决什么问题:MobileNetV3结合轻量级的 Mixed Local Channel Attention (MLCA) 模块,实现轻量化 1.MLCA原理介绍 论文:https://www.sciencedirect.com/science/article/abs/pii/S0952197623006267 摘要:本项目介绍了一种轻量级的 Mixed Local Channel At…

IDEA版SSM入门到实战(Maven+MyBatis+Spring+SpringMVC) -SpringMVC搭建框架

第一章 初识SpringMVC 1.1 SpringMVC概述 SpringMVC是Spring子框架 SpringMVC是Spring 为**【展现层|表示层|表述层|控制层】**提供的基于 MVC 设计理念的优秀的 Web 框架,是目前最主流的MVC 框架。 SpringMVC是非侵入式:可以使用注解让普通java对象&…