大家好,我是SD教程菌。
当你使用 Stable diffusion 生成图像时,是否有过这种经历?提示词内容在生成结果中似乎都体现出来了,但又总不是自己想要的样子,于是陷入到无限生成(抽卡)的状态,耗费大量时间,逐渐消磨兴趣、耐性及对SD的信任。
同样的文字,不同的人理解会不同,想象的画面也各不一样,机器当然也是如此,最好的办法就是“用图表达”。给SD一张参考图,让SD充分理解你的想法。俗话说,一张图胜过千言万语。
Stable Diffusion 的基本工作原理就是以文字作为引导条件,生成符合条件的图像。其短板就是无法对图像细节做精准控制,例如构图、动作、面部特征、空间关系等。ControlNet 的出现弥补了这一不足,更是成为SD绘画中必须熟练掌握的工具。
本文将带你全面了解最重要的SD辅助工具 —— ControlNet
Official ControlNet Blog Post:https://huggingface.co/blog/controlnet
一、ControlNet 是什么?
ControlNet 是一种增强型神经网络模型,它在SD中通过添加额外的条件来控制图像生成。可通过**[论文]**(https://arxiv.org/abs/2302.05543)了解更多。
ControlNet 有多种控制方式供选择使用(仍在不断地扩充和更迭),帮助我们应对不同的绘画需求。例如较为常用的 Canny(边缘探测)、Depth(景深探测)、Openpose(动作探测)。
举个例子:
未使用ControlNet的情况下,即便尽量用文字描述了动作细节,生成结果依然难以掌控,甚至有些细节的描述,SD也难以理解。
使用ControlNet后(以Canny为例),通过对参考图的边缘进行探测和提取,作为生成图像的附加引导条件,很好地掌控了构图和形态,提示词也精简了很多。
下图是ControlNet的其他控制方式,可以先感觉一下它们的用途和效果。(取自论文)
二、SD-WebUI 安装 ControlNet
1. 打开 Stable Diffusion WebUI 的 Extensions 页面。
2. 选择 Install from URL 选项卡。
3. 将以下地址粘贴到 URL for extension’s repository 位置。
https://github.com/Mikubill/sd-webui-controlnet.git
4. 步骤4:点击 Install,收到提示 extension is installed 即为安装成功。
5. 步骤5:重新启动sd-webui。
6. 下载模型:模型分为SD1.5和SDXL两种版本,使用时要与Checkpoint模型版本相同。
-
ControlNet Models for SD1.5:https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main(pth 和 yaml 文件都需要下载)
-
ControlNet Models for SDXL:https://huggingface.co/lllyasviel/sd_control_collection/tree/main
-
ControlNet 模型文件名含义:
7. 模型存放路径:stable-diffusion-webui\extensions\sd-webui-controlnet\models
8. 重新启动sd webui。
显存设置
由于SDXL模型能生成更高分辨率的图像,显存占用也会更高。可根据显存情况,用记事本打开 web-ui.bat ,添加对应的 COMMANDLINE 指令。
如果显存在8GB~16GB,添加 --medvram-sdxl
@echo off`` ``set PYTHON=``set GIT=``set VENV_DIR=``set COMMANDLINE_ARGS=--medvram-sdxl --xformers`` ``call webui.bat
如果显存<8GB,添加 --lowvram-sdxl
@echo off`` ``set PYTHON=``set GIT=``set VENV_DIR=``set COMMANDLINE_ARGS=--lowvram --xformers`` ``call webui.bat
三、升级 ControlNet
方法1:在 SD-WebUI 升级
1. 打开 Extensions 页面;
2. 进入 Installed 选项卡,点击 Check for updates;
3. 等待完成;
4. 完全关闭SD-WebUI并重启。
方法2:通过控制台指令升级
在 stable-diffusion-webui/extensions/sd-webui-controlnet 路径内启动控制台,输入以下指令:
git pull