一:Transformer
Transformer是来自 NLP 领域的非常著名的模型方法。Transformer在语言建模和构建对话式 AI 工具方面取得了巨大成功。 在视觉应用中,Transformer 表现出了泛化和自适应的优势,这使得它们非常适合通用学习。 它们比其他技术能够更好地捕捉文本甚至图像中的语义结构。 然而,Transformers 需要大量数据,并且与其他方法相比,在许多视觉领域的性能方面也面临着瓶颈期。 Transformer可以与扩散模型结合,通过Transformer的“词嵌入”可以将文本插入到模型中。这意味着将词Token化后,然后将这种文本表示添加到U-Net的输入(图像)中,经过每一层U-Net神经网络与图像一起进行变换。从第一次迭代开始到之后的每一次迭代都加入相同的文本,从而让文本“作为指南”生成图像,从有完整噪声的第一次迭代开始,然后进一步向下应用到整个迭代。二:Latent Diffusion模型
Latent Diffusion模型不直接在操作图像,而是在潜在空间中进行操作。通过将原始数据编码到更小的空间中,让U-Net可以在低维表示上添加和删除噪声。(一)潜在空间(Lantent Space)
潜在空间简单的说是对压缩数据的表示,所谓压缩指的是用比原始表示更小的数位来编码信息的过程。比如我们用一个颜色通道(黑白灰)来表示原来由RGB三原色构成的图片,此时每个像素点的颜色向量由3维变成了1维度。维度降低会丢失一部分信息,然而在某些情况下,降维不是件坏事。通过降维我们可以过滤掉一些不太重要的信息你,只保留最重要的信息。(二)“潜在扩散模型”(Latent Diffusion Model)
将GAN的感知能力、扩散模型的细节保存能力和Transformer的语义能力三者结合,创造出更稳健和高效的生成模型。与其他方法相比,Latent Diffusion不仅节省了内存,而且生成的图像保持了多样性和高细节度,同时图像还保留了数据的语义结构。而基于Latent的扩散模型可以将这些过程压缩在低维的Latent隐空间,这样一来大大降低了显存占用和计算复杂度,这是常规扩散模型和基于Latent的扩散模型之间的主要区别,也是SD模型火爆出圈的关键一招。三:Stable Diffusion模型
传统的扩散模型(如DDPM)的做法是在像素空间预测预测噪声图noise_t,输入是每一步的图片image_t和代表step的Time embedding,然后在图片image_t上减去模型预测的噪声noise_t,得到image_t-1,如此迭代N步,即可得到可识别的图片。(一)Stable Diffusion算法原理
由于直接在图像上做diffusion的搜索空间太大,导致模型生成速度慢,且生成图像不可控,所以Latent Diffusion Model通过引入Cross Attention和隐空间机制,提升了模型的效率和可控性。Stable Diffusion(后文简称SD)是在LDM基础上,研发的一个文生图模型。由于SD的图片效果好、开源性强(模型、训练数据均开源),参数量小(仅1B左右,可以用消费级显卡调用),由此形成了良好的社区生态,推动了AIGC社区的蓬勃发展。 https://segmentfault.com/a/1190000043330934#item-7 训练数据里面既包含了图片描述和图像信息,相互训练Stable diffusion从文本生成图像的流程如下所示:
- Stable Diffusion在潜空间中生成随机张量。可以通过设置随 机数生成器的来控制此张量。如果将种子设置为某个值,获得 相同的随机张量。
- 网络 U-Net 将潜在噪声图像和文本提示作为输入,并预测噪 声,也在潜在空间(4x64x64 张量)中。
- 从潜在图像中减去潜在噪声。这将成为新潜在图像。
- 步骤 2 和 3 重复一定数量的采样步骤,例如 20 次
- 最后,VAE的解码器将潜在图像转换回像素空间,这是运行 Stable Diffusion后获得的图像。
(二)文生图
推理步骤:- 输入text用text encoder提取text embeddings
- 同时初始化一个随机噪音noise(latent上的,512x512图像对应的noise维度为64x64x4)
- 将text embeddings和noise送入扩散模型UNet中生成去噪后的latent
- 送入autoencoder的decoder模块得到生成的图像
(三)图生图
推理步骤:初始图像经过autoencoder编码之后的latent加高斯噪音得到,其余步骤与文生图一致四:结合LLM、LangChain的使用
Stable Diffusion是一种基于Diffusion模型的生成模型,通过逐步引入噪声来从随机状态生成数据。在图像生成方面,Stable Diffusion可以从无到有地创造出逼真的图片。 然而,仅仅依靠Stable Diffusion还不足以实现完全自动化的图像生成。这时,LangChain的角色就变得至关重要。LangChain是一种用于微调语言模型的框架,特别适用于调整生成模型的输出。通过使用LangChain,我们可以训练模型根据特定任务调整文本的生成,从而更好地满足我们的需求。 最后,LLM在控制整个流程中起着指挥棒的作用。LLM,如GPT系列模型,具有强大的理解和生成自然语言的能力。通过使用LLM,我们可以将具体的指令或主题转化为可被Stable Diffusion和LangChain理解的文本。那么,如何将这些技术结合起来呢?
- 首先,我们需要使用LLM生成一个描述图片内容的文本指令。这个指令可以是任何形式的语言,例如“一只坐在篮子里的红色小猫”。
- 然后,这个文本指令被输入到LangChain中进行微调。LangChain可以根据上下文或其他特定要求调整文本的生成,确保生成的文本与原始指令(给SD使用的指令)保持一致,同时更符合我们的期望。
- 最后,微调后的文本被输入到Stable Diffusion中,转化为逼真的图片。