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

Diffusion Models从入门到放弃:必读的10篇经典论文

前言:diffusion models是现在人工智能领域最火的方向之一,并引爆了AIGC领域,一大批创业公司随之诞生。笔者2021年6月开始研究diffusion,见证了扩散模型从无人问津到炙手可热的过程,这些篇经典论文专栏里都详细介绍过原理、复现过代码。这篇博客以时间发展顺序,串讲一下从入门到精(放)通(弃)的10篇必读的经典论文。

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

1、DDPM奠基之作:《Denoising Diffusion Probabilistic Models》

推荐理由:本文是DDPM的奠基之作,是本领域最经典的论文之一。其实扩散模型并不是一个新的概念,这篇论文第一个给出了严谨的数学推导,可以复现的代码,完善了整个推理过程。后面diffusion models相关的论文基本都继承了前向加噪-反向降噪-训练这样的体系。所以强烈推荐初学者精读这篇论文!

博客地址Diffusion Models扩散模型与深度学习(数学原理和代码解读)

代码地址GitHub – lucidrains/denoising-diffusion-pytorch: Implementation of Denoising Diffusion Probabilistic Model in Pytorch

2、从DDPM到DDIM:《Denoising Diffusion Implicit Models》

推荐理由:作者使用简单的重参数化和混合学习目标来学习反向过程方差,该目标将VLB与DDPM的简化目标相结合。在混合目标下,所提出模型获得的对数似然比通过直接优化对数似然获得的对数似然更好,并发现后一个目标在训练期间具有更多的梯度噪声。最关键的是,原先的DDPM需要长达1000steps的推理步骤,而DDIM改善了反向扩散过程中的噪声水平,改变了xt递推公式,在更少的推理步骤(如100步)上取得了更好的结果。这项成果堪称革命性的,后面的大部分diffusion models论文(特别是运算量高的)都采用这一改进技术。

博客地址深入解读:从DDIM到Improved Denoising Diffusion Probabilistic Models

代码地址GitHub – ermongroup/ddim: Denoising Diffusion Implicit Models

3、第一波高潮!首次击败GANs:《Diffusion Models Beat GANs on Image Synthesis》

推荐理由:其实前面diffusion models也只是在生成领域小火了一把,并没有引起太多人的关注。主要原因有两点:一是扩散模型并没有太多数学理论上的创新;二是在生成指标上不如GANs。而这篇论文的出现把diffusion models的推向了第一波高潮!这篇论文有三个需要重点学习的地方:

一是在Unet基础上有了很多改进的小trick(不亏是OpenAI的作品),改进之后的Unet更能适配噪声,因此指标上也进步了很多:

如果看完这部分不妨反问自己这几个问题:模型结构是如何共享信息参数的?self-attention的作用是什么?预测噪声数据和预测真实数据有没有本质区别?为什么要分层设计?为什么一定要使用Unet结构?如果不清楚,欢迎看看我之前的博客:《为什么Diffusion Models钟爱U-net结构?》

二是classifier-guidance的引入,这段推导用了二阶泰勒展开,非常精彩!之后的很多论文将类别引导扩展到一般的条件引导上,包括后来大火的GLIDE。这在latent diffusion models没出来之前,是一项非常成功、被广泛使用的条件引导技术!

三是规范化的代码guided-diffusion。OpenAI的工匠精神,这份代码打磨得非常好,堪称工业级!后面很多顶会论文都是在这份代码的基础上改进的。如果想要学习diffusion models的代码,推荐以这份代码为基础。

博客地址击败GANs的新生成式模型:score-based model(diffusion model)原理、网络结构、应用、代码、实验、展望

代码地址GitHub – openai/guided-diffusion

4、条件分类器技术进一步发展:《Classifier-Free Diffusion Guidance》

推荐理由:我推荐的其他论文基本上都发表机器学习/计算机视觉顶会,而这篇文章虽然只发表于cvpr workshop,但是作者提出了一个新的分数估计函数:有条件分数函数和无条件分数函数的线性组合,平衡了有条件的分数函数和无条件分数函数。当然在论文中作者先论述了《Diffusion Models Beat GANs on Image Synthesis》中提出的分类器技术的问题:额外训练一个分类器,并且往往会造成多样性下降的特点。当然这个问题也是必然出现的,因为分类器就是在生成质量和生成多样性中间做平衡。之所以推荐这篇论文,因为这项技术被后来的论文广泛应用,简单有用,值得学习!

博客地址无分类器指导的Classifier-free Diffusion Models技术

代码地址https://github.com/lucidrains/classifier-free-guidance-pytorch

5、Image-to-Image经典之作《Palette: Image-to-Image Diffusion Models》

推荐理由:我不确定Palette是不是第一个实现diffusion models 图像翻译工作的,但是一定是第一个火起来让很多圈内人关注的!Palette从pix2pix GANs中获取灵感,能够实现图像着色、图像修复、图像剪裁恢复、图像解压缩(超分)等等任务,最大的意义在于让更多人看到了diffusion models在图像翻译领域的潜力。从cvpr 2021开始,海量的相关论文被发表。

博客地址用Diffusion Models实现image-to-image转换

代码地址https://github.com/Janspiry/Palette-Image-to-Image-Diffusion-Models

6、畅游多模态领域:GLIDE

推荐理由:经典的三篇text-to-image的论文:DALLE 2、Imagen、GLIDE。在上半年各领风骚,让text-to-image方向成为diffusion中最受关注的领域。这三篇论文最先推荐的GLIDE的原因是它最先放出完成代码和预训练模型。预训练模型很重要!因为text-to-image领域都是大模型,不放出模型的话,我们这些非大组(指能分到40块显卡以上的)研究者根本无法在这基础上自己做迁移学习。GLIDE的核心跨模态引导公式来自《Diffusion Models Beat GANs on Image Synthesis》中的分类器引导,不同的是,这篇文章并没有给出严谨的证明过程。但是实验结果表明确实取得了很好的效果,后面的研究者从中获得启示,把其他的多模态信息按照这种方法注入,也取得了非常惊艳的结果。

博客地址2021年度最火Diffusion Models:用于图像编辑和text引导图像生成的GLIDE

代码地址https://github.com/openai/glide-text2im/tree/main/glide_text2im

7、stable diffusion的原型:《High-Resolution Image Synthesis with Latent Diffusion Models》

推荐理由:全体起立!终于讲到stable diffusion models了!这篇论文发表在cvpr 2022上,当时就受到了很多研究者们的关注,但是谁也没想到,一年后以latent diffusion models会孵化出stable diffusion这样彻底火出圈的作品。这篇论文有两个关键点值得关注:一是用encoder-decoder放缩到latent域上操作,又回到了生成领域最经典的结构,在latent域(即z)上操作,这种方法在vae上也算常用。二是cross-attention的结构,这种方法早在2020年的论文handwriting diffusion上就用过,但是当时并没有引起广泛的注意。在这之后cross-attention成为多模态的一种常用方法,成为新的常用条件扩散模型。

博客地址详细解读Latent Diffusion Models:原理和代码

代码地址https://github.com/CompVis/latent-diffusion

8、高调进军视频领域:《Video Diffusion Models》

推荐理由:有位“诗人”曾经说过:站在风口上X都能飞。这篇论文出现的时候,diffusion models已经在图像、多模态、3D等领域大杀四方了。video生成很显然是下一个风口,这时候谷歌研究院的作品video diffusion models横空出世。这篇论文需要注意两个点:一是怎样引入时序信息的方法,很值得借鉴。二是梯度引导法是首次被提出,当时我写的博客中说如果好用肯定会很快流行。事实证明,谷歌出品必属精品,果然流行的一番!

Video Diffusion Models:基于扩散模型的视频生成_沉迷单车的追风少年的博客-CSDN博客

博客地址Video Diffusion Models:基于扩散模型的视频生成

代码地址https://github.com/lucidrains/video-diffusion-pytorch

9、了不起的attention:《Prompt-to-Prompt Image Editing with Cross Attention Control》

推荐理由:在今年的ICLR中,diffusion models超过图神经网络,成为投稿最多的主题。这几千篇投稿中,这篇论文取得了审稿人的一致accept好评。这篇文章沿用了latent diffusion models提出了cross-attention的结构,但是做了不少改进,特别需要注意的是可解释性问题,作者将QKV可视化,替换attention map达到控制的目的。这种控制技术相比于LDM更细腻,更有说服力。

博客地址【ICLR 2023】Diffusion Models扩散模型和Prompt Learning提示学习:prompt-to-prompt

代码地址https://github.com/bloc97/CrossAttentionControl

10、Unet已死,transformer当立!《Scalable Diffusion Models with Transformers》

推荐理由:Unet本来是发源于医疗图像分割的backbone,后来pix2pix GANs开始引入到生成领域,diffusion models的研究者们一直想替换掉这个backbone,用更原生的方法。在语音领域、时间序列领域,早在2020年就有论文引入transformer作为backbone。不过笔者尝试将其引入到二维图像生成上,并没有取得好的效果。最近的一项研究成果成功用改进版本的transformer替换掉Unet,并取得了更好的效果。笔者最近复现了代码,大为震撼!我觉得这项研究生过会很快流行,强烈推荐!

博客地址:尚未写完,敬请期待哈哈

代码地址https://github.com/facebookrese

Learning Stereo from Single Images

论文:https://github.com/nianticlabs/stereo-from-mono/

[ECCV 2020] Learning stereo from single images

导读:在进行立体匹配的过程中成对且带标签的训练数据是很难去获取的,对此现有的很多方法都是在虚拟的合成数据(如SceneFlow、FlayingThings3D等数据集)上训练完成的,自然其在实际多样化的场景中泛化迁移能力是很弱的。对此文章通过使用MiDas对任意的输入图像进行深度估计,并将深度图转换到视差图,之后按照视差图对源图像进行变换得到另外一个视图,其中会对生成的另外一个视图进行修复和补偿优化从而构建一个双目立体图像对。自此,双目立体图像对构造完成,接下来便是使用一个双目立体匹配网络在这些数据上进行训练。正是由于训练数据的多样化文章提出的算法相比合成数据上训练得到的匹配网络更加鲁棒。

文章的算法在做立体匹配的时候并没有采用合成数据,而是在多样化真实数据基础上通过策略得到合成的图像对,从而极大增加了网络的泛化能力,下面图中展示的就是两种训练策略的对比:

文章中使用到的风格多样化数据集称之为MfS(Mono for Stereo’ dataset),其中包含的数据集有:COCO 2017 ,Mapillary Vistas,ADE20K ,Depth in the Wild,DIODE 。经过整理之后其中包含的数据总量为:597727。

方法设计

文章算法的整体pipeline见下图所示:

数据生成优化策略

depth sharpening:文章使用的是一个单目深度估计网络进行深度预标注,自然其中的几何约束性比较弱,因而按照深度估计结果对原图向进行warp之后存在一些孤立的像素点(flying points),也就是下图中中间部分的效果:

对此,文章为了解决该问题首先通过Sobel梯度算子去检测那些梯度响应大于3的区域(也就是文章说的flying points),之后将这些点的深度之设置为最近非flying points区域的值。从而实现depth sharpening,在图3中也比较了有无该策略对于做后效果的影响。这部分实现的代码可以参考:

datasets/warp_dataset.py#L112

if not self.disable_sharpening:
# now find disparity gradients and set to nearest – stop flying pixels
edges = sobel(disparity) > 3 # 选择梯度大的区域,大概率为flying points
disparity[edges] = 0 # 将其设置为0
mask = disparity > 0 # 取出需要插值的位置

try:  # 对视差图不为0的区域进行插值,重点关注的就是flying points
    disparity = griddata(np.stack([self.ys[mask].ravel(), self.xs[mask].ravel()], 1),
                         disparity[mask].ravel(), np.stack([self.ys.ravel(),
                                                            self.xs.ravel()], 1),
                         method='nearest').reshape(self.feed_height, self.process_width)
except (ValueError, IndexError) as e:
    pass  # just return disparity

occlusion和collision区域处理:

对于这一部分的代码可以参考下面的实现过程:

# datasets/warp_dataset.py#L227
def project_image(self, image, disp_map, background_image):

    image = np.array(image)
    background_image = np.array(background_image)

    # set up for projection
    warped_image = np.zeros_like(image).astype(float)
    warped_image = np.stack([warped_image] * 2, 0)
    pix_locations = self.xs - disp_map  # 根据视差计算新的坐标

    # find where occlusions are, and remove from disparity map
    mask = self.get_occlusion_mask(pix_locations)  # 根据可见性准则获取occlusion mask(对应部分为0)
    masked_pix_locations = pix_locations * mask - self.process_width * (1 - mask)

    # do projection - linear interpolate up to 1 pixel away
    weights = np.ones((2, self.feed_height, self.process_width)) * 10000

    for col in range(self.process_width - 1, -1, -1):  # 按照有效像素进行插值得到右视图
        loc = masked_pix_locations[:, col]
        loc_up = np.ceil(loc).astype(int)
        loc_down = np.floor(loc).astype(int)
        weight_up = loc_up - loc
        weight_down = 1 - weight_up

        mask = loc_up >= 0
        mask[mask] = \
            weights[0, np.arange(self.feed_height)[mask], loc_up[mask]] > weight_up[mask]
        weights[0, np.arange(self.feed_height)[mask], loc_up[mask]] = \
            weight_up[mask]
        warped_image[0, np.arange(self.feed_height)[mask], loc_up[mask]] = \
            image[:, col][mask] / 255.

        mask = loc_down >= 0
        mask[mask] = \
            weights[1, np.arange(self.feed_height)[mask], loc_down[mask]] > weight_down[mask]
        weights[1, np.arange(self.feed_height)[mask], loc_down[mask]] = weight_down[mask]
        warped_image[1, np.arange(self.feed_height)[mask], loc_down[mask]] = \
            image[:, col][mask] / 255.

    weights /= weights.sum(0, keepdims=True) + 1e-7  # normalise
    weights = np.expand_dims(weights, -1)
    warped_image = warped_image[0] * weights[1] + warped_image[1] * weights[0]  # 按照插值权重进行融合
    warped_image *= 255.

    # now fill occluded regions with random background
    if not self.disable_background:  # occlusion部分补充
        warped_image[warped_image.max(-1) == 0] = background_image[warped_image.max(-1) == 0]

    warped_image = warped_image.astype(np.uint8)

    return warped_image

实验结果

文章提出的两种数据优化策略,其有效性对比见下表所示:

立体匹配数据生成方法在最后性能上的比较:

文章的方法与基准的对比:

「理解和生成」的大一统 BILP

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

代码连接:https://github.com/salesforce/BLIP

Demo地址:https://huggingface.co/spaces/akhaliq/BLIP

「理解和生成」的大一统!华人一作提出BLIP模型,「视觉+语言」任务多项SOTA

视觉语言预训练(Vision-language pre-training)的相关研究在各种多模态的下游任务中已经证明了其强大的实力。

但目前的模型和方法还存在两个主要的缺陷:

1、从模型角度来看,大多数方法要么采用基于编码器的模型,要么采用编码器-解码器模型。然而,基于编码器的模型不太容易直接迁移到文本生成的任务中,如图像标题(image captioning)等;而编码器-解码器模型还没有被成功用于图像-文本检索任务。

2、从数据角度来看,大多数sota的方法,如CLIP, ALBEF, SimVLM 都是对从网上收集的图像-文本对(image-text pair)进行预训练。尽管可以通过扩大数据集的规模来获得性能上的提高,但研究结果显示,有噪声的网络文本对于视觉语言学习来说只能得到次优的结果。

为此,研究人员提出了一个新的模型BLIP(Bootstrapping Language-Image Pre-training),可以统一视觉语言理解和生成。

BLIP是一个全新的VLP框架,与现有的方法相比,能够覆盖范围更广的下游任务。

BLIP分别从模型和数据的角度引入了两点创新:

1、编码器-解码器的多模态混合(MED, Multimodal mixture of Encoder-Decoder),一个全新的模型架构,能够有效地进行多任务预训练和灵活的迁移学习。一个MED可以作为一个单模态编码器(unimodal encoder),或是基于图像的文本编码器(image-grounded text encoder),或是基于图像的文本解码器(image-grounded text decoder)。

该模型与三个视觉语言目标共同进行预训练,即图像-文本对比学习(image-text contrastive learning)、图像-文本匹配(image-text matching)和图像-条件语言建模(image-conditioned language modeling)。

2、标题和过滤(Captioning and Filtering,CapFilt),一种新的数据集boostrapping方法,可以用于从噪声图像-文本对中学习。将预训练的MED微调为两个模块:一个是给定网络图像产生合成标题的captioner,另一个是去除原始网络文本和合成文本中的噪声标题的Filter。

实验结果表明,通过captioner和filter的协作,BLIP模型能够在各种下游任务上取得了稳定的性能改进,包括图像-文本检索、图像标题、视觉问答、视觉推理和视觉对话。研究人员还发现,更多样化的caption会产生更大的性能收益。

将模型直接迁移到两个视觉语言任务时(文本-视频检索和videoQA),研究人员还实现了sota的zero-shot性能。

模型架构

BLIP采用Visual Transformer作为图像编码器,将输入的图像划分为patch,然后将patches编码为一个embedding序列,并用一个额外的[CLS]标记来代表全局图像特征。与使用预训练的目标检测器进行视觉特征提取相比,使用ViT更便于计算,并且已经逐渐成为主流。

为了预训练一个具有理解和生成能力的统一模型,研究人员提出了多模态混合编码器-解码器(MED),能够用于多任务。

1、单模态编码器(Unimodal encoder),对图像和文本分别进行编码。文本编码器(text encoder)与BERT相同,在文本输入的开头附加一个[CLS]标记,以总结句子。

2、以图像为基础的文本编码器(Image-grounded text encoder),通过在自注意力(SA)层和前馈网络(FFN)之间为文本编码器的每个Transformer块插入一个额外的交叉注意力(CA)层来注入视觉信息。一个特定任务的[Encode]标记被附加到文本上,[Encode]的输出embedding被用作图像-文本对的多模态表示。

3、以图像为基础的文本解码器(Image-grounded text decoder),用因果自注意力层(causal self-attention layer)替代编码器中的双向自注意力层。用[Decode]标记来表示一个序列的开始和结束。

三大损失函数

在预训练期间,BLIP联合优化三个目标,其中两个是基于理解的目标,一个是基于生成的目标。

每个图像-文本对只需要在计算量比较大的ViT中进行一次前向传递,并在text Transformer系统中进行三次前向传递。

1、图像-文本对比损失(Image-Text Contrastive Loss, ITC)激活了单模态编码器,目的是通过促进正向的图像-文本对与负向的图像-文本对有相似的表示,来对齐ViT和text Transformer的特征空间。在以前的研究中已被证明是改善视觉和语言理解的一个有效目标。研究人员遵循前人的ITC损失,引入了一个动量编码器来产生特征,并从动量编码器中创建软标签作为训练目标,以说明negative pairs中的潜在positive。

2、图像-文本匹配损失(Image-Text Matching Loss, ITM)激活了以图像为基础的文本编码器。它的目的是学习图像-文本的多模态表示以捕捉视觉和语言之间的细粒度对齐。ITM是一个二元分类任务,模型根据多模态特征使用一个ITM头(一个线性层)来预测一个图像-文本对是positive(匹配的)还是negative(不匹配的)。

为了找到信息量更大的否定词,研究人员采用了硬否定词挖掘策略,在一个batch中具有更高的对比相似度的否定词对更有可能被选来计算损失。

3、语言建模损失(Language Modeling Loss, LM)激活了以图像为基础的文本解码器,其目的是生成给定图像的文本描述。它优化了交叉熵损失,训练模型以自回归的方式最大化文本的概率。

在计算损失时,研究人员采用0.1的标签平滑度(label smoothing)。与其他用于VLP的MLM损失相比,LM损失使模型具有泛化能力,能够将视觉信息转换为连贯的标题。

CapFlit模块

研究人员使用标题和过滤(Captioning and Filtering, CapFilt)来提高文本语料库的质量。

其中包含了两个模块:一个是给定网络图像生成字幕的Captioner,另一个是去除噪声图像-文本对的Filter。

Captioner和Filter都是从同一个预训练的MED模型初始化的,并在COCO数据集上单独进行微调。微调是一个轻量级的程序。

具体来说,Captioner是一个以图像为基础的文本解码器。它以LM为目标进行微调,对给定的图像进行文本解码。给定网络图片Iw,Captioner生成合成captions,即每张图片一个caption。

Filter是一个以图像为基础的文本编码器。它根据ITC和ITM的目标进行微调,以学习文本是否与图像匹配。该Filter去除原始网络文本和合成文本中的噪音文本,如果ITM头预测一个文本与图像不匹配,则该文本被认为是噪音。

最后,研究人员将过滤后的图像-文本对与人工标注的文本对结合起来,形成一个新的数据集用它来预训练一个新模型。

实验结果

研究人员对比了在不同数据集上预训练的模型以证明CapFilt在下行任务中的有效性,包括图像-文本检索和图像标题任务,并进行了微调和zero-shot测试。

可以看到,CapFilt可以通过更大的数据集和更大vision backbone来进一步提高性能,也证实了它在数据规模和模型大小方面的可扩展性。

在论文中研究人员还进行了更细致的分析,在广泛的视觉语言任务上取得了最先进的结果,如图像文本检索(平均召回率+2.7%@1)、图像标题(CIDEr+2.8%)和VQA(VQA score+1.6%)。

Anything-3D

论文地址:https://arxiv.org/pdf/2304.10261.pdf

github: https://github.com/Anything-of-anything/Anything-3D

2D图像的3D重建一直是CV领域的重头戏。

层出不同的模型被开发出来试图攻克这个难题。

今天,新加坡国立大学的学者共同发表了一篇论文,开发了一个全新的框架Anything-3D来解决这个老大难问题。

借助Meta「分割一切」模型,Anything-3D直接让分割后的任意物体活起来了。

Here we present a project where we combine Segment Anything with a series of 3D models to create a very interesting demo. This is currently a small project, but we plan to continue improving it and creating more exciting demos.

Contributions are highly Welcomed!🤝🙌

Anything-3D! 在现实世界中,各种物体和各类环境既多样又复杂。所以,在不受限制的情况下,从单一RGB图像中进行三维重建面临诸多困难。在此,新加坡国立大学研究人员结合了一系列视觉语言模型和SAM(Segment-Anything)物体分割模型,生成了一个功能多、可靠性强的系统——Anything-3D。目的就是在单视角的条件下,完成3D重建的任务。

他们采用BLIP模型生成纹理描述,用SAM模型提取图像中的物体,然后利用文本→图像的扩散模型Stable Diffusion将物体放置到Nerf(神经辐射场)中。在后续的实验中,Anything-3D展示出了其强大的三维重建的能力。不仅准确,适用面也非常广泛。Anything-3D在解决现有方法的局限这方面,效果明显。研究人员通过对各类数据集的测验和评估,展示了这种新框架的优点。

上图中,我们可以看到,「柯基吐舌头千里奔袭图」、「银翅女神像委身豪车图」,以及「田野棕牛头戴蓝绳图」。这是一个初步展示,Anything-3D框架能够熟练地把在任意的环境中拍摄的单视角图像中恢复成的3D的形态,并生成纹理。尽管相机视角和物体属性有很大的变化,但这种新框架始终能提供准确性较高的结果。要知道,从2D图像中重建3D物体是计算机视觉领域课题的核心,对机器人、自动驾驶、增强现实、虚拟现实,以及三维打印等领域都有巨大影响。虽说这几年来取得了一些不错的进展,但在非结构化环境中进行单图像物体重建的任务仍然是一个具有很大吸引力且亟待解决的问题。目前,研究人员的任务就是从一张单一的二维图像中生成一个或多个物体的三维表示,表示方法包括点云、网格或体积表示。然而,这个问题从根本上来说并不成立。由于二维投影所产生的内在模糊性,不可能明确地确定一个物体的三维结构。再加上形状、大小、纹理和外观的巨大差异,重建自然环境下的物体非常复杂。此外,现实世界图像中的物体经常会被遮挡,这就会阻碍被遮挡部分的精准重建。同时,光照和阴影等变量也会极大地影响物体的外观,而角度和距离的不同也会导致二维投影的明显变化。困难说够了,Anything-3D可以出场了。论文中,研究人员详细介绍了这个开创性的系统框架,将视觉语言模型和物体分割模型融合在一起,轻轻松松就能把2D物体搞成3D的。这样,一个功能强大、自适应能力强的系统就成了。单视图重建?Easy.研究人员表示,将这两种模型结合,就可以检索并确定出给定图像的三维纹理和几何形状。Anything-3D先用SAM模型识别物体的分布区域,在利用BLIP模型(Bootstrapping语言-图像模型)预训练对图像的文本描述。接下来,利用分割出来的物体和文本描述来执行3D重建任务。换句话说,该论文利用预先训练好的2D文本→图像扩散模型来进行图像的3D合成。此外,研究人员用分数蒸馏来训练一个专门用于图像的Nerf.

上图就是生成3D图像的全过程。左上角是2D原图,先经过SAM,分割出柯基,再经过BLIP,生成文本描述,然后再用分数蒸馏搞个Nerf出来。通过对不同数据集的严格实验,研究人员展示了这种方法的有效性和自适应性,同时,在准确性、稳健性和概括能力方面都超过了现有的方法。研究人员还对自然环境中3D物体重建中已有的挑战进行了全面深入地分析,探讨了新框架如何解决此类问题。最终,通过将基础模型中的零距离视觉和语言理解能力相融合,新框架更能从真实世界的各类图像中重建物体,生成精确、复杂、适用面广的3D表示。可以说,Anything-3D是3D物体重建领域的一个重大突破。

这个新框架可以交互式地识别单视角图像中的区域,并用优化的文本嵌入来表示2D物体。最终,使用一个3D感知的分数蒸馏模型有效地生成高质量的3D物体。总之,Anything-3D展示了从单视角图像中重建自然3D物体的潜力。研究者称,新框架3D重建的质量还可以更完美,研究人员正在不断努力提高生成的质量。此外,研究人员表示,目前没有提供3D数据集的定量评估,如新的视图合成和误差重建,但在未来的工作迭代中会纳入这些内容。同时,研究人员的最终目标是扩大这个框架,以适应更多的实际情况,包括稀疏视图下的对象恢复。

AvatarCLIP: Zero-Shot Text-Driven Generation and Animation of 3D Avatars

AvatarCLIP:仅用自然语言驱动实现制作3D avatar动画

1. 论文和代码地址

论文地址:https://arxiv.org/abs/2205.08535

代码地址:https://github.com/hongfz16/AvatarCLIP

2. 动机

3D avatar生成在数字时代有至关重要的作用,一般而言,创建一个3Davatar需要创建一个人物形象、绘制纹理、建立骨架并使用捕捉到的动作对其进行驱动。无论哪一个步骤都需要专业人才、大量时间和昂贵的设备,为了让这项技术面向大众,本文提出了AvatarCLIP,一个zero-shot文本驱动的3Davatar生成和动画化的框架。与专业的制作软件不同,这个模型不需要专业知识,仅仅通过自然语言就可以生成想要的avatar。本文主要是利用了大规模的视觉语言预训练模型CLIP来监督人体的生成,包括几何形状、纹理和动画。使用shapeVAE来初始化人类几何形状,进一步进行体渲染,接着进行几何雕刻和纹理生成,利用motionVAE得到运动先验来生成三维动画

3. 方法

3.1模型概述

下图展示了AvatarCLIP的框架,模型分为两个部分,上面的部分是生成静态的avatar,下面的部分是生成动作。

模型的输入是自然语言描述,body描述、外观描述和动作描述,模型的输出包括一个动画的3Davatar,以及一系列想要的poses。

静态avatar生成分为四步,首先根据SMPL的模板和语言提示初始化Mesh,接下来用NeuS提取mesh的隐式表示,然后使用隐式表示来构建形状和生成纹理,最后进行动画化。motion生成首先生成备选姿势,然后基于备选姿势生成动作序列。最后将动作做序列融入到动画中。

3.2静态avatar生成

3.2.1coarse shape mesh 生成

作为生成虚拟形象的第一步,生成一个粗糙的模板mesh。SMPL 被用作可能的人体形状的来源。如图 3 所示,首先通过对身体形状进行聚类来构建code-book。然后使用CLIP提取code-book和文本中身体形状渲染的特征,以获得最佳匹配的身体形状。

SMPL是通过主成分分析学习的,所以聚类的分布不均衡。通过训练一个shapeVAE,在VAE的隐空间使用K-Means聚类,来实现分类均匀的目的。对于CLIP引导的code-book查询,定义了一个中性状态的身体形状 以及相应的中性状态文本 作为参考。每个条目的得分 在code-book中定义为

最终选择si最大的mesh 作为输出。

3.2.2隐式表达

为了生成高质量的 3D avatar,形状和纹理需要进一步塑造和生成以匹配外观 app 的描述。如前所述,我们选择使用隐式表示,即 Neus,作为此步骤中的基本 3D 表示,因为它在几何和颜色上都具有优势。为了加速优化和控制形状生成,更方便生成动画,所以需要先将生成的粗糙mesh shape转化为隐式表示。

通过使用模板mesh 的多视图渲染{ }优化随机初始化的NeuS 来创建 的等效隐式表示。具体来说,如图4所示,NeuS = { ( ), ( )} 由两个子网组成。SDF网络 ( )以一定点 作为输入,输出与其最近的表面有符号距离。颜色网络 ( )以点 为输入,输出颜色。 ( ) 和 ( ) 都是使用 MLP 实现的。需要注意的是,与NeuS的原始实现相比,这里省略了颜色网络对观看方向的依赖。

视图方向依赖性最初设计用于对视角变化的阴影进行建模。在我们的例子中,对此类阴影效应进行建模是多余的,因为我们的目标是生成具有一致文本的 3D avatar,与原始设计类似, 由三部分损失函数优化:

color是渲染图和ground truth之间的重建损失 reg是SDF正则化的损失 mask是仅仅重建前景的损失

3.2.3形状构建+纹理生成

通过CLIP风格化初始的NeuS N,粗糙的形状 仍应保持,所以通过保留了原来的两个子网络 ( ) 和 ( ) 并引入额外的彩色网络 ( ). 两个颜色网络共享同一SDF网络 ( ) 如图5所示。 ( )和 ( ) 负责模板网格的重建 . ( ) 连同 ( ) 负责风格化部分,并且包括目标隐式3D化身。

形式上,新的NeuS模型 ′ = { ( ), ( ), ( )} 现在由三个子网络组成,其中 ( ) 和 ( ) 由预先培训的 , 和 ( )是随机初始化的颜色网络。

损失函数如下

没有纹理的渲染中颜色是不需要的,我们简单的计算一个灰度的光线通过:

其中A服从一个均匀分布,并随机采样,D= 1-A。通过上面的式子应用到一张图片的每一个像素中,我们可以得到没有纹理渲染的图片。

在实践中,我们发现纹理渲染上的随机着色 有利于生成纹理的均匀性,这将在消融研究中稍后讨论。随机着色打开 类似于无纹理渲染,其正式定义为

上面两种渲染过程的损失函数就损失函数的后两项,定义为:

3.2.4 增强过程

为了增强优化过程的鲁棒性,使用了三种增强手段:背景随机增强;随机相机参数采样;文本提示语义增强。

随机背景增强,使得CLIP能更加focus on 需要生成的对象上,本文采用了图六中展示的背景增强的手段。

为了防止网络找到仅为几个固定相机位置提供合理渲染的捷径解决方案,我们以手动定义的重要性采样方式对每个优化迭代的相机外部参数进行随机采样,以获得更连贯和平滑的结果。我们选择使用相机的“注视”模式,该模式由注视点、相机位置和向上方向组成。

向上的方向一般是人体向上的方向,注视点采用随机采样的方法,相机位置使用半径为 从均匀分布U(1,2)采样,极角 从均匀分布U(0,2 ), 方位角 从高斯分布N(0, /3)采样,使得相机在大多数迭代中指向化身的前方。

到目前为止,在整个优化过程中没有引入人类先验,这可能会导致在错误的身体部位生成纹理或不为重要的身体部位创建纹理,这将在稍后的消融研究中显示。为了防止此类问题,我们建议通过以语义感知的方式增强提示,在优化过程中明确引入人类先验。例如,如图7所示,如果 app=“乔布斯”,我们将增加 应用到两个附加提示 face=“史蒂夫·乔布斯的脸”和 back=“史蒂夫·乔布斯的背影”。对于每四次迭代,相机的注视点被设置为面部的中心,以获得面部的渲染,这将由提示进行监督 面对“面部增强”直接监督面部的生成,这对生成的化身的质量很重要,因为人类对面部更敏感。对于第二增强提示, back被用作相应的文本,以明确地指导化身背部的生成。

3.2.5动画生成

首先,中每个顶点的最近邻居 在模板网格的顶点中检索 . 混合中每个顶点的权重 从中最近的顶点复制 . 其次,使用反向LBS算法来带来avatar的站立姿势 站回零姿势 0。顶点 被转换为 0 . 最后 0可以由任何姿势驱动 使用LBS算法。因此,对于任何姿势,动画avatar都可以正式定义为:

LBS算法是线性混合蒙皮,用户在几何模型给上选择一系列控制单元,并计算几何模型受这些控制单元的影响权重,用户拖动控制单元,几何模型随着控制单元发生对应的变化。

3.3motion 生成

根据经验,CLIP不能直接估计运动序列和自然语言描述之间的相似性。它也缺乏评估运动序列的平滑性或合理性的能力。这两个限制表明,仅使用CLIP监督很难生成运动。因此,必须引入其他模块来提供运动先验。然而,CLIP能够评估渲染的人体姿势和描述之间的相似性。此外,类似的姿势可以被视为预期运动的参考。基于以上观察,我们提出了一个两阶段运动生成过程:1)由CLIP引导的候选姿态生成。2) 使用具有候选姿势作为参考的运动先验来生成运动序列。

3.3.1生成candidate pose

我们首先从AMASS数据集创建code-book。为了减少维度,VPoser用于将姿势编码为 ∈ R ,然乎使用K-Means聚类来建立code-book Bz,每一个Bz然后通过解码器解码为一些列的姿势 。

给定的文本描述 运动,每个姿势特征 从代码本中计算与文本特征的相似度 , 其用于选择Top-K条目作为候选姿势。

3.3.2motion VAE

本文提出了一种双重方法来生成与运动描述匹配的目标运动序列 运动

1) motionVAE被训练以捕获人类运动先验。

2) 我们使用候选姿态优化motion VAE的潜在代码 作为参考。

motion VAE包含encoder、decoder和重参数模块。

encoder模块包括projection layer、positional embedding layer 、几个transformer encoder块和output layer。输出等于

重参数模块生成一个高斯分布,两个全连接层分别计算均值和方差

随机潜在编码z从得到的高斯分布中采样,潜在编码通过decoder解码得到motion序列

训练motion VAE过程中的损失函数定义为:

3.3.3生成运动序列

使用预训练的motion VAE,我们尝试优化其潜在代码 以合成运动序列 Θ = motion ( )。提出了三个优化约束:

Lpose 是解码后的动作序列 Θ 和候选姿势 之间的重构项。给定参考带来 = { 1, 2,., },目标是构建一个与这些姿势足够接近的动作序列。我们建议最小化 与其最近的帧Θ 之间的距离,其中 ∈ {1, 2,., } 和 ∈ {1, 2,., }。形式上,重建损失定义为

根据经验,仅使用重建损失 Lpose,生成的运动往往是过度平滑的。Ldelta 测量运动的范围,以防止运动过于平滑。作为对过度平滑运动的惩罚项。在增加 λ6 时会产生更强烈的运动。

L clips 鼓励运动中的每个单一姿势匹配输入运动描述。缺乏对姿势排序的监督将导致不稳定的生成结果。此外,候选姿势可能只对最终运动序列的一小部分有贡献,这将导致意外的运动片段。为了解决这两个问题,我们设计了一个附加的CLIP引导损失项:

是姿势Θ和文本描述之间的相似度得分。 clip ( ) = 是一个单调递增的函数,因此 L clip 对序列中的后面姿势给予更高的惩罚。通过上述 CLIP 引导的术语,整个运动序列将与运动更加一致。

4.实验

4.1总体结果

上图展示了具有多种身体形状,外观多样,质量高。它们由生成的与输入描述合理且一致的运动序列驱动。在zero-shot style中,AvatarClip 能够生成avatar和动作并且动画化,利用预训练模型中的先验信息。最初需要专业软件专家知识的化身生成和动画的整个过程现在可以在我们提出的模型帮助下简单地由自然语言驱动。

4.2Avatar 生成

4.2.1消融实验

1)背景增强的设计

2)低纹理渲染的监督

3)纹理渲染的随机阴影

4)语义感知提示增强。

图12所示的消融设置是通过随后将上述四种设计添加到baseline中形成的。如图12的前两列所示,背景增强对纹理生成有很大影响,如果没有背景增强,纹理会变得非常暗。比较第二列和第三列,添加对无纹理渲染的监督可以大大提高几何体质量。“消融2”的几何结构有很多随机凸起,这会使表面产生噪音。而“消融3”的几何结构是光滑的,并有详细的衣服褶皱。如“消融3”和“消融4”所示,在纹理渲染图上添加随机阴影有助于生成更均匀的纹理。例如,《消融3》中的“唐纳德·特朗普”上身比下身更亮,这在《消融4》中有所改进。如果没有人体语义的意识,前面的四个设置无法为化身生成正确的面部。最后一列使用语义感知提示增强,在面部生成方面具有最佳结果。

4.2.2coarse shape 生成

对于这一部分,我们设计了两种直观的基线方法,(i)SMPL上的直接优化 (ii)VAE潜在空间上的直接优化。如图13(a)所示,两种优化方法都无法生成与描述文本一致的身体形状。即使是相反的文本指导(例如“kinny”和“overweight”)也会导致相同的优化方向。相比之下,我们的方法稳健地生成与输入文本一致的合理身体形状。我们方法的更多样的定性结果如图13(b)所示。

4.2.3形状雕刻和纹理生成的定性结果

广泛的驾驶文本。在广泛的实验中,我们的方法能够从广泛的外观描述中生成化身,包括三种类型:1)名人,2)虚构人物和3)描述人的一般词语,如图17所示。如图17(a)所示,给定名人姓名作为外观描述,生成了名人最具标志性的服装。由于我们的语义感知提示增强设计,人脸也能正确生成。对于图17(b)所示的虚构角色生成,可以正确生成大多数文本描述的化身。有趣的是,对于具有复杂几何形状的配件的角色(例如“蝙蝠侠”的头盔、“艾尔莎”的服装),优化过程有从模板人体中“生长”出新结构的趋势。至于一般描述,我们的方法可以处理非常广泛的范围,包括常见的工作名称(例如“教授”、“医生”)、描述某个年龄段的人的词语(例如“青少年”、“老年公民”)和其他幻想职业(如“女巫”、“巫师”)。可以观察到,除了化身本身之外,还可以生成它们各自的标志性对象。例如,“园丁”用手抓花和草。

尽管上面实验和演示了大量的生成结果,但在生成宽松服装和配饰时仍存在失败案例。例如,如图17所示,“艾尔莎”的服装和“奇异博士”的斗篷并没有生成。夸张的头发和胡须(如裹着面包的阿甘)的几何形状也很难正确生成。这是由优化过程中的重建损失引起的。不鼓励“生长”,允许对几何结构进行非常有限的更改。

Zero-Shot Controlling Ability:如图18所示,我们可以通过调整语义感知提示增强来控制化身上生成的人脸,例如,比尔·盖茨穿着钢铁侠套装。此外,我们可以通过直接的文本指导来控制化身的服装,例如“穿着白衬衫的史蒂夫·乔布斯”。

Concept Mixing:如图14所示,我们展示了将奇幻元素与名人混合的示例。在保持可识别身份的同时,奇幻元素与avatar自然融合。

Geometry Quality:低纹理渲染监督的关键设计主要有助于几何生成。我们主要将AvatarCLIP与基于NeRF的改编的Dream Field进行比较。如图19所示,我们的方法在几何质量方面始终优于Dream Fields。可以生成详细的肌肉形状、盔甲曲线和布料褶皱。

除了生成质量,我们还研究了我们算法的鲁棒性与baseline Text2Mesh相比。对于每种方法,我们都使用相同的五个随机种子,对同一提示进行五次独立运行。如图20所示,我们的方法能够以高质量和与输入文本一致的方式输出结果。Text2Mesh在大多数运行中失败,这表明网格的表示对于优化是不稳定的,尤其是在监督薄弱的情况下。

4.3 motion生成

4.3.1消融实验

为了评估我们在基于参考的动画模块中的设计选择的有效性(即提出的三个约束项,运动VAE作为运动先验的使用),我们将我们的方法与两个基线方法进行了比较,如图21所示。

对于“刷牙”,(i)生成无序和不相关的姿势序列。(ii)也未能生成合理的运动,这是由于其盲目地关注于重建无序的候选姿势所导致的。通过引入重新加权机制,我们的方法不仅关注重建,还考虑了生成的运动的合理性。

对于“踢足球”,当腿踢出时,(i)(ii)中的动作序列没有剧烈变化。Ldelta在控制运动强度方面起着重要作用。至于“举起双臂”,它应该生成一个从中立姿势到举起手臂的姿势的运动序列。然而,(i)生成与预期结果相反的运动序列。(ii)引入若干不相关的行动。在Lclipm,我们的方法能够以正确的顺序和更好的描述一致性生成运动。

此外,受应聘者姿势多样性的限制,要想做出更复杂的动作,比如“拥抱”、“弹钢琴”和“运球”,是一件很有挑战性的事情。

4.3.2与baseline对比

将三种baseline方法与我们的方法进行比较。baseline(I)直接对SMPL参数θ进行优化。基线(II)直接在VPoser的潜在空间上进行优化。这两种方法都很难产生合理的姿势。Baseline(III)在VPoster中使用了多通道Real NVP,在正太分布和潜在空间分布中得到双向映射,它可以生成相对合理的姿势,但仍然明显比我们的方法差。

如图22(b)展示了广泛的驱动文本。为了证明姿势生成方法的zero-能力,我们用四类运动描述进行了实验:1)抽象的情绪描述(例如“疲惫”和“悲伤”);2) 常见动作描述(如“行走”和“蹲下”);3) 与身体部位相关的运动描述(例如“举起双臂”、“洗手”)4)涉及与物体交互的运动(例如“投篮”)。

5. 总结

为了外行人也可以实现原来复杂的3D avatar创建的目的,本文提出了AvatarCLIP。本文的模型主要依赖于大规模预训练模型VAE——包括了形状和动作先验,以及大型可泛化的视觉语言预训练模型CLIP。并且通过一系列的实验证明了模型的有效性和效率。

但是在形象创建的过程中,受到CLIP的弱监督和低分辨率的影响,生成的结果在放大之后并不是完美的。此外,在给定相同的prompt的,要产生有较大区别的形象是比较困难的。因为,优化方向是相同的,所以导致了不同的提示产生相同的结果。在动作合成阶段,受code-book设计的限制,很难产生分布外的候选姿态,这限制了产生复杂运动的能力。此外,由于缺乏video CLIP,很难生成风格化的运动。

对于预训练模型的使用,会造成许多道德问题,比如,医生对应的生成是男性, 而护士对应的生成是女性,这会造成性别歧视的问题。为了安全地使用zero-shot技术,需要开展关于大规模预训练模型的伦理问题的未来工作。此外,随着头像和动画制作的普及,用户可以很容易地制作出名人的假视频,这可能会被滥用,造成负面的社会影响。

Lama:《Resolution-robust Large Mask Inpainting with Fourier Convolutions》解读及实操

最近任务需求跟图像inpainting相关,因此调研使用了多个较新的开源模型,例如crfill、RePaint、Lama等。综合比较之下Lama的速度、效果都是最佳的,并且支持自定义输入尺寸进行推理(而非必须固定输入尺寸)。因此结合Lama论文进行实操,记录如下。

一、总体方法 & 创新点

1、总体方法流程:

对于输入原图 x ,使用一个二进制掩膜 进行遮罩 x  m ,形成一个四通道的输入tensor :

x′ = stack(x  m, m)

再使用一个前向infer网络(·)(也是一个生成器),以全卷积方式修复获得一个三通道彩色图像。

训练过程也是基于“图像与掩膜”这样的pair数据进行的。

2、创新点:

1)旧有方法都不具备足够广泛的感受野,因此对于大分辨率的图像或是大范围的inpainting而言,很容易会被局部附近的细节或干脆是mask所影响导致效果差。因此Lama考虑让模型在网络初始阶段就拥有更大的感受野,提出了基于快速傅立叶卷积(FFC)构造的网络结构。

2)损失函数:利用预训练分割网络进行特征提取实现损失函数构建,服务于大感受野和大掩膜

3)mask生成方法:动态的生成大掩膜,实现类似数据增强的效果

二、具体方法

1、Baseline:

图像与掩膜组成pair对输入网络并经过下采样后,进入FFC残差块。

在FFC块中,输入tensor被划分为两个分支进行运算。Local分支使用常规卷积;Global分支使用Real FFT进行全局上下文关注。其中在Global分支中经历了Real FFT2d和Inverse Real FFT2d的操作,实现了图像重建,具体张量变化看见论文2.1中的a)、 b)、c)。在FFC的输出中两分支进行结果合并。

2、损失函数

首先需要明确的是,对一个被掩膜遮盖的区域其实可以有多种合理的填充结果,就像口罩下的长相谁也无法准确预测。所以一旦掩膜变大,那么loss就必须被更加合理地设置以避免不符合事物逻辑的生成。

1)高感受野知觉损失 HRFPL

HRFPL

HRFPL是通过预训练的基础网络对输入图像x和生成图像x尖进行特征相似的计算。具体来说是使用空洞卷积或傅立叶卷积构建的HRF进行逐像素计算,然后M代表两阶段均值操作,即先取同层均值再取层间均值。

作者认为选取一个合适的预训练网络对于 HRFPL的效果至关重要。例如分类网络更关注局部的细节纹理,而难以理解全局的结构信息,缺乏对整体的认知。而分割模型则相反,具有更好的效果。

2)对抗损失

作者定义了一个在局部补丁级别上工作的鉴别器Dξ(·),用于区分“真实”和“虚假”补丁。对于输入pair对中的原图和掩膜图片,将原图上被掩膜覆盖的区域标记为“real”标签,将生成图片上对应区域标记为“fake”标签。

对抗损失

3)总体损失

在总体损失中,作者还使用

进行梯度惩罚,和基于识别器的感知实际损失或所谓的特征匹配损失-感知鉴别器网络LDiscPL的特征损失。众所周知,LDiscPL可以稳定训练,在某些情况下性能略有提高。

总体损失

LAdv和LDiscPL负责生成自然外观当地细节,而LHRFPL负责监督全局结构的信号和一致性。

3、训练中的动态掩膜生成

作者认为掩膜的生成类似于数据增强,对模型的效果非常重要。作者采取了多种大掩膜生成方式,但也同时注意避免生成大于原始图像50%的掩膜。

掩膜生成方式

三、实验与数据

训练使用Places和CelebA进行。下图结果中与其他模型在不同大小的掩膜上进行了对比,红色箭头代表表现逊于Lama,绿色则表示优于Lama。可以看到Lama在少参数量的情况下效果基本达到最优。

消融实验也证明了FFC在大掩膜上的效果。

论文还提供了大量实验细节,感兴趣的请查看原文。

四、使用记录

官方开源的模型中提供了一个名为Big-Lama的模型权重,效果最优。因为相比普通Lama,其生成器结构更复杂、训练数据规模更大。该模型是根据来自Places Challenge数据集的4.5M张图像的子集进行训练的,在八台NVidia V100 GPU上接受了约240小时的train。

我在Big-Lama上对infer refine的参数、mask生成方式做了反复测试,直观感受是其修复效果在其较快的infer速度上的确已经相当不错。同时我也尝试在训练中修改了mask的动态生成策略,实现了自定义mask生成来贴合我的任务场景,但考虑到训练成本尚未进行大规模训练,欢迎大家交流。

Inpaint Anything: Segment Anything Meets Image Inpainting

  • 论文链接:http://arxiv.org/abs/2304.06790
  • 代码库链接:https://github.com/geekyutao/Inpaint-Anything

4 月初,Meta 发布了史上首个图像分割基础模型–SAM(Segment Anything Model)。作为分割模型,SAM 的能力强大,操作使用方式也十分友好,比如用户简单地点击来选择对应物体,物体就会立即被分割出来,且分割结果十分精准。截至 4 月 15 号,SAM 的 GitHub 仓库的 Star 数高达 26k。

如何利用好如此强大的「分割一切」模型,并拓展到更加有实际需求的应用场景至关重要。例如,当 SAM 遇上实用的图像修补(Image Inpainting)任务会碰撞出什么样的火花?

来自中国科学技术大学和东方理工高等研究院的研究团队给出了令人惊艳的答案。基于 SAM,他们提出「修补一切」(Inpaint Anything,简称 IA)模型。区别于传统图像修补模型,IA 模型无需精细化操作生成掩码,支持了一键点击标记选定对象,IA 即可实现移除一切物体(Remove Anything)、填补一切内容(Fill Anything)、替换一切场景(Replace Anything),涵盖了包括目标移除、目标填充、背景替换等在内的多种典型图像修补应用场景。

主要功能:

尽管当前图像修补系统取得了重大进展,但它们在选择掩码图和填补空洞方面仍然面临困难。基于 SAM,研究者首次尝试无需掩码(Mask-Free)图像修复,并构建了「点击再填充」(Clicking and Filling) 的图像修补新范式,他们将其称为修补一切 (Inpaint Anything)(IA)。IA 背后的核心思想是结合不同模型的优势,以建立一个功能强大且用户友好的图像修复系统

IA 拥有三个主要功能:(i) 移除一切(Remove Anything):用户只需点击一下想要移除的物体,IA 将无痕地移除该物体,实现高效「魔法消除」;(ii) 填补一切(Fill Anything):同时,用户还可以进一步通过文本提示(Text Prompt)告诉 IA 想要在物体内填充什么,IA 随即通过驱动已嵌入的 AIGC(AI-Generated Content)模型(如 Stable Diffusion )生成相应的内容填充物体,实现随心「内容创作」;(iii) 替换一切(Replace Anything):用户也可以通过点击选择需要保留的物体对象,并用文本提示告诉 IA 想要把物体的背景替换成什么,即可将物体背景替换为指定内容,实现生动「环境转换」。IA 的整体框架如下图所示:

Inpaint Anything(IA)示意图。用户可以通过单击来选择图像中的任何物体。借助强大的视觉模型,如 SAM、LaMa 和 Stable Diffusion (SD) ,IA 能够平滑移除选定物体(即 Remove Anything)。进一步地,通过向 IA 输入文本提示,用户可以用任何想要的内容填充物体(即 Fill Anything)或者任意替换对象的物体(即 Replace Anything)

移除一切(Remove Anything)示意图

 「移除一切」步骤如下:

  • 第 1 步:用户点击想要移除的物体;
  • 第 2 步:SAM 将该物体分割出来;
  • 第 3 步:图像修补模型(LaMa)填补该物体。

填补一切

Text prompt: “a teddy bear on a bench”

image

Click on an object, type in what you want to fill, and Inpaint Anything will fill it!

  • Click on an object;
  • SAM segments the object out;
  • Input a text prompt;
  • Text-prompt-guided inpainting models (e.g., Stable Diffusion) fill the “hole” according to the text.

「填补一切」步骤如下:

  • 第 1 步:用户点击想要移除的物体;
  • 第 2 步:SAM 将该物体分割出来;
  • 第 3 步:用户通过文本示意想要填充的内容;
  • 第 4 步:基于文本提示的图像修补模型(Stable Diffusion)根据用户提供的文本对物体进行填充。

替换一切

替换一切(Replace Anything)示意图,图中使用的文本提示:a man in office

「填补一切」步骤如下:

  • 第 1 步:用户点击想要移除的物体;
  • 第 2 步:SAM 将该物体分割出来;
  • 第 3 步:用户通过文本示意想要替换的背景;
  • 第 4 步:基于文本提示的图像修补模型(Stable Diffusion)根据用户提供的文本对物体的背景进行替换。

Text prompt: “a man in office”

image

Click on an object, type in what background you want to replace, and Inpaint Anything will replace it!

  • Click on an object;
  • SAM segments the object out;
  • Input a text prompt;
  • Text-prompt-guided inpainting models (e.g., Stable Diffusion) replace the background according to the text.

Remove Anything 3D

Remove Anything 3D can remove any object from a 3D scene! We release some results below.

org.gif
mask.gif
result.gif

研究者随后在 COCO 数据集、LaMa 测试数据集和他们自己用手机拍摄的 2K 高清图像上对 Inpaint Anything 进行测试。值得注意的是,研究者的模型还支持 2K 高清图和任意长宽比,这使得 IA 系统在各种集成环境和现有框架中都能够实现高效的迁移应用