江湖夜雨十年灯

Stable Diffusion 在家用电脑生成 Ai 图片

李二花 / 2023-02-26


这篇文章主要介绍 Stable Diffusion 的安装与不同安装形式的优劣,具体的使用和参数控制等请见另一篇文章。

背景

人工智能应用层领域在中国封城排队做核酸的 2022 年井喷式的爆发了,从可以生成非常逼真的图片的 midjourney 到可以对话交互的 chatgpt,我感觉我们又像是处在了一个十字路口。

最近在推特上看到好多使用 Stable Diffusion 生成图片的样例,特别是使用了特定的 Lora 后,可以生成一些非常有意思的图片,比如使用新垣结衣的 Lora 然后根据 prompt 的描述,可以生成任意的新垣结衣的图片,于是也想做一下尝试。

Stable Diffusion 是以文本生成图像的 AI 工具,也是唯一一款能部署在家用电脑上的 AI 绘图工具,可以在 RTX 2060 显卡等 6GB 显存(及以上)显卡下运行,并在几秒钟内生成图像,无需预处理和后处理。

当然,如果只是想体验 Stable Diffusion,也可以使用在线工具 Hugging Face 和 DreamStudio。与本地部署相比,Hugging Face 需排队,生成一张图约 5 分钟;DreamStudio 可免费生成 200 张图片,之后需要缴费。更重要的是,这类在线工具对图片的调教功能偏弱,无法批量生成图片,只能用于测试体验。

正好我的显卡还不错,于是打算在本地安装下 Stable Diffusion 的环境,本文就是用来记录整个流程的记录。

准备

我记得在 2020 年的时候,我在自己的 ubuntu 机器上安装 k8s,准备模拟下线上环境的容器调度,但是因为没有提前做好准备,因此在网络问题上遇到了一些阻碍,这还是基于我科学上网环境具备的情况下。

有了上一次这种的教训,我每次在做新的尝试的时候,都是把准备资料做的足够充分,特别是如果要在自己家用的 Windows 或者 Linux 系统上进行项目尝试,那更要谨慎谨慎再谨慎,不然碰到可能在安装环境的问题上就会有很大的挫败感(Mac 笔记本还好,各种环境都可以随机切换,网络问题不是问题)。

因为我的还不错的显卡是装在家里的台式上的,因此,这次肯定是需要好好做准备工作以免走弯路的。

收集资料

惯例,我先是问了下 chatgpt,给到我的答案中规中矩,是 github 上的 stable diffusion webui 项目,我浏览了下 readme ,感觉如果是在 Windows 上安装,一定会因为环境问题遇到坑,于是开始于找集成项目或者容器方案。

通用容器方案

在 github 上很容易就找到了一个容器方案,根据此方案的安装描述来看,如果 docker 环境没有问题,应该还是比较容易上手的,并且可以自己下载很多现成的模型来生成自己想要的图片。于是把这个当做一个预备方案之一。

之所以作为一个预案,而不是在 Windows 上直接开始上手,是因为目前我的 Windows 用的还是 WSL 1,但是容器版本依赖的是 WSL 2,对于 Windows 的环境我是实在没有什么信心可以不碰到问题搞好,因此,只是把他当做了一个预案,而不是最终的方案。

Mac 下的集成方案

除了容器的方案,在收集资料时发现 Mac 下是有现成的集成方案的,也就是完全不需要自己维护环境,有一个 DuffisonBee 项目,把需要准备的东西打包成了一个 dmg 应用,只需要下载下来然后像对待一个普通的 Mac 应用一样启动就可以,于是此方案作为了一个备选方案,虽然 Mac 下的显卡没有那么好,但是如果一旦 Windows 下没有现成的方案,就用这个做一下尝试。

Windows 下的集成方案

然后继续搜索 Windows 下的解决方案,然后发现了,在 Windows 下也有人帮忙封好了一个跟 Mac 差不多的应用 NMKD Stable Diffusion GUI,这个也是一样的,下载下来解压后,里面有一个可执行性文件,可以直接使用。

决定方案

根据上面的整理,我发现,后两者其实是最容易实现的,基本不用费什么功夫,于是做了这样一个路线,在 Mac 和 Windows 上分别安装集成方案,然后看看是不是功能有缺失,如果没有缺失,那就直接使用这两个,如果发现有功能缺失,然后再考虑在 Windows 上实现容器方案。

安装

Mac 下的 DiffusionBee

过程十分简单,去网站下载 DiffusionBee,然后拖到 Application 里,打开 APP 等待模型下载完毕,这部分用时会比较长,需要耐心等待。结束后,会出现如下的界面,可以简单的尝试下 text2img 的功能,同时这个网站还有很多 prompt 的例子。

使用附录里的 prompt 然后选择需要生成的图片的其他的一些属性,我们生成一个例子看看:

目前在用的 Mac 是 M1 pro + 16GB 内存版的,感觉大概 2 分钟左右就生成了四张图片,并且感觉效果还是十分不错的。

Windows 下的 NMKD

跟 Mac 下的差不多,只不过模型下载不是后置的,是跟集成的软件一起下载的,推荐使用迅雷下载,Windows 虽然我用的不是太多,但是如果直接下载这么大的文件,还是会面临失败的情况,所以还是推荐使用迅雷这种下载工具下载,整个过程非常快,解压过后,会发现有这样一个文件:

执行这个可执行文件之后,会出现如下的界面,界面略显粗糙,同时,如果一旦 prompt 输入的过于繁琐时,偶尔会报错,图片的展示也不是九宫格的方式,只能一张张的查看。

但是对于模型和 Lora 的支持是没有问题的,lora,vae 等都可以直接下载放到对应的 models 文件夹中。

总的来说,这个应该可以满足我的需求了,但是因为觉得界面确实有些难看,于是,打算也尝试下容器版本,于是就有了下面这个大坑。

Windows 下的容器方案

Windows 下的容器方案肯定是有点折腾人的,这点我提前已经有了心理预期,下面就一步步讲具体的流程和遇到的坑,因为涉及的流程比较多,为了不让这一篇显得过于长,因此单独写了一个,流程请参考这里

当我们按照这个步骤完成安装之后,就可以打开 web 界面了。

我们可以看到这个界面看起来更舒适,并且生成的文件是一个组图,可以总览图片的列表,也可以单独的查看,不同的 model 和 prompt 也标注的比较清晰,lora 也可以直接在 prompt 中用 lora:gakkiAragakiYui_v2:1 的方式来写,只需要把对应的 lora 下载好放入到 lora 的目录下即可,其中 lora:名称:权重 各个字段分别代表这个含义。

结尾

Stable Diffusion 我通过调整参数,不断的尝试,发现,对于我来说基本已经够用了,能够生成我想要的多种不同的类型的图片,包括 logo,插画等,人工智能的应用层方案已经如井喷式的发展了,人类的未来会不会像 2017 年乔布斯发布 iPhone 一样,迎来一个新的 10 年的蓬勃发展呢?


附录:

使用的 prompt 如下
full body wide shot, woman beautiful face warrior wearing heavy iron armor,insanely detailed and intricate armor , hypermaximalist, elegant, ornate, hyper realistic, super detailed, cinematic light, dark fantasy, ConceptArtWorld, apocalyptic,grouchy, masterpiece,

排除的 prompt 如下
canvas frame, cartoon, 3d, ((disfigured)), ((bad art)), ((deformed)),((extra limbs)),((close up)),((b&w)), weird colors, blurry, (((duplicate))), ((morbid)), ((mutilated)), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))), out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck))), Photoshop, video game, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, mutation, mutated, extra limbs, extra legs, extra arms, disfigured, deformed, cross-eye, body out of frame, blurry, bad art, bad anatomy, 3d render,watermark,signature,no helmet,