【三维生成】Make-it-3D:diffusion+NeRF从单张图像生成高保真三维物体(上交微软)

news2024/11/17 16:19:07

在这里插入图片描述

题目: Make-It-3D: High-Fidelity 3D Creation from A Single Image with Diffusion Prior
Paper: https://arxiv.org/pdf/2303.14184.pdf
Code: https://make-it-3d.github.io/


文章目录

  • 前言
  • 一、方法
    • 1.第一阶段 Coarse Stage: Single-view 3D Reconstruction
      • 1.参考点的像素损失 Reference view per-pixel loss
      • 2.扩散模型先验 Diffusion prior
      • 3.深度先验 Depth prior
      • 4.训练整体 Overall training
    • 2.第二阶段 Refine Stage: Neural Texture Enhancement
      • 1.Textured point cloud building 纹理点云构建
      • 2.Deferred point cloud rendering 延迟点云渲染
  • 二、实验
    • 1.实施细节
    • 2.与SOTA模型的比较
  • 总结


前言

在本文中,研究者的目标是:从一个真实或人工生成的单张图像中创建高保真度的3D内容。这将为艺术表达和创意开辟新的途径,例如为像Stable Diffusion这样的前沿2D生成模型创建的幻想图像带来3D效果。通过提供一种更易于访问和自动化的创建视觉上惊人的3D内容的方法,研究者希望吸引更广泛的受众加入到轻松的3D建模世界中来。
在这里插入图片描述

本文探讨了仅使用单张图像创建高保真度3D内容的问题。这本质上是一项具有挑战性的任务,需要估计潜在的3D几何结构,并同时产生未见过的纹理。为了解决这个问题,论文利用训练好的2D扩散模型的先验知识作为3D生成的监督Make-It-3D采用两阶段优化pipeline:第一阶段通过在前景视图中结合参考图像的约束和新视图中的扩散先验来优化神经辐射场;第二阶段将粗略模型转化为纹理点云,并利用参考图像的高质量纹理,结合扩散先验进一步提高逼真度。大量实验证明,论文的方法在结果上显著优于先前的方法,实现了预期的重建效果和令人印象深刻的视觉质量。论文是第一个尝试从单张图像为一般对象创建高质量3D内容的方法,可用于text-to-3D的创建和纹理编辑等各种应用。


提示:以下是本篇文章正文内容

一、方法

论文利用了文本-图像生成模型文本-图像对比模型的先验知识,通过两阶段(Coarse Stage和Refine Stage)的学习来还原高保真度的纹理和几何信息,所提出的两阶段三维学习框架如图所示。

在这里插入图片描述

1.第一阶段 Coarse Stage: Single-view 3D Reconstruction

作为第一阶段,论文从单一参考图像 x 重建一个粗糙的NeRF,以扩散先验约束新的视角。优化的目标是同时满足以下要求:

1.优化后的三维表示应该与输入观测x在参考视图上的渲染结果非常相似
2.新视图渲染应该显示与输入一致的语义,并尽可能可信
3.生成的3D模型应该表现出引人注目的几何形状
鉴于此,论文对参考视图周围的相机姿态进行随机采样,并对参考视图和未可见视图的渲染图像 gθ 施加以下约束:

1.参考点的像素损失 Reference view per-pixel loss

优化后的三维表示应该与输入观测 x 在参考视图上的渲染结果非常相似,因此惩罚NeRF渲染图像和输入图像之间的像素级差异:
在这里插入图片描述
其中使用前景matting mask m 来分割前景。

2.扩散模型先验 Diffusion prior

新视图渲染应该显示与输入一致的语义,为了解决这个问题,论文使用一个图像字幕模型,为参考图像生成详细的文本描述 y。有了文本提示 y,可以在Stable Diffusion的潜空间上执行LSDS (利用text conditioned扩散模型作为3D感知先验),度量图像和给定文本提示符之间的相似性:

在这里插入图片描述

虽然 LSDS 可以生成忠实于文本提示的3D模型,但它们并不能与参考图像完全对齐(参见上图中的baseline),因为文本提示不能捕获所有的对象细节。因此,论文额外添加一个扩散CLIP损失,记为LCLIP-D ,它进一步强制生成的模型来匹配参考图像:

在这里插入图片描述

具体来说,论文并没有同时优化LCLIP-DLSDS 。论文在小timesteps使用LCLIP-D ,在大timesteps切换到LSDS 。结合LSDS和LCLIP-D,论文的扩散先验确保了生成的3D模型在视觉上是吸引人的和可信的,同时也符合给定的图像(见上图)。

3.深度先验 Depth prior

此外,模型仍然存在形状模糊,从而导致诸如凹陷面、过平面几何或深度模糊等问题(见图3)。为了解决这个问题,论文使用一个现有的单目深度估计模型来估计输入图像的深度 d 。为解释d 中的不准确性和尺度不匹配,论文正则化了NeRF在参考视点上的估计深度 d(βref) 和单目深度 d 之间的negative Pearson correlation,即:

在这里插入图片描述

4.训练整体 Overall training

最终总的损失可以表述为LdepthLrefLCLIP-DLSDS 的组合。为了稳定优化过程,论文采用了渐进式训练策略,在参考视图附近从一个狭窄的视图范围开始,在训练过程中逐渐扩大范围。通过渐进式的训练,论文可以实现一个360°的物体重建,如上图所示。

在这里插入图片描述

2.第二阶段 Refine Stage: Neural Texture Enhancement

在coarse stage,我们获得了一个具有合理几何形状的3D模型,但通常显示出粗糙的纹理,可能会影响整体质量。因此,需要进一步细化以获得高保真度的3D模型。

论文的主要思路是在保留粗糙模型几何形状的同时,优先进行纹理增强。我们利用新视角和参考视角中可观察到的重叠区域,来将参考图像的高质量纹理映射到3D表示中。然后,论文着重于增强参考视角中被遮挡区域的纹理。为了更好地实现这一过程,论文 将 NeRF 导出到显式表示形式——点云(虽然NeRF 作为一种粗糙表示,可以连续处理拓扑变化,但将参考图像投影到它上是具有挑战性的)。与Marching Cube导出的噪声网格相比,点云提供了更清晰和更直接的投影

1.Textured point cloud building 纹理点云构建

构建点云的一个简单尝试是从NeRF渲染多视图的RGBD图像,并将它们提升到3D空间中的纹理点。然而,我们发现这种简单的方法由于不同视图之间的冲突导致噪声点云:在不同视图[56]下,三维点在NeRF渲染中可能具有不同的RGB颜色。因此,我们提出了一个迭代策略来从多视图观测中建立干净的点云。如下图所示,我们首先根据NeRF的渲染深度D(βref)和alpha掩模M(βref)从参考视图βref 中构建点云,

在这里插入图片描述

在这里插入图片描述

其中RrefK 为相机的外在矩阵和内在矩阵,P表示深度到点的投影。这些点在参考视图下是可见的,因此可用GT 纹理着色。对于其余视图βi的投影,必须避免引入与现有点重叠但颜色冲突的点。为此,我们:

  1. 将现有的点V(βref)投影到新的视图βi中,以产生βi视角的伪掩模 Mref(βi)
  2. 以这个掩模作为指导,我们只 lift 那些尚未观察到的点V(βi),如图5所示。
  3. 然后用NeRF渲染G(βi)中的粗糙纹理初始化这些看不见的点(也就是第一阶段产生的βi视角的结果 M(βi))。两者相减 M(βi)- Mref(βi),就得到 原始输入得到的点云中,看不见的背后点的mask。将其映射成3维点,再补充到 visible points 中。

2.Deferred point cloud rendering 延迟点云渲染

到目前为止,我们已经建立了一组纹理点云V = {V(βref)、V(β1)、…,V(βN)}。虽然 V(βref) 已经有了从参考图像投影出来的高保真纹理,但在参考视图中被遮挡的其他点仍然遭受了来自粗糙NeRF的平滑纹理,如下图所示。为了增强纹理,我们优化了其他点的纹理,并使用扩散先验约束了新视图渲染。具体来说,我们为每个点优化了一个19维的描述符F,它的前三个维度是用初始的RGB颜色初始化的

在这里插入图片描述

为了避免噪声颜色和 bleeding 伪影[2],我们采用了多尺度延迟渲染方案:给出一个新的视图β,我们对点云V进行K次栅格化,得到K个不同大小为 [W/2i,H/2i ] 的特征映射 Ii,其中i∈[0,K)。然后,这些特征映射被拼接起来,并使用一个联合优化的U-Net渲染器Rθ 渲染成一个图像 I

在这里插入图片描述
其中S是一个可微点光栅化器。纹理增强过程的目标类似于在第二节中讨论的几何创建。3.2,但是我们还包括了一个正则化术语,它惩罚优化纹理和初始纹理之间的巨大差异。

二、实验

1.实施细节

NeRF渲染。我们使用 Instant NGP 的多尺度哈希编码在粗优化阶段实现NeRF表示,较少计算代价。与Inestist-NGP类似,我们维持了一个占用网格,通过跳过空白空间来实现有效的射线采样。此外,我们在渲染图像上采用了一些阴影增强,如Lambertian 和 normal阴影。

点云渲染。对于延迟渲染,我们使用 具有gated 卷积的 2D U-Net 架构。点描述符的维度为19,其中前3个维度初始化RGB颜色,其余维度随机初始化。我们还为背景设置了一个可学习的描述符。

相机设置。我们以75%的概率随机抽样新的视图,并以25%的概率抽样预定义的参考视图。我们还在使用NeRF渲染时随机放大FOV。

分数蒸馏采样。我们在200到600之间随机抽样t,并根据时间步长将w (t)设置为均匀加权。我们还使用了无分类器的指导和指导权重ω:ˆφ(zt;y,t)=(1+ω)φ(zt;y,t)−ωφ(zt;t)
。我们的方法旨在将创建的三维模型与输入图像对齐,并使用引导权重ω = 10。

训练速度。Adam ,两阶段学习率都为0.001。粗阶段在100×100的渲染分辨率下训练5000次迭代;精细化阶段将以800×800的渲染分辨率再进行5,000次迭代。在一个特斯拉32GB V100 GPU上,训练大约2个小时。

测试基准。我们建立了一个由400张图像组成的测试基准,包括真实图像和由stable diffusion 生成的图像。基准测试中的每个图像都伴随有前景alpha掩码、估计深度映射和文本提示。对真实图像的文本提示从图像标题模型中获得。

2.与SOTA模型的比较

基线 。我们将我们的方法与五种有代表性的基线进行了比较。1) DietNeRF ,一个few-shot 的NeRF。我们用三个输入视图来训练它。2) SinNeRF ,一种单视图NeRF方法。3) DreamFusion由于它最初是基于文本提示的,我们也在参考视图中进行了修改,称为DreamFusion+,以进行公平比较。4)Point-E,基于图像的点云生成。5)3D-Photo,基于深度的图像扭曲和内部 inpaint 方法。

定性比较。我们首先将我们的方法与三维生成基线进行比较,其中DreamFusion++利用二维扩散作为3D先验,而PointE是一个三维扩散模型。如图7所示,他们生成的模型不能与参考图像对齐,并且遭受纹理平滑。相比之下,我们的方法产生了高保真的三维模型与精细的几何形状和真实的纹理。图8显示了对新视图合成的额外比较。由于SinNeRF和由于缺乏多视图监督,DietNeRF在重建复杂对象时遇到了困难。三维照片无法重建底层的几何图形,并在大视图中产生可见的伪影。相比之下,我们的方法在新颖的视角下实现了非常忠实的几何形状和视觉上令人愉悦的纹理。
在这里插入图片描述

在这里插入图片描述


总结

我们介绍了Make-It-3D,一种新的两阶段方法,从一个创建高保真三维内容的单一图像。利用扩散先验作为3D感知监督,生成的3D模型显示出 faithful 的几何形状和真实的纹理与扩散剪辑损失和纹理点云增强。Make-It-3D 适用于一般对象,赋予多用途迷人的应用。我们相信,我们的方法在将2D内容创建的成功扩展到3D方面迈出了一大步,为用户提供了一个全新的3D创建体验。

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

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

相关文章

制造企业实施MES系统受到的影响因素有哪些?

实施MES系统会遇到哪些影响因素?或者说企业实施MES系统的交付率为什么低? 我觉得关键点在于:在当前MES产品化程度普遍不高的大环境下,对项目及管理软件本身认知过于简单,且缺失有经验行业人才,是当前大部分…

机器学习复习5

机器学习复习 1 - 下面是你在课程中看到的代码,在哪种情况下你会使用二值交叉熵损失函数? model.compile(lossBinaryCrossentropy()) A. 回归任务(预测一个数字的任务) B. BinaryCrossentropy()不应该被用于任何任务 C. 有3个或更多类(类别)的分类任务 D…

力扣题库刷题笔记12--整数转罗马数字

1、题目如下: 2、个人Python代码实现: 3、题解Python代码实现: 与题解的差异主要在字典的设计以及题解第22行取余赋值的代码实现(个人是使用转换成字符串,然后根据位数确定对应字符,相对来讲笨比了许多&…

【业务功能篇36】Springboot+activiti7 工作流引擎

业务场景:前段时间总结的有一个告警工单流程,我们都是直接自己建表,状态节点,操作节点,都是自定义设计的,而到后面会有很多的工单流程,比如创建一个遗留问题电子流,指定处理人进行分…

科技资讯|2023Q1中国电动汽车销量增长 29%,充电桩市场持续增长

根据市场调查机构公布的 2023 年第 1 季度中国国内电动汽车市场报告,比亚迪继续引领竞争日益激烈的电动汽车市场。 报告称 2023 年第 1 季度中国乘用电动汽车销量同比增长 29%,其中纯电动汽车(BEV)占销售额的近 70%、插电式混合…

python问题1:安装好ubuntu之后,可以使用python3命令,但是不能使用python命令

【问题】 安装好ubuntu之后,可以使用python3命令,但是不能使用python命令。 【分析】 这是因为/usr/bin下面只有python3命令,没有python命令。 sudo ln -s /usr/bin/python3 /usr/bin/python【解决】 做一个软链接。

Harris和Shi-tomasi角点检测笔记(详细推导)

角点 一般来说,角点就是极值点,在某些属性上强度最大或者最小的孤立点、线段的终点或拐点等。其实理解角点可以按照我们的直觉来理解,以下图为例,图中用颜色标注的地方都是角点: 原图地址:理解经典角点检测…

C#编写dll, VB6.0调用

本周有个任务,实现一个数据上传接口,要求是VB6.0实现。 麻烦的是数据需要DES加密,网上没找到现成的DES VB6实现,于是加密的部分用C#实现,VB6代码调用,折腾一番,参考网上的教程,记录…

基于matlab训练分类网络以对3D点云中的对象进行分类(附源码)

一、前言 示例介绍了中概述的方法,其中点云数据被预处理为体素化编码,然后直接与简单的 3-D 卷积神经网络架构一起使用以执行对象分类。在最近的方法中,点云数据的编码可能更加复杂,并且可以与执行分类/对象检测/分割任务的网络一…

07-图5 Saving James Bond - Hard Version

题目: This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with…

golang cannot find package xxx in any of

目录结构如下 报错 cannot find package xxx in any of 1是路径没配对,把src去掉,因为GOPATH的规则好像是自动识别目录下的src路径,所以改成下面即可 2是别勾这个 否则会如下报错 含义参考 Enable Go modules integration在做什么 - 知乎 gol…

video-08-videojs黑屏问题(详解总结)

博主在开发的时候遇到这种情况,video黑屏问题,问题有两种情况,一种是视频黑屏且不可以播放,另一种是视频黑屏且自己播放,事件可以监听到 目录 一、问题类型1 视频黑屏且不可以播放 1.1 原因 1.2 解决方案思路 1.3 代…

fast admin报错:Unexpected token ‘<‘, “ (已解决)

报错信息: 在新加视图的时候的,点击编辑/添加忽然报这个错误,网上找了半天,js、视图、修修改改最后竟是一个小问题; 解决方法: 改为: 简单的说就是:btn-ajax ->btn-dialog

C# 二叉树的后序遍历

145 二叉树的后序遍历 给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 示例 2: 输入:root [] 输出:[] 示例 3: 输入…

php未定义索引数组怎么解决

在PHP中,如果使用一个未定义的数组索引,就会出现未定义索引错误。在这种情况下,需要采取措施解决这个问题。本文将为您介绍几种解决php未定义索引数组的方法。 1.使用isset()函数检查数组索引是否存在 使用函数isset()可以检查一个变量是否…

A股股民调查:58%股民表示“亏惨了”

A股上半年赚钱效应究竟如何? 东方财富网的一份调查显示,有58%的股民表示今年上半年亏惨了,另有9%的股民略有浮亏。 成交“先冷后热”、基金发行遇冷 A股的上半年已正式收官!A股三大指数上半年涨跌不一,其中沪指累涨…

希尔排序(C语言)

希尔排序 一、希尔排序的原理二、动图演示三、代码实现四、实现从小到大排序五、希尔排序的优缺点 一、希尔排序的原理 希尔排序是插入排序的一种更高效的改进版本。 1.将原始待排数据按照设定的增量gap分成多组,每组有n / gap个元素。 2.对这些分组进行插入排序&a…

Linux 学习记录43(C++篇)

Linux 学习记录43(C篇) 本文目录 Linux 学习记录43(C篇)一、友元1. 友元函数(1. 全局函数作为友元函数(2. 类中的成员函数作为友元 2. 友元类3. 友元的注意事项 二、常成员函数和常对象(const)1.常成员函数2. 常对象3. mutable 关键字 三、运算符重载1. 常见的运算符2. 运算符重…

【海思SS528 | MPP】音频例程 sample_audio.c 源码阅读笔记

目录 一、概述二、main 函数解析三、main_inner 函数解析四、sample_audio_ai_ao 函数解析4.1 Audio Codec相关配置 五 一、概述 上篇文章 【海思SS528】MPP媒体处理软件V5.0 | 音频模块 - 学习笔记 学习了海思MPP媒体处理平台的一小部分音频知识,这篇文章继续学习与…

(5)深度学习学习笔记-多层感知机

文章目录 多层感知机和激活函数代码来源 多层感知机和激活函数 通过在网络中加入一个或多个隐藏层来克服线性模型的限制,使其能处理更普遍的函数关系类型。最简单的方法是将多个全连接层堆叠在一起。每一层都输出到上面的层,直到生成最后的输出&#xf…