Diffusion Model

1. 概述

图像生成任务:给定一段文字,模型根据文字描述产生图片

image-20230525094930332

1.1 图像生成方式

  • 一次生成一个pixel

    像Transformer接龙那样,一次生成一个pixel,然后作为下一个pixel的输入,这样依次生成一张图像的所有pixel

  • 一次生成整张图片的所有pixel

    每一个pixel独立绘制,但存在四不像的问题,每个pixel(或者每个局部的一组pixel)都有自己的想法

    左上角的一片pixel想要生成哈士奇

    右上角的一片pixel想要生成柯基

    左下角的一片pixel想要生成边牧

    右下角的一片pixel想要生成金毛

    最后生成的图片就是四不像

    image-20230525110428907

1.2 解决四不像问题

对于图像生成模型,添加一个输入,保证一次生成全部的pixel目标统一,劲往一处使

添加的这个输入就是从一个分布(正太分布)中,采样出来的一个多维向量,模型要学会将分布中的采样出来的每一个向量对应到一个具体的图像

image-20230525110845733

常用的图像生成模型有

  • VAE,Variational Auto-encoder
  • Flow-based Generative Model
  • Diffusion Model
  • GAN,Generative Adversarial Network

2. Diffusion Model

arxiv:2006.11239

2.1 预测过程

对于Diffusion Model,给定文字输入,从某一分布(高斯分布)中采样一个高维向量作为输入,经过多次降噪操作,生成可识别的图片

image-20230525111742927

2.2 训练过程

Denoise模块内部结构如下

image-20230525094539028
  • input

    当前步数、当前步待降噪的图片(后面会将text也作为输入)

  • noise predictor

    预测当前步的噪音,输入图片除去预测噪音产生输出降噪后的图片

  • output

    降噪后的图片

如何训练noise predictor

在给图片加噪音的过程中,就已经产生noise predictor的训练数据了

以第2步加噪音的操作为例,步数2加完噪音的图片作为输入,我们想要noise predictor的输出是第2步加的噪音是什么,而这个噪音图我们是知道的,作为ground truth

image-20230525095839101

对模型加上文字输入后的的表示如下

image-20230525100909906

3. Stable Diffusion

整体结构

image-20230525101013835

预测过程,如上图所示

训练过程

3.1 Text Encoder

将输入的文字转换成向量,可以理解为让通过Encoder将文字转化为语义信息,参考Transformer中Encoder的理解,Text Encoder生成向量的质量直接影响了生成图片的质量。对于图像生成模型有2个衡量标准FIDCLIP

FID

  • 将图片送入CNN进行特征的提取,最后得到一个代表图像特征的向量(或特征图)

  • 对生成图片和真实图片求特征图

  • 求两个高斯分布之间的距离FID,越小代表生成的图片和真实图片越相近

image-20230525102159241

CLIP

  • 输入文字送入Text Encoder产生一个向量
  • 将生成的图像送入Image Encoder产生一个向量
  • CLIP代表输入文字和生成图片的对应关系,值越大越好
image-20230525102903826

3.2 Generation Model

Generation Model的任务是根据输入的语义向量产生中间产物,可以使用Diffusion Model变化版

Diffusion Model输出是图片,而Generation Model输出是中间产物,因此只是处理的对象发生了变化,基本原理是不变的,下图上半部分是Diffusion Model加噪音的处理过程,下半部分是Generation Model加噪音的处理过程

image-20230525103709663

加噪音的过程产生了训练noise predictor的训练数据,可以对其进行训练,下图表示了noise predictor的训练数据

image-20230525104116331

Generation Model生成中间产物的过程如下

image-20230525104247331

3.3 Decoder

Decoder的任务是将Generation Model生成的中间产物(人眼不可识别)转化为可识别的图片。

要训练Decoder就需要(中间产物,可识别图片)这样的数据集,采用的做法是引入一个Encoder,输入的真实图片,输出中间产物,这样就产生了训练Decoder的数据集,进而可以对Decoder进行训练

image-20230525103458389

参考:李宏毅2023机器学习课程

posted @ 2023-05-25 11:19  dctwan  阅读(61)  评论(0编辑  收藏  举报