Stable Diffusion 是一个非常强大的图像生成模型,可以通过输入文本生成高质量的图像。本文将介绍如何在本地部署并使用 Stable Diffusion,具体步骤如下:
前提条件
在开始之前,确保你已经安装了以下软件和工具:
Python 3.7 及以上版本
CUDA 11.0 及以上版本(如果你有 NVIDIA GPU)
git
pip
步骤一:克隆项目仓库
首先,我们需要从 GitHub 上克隆 Stable Diffusion 项目仓库。
git clone https://github.com/CompVis/stable-diffusion.git
cd stable-diffusion
步骤二:创建并激活虚拟环境
为了避免依赖冲突,建议创建一个 Python 虚拟环境。
python -m venv venv
source venv/bin/activate # Linux/macOS
venv\Scripts\activate # Windows
步骤三:安装依赖
在激活虚拟环境后,安装项目所需的所有依赖。
pip install -r requirements.txt
步骤四:下载预训练模型
Stable Diffusion 需要预训练模型才能生成图像。你需要从官方网站或项目页面下载模型权重,并将其放置在项目的指定目录中。
# 假设模型文件为 model.ckpt
mkdir -p models/ldm/stable-diffusion-v1/
mv model.ckpt models/ldm/stable-diffusion-v1/model.ckpt
步骤五:运行图像生成脚本
我们可以使用提供的脚本来生成图像。以下是一个简单的示例,生成一张图像并保存到本地。
import torch
from pytorch_lightning import seed_everything
from omegaconf import OmegaConf
from ldm.util import instantiate_from_config
from ldm.models.diffusion.ddim import DDIMSampler
def load_model_from_config(config, ckpt):
print(f"Loading model from {ckpt}")
pl_sd = torch.load(ckpt, map_location="cpu")
sd = pl_sd["state_dict"]
model = instantiate_from_config(config.model)
model.load_state_dict(sd, strict=False)
return model
# 加载配置和模型
config = OmegaConf.load("configs/stable-diffusion/v1-inference.yaml")
model = load_model_from_config(config, "models/ldm/stable-diffusion-v1/model.ckpt")
device = torch.device("cuda") if torch.cuda.is_available() else torch.device("cpu")
model.to(device)
# 设置生成参数
sampler = DDIMSampler(model)
seed_everything(42)
batch_size = 1
prompt = "a beautiful landscape"
data = [batch_size * [prompt]]
# 生成图像
with torch.no_grad():
with model.ema_scope():
uc = model.get_learned_conditioning(batch_size * [""])
c = model.get_learned_conditioning(data[0])
shape = [4, 64, 64]
samples_ddim, _ = sampler.sample(S=50, conditioning=c, batch_size=batch_size, shape=shape, verbose=False)
x_samples_ddim = model.decode_first_stage(samples_ddim)
x_samples_ddim = torch.clamp((x_samples_ddim + 1.0) / 2.0, min=0.0, max=1.0)
# 保存生成的图像
from PIL import Image
import numpy as np
for i, sample in enumerate(x_samples_ddim):
img = Image.fromarray((255. * sample.cpu().numpy().transpose(1, 2, 0)).astype(np.uint8))
img.save(f"output_{i}.png")
将上述代码保存为 generate.py 文件,并运行:
python generate.py
步骤六:结果查看
运行脚本后,会在当前目录下生成一个名为 output_0.png 的图像文件。你可以打开并查看生成的图像。
总结
通过上述步骤,我们成功地在本地部署并运行了 Stable Diffusion。你可以根据需要调整生成参数或尝试不同的文本提示,以生成更多有趣的图像。
希望这篇教程对你有所帮助!如果你有任何问题或建议,欢迎在评论区留言。