Select Language

AI社区

AI技术百科

详解文生图视觉AIGC原理

概述

视觉领域的AIGC常用的几类技术:

  1. 其对比如下

GAN

这里简单阐述一下GAN做图像生成的优缺点,不对技术细节做展开

优点是保真度高,缺点是训练不够稳定,因为要同时训练生成器和判别器,存在一个平衡的问题,训练不好容易造成训练坍塌;另外GAN的目标是生成图片的尽量真实性,但是它生成的图片多样性确比较差,也就是创造性不是很好

Diffusion Model

framework

扩散模型,Diffusion一词来源于热力学

扩散现象是一个基于分子热运动的输运现象,是指物质分子从高浓度区域向低浓度区域转移直到均匀分布的现象

在扩散模型中包含两个过程

  • Forward Diffusion(图片 -> 随机噪声)

  • Reverse Diffusion(随机噪声 -> 图片)

其演化为DDPM -> improved DDPM -> Diffusion beats GAN -> CLIDE -> DALL.E2 -> Imagen

Forward Diffusion

整个Forward的过程如下:


framework

整个Diffusion的framework如下图所示

暂时无法在{app_display_name}文档外展示此内容

其中三个model分开训练,然后组合起来

我们分别看一下

  • Stable Diffusion

  • DALL.E2

  • Imagen

的framework:

Stable Diffusion

DALL.E2

Imagen

Text Encoder

文字的encoder对最终的效果影响也较大,常见手段是CLIP

CLIP

CLIP(Contrastive Language-Image Pre-training):Connecting text and images

CLIP是zero-shot的,迁移能力很强,其预训练采用的是对比学习,从上图左边可以看出,有N个正样本,有N^2-N的负样本; 这里用来预训练的数据集包含4亿清洗过的文本-图像对;

上图右侧展示了CLIP如何做zero-shot的,即完成一个图像分类任务,右图举例的是image-net的1000分类问题,如果给一个三轮车的图片,image-net的Resnet-101是无法精准识别的,而CLIP是可以的,这就是大模型vs小模型的魅力;

其迁移能力的图示如下所示:

而clip除了能应用于图像识别之外,在目标检测&语义分割上也能发挥作用

CLIP最大的一个创新是从自然语言中获得监督信号,相比传统任务的从图像中获取监督信号,其泛化能力很强

从自然语言中获得监督信号有两个好处:

  1. 不需要子任务的标注动作,同时现在标签是文本,而非之前的n选1的标签了,所以模型自由大就大了很多

  2. 因为现在把文字与图像绑定在一起,现在学到的不仅仅是一个视觉特征了,而是一个多模态特征;和语言产生联系后,就很容易做zero-shot这种迁移学习了

数据集

OpenAI自己构建数据集:图像文本数据WIT,即WebImage Text,总量4亿

训练效率

作者认为把预测型的目标函数替换为对比型的目标函数,训练效率一下子就提升了4倍

Image Encoder

模型上视觉侧,尝试过ResNet,Efficient Net,到最大的ViT large,即ViT-L/14(作者发现迁移学习的性能基本上和模型大小成正相关)

Text Encoder

作者尝试了CBOW ,到Text Transformer,其中的投射层是为了学习如何从单模态变成多模态

训练技巧

采用混精度训练(Mixed-precision)加速训练和节省内容(基本上涉及到Transformer的论文都会用到),超参搜索采用最小的resnet-50,并且只做了一个epoch,对于ViT-l,就没有去做搜参了

Zero-Shot Transfer

之前那些自监督或者无监督的方法,主要聚焦于学习representation learning,也就是特征学习的能力,它们的目标就是学一种泛化性比较好的特征,但即使学习到了很好的泛化特征,应用到下游任务时,还是需要有标签的数据去做微调,这里就涉及到诸多问题:下游任务不好收集数据;存在distribution shit问题等等;

如何训练一个模型,接下来就不再微调呢?这就是Zero-Shot Transfer 的研究动机,一旦借助文本训练出一个又大又好的模型之后,可以用文本作为引导,去灵活的做Zero-Shot Transfer; 要利用CLIP的Zero-Shot能力,需要借助prompt engineering,如上图分类任务将目标转化为句子

Generation Model

生成模型主要是基于文本embedding生成中间产物,这里的中间产物有两种可能的形态:

  1. 压缩图片(compressed image),比如Imagen

  2. 隐含表征(latent representation),比如DALL.E2,Stable Diffusion

而对于模型主体结构,以U-net形态为主

U-net

FCN是图像语义分割的开山之作,相比于普通的CNN是图像预测,而FCN则是像素预测

U-net则是对FCN全卷积的扩展,二者比较相似,都是编码和解码,即encoder-decoder的结构,但是和FCN相比,U-Net的第一个特点是完全对称,也就是左边和右边是很类似的,而FCN的decoder相对简单,只用了一个deconvolution的操作,之后并没有跟上卷积结构。第二个区别就是skip connection,FCN用的是加操作summation,U-Net用的是叠操作concatenation

U-net的左侧是做下采样,即contracting path路劲压缩,而右侧则是expansive path,即路劲扩展

compressed image

首先,通过以下方式训练Denoise

Noise Predicter训练过程如下(Forward Diffusion过程)

然后采用上述Denoise去构建Generation Model,完成生小图(Reverse Diffusion过程):

latent representation

同理,先训练面向latent representation的Denoise,其Noise Predicter训练如下图所示(Forward Diffusion过程):

然后采用上述Denoise去构建Generation Model,完成生latent representation(Reverse Diffusion过程):

Decoder

训练Decoder不需要文字与图像的pair,其只需要图像data,其训练同上分为两种情况:

  1. 压缩图片(compressed image),比如Imagen

  2. 隐含表征(latent representation),比如DALL.E2,Stable Diffusion

compressed image

当中间产物是压缩图时,把所有大图拿来,然后做downsampling变成小图,获取到成对的数据,然后就可以训练一个把小图变成大图的decoder

latent representation

当中间产物是隐含表征时,我们需要一个encoder做辅助,中间是latent representation:

我们训练时希望输入图片与输出图片越接近越好,训练完就把decoder拿出来用

评估

评估影像生产好坏的手段常见的是FID(Frechet Inception Distance) Score以及Clip Score




我要发帖
百科知识
2021-05-11 23:49:38加入圈子
  • 68

    条内容
提供人工智能的一些知识分享,涉及AI算法、应用、数据、模型等内容