AIGC-Stable Diffusion

Stable Diffusion(稳定扩散)是一种生成式大模型,它在AI领域中标志着一个新的里程碑,为我们揭示了未来将会是AIGC的时代。传统的深度学习模型逐渐向AIGC过渡,这也意味着我们需要学习更多关于AIGC的内容。

如果你和我一样是AIGC的初学者,那么学习AIGC模型的基础知识是非常重要的。Stable Diffusion作为一个强大的模型,有着很高的适用性,特别是在生成式任务方面。通过学习它的基本理论和应用,可以更好地理解复杂网络中的信息传播规律,并掌握不同场景下的生成技术。

总之,Stable Diffusion是一个引人注目的模型,它的出现标志着AI领域的一个新的发展方向,并且未来的趋势将会是由AIGC模型主导。如果对此感兴趣,那么深入学习AIGC的内容将会是非常有益的。【文末含SD搭建与使用】


在学习Stable Diffusion之前,了解DDPM的内容是必要的。

在我之前的文章中简单介绍了一下有关DDPM的内容,有兴趣的可以看一下:AIGC-从代码角度去理解DDPM(扩散模型)

因为本地环境受限(显存、算力),因此部分内容可能分析比较浅显请见谅~


Stable Diffusion(SD)是由Stability AI和LAION共同研发的一种生成式模型。该模型可以应用于文生图和图生图任务,并且还包括后续的定制生成图像任务,如ControlNet等。

从模型名称上可以看出,SD模型中包含了"Diffusion"一词,这意味着它与DDPM类似,具备去噪的过程。而对于图生图任务来说,还会涉及到加噪的过程。

本文将主要介绍文生图任务,探讨SD模型在该任务中的应用。


文生图是指用户输入一段文字,经过一定的迭代次数,模型输出一张符合文字描述的图像。

SD模型的组成

SD模型主要包含了以下几个部分:

1.CLIP Text Encoder(文本编码器)

作用:将文本信息进行编码生成对应的特征矩阵方便输入到SD模型中。

2.VAE Encoder(变分自编码器)

作用:生成Latent Feature(隐空间特征)和文本特征同时作为模型输入。如果是图生图任务则将图像进行编码生成Latent Feature;如果是文生图则用随机生成的高斯噪声矩阵作为Latent Feature作为输入。【也就是在输入SD模型前有两个输入,文本特征和隐空间特征】

3.U-Net网络

作用:用于不断地预测噪声 ,并在每次预测噪声过程中加入文本 语义特征

4.Schedule

作用:对UNet预测的噪声进行优化处理(动态调整预测的噪声,控制U-Net预测噪声的强度)

5.VAE Decoder(解码器)

作用:将最终得到的Latent Feature经过解码器生成图像

在SD的迭代过程中(去噪过程),噪声会不断的减少,图像信息和文本语义信息会不断的增加。

大致过程如下:


SD基础原理

其实不论是GAN、DDPM还是说SD模型,都和其他的深度学习算法一样,都是在训练中学习训练集的数据分布。

SD和DDPM一样,都有扩散过程(加噪过程)和生成过程(去噪过程)。

在前向的扩散过程中,会通过不断的加噪得到随机高斯噪声分布。在生成过程中是对噪声图像不断的去噪得到最终的图像。过程如下,整个加噪和去噪的过程是马尔科夫链

前向扩散过程(加噪):

前向的扩散过程就是一个不断加噪的过程,我们可以对一张图不断的加噪直至生成一张随机噪声矩阵(控制加噪的步数即可),也就是由前面说的Schedule进行控制。

反向生成过程(去噪):

反向生成与前向扩散相反,该过程是已知一个噪声分布,由模型进行推理预测得到预测噪声的过程。

那么训练过程就是将预测噪声和实际的输入噪声之间建立loss进行训练【该部分我在我的另一篇DDPM有讲过】。


快速搭建SD模型

搭建SD的方式有很多种,我这里先以diffusers搭建SD为例(仅含推理部分)。

安装diffusers库以及依赖:

python 复制代码
pip install diffusers==0.18.0 -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

pip install transformers==4.27.0 accelerate==0.12.0 safetensors==0.2.7 invisible_watermark -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

接下来就可以快速调用SD

python 复制代码
from diffusers import StableDiffusionPipeline


#初始化SD模型,加载预训练权重
pipe = StableDiffusionPipeline.from_pretrained("F:/BaiduNetdiskDownload/stable-diffusion-v1-5")


pipe.to("cuda")

#如GPU的内存不够,可以加载float16
pipe = StableDiffusionPipeline.from_pretrained("F:/BaiduNetdiskDownload/stable-diffusion-v1-5",revision="fp16",torch_dtype=torch.float16)

#输入prompt
prompt = "a photograph of an astronaut riding a horse"
steps = 50
image = pipe(prompt, height=512, width=512, num_inference_steps=steps).images[0]
image.save('SD_image.png')

其中:num_inference_steps表示优化的次数,数值越大越好,但需要的时间也会多。

输出尺寸模型为512x512,较低的分辨率生成效果也不好。

如果是低算力,或者用CPU推理也是可以的,但效果就是很好了~

比如我在我的电脑上用cpu进行推理【我的显卡1650 4G的太拉跨了】,效果如下:

文章参考

1 Rocky Ding.深入浅出完整解析Stable Diffusion(SD)核心基础知识

2 Bubbliiiing.AIGC专栏2------Stable Diffusion结构解析-以文本生成图像(文生图,txt2img)为例

相关推荐
yingyuecom3 小时前
Seedance 2.5正式发布:映悦AI迎来“更长、更可控、更极致”的视频生成时代
人工智能·gpt·chatgpt·prompt·aigc
手写码匠5 小时前
华为云Flexus+DeepSeek征文|Dify 多 Agent 故障演练实战:用混沌工程主动“搞破坏“,让智能体系统越炸越稳
人工智能·深度学习·算法·aigc
leeyi6 小时前
Callback 源码:aspect_inject 切面注入(第87篇-E73)
aigc·agent·ai编程
牛哇网络工作室16 小时前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
怕浪猫17 小时前
DeepSeek Harness 源码实战第2章:Cordis——驱动 dsh 的插件引擎
aigc·openai·agent
王莹月21 小时前
生图API 出问题怎么定位?给调用加 traceId 和结构化日志(nano-banana-pro)
gpt·ai·chatgpt·ai作画·aigc·agi
网易云信1 天前
政企共建!全国首个网易智企 AI OPC 社区落地衢州
aigc·agent
豌豆学姐1 天前
likeadmin-api 数字人任务查询实战:image_human/query 如何处理排队、完成和失败
人工智能·aigc·api·数字人·异步任务
一只叫煤球的猫1 天前
开个新坑,从头开始完整拆解 Spring AI 2.0 的源码
后端·面试·aigc
李妍.1 天前
DeepSeek Harness 从安装到使用:一站式 AI 开发工具指南
chatgpt·prompt·aigc·agi