3D场景编辑方法——CustomNeRF

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 摘要
  • Abstract
  • 文献阅读:3D场景编辑方法——CustomNeRF
    • 1、研究背景
    • 2、提出方法
    • 3、CustomNeRF
      • 3.1、整体框架步骤
      • 3.2、对特定问题的解决
    • 4、实验结果
    • 5、总结
  • 简单Transformer的实现
  • 总结


摘要

本周主要阅读了CVPR文章,Customize your NeRF: Adaptive Source Driven 3D Scene Editing via Local-Global lterative Training。一种将文本描述和参考图像统一为编辑提示的CustomNeRF框架,可以通过微调预训练的扩散模型将参考图像中包含的特定视觉主体V∗嵌入到混合提示中,从而满足一般化和定制化的3D场景编辑要求。除此之外,还学习了简单的Transformer代码的学习。

Abstract

This week, I mainly read the CVPR article, “Customize your NeRF: Adaptive Source Driven 3D Scene Editing via Local-Global Iterative Training.” It introduces a CustomNeRF framework that unifies text descriptions and reference images into editing cues. By fine-tuning a pre-trained diffusion model, the framework can embed specific visual subjects V∗ contained in the reference image into the mixed cues, thus satisfying the requirements of generalized and customized 3D scene editing. Additionally, I also studied the basics of Transformer code.


文献阅读:3D场景编辑方法——CustomNeRF

Title: Customize your NeRF: Adaptive Source Driven 3D Scene Editing via Local-Global lterative Training
Author:Runze He, Shaofei Huang, Xuecheng Nie, Tianrui Hui, Luogi Liu, Jiao Dai, jizhong Han, Guanbin Li, Si Liu
From:2024 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)

1、研究背景

自2020年神经辐射场(Neural Radiance Field, NeRF)提出以来,将隐式表达推上了一个新的高度。作为当前最前沿的技术之一,NeRF快速泛化应用在计算机视觉、计算机图形学、增强现实、虚拟现实等领域,并持续受到广泛关注。有赖于易于优化和连续表示的特点,NeRF在3D场景重建中有着大量应用,也带动了3D场景编辑领域的研究,如3D对象或场景的纹理重绘、风格化等。为了进一步提高3D场景编辑的灵活性,近期基于预训练扩散模型进行3D场景编辑的方法也正在被大量探索,但由于NeRF的隐式表征以及3D场景的几何特性,获得符合文本提示的编辑结果并非易事。

2、提出方法

为了让文本驱动的3D场景编辑也能够实现精准控制,论文提出了一种将文本描述和参考图像统一为编辑提示的CustomNeRF框架,可以通过微调预训练的扩散模型将参考图像中包含的特定视觉主体V∗嵌入到混合提示中,从而满足一般化和定制化的3D场景编辑要求。为了实现仅对图像前景区域进行准确编辑,该论文提出了一种局部-全局迭代编辑(LGIE)的训练方案,在图像前景区域编辑和全图像编辑之间交替进行。该方案能够准确定位图像前景区域,并在保留图像背景的同时仅对图像前景进行操作。此外,在由图像驱动的3D场景编辑中,存在因微调的扩散模型过拟合到参考图像视角,所造成的编辑结果几何不一致问题。对此,该论文设计了一种类引导的正则化,在局部编辑阶段仅使用类词来表示参考图像的主体,并利用预训练扩散模型中的一般类先验来促进几何一致的编辑。

3、CustomNeRF

3.1、整体框架步骤

  • 首先,在重建原始的3D场景时,CustomNeRF引入了额外的mask field来估计除常规颜色和密度之外的编辑概率。如下图(a) 所示,对于一组需要重建3D场景的图像,该论文先使用 Grouded SAM 从自然语言描述中提取图像编辑区域的掩码,结合原始图像集训练 foreground-aware NeRF。在NeRF重建后,编辑概率用于区分要编辑的图像区域(即图像前景区域)和不相关的图像区域(即图像背景区域),以便于在图像编辑训练过程中进行解耦合的渲染。
  • 其次,为了统一图像驱动和文本驱动的3D场景编辑任务,如下图(b)所示,该论文采用了Custom Diffusion 的方法在图像驱动条件下针对参考图进行微调,以学习特定主体的关键特征。经过训练后,特殊词 V∗ 可以作为常规的单词标记用于表达参考图像中的主体概念,从而形成一个混合提示,例如 “a photo of a V∗ dog”。通过这种方式,CustomNeRF能够对自适应类型的数据(包括图像或文本)进行一致且有效的编辑。
  • 在最终的编辑阶段,由于NeRF的隐式表达,如果使用SDS损失对整个3D区域进行优化会导致背景区域发生显著变化,而这些区域在编辑后理应与原始场景保持一致。如下图(c)所示,该论文提出了局部-全局迭代编辑(LGIE)方案进行解耦合的SDS训练,使其能够在编辑布局区域的同时保留背景内容。

在这里插入图片描述

3.2、对特定问题的解决

  1. 实现仅对图像前景区域进行准确编辑:
    提出了一种局部-全局迭代编辑(LGIE)的训练方案,在图像前景区域编辑和全图像编辑之间交替进行。该方案能够准确定位图像前景区域,并在保留图像背景的同时仅对图像前景进行操作。
  2. 编辑结果几何不一致问题:
    设计了一种类引导的正则化,在局部编辑阶段仅使用类词来表示参考图像的主体,并利用预训练扩散模型中的一般类先验来促进几何一致的编辑。

4、实验结果

下图展示了CustomNeRF与基线方法的3D场景重建结果对比,在参考图像和文本驱动的3D场景编辑任务中,CustomNeRF均取得了不错的编辑结果,不仅与编辑提示达成了良好的对齐,且背景区域和原场景保持一致。
在这里插入图片描述
下图展示了CustomNeRF在图像、文本驱动下与基线方法的量化比较,结果显示在文本对齐指标、图像对齐指标和人类评估中,CustomNeRF均超越了基线方法。
在这里插入图片描述

5、总结

本论文创新性地提出了CustomNeRF模型,同时支持文本描述或参考图像的编辑提示,并解决了两个关键性挑战——精确的仅前景编辑以及在使用单视图参考图像时多个视图的一致性。该方案包括局部-全局迭代编辑(LGIE)训练方案,使得编辑操作能够在专注于前景的同时保持背景不变;以及类引导正则化,减轻图像驱动编辑中的视图不一致,通过大量实验,也验证了CustomNeRF在各种真实场景中,能够准确编辑由文本描述和参考图像提示的3D场景。


简单Transformer的实现

# 定义多头注意力机制模块  
class MultiHeadAttention(nn.Module):  def __init__(self, d_model, num_heads):  super(MultiHeadAttention, self).__init__() # 调用父类(nn.Module)的构造函数  self.num_heads = num_heads  # 设置多头注意力的头数  self.d_model = d_model  # 输入特征的维度  # 确保d_model可以被num_heads整除  assert d_model % self.num_heads == 0  # 计算每个头的维度  self.depth = d_model // self.num_heads  # 定义线性变换层,用于计算查询、键和值的表示  self.wq = nn.Linear(d_model, d_model)  self.wk = nn.Linear(d_model, d_model)  self.wv = nn.Linear(d_model, d_model)  # 定义线性变换层,用于最后的输出变换  self.dense = nn.Linear(d_model, d_model)  # 将输入张量分割成多个头  def split_heads(self, x, batch_size):  # 重塑张量以准备分割  x = x.reshape(batch_size, -1, self.num_heads, self.depth)  # 置换张量的维度,以便后续的矩阵乘法  return x.permute(0, 2, 1, 3)  # 前向传播函数  def forward(self, v, k, q, mask):  batch_size = q.shape[0]  # 获取批次大小  # 通过线性变换层计算查询、键和值的表示  q = self.wq(q)  # 查询(batch_size, seq_len, d_model)  k = self.wk(k)  # 键(batch_size, seq_len, d_model)  v = self.wv(v)  # 值(batch_size, seq_len, d_model)  # 将查询、键和值分割成多个头  q = self.split_heads(q, batch_size)  # (batch_size, num_heads, seq_len_q, depth)  k = self.split_heads(k, batch_size)  # (batch_size, num_heads, seq_len_k, depth)  v = self.split_heads(v, batch_size)  # (batch_size, num_heads, seq_len_v, depth)  # 计算缩放点积注意力  scaled_attention, attention_weights = self.scaled_dot_product_attention(q, k, v, mask)  # 将注意力输出的维度重新排列并合并回原始维度  scaled_attention = scaled_attention.permute(0, 2, 1, 3).contiguous()  new_context_layer_shape = scaled_attention.shape[:-2] + (self.d_model,)  scaled_attention = scaled_attention.reshape(new_context_layer_shape)  # 通过线性变换层得到最终的输出  output = self.dense(scaled_attention)  return output, attention_weights  # 计算缩放点积注意力  def scaled_dot_product_attention(self, q, k, v, mask):  # 计算查询和键的点积  matmul_qk = torch.matmul(q, k.transpose(-2, -1))  # (batch_size, num_heads, seq_len_q, seq_len_k)  dk = torch.tensor(self.depth, dtype=torch.float32).to(q.device)  # 获取每个头的维度  # 缩放点积注意力分数  scaled_attention_logits = matmul_qk / dk  # 如果提供了掩码,则将其应用于注意力分数  if mask is not None:  scaled_attention_logits += (mask * -1e9)  # 将掩码位置的值设置为一个非常小的负数  # 应用softmax函数得到注意力权重  attention_weights = F.softmax(scaled_attention_logits, dim=-1)  # (batch_size, num_heads

总结

本周主要阅读了CVPR文章,Customize your NeRF: Adaptive Source Driven 3D Scene Editing via Local-Global lterative Training。一种将文本描述和参考图像统一为编辑提示的CustomNeRF框架,可以通过微调预训练的扩散模型将参考图像中包含的特定视觉主体V∗嵌入到混合提示中,从而满足一般化和定制化的3D场景编辑要求。除此之外,还学习了简单的Transformer代码的学习。下一周继续学习

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

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

相关文章

组合模式:构建树形对象结构的设计艺术

在软件开发中,组合模式是一种结构型设计模式,用于表示对象的部分-整体层次结构。通过使单个对象和组合对象具有相同的接口,这种模式允许客户端以统一的方式处理单个对象和组合对象。本文将详细介绍组合模式的定义、实现、应用场景以及优缺点。…

2024HW--->入侵排查

在蓝队的面试中,我们有可能会被问到对可能被入侵的机器,怎么样去排查,下面就来总结一下 1.Windows入侵排查 1.检查系统账号的安全 检测系统账号,其实最重要的就是一个点 "查看服务器是否存在可疑账号、新增账号。" 最…

蓝桥杯备赛:考前注意事项

考前注意事项 1、DevCpp添加c11支持 点击 工具 - 编译选项 中添加&#xff1a; -stdc112、万能头文件 #include <bits/stdc.h>万能头文件的缺陷&#xff1a;y1 变量 在<cmath>中用过了y1变量。 #include <bits/stdc.h> using namespace std;// 错误示例 …

院子里种点什么树风水好呢?

植物本身是一个丰富的生活领域&#xff0c;有着强烈的视觉暗示。其实&#xff0c;在家中养植物&#xff0c;是有许多好处的&#xff0c;它不仅能够装点庭院的环境让家更美丽&#xff0c;还能调节室内的空气质量&#xff0c;对家人的运势也有着非常大的帮助。 不过&#xff0c;并…

你的高佣副业不二之选,开始流量卡推广,一文看懂号卡推广

在这个信息化的时代&#xff0c;网络已成为人们生活中不可或缺的一部分。然而&#xff0c;在享受着便捷与高效的同时&#xff0c;我们也必须面对一个现实问题&#xff0c;也就是高昂的流量费用。为了解决这一困扰广大用户的痛点&#xff0c;我们今天带来了一个极具吸引力的机会…

005Node.js模块URL的使用

引入 URL 模块 要使用 URL 模块&#xff0c;首先需要在代码中引入它。可以使用以下代码将 URL 模块导入到你的脚本中&#xff1a; const url require(url);实例代码 const urlrequire(url); var apihttp://www.baidu.com?nameshixiaobin&age20; console.log(url.parse(…

云服务器环境web环境搭建之JDK、redis、mysql

一、Linux安装jdk&#xff0c;手动配置环境 链接: https://pan.baidu.com/s/1LRgRC5ih7B9fkc588uEQ1whttps://pan.baidu.com/s/1LRgRC5ih7B9fkc588uEQ1w 提取码: 0413 tar -xvf 压缩包名 修改配置文件/etc/profile 二、安装redis环境 方案一&#xff1a; Linux下安装配置r…

【2024年5月备考新增】《软考真题分章练习(含答案解析) - 18 管理科学-运筹学基础 (2)》

21、某种商品价格 P 变动与某指标 A 的变化具有很强的相关性,指标 A 的增长会导致 P 的降低,反之亦然。指标 A 和价格 P 的相关性系数是()。 A.0.18 B.0 C.0.98 D.-0.83 【答案】D 【解析】A 的增长会导致 B 的降低,反比关系,系数必然是一个负数。正比函数 y=kx,当 k>…

网站建设也会涉及商标侵权,需要注意些!

以前普推知产老杨碰到建站涉及知识产权侵权的&#xff0c;但是大多数是其它方面的&#xff0c;前几天看到某同行说由于给客户建设网站&#xff0c;由于网站名称涉及商标被起诉要索赔几十万。 当时同行给做网站时还看了下营业执照&#xff0c;上面的主体名称与网站名称也是一致…

乡村智慧化升级:数字乡村打造农村生活新品质

目录 一、乡村智慧化升级的内涵与意义 二、乡村智慧化升级的具体实践 1、加强农村信息基础设施建设 2、推广智慧农业应用 3、提升乡村治理智慧化水平 4、丰富智慧乡村生活内容 三、数字乡村打造农村生活新品质的成果展现 1、农业生产效率与质量双提升 2、农民收入与消…

主干网络篇 | YOLOv8更换主干网络之VanillaNet | 华为方舟实验室提出全新轻量级骨干架构

前言:Hello大家好,我是小哥谈。华为方舟实验室所提出的VanillaNet架构克服了固有复杂性的挑战,使其成为资源受限环境的理想选择。其易于理解和高度简化的架构为高效部署开辟了新的可能性。广泛的实验表明,VanillaNet提供的性能与著名的深度神经网络和vision transformers相…

【数学】主成分分析(PCA)的详细深度推导过程

本文基于Deep Learning (2017, MIT)&#xff0c;推导过程补全了所涉及的知识及书中推导过程中跳跃和省略的部分。 blog 1 概述 现代数据集&#xff0c;如网络索引、高分辨率图像、气象学、实验测量等&#xff0c;通常包含高维特征&#xff0c;高纬度的数据可能不清晰、冗余&am…

开源项目one-api的k8s容器化部署(上)-- 制作镜像及部署准备

一、背景 最近需要对开源项目one-api进行k8s容器化部署&#xff0c;主要分以下几个步骤&#xff1a; 制作docker镜像申请mysql和redis数据库docker-compose部署方式k8s部署方式 整个的篇幅比较长&#xff0c;将会分成上下两篇来阐述。 二、制作docker镜像 开源项目one-api…

Linux的学习之路:9、冯诺依曼与进程(1)

摘要 本章主要是说一下冯诺依曼体系结构和进程的一部分东西。 目录 摘要 一、冯诺依曼体系结构 二、操作系统的概念 三、设计OS的目的 四、管理 五、进程的基本概念 六、PCB 七、在Linux环境下查看进程 八、使用代码创建进程 九、思维导图 一、冯诺依曼体系结构 如…

5G Frequency Bands 频率分布

连接&#xff1a;https://www.5g-networks.net/5g-technology/5g-frequency-bands/

最新视频理解大模型之MiniGPT4-video

前言 随着大模型的爆火&#xff0c;多模态大模型也随之卷了起来&#xff0c;基本每隔一小段时间就会冒出一个新模型。 今天给大家带来一个最新发现的关于视频理解的多模态大模型。 它的名字是MiniGPT4-video&#xff0c;可以看的出来其是MiniGPT4的一个分支&#xff1b;Mini…

STM32利用软件I2C通讯读MPU6050的ID号

今天的读ID号是建立在上篇文章中有了底层的I2C通讯的6个基本时序来编写的。首先需要完成的就是MPU6050的初始化函数 然后就是编写 指定地址写函数&#xff1a; 一&#xff1a;开始 二&#xff1a;发送 从机地址读写位&#xff08;1&#xff1a;读 0&#xff1…

ESP-IDF移植lvgl 驱动 ST7789

文章目录 1 前言2 准备3 移植LVGL3.1 工程准备3.2 修改 CMakeLists.txt文件编译 LVGL3.3 编译LVGL 4 编译 ST7789 LCD驱动5 发现问题 1 前言 本教程开始学习 LVGL的&#xff0c;开始之前要把环境配置好&#xff0c;首先就需要移植 lvgl&#xff0c;使用的是 esp32 环境&#xf…

kafka学习记录

文章目录 windows单机版kafka搭建步骤主题的增删改查操作消息的生产与消费 Windows集群版kafka搭建步骤 prettyZoo 尚硅谷Kafka教程&#xff0c;2024新版kafka视频&#xff0c;零基础入门到实战 【尚硅谷】Kafka3.x教程&#xff08;从入门到调优&#xff0c;深入全面&#xff0…

plsql developer 一键格式化sql/美化sql

PL/SQL 格式化工具 以 Oracle SQL Developer 为例&#xff0c;使用一键格式化的步骤如下&#xff1a; 打开 Oracle SQL Developer。在“文件”菜单中&#xff0c;选择“打开文件”&#xff0c;然后选择你的 PL/SQL 文件。打开文件后&#xff0c;你可以通过右键菜单选择“格式…