我的编程空间,编程开发者的网络收藏夹
学习永远不晚

stable-diffusion-webui 中 Controlnet 使用说明

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

stable-diffusion-webui 中 Controlnet 使用说明

文章目录


Controlnet 允许通过线稿、动作识别、深度信息等对生成的图像进行控制。

1. 安装

自动安装

  • stable-diffusion-webui 页面上找到 Extensions -> Install from URL,输入插件的 git 地址,然后点击 Install 即可, URL 如下:
https://github.com/Mikubill/sd-webui-controlnet.git
  • 等待 loading 结束后,页面底部会出现 Installed into xxx. Use Installed tab to restart. 提示

手动安装

  • 进入扩展文件夹
cd ./stable-diffusion-webui/extensions
  • 将项目文件下载至 extensions 文件夹
git clone https://github.com/Mikubill/sd-webui-controlnet.git

2. 启用 Controlnet

  • 依次找到 Extensions -> Installed -> Apply and restart UI
  • webui 重启后,可以在 txt2imgimg2img 中看到会多出来一个 ControlNet 选项
  • 安装完成

3. 配置 Controlnet

用户提供一张参考图( I o r i g i n I_{origin} Iorigin),ControlNet 根据指定的模式对参考图进行预处理,得到一张新图( I n e w I_{new} Inew),作为另一张参考图;
根据提示词(Prompt),结合前面的参考图,进行图像绘制,即 I o r i g i n + I n e w = I f i n a l I_{origin} + I_{new} = I_{final} Iorigin+Inew=Ifinal

  • 上述流程的两个阶段,对应用到的模型有两种:
  1. ControlNet 官方下载地址

预处理器模型(annotator)
预训练模型(models)

ControlNet 官方存放在 huggingface 上的 预训练模型文件(models) 内部包含了 SDv1-5-pruned-emaonly 模型,这在 stable-diffusion-webui 环境下是没必要的,而且也造成了很多硬盘空间浪费,可以仅下载裁剪版本

  1. 裁剪版本

预训练模型(models)

  • 模型存放位置

    • 插件的 models 存放目录:./stable-diffusion-webui/extensions/sd-webui-controlnet/models
    • 插件的 annotator 存放目录:./stable-diffusion-webui/extensions/sd-webui-controlnet/annotator
  • 注意: 预处理器模型(annotator)需按分类目录存放,例如:

    • body_pose_model.pthhand_pose_model.pth 应保存到 openpose 目录;
    • network-bsds500.pth 保存到 hed 目录;
    • upernet_global_small.pth 则是保存到 uniformer 目录;
    • 其他模型文件可根据关键字,找到对应存放目录
  • 在下载并存放好预处理器模型和预训练模型后,重启 webui 即可使用

4. 预训练模型区别

详见 Github 仓库

  • ControlNet with User Scribbles
    control_scribble-fp16 支持新建白画布,在上边画线条。模型将所画作为输入,并获得对应的输出,使用人类涂鸦控制SD。该模型使用边界边缘进行训练,具有非常强大的数据增强功能,以模拟类似于人类绘制的边界线。
  • 例图:

Scribbles

Scribbles2

  • ControlNet with Canny Edge
    control_canny-fp16 需要提供一张图片,预处理器使用 Canny 边缘检测 提取出边缘线,模型使用这个边缘线作为输入,控制生成对应的输出,适用于给线稿上色,或将图片转化为线搞后重新上色,比较适合人物。
  • 例图:

Canny

  • ControlNet with HED Maps
    control_hed-fp16 需要提供一张图片,预处理器使用 HED 边缘检测 提取软边缘,使用这个边缘线作为输入,控制生成对应的输出,提取的图像目标边界将保留更多细节,此模型适合重新着色和风格化。
  • 例图:

HED

  • ControlNet with M-LSD Lines
    control_mlsd-fp16 需要提供一张图片,预处理器使用 M-LSD 边缘检测 ,使用这个边缘线作为输入,控制生成对应的输出,该模型基本不能识别人物的,但非常适合建筑生成,根据底图或自行手绘的线稿去生成中间图,然后再生成图片。
  • 例图:

M-LSD

  • ControlNet with Human Pose
    control_openpose-fp16 根据提供的图片,获得对应的姿势骨架图作为输入并生成对应的结果,根据图片生成动作骨骼中间图,然后生成图片,使用真人图片是最合适的,因为模型库使用的真人素材。
  • 例图:

openpose

openpose2

  • ControlNet with Depth
    control_depth-fp16 需要提供一张图片,预处理器会使用 Midas 深度估计 获取估计图作为输入,并根据深度估计图生成输出图片,创造具有景深的中间图,建筑人物皆可使用, Stability 的模型 64×64 深度,ControlNet 模型可生成 512×512 深度图。
  • 例图:

depth

  • ControlNet with Normal Map
    control_normal-fp16 根据提供的图片,生成对应的法线贴图作为输入。法线贴图是一种模拟凹凸处光照效果的技术,是凸凹贴图的一种实现,相比于深度 Depth Map 模型,法线贴图模型在保留细节方面似乎更好一些。根据底图生成类似法线贴图的中间图,并用此中间图生成建模效果图。此方法适用于人物建模和建筑建模,但更适合人物建模。
  • 例图:

Normal

Normal

  • ControlNet with Segmentation
    control_seg-fp16 可以对图像种的多个物体,比如建筑、天空、花草树木等,进行区块分割,能够很好的识别主体和背景,使用语义分割来控制 SD 。现在您需要输入图像,然后一个名为 Uniformer 的模型将为您检测分割。
  • 例图:

Segmentation

Segmentation

  • Segmentation 使用 注意: 如果语义分割图没有生成出来,请查看控制台是否有报错,另外,检查一下 upernet_global_small.pth 是否有保存到 extensions\sd-webui-controlnet\annotator\uniformer 目录。因为 SD 自己也有一个 models\uniformer 目录,如果前面没有手动放置好 upernet_global_small.pth 模型文件,那么在用到 Semantic Segmentation 模型时,SD 会自动下载一个默认文件到它自己的 models\uniformer 目录,这种情况控制台会报错,可以排查到这个问题。
  • 可以看到,预处理阶段生成了一张花花绿绿的图片,这就是语义分割图,这图中的每一种颜色都代表了一类物品,比如紫色(#cc05ff)代表床(bed),橙黄色(#ffc207)代表垫子(cushion),金黄色(#e0ff08)代表台灯(lamp), ControlNetSemantic Segmentation 模型使用的是 ADE20KCOCO 协议,这些颜色值都可以在下面网址中找到对应的含义:
    https://docs.google.com/spreadsheets/d/1se8YEtb2detS7OuPE86fXGyD269pMycAWe2mtKUj2W8/edit
    https://github.com/CSAILVision/sceneparsing/tree/master/visualizationCode/color150
  • 进阶: 修改某个物品的颜色,最终替换生成出来的图中的物品,比如把台灯(#e0ff08)换成花(#ff0000

5. 多 ControlNet 组合应用

  • 默认情况下只能使用 ControlNet 操纵一种引导生成方式,通过更改设置,使 ControlNet 可以同时经过多个模型引导输出:SettingsControlNetMulti ControlNet 的最大网络数量
  • 需要保存设置并重启,启用后可同时设置多个 ControlNet,允许不同模型联合控制与相同模型叠加控制,可用于约束多人动作,也可用于多维度约束
  • 若将其值调整为 3 ,就可以使用三个 ControlNet 模型来影响最终图像的生成,建议按需调整
  • 使用实例:
    完美照片(无限换装法) - 知乎
    ai绘画怎么能画出好图? — 更好的图生图效果

6. 参数介绍

ControlNetParams

  1. 启用(Enable)
  • 勾选后,点击生成按钮时,将会实时通过 ControlNet 引导图像生成,否则不生效。
  1. 低显存优化(Low VRAM)
  • 低显存模式如果你的显卡内存小于4GB,建议勾选此选项,需配合启动参数 --lowvram 使用
  1. 像素完美模式(Pixel Perfect)
  • 如果启用像素完美模式,就不需要手动设置预处理器(annotator)的分辨率。ControlNet 将自动为您计算最佳分辨率,使每个像素都与稳定扩散完美匹配。
  1. Allow Preview
  • 允许预览图像
  1. 预处理器(Preprocessor)
  • 该列表是预处理器模型选择,每个 ControlNet 的模型都有不同的功能,后续将会单独介绍。
  1. 模型(Model)
  • 该列表的模型选择必须与预处理选项框内的模型名称一致,如果预处理与模型不致也可以出图,但效果无法预料,且并不理想。
  1. 权重(Weight)
  • 权重代表使用 ControlNet 生成图片的权重占比影响。
  1. Starting Control Step
  • 开始介入的步数,以百分比表示,设置为 0 表示开始时就介入,设置为 0.2 表示从 20% 的步数开始参与作图
  1. Ending Control Step
  • 结束介入的步数,以百分比表示,设置为 1 表示第 1 步就停止介入,设置为 0.9 表示到 90% 的步数结束参与作图
  1. Control Mode
  • 选择权重的重要强度,相当于从前版本的 Guess Mode

Control Mode

  1. 画面缩放模式(Resize Mode)
  • 调整图像大小模式:默认使用缩放至合适即可,将会自动适配图片。

7. 版本对比

  • 原版 canny 算法能主观感受到模型的加载时间,压缩版加载时间较快,1秒左右,生成的图像在质量上肉眼看不出差别,比如人物轮廓,五官位置等(背景有变化不算,这和模型特点有关系,canny 是提取轮廓,轮廓没有大的变化那就不算)
  • 腾讯t2i模型在速度上完胜压缩版(因为模型文件比较小),在生成的结果上没有明显差异,但是有细微差异,比如脸型
  • 下面参考其他博主的文章,对比下两者的差异,如果想要快请使用压缩版模型,如果要更快请使用腾讯t2i模型,就效果而言,孰优孰劣请自行判断,个人更倾向使用压缩版模型
  • 精确控制 AI 图像生成的破冰方案,ControlNet 和 T2I-Adapter

ControlNetT2I-Adapter 有什么区别?
ControlNet 在论文里提到,Canny Edge detector 模型的训练用了 300 万张边缘-图像-标注对的语料,A100 80G 的 600 个 GPU 小时。Human Pose (人体姿态骨架)模型用了 8 万张 姿态-图像-标注 对的语料, A100 80G 的 400 个 GPU 时。
T2I-Adapter 的训练是在 4 块 Tesla 32G-V100 上只花了 2 天就完成,包括 3 种 condition,sketch(15 万张图片语料),Semantic segmentation map(16 万张)和 Keypose(15 万张)。
两者的差异:ControlNet 目前提供的预训模型,可用性完成度更高,支持更多种的 condition detector (9 大类)。
T2I-Adapter 在工程上设计和实现得更简洁和灵活,更容易集成和扩展(by 读过其代码的 virushuo)此外,T2I-Adapter 支持一种以上的 condition model 引导,比如可以同时使用 sketchsegmentation map 作为输入条件,或在一个蒙版区域 (也就是 inpaint ) 里使用 sketch 引导。

Reference

来源地址:https://blog.csdn.net/qq_43377653/article/details/130646734

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

stable-diffusion-webui 中 Controlnet 使用说明

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

js中的WebSocket使用及说明

WebSocket是一种实时、低延迟的通信协议,允许客户端与服务器之间双向数据交换,弥补了传统HTTP请求-响应模型的局限性。它具有实时通信、低延迟、双向通信和低开销的优点,广泛用于聊天、实时数据流、多人游戏、物联网和协作工具等应用场景。要使用WebSocket,需要建立连接,收发消息,并使用API管理连接,包括open、send、close、onmessage、onerror等方法和事件。
js中的WebSocket使用及说明
2024-04-02

vue3中Vant的使用及说明

这篇文章主要介绍了vue3中Vant的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-16

C#中Stopwatch的使用及说明

这篇文章主要介绍了C#中Stopwatch的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-25

PyTorch中grid_sample的使用及说明

这篇文章主要介绍了PyTorch中grid_sample的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-01

Keras中Conv1D的使用及说明

这篇文章主要介绍了Keras中Conv1D的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2022-12-15

node.js中的events.EventEmitter.listenerCount方法使用说明

方法说明: 返回注册了指定事件的监听器数量。 语法:EventEmitter.listenerCount(emitter, event)接收参数: emitter 事件发射器 event
2022-06-04

node.js中的path.sep方法使用说明

方法说明: 将特定文字分隔符 ‘\' 或 ‘/' 的字符串转换成数组对象。 语法:path.sep由于该方法属于path模块,使用前需要引入path模块(var path= require(“path”) ) 接收参数: 无 例子:*nix
2022-06-04

node.js中的console.info方法使用说明

方法说明: 该方法与 console.log() 相同。从源码看,它是直接调用console.log的。 语法:console.info([data], [...])接收参数: 接受若干个参数,如果只有一个参数,则输出这个参数的字符串形式。
2022-06-04

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录