Stable Diffusion详细讲解与使用
来源:极绘AI(jihuiai)
Stable Diffusion是当前图像生成行业应用最广泛的模型之一,尽管最广为人知的则是在文字到图像(text-to-image)生成方面的优势,可是Stable Diffusion还能够完成像图像翻译、图像修补、图像扩展及其分辨率提升等多种任务。与Diffusion model不同的是,Stable Diffusion的扩散流程出现于潜空间进行而非在像素空间,这个想法极大的提高了图像生成的速度,增强了Stable Diffusion在商业应用能力。
Stable Diffusion的基于文章High-ResolutionImageSynthesiswithLatentDiffusionModels使用来自LAION-5B数据库子集的512x512图像进行练习。下面主要从怎样使用Stable Diffusion及其Stable Diffusion的各部分组成与工作原理进行讲解。
1.怎样使用Stable Diffusion
方法一:运行官方代码
如果只是想简单看一下Stable Diffusion的效果,可以试一下官方Demo。可是Demo的生成速度太慢了,如果自己有服务器的话能直接跑官方代码,大约需要显存超过12G的一块GPU。
方法二:使用Colab
要是没有GPU还可以使用官方提供的Colab来使用Stable Diffusion,Colab是Google Research团队开发的一款商品。所有人都可以根据浏览器撰写与执行随意Python代码,并且可以得到GPU等计算资源的免费使用权限。Stable Diffusion Colab连接,进到Colab记得连接获得GPU资源。
方法三:Stable Diffusion webUI
是一个基于Gradio库的浏览器界面,用以使用Stable Diffusion。安装使用连接参照
方法四:Diffusion Bee(Mac客户)
假如你笔记本是Mac,还可以通过Diffusion Bee来使用Stable Diffusion。Diffusion Bee能够实现最简单的方法使用Stable Diffusion生成你的艺术作品,永久免费,能够线下运行而且不受限制。Diffusion Bee页面大约如下,只需在输入框中输入想要生成的文本,选择对应的参数,就可以生成你想要的图片。除此之外,Diffusion Bee还能够使用图像编写,图像补齐等服务。
2.Stable Diffusion的原理
由于Stable Diffusion的扩散出现于潜空间,因此需要编码器将图片压缩到潜空间,及其解码器将去噪的图像潜在表明还原到像素域也就是大家见到的照片。除此之外因为是文字生成图像,因此需要有文字参加指导图像的生成,那么文字怎样加入到去噪生成图像的过程中呢,这时候就要有文字编码器对文字予以处理。因此Stable Diffusion主要由4大部分构成,分别是VAE(encoder和decoder)、文字编码器、Unet(承担生成预测噪音)及其调度程序Scheduler(拷贝将预测噪音从潜变量中除掉)。
自编码器VAE
VAE模型有两部分,编码器和解码器。编码器用于将输入图像转换成潜区域的低维潜在表明,做为U-Net模型的输入。相反,解码器将潜在表明转换回图像。在潜在扩散模型训练期间,编码器用以获得潜在表明Z。推理期内,使用VAE解码器将反向扩散过程生成的去噪埋伏Z转换回图像。我们直接使用Stable Diffusion时不需要使用编码器,因为我们是直接使用训练好的Unet,模型会随机产生一个潜在噪音ZT,之后直接在文本的指导开展去噪,然后将去噪后的潜变量Z0给到解码器恢复到正常图像。
Stable Diffusion的Unet架构
Stable Diffusion使用Unet预测一个噪音,随后使用Scheduler将预测噪音从上一个时间戳的潜变量中减掉,一直重复直至修复恢复图像(t=0)。但是注意这里unet并不是大家接受的unet,仅由残差块组成的解码器与编码器模型。Stable Diffusion的Unet通常是采用Unet的架构,但模型实际做了很大改变,例如加入了transformer的一些模块,包含Self-attention和Cross-attention。文字或者其他的标准信息就是在Cross-attention层引进。
文字编码器
文字编码器承担转换输入提醒,比如将文字“骑马的航天员”映射到U-Net可以理解的置入空间内。它通常是一个简单的基于transformer的编码器,将输入标识序列映射到潜在文字置入序列。受Imagen的启发,Stable Diffusion不会附加训练文字编码器,而是直接使用CLIP早已训练好的文本编码器CLIP Text Model。
调度程序Scheduler
调度程序Scheduler主要从事将潜在变量中减掉预测噪音,逐渐去噪,最后可以获得没有噪声的潜在变量。与unet融合使用的调度程序,常见的选择有DDIMScheduler、LMMSDiscreteScheduler或PNDMScheduler。
Stable Diffusion生成过程
综合以上几个程序模块,Stable Diffusion的总体流程如下图。因为随机种子生成一个含义噪声的潜在表明,输入想要生成照片对应的文本,随后文字根据文字编码器获得Unet能够识别的信息用于指导去噪过程。Unet输入潜在表明与文本信息获得预测后的噪音,根据调度程序把预测好的噪音从潜在表明中减掉,反复T次直至清除完所有噪音,然后把去噪后的潜在表明输入到VAE解码器获得生成的照片。
目前,Stable Diffusion基于Diffusers获得了很快的发展,有各种的应用。Diffusers提供了各种便捷使用Stable Diffusion管道,客户也可以根据实际情况制做属于自己Stable Diffusion。比如,能够使用如下代码直接使用Stable Diffusion生成照片。