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

文章目录

    • 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

from diffusers import StableDiffusionPipeline
import torchmodel_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.hqwc.cn/news/310647.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云 ACK 云上大规模 Kubernetes 集群高可靠性保障实战

作者:贤维 马建波 古九 五花 刘佳旭 引言 2023 年 7 月,阿里云容器服务 ACK 成为首批通过中国信通院“云服务稳定运行能力-容器集群稳定性”评估的产品, 并荣获“先进级”认证。随着 ACK 在生产环境中的采用率越来越高,稳定性保…

NFS的基本使用

#江南的江 #每日鸡汤:岁月匆匆,时光荏苒,感悟人生路漫漫,不忘初心方得始终。 #初心和目标:和从前的自己博弈。 NFS(存储共享服务) 本文要点摘要: 下面将讨论什么是NFS,如何配置NFS,…

Spring Boot快速搭建一个简易商城项目【完成登录功能且优化】

完成登录且优化: 未优化做简单的判断: 全部异常抓捕 优化:返回的是json的格式 BusinessException:所有的错误放到这个容器中,全局异常从这个类中调用 BusinessException: package com.lya.lyaspshop.exce…

基于metersphere和supper-jacoco 测试覆盖率落地实践

一、背景及目标 背景 1、技术研发流程为测试 提供冒烟用例-开发根据用例自测-提测-开始测试,这一套流程,但是中间开发是否真实执行冒烟,测试并不知晓,而且测试提供冒烟用例是否符合标准也没法进行量化 2、公司产品属于saas产品&…

一.windows2012搭建fpt服务器和常见端口介绍

一.windows2012搭建fpt服务器和常见端口介绍 1.打开防火墙2.创建组2.1打开计算机管理2.2创建组并且设置名称和描述 3.创建用户3.1设置用户密码和名称3.2把用户归属于组3.3把user删除掉3.4点击添加然后点高级3.5点击立即查找选择之前设定的组 4.安装ftp服务器4.1点击添加角色和功…

springBoot2.3-基本介绍及入门案例

本次学习雷丰阳springBoot(2.3版本)。建议先修ssm 一、SpringBoot基本介绍 springBoot是当今最为流行的java开发框架。 1、springBoot的底层是spring, 因此继承了spring的粘合其他框架的能力。 2、本质上还是其他框架包括spring在工作 , springBoot起到一个整合其他…

【进阶】【JS逆向爬虫】【2.JavaScript 基础语法】JS代码导入方式

JS逆向爬虫 JS代码导入方式1.行内式写法2.内嵌式&#xff08;建议写在</body>之前&#xff09;3.外部式&#xff08;建议写在</head>之前&#xff09; JS代码导入方式 1.行内式写法 可以将单行或少量 JS 代码写在HTML标签的事件属性中&#xff08;以 on 开头的属…

[设计模式 Go实现] 创建型~简单工厂模式

go 语言没有构造函数一说&#xff0c;所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式&#xff0c;也就是说Golang的一般推荐做法就是简单工厂。 代码实现 package simplefactoryimport "fmt"//API is interface type API interf…

在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo

Spring Cloud系列断更了有一段时间了&#xff0c;这段时间最近都在忙着项目上的事&#xff0c;天天修复bug以及调整需求&#xff0c;反正各种操劳&#xff0c;了解业务需求&#xff0c;然后开发相关功能&#xff0c;很久都没碰Spring Cloud系列的相关文章了&#xff0c;最近回头…

基于虚拟机ubuntu的linux和shell脚本的学习,以及SSH远程登陆实战

简介 特点 是一款操作系统,跟windows,macos一样,有下面的特点 简单和高效,一切皆文件,所有配置都通过修改文件解决,不需要繁琐的权限和设置 权限高,把所有细节都交给用户,可完全自定义 安全,所有程序只有自己执行才会启动 分类 1、debian系主要有Debian&#xff0c;Ubun…

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part2

TOP11&#xff1a;PCIe在狂飙&#xff0c;SAS存储之路还有多远&#xff1f; 随着科技的飞速发展&#xff0c;固态硬盘&#xff08;SSD&#xff09;已经成为现代计算机系统中不可或缺的一部分。它以其出色的性能和可靠性&#xff0c;改变了我们对于存储设备的期待。当前业内SSD广…

git 常用操作合集

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…