文生图(text-to-image)简史:扩散模型(diffusion models)的崛起与发展

大家读完觉得有意义记得关注和点赞!!!

 

d37d629dba9c4c3f8d4bc9914bab09e3.png

生成式建模(generative modeling)近几年发展神速, 网上也涌现出了大批令人惊叹的纯 AI 生成图片。 本文试图总结文生图(text-to-image)领域近几年的发展, 尤其是各种扩散模型(diffusion models)—— 它们已经是业界的标杆架构。

1 OpenAI DALL·E:起于文本,潜入图像,2021.01

1.1 GPT-3 (2020):基于 transformer 架构的多模态大语言模型

2020 年,OpenAI 发布了 GPT-3 模型 [1],这是一个基于 Transformer 架构的多模态大语言模型,能够完成机器翻译、文本生成、语义分析等任务, 也迅速被视为最先进的语言建模方案(language modeling solutions)。

1.2 DALL·E (2021.01):transformer 架构扩展到计算机视觉领域

DALL·E [7] 可以看作是将 Transformer(语言领域)的能力自然扩展到计算机视觉领域

如何根据提示文本生成图片?DALL·E 提出了一种两阶段算法:

  1. 训练一个离散 VAE (Variational AutoEncoder) 模型,将图像(images)压缩成 image tokens

    VAE 是一种神经网络架构,属于 probabilistic graphical models and variational Bayesian methods 家族。

  2. 将编码之后的文本片段(encoded text snippet)与 image tokens 拼在一起(concatenate), 训练一个自回归 Transformer,学习文本和图像之间的联合分布

最终是在从网上获取的 250 million 个文本-图像对(text-image pairs)上进行训练的。

1.3 量化“文本-图像”匹配程度:CLIP 模型

训练得到模型之后,就能通过推理生成图像。但如何评估生成图像的好坏呢?

OpenAI 提出了一种名为 CLIP 的 image and text linking 方案 [9], 它能量化文本片段(text snippet)与其图像表示(image representation)的匹配程度

抛开所有技术细节,训练这类模型的思路很简单:

  1. 将文本片段进行编码,得到 TiTi;
  2. 将图像进行编码,得到 IiIi;

对 400 million 个 (image, text) 进行这样的操作,

 

77fdd8f7f6c3e44eb2d0b0ffb9668140.png

F.g CLIP contrastive pre-training 工作原理 [9]. (文本大意:澳大利亚小狗)。

基于这种映射方式,就能够评估生成的图像符合文本输入的程度。

1.4 小结

DALL·E 在 AI 和其他领域都引发了广泛的关注和讨论。 不过热度还没持续太久,风头就被另一个方向抢走了。

Diffusion:高斯去噪,扩散称王,2021.12

Sohl-Dickstein 等提出了一种图像生成的新思想 —— 扩散模型(diffusion models) [2]。 套用 AI 领域的熟悉句式,就是

All you need is diffusion.

2.1 几种图像生成模型:GAN/VAE/Flow-based/Diffusion

 

4557797b62f6a511ee50fdfd7e9e9f28.png

Fig. 几种生成式模型(generative models)[13]

Diffusion 模型受到了非平衡热力学(non-equilibrium thermodynamics)的启发,但其背后是一些有趣的数学概念。 它仍然有大家已经熟悉的 encoder-decoder 结构,但底层思想与传统的 VAE(variational autoencoders)已经不同。

要理解这个模型,需要从原理和数学上描述正向和反向扩散过程。

公式看不懂可忽略,仅靠本文这点篇幅也是不可能推导清楚的。感兴趣可移步 [13-15]。

2.2 正向图像扩散(forward image diffusion)

2.2.1 基本原理

向图像逐渐添加高斯噪声,直到图像完全无法识别。

这个过程可以被形式化为顺序扩散马尔可夫链(Markov chain of sequential diffusion steps)。

2.2.2 数学描述

  • 假设图像服从某种初始分布 q(x0)q(x0),
  • 那么,我们可以对这个分布采样得到一个图像 x0x0,
  • 接下来,
### Stable Diffusion 运行时 CUDA 错误解决方案 在遇到 `RuntimeError: CUDA error: device-side assert triggered` 的情况下,有几种方法可以帮助解决问题并确保模型稳定运行。 #### 设置环境变量 为了更精确地定位错误发生的位置,在各种导入语句之后设置环境变量 `CUDA_LAUNCH_BLOCKING=1` 可以使每次 CUDA 内核启动都变为同步操作,从而帮助调试[^4]: ```python import os os.environ['CUDA_LAUNCH_BLOCKING'] = "1" ``` 这一步骤有助于获取更加准确的堆栈跟踪信息,以便更好地理解问题所在。 #### 修改配置参数 对于特定于 AnimateDiff 和 xformers 库的情况,建议调整相关加速选项。由于启用 xformers 加速可能导致不兼容性或引发设备端断言触发异常,可考虑将其设为“自动”,让框架自行决定最佳路径[^2]: ```python # 假定存在这样的接口用于控制xformers行为 config.use_xformers = 'auto' ``` 这种做法可以在保持性能优化的同时减少潜在冲突的风险。 #### 验证硬件资源分配 考虑到 GPU 资源管理不当也可能引起此类错误,确认当前工作负载是否合理非常重要。如果可能的话,尝试降低批量大小(batch size),或者释放不必要的张量(tensor)占用空间来减轻显存压力: ```python batch_size = min(original_batch_size, available_memory // memory_per_sample) ``` 此外,定期调用 `torch.cuda.empty_cache()` 来清理缓存也有助于缓解内存不足带来的影响。 通过上述措施应该能够有效应对大部分由 `device-side assert triggered` 导致的问题。当然,具体实施还需结合实际应用场景灵活处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值