裸眼3D相关产品

随着AIGC等前沿技术的迅速发展,互联网正在逐步从2D转向3D,我们正在迎来一个体验升维的新时代。除了“人戴眼镜”的XR、元宇宙设备,联想也在探索“屏戴眼镜”的裸眼3D技术。这种技术使用户无需佩戴任何额外设备,就能体验到真实的3D效果。基于联想研究院的低延时双眼追踪、跨应用3D渲染引擎,以及业界首个支持4K超高清的实时2D内容转3D等技术,联想推出了全球首款27英寸4K裸眼3D显示器,并在1月份的国际消费电子展(CES)上进行了展示,持续引领下一代设备创新潮流。联想的裸眼3D显示引擎代表着当今显示技术的一个重要创新趋势,它以尖端的裸眼3D显示技术作为核心,创新性地构建了一个全面的3D系统级显示空间。这一技术的核心在于其能够无缝整合包括自主研发的实时高清2D转3D应用和跨应用渲染显示应用在内的一些列应用生态,从而使用户能够沉浸在一个逼真的3D环境中,体验3D世界中的生态内容

通过联想的这一革命性技术,用户能够体验到前所未有的3D视觉效果,无论是观看电影、玩游戏还是进行专业级的设计工作,都能获得更加立体和真实的感觉。此外,联想裸眼3D技术及解决方案能够支持丰富的3D生态资源,为用户提供广泛的3D内容选择,不仅增强了娱乐体验,也为专业应用,如教育、医疗和工业设计等领域开启了新的可能性。

值得一提的是,联想的裸眼3D显示技术及解决方案也具有很高的易用性。它能够智能识别用户的观看习惯,能够根据不同的观看角度和距离,实时调整3D效果,从而确保最佳的视觉体验。联想裸眼3D显示产品及技术解决方案的推出,不仅展示了联想在显示技术领域的创新实力,也为整个3D显示行业的发展开辟了新的道路。

相关链接:https://mp.weixin.qq.com/s/iYxyyWJfroIvbOPDg4AY1g

https://mp.weixin.qq.com/s/P52TiW0WM9rQtBe4nLMiiA

EG3D: Efficient Geometry-aware 3D Generative Adversarial Networks

https://nvlabs.github.io/eg3d/

将三维坐标对应的体素特征定义为三个正交投影平面的特征

目前的3D GAN要么过于计算密集型,要么缺少多视图一致性,该方法加强了计算效率并且提升了重建质量。使用了显式-隐式结构,不仅生成多视角一致性图片,还能生成高质量3D几何。通过解耦feature generation和neural rendering,该架构就可以用上SOTA的2D CNN生成器比如styleGAN2。

使用单视角2D图片集,无监督地生成高质量且视角一致性强的3D模型,一直以来都是一个挑战。现存的3D GANs要不计算量巨大,要不无法保证3D-consistent。前者限制了生成图片的质量,后者无法解决视角一致性的问题。这篇工作提出的新网络架构,能又快又好地生成3D geometry。

这篇工作提出了两个方法。首先,作者用显隐混合的方法,提高了时空效率,并有较高的质量。第二,提出了dual-discrimination策略,保证了多视角一致性。同时,还引入了pose-based conditioning to the generator,可以解耦pose相关的参数,保证了输出的视角一致性,同时忠实地重建数据集隐含的pose-correlated参数。

同时,这个框架能解耦特征生成和神经渲染,从而可以直接使用SOTA的2D GANs,比如StyleGAN2。

contribution

  • 引入一个基于三平面的3D GAN架构,计算效率高而且效果质量好
  • 提出一个3D GAN训练策略,通过dual discrimination和generator pose conditioning加强多视角一致性,建模出位置相关的属性分布(比如表情等)
  • 在FFHQ和AFHQ上有最佳的非条件3D感知视图合成结果,生成高质量3D几何

Tri-Plane Hybrid 3D Representation

我们需要一种高效且表达力强的3D表示方法,来训练高分辨率的GAN。

这里以单场景过拟合(SSO)来证明三平面表示法的有效性。

每个平面都是N×N×C的,其中C是通道数。

每次查询一个3D坐标x∈R3,将其投影至每个平面上,用双线性插值得到3个特征向量Fxy,Fxz,Fyz

将这3个特征向量累加后,通过一个轻量级的decoder,也就是一个小型MLP,输出RGB和Density

再用volume rendering得到最终图像

这样做的好处是,decoder规模很小,赋予了显式表示更强的表达能力,并减小了计算压力。

在新视角合成的实验上,三平面紧凑而富有表达力,以更低的计算成本,得到了更好的表现,三平面的时空成本是O(N2)的,而voxel是O(N3)的,最重要的是,用2D GANs生成planes,就能得到3D表示。对比NERF,通过显式的投影降低了计算复杂度同时没有减少表达性能。做了个对比实验,baseline是mip-nerf和voxel grid,这里的tri-plane实验中的MLP用了傅里叶feature编码。在同样地内存消耗下运算更快,在同样地结构下速度快且内存消耗少。

Pipeline

CNN Generator Backbone & Rendering

三平面的特征,是由StyleGANA生成的,同时Latent Code和相机参数会输入Mapping Network,生成一个Intermediate Latent Code

StyleGAN2被修改后,输出256×256×96256×256×96的特征图,之后被reshape成32通道的平面

接着从三平面采样,累加后,通过轻量级decoder,生成density和32通道的特征,然后由neural volume renderer生成2D特征图(而非RGB图)

Super Resolution

三平面仍不足以直接生成高分辨率图,因此添加了超分模块

使用了2个StyleGAN2的卷积层,上采样并优化32通道特征图,得到最终的RGB图像

Dual Discrimination

对StyleGAN2的discrimination做了两个修改

首先,添加Dual Discrimination以保证生成图片的视角一致性,即保证原始图片(低分辨率生成的)和超分后的图片的一致性,将低分辨率图片直接双线性上采样后,和超分图片concat形成6通道图片,真实图片也模糊后的自己拼接,也形成6通道图片,进行判别。

这样做,不仅能encourage最终输出和真实图片的分布匹配,也让神经渲染器尽可能匹配下采样的真实图片,并让超分图片和神经渲染保持一致。

其次,作者对discriminator输入了相机内外参,作为一个conditioning label,从而让generator学到正确的3D先验。

Modeling Pose-Correlated Attributes

真实世界数据集如FFHQ,相机姿态与其他参数(如表情)有关联

比如,相机角度与人是否微笑是有关系的,这会导致生成结果视角不一致

因此,为了更好的生成质量,需要将这些参数与相机姿态解耦

这篇工作使用了Generator Pose Conditioning解耦pose和其他参数

Mapping Network不仅接受Latent Code,还接受相机参数做为输入

给予backbone相机姿态作为先验,从而让视角可以和生成产生联系

也就是说,generator可以建模数据集中隐式的pose dependent biases,更忠实地反映数据集特征

为了避免在渲染时因相机移动产生视角不一致,在渲染时保持generator输入的相机参数不变

条件控制扩散模型

参考: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上训练我们的方法,这是以前的方法没有涉及的。它产生高质量的图像,明显优于以前的方法。此外,该方法展示了其能力,即使训练图像来自“野外”真实环境中不同的未对准的图像,也能生成具有大视角的实例。