AI技术百科
详解文生图视觉AIGC原理
概述
视觉领域的AIGC常用的几类技术:
其对比如下
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最大的一个创新是从自然语言中获得监督信号,相比传统任务的从图像中获取监督信号,其泛化能力很强
从自然语言中获得监督信号有两个好处:
不需要子任务的标注动作,同时现在标签是文本,而非之前的n选1的标签了,所以模型自由大就大了很多
因为现在把文字与图像绑定在一起,现在学到的不仅仅是一个视觉特征了,而是一个多模态特征;和语言产生联系后,就很容易做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生成中间产物,这里的中间产物有两种可能的形态:
压缩图片(compressed image),比如Imagen
隐含表征(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,其训练同上分为两种情况:
压缩图片(compressed image),比如Imagen
隐含表征(latent representation),比如DALL.E2,Stable Diffusion
compressed image
当中间产物是压缩图时,把所有大图拿来,然后做downsampling变成小图,获取到成对的数据,然后就可以训练一个把小图变成大图的decoder
latent representation
当中间产物是隐含表征时,我们需要一个encoder做辅助,中间是latent representation:
我们训练时希望输入图片与输出图片越接近越好,训练完就把decoder拿出来用
评估
评估影像生产好坏的手段常见的是FID(Frechet Inception Distance) Score以及Clip Score