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个参数:

  1. 原始图像;
  2. prompt文本(描述要填充的内容);
  3. 修复后图像保存路径;
  4. mask图像,规则为白色区域会被修改,黑色区域会被保留

上述代码中mask图像定义为:正中间256x256的矩形区域灰度值为255,设置为修复区域,其余区域灰度值为0,设置为保留区域,实际修复效果如下图所示:
原图:
在这里插入图片描述
修复图像:
在这里插入图片描述
而如果将mask图像保留与修复区域颠倒过来,则修复图像变为:
在这里插入图片描述
而如果将mask图像设置为整张图像修复,则会根据prompt生成一张全新的图片,如下图所示:
在这里插入图片描述

3.3小结

从上一小节展示的图片修复效果可以看到,生成的修复区域与周围保留区域即原始图像保持同一个图像风格,而且区域边缘细节与周围区域非常吻合,其次如果修复区域覆盖整张图像,那么相当于生成一张全新图片,也就是说使用修复模型也可以实现使用生成全新图片模型的效果,使用者可以下载一套模型而使用两个功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值