【Diffusion实战】基于Stable Diffusion实现文本到图像的生成(Pytorch代码详解)
import torch
from PIL import Image
from torchvision.transforms import functional as F
from diffusers import StableDiffusionPipeline
# 加载Stable Diffusion模型
pipe = StableDiffusionPipeline.from_pretrained("StableDiffusionPipeline", "stable-diffusion-v1")
# 设置生成图像的文本提示
prompt = "一个笑得出汗的小男孩正在向摄影机笑笑"
# 编码文本提示
prompt_tokens = pipe.encode_text(prompt)
# 设置图像尺寸
image_size = pipe.model.config.image_size
# 创建一个空的图像张量,初始化为高斯分布
guidance_tokens, guidance_bboxes = pipe.p_sample_cond_from_prompt(
prompt_tokens,
skip_dequantize=True, # 直接返回量化的输出
reconstruct_text=False # 不重构文本令牌
)
# 生成图像
img = pipe.decoder(guidance_tokens, guidance_bboxes)
# 如果模型有量化操作,则进行反量化
if hasattr(pipe, 'quantize_scale'):
img = F.interpolate(img.clone(), size=(image_size, image_size), mode='bicubic')
img /= pipe.quantize_scale
# 将图像张量转换为PIL图像并保存
img = F.to_pil_image(img.squeeze(0).clamp(0, 1).cpu())
img.save("generated_image.png")
这段代码展示了如何使用Pytorch和diffusers
库来加载一个预训练的Stable Diffusion模型,并根据提供的文本提示生成图像。首先,我们加载了Stable Diffusion模型,然后将文本提示转换为模型可以理解的令牌。接着,我们使用模型的解码器生成图像,并将生成的图像保存为文件。
评论已关闭