eNERF-实时三维人体重建

浙大三维视觉团队提出ENeRF,首次实现动态场景的实时照片级渲染 (SIGGRAPH Asia 2022)

论文链接:https://arxiv.org/abs/2112.01517

论文代码:https://github.com/zju3dv/ENeRF

论文主页:https://zju3dv.github.io/enerf/

摘自: https://zhuanlan.zhihu.com/p/586595657

1.1 论文的问题描述

输入是多个相机在固定机位拍摄的某个动态场景的多目视频,论文希望能生成该动态场景的自由视点视频。该问题有许多应用,例如虚拟呈现,电影游戏制作等。

1.2 当前方法在这个问题上的局限性

为了支持自由视点视频的应用,自由视点视频的渲染效果需要足够逼真,生成制作需要足够快,生成后在用户端的渲染也需要足够快。

最近一些方法基于隐式神经表示,利用体渲染技术优化场景表示,从而制作自由视点视频。D-NeRF[Pumarola et al., CVPR 2021] 利用隐式神经表示恢复了动态场景的motions,实现了照片级别的真实渲染。但是,这一类方法很难恢复复杂场景的motions,他们训练一个模型需要从几小时到几天不等的时间。此外,渲染一张图片通常需要分钟级的时间。

基于图像的渲染技术克服了以上方法的一些问题。第一,对于动态场景,IBRNet[Wang et al., CVPR 2021]能够把每一帧图像都当作单独的场景处理,从而不需要恢复场景的motions。第二,基于图像的渲染技术可以通过预训练模型避免每一时刻的重新训练。但是,IBRNet渲染一张图片仍然需要分钟级的时间。

IBRNet[Wang et al., CVPR 2021]

1.3 我们的观察和对问题的解决

为了解决基于图像的渲染技术渲染过慢的问题,论文提出结合显式表示和隐式表示两者的优点。具体而言,我们观察到通过MVS方法预测显式表示,例如深度图像,通常是很快的。利用此显式表示去引导隐式表示的体渲染过程中的采样,能够大幅降低此前方法在空间内密集采样点(包括空地方的点和被遮挡的点)造成的计算开销,从而实现加速。

通过MVS方法快速计算新视角的深度,利用深度仅在物体表面进行采样计算辐射场

2. 论文方法

2.1 基于MVS方法预测新视角的深度图像

我们首先使用MVS方法预测新视角的深度图像。给定标定好的相机姿态,我们利用待渲染的视角空间上临近的图像建立级联代价体,使用3D卷积网络处理代价体获得深度图像以及置信区间。

建立级联代价体预测深度图像以及置信区间

2.2 在场景的表面附近预测辐射场

给定上一步预测的深度置信区间,我们在此区间内采样若干点,通过图像特征和3D卷积网络得到的3D特征体,泛化的预测这些采样点的辐射场和密度。

在深度区间内采样少量点,利用图像特征预测这些点的辐射场,使用体渲染技术得到渲染图像

2.3 使用RGB图像优化ENeRF

在得到渲染结果后,我们使用图像的均方差损失函数端到端的优化网络参数。我们实验发现仅使用RGB图像优化网络参数即可获得高质量的渲染结果。

使用RGB图像优化ENeRF

3. 实验分析

3.1 消融实验分析

我们提供了消融实验分析去研究论文方法的每一步带来的影响。

第一行展示了基线方法(与MVSNeRF[Chen et al., ICCV 2021]相似),每条光线采样128个点,这样有着好的渲染结果,但是渲染速度比较慢。直接降低采样点的数量后,会导致渲染质量显著下降。使用论文提出的采样方法(Depth-gui.)后,能提升渲染质量,同时基本保持比较快的渲染速度。

为了进一步提高渲染速度,论文使用了级联的设计(Cascade Cost Volume),通过我们仔细的设计,我们将速度从9.7FPS提升到20.31FPS。

此外我们研究了额外使用地面真值深度图像来监督网络学习,我们发现它对最后的渲染质量不会有很大的影响,这说明了论文方法使用RGB图像端到端优化的鲁棒性。

ENeRF的消融实验

3.2 与SOTA方法的对比

我们在DTU,NeRF Synthetic以及Real Forward-facing静态场景数据集以及ZJUMoCap和DynamicCap动态场景数据集上进行了和之前方法的比较,我们在渲染速度上实现了较大的提升,并且在渲染质量上取得了有竞争力的结果。

ENeRF与SOTA方法在静态场景上的可视化结果的对比
ENeRF与SOTA方法在静态场景上的量化结果对比
ENeRF与SOTA方法在动态场景上的可视化结果对比
ENeRF与SOTA方法在动态场景上的量化结果对比

条件控制扩散模型

参考:https://www.zhangzhenhu.com/aigc/Guidance.html

无论是 DDPM 还是 DDIM,这些扩散模型在生成图片时,都是输入一个随机高斯噪声数据, 然后逐步的产出一张有意的真实图片。这个过程中每一步都是一个随机过程,所以每次执行产出的图片都不一样, 生成的图像多样性非常好。 但这也是一个缺点:生成的图像不可控,无法控制这个生成过程并令其生成我们想要的图像内容

鉴于此,很多研究中在如何控制图像生成过程方面提出了很多有效的方案。 直觉的讲,我们可以在扩散过程中引入额外的信息来指导或者说控制整个扩散模型, 假设这个额外的信息为 y,它可以是一段文本、一张图片或者图像的类别标签。 引入 y 之后的模型就变成了一个以 y 为条件的条件概率分布。

自然而然地,接下来就需要探讨,引入y 之后对前向扩散过程和逆向采用过程分别有什么影响,需要做出什么调整。 首先看下对前向扩散过程的影响,先说结论:引入 y 之后,对前向扩散过程没有任何影响。 其实,从直觉上讲,前向扩散过程是对原始图片加噪声,直至变成纯噪声,这个过程显然与 y没有任何关系。 但做研究要严谨,还是需要给出数学证明的。 证明过程在论文 1 中已经给出。

条件扩散模型的前向过程与非条件扩散模型的前向过程完全一样

1、classifier guidance

OpenAI 的团队在 2021 年发表一篇论文 1 : A. Diffusion models beat gans on image synthesis ,在这篇论文中,提出一种利用图片类别标签指导图像生成的方案,称为 classifier guidance, 通过这种改进使扩散模型生成图像的质量大幅提升,并在 IS 和 FID 评分上超过了 GAN 模型, 所以你看论文的名字,简单直接。

论文的源码在: https://github.com/openai/guided-diffusion 。

实际上这篇论文做了很多改进,比如对UNET也做了改进。但这里我们只关注 guidance 部分。 原论文的推导过程比较繁杂,这里我们采用另一篇文章 2 的推导方案, 直接从 score function 的角度去理解。

虽然引入 classifier guidance 效果很明显,但缺点也很明显:

  1. 需要额外一个分类器模型,极大增加了成本,包括训练成本和采样成本。
  2. 分类器的类别毕竟是有限集,不能涵盖全部情况,对于没有覆盖的标签类别会很不友好

后来《More Control for Free! Image Synthesis with Semantic Diffusion Guidance》推广了“Classifier”的概念,使得它也可以按图、按文来生成。Classifier-Guidance方案的训练成本比较低(熟悉NLP的读者可能还会想起与之很相似的PPLM模型),但是推断成本会高些,而且控制细节上通常没那么到位。

2、Classifier-free guidance

引导函数的方法存在一些问题:1)额外的计算量比较多;2)引导函数和扩散模型分别进行训练,不利于进一步扩增模型规模,不能够通过联合训练获得更好的效果。

  • 提出了一个等价的结构替换了外部的classifier,从而可以直接使用一个扩散模型来做条件生成任务。

实际做法只是改变了模型输入的内容,有conditional(随机高斯噪声+引导信息的embedding)和unconditional两种采样输入。两种输入都会被送到同一个diffusion model,从而让其能够具有无条件和有条件生成的能力。

3、CLIP Guidance

Radford, A., Kim, J. W., Hallacy, C., Ramesh, A., Goh, G., Agarwal, S., Sastry, G., Askell, A., Mishkin, P., Clark, J., Krueger, G., and Sutskever, I. Learning transferable visual models from natural language supervision. arXiv:2103.00020, 2021

Prafulla Dhariwal and Alex Nichol. Diffusion models beat gans on image synthesis. 2021. arXiv:2105.05233.[2](1,2)

Calvin Luo. Understanding diffusion models: a unified perspective. 2022. arXiv:2208.11970.[3]

Jonathan Ho and Tim Salimans. Classifier-free diffusion guidance. 2022. arXiv:2207.12598.[4]

Alex Nichol, Prafulla Dhariwal, Aditya Ramesh, Pranav Shyam, Pamela Mishkin, Bob McGrew, Ilya Sutskever, and Mark Chen. Glide: towards photorealistic image generation and editing with text-guided diffusion models. 2022. arXiv:2112.10741.[5]

Aditya Ramesh, Prafulla Dhariwal, Alex Nichol, Casey Chu, and Mark Chen. Hierarchical text-conditional image generation with clip latents. 2022. arXiv:2204.06125.[6]

Chitwan Saharia, William Chan, Saurabh Saxena, Lala Li, Jay Whang, Emily Denton, Seyed Kamyar Seyed Ghasemipour, Burcu Karagol Ayan, S. Sara Mahdavi, Rapha Gontijo Lopes, Tim Salimans, Jonathan Ho, David J Fleet, and Mohammad Norouzi. Photorealistic text-to-image diffusion models with deep language understanding. 2022. arXiv:2205.11487.

去噪扩散隐式模型(Denoising Diffusion Implicit Models,DDIM)

Paper: https://arxiv.org/abs/2010.02502

Code: https://github.com/ermongroup/ddim

摘自:扩散模型之DDIM

在 DDPM 中,生成过程被定义为马尔可夫扩散过程的反向过程,在逆向采样过程的每一步,模型预测噪声

DDIM 的作者发现,扩散过程并不是必须遵循马尔科夫链, 在之后的基于分数的扩散模型以及基于随机微分等式的理论都有相同的结论。 基于此,DDIM 的作者重新定义了扩散过程和逆过程,并提出了一种新的采样技巧, 可以大幅减少采样的步骤,极大的提高了图像生成的效率,代价是牺牲了一定的多样性, 图像质量略微下降,但在可接受的范围内。

对于扩散模型来说,一个最大的缺点是需要设置较长的扩散步数才能得到好的效果,这导致了生成样本的速度较慢,比如扩散步数为1000的话,那么生成一个样本就要模型推理1000次。这篇文章我们将介绍另外一种扩散模型DDIMDenoising Diffusion Implicit Models),DDIM和DDPM有相同的训练目标,但是它不再限制扩散过程必须是一个马尔卡夫链,这使得DDIM可以采用更小的采样步数来加速生成过程,DDIM的另外是一个特点是从一个随机噪音生成样本的过程是一个确定的过程(中间没有加入随机噪音)。

前提条件:1.马尔可夫过程。2.微小噪声变化。

步骤一:在DDPM中我们基于初始图像状态以及最终高斯噪声状态,通过贝叶斯公式以及多元高斯分布的散度公式,可以计算出每一步骤的逆向分布。之后继续重复上述对逆向分布的求解步骤,最终实现从纯高斯噪声,恢复到原始图片的步骤。

步骤二:模型优化部分通过最小化分布的交叉熵,预测出模型逆向分布的均值和方差,将其带入步骤一中的推理过程即可。

文章中存在的一个核心问题是:由于1.每个步骤都是马尔可夫链。2.每次加特征的均值和方差都需要控制在很小的范围下。因此我们不得不每一步都进行逆向的推理和运算,导致模型整体耗时很长。本文核心针对耗时问题进行优化,一句话总结:在满足DDPM中逆向推理的条件下,找到一种用 xt  x0 表达 xt−1 且能能大幅减少计算量的推理方式。

代码实现:

DDIM和DDPM的训练过程一样,所以可以直接在DDPM的基础上加一个新的生成方法(这里主要参考了DDIM官方代码以及diffusers库),具体代码如下所示:

class GaussianDiffusion:
    def __init__(self, timesteps=1000, beta_schedule='linear'):
     pass

    # ...
        
 # use ddim to sample
    @torch.no_grad()
    def ddim_sample(
        self,
        model,
        image_size,
        batch_size=8,
        channels=3,
        ddim_timesteps=50,
        ddim_discr_method="uniform",
        ddim_eta=0.0,
        clip_denoised=True):
        # make ddim timestep sequence
        if ddim_discr_method == 'uniform':
            c = self.timesteps // ddim_timesteps
            ddim_timestep_seq = np.asarray(list(range(0, self.timesteps, c)))
        elif ddim_discr_method == 'quad':
            ddim_timestep_seq = (
                (np.linspace(0, np.sqrt(self.timesteps * .8), ddim_timesteps)) ** 2
            ).astype(int)
        else:
            raise NotImplementedError(f'There is no ddim discretization method called "{ddim_discr_method}"')
        # add one to get the final alpha values right (the ones from first scale to data during sampling)
        ddim_timestep_seq = ddim_timestep_seq + 1
        # previous sequence
        ddim_timestep_prev_seq = np.append(np.array([0]), ddim_timestep_seq[:-1])
        
        device = next(model.parameters()).device
        # start from pure noise (for each example in the batch)
        sample_img = torch.randn((batch_size, channels, image_size, image_size), device=device)
        for i in tqdm(reversed(range(0, ddim_timesteps)), desc='sampling loop time step', total=ddim_timesteps):
            t = torch.full((batch_size,), ddim_timestep_seq[i], device=device, dtype=torch.long)
            prev_t = torch.full((batch_size,), ddim_timestep_prev_seq[i], device=device, dtype=torch.long)
            
            # 1. get current and previous alpha_cumprod
            alpha_cumprod_t = self._extract(self.alphas_cumprod, t, sample_img.shape)
            alpha_cumprod_t_prev = self._extract(self.alphas_cumprod, prev_t, sample_img.shape)
    
            # 2. predict noise using model
            pred_noise = model(sample_img, t)
            
            # 3. get the predicted x_0
            pred_x0 = (sample_img - torch.sqrt((1. - alpha_cumprod_t)) * pred_noise) / torch.sqrt(alpha_cumprod_t)
            if clip_denoised:
                pred_x0 = torch.clamp(pred_x0, min=-1., max=1.)
            
            # 4. compute variance: "sigma_t(η)" -> see formula (16)
            # σ_t = sqrt((1 − α_t−1)/(1 − α_t)) * sqrt(1 − α_t/α_t−1)
            sigmas_t = ddim_eta * torch.sqrt(
                (1 - alpha_cumprod_t_prev) / (1 - alpha_cumprod_t) * (1 - alpha_cumprod_t / alpha_cumprod_t_prev))
            
            # 5. compute "direction pointing to x_t" of formula (12)
            pred_dir_xt = torch.sqrt(1 - alpha_cumprod_t_prev - sigmas_t**2) * pred_noise
            
            # 6. compute x_{t-1} of formula (12)
            x_prev = torch.sqrt(alpha_cumprod_t_prev) * pred_x0 + pred_dir_xt + sigmas_t * torch.randn_like(sample_img)

            sample_img = x_prev
            
        return sample_img.cpu().numpy()

这里以MNIST数据集为例,训练的扩散步数为500,直接采用DDPM(即推理500次)生成的样本如下所示:

同样的模型,我们采用DDIM来加速生成过程,这里DDIM的采样步数为50,其生成的样本质量和500步的DDPM相当:

完整的代码示例见https://github.com/xiaohu2015/nngen

其它:重建和插值

如果从直观上看,DDIM的加速方式非常简单,直接采样一个子序列,其实论文DDPM+也采用了类似的方式来加速。另外DDIM和其它扩散模型的一个较大的区别是其生成过程是确定性的。

Claude2:ChatGPT的替代产品知识更新到23年,代码数学显著提升,免费可用

网址:https://claude.ai/chats

Anthropic是一家专注于人工智能(AI)研究的公司,由OpenAI的前首席科学家Ilya Sutskever和Dario Amodei共同创立。Claude是Anthropic公司发布的基于transformer架构的大语言模型,被认为是最接近ChatGPT的商业产品。

Claude模型可以在Slack中免费使用,一度是我们团队使用的ChatGPT的最强替代者,对中文支持很好,意图理解也非常优秀。Claude 2的发布应该会很快会在Slack中体现。本次也推出了Claude Chat网页版,完全免费,支持直接根据PDF总结结果(最高不超过10MB的文档,单词数应该是7.5万以内都可以)。

Claude模型介绍

Claude是Anthropic公司开发的一系列大型语言模型。这些模型使用了Transformer架构,并通过无监督学习、人类反馈强化学习(RLHF)进行训练。Claude模型可以理解和生成人类语言,用于各种任务,如回答问题、写作、编辑和编程。

大多数人使用Claude的感受应该都是它与ChatGPT很像,对意图的识别和文本的生成都有很好的支持。相比较免费版本的ChatGPT(训练数据在2021年9月之前),Claude模型中包含更多的最新数据,因此就免费版本来说,Claude更好。

Claude 2 在哪些方面得到了加强?

总的来说,Claude 2 注重提高以下能力:

  • Anthropic 致力于提高 Claude 作为编码助理的能力,Claude 2 在编码基准和人类反馈评估方面性能显著提升。
  • 长上下文(long-context)模型对于处理长文档、少量 prompt 以及使用复杂指令和规范进行控制特别有用。Claude 的上下文窗口从 9K token 扩展到了 100K token(Claude 2 已经扩展到 200K token,但目前发布版本仅支持 100K token)。
  • 以前的模型经过训练可以编写相当短的回答,但许多用户要求更长的输出。Claude 2 经过训练,可以生成最多 4000 个 token 的连贯文档,相当于大约 3000 个单词。
  • Claude 通常用于将长而复杂的自然语言文档转换为结构化数据格式。Claude 2 经过训练,可以更好地生成 JSON、XML、YAML、代码和 Markdown 格式的正确输出。
  • 虽然 Claude 的训练数据仍然主要是英语,但 Claude 2 的训练数据中非英语数据比例已经明显增加。
  • Claude 2 的训练数据包括 2022 年和 2023 年初更新的数据。这意味着它知道最近发生的事件,但它仍然可能会产生混淆。

该研究进行了一系列评估实验来测试 Claude 2 的性能水平,包括对齐评估和能力评估两部分。

在模型对齐方面,该研究针对大模型的三个关键要求做了具体评估,包括:遵循指令、生成内容有用(helpfulness);生成内容无害(harmlessness);生成内容准确、真实(honesty)。

Claude 2和之前的Claude模型都是通用的大型语言模型,使用Transformer架构。Claude 2是该公司迄今为止最强大的系统,它代表了从早期的“有用且无害”的语言助手模型到现在的连续演进。Claude 2并没有从先前模型和研究中带来变革性的变化,而是代表了一种连续的演变和一系列小而有意义的改进,这些改进建立在Anthropic过去2年多的研究基础之上。

Claude 2有几个非常重要的更新值得关注。

编码能力提升很大:

Claude 2在Codex HumanEval(一项Python编码测试)上的得分从56.0%提高到71.2%。官方的演示视频中,你可以直接上传一个代码文件(js库),然后Claude就可以自动分析代码并给出这个库的使用方法。

最高支持10万tokens的输入和4000个tokens的输出:

尽管很早之前Anthropic就生成Claude最高支持10万tokens的输入,但是一直没有发布。今天的Claude2宣布正式支持10万tokens的输入,并且可以一次性输出4000个tokens,大约3000多个单词。

这应该是目前最高的上下文限制了(超过GPT-4的32K)。

更新的训练数据

这一点比ChatGPT好,尽管付费版本的GPT-4支持插件方式来访问最新的数据。但是插件尤其是网络插件很多时候会出问题。而Claude2则是已经使用了2023年初的新数据来训练模型了。所以,模型本身对2023年之前发生的重要事情与内容应该都是知道的。

尽管ClaudeAI不支持插件。但是官方说,它是支持与搜索工具连接的,包括网络和数据库等。同时,也可以直接将文档发给Claude来分析

3D Gaussian Splatting for Real-Time Radiance Field Rendering

项目主页https://repo-sam.inria.fr/fungraph/3d-gaussian-splatting/

ACM 计算机图形学领域最顶级的期刊

代码https://github.com/graphdeco-inria/gaussian-splatting

辐射场方法最近彻底改变了用多张照片或视频捕获的场景的新颖视图合成。 然而实现高视觉质量仍然需要训练和渲染成本高昂的神经网络,而最近更快的方法不可避免地会牺牲速度来换取质量。 对于无界且完整的场景(而不是孤立的物体)和 1080p 分辨率渲染,当前任何方法都无法实现实时显示速率。我们引入了三个关键要素,使我们能够在保持竞争性训练的同时实现最先进的视觉质量,重要的是允许以 1080p 分辨率进行高质量实时 (≥30fps) 新颖视图合成。 首先,从相机校准期间产生的稀疏点开始,我们用 3D 高斯表示场景,保留连续体积辐射场的所需属性以进行场景优化,同时避免在空白空间中进行不必要的计算; 其次,我们对 3D 高斯进行交错优化/密度控制,特别是优化各向异性协方差以实现场景的准确表示; 第三,我们开发了一种快速可见性感知渲染算法,该算法支持anisotropic(各向异性) splatting,既加速训练又允许实时渲染。 我们在几个已建立的数据集上展示了最先进的视觉质量和实时渲染

我们方法的输入是一组静态场景的图像,以及由 SfM 校准的相应摄像机,这会产生稀疏点云作为side effect。 从这些点出发,我们创建了一组 3D 高斯,由位置(均值)、协方差矩阵和不透明度定义,这允许非常灵活的优化机制。 这会产生 3D 场景的相当紧凑的表示,部分原因是高度各向异性的体积片可用于紧凑地表示精细结构。 辐射场的方向外观分量(颜色)通过球谐函数 (SH) 表示,遵循标准实践。 我们的算法继续通过 3D 高斯参数的一系列优化步骤来创建辐射场表示,即位置、协方差和 SH 系数与高斯密度自适应控制的操作交织在一起。 我们方法效率的关键是基于图块的光栅化器,它允许各向异性图块的混合,通过快速排序尊重可见性顺序。 快速光栅化器还包括通过跟踪累积值的快速向后传递,而对可以接收梯度的高斯数量没有限制。 我们的方法的概述如上图所示。

CVPR23 | 纯数学无限生成的3D世界,高质量的3D数据生成

谁说生成图像、视频一定要靠AI? Github: https://github.com/princeton-vl/infinigen Infinigen: Infinite Photorealistic Worlds using Procedural Generation

普林斯顿大学新出的神器,可无限生成逼真3D世界,特别强调“No AI”

不要以为生成的只是一段视频,其实背后是一套完整的3D资产,基于建模软件Blender打造。如此一来,我们就能用参数来控制细节,或者拿到相应的光流图、3D场景光流图、深度图、全景分割图等等,轻松hold住各种CV任务。再也不用担心我找不到高质量的3D数据投喂AI了。

100%基于随机数学的3D数据生成器:

尽管AI发展迅猛,但目前CV领域的许多任务仍然缺乏高质量的数据,3D尤甚。

一个解决办法是用合成数据。事实证明,在这类数据上训练的模型在零样本的真实图像上也可以表现得很好。

但问题是,现有的大多数免费3D合成数据工具基本局限于单一场景:要么是自动驾驶相关,要么就是那种位于室内环境中的人造物体。

因此,为了扩大覆盖范围,尤其是真实世界里的自然场景,作者基于Blender打造了这个基于随机数学规则无限生成各种场景的Infinigen。

Infinigen主要利用Blender的“基元”(或原语),设计了一个程序规则库,通过编码完成真实自然场景各个对象的生成。

论文主要介绍了Infinigen的程序体系,包括:

  • Node Transpiler(节点转换器),可以自动将Blender节点图转化为Python代码,方便非程序员用户使用Infinigen。

如下图所示,它生成的代码更通用,既允许我们随机化输入参数,也允许随机化图结构。

  • Generator Subsystems(生成器子系统),Infinigen的生成器是是一个个基于概率的程序,每个程序专门用于生成一个子对象(比如山脉或鱼类)。每个对象都有一组高级参数(比如山的总高度),用户可以使用Python API来调整这些参数,以实现对数据生成的细粒度控制。
  • Material Generators(材料生成器),一共有50个,每个都由一个能指定颜色和反射率的随机着色器和一个生成相应精细几何细节的局部几何生成器组成。

如下图由所示,它能保证非常真实的几何细节

Terrain Generators(地形生成器),如下图所示,该生成器可以通过反复挤压生成巨石,使用Blender的内置插件生成小石块。

并帮助Infinigen通过使用FLIP模拟动力学流体,使用Blender的粒子系统模拟天气。

  • Plants & Underwater Object Generators(植物和水下物体发生器),包括使用用随机游走等算法对树木生长进行建模,从而形成一个覆盖各种树木、灌木甚至仙人掌的3D世界。

又或者是使用差异化生长、拉普拉斯生长和反应扩散制造各种珊瑚、使用几何节点图生成树叶、花朵、海藻、海带、软体动物和水母。

还有各种子生成器(比如生物生成器)就不一一介绍了。

除了这些,Infinigen还包括一个图像渲染与Ground Truth提取程序,主要用于生成下图这些类型的图像。

其中对于前者,系统使用了Blender基于自然规律的路径跟踪渲染器Cycles来渲染图像。

作者介绍,虽然使用Blender开发了Infinigen的程序规则,不过程序生成的很大一部分是在Blender之外完成的。

另外,他们也表示,构建Infinigen是一项极大量的软件工程,光是它代码库的主分支就囊括了40485行代码

最后,Infinigen在2个Intel Xeon Silver 4114 @ 2.20GHz CPU和1个NVidia GPU上进行了基准测试,生成一对1080p图像的时间(wall time)为3.5小时

下表是它与现有合成数据集或生成器的比较。

作者表示,从中可以看出,Infinigen最大的优点就是不需要任何外部参考资源库就能程序化地生成无限的自然3D数据,别的都不行。 论文地址:
https://arxiv.org/abs/2306.09310
项目主页:
https://infinigen.org/
GitHub地址:
https://github.com/princeton-vl/infinigen

Stable-diffusion

Stable Diffusion

Stable Diffusion was made possible thanks to a collaboration with Stability AI and Runway and builds upon our previous work:

High-Resolution Image Synthesis with Latent Diffusion Models
Robin Rombach*, Andreas Blattmann*, Dominik LorenzPatrick EsserBjörn Ommer
CVPR ’22 Oral | GitHub | arXiv | Project page

参考: https://zhuanlan.zhihu.com/p/573984443

参考: https://zhuanlan.zhihu.com/p/599160988

扩散模型汇总 :https://github.com/heejkoo/Awesome-Diffusion-Models

DDPM 模型在生成图像质量上效果已经非常好,但它也有个缺点, 那就是xt 的尺寸是和图片一致的,xt的元素和图片的像素是一一对应的, 所以称 DDPM 是像素(pixel)空间的生成模型。 我们知道一张图片的尺寸是 3×H×W ,如果想生成一张高尺寸的图像, Xt的张量大小是非常大的,这就需要极大的显卡(硬件)资源,包括计算资源和显存资源。 同样的,它的训练成本也是高昂的。高昂的成本极大的限制了它在民用领用的发展。

1. 潜在扩散模型(Latent diffusion model,LDM)

2021年德国慕尼黑路德维希-马克西米利安大学计算机视觉和学习研究小组(原海德堡大学计算机视觉小组), 简称 CompVis 小组,发布了论文 High-Resolution Image Synthesis with Latent Diffusion Models,针对这个问题做了一些改进, 主要的改进点有:

  • 引入一个自编码器,先对原始对象进行压缩编码,编码后的向量再应用到扩散模型。
  • 通过在 UNET 中加入 Attention 机制,处理条件变量 y。

潜在空间

针对 DDPM 消耗资源的问题,解决方法也简单。 引入一个自编码器,比如上一章介绍的变分编码器(VAE),先对原始图像进行压缩编码,得到图像的低维表示 z0 ,然后 x0 作为 DDPM 的输入,执行 DDPM 的算法过程,DDPM 生成的结果再经过解码器还原成图像。 由于 z0 是压缩过的,其尺寸远远小于原始的图像,这样就能极大的减少 DDPM 资源的消耗。 压缩后 z0 所在的数据空间称为潜在空间(latent space), z0 可以称为潜在数据

这个自编码器(VAE)可以是提前预训练好的模型,在训练扩散模型时,自编码器的参数是冻住的, 如 图 7.1.2 所示

  • 通过使用预训练的编码器 E,我们可以将全尺寸图像编码为低维潜在空间数据(压缩数据)。
  • 通过使用预训练的解码器 D,我们可以将潜在空间数据解码回图像。

这样在 DDPM 外层增加一个 VAE 后,DDPM 的扩散过程和降噪过程都是在潜空间(Latent Space)进行, 潜空间的尺寸远远小于像素空间,极大了降低了硬件资源的需求,同时也能加速整个过程。

正向扩散过程→给潜在数据增加噪声,逆向扩散过程→从潜在数据中消除噪声。 整个 DDPM 的过程都是在潜在空间执行的, 所以这个算法被称为潜在扩散模型(Latent diffusion model,LDM)。增加一个自编码器并没有改变 DDPM 的算法过程,所以并不需要对 DDPM 算法代码做任何改动。

条件处理

在 DDPM 的过程中,可以增加额外的指导信息,使其生成我们的想要的图像, 比如文本生成图像、图像生成图像等等。

关于注意力机制的实现细节,可以直接参考论文代码, LDM模型论文的代码和预训练的模型已经在 Github 开源,地址为: https://github.com/CompVis/latent-diffusion 。

训练过程

相比于 DDPM ,条件化的 LDM 目标函数稍微变化了一点,具体变化内容可以参考:

生成(采样)过程:

图 7.1.6 是 LDM 采样过程的图形化表示, 过程并不复杂,经过 DDPM 采样生成的 Z0 需要用解码器 D 还原成图像。

 2、稳定扩散模型(Stable diffusion,SD)

LDM 本身是由 CompVis 提出并联合 Runway ML进行开发实现,后来 Stability AI 也参与进来并提供了一些资源, 联合搞了一个预训练的 LDM 模型,称为 Stable diffusion。 所以,Stable diffusion 是 LDM 的一个开源预训练模型,由于它的开源迅速火爆起来。 目前 Stable diffusion 已经占据了图像生成开源领域的主导地位。

由于 Stable diffusion 只是LDM的一个开源预训练模型,没有额外的复杂数学公式需要讨论, 这里我们就直接上代码吧。 我们不用 Stable diffusion 的官方代码库 stablediffusion ,而是 huggingface 开源库 diffusers 中的实现, 它的易读性更好一些。

diffusers 把模型的核心逻辑都封装在各种 DiffusionPipeline 中, StableDiffusionPipeline 核心代码在 diffusers.StableDiffusionPipeline 先看初始化代码,可明显看到整个 StableDiffusionPipeline 包含几个关键组件:vae,text_encoder/tokenizer,unet,scheduler。 这几个组件和 LDM 中是对应的。

  • vae: VAE 自编码器,负责前后的编解码(压缩、解压缩)工作。
  • text_encoder/tokenizer: 文本编码器,负责对文本Prompt进行编码处理。
  • unet: 噪声预测模型,也是DDPM的核心。
  • scheduler: 负责降噪过程(逆过程)的计算,也就是实现 xt−>xt−1 ,对应着 DDPM、DDIM、ODE等不同的降采样实现。
  • safety_checker: 做生成图像安全性检查的,可选,暂时可以不关注它。
  • feature_extractor: 如果输入条件中存在 img,也就是以图生图(img2img),可以用它对条件图片进行特征抽取,也就是图像编码器(img encoder),可选。

stable diffusion:潜在扩散模型

参考:

1、https://zhuanlan.zhihu.com/p/573984443

2、https://zhangzhenhu.github.io/blog/aigc

3、 https://zhuanlan.zhihu.com/p/599160988

扩散概率模型(diffusion probabilistic models)

1、 扩散概率模型(diffusion probabilistic model)

2、降噪扩散概率模型(Denoising diffusion probabilistic model,DDPM)

3、基于分数的解释(Score-based DDPM)

4、扩散模型的三种等价表示

5、改进降噪扩散概率模型(Improved Denoising Diffusion Probabilistic Models,IDDPM)

6. 参考文献

Jascha Sohl-Dickstein, Eric A. Weiss, Niru Maheswaranathan, and Surya Ganguli. Deep unsupervised learning using nonequilibrium thermodynamics. 2015. arXiv:1503.03585.2(1,2,3,4,5,6,7)

Calvin Luo. Understanding diffusion models: a unified perspective. 2022. arXiv:2208.11970.3(1,2,3,4)

Jonathan Ho, Ajay Jain, and Pieter Abbeel. Denoising diffusion probabilistic models. 2020. arXiv:2006.11239.4

Diederik P. Kingma, Tim Salimans, Ben Poole, and Jonathan Ho. Variational diffusion models. 2022. arXiv:2107.00630.5

Yang Song and Stefano Ermon. Generative modeling by estimating gradients of the data distribution. 2019. arXiv:1907.05600.

去噪扩散隐式模型(Denoising Diffusion Implicit Models,DDIM)

Jiaming Song, Chenlin Meng, and Stefano Ermon. Denoising diffusion implicit models. 2022. arXiv:2010.02502.

基于分数的生成模型

Yang Song and Stefano Ermon. Generative modeling by estimating gradients of the data distribution. 2019. arXiv:1907.05600.

Yang Song, Jascha Sohl-Dickstein, Diederik P. Kingma, Abhishek Kumar, Stefano Ermon, and Ben Poole. Score-based generative modeling through stochastic differential equations. 2021. arXiv:2011.13456.

Aapo Hyvärinen and Peter Dayan. Estimation of non-normalized statistical models by score matching. Journal of Machine Learning Research, 2005.

Yang Song and Stefano Ermon. Improved techniques for training score-based generative models. 2020. arXiv:2006.09011.

条件控制扩散模型

Prafulla Dhariwal and Alex Nichol. Diffusion models beat gans on image synthesis. 2021. arXiv:2105.05233.2(1,2)

Calvin Luo. Understanding diffusion models: a unified perspective. 2022. arXiv:2208.11970.3

Jonathan Ho and Tim Salimans. Classifier-free diffusion guidance. 2022. arXiv:2207.12598.4

Alex Nichol, Prafulla Dhariwal, Aditya Ramesh, Pranav Shyam, Pamela Mishkin, Bob McGrew, Ilya Sutskever, and Mark Chen. Glide: towards photorealistic image generation and editing with text-guided diffusion models. 2022. arXiv:2112.10741.5

Aditya Ramesh, Prafulla Dhariwal, Alex Nichol, Casey Chu, and Mark Chen. Hierarchical text-conditional image generation with clip latents. 2022. arXiv:2204.06125.6

Chitwan Saharia, William Chan, Saurabh Saxena, Lala Li, Jay Whang, Emily Denton, Seyed Kamyar Seyed Ghasemipour, Burcu Karagol Ayan, S. Sara Mahdavi, Rapha Gontijo Lopes, Tim Salimans, Jonathan Ho, David J Fleet, and Mohammad Norouzi. Photorealistic text-to-image diffusion models with deep language understanding. 2022. arXiv:2205.11487.

 稳定扩散模型(Stable diffusion model)


Robin Rombach, Andreas Blattmann, Dominik Lorenz, Patrick Esser, and Björn Ommer. High-resolution image synthesis with latent diffusion models. 2021. arXiv:2112.10752.

DDPM 模型在生成图像质量上效果已经非常好,但它也有个缺点, 那就是 尺寸是和图片一致的,元素和图片的像素是一一对应的, 所以称 DDPM 是像素(pixel)空间的生成模型。 我们知道一张图片的尺寸,如果想生成一张高尺寸的图像, 张量大小是非常大的,这就需要极大的显卡(硬件)资源,包括计算资源和显存资源。 同样的,它的训练成本也是高昂的。高昂的成本极大的限制了它在民用领用的发展

潜在扩散模型

2021年德国慕尼黑路德维希-马克西米利安大学计算机视觉和学习研究小组(原海德堡大学计算机视觉小组), 简称 CompVis 小组,发布了论文 High-Resolution Image Synthesis with Latent Diffusion Models 1,针对这个问题做了一些改进, 主要的改进点有:

  • 引入一个自编码器,先对原始对象进行压缩编码,编码后的向量再应用到扩散模型。
  • 通过在 UNET 中加入 Attention 机制,处理条件变量 

清华&MSRA |使用2D扩散模型生成3D新视点图像

本文提出使用2D扩散模型生成3D感知图像的新模型。文章首次在大规模数据集ImageNet上训练该模型,能产生高质量的图像。

3D-aware Image Generation using 2D Diffusion Models

Jianfeng Xiang, Jiaolong Yang, Binbin Huang, Xin Tong

[Tsinghua University & Microsoft Research Asia & ShanghaiTech University]

【论文链接】https://arxiv.org/pdf/2303.17905.pdf

【项目链接】https://jeffreyxiang.github.io/ivid/

【摘要】本文介绍了一种新颖的3D感知图像生成方法,利用了2D扩散模型。作者将3D感知图像生成任务形式化为多视角2D图像集生成,并进一步发展为序列无条件-有条件多视角图像生成过程。这使得能够利用2D扩散模型提高方法的生成建模能力。此外,文章结合来自单目深度估计器的深度信息,使用仅静态图像构建有条件扩散模型的训练数据。作者在大规模数据集ImageNet上训练我们的方法,这是以前的方法没有涉及的。它产生高质量的图像,明显优于以前的方法。此外,该方法展示了其能力,即使训练图像来自“野外”真实环境中不同的未对准的图像,也能生成具有大视角的实例。

AI生成3D模型:DreamFusion、Point-E、Magic3D

1、DreamFusion(谷歌)

项目主页:https://dreamfusion3d.github.io/

paper: https://arxiv.org/abs/2209.14988

code: https://github.com/ashawkey/stable-dreamfusion

该文章解决的是3D重建领域的少视角重建(Sparse-view Reconstruction)问题,结合了扩散模型和NeRF。

摘要

最近扩散模型在上亿级别的文本-图像对数据上训练在文本图像生成上取得巨大的进展,将这种方法应用于3D合成,需要大规模的有标签的3D数据集和高效的架构来去噪3D数据,而这两者目前都不存在。在这项工作中,通过使用预先训练好的二维的文本到图像的扩散模型来绕开这些限制进行文本到3D的合成。本文引入一种基于概率密度蒸馏的损失函数,可以使用2D的扩散模型作为先验用于优化参数化图像生成器。使用这个损失函数就像一个DeepDream-like的过程,(这里的DeepDream是谷歌提出,使用梯度上升的方法可视化网络每一层的特征,即用一张噪声图像输入网络,反向更新的时候不更新网络权重,而是更新初始图像的像素值,以这种训练图像的方式可视化网络)。本文梯度下降优化一个随机初始化的3D模型使得任意随机视角随机渲染的图像都达到较低的损失。生成的模型可以任意修改,不需要三维数据,也不需要修改扩散模型。

本文的方法和DreamFields的方法类似,但是用一个2D扩散模型蒸馏推导而来的损失函数取代CLIP。这个损失函数是通过概率密度蒸馏而来的,就是用KL- divergence最小化前向过程和反向的概率密度,这里的反向过程是是与训练好的2D扩散模型,因为反向过程也是一个估计score的过程,所以我理解这就是他叫 score distillation sampling的原因吧。

该工作基于的3D表示方法也是NeRF中的一种。事实上,基于NeRF的重建方法通常需要针对特定场景的大量的视图,并且对于训练集中出现频率较少的视角,其关于该视角的重建结果也会很差。而对于少视角3D重建,虽然最近已经有很多工作结合了深度网络和渲染公式来完成这样的任务,但是它们要么缺乏3D一致性,要么感知质量比较差。

在3D生成领域,DreamFusion使用文本扩散模型优化3D表示,并且取得了非常好的效果。

如上图,这是DreamFusion的架构图,右边一部分就是Diffusion Model,这里用的是一个预训练的模型,左边一部分就是NeRF,是一个目标场景的3D表示,虽然画的花里胡哨的,但是其实思路非常直白简单:训练的时候锁住Diffusion的梯度,增加视角guidance,用生成结果来优化和训练NeRF;泛化阶段只需要使用优化后的NeRF就可以了。在这里,Diffsuion的作用是根据文本生成相应视角和内容的图片,NeRF的作用是约束3D一致性。

2、Magic3D(NVIDIA)

高分辨率文本到3D内容创建:

项目主页:https://deepimagination.cc/Magic3D/

论文:https://arxiv.org/abs/2211.10440

人们只需要输入一段文字比如「一只坐在睡莲上的蓝色箭毒蛙」,AI 就能给你生成个纹理造型俱全的 3D 模型出来。Magic3D 还可以执行基于提示的 3D 网格编辑:给定低分辨率 3D 模型和基本提示,可以更改文本从而修改生成的模型内容。此外,作者还展示了保持画风,以及将 2D 图像样式应用于 3D 模型的能力。

类似于 DreamFusion 用文本生成 2D 图像,再将其优化为体积 NeRF(神经辐射场)数据的流程,Magic3D 使用两阶段生成法,用低分辨率生成的粗略模型再优化到更高的分辨率。

英伟达的方法首先使用低分辨率扩散先验获得粗糙模型,并使用稀疏 3D 哈希网格结构进行加速。用粗略表示作为初始,再进一步优化了带纹理的 3D 网格模型,该模型具有与高分辨率潜在扩散模型交互的高效可微分渲染器。

Magic3D 可以在 40 分钟内创建高质量的 3D 网格模型,比 DreamFusion 快 2 倍(后者平均需要 1.5 小时),同时还实现了更高的分辨率。

Magic3D 可以在较短的计算时间内根据文本 prompt 合成高度详细的 3D 模型。Magic3D 通过改进 DreamFusion 中的几个主要设计选择来使用文本 prompt 合成高质量的 3D 内容。

具体来说,Magic3D 是一种从粗到精的优化方法,其中使用不同分辨率下的多个扩散先验来优化 3D 表征,从而生成视图一致的几何形状以及高分辨率细节。Magic3D 使用监督方法合成 8 倍高分辨率的 3D 内容,速度也比 DreamFusion 快 2 倍。

Magic3D 的整个工作流程分为两个阶段:

  • 在第一阶段,该研究优化了类似于 DreamFusion 的粗略神经场表征,以实现具有基于哈希网格(hash grid)的内存和计算的高效场景表征。
  • 在第二阶段该方法切换到优化网格表征。这个步骤很关键,它允许该方法在高达 512 × 512 的分辨率下利用扩散先验。由于 3D 网格适用于快速图形渲染,可以实时渲染高分辨率图像,因此该研究利用基于光栅化的高效微分渲染器和相机特写来恢复几何纹理中的高频细节。

3、Point-E(OpenAI)

Point·E,可以依据文本提示直接生成 3D 点云:

项目主页:https://openai.com/research/point-e

Github: https://github.com/openai/point-e

通常意义上,文本到 3D 合成的方法分为两类:

方法 1:直接在成对的 (text, 3D) 数据或无标签的 3D 数据上训练生成模型。

此类方法虽然可以利用现有的生成模型方法,有效地生成样本,但由于缺乏大规模 3D 数据集,因此很难扩展到复杂的文本提示。

方法 2:利用预先训练好的 text-to-image 模型,优化可区分的 3D 表征。

此类方法通常能够处理复杂多样的文本提示,但每个样本的优化过程都代价高昂。此外,由于缺乏强大的 3D prior,此类方法可能会陷入 local minima(无法与有意义或连贯的 3D 目标一一对应)。

Point·E 结合了 text-to-image 模型以及 image-to-3D 模型,综合以上两种方法的优势,进一步提升了 3D 建模的效率,只需要一个 GPU、一两分钟即可完成文本到 3D 点云的转换。

Point·E 中,text-to-image 模型利用了大型语料库 (text, image pair),使其对复杂的文本提示也能处理得当;image-to-3D 模型则是在一个较小的数据集 (image, 3D pair) 上训练的。

用 Point·E 依据文本提示生成 3D 点云的过程分为三个步骤:

1、依据文本提示,生成一个合成视图 (synthetic view)

GLIDE – 基于扩散模型的文本图像生成大模型

2、依据合成视图,生成 coarse point cloud (1024 point)

3、基于低分辨率点云和合成视图,生成 fine point cloud (4096 Point)

由于数据格式和数据质量对训练结果影响巨大,Point·E 借助 Blender,将所有训练数据都转换为了通用格式。

Blender 支持多种 3D 格式,并配有优化的渲染 engine。Blender 脚本将模型统一为一个 bounding cube,配置一个标准的 lighting 设置,最后使用 Blender 内置的实时渲染 engine 导出 RGBAD 图像。

4、Zero-1-to-3: Zero-shot One Image to 3D Object

项目链接:

https://zero123.cs.columbia.edu/

源码:

https://github.com/cvlab-columb

Method

We learn a view-conditioned diffusion model that can subsequently control the viewpoint of an image containing a novel object (left). Such diffusion model can also be used to train a NeRF for 3D reconstruction (right). Please refer to our paper for more details or checkout our code for implementation.

Text to Image to Novel Views

Here are results of applying Zero-1-to-3 to images generated by Dall-E-2.

5、SceneDreamer:从2D图像中学习生成无限3D场景

来自南洋理工大学 S-Lab 的研究者提出了一个新的框架 SceneDreamer,专注于从海量无标注自然图片中学习无界三维场景的生成模型。

  • 项目主页:https://scene-dreamer.github.io/
  • 代码:https://github.com/FrozenBurning/SceneDreamer
  • 论文:https://arxiv.org/abs/2302.01330
  • 在线 Demo:https://huggingface.co/spaces/FrozenBurning/SceneDreamer

为满足元宇宙中对 3D 创意工具不断增长的需求,三维场景生成最近受到了相当多的关注。3D 内容创作的核心是逆向图形学,旨在从 2D 观测中恢复 3D 表征。考虑到创建 3D 资产所需的成本和劳动力,3D 内容创作的最终目标将是从海量的互联网二维图像中学习三维生成模型。最近关于三维感知生成模型的工作在一定程度上解决了这个问题,多数工作利用 2D 图像数据生成以物体为中心的内容(例如人脸、人体或物体)。然而,这类生成任务的观测空间处于有限域中,生成的目标占据了三维空间的有限区域。这就产生了一个问题,我们是否能从海量互联网 2D 图像中学习到无界场景的 3D 生成模型?比如能够覆盖任意大区域,且无限拓展的生动自然景观

想要达成这样的目标,我们面临着如下三个挑战:

1)无界场景缺乏高效三维表征:无边界场景常常占据了一个任意大的欧氏空间,这凸显了高效且具备表现力的底层三维表征的重要性。

2)缺乏内容对齐:已有三维生成工作使用具备对齐性质的数据集(如人脸、人体、常用物体等),这些有界场景中的目标物体通常具备类似的语义、相近的尺度位置和方向。然而,在海量的无标注二维图像中,不同物体或场景常常具备迥异的语义,且拥有多变的尺度、位置和方向。这样缺乏对齐的性质会带来生成模型训练的不稳定性。

3)缺乏相机位姿先验:三维生成模型依赖于准确相机位姿或相机位姿分布的先验来实现图像到三维表征的逆向渲染过程。但互联网自然图像来源于不同的场景和像源,让我们无法获取其相机位姿准确信息或先验。

为此我们提出了一个原则性的对抗学习框架 SceneDreamer,从海量的无标注自然图像中学习生成无界三维场景。该框架包含三个主要模块:1)高效且高表现力的鸟瞰(BEV)三维场景表征;2)学习场景通用表征的生成式神经哈希网格;3)由风格驱动的体积渲染器,并经过对抗学习的方式直接从二维图像中进行训练。

6、 Shap・E,合成 3D 条件生成式模型

我们先来看一下生成效果。与根据文字生成图像类似,Shap・E 生成的 3D 物体模型主打一个「天马行空」。

本文提出的 Shap・E 是一种在 3D 隐式函数空间上的潜扩散模型,可以渲染成 NeRF 和纹理网格。在给定相同的数据集、模型架构和训练计算的情况下,Shap・E 更优于同类显式生成模型。研究者发现纯文本条件模型可以生成多样化、有趣的物体,更彰显了生成隐式表征的潜力。

不同于 3D 生成模型上产生单一输出表示的工作,Shap-E 能够直接生成隐式函数的参数。训练 Shap-E 分为两个阶段:首先训练编码器,该编码器将 3D 资产确定性地映射到隐式函数的参数中;其次在编码器的输出上训练条件扩散模型。当在配对 3D 和文本数据的大型数据集上进行训练时, 该模型能够在几秒钟内生成复杂而多样的 3D 资产。与点云显式生成模型 Point・E 相比,Shap-E 建模了高维、多表示的输出空间,收敛更快,并且达到了相当或更好的样本质量

研究者首先训练编码器产生隐式表示,然后在编码器产生的潜在表示上训练扩散模型,主要分为以下两步完成:
1. 训练一个编码器,在给定已知 3D 资产的密集显式表示的情况下,产生隐式函数的参数。编码器产生 3D 资产的潜在表示后线性投影,以获得多层感知器(MLP)的权重;

2. 将编码器应用于数据集,然后在潜在数据集上训练扩散先验。该模型以图像或文本描述为条件。
研究者在一个大型的 3D 资产数据集上使用相应的渲染、点云和文本标题训练所有模型。

3D 编码器:

潜在扩散
生成模型采用基于 transformer 的 Point・E 扩散架构,但是使用潜在向量序列取代点云。潜在函数形状序列为 1024×1024,并作为 1024 个 token 序列输入 transformer,其中每个 token 对应于 MLP 权重矩阵的不同行。因此,该模型在计算上大致相当于基础 Point・E 模型(即具有相同的上下文长度和宽度)。在此基础上增加了输入和输出通道,能在更高维度的空间中生成样本。

7、Make-it-3D:diffusion+NeRF从单张图像生成高保真的三维物体

Title: 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/

人类具有一种与生俱来的能力,可以轻松地想象3D几何和虚构出从不同角度看物体的外观,这基于他们对世界的先验知识

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

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

论文的主要贡献总结如下:

  1. 论文提出了Make-It-3D框架,使用2D扩散模型作为3D-aware先验,从单个图像中创建高保真度的3D物体。该框架不需要多视图图像进行训练,并可应用于任何输入图像,无论是真实的还是生成的。
  2. 通过两个阶段的创建方案,Make-It-3D是首个实现普适对象高保真3D创建的工作。生成的3D模型展现出精细的几何结构和逼真的纹理,与参考图像相符。
  3. 除了图像到3D创建之外,论文的方法还能实现高质量text-to-3D创建和纹理编辑等多种应用。

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

8、ProlificDreamer:直接文本生成高质量3D内容

论文:《ProlificDreamer: High-Fidelity and Diverse Text-to-3D Generation with Variational Score Distillation》

清华大学 TSAIL 团队最新提出的文生 3D 新算法 ProlificDreamer,在无需任何 3D 数据的前提下能够生成超高质量的 3D 内容。ProlificDreamer 算法为文生 3D 领域带来重大进展。利用 ProlificDreamer,输入文本 “一个菠萝”,就能生成非常逼真且高清的 3D 菠萝:

将 Imagen 生成的照片(下图静态图)和 ProlificDreamer(基于 Stable-Diffusion)生成的 3D(下图动态图)进行对比。有网友感慨:短短一年时间,高质量的生成已经能够从 2D 图像领域扩展到 3D 领域了

在数字创作和虚拟现实等领域,从文本到三维模型(Text-to-3D)的技术具有重要的价值和广泛的应用潜力。这种技术可以从简单的文本描述中生成具体的 3D 模型,为设计师、游戏开发者和数字艺术家提供强大的工具。然而,为了根据文本生成准确的 3D 模型,传统方法需要大量的标记 3D 模型数据集。这些数据集需要包含多种不同类型和风格的 3D 模型,并且每个模型都需要与相应的文本描述相关联。创建这样的数据集需要大量的时间和人力资源,目前还没有现成的大规模数据集可供使用。由谷歌提出的 DreamFusion [1] 利用预训练的 2D 文本到图像扩散模型,首次在无需 3D 数据的情况下完成开放域的文本到 3D 的合成。但是 DreamFusion 提出的 Score Distillation Sampling (SDS) [1] 算法生成结果面临严重的过饱和、过平滑、缺少细节等问题。高质量 3D 内容生成目前仍然是非常困难的前沿问题之一。ProlificDreamer 论文提出了 Variational Score Distillation(VSD)算法,从贝叶斯建模和变分推断(variational inference)的角度重新形式化了 text-to-3D 问题。具体而言,VSD 把 3D 参数建模为一个概率分布,并优化其渲染的二维图片的分布和预训练 2D 扩散模型的分布间的距离。可以证明,VSD 算法中的 3D 参数近似了从 3D 分布中采样的过程,解决了 DreamFusion 所提 SDS 算法的过饱和、过平滑、缺少多样性等问题。此外,SDS 往往需要很大的监督权重(CFG=100),而 VSD 是首个可以用正常 CFG(=7.5)的算法。

与以往方法不同,ProlificDreamer 并不单纯优化单个 3D 物体,而是优化 3D 物体对应的概率分布。通常而言,给定一个有效的文本输入,存在一个概率分布包含了该文本描述下所有可能的 3D 物体。基于该 3D 概率分布,我们可以进一步诱导出一个 2D 概率分布。具体而言,只需要对每一个 3D 物体经过相机渲染到 2D,即可得到一个 2D 图像的概率分布。因此,优化 3D 分布可以被等效地转换为优化 2D 渲染图片的概率分布与 2D 扩散模型定义的概率分布之间的距离(由 KL 散度定义)。这是一个经典的变分推断(variational inference)任务,因此 ProlificDreamer 文中将该任务及对应的算法称为变分得分蒸馏(Variational Score Distillation,VSD)。具体而言,VSD 的算法流程图如下所示。其中,3D 物体的迭代更新需要使用两个模型:一个是预训练的 2D 扩散模型(例如 Stable-Diffusion),另一个是基于该预训练模型的 LoRA(low-rank adaptation)。该 LoRA 估计了当前 3D 物体诱导的 2D 图片分布的得分函数(score function),并进一步用于更新 3D 物体。该算法实际上在模拟 Wasserstein 梯度流,并可以保证收敛得到的分布满足与预训练的 2D 扩散模型的 KL 散度最小。

3D表示+2D Diffusion做3D任务的四个流派:

  1. 用Diffusion优化3D隐式场(其中Diffusion是预训练的),特别是NeRF相关工作,例如DreamFusion和SparseFusion;
  2. 使用3D Unet定制3D Diffusion,特别是point cloud相关工作;
  3. 把3D表示拆解并且重新拼接,变成超多通道2D图像,直接复用2D Diffusion,特别是Triplane相关工作,例如3D Neural Field Generation using Triplane Diffusion;
  4. 把2D Diffusion的Unet()换成一个renderer+encoder的结构,即间接引入3D约束,例如RenderDiffusion;
  5. 将3D约束编码成条件,用来约束2D Diffusion,例如DiffPose;

9: GET3D 英伟达:噪声—->3D物体

A Generative Model of High Quality 3D Textured Shapes Learned from Images (NeurIPS 2022 )

代码:https://github.com/nv-tlabs/GET3D

GET3D 包括两个分支:

1.几何分支:可微的输出任意拓扑的表面mesh

2.纹理分支:根据查询的表面点来产生 texture field,还可以扩展到表面的其他属性,比如材质

训练过程中,一个有效的可微栅格器将生成的带纹理 3D 模型投影到 2D 的高分辨率图片。整个过程都是可微分的,使得整个对抗训练可以从 discriminator 传递到两个分支。


10. DragGAN meets GET3D for interactive mesh generation and editing.

https://github.com/ashawkey/Drag3D

https://github.com/XingangPan/DragGAN