使用diffusion model文字生成图片原理和实践

内容纲要

场景

Product

文字生成图片

基础能力

  1. 用户输入文字, 选择场景, 生成图片
  2. 用户还可以输入一个基础图片, 在这个图片基础上生成新的图片
  3. 可以在基础图片上选中一块位置,仅修改指定位置

组合能力

  1. 用户输入文字从0开始生成图片
  2. 用户选择合适的基础图片, 再输入关键词进行修改或者指定位置的修改
  3. 直到最终生成满意的照片
  4. 在过程中可以每次生成多张照片让用户选择最想要的进行保存
  5. 过程可以是对话式的

训练用户自定义模型

  1. 用户输入一组自己自拍或某种风格照片
  2. 训练的新模型输入层将会生成该风格图片

Tools

  1. Stable-Diffusion, Most popular opensource model: https://github.com/CompVis/stable-diffusion
    1. Stable Diffusion web UI: https://github.com/AUTOMATIC1111/stable-diffusion-webui
    2. 如何使用web UI: https://www.bilibili.com/video/BV1q84y1i78L
    3. novelAI元素法典: https://docs.qq.com/doc/DWHl3am5Zb05QbGVs
  2. Adaptive Style Transfer: https://github.com/CompVis/adaptive-style-transfer
  3. Markdown Document: https://www.mkdocs.org/
  4. Gradio for AI API SDK: https://github.com/gradio-app/gradio
  5. "Model as a Service" Software: https://github.com/modelscope/modelscope

Theory

  1. CLIP 论文逐段精读【论文精读】: https://www.bilibili.com/video/BV1SL4y1s7LQ
  2. DALL·E 2(内含扩散模型介绍): https://www.bilibili.com/video/BV17r4y1u77B
  3. ViLT 论文精读: https://www.bilibili.com/video/BV14r4y1j74y/
  4. CLIP 改进工作串讲(上): https://www.bilibili.com/video/BV1FV4y1p7Lm
  5. CLIP 改进工作串讲(下): https://www.bilibili.com/video/BV1gg411U7n4/
  6. 多模态论文串讲·上: https://www.bilibili.com/video/BV1Vd4y1v77v/
  7. 多模态论文串讲·下: https://www.bilibili.com/video/BV1fA411Z772/
  8. High-Resolution Image Synthesis with Latent Diffusion Models: https://ommer-lab.com/research/latent-diffusion-models
    • DALL·E 2
    • Imagen
  9. How to Train Really Large Models on Many GPUs?

帮助理解

  1. Diffusion Models: A Comprehensive Survey of Methods and Applications: https://arxiv.org/abs/2209.00796
  2. 實作理解Diffusion Model: 來自DDPM的簡化概念:https://medium.com/ai-blog-tw/%E9%82%8A%E5%AF%A6%E4%BD%9C%E9%82%8A%E5%AD%B8%E7%BF%92diffusion-model-%E5%BE%9Eddpm%E7%9A%84%E7%B0%A1%E5%8C%96%E6%A6%82%E5%BF%B5%E7%90%86%E8%A7%A3-4c565a1c09c
  3. 由浅入深了解Diffusion Model: https://zhuanlan.zhihu.com/p/525106459

CLIP

  1. 使用无标签的从互联网上整理的4亿(400M)图片和文字对,使用对比学习的方法进行预训练,抽取图片特征中真的包含了语义信息.
  2. 使用prompt(engineering & ensemble)的方式进行zero-shot的迁移学习

效果

  1. zero-shot图片分类: 在ImageNET图片分类上效果和ResNet-50效果差不多
  2. 迁移性强: 当图片风格发生很大变化(distribution drift),依然不会有大的性能下降
  3. 泛用性强: 泛用在大量CV领域的任务中,抽取图片的特征

数据
收集了数据集WebImageText(WIT),包含了4亿(400M)图像文本对。
因为数据量够大,CLIP在训练的时候text encoder和image encoder都是不需要进行预训练,也不需要数据增强,不会发生overfitting。

训练和预测
简单换算, 及时使用最便宜的3090GPU一次训练也需要至少十几万。

file

  1. 数据集大:收集了大量(4亿个)文本和图片对,相比之前都是千万级的数据大了一个量级
  2. 对比学习(contrastive representation learning):相比之下对比学习比生成文本,BOW或图片效果都要好,而且任务还更简单。
  3. 使用了非常巧妙的Prompt Template来进行Zero Shot分类
  4. Prompt:模型对于Prompt很敏感
    • Prompt Template: 使用一个句子描述,比只使用一个词的label准确。label信息少往往还有歧义
    • Prompt Engineering: 尝试和调整更好的Prompt效果会更好
    • Prompt Ensemble:使用多个Template比仅使用一个Template最终效果好
  5. 细节
    • image encoder: 分别尝试使用ResNet50(使用EfficientNet架构)和ViT,ViT效果更好训练更快
    • text encoder: 使用一个63M的Transformer,而且sequence length只有76,因为发现CLIP对于text encoder的性能不敏感
    • 数据量足够大,所有参数都是从0开始学习,图片也不需要做随机裁剪外的增强

实践

DALL·E 2

file
主要是CLIP+GLIDE

Diffusion发展过程

  1. Diffusion: 第一版Diffusion推理和学习的效率不高
  2. DDPM:扩散模型的开山之作。对Diffusion模型进行比较大的优化,修改目标函数为对噪声的预测,让扩散模型变得容易训练。
  3. Improved DDPM:OpenAI的人看见了DDPM有用了,就做了更多的改进。
  4. Diffusion beats GAN:OpenAI的人发现增大模型对效果有提升,于是开始变大变强,大力出奇迹。提出classifier guided diffusion,使用另外的一个分类模型得出的损失来指导图片生成过程,可以大幅度提升模型的分数表现,第一次在分数上打败了GAN。
  5. GLIDE:提出了classifier free guidance,之前都需要使用额外的模型来指导,这个模型可能还需要自己来训练很麻烦。这个技巧在后续的模型上都在使用。
  6. DALLE 2:使用CLIP+GLIDE以及更多的技巧

DALLE 2现在看来也还是一个阶段性的工作,后续的Imagen,Parti等等都在不断改进,这个领取在飞快的发展。

发表评论