百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

在自己电脑运行Stable Diffusion和完整项目下载

itomcoil 2025-05-09 19:19 2 浏览

初创公司StabilityAI在最近宣布发布了Stable Diffusion模型,这是一款功能强大并且可以在标准显卡上运行的AI图像生成器。

本文中将介绍如何下载代码和预训练模型,并且将其整合成一个能够在本地电脑运行的项目,最后也会提供完整项目的下载。

本地电脑运行

因为模型比较大,所以必须要有NVIDIA GPU,至少4GB VRAM,本地磁盘至少有15GB的空间,我们打包的项目解压后需要11G的磁盘。

除此以外还需要一个Python环境,这里我们使用3.8,最后就是git,因为我们需要从github中下载一些项目代码。

下载模型权重


huggingface.co/CompVis/stable-diffusion下载模型和预训练权重。撰写本文的最新版本是v1.4-original。

在“Files and versions”选项卡下,单击检查点文件并下载它。

文件很大4.2GB,需要确保下载文件是完整的

从这个GitHub存储库下载下载Stable Diffusion,
github/lstein/stable-diffusion。它是由lstein修改的原始源代码的一个分支,感谢lstein。

将文件解压缩到本地。在“ldm”文件夹中,创建一个名为“stable-diffusion-v1”的文件夹。如下图所示。

复制下载的模型文件sd-v1-4到stable-diffusion-v1文件夹中,将检其重命名为model.ckpt。

使用Anaconda创建运行环境:

conda env create -f environment.yaml
conda activate ldm

第一行命令会下载运行模型所需的所有依赖项和包。这里的文件也很大,大概几个GB,所以可能需要一段时间。

这样环境就准备好了,下面我们加载模型需要的几个小ML模型。

python scripts/preload_models.py

在继续之前,请确保看到了“success”的信息。

现在我们可以开始生成图像了。

python scripts/dream.py

命令行将在“dream>”处暂停,也就是说要我们输入文本了。

输入后会执行生成的过程

结果如下:

怎么样,还不错吧,如果我们想要调整参数怎么办?下面看看这个方法

创建一个生成图像的web服务

我们使用Gradio UI来将生成图像的模型封装成AP服务,并且提供一个web页面来进行参数的调整:

我将所有的依赖都整理成了完整的项目,下载链接放在本文的最后,文件比较大,下载完成后解压应该是这个样子:

双击“1)install.bat”文件。屏幕底部应该出现一条成功消息,这一步是从Github中下载几个依赖的包。

然后运行批处理文件“SD_OPT) run optimized txt2img.bat”。

因为加载的模型有4GB多,所以会很久没有相应,请耐心等待当加载完成后显示如下

如果有下面弹窗则可以忽略,我也不知道是什么问题,但是对于使用不影响,哈:

然后在浏览器中访问http://127.0.0.1:7860/,就打开Gradio UI。

然后我们输入:

photo of miniature Australian Shepherd puppy on pier in front of breathtaking mountain lake, epic scene, beautiful colors, high resolution

注意:提交按钮在最下面,要按submit才可以进行生成操作,结果还可以吧

总结

最后我们说明下问题:

1、我们这边测试4GB的卡可以生成384x384的图片,512的大概需要6G左右, 1024的则需要8G+,推理速度慢,根据显卡和图片大小不同,大概需要20-60s

2、生成的输入是可以支持中文的,但是不建议中文,因为很可能产生一些玄学的玩意,非常的诡异让人看了非常不舒服,所以建议将中文翻译成英文,并且越详细越好,这样生成的模型会很好

3、生成的图像会保存在workspace文件夹中,可以查看历史输入

4、项目直接内置了python,支持win10和win11,可以直接下载使用

下面来一个我的测试吧,猜猜这是用什么文本生成的?

one person who knows Chinese Kung Fu swing his fist fast and shoot five lightning from his hand,闪电5连鞭

可以看到,图上的那些疑似的方块汉字就是因为我们输入中包含汉字出来的,汉字比例越大越诡异,所以不建议直接输入汉字。

关注我们 deephub-imba 发送 diffusion 或 扩散模型 可以获取本文的完整项目,项目较大打包压缩完6G+所以请注意磁盘空间占用和下载时间。

相关推荐

Excel新函数TEXTSPLIT太强大了,轻松搞定数据拆分!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!最近我把WPS软件升级到了版本号:12.1.0.15990的最新版本,最版本已经支持文本拆分函数TEXTSPLIT了,并...

Excel超强数据拆分函数TEXTSPLIT,从入门到精通!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!今天跟大家分享的是Excel超强数据拆分函数TEXTSPLIT,带你从入门到精通!TEXTSPLIT函数真是太强大了,轻松...

看完就会用的C++17特性总结(c++11常用新特性)

作者:taoklin,腾讯WXG后台开发一、简单特性1.namespace嵌套C++17使我们可以更加简洁使用命名空间:2.std::variant升级版的C语言Union在C++17之前,通...

plsql字符串分割浅谈(plsql字符集设置)

工作之中遇到的小问题,在此抛出问题,并给出解决方法。一方面是为了给自己留下深刻印象,另一方面给遇到相似问题的同学一个解决思路。如若其中有写的不好或者不对的地方也请不加不吝赐教,集思广益,共同进步。遇到...

javascript如何分割字符串(javascript切割字符串)

javascript如何分割字符串在JavaScript中,您可以使用字符串的`split()`方法来将一个字符串分割成一个数组。`split()`方法接收一个参数,这个参数指定了分割字符串的方式。如...

TextSplit函数的使用方法(入门+进阶+高级共八种用法10个公式)

在Excel和WPS新增的几十个函数中,如果按实用性+功能性排名,textsplit排第二,无函数敢排第一。因为它不仅使用简单,而且解决了以前用超复杂公式才能搞定的难题。今天小编用10个公式,让你彻底...

Python字符串split()方法使用技巧

在Python中,字符串操作可谓是基础且关键的技能,而今天咱们要重点攻克的“堡垒”——split()方法,它能将看似浑然一体的字符串,按照我们的需求进行拆分,极大地便利了数据处理与文本解析工作。基本语...

go语言中字符串常用的系统函数(golang 字符串)

最近由于工作比较忙,视频有段时间没有更新了,在这里跟大家说声抱歉了,我尽快抽些时间整理下视频今天就发一篇关于go语言的基础知识吧!我这我工作中用到的一些常用函数,汇总出来分享给大家,希望对...

无规律文本拆分,这些函数你得会(没有分隔符没规律数据拆分)

今天文章来源于表格学员训练营群内答疑,混合文本拆分。其实拆分不难,只要规则明确就好办。就怕规则不清晰,或者规则太多。那真是,Oh,mygod.如上图所示进行拆分,文字表达实在是有点难,所以小熊变身灵...

Python之文本解析:字符串格式化的逆操作?

引言前面的文章中,提到了关于Python中字符串中的相关操作,更多地涉及到了字符串的格式化,有些地方也称为字符串插值操作,本质上,就是把多个字符串拼接在一起,以固定的格式呈现。关于字符串的操作,其实还...

忘记【分列】吧,TEXTSPLIT拆分文本好用100倍

函数TEXTSPLIT的作用是:按分隔符将字符串拆分为行或列。仅ExcelM365版本可用。基本应用将A2单元格内容按逗号拆分。=TEXTSPLIT(A2,",")第二参数设置为逗号...

Excel365版本新函数TEXTSPLIT,专攻文本拆分

Excel中字符串的处理,拆分和合并是比较常见的需求。合并,当前最好用的函数非TEXTJOIN不可。拆分,Office365于2022年3月更新了一个专业函数:TEXTSPLIT语法参数:【...

站长在线Python精讲使用正则表达式的split()方法分割字符串详解

欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是《在Python中使用正则表达式的split()方法分割字符串详解》。使用正则表达式分割字符串在Python中使用正则表达式的split(...

Java中字符串分割的方法(java字符串切割方法)

技术背景在Java编程中,经常需要对字符串进行分割操作,例如将一个包含多个信息的字符串按照特定的分隔符拆分成多个子字符串。常见的应用场景包括解析CSV文件、处理网络请求参数等。实现步骤1.使用Str...

因为一个函数strtok踩坑,我被老工程师无情嘲笑了

在用C/C++实现字符串切割中,strtok函数经常用到,其主要作用是按照给定的字符集分隔字符串,并返回各子字符串。但是实际上,可不止有strtok(),还有strtok、strtok_s、strto...