【文生图系列】 Stable Diffusion v1复现教程

news/2024/7/10 18:58:44 标签: stable diffusion, python, 人工智能

文章目录

    • Stable Diffusion v1
      • 环境配置
      • 权重下载
      • txt2img
        • bug
        • 超参数
      • Diffusers
    • 参考

Stable Diffusion v1

stable diffusion是一个潜在的文本到图像的扩散模型,能够在给定任何文本输入的情况下生成照片逼真的图像。

环境配置

https://github.com/CompVis/stable-diffusion.git ( Stable Diffusion v1)
conda env create -f environment.yaml 使用conda创建一个名字为ldm的虚拟环境
conda activate ldm

权重下载

在README.md中,点击权重下载链接时,出现的huggingface页面,有Dataset card、Files and versions和Community,但是找不到ckpt文件。这个时候需要在红色的框中输出"stable-diffusion-v1",转到runwayml/stable-diffusion-v1-5界面。
在这里插入图片描述

v1-5用v1-2的权重进行初始化,随后在"laion-aesthetics v2 5+"上以分辨率 512 × 512 512 \times 512 512×512微调了595k步,将文本条件降低了10%,以提高classifier-free guidance sampling。v1-5提供了两个ckpt,v1-5-pruned-emaonly.ckpt,4.27G,使用较少的VRAM,适用于推理。v1-5-pruned.ckpt较重,7.7G,使用更多的VRAM,适合微调。

v1-5-pruned-emaonly.ckpt下载链接: https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.ckpt
v1-5-pruned.ckpt下载链接:https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned.ckpt

在这里插入图片描述

txt2img

mkdir -p models/ldm/stable-diffusion-v1/
将下载好的v1-5-pruned-emaonly.ckpt模型放到models/ldm/stable-diffusion-v1/文件夹下,并更名为model.ckpt,不然会报找不到model的错误,软链接不行。也可以定义txt2img的ckpt超参数,设定模型的位置。
python scripts/txt2img.py --prompt “a photograph of an astronaut riding a horse” --plms

在这里插入图片描述

bug

在这里插入图片描述

运行txt2img.py时,报上述ImportError错误,受issues_627启发,可能diffusers和transformers的版本太高了,所以降低diffusers和transformers的版本。在environment.yaml中更改diffusers和transformers的版本号,更新conda env update -f environment.yaml,bug消除,正常运行。

diffusers: 0.16.1 —> 0.15.0
transformers: 4.19.2 —>4.28.1

python scripts/txt2img.py --prompt “a photograph of an astronaut riding a horse” --plms
依据提示词"a photograph of an astronaut riding a horse",生成如下六张图片。六张图片中有两张图片宇航员没有骑马,其他四张图片,完成度还不错。
在这里插入图片描述

超参数

txt2img的超参数解释如下所示。在推理时,可以通过设定相应的参数得到符合要求的图片。

参数用途
prompt提示词
outdir结果保存文件夹,默认是outputs/txt2img-samples
skip_grid不保存网格,只保存单个样本。在评估大量样本时很有用
skip_save不保存单个样本,用于速度测量
ddim_stepsddim 采样步骤数
plms使用plms采样
laion400m使用LAION400M模型
fixed_code如果启用,样本见使用相同的起始代码
ddim_etaddim eta,默认为0.0,eta=0.0对应于确定性采样
H像素空间上的图像高度,默认是512
W像素空间上的图像宽度,默认是512
C隐藏通道数,默认是4
f下采样因子,默认是8
n_samples每个给定提示输出的样本数量,又称批次,默认是3
n_rows网格中的行,默认是n_samples
scale无条件制导标度,默认是7.5,eps = eps(x, empty) + scale * (eps(x, cond) - eps(x, empty))
from-file从文件中导入提示词
config模型的config文件,默认是"configs/stable-diffusion/v1-inference.yaml"
ckpt模型checkpoint的位置,默认是"models/ldm/stable-diffusion-v1/model.ckpt"
seed用于重复取样的种子,默认是42
precision以精度进行评估,有"full"和"autocast"两种选择,默认是"autocast"

当以下面命令行python scripts/txt2img.py --prompt "A classical Chinese Tang Dynasty beauty is drinking tea" --plms --skip_grid运行时,并没有生成上面和宇航员一样的网格图,有四张图片并保存下来。下面是其中生成的最好的照片。典型的唐朝仕女,有茶,但是在喝茶的动作并没有表现出来。
在这里插入图片描述

Diffusers

python">from diffusers import StableDiffusionPipeline
import torch

model_id = "runwayml/stable-diffusion-v1-5"
pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16)
pipe = pipe.to("cuda")

prompt = "a photo of an astronaut riding a horse on mars"
image = pipe(prompt).images[0]  
    
image.save("astronaut_rides_horse.png")

下述是上述代码的运行结果展示。
在这里插入图片描述
在这里插入图片描述

生成结果如下,只生成一个宇航员在火星上,提示词中的horse并没有出现。

在这里插入图片描述

参考

  1. CompVis/stable-diffusion
  2. runwayml/stable-diffusion-v1-5

http://www.niftyadmin.cn/n/398703.html

相关文章

技术分享 | App常见bug解析

【摘要】 功能Bug内容显示错误前端页面展示的内容有误。这种错误的产生有两种可能1、前端代码写的文案错误2、接口返回值错误功能错误功能错误是在测试过程中最常见的类型之一,也就是产品的功能没有实现。比如图中的公众号登录不成功的问题。界面展示错乱产品界面上…

01 云原生生态系统解读

云计算的技术革命 互联网时代的历程 云计算到底是什么 云计算历程 云平台的优缺点 优势 稳定性:云平台大量资源,分布式集群部署,保障服务永不宕机,几个9弹性扩展:按需索取,一键秒级开通需要的资源安全性&…

QLoRA:量化 LLM 的高效微调

此 repo 支持论文“QLoRA:量化 LLM 的高效微调”,旨在使对 LLM 研究的访问民主化。 QLoRA 使用bitsandbytes进行量化,并与 Hugging Face 的PEFT和transformers库集成。QLoRA 由华盛顿大学 UW NLP 小组的成员开发。 概述 我们介绍了 QLoRA&…

CDS Core Data Services S4 CDS view--1

下一代的数据库视图。比DDIC view能干。 也就是S4上了之后就用这个CDS view了。 目录 1. 软件安装 2. CDS view 是啥 3. 怎么去建CDS view 4. 如何修改一个CDS view,添加association关联 5. 一些有用的功能 6. 基础语法 6.1 Case 6.2 Cast 6.3 String 6…

Python入门教程+项目实战-13.2节-集合的操作方法

目录 13.2.1 集合的常用操作方法 13.2.2 集合的查找 13.2.3 集合的添加 13.2.4 集合的删除 13.2.4 集合运算 13.2.5 知识要点 13.2.6 系统学习python 13.2.1 集合的常用操作方法 集合类型是一种抽象数据类型,抽象数据类型定义了数据类型的操作方法&#xff…

以太坊是匿名化的影子银行?将如何适应并影响传统金融?

以太坊经常被描述为传统金融权力的对立面。实际上,以太坊的目标并不是去颠覆传统金融领域,而试图去补充和改善它。未来,这两个系统将会有更多的交集。 多极世界中的中立性 以太坊并不是一种隐形的货币替代品和匿名的影子银行,目前…

【后量子密码】SPHINCS+ 算法(一):FORS与超树(附源码分析)

一、基于哈希签名 基于哈希签名方案最初在20世纪70年代末由Lamport 提出作为一次性签名方案(one-time signature,OTS),并由Merkle 扩展为多次签名方案。这些方案的安全性易于分析,仅依赖于所使用的哈希函数的特性。OTS(One-Time Signature)是一种只能使用一次的签名方案…

GitHub进不去或者响应满的轻松提速教程

1.先打开记事本用管理员身份运行,打开hosts hosts文件路径:C:\Windows\System32\drivers\etc\hosts,选所有文件,选中hosts文件 打开就是这样 如果打不开,修改一下文件的属性为可编辑 2.通过 https://www.ipaddress.com…