Stable Diffusion 发布以来,逼真的画风就让大家感慨画师的饭碗是不是要被抢了。当时女票用 Stable Diffusion 重绘了几张狗子的照片,但我总觉得用别人的搭好的服务会有隐私隐患。最近 ControlNet 出来后,当时被大家吐槽的六指问题似乎得到了解决,于是我这两天就尝试着在 Colab 上搭了 Stable Diffusion 炼炼图玩。 – 为什么不用亚麻的Sagemaker?当然是因为 colab免费易用 要支持女票工作咯。

AI炼图得用GPU,所以打开Colab后第一件事就是要将 runtime type 改为GPU。然后可以确认GPU实例型号。

1
!nvidia-smi -L

然后便是要安装 conda 以及配置环境。由于我并不关心安装的细节,所以用 %%capture 来避免不必要的输出显示。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
%%capture
#@markdown ## Install colab related conda
import sys
!wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
!chmod +x Miniconda3-latest-Linux-x86_64.sh
!bash ./Miniconda3-latest-Linux-x86_64.sh -b -f -p /usr/local
sys.path.append('/usr/local/lib/python3.7/site-packages/')
!rm Miniconda3-latest-Linux-x86_64.sh

#@markdown ## Download the stable-diffusion webui repo
%cd /content
!git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
%cd stable-diffusion-webui

#@markdown ## Set up python environment
!conda env create -f environment-wsl2.yaml
!conda activate automatic

对于 Stable Diffusion 来说,配置好环境后,可以一键安装。

1
!python launch.py

不过我发现这时候虽然可以在本地启动,使用 --share 却不能启动 gradio.live。所以我会使用单独的语句启动,这个时候还可以加上 --auth 参数来保护我的 gradio.live 不被外人使用。

1
2
3
4
#@markdown # Launch
username="" #@param {type:"string"}
password="" #@param {type:"string"}
!python webui.py --share --gradio-auth '{username}':'{password}'

这个时候打开相应的 gradio.live 网址,就可以开始调教AI了。但是这个时候AI画出的画要不就是特别像真人,要不就是像儿童画,都不太好看。此时,就要祭出大家放在 huggingface上 调教好的模型并存在 models/ 文件夹内,并通过 ckpt 参数指定模型,或直接在gradio中选定模型。比如我想画二次元小姐姐,我就可以下一个 trinart 模型来炼图。

1
2
3
4
5
6
%cd models
!git lfs install
!git clone https://huggingface.co/naclbit/trinart_stable_diffusion_v2

%cd ..
!python webui.py --share --ckpt ./models/trinart_stable_diffusion_v2/trinart2_step115000.ckpt

而对于 ControlNet,则可已 Stable Diffusion 插件的形式使用。首先,在启动 gradio 的时候要加上 --enable-insecure-extension-access 参数;然后在 Extensions 页选择 Install from URL 并输入 https://github.com/Mikubill/sd-webui-controlnet 。安装后 Reload Web UI 即可。

这样基本上就可以薅 Colab 的羊毛来炼图了。我感觉炼图的时候,选择 model 和 prompt 是两个大坑,不是简单尝试就能搞定的。我抄了一些常用的negative prompt,对于剩下的,等我哪天有点心得了,就再来就这一部分水篇博客吧。

negative prompt: lowres, bad anatomy, bad hands, text, error, missing fingers, missing arms, long neck, humpbacked, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry