AIGC之StableDiffusion安装与运行详细介绍
一、StableDiffusion简介
1.1StableDiffusion简介
StableDiffusion是一种文本到图像生成模型(Text-to-Image Generation Model),它可以根据输入的文本生成对应的图像。
StableDiffusion的原理是基于扩散模型,通过对图像不断添加噪声,然后训练如何从几乎完全是噪声的图像中恢复原始图像。模型训练结束后就可以从随机噪声图像开始反向扩散,一步步去除噪声,最终得到符合输入文本的图像。
StableDiffusion项目Github源代码地址为:https://github.com/Stability-AI/StableDiffusion
在线演示地址为:https://stablediffusionweb.com/zh-cn,需要注册登录。
1.2StableDiffusion的两种功能
StableDiffusion主要有两种用途,一种是根据输入的文本生成一张全新图片,一种是在现有图像基础上局部修复,修复的局部区域与原始的周围区域整体风格相符,这两种用途需要下载不同的预训练模型。
StableDiffusion将预训练模型文件放在了Hugging Face平台,平台上包含了多个版本,例如v1-4, v1-5, v2-1, xl-base-1.0等,不同版本在模型规模上有所差异,v1、v2、xl对显卡显存的占用也逐渐增加。
Hugging Face与Github平台类似,在国内下载速度较慢,可以使用它的镜像网站:https://hf-mirror.com/
本文使用v1-5版本的局部修复模型,模型项目原地址为:https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-inpainting/tree/main
镜像地址为:https://hf-mirror.com/stable-diffusion-v1-5/stable-diffusion-inpainting/tree/main
v1-5版本的生成全新图片的模型地址为:https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-v1-5/tree/main
二、StableDiffusion安装
2.1安装方式与环境要求
StableDiffusion安装有两种方法,一种是下载Github的项目源代码,然后参照Github页面上的指导进行安装。根据该页面介绍,环境要求最低版本为:pytorch1.12.1,torchvision0.13.1,transformers4.19.2。
第二种方式不必下载项目源代码,而只需安装diffusers、transformers等核心依赖库,经测试在pytorch1.10上虽然安装成功,但是运行报错,后更换pytorch版本为2.3运行正常,所以应该要求pytorch版本在2.0及以上,python版本应为3.11及以上。
下面以第二种方式进行安装。
2.2依赖包安装
环境中应已安装pytorch,opencv等库,且pytorch版本和python版本满足上一小节要求,
输入如下命令进行核心依赖包安装:
pip install diffusers transformers accelerate
2.3预训练模型下载
预训练模型下载,需要将整个模型项目下载下来,下载命令如下:
git lfs install
git clone https://huggingface.co/stable-diffusion-v1-5/stable-diffusion-inpainting
需要注意的是,上述通过Hugging Face官网下载的命令无法下载超过几百兆的模型文件,这是由于Hugging Face上的模型权重文件(.bin, .safetensors, .ckpt)都是通过Git LFS存储的,因此默认只会下载模型的指针文件(几KB),而不是实际的大文件,因此还要继续输入如下命令:
cd stable-diffusion-inpainting
git lfs pull
但是如果通过上一节提到的镜像网站下载,它会直接下载模型文件,而不是模型的指针文件,所以也不必输入第三第四条命令,而只需两条命令:
git lfs install
git clone https://hf-mirror.com/stable-diffusion-v1-5/stable-diffusion-inpainting
全部模型文件合计约7个G大小,下载需要一些时间,也可以使用上述命令将其他文件和目录结构下载下来,然后手动下载模型再复制到相应目录。
三、局部修复图片代码
3.1示例代码
示例代码如下:
from diffusers import StableDiffusionInpaintPipeline
from PIL import Image
import numpy as np
def generate_mask(image_path, prompt="fire", output_path):
pipe = StableDiffusionInpaintPipeline.from_pretrained(
"stable-diffusion-inpainting",
torch_dtype=torch.float16
).to("cuda")
image = Image.open(image_path).convert("RGB").resize((512, 512))
mask = Image.new("RGB", (512, 512), (0, 0, 0))
mask_data = np.array(mask)
mask_data[128:384,128:384]=255
mask=Image.fromarray(mask_data)
result = pipe(prompt=prompt, image=image, mask_image=mask).images[0]
result.save(output_path)
return
3.2代码说明与效果展示
首先是从diffusers导入StableDiffusionInpaintPipeline,然后传入预训练模型文件夹路径:stable-diffusion-inpainting,该路径需根据实际情况进行修改。
其次是关键的4个参数:
- 原始图像;
- prompt文本(描述要填充的内容);
- 修复后图像保存路径;
- mask图像,规则为白色区域会被修改,黑色区域会被保留。
上述代码中mask图像定义为:正中间256x256的矩形区域灰度值为255,设置为修复区域,其余区域灰度值为0,设置为保留区域,实际修复效果如下图所示:
原图:
修复图像:
而如果将mask图像保留与修复区域颠倒过来,则修复图像变为:
而如果将mask图像设置为整张图像修复,则会根据prompt生成一张全新的图片,如下图所示:
3.3小结
从上一小节展示的图片修复效果可以看到,生成的修复区域与周围保留区域即原始图像保持同一个图像风格,而且区域边缘细节与周围区域非常吻合,其次如果修复区域覆盖整张图像,那么相当于生成一张全新图片,也就是说使用修复模型也可以实现使用生成全新图片模型的效果,使用者可以下载一套模型而使用两个功能。