如何在本地运行稳定扩散模型

news2024/11/23 22:09:57
推荐基于稳定扩散(stable diffusion) AI 模型开发的自动纹理工具: DreamTexture.js自动纹理化开发包 - NSDT

继 DALL-E 2 和 Imagen 之后,新的深度学习模型 Stable Diffusion 标志着文本到图像领域的巨大飞跃。本月早些时候发布的 Stable Diffusion 承诺通过在消费级 GPU 上运行足够高效,使文本条件图像生成民主化。就在本周一,Stable Diffusion 检查点首次发布,这意味着现在,您只需几句话和几分钟的时间即可生成如下图像。

本文将向您展示如何在 GPU 和 CPU 上安装和运行 Stable Diffusion,以便您可以开始生成自己的映像。让我们开始吧!

想了解 Stable Diffusion 的工作原理吗?

查看我们关于物理学如何推进生成式 AI 的文章,直观地解释 Stable Diffusion 等扩散模型。

在 Colab 中使用 Stable Diffusion

在我们了解如何在本地安装和运行 Stable Diffusion 之前,您可以查看下面的 Colab 笔记本,以了解如何在非本地使用 Stable Diffusion。请注意,您将需要 Colab Pro 才能生成新图像,因为 Colab 的免费版本的 VRAM 略小,无法进行采样。

Colab (GPU) 中的稳定扩散

如果您没有 Colab Pro,您也可以在 Colab 的 CPU 上运行 Stable Diffusion,但请注意,图像生成将花费相对较长的时间(8-12 分钟):

Colab (CPU) 中的稳定扩散

您还可以在 YouTube 上查看我们的稳定扩散教程,了解使用 GPU 笔记本的演练。

如何安装 Stable Diffusion (GPU)

你将需要一个基于 UNIX 的操作系统来学习本教程,因此,如果你有一台 Windows 计算机,请考虑使用虚拟机或 WSL2。

第 1 步:安装 Python

首先,通过在终端中键入内容来检查系统上是否安装了 Python。如果返回 Python 版本,请继续执行下一步。否则,请使用python --version

sudo apt-get update 
yes | sudo apt-get install python3.8

第 2 步:安装 Miniconda

接下来,我们需要确保安装了包/环境管理器 conda。进入终端。如果返回 conda 版本,请继续执行下一步。conda --version

否则,请转到 conda 网站,下载并运行适用于您的 Python 版本和操作系统的 Miniconda 安装程序。对于 Python3.8,您可以使用以下命令下载并运行安装程序:

wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.12.0-Linux-x86_64.sh bash Miniconda3-py38_4.12.0-Linux-x86_64.sh

按住 Enter 键以通过许可证,然后在出现提示时键入“yes”以继续。接下来,按 Enter 确认安装位置,然后在询问安装程序是否应初始化 Miniconda 时键入“yes”。最后,关闭终端,然后打开一个新终端,在其中安装 Stable Diffusion。

第 3 步:克隆稳定的扩散存储库

现在我们需要克隆 Stable Diffusion 存储库。在终端中,执行以下命令:

git clone https://github.com/CompVis/stable-diffusion.git 
cd stable-diffusion/

如果您没有 git,则需要使用 .在克隆存储库之前,请确保阅读并接受 Stable Diffusion 许可证。sudo apt install git

步骤 4:创建 Conda 环境

接下来,我们需要创建一个 conda 环境,其中包含运行 Stable Diffusion 所需的所有包。执行以下命令以创建并激活此环境,名为ldm

conda env create -f environment.yaml 
conda activate ldm

第 5 步:下载稳定的扩散砝码

现在,我们正在适当的环境中使用 Stable Diffusion,我们需要下载运行它所需的权重。如果您尚未阅读并接受 Stable Diffusion 许可证,请务必立即阅读并接受。已经发布了几个 Stable Diffusion 检查点版本。较高的版本号已在更多数据上进行了训练,并且通常比较低的版本号性能更好。我们将使用检查点 v1.4。使用以下命令下载权重:

curl https://f004.backblazeb2.com/file/aai-blog-files/sd-v1-4.ckpt > sd-v1-4.ckpt

这就是我们开始使用 Stable Diffusion 所需的所有设置!请继续阅读,了解如何使用模型生成图像。

如何生成具有稳定扩散 (GPU) 的图像

要使用 Stable Diffusion 生成图像,请打开终端并导航到目录。通过执行命令确保您处于正确的环境中。stable-diffusionconda activate ldm

若要生成映像,请运行以下命令:

python scripts/txt2img.py --prompt "YOUR-PROMPT-HERE" --plms --ckpt sd-v1-4.ckpt --skip_grid --n_samples 1

故障 排除

替换为要为其生成图像的标题的位置(保留引号)。在提示“蜥蜴骑滑雪板穿越太空的逼真蒸汽波图像”的情况下运行此命令将输出以下图像:YOUR-PROMPT-HERE

上图是在 GCP 中使用 Ubuntu 18.04 VM 和 NVIDIA Tesla K80 在大约一分钟内生成的。

脚本选项

您可以使用多个命令行参数自定义此脚本,以根据需要定制结果。让我们来看看一些可能会派上用场的:

  1. --prompt后跟引号中的句子将指定为其生成图像的提示。默认值为“弹吉他的病毒怪物的画作”。
  2. --from-file指定用于为其生成图像的提示文件的 FilePath。
  3. --ckpt后跟一个路径,指定要使用的模型检查点。缺省值为 。models/ldm/stable-diffusion-v1/model.ckpt
  4. --outdir后跟路径将指定要保存生成图像的输出目录。缺省值为 。outputs/txt2img-samples
  5. --skip_grid将跳过创建合并的图像。
  6. --ddim_steps后跟一个整数,指定扩散过程中的采样步骤数。增加此数字将增加计算时间,但可能会改善结果。默认值为 50。
  7. --n_samples后跟一个整数指定每个给定提示要生成的样本数(批处理大小)。默认值为 3。
  8. --n_iter后跟一个整数,指定运行采样循环的次数。实际上与 相同,但如果遇到 OOM 错误,请使用它。有关说明,请参阅源代码。默认值为 2。--n_samples
  9. --H后跟一个整数,指定生成图像的高度(以像素为单位)。默认值为 512。
  10. --W后跟一个整数,指定生成图像的宽度(以像素为单位)。默认值为 512。
  11. --scale后跟浮点数指定要使用的指导比例。默认值为 7.5
  12. --seed后跟一个整数允许设置随机种子(以获得可重现的结果)。默认值为 42。

您可以在文件中看到具有默认值的可能参数的完整列表。现在,让我们看到使用这些可选参数的更复杂的生成提示。txt2img.py

在目录中,创建一个名为 .创建多个提示,文件的每一行一个提示。例如:stable-diffusionprompts.txt

现在,在终端的目录中,运行stable-diffusion

python scripts/txt2img.py \
--from-file prompts.txt \
--ckpt sd-v1-4.ckpt \
--outdir generated-images \
--skip_grid \
--ddim_steps 100 \
--n_iter 3 \
--H 256 \
--W 512 \
--n_samples 3 \
--scale 8.0 \
--seed 119

每个标题的两个结果图像可以在下面看到。上面的命令旨在用作使用更多命令行参数的示例,而不是最佳参数的示例。一般来说,经验发现较大的图像质量更高,图像/标题相似度更高,较低的引导比例可能会产生更好的结果。继续阅读下一节,了解有关改善稳定扩散结果的更多信息。

如何安装 Stable Diffusion (CPU)

第 1 步:安装 Python

首先,通过在终端中键入内容来检查系统上是否安装了 Python。如果返回 Python 版本,请继续执行下一步。否则,请使用python --version

sudo apt-get update 
yes | sudo apt-get install python3.8

第 2 步:下载存储库

现在我们需要克隆 Stable Diffusion 存储库。我们将使用一个可以容纳 CPU 推理的 fork。在终端中,执行以下命令:

git clone https://github.com/bes-dev/stable_diffusion.openvino.git 
cd stable_diffusion.openvino

如果您没有 git,则需要使用 .在克隆存储库之前,请确保阅读并接受 Stable Diffusion 许可证。sudo apt install git

第 3 步:安装要求

安装所有必要的要求

pip install -r requirements.txt

请注意,Scipy 版本 1.9.0 是列出的要求,但它与旧版本的 python 不兼容。您可能需要通过编辑来更改 Scipy 版本,例如 在运行上述命令之前。requirements.txtscipy==1.7.3

第 4 步:下载稳定的扩散砝码

现在,我们正在适当的环境中使用 Stable Diffusion,我们需要下载运行它所需的权重。如果您尚未阅读并接受 Stable Diffusion 许可证,请务必立即阅读并接受。已经发布了几个 Stable Diffusion 检查点版本。较高的版本号已在更多数据上进行了训练,并且通常比较低的版本号性能更好。我们将使用检查点 v1.4。使用以下命令下载权重:

curl https://f004.backblazeb2.com/file/aai-blog-files/sd-v1-4.ckpt > sd-v1-4.ckpt

这就是我们开始使用 Stable Diffusion 所需的所有设置!请继续阅读,了解如何使用模型生成图像。

如何生成具有稳定扩散 (CPU) 的图像

现在一切都已安装完毕,我们准备使用 Stable Diffusion 生成图像。要生成图像,只需运行以下命令,将提示更改为所需的任何内容。

python demo.py --prompt "bright beautiful solarpunk landscape, photorealism"

推理时间大约为 8-12 分钟,因此在 Stable Diffusion 运行时,请随时喝杯咖啡。下面我们可以看到运行上述命令的输出:

技巧和窍门

当您开始使用 Stable Diffusion 时,请在探索时牢记这些提示和技巧。

快速工程

文本到图像模型的结果可能对用于描述所需场景的措辞很敏感。提示工程是定制提示以获得所需结果的实践。例如,如果生成的图像质量较低,请尝试在标题前面加上“an image of”。您还可以指定不同的样式和媒介,以实现不同的效果。查看以下每个下拉菜单以获取想法:

图像类型:

尝试在标题前面加上以下内容之一,以获得不同的效果:

"A photograph of"
"A headshot of"
"A painting of"
"A vision of"
"A depiction of"
"A cartoon of"
"A drawing of"
"A figure of"
"An illustration of"
"A sketch of"
"A portrayal of"
风格

您可以指定不同的样式来实现不同的结果。尝试将以下一个或多个形容词添加到提示中并观察效果。

"Modernist(ic)"
"Abstract"
"Impressionist(ic)"
"Expressionist(ic)"
"Surrealist(ic)"
美学

您也可以尝试指定不同的美学。尝试将以下一个或多个形容词添加到提示中并观察效果。

"Vaporwave"
"Synthwave"
"Cyberpunk"
"Solarpunk"
"Steampunk"
"Cottagecore"
"Angelcore"
"Aliencore"
艺术家

您甚至可以尝试指定不同的艺术家来实现不同的视觉效果。尝试将以下选项之一附加到提示符中:

画家:
	"in the style of Vincent van Gogh"
	"in the style of Pablo Picasso"
	"in the style of Andrew Warhol"
	"in the style of Frida Kahlo"
	"in the style of Jackson Pollock"
	"in the style of Salvador Dali"
雕刻家:
	"in the style of Michelangelo"
	"in the style of Donatello"
	"in the style of Auguste Rodin"
	"in the style of Richard Serra"
	"in the style of Henry Moore"
建筑师:
	"in the style of Frank Lloyd Wright"
	"in the style of Mies van der Rohe"
	"in the style of Eero Saarinen"
	"in the style of Antoni Gaudi"
	"in the style of Frank Gehry"

调整采样参数

在调整采样参数时,您可以利用以下经验观察来指导您的探索。

图像尺寸

一般来说,从经验上看,较大的图像在图像质量和标题对齐方面都比较小的图像要好得多。有关 256x256 和 512x512 大小图像的提示“Guy Fieri gives a tour of a haunted house”,请参阅以下示例:

提示“Guy Fieri 参观鬼屋”的 256x256 与 512x512 样本比较

扩散步骤数

扩散过程中的步骤数似乎不会对超过大约 50 个时间步长的某个阈值的结果产生太大影响。下面的图像是使用相同的随机种子和提示“一辆红色跑车”生成的。可以看出,更多的时间步长始终如一地提高了生成图像的质量,但过去 50 个时间步长的改进仅体现在对感兴趣对象的偶然环境的轻微变化上。事实上,从25个时间步长开始,汽车的细节几乎完全一致,而且环境正在改善,以在更大的时间步长内变得更适合汽车。

图像纵横比

图像质量和标题相似性作为纵横比的函数似乎取决于输入标题。下面的图像具有相同的面积,但纵横比不同,均使用标题“钢和玻璃现代建筑”生成。结果相对均匀,尽管垂直图像看起来最好,其次是正方形,然后是水平图像。鉴于这种类型的现代建筑又高又瘦,这应该不足为奇。因此,性能作为纵横比的函数似乎与主体有关。

不幸的是,稳定扩散仅限于可分解的纵横比,这使得更细粒度的实验变得不可能,但无论如何,方形图像应该足以满足大多数目的。

检查点符号链接

为了避免每次生成映像时都必须提供检查点,可以在检查点和缺省值 之间创建一个符号链接。在终端中,导航到目录并执行以下命令:--ckpt sd-v1-4.ckpt--ckptstable-diffusion

mkdir -p models/ldm/stable-diffusion-v1/ ln -s sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt

或者,只需将检查点移动到默认位置即可:--ckpt

mv sd-v1-4.ckpt models/ldm/stable-diffusion-v1/model.ckpt

我真的让瑞克滚了吗?

是的。如果 Stable Diffusion 检测到生成的图像可能违反其安全过滤器,则生成的图像将被替换为 Rick Astley 的静止图像。

最后的话

这就是使用新的 Stable Diffusion 模型生成图像所需的全部内容 ,如果您想了解有关 Stable Diffusion 工作原理的更多信息,请随时查看3D建模学习工作室。

转载:如何在本地运行稳定扩散模型 (mvrlink.com) 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1191712.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java进阶(垃圾回收GC)——理论篇:JVM内存模型 垃圾回收定位清除算法 JVM中的垃圾回收器

前言 JVM作为Java进阶的知识,是需要Java程序员不断深度和理解的。 本篇博客介绍JVM的内存模型,对比了1.7和1.8的内存模型的变化;介绍了垃圾回收的语言发展;阐述了定位垃圾的方法,引用计数法和可达性分析发以及垃圾清…

vue3+antv2.x的画布

报错信息: TypeError: Cannot destructure property component of registry_1.shapeMaps[node.shape] as it is undefined. at VueShapeView.renderVueComponent (http://192.168.10.35:9029/node_modules/.vite/deps/antv_x6-vue-shape.js?v49fbfab0:5569:19…

卷王必看。非肿瘤+WGCNA+单细胞,快来抄作业

今天给同学们分享一篇生信文章“m6A Regulators Is Differently Expressed and Correlated With Immune Response of Esophageal Cancer”,这篇文章发表在Dis Markers期刊上,影响因子为3.464。 结果解读: 食道癌中差异表达基因(D…

第18章 Swing 程序设计

概述 String包的层次结构和继承关系如下 常用的Swing组件如下表 Swing常用窗体 JFrame 窗体 JFrame 类的常用构造方法包括以下两种形式: public JFrame():创建一个初始不可见、没有标题的窗体。 public JFrame(String title)…

mac录屏没有声音?这里有答案!

在mac上进行屏幕录制是一件简单的事情,可用于创建教程、演示、游戏录制等。然而,有时用户可能会遇到一个常见的问题——录制视频时没有声音。本文将介绍两种主要的方法来解决mac录屏没有声音的问题,以确保您的录制包含声音。 mac录屏没有声音…

【LeetCode: 54. 螺旋矩阵 | 模拟】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

微信小程序主包和分包资源相互引用规则

微信分包文档 文档中只提到了分包对于兄弟分包和主包之间的引用关系,但是并未提及,主包是否可以引用分包资源。其实只需要明白两点, 第一点:分包永远都是异步加载的 第二点:主包可以预加载分包 那么其实这里就已经很…

解决:AttributeError: ‘WebDriver‘ object has no attribute ‘find_element_by_id‘

解决:AttributeError: ‘WebDriver’ object has no attribute ‘find_element_by_id’ 背景 在使用之前的代码通过selenium定位元素时,报错:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to loca…

聚焦千兆光模块和万兆光模块的测试技术及设备

千兆光模块和万兆光模块的测试技术涉及多个方面,如光学性能测试、电气性能测试、动态性能测试、温度测试、环境和耐久性测试等。不同的测试技术可以验证不同的光模块的性能和稳定性,从而确保光模块在各种应用场景下的可靠性,下面将介绍一些常…

Leetocde35-搜索插入位置

官方题解 class Solution {public int searchInsert(int[] nums, int target) {int n nums.length;int left 0, right n - 1, ans n;while (left < right) {int mid ((right - left) >> 1) left;if (target < nums[mid]) {ans mid;right mid - 1;} else {…

【数据结构】二叉树顺序存储:堆详解!(图解+源码)

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; 数据结构解析 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f324;️前言&#x1f324;️堆的理论☁️二叉树的顺序存储☁️堆的概念 &#x1f324;️堆的实现…

代码随想录算法训练营第四十六天|139. 单词拆分、多重背包问题、总结

第九章 动态规划part08 139. 单词拆分 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。 注意&#xff1a;不要求字典中出现的单词全部都使用&#xff0c;并且字典中的单词可以重复使用。 关于字符串类型的题目还是…

极智开发 | CUDA线程模型与全局索引计算方式

欢迎关注我的公众号 [极智视界],获取我的更多经验分享 大家好,我是极智视界,本文分享一下 CUDA线程全局索引计算方式。 邀您加入我的知识星球「极智视界」,星球内有超多好玩的项目实战源码和资源下载,链接:https://t.zsxq.com/0aiNxERDq CUDA 线程全局索引的计算,是很容…

【蓝桥杯选拔赛真题15】C++三个数排序 第十二届青少年组蓝桥杯C++选拔赛真题解析

目录 C/C++排序 一、题目要求 1、编程实现 2、输入输出 二、算法分析

python3.8.10虚拟环境安装talib总报平台不匹配

目录 环境&#xff1a; 需求&#xff1a; 问题&#xff1a; 概述 过程及解决 解决方案总结 环境&#xff1a; 操作系统&#xff1a;window10、64位 开发工具&#xff1a;pycharm python版本&#xff1a;python3.8.10 需求&#xff1a; 在python3.8.10的虚拟环境中安…

软件测试|MySQL BETWEEN AND:范围查询详解

简介 在MySQL数据库中&#xff0c;使用BETWEEN AND操作符可以进行范围查询&#xff0c;即根据某个字段的值在指定范围内进行检索数据。这个操作符非常有用&#xff0c;因为它可以让我们轻松地筛选出位于两个特定值之间的数据&#xff0c;而不需要使用复杂的条件语句。 BETWEE…

httpRequest库代码示例

python # 首先导入所需的库 library(httpRequest) # 设置主机名和端口号 proxy_host <- proxy_port <- # 使用httpRequest库的get函数下载图片 response <- httpRequest(", proxyHost proxy_host, proxyPort proxy_port) # 确保请求成功 if (response$sta…

javaSE学习笔记(四)常见类,基本数据类型包装类,StringBufferStringBuilder

目录 三、面向对象 16.Object类 方法 和equals() 17.String类 注意 构造方法 String的最大长度 String的底层存储结构 字符串的常量池机制 String类的方法 String类的判断功能 String类的获取功能 String类的转换功能 String类拼接 String类的其他功能 18.Math…

LeetCode算法题解(回溯、难点)|LeetCode332. 重新安排行程

LeetCode332. 重新安排行程 题目链接&#xff1a;332. 重新安排行程 题目描述&#xff1a; 给你一份航线列表 tickets &#xff0c;其中 tickets[i] [fromi, toi] 表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。 所有这些机票都属于一个从 JFK&#xff08…

【Orangepi Zero2 全志H616】驱动串口实现Tik Tok—VUI(语音交互)

一、编程实现语音和开发板通信 wiringpi库源码demo.c 二、基于前面串口的代码修改实现 uartTool.huartTool.cuartTest.c 三、ADB adb控制指令 四、手机接入Linux热拔插相关 a. 把手机接入开发板 b. 安装adb工具&#xff0c;在终端输入adb安装指令&#xff1a; sudo apt-g…