仅从文本描述中就能够创作出非凡的视觉图像,这已清晰地表明人类创作艺术的方式发生了转变。Stable Diffusion的发布是此发展历程中的一个里程碑事件,它为大众提供了一个高性能的模型。
国外大牛JayAlamma 的博文 [The Illustrated Stable Diffusion](The Illustrated Stable Diffusion)形象地描述了AI图像到底是如何被生成的,形象地解释了什么是stable diffusion,什么是diffusion。学习完大牛的博文后,我用自己的理解向大家介绍一下Stable Diffusion的原理。
Stable Diffusion不是一个整体模型,它由几个组件和模型组成。首先是文本理解组件
(text-understanding component ),将文本信息转换成数字表示,以捕捉文本中的想法。其次是图像生成器
(image generator),图像生成器包括两步,图像信息创建者( Image information creator)和图像解码器(Image Decoder)。
图像信息创建者这一组件运行多步以生成对象,这是stable diffusion接口和库中的步长参数,通常默认为50或者100。图像信息创建者完全在图像信息空间(隐藏空间)中工作,此特性比在像素空间中工作的扩散模型更快。
图像解码器根据从图像信息创建者哪里获得信息绘制图片,它仅仅在生成最终图像的结束阶段运行一次。
上图是stable diffusion的一个流程图,包含了上述描述的三个组件,每个组件都有相应的神经网络。
上述我们描述过“图像信息创建者”组件的功能,它以文本嵌入向量和由噪声组成的起始多维输入为输出,输出图像解码器用于绘制最终图像的信息阵列。扩散是发生在下图粉红色“图像信息创建者”组件内部的过程。
扩散这个过程是循序渐进的,每一步都会添加更多相关信息。扩散发生在多个步骤,每一步作用于一个输入latents array,生成另一个latents array,该数组能够更好类比输入文本和模型从训练模型中的所有图像中获取的所有视觉信息。下图将每一步生成的latents array作为图像解码器的输入,可视化了每一步中添加了什么信息。下图的diffusion迭代了50次,随着迭代步数的增加,latents array解码的图像越来越清晰。
扩散模型生成图像的主要思路基于业内已有强大的计算机视觉模型这一基础上。只要数据集够大,模型就可以学习到更复杂的逻辑。
假设有一张照片,有一些随机生成的噪声,然后随机选择一个噪声添加到此图像上,这样构成一条训练样本。用相同的方式可以生成大量的训练样本组成训练集,然后使用这份训练数据集,训练噪声预测器(UNet)。训练结束后将会得到一个高性能的噪声预测器,在特定配置下运行时创建图像。
基于上述描述构建的噪声训练集训练得到一个噪声预测器,噪声预测器可以产生一个噪声图像,如果我们从图像中减去此生成的噪声图像,那么就能够得到与模型训练样本尽可能接近的图像,这个接近是指分布上的接近,比如天空通常是蓝色的,人类有两个眼等。生成图像的风格倾向于训练样本存在的风格。
上述描述的扩散生成图像并不包括任何文本图像,但是图像生成器的输入包括文本嵌入向量和由噪声组成的起始多维数组,所以调整噪声生成器来适配文本。这样基于大量训练数据训练后既可以得到图像生成器。基于选择的文本编码器加上训练后的图像生成器,就构成了整个stable diffusion模型。可以给定一些描述性的语句,整个stable diffusion模型就能够生成相应的画作。