1.Stable Diffusion是什么?

Stable Diffusion是一种基于深度学习的文本到图像生成模型,能够根据文本描述生成高质量的图像。它属于扩散模型(Diffusion Models)的一种,通过逐步去噪的过程生成图像。

如果去网上查阅资料,容易看到Stable Diffusion、Latent Diffusion Model、Stable Diffusion、Stable Diffusion Web UI等一系列名词,这里先快速理清楚它们之间的关系:

  • Diffusion Model,扩散模型。

    目前的DALLE,Midjourney,Stable Diffusion图片生成的核心都是扩散模型。此外,Diffusion Model还能用于生成音配、视频等等,而不仅仅只是用于生成图片。

  • Latent Diffusion Model,潜在扩散模型。

    扩散模型的一种变体。它总是先把图片压缩,降低维度,压缩后所在的空间就叫潜在空间(latent space)。这么做的好处是可以大幅减少计算量。

  • Stable Diffusion

    Stable Diffusion是基于Latent Diffusion Model开发出来的,这也是为什么它能在普通的GPU上也能运行的原因。

  • Stable Diffusion Web UI

    在Stable Diffusion基础上开发的应用,把原本繁琐的安装配置做成了容易操作的网页界面,并后续加入了很多插件,降低了很多使用门槛。

Stable Diffusion由CLIP(文本编码)模型、Diffusion模型、VAE(解码)模型三个部分构成,此处不再赘述,以后会单开一篇文章详细讲解它的原理。

2.Linux环境下的安装

配置:

  • NVIDIA V100S 32GB 8核/64GB *1
  • Ubuntu 22.04
  • CUDA 12.0.1

2.1 准备工作

由于Stable Diffusion Web UI的安装需要装非常多的依赖,坑特别多,还需要从HuggingFace上下载模型,因此刚需稳定且流量足够的梯子。此处推荐Clash-for-linux。

https://github.com/wnlen/clash-for-linux

首先需要下载相关文件,无论是用github加速的方式,还是先把zip下载到本机再传输到服务器端都可以。

git clone https://github.com/wanhebin/clash-for-linux.git

进入文件之后编辑.env文件,如果用VSCode的话也可以直接编辑。

cd clash-for-linux
vim .env
# Clash 订阅地址
export CLASH_URL='XXXX'
export CLASH_SECRET='123'

运行启动脚本

sudo bash start.sh
正在检测订阅地址...
Clash订阅地址可访问!                                      [  OK  ]

正在下载Clash配置文件...
配置文件config.yaml下载成功!                              [  OK  ]

正在启动Clash服务...
服务启动成功!                                             [  OK  ]

Clash Dashboard 访问地址:http://<ip>:9090/ui
Secret:xxxxxxxxxxxxx

请执行以下命令加载环境变量: source /etc/profile.d/clash.sh

请执行以下命令开启系统代理: proxy_on

若要临时关闭系统代理,请执行: proxy_off
source /etc/profile.d/clash.sh
proxy_on

此处应该就可以看到代理正常开启了。

想要访问控制面板,可以通过浏览器访问start.sh执行成功后输出的地址.

在本机浏览器地址栏输入http://<ip>:9090,此处的ip指的是连接服务器的那个ip

Secret(optional)一栏中输入启动成功后输出的Secret(也就是前面.env定义的密码123)。

image
image

能看到这个界面就是成功了,可以在这里选择想要的节点。

这种方法每次新开一个终端就要重新设置开启一次代理,考虑到clash还是挺吃cpu负载的,而且全局代理还会影响ssh的连接速度,因此还是建议不要设置自动开启。

完成代理配置后可以创造虚拟环境了(此处不再赘述CUDA和pytorch的相关问题)。

2.2 环境配置与依赖安装

创建虚拟环境

conda create -n sd-webui python==3.10
conda activate sd-webui

下载项目

link_preview

git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git

完成之后安装相应的依赖(建议用清华源)

cd stable-diffusion-webui
pip install -r requirements_versions.txt
pip install -r requirements.txt

2.3 启动stable-diffusion-webui

这边建议用python命令启动:

python launch.py

启动后也会安装一些依赖,还会自动下载一个5g左右大小的模型,stable-diffusion-v1-5/stable-diffusion-v1-5,注意保持网络稳定(好的梯子特别重要)。

最后能够看到一下界面就说明启动成功了:

image
image
image
image

如果需要中文界面的话可以去Extensions里安装:

image
image

选择一个汉化包下载(本人选了zh-Hans,最下面好像也有官方的)。

在Setting里找到User Interface,并在Localization里选择汉化包。

image
image

重载UI后可能会卡住,刷新一下就好。

image
image

3.文生图简单使用

stable-diffusion-webui的功能很多,主要有如下 2 个:

  • 文生图(text2img):根据提示词的描述生成相应的图片。
  • 图生图(img2img):将一张图片根据提示词描述的特点生成另一张新的图片。

此处可以简单体验一下文生图的部分。

正向提示词:

a cute cat, cyberpunk art, by Adam Marczyński, cyber steampunk 8 k 3 d, kerem beyit, very cute robot zen, beeple

反向提示词:

(deformed, distorted, disfigured:1.3), poorly drawn, bad anatomy, wrong anatomy, extra limb, missing limb, floating limbs, (mutated hands and fingers:1.4), disconnected limbs, mutation, mutated, ugly, disgusting, blurry, amputation, flowers, human, man, woman

采样方法:Euler a

点击生成即可。

image
image

效果还不错。