「AI绘画Stable Diffusion 零基础入门必看」ControlNet控制网:轻松控制你的AI绘画出图效果详解

大家好,我是灵魂画师向阳

前言

AI绘画Stable Diffusion 在 ControlNet 出现之前,基于扩散模型的 AI 绘画是极难控制的,因为扩散的过程充满了随机性。

如果只是纯粹自娱自乐,这种随机性并不会带来多大困扰;但在产业化上应用就难以普及了,因为随机性的直接导致的就是缺乏稳定性,每次出图都要依赖不断抽卡,极大影响了工作效率。

然而 ControlNet 赋予了我们自由组织画面内容的能力:固定构图、定义姿势、描绘轮廓,单凭线稿就能生成一张丰满精致的插画,甚至有人用它画出了二维码 … ControlNet 的出现使得对 AI 绘画的完全控制成为现实。

基本原理

ControlNet 亦即控制网络,它本质上是 SD 的一个扩展插件。在作用原理上,它和 LoRA 是有许多相似的地方的,定位都是对大模型做微调的额外网络。

控制网络的核心作用是基于一些额外输入给它的信息、来给扩散模型的生成内容提供明确的指引。

举个例子,譬如在 Prompt 中输入 “跳舞” 的提示词,AI 可以画出无数种跳舞的姿势,在过去,我们只能通过图生图让 AI 仅可能地接近我们期望的那个姿势。但是 ControlNet 出现之后,我们可以通过给它输入一张纯粹记录了某种特定姿势(由 openpose 识别出来的、以点线组成的人体骨架图)信息的图片来画出指定的姿势,实现精准控制。

在我刚刚学 ControlNet、得知可以调用 openpose[2] 的时候,确实有种殊途同归的感概 —— 终于又回到了我熟悉的领域:曾经被我用来研究游戏视觉 AI 辅助的 openpose,没想到竟然也可以在 AI 绘画中也占据半壁江山 …

ControlNet 安装

插件安装

核心只需要安装一个插件 sd-webui-controlnet:

重启界面后可以看到新增的这个选区即安装完成:

另外为了后续方便编辑自定义的 pose,这里再安装一个 sd-webui-3d-open-pose-editor 插件(使用方法见

模型安装

ControlNet v1.1 (目前最新版)的常用模型都是在 huggingface 里面下载:

每个模型由两种文件组成:*.pth*.yaml

安装某一个模型的时候,两种格式都需要下载回来、并放到 %SD/models/ControlNet/ 目录下即可使用。

注意:ControlNet模型插件下载需科学上网,如无法下载,请扫描获取模型插件安装包

预处理器安装

预处理器一般是在使用 ControlNet 的时候按需自动下载的,但是由于网络原因,可能下载不了,此时界面会报错:

这里提供一个通用的解决方法。先在 SD 的 dos 终端中找到异常信息:

核心失败原因解读一下:

Downloading: “https://huggingface.co/lllyasviel/Annotators/resolve/main/hand_pose_model.pth” to R:\AIDraw\novelai-webui-aki-v3\extensions\sd-webui-controlnet\annotator\downloads\openpose\hand_pose_model.pth

主要就是说:下载 hand_pose_model.pth 到 %SD/extensions/sd-webui-controlnet/annotator/downloads/openpose/ 目录失败。

根本原因就是 dos 终端没科学上网导致下载不到文件,可看上方

类似地,其他预处理器也会有此问题,届时参考这个方法举一反三地处理即可。


常用 ControlNet 模型推荐

在 ControlNet v1.1 中,它能控制的方向已经远远不止人体姿态这一种,而是多达 14 个不同方向的控制,每一个方向对应一个模型。

为了方便选择困难症的同学,这里推荐最常用的几个模型(当然如果你有时间也可以把 14 个模型全部下载):

名称openpose
功能人体姿态控制、脸部特征控制(表情控制)、手部特征控制(解决画手问题)
模型下载control_v11p_sd15_openpose.pth[7],
control_v11p_sd15_openpose.yaml[8]
模型位置%{NovelAI}/models/ControlNet/
预处理器body_pose_model.pth[9],
hand_pose_model.pth[10],
facenet.pth[11]
预处理器
放置位置%SD/extensions/sd-webui-controlnet/annotator/downloads/openpose/

名称depth
功能描绘富有空间感的多层次场景(景深控制)、人物肢体交叠(人体透视)
模型下载control_v11f1p_sd15_depth.pth[12],
control_v11f1p_sd15_depth.yaml[13]
模型位置%SD/models/ControlNet/
预处理器1dpt_hybrid-midas-501f0c75.pt[14]
预处理器1
放置位置%SD/extensions/sd-webui-controlnet/annotator/downloads/midas/
预处理器2res101.pt[15],
latest_net_G.pth[16]
预处理器2
放置位置%SD/extensions/sd-webui-controlnet/annotator/downloads/leres/
预处理器3ZoeD_M12_N.pt[17]
预处理器3
放置位置%SD/extensions/sd-webui-controlnet/annotator/downloads/zoedepth/

名称canny
功能勾勒图像的边沿特征(还原图像外形特征)、且会保留内部细节,可用于线稿上色。
模型下载control_v11p_sd15_canny.pth[18],
control_v11p_sd15_canny.yaml[19]
模型位置%SD/models/ControlNet/
预处理器

名称hed / softEdge
功能柔和边沿,和 canny 功能类似,但是边沿会更模糊,只保留轮廓特征。
模型下载control_v11p_sd15_softedge.pth[20],
control_v11p_sd15_softedge.yaml[21]
模型位置%SD/models/ControlNet/
预处理器

名称scribble
功能比 softEdge 更自由奔放的描摹(涂鸦乱画、灵魂画手)
模型下载control_v11p_sd15_scribble.pth[22],
control_v11p_sd15_scribble.yaml[23]
模型位置%SD/models/ControlNet/
预处理器1table5_pidinet.pth[24]
预处理器1
放置位置%SD/extensions/sd-webui-controlnet/annotator/downloads/pidinet/
预处理器2ControlNetHED.pth[25]
预处理器2
放置位置%SD/extensions/sd-webui-controlnet/annotator/downloads/hed/

名称tile
功能搭配 MultiDiffusion 区块化放大图片
模型下载control_v11f1e_sd15_tile.pth[26],
control_v11f1e_sd15_tile.yaml[27]
模型位置%SD/models/ControlNet/
预处理器

基本使用

可以说,ControlNet 最困难的部分就是安装。使用它其实非常简单。

例如我现在希望让 AI 画出「刻晴在海边弹尤克里里」的画面,在过去我们的做法就是:

  1. 找一个 刻晴 的角色 LoRA

  2. 添加提示词 sunset, beach, stand in sea, play ukulele,

  3. 无限重绘直到得到自己满意的图

那我们就可能得到大量的 “刻晴拿着琴身”、“刻晴掰断琴头”、“刻晴抱着琴不弹” 等一堆无法满足需求的画面。最后万不得已挑了一张稍微能接受的 “刻晴抱着琴不弹”,就完事了:

但现在有了 ControlNet,我们就可以一步到位、不需要碰运气了。

在前面的基础上,我们再从网上找一张自己满意的「弹尤克里里」的图片,要是真的找不到,哪怕自拍一张拿着扫帚的照片也是可以的:

使用 3D Openpose 捏动作

还记得前面装了一个 sd-webui-3d-open-pose-editor 插件吧?

其实也可以用它去把自己想要的姿势捏出来:

不过捏的时候虽然是 3D,实际上发送到 ControlNet 之后会投影到 2D 平面上, z 轴的坐标还是被抹掉了。

然后把这个照片导入 ControlNet (导入前需要裁剪宽高比例和出图比例一致):

  1. 勾选启用

  2. 选择 Control Type 为 openpose, 然后预处理器和模型都会自动选中 openpose 相关的选项(需要提前安装模型)

  3. openpose 的预处理器有五种类型,按需选择即可:

  • openpose: 仅识别人体姿态骨架

  • openpose_face: 识别人体姿态骨架 + 脸部特征

  • openpose_faceonly: 仅识别脸部特征

  • openpose_full: 识别人体姿态骨架 + 脸部特征 + 手部特征

  • openpose_hand: 识别人体姿态骨架 + 手部特征

  1. 点击预处理器旁边的「爆炸」按钮,就会识别中图片中的人体,生成人体姿态的预览图

当点击「生成」图片按钮后,ControlNet 就会把 「人体姿态信息」 + 「人体在图像中的相对位置」 都输入到 AI 绘图。

由于 ControlNet 的 openpose 不会识别人体姿态以外的任何信息,故参考图中的人物拿着什么、AI 是不知道的,因此我们需要在提示词中进一步打辅助:告诉 AI “刻晴正在用这个姿势 play ukulele”, AI 就会 get 到手上空出来的位置是拿着尤克里里了。

多重控制网

不难注意到,ControlNet 其实最多支持同时使用 3 个模型,当使用 2 个以上的 ControlNet 时,称之为多重控制网。

那什么场景下会用到多重控制网呢?一个典型的例子就是人体遮挡透视。

例如我现在希望画一张「刻晴双手遮住眼睛」的图像,虽然从网上找到了我想要的动作,但是 openpose 只能识别出人体各个部位的平面位置、却不能很好的反映出它们之间的透视信息(亦可理解为景深):

其实熟知视觉 AI 的同学就知道,openpose 提供的关键点 landmarks 只有 2D 的,z 轴信息被弱化了,导致不能呈现透视效果。反之如果 ControlNet 未来能引入像 mediapipe 之类的框架,就能提供 3D 的 landmarks,届时不需要多重控制网也能解决透视问题。

故而只使用 openpose 一个控制网,画出来的效果可能就是「刻晴双手抱在脑后」了:

解决的办法是引入另一张控制网打配合。

在这个场景下,因为透视/景深信息缺失才导致出图不准,因此可以引入擅长做这个事情的 depth 控制网:

  1. 保持 openpose 配置不变,切换到第二张控制网

  2. 选择控制网类型为 depth(需要提前安装模型)

  3. 导入和 openpose 一样的参考图,点击预处理器旁边的「爆炸」按钮,生成透视信息。在透视图中可以明显看到人物的手在头部前面,而不是脑后

  4. 适当减少 depth 控制网的权重,避免过多约束画面内容,我们的目的只需要让 AI 知道“手在眼前”的信息就够了

  5. 提示词可以添加 cover eyes with hands 打配合

看一下出图效果,这次就能够正确画出我们期望的结果:

建议使用多重控制网时,所选的多个 ControlNet 在能力上应该是**「互补」**的,否则徒增显存却不会提升多大的出图效果、甚至还有可能变差。

如果你的显存确实不够支撑多张控制网,不妨勾选「低显存优化」功能试试,当然出图效率会降低就是了

感兴趣的小伙伴,赠送全套AIGC学习资料,包含AI绘画、AI人工智能等前沿科技教程和软件工具,具体看这里。

AIGC技术的未来发展前景广阔,随着人工智能技术的不断发展,AIGC技术也将不断提高。未来,AIGC技术将在游戏和计算领域得到更广泛的应用,使游戏和计算系统具有更高效、更智能、更灵活的特性。同时,AIGC技术也将与人工智能技术紧密结合,在更多的领域得到广泛应用,对程序员来说影响至关重要。未来,AIGC技术将继续得到提高,同时也将与人工智能技术紧密结合,在更多的领域得到广泛应用。

在这里插入图片描述

一、AIGC所有方向的学习路线

AIGC所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

在这里插入图片描述

在这里插入图片描述

二、AIGC必备工具

工具都帮大家整理好了,安装就可直接上手!
在这里插入图片描述

三、最新AIGC学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述
在这里插入图片描述

四、AIGC视频教程合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

若有侵权,请联系删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43584.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安全身份和访问管理:云服务器的守护者

安全身份和访问管理:云服务器的守护者 在云计算时代,身份和访问管理(Identity and Access Management, IAM)是确保云服务器安全的关键组成部分。IAM涉及到控制谁可以访问云资源、他们可以执行什么操作以及如何确保这些访问是安全…

如何高效学习(一)

什么是学习?学习的本质是什么?如何学习?如何更加高效的学习 以下内容均为观看B站UP主(硬核学长2077)所做总结和自我分析 一、自我介绍 ​ 我,一个二三线城市小小程序员,在高中学习就很一般,但当时并没有特…

《框架封装 · Redis 事件监听》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…

Object方法重写

这篇文章大家随意看看就好,只是一点理解的东西,当然你也可以认真调查。 我们需要知道Obecj是java中的一个类,是所有类的父类,即超类。对,超级赛亚人的那个超。 我们需要关注其中的equals、tostring这两个方法。 例如&…

电脑管理软件是什么?电脑管理软件能做什么?

电脑管理软件是一种专门设计用于管理和优化计算机系统的软件工具。它涵盖了多个方面,从系统维护、资源分配到安全防护,都有着广泛的应用。以下是对电脑管理软件及其功能的详细解析: 一、电脑管理软件的定义 电脑管理软件是一种管理类型的软…

stm32毫秒ms延时,HAL_Delay()

STM32的HAL库确实提供了毫秒级的延时函数,即HAL_Delay()函数。这个函数使用SysTick定时器来实现延时,并且可以配置为微秒级的延时。 //stm32l4xx_hal.c /*** brief This function provides minimum delay (in milliseconds) based* on variable i…

自动化发布:Conda包依赖的持续集成之旅

自动化发布:Conda包依赖的持续集成之旅 引言 在现代软件开发中,持续集成和持续部署(CI/CD)是提高开发效率和软件质量的关键实践。Conda作为Python和其他科学计算语言的包管理器,支持通过自动化流程发布包依赖。本文将…

现在一个表有自增字段id,姓名,年龄,手机号等等数据,什么场景下可以用到Supplier,Function,Consumer,Predicate等函数式接口

在处理具有自增字段id&#xff0c;姓名&#xff0c;年龄&#xff0c;手机号等字段的数据表时&#xff0c;Supplier、Function、Consumer和Predicate等函数式接口可以应用于多种场景。下面是一些具体的应用场景和示例&#xff1a; Supplier Supplier<T>接口用于生成或提…

宿州降本 提质 增效 数据采集监控平台提高生产自动化水平

在当今竞争激烈的市场环境中&#xff0c;企业追求降本、提质、增效已成为发展的关键。而我们的[数据采集监控平台名称]数据采集监控平台&#xff0c;正是助力企业实现这一目标的强大工具。 LP-SCADA数据采集监控平台是工业4.0中主要的数据采集系统之一&#xff0c;主要针对产线…

SimLab 流体网格建模工具详解 Part2: Mesh

SimLab的建模功能 SimLab中和流体网格建模相关的功能主要集成在 Geometry 和 Mesh 两个标签中。在上期文章中&#xff0c;我们详细介绍了Geometry标签中的内容&#xff0c;本期文章我们将分享继续分享 Mesh 标签的内容&#xff0c;一起来看看吧。 Mesh 标签 标签下的工具生成网…

C++八股(一)

一、new和malloc ⭐ new是C++的关键字,用于动态分配内存并创建对象。它可以根据类型自动计算所需内存空间,并调用对象的构造函数进行初始化。在使用new分配内存后,需要使用delete来释放这些内存空间,以防止内存泄漏。malloc是C语言的库函数,用于动态分配一块指定大小的内存…

南方CASS:测绘工作者的得力助手

初识南方CASS 南方CASS&#xff0c;这款软件在我的工作和生活中扮演了不可或缺的角色。作为一名长期的使用者&#xff0c;我深感它的功能之强大与便捷。今天&#xff0c;我愿以季羡林先生的口吻&#xff0c;带大家走进南方CASS的世界&#xff0c;分享我与它的点滴故事。 功能…

不同编程环境中GPU调用代码

在编程中&#xff0c;调用 集成显卡&#xff08;集显&#xff09; 和 独立显卡&#xff08;独显&#xff09; 通常涉及设置GPU设备和执行计算任务。以下是一些示例代码&#xff0c;展示了如何在不同编程环境中使用 集显 和 独显 。 文章目录 1. 使用CUDA和PyTorch调用GPU检查可…

天线介绍简略

天线在无线通信中是必不可少的组件&#xff0c;作为基础部分为无线通信所需&#xff0c;天线的形式从方向上有全向和定向&#xff0c;从实现上有微带、对称振子、阵列天线等&#xff0c;极化上有垂直极化、水平极化、圆极化等&#xff0c;天线的指标有增益、驻波、带宽等&#…

股票软件中的L2行情是什么意思?什么是level2行情以及如何获取level2行情

行情接入方法 level2行情websocket接入方法-CSDN博客 level2行情是什么意思&#xff1f; L2行情&#xff0c;即Level 2行情&#xff0c;是股票市场中一个不可或缺的高级术语&#xff0c;它代表着比基础Level 1行情更为详尽的市场洞察力。Level 2行情解锁了市场深度的新维度&…

大模型推理:vllm多机多卡分布式本地部署

文章目录 1、vLLM分布式部署docker镜像构建通信环境配置 2、其他大模型部署工具3、问题记录参考文献 单台机器GPU资源不足以执行推理任务时&#xff0c;一个方法是模型蒸馏量化&#xff0c;结果就是会牺牲些效果。另一种方式是采用多台机器多个GPU进行推理&#xff0c;资源不足…

前端跨域问题解决方案

跨域产生的原因是由于浏览器的同源策略&#xff0c;即当页面的源和页面运行过程中加载的源不一致时&#xff0c;浏览器会出于安全考虑对跨域的资源访问进行限制。这种限制特别是对​ajax的影响最为明显&#xff0c;默认情况下&#xff0c;它不允许ajax访问跨域资源。 跨域问题…

深入解析【C++ list 容器】:高效数据管理的秘密武器

目录 1. list 的介绍及使用 1.1 list 的介绍 知识点&#xff1a; 小李的理解&#xff1a; 1.2 list 的使用 1.2.1 list 的构造 知识点&#xff1a; 小李的理解&#xff1a; 代码示例&#xff1a; 1.2.2 list 迭代器的使用 知识点&#xff1a; 小李的理解&#xff1…

基于STM32的气压检测报警proteus仿真设计(仿真+程序+设计报告+讲解视频)

基于STM32的气压检测报警proteus仿真设计 1.主要功能2.仿真3. 程序4. 设计报告5. 资料清单&下载链接资料下载链接&#xff1a; 基于STM32的气压检测报警proteus仿真设计(仿真程序设计报告讲解视频&#xff09; 仿真图proteus 8.9 程序编译器&#xff1a;keil 5 编程语言…

cadence许可管理策略

在数字化时代&#xff0c;软件已成为企业运营的核心要素。随着软件种类的不断增加和业务需求的不断变化&#xff0c;cadence许可管理面临着诸多挑战。为了确保软件合规性和优化资源利用&#xff0c;制定一套合理有效的cadence许可管理策略至关重要。本文将为您揭示cadence许可管…