位置: IT常识 - 正文

AI - AI绘画的精准控图(ControlNet)(ai绘画图片)

编辑:rootadmin
AI - AI绘画的精准控图(ControlNet) 一、介绍

推荐整理分享AI - AI绘画的精准控图(ControlNet)(ai绘画图片),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:ai的绘画工具知识,ai绘画图片,ai绘图的三种基本方法是什么,ai的绘画工具知识,ai绘画作品,ai绘画作品,ai画图的优点,ai绘画技术,内容如对您有帮助,希望把文章链接给更多的朋友!

在上一篇 《AI - stable-diffusion(AI 绘画)的搭建与使用》 中, 介绍了 SD 的环境搭建与使用,搭配各种特色模型文件,SD 的文生图功能就可以根据我们输入的提示词(Prompt),绘制出各种各样的精美图片。但是,在深度使用之后你会发现,想让 AI 绘制出自己满意的图片并不容易,甚至多次调整提示词(Prompt)也生成不出来我们想要的画面。

注:后续文中提到的 SD 代指 stable-diffusion 或 stable-diffusion-webui。

这时你需要一个大杀器 ControlNet,SD 搭配上 ControlNet 之后,就可以做到精准控图了,先来看看几个 ControlNet 能做到的效果:

ControlNet 官方仓库:https://github.com/lllyasviel/ControlNet二、安装

跟 SD 一样,ControlNet 官方仓库不适合新手直接使用,我们可以安装 stable-diffusion-webui 的一个插件(sd-webui-controlnet)来使用 ControlNet,这是插件的 github 地址:

https://github.com/Mikubill/sd-webui-controlnet1、安装插件

安装这个插件很简单,在 webui 页面上找到 Extensions -> Install from URL,输入插件的 git 地址 https://github.com/Mikubill/sd-webui-controlnet.git,点击 Install 即可:

等待 loading 结束后,页面底部会出现 Installed into xxx. Use Installed tab to restart. 提示,这时再依次找到 Extensions -> Installed -> Apply and restart UI 重启 webui:

重启完成后,就可以在 txt2img 和 img2img 中看到会多出来一个 ControlNet 选项,这样插件就安装完成了:

2、安装模型

sd-webui-controlnet 插件安装完成之后,还需要配置一下 ControlNet 的专属模型(注意:不要跟 SD 的模型搞混了)。在此之前,先来了解一下 ControlNet 的绘画流程:

用户提供一张参考图,ControlNet 根据指定的模式对参考图进行预处理,得到一张新图,作为另一张参考图。根据提示词(Prompt),结合前面的(1 张 或 2 张)参考图,进行图像绘制。

上述流程的两个阶段,对应用到的模型有两种,以下是它们的下载地址:

预处理器模型(annotator):https://huggingface.co/lllyasviel/ControlNet/tree/main/annotator/ckpts预训练模型(models):https://huggingface.co/lllyasviel/ControlNet/tree/main/models

注:预训练模型(裁剪过的 models):https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main

打开预处理器模型(annotator)网址,将需要用到的模型下载下来后,保存到插件的 annotator 目录下:

注意:预处理器模型需按分类目录存放,例如 body_pose_model.pth 和 hand_pose_model.pth 应保存到 openpose 目录;而 upernet_global_small.pth 则是保存到 uniformer 目录;其他模型文件可根据关键字,找到对应存放目录。

插件的 annotator 目录:stable-diffusion-webui\extensions\sd-webui-controlnet\annotator。

打开预训练模型(models)网址,将需要用到的模型下载下来后,保存到插件的 models 目录下:

注意:这步别急着动手,下面有体积更小的模型。⚠️⚠️⚠️

插件的 models 目录:stable-diffusion-webui\extensions\sd-webui-controlnet\models。

ControlNet 官方存放在 huggingface 上的预训练模型文件一个个都是 5 个 G 起步,这是因为它们内部都包含了 SD 那个将近 4 个 G 的 v1-5-pruned-emaonly 模型,这在 stable-diffusion-webui 环境下是没必要的,这时我们可以使用专门裁剪过的预训练模型文件,体积会少很多:

预训练模型(裁剪过的 models):https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main

注:一般把所有 control_xxx.safetensors 文件下载下来保存到本地 models 目录下即可,如果你觉得模型文件太多,磁盘空间占用太大,也可以按需下载。

三、使用

sd-webui-controlnet 插件和模型文件(预处理器模型、预训练模型)都安装完成之后,再重启一次 webui 就可以正常使用 ControlNet 功能了。

1、人体姿势(Human Pose)

根据 civitai 网站上的 Deliberate 模型案例,生成一张牛奶工的图片:

现在我们希望 AI 绘制出来的牛奶工他是坐着的,这时,就可以用上 ControlNet 选项了。展开 ControlNet 选项之后,把 Enable 勾上使其生效,之后,指定 openpose 所需的预处理器模型(Preprocessor)和预训练库模型(Model):

注:如果你使用的是 8G 以下显存(或者想获取更大的批量大小),可以把 Low VRAM 勾上。 https://github.com/lllyasviel/ControlNet/blob/main/docs/low_vram.md

ControlNet 选项配置完成后,其它保持不变,点击 “Generate” 按钮重新生成,这时绘制出来的牛奶工的姿势就跟我们提供的参考图基本一致了:

注:图中牛奶工的小腿摆向与骨架图中的小腿摆向不符,不过整体效果已经很不错了,相信后续 ControlNet 能优化好这一点。

你也可以看到,SD 同时还生成出了一张骨架图,这骨架图是在 ControlNet 的预处理阶段生成的。而且 openpose 主要依据的参考图就是这张骨架图,也就是说,当我们手上有现成的骨架图时,完全可以直接将骨架图作为参考图,跳过预处理阶段(设为 “none”),直接进入绘图阶段。有兴趣的可以动手试试,效果是一样的:

2、重新着色和风格化(Canny Edge、HED Boundary)

如果你希望对现有的图片重新着色或换一种风格,可以使用 ControlNet 以下两个模型,它们的主要区别是边缘检测算法不同:

Canny Edge 模型:采用 Canny 边缘检测算法HED Boundary 模型:采用 HED(Holistically-Nested Network) 边缘检测算法

下面我们就分别采用这两种模型来试试,这是 Canny Edge 模型:

这是 HED Boundary 模型:

AI - AI绘画的精准控图(ControlNet)(ai绘画图片)

可以直观看到,两种模型生成的 边缘检测图 不同,从而最终绘制出来的图片细节上也有差别(注意看小女孩头发上的 3 个反光点),至于哪个更好,看个人感觉吧,我觉得 HED Boundary 模型好一点。关于这两种边缘检测算法的说明,可以查看以下文章了解:

边缘检测的三种算法介绍:https://zhuanlan.zhihu.com/p/35694372边缘检测之 HED:https://zhuanlan.zhihu.com/p/436000433、草图绘制(Scribbles)

使用 Scribbles 模型,可以根据草图(涂鸦)绘制出精美的图片,对于那些没有学过美术或者没有绘画天赋的人来说,简直太棒了。

提示词(Prompt):hot air balloon

如果你懒得自己画草图,也可以将一张现成的作品交给 ControlNet,由它帮你画,注意,此时的预处理器模型换成了 fake_scribble(从成品图中提取出草图),而预训练模型还是 control_scribble-fp16(根据草图绘制作品):

注:这里是我唯一一处勾选了 Low VRAM 的地方,因为在进行提取草图的预处理阶段,控制台报了显存不足的错误,此时草图也就没能提取成功,勾选 Low VRAM 之后,一切就正常了。

4、建筑物绘制(M-LSD Lines)

如果你希望是对建筑物进行重新上色和风格化,可以使用 M-LSD 模型:

5、语义分割绘制(Semantic Segmentation)

Semantic 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), ControlNet 的 Semantic Segmentation 模型使用的是 ADE20K 协议,这些颜色值都可以在下面网址中找到对应的含义:

https://docs.google.com/spreadsheets/d/1se8YEtb2detS7OuPE86fXGyD269pMycAWe2mtKUj2W8/edit#gid=0https://www.researchgate.net/figure/Semantic-labels-of-ADE20K-data-set-in-BGR-format_fig2_339839515https://github.com/CSAILVision/sceneparsing/tree/master/visualizationCode/color150

既然如此,那我们可以反向操作,修改某个物品的颜色,替换最终生成出来的图中的某样物品,比如把台灯(#e0ff08)换成花(#ff0000):

注:跟 openpose 直接提供骨架图一样,这里我们直接提供了语义分割图,所以预处理器选择 “none”。另外,注意此处我固定了 Seed 的值,这样最终生成出来的图片能跟上面的例子保持基本一致。

可以看到,最终绘制出来的图中,床边的台灯被替换成了花。

6、三维制图(Depth、Normal Map)

如果你希望能对图中 3D 物体比较细致的把控,可以使用 ControlNet 提供的以下 2 种模型:

Depth 模型:从原图中提取深度图,能较好的掌握复杂的三维结构层次,并将其复现。Normal Map 模型:从原图中提取 3D 物体的法线向量,绘制的新图与原图的光影效果完全相同。

下面我们就使用相同提示词(Plaster statue of Abraham Lincoln),分别采用这两种模型来试试,这是 Depth 模型:

这是 Normal Map 模型:

相比于 Depth 模型,Normal Map 模型能更好的保留几何形状,并且有更多的细节信息,注意看男人头发的形状。

注:建议 Depth 模型用于 3D 场景,Normal Map 模型用于 3D 物体。

四、试验特性

我们先明确一点,提示词(Prompt、Negative Prompt)是使用 SD 必不可少的一环,你需要对最终生成的图片进行描述,才能让 SD 更准确的绘制出你要的图片效果,而 ControlNet 只是以 SD 为基础的功能扩展(更好的控制图片的生成,辅助性的),不是单独的程序。目前 ControlNet 有 2 个强大但还处于试验阶段的功能,分别是:

Guess Mode:猜测模式(或者叫 non-prompt mode)Multiple ControlNets:多个 ControlNet

ControlNet 的 Guess Mode(猜测模式)的主要作用就是根据提供的参考图猜测你可能要使用的内容映射(深度?边缘?涂鸦?),即使在你不提供任何提示词(Prompt、Negative Prompt)的情况下,也能进行准确猜测。但实际测试的结果,并没有官方说的那么强(可能是我使用方法不对吧~),这里就有不多介绍了,感兴趣的可以阅读下官方介绍和案例:

Guess Mode 介绍:https://github.com/lllyasviel/ControlNet#guess-mode–non-prompt-mode

下面主要来介绍 Multiple ControlNets,在搞懂它之前,我们先将该功能开启准备好。在 Settings 页面中,找到 ControlNet 分类,指定 Multi ControlNet 的个数(默认为 1),点击 Apply settings 保存配置,最后还得重启一次 webui:

注:最多可以开启 10 个,根据情况调整即可。

重启之后,再回到 txt2img 查看 ControlNet 选项,可以看到现在 ControlNet 选项中有 2 个 ControlNet Model 子页面了:

顾名思义,Multiple ControlNets 就是开启多个 ControlNet,而 ControlNet 是可组合的,当多个 ControlNet 组合使用时,就可以对 SD 进行多条件控制,将多个 ControlNet 的产物,结合提示词(Prompt)绘制出图片,简单理解的话,就是多图合成。现在,我在没有使用 Multiple ControlNets 的情况下,让 AI 绘制一张宇航员在彩色科幻山太空场景中的图片,效果如下:

提示词:astronaut in colorful scifi mountain space scene

看起来一切都很完美,但是呢,如果我想控制整个构图,比如背景轮廓(山体、地面、月亮等等),以及宇航员的姿态位置的话,应该怎么办呢?根据前面列举出来的所有 ControlNet 模型效果可知,背景轮廓可以使用 Depth 模型,能根据提供的背景参考图进行三维结构的复刻并重新着色风格化,而宇航员的姿态则可以使用 openpose 模型进行控制。前面的所有案例,都是单个 ControlNet 模型的使用,而现在,这里就可以使用 Multiple ControlNets 组合多个 ControlNet 模型来控图了。先来配置第 1 个 ControlNet,用来控制背景的 Depth 模型:

注:如果手上有现成的深度图,那么可以跳过预处理阶段(Preprocessor 配置为 “none”),缩短时间。另外,注意这个 Weight 值我调整为 0.35 了,因为如果使用默认值 1 的话,与下面宇航员姿态的权重相当,最终生成的图片里宇航员的姿态不可控。

再来配置第 2 个 ControlNet,用来控制宇航员姿态的 openpose 模型:

注:这个骨架图使用了 openpose-editor 插件制作,也是一个 SD 插件,安装步骤参考本文中 sd-webui-controlnet 插件的安装流程,除了 git 地址不同,其他都一样。

https://github.com/fkunn1326/openpose-editor

这时再使用相同的提示词,点击 “Generate” 按钮,最终生成出来的图片效果如下:

本文链接地址:https://www.jiuchutong.com/zhishi/296102.html 转载请保留说明!

上一篇:解决keras、tensorflow 2.0版本报错问题(解决脱发的8个方法)

下一篇:YOLOv8(n/s/m/l/x)&YOLOv7(yolov7-tiny/yolov7/yolov7x)&YOLOv5(n/s/m/l/x)不同模型参数/性能对比(含训练及推理速度)

  • 华为nova5新机有钢化膜吗(新买的华为nova5里面是不是有钢化膜)

    华为nova5新机有钢化膜吗(新买的华为nova5里面是不是有钢化膜)

  • 微信羊城通乘车码用不了(微信羊城通乘车码怎么用)

    微信羊城通乘车码用不了(微信羊城通乘车码怎么用)

  • 电脑版WPS文档纸张letter怎么设置(wps的纸张设置在哪里)

    电脑版WPS文档纸张letter怎么设置(wps的纸张设置在哪里)

  • qq实名制超过了次数怎么办(qq实名认证制超过了次数怎么办)

    qq实名制超过了次数怎么办(qq实名认证制超过了次数怎么办)

  • 苹果X手机怎么分屏应用(苹果x手机怎么录屏)

    苹果X手机怎么分屏应用(苹果x手机怎么录屏)

  • 开视频一小时多少流量(开视频一个小时耗多少电)

    开视频一小时多少流量(开视频一个小时耗多少电)

  • 话费误充到停机的账户(话费充错到停机手机号)

    话费误充到停机的账户(话费充错到停机手机号)

  • 电脑设置字体大小怎么设置(电脑设置字体大小在哪里设置的)

    电脑设置字体大小怎么设置(电脑设置字体大小在哪里设置的)

  • 淘宝给的差评为什么两天了还没有显示出来(淘宝给的差评为什么两天了还没有显示出来?)

    淘宝给的差评为什么两天了还没有显示出来(淘宝给的差评为什么两天了还没有显示出来?)

  • 还原网络设置卡贴会失效吗(还原网络设置卡贴要重新设置吗)

    还原网络设置卡贴会失效吗(还原网络设置卡贴要重新设置吗)

  • 闲鱼等待见面交易是什么意思(闲鱼等待见面交易怎么改为邮寄)

    闲鱼等待见面交易是什么意思(闲鱼等待见面交易怎么改为邮寄)

  • 苹果xsmax摔了内部会松动吗(苹果xsmax摔坏的图片真实)

    苹果xsmax摔了内部会松动吗(苹果xsmax摔坏的图片真实)

  • 电脑有静电怎么消除(电脑有静电怎么接地)

    电脑有静电怎么消除(电脑有静电怎么接地)

  • movc是什么指令(mov movc movx 指令有何不同?)

    movc是什么指令(mov movc movx 指令有何不同?)

  • 支付宝付款密码在哪里设置(支付宝付款密码忘记了)

    支付宝付款密码在哪里设置(支付宝付款密码忘记了)

  • 华为p30在哪找极速快充(华为p30在哪找极速充电)

    华为p30在哪找极速快充(华为p30在哪找极速充电)

  • a2197是ipad几代(a2197是ipad几代拆机视频)

    a2197是ipad几代(a2197是ipad几代拆机视频)

  • 华为畅享10plus充电指示灯在哪里(华为畅享10plus充电器参数)

    华为畅享10plus充电指示灯在哪里(华为畅享10plus充电器参数)

  • 苹果11屏幕录制在哪里(苹果11屏幕录制怎么设置出来)

    苹果11屏幕录制在哪里(苹果11屏幕录制怎么设置出来)

  • word怎么创建下一级标题(文档怎么创建下一页)

    word怎么创建下一级标题(文档怎么创建下一页)

  • iphone支付设置关闭(苹果支付关闭支付功能)

    iphone支付设置关闭(苹果支付关闭支付功能)

  • 如何用手机剪辑动漫(如何用手机剪辑音乐)

    如何用手机剪辑动漫(如何用手机剪辑音乐)

  • 1+7pro支持5g吗(一加七pro能不能用5g)

    1+7pro支持5g吗(一加七pro能不能用5g)

  • 抖音风火轮特效怎么弄(抖音风火轮特效怎么弄的)

    抖音风火轮特效怎么弄(抖音风火轮特效怎么弄的)

  • 滴滴乘客取消订单后果(滴滴乘客取消订单对司机什么影响)

    滴滴乘客取消订单后果(滴滴乘客取消订单对司机什么影响)

  • StarUML建模工具破解安装详细教程,保姆级教学!(staruml教程)

    StarUML建模工具破解安装详细教程,保姆级教学!(staruml教程)

  • Python-split()函数用法及简单实现(python中的split函数)

    Python-split()函数用法及简单实现(python中的split函数)

  • 部分产品退货怎么办
  • 鲜花虫草开发票属于什么类别?
  • 主税零申报附加税怎样申报
  • 预提费用所得税前扣除
  • 私企捐助民办学校怎么办
  • 欠缴税款的后果
  • 视同销售收入计入会计利润吗
  • 财务杠杆和经营杠杆的区别
  • 跨区域缴纳社保
  • 股东以实物出资需要交税吗
  • 住宿费发票开错了可以重新开吗
  • 取得拍卖的固定资产
  • 执行公司股权
  • 全额抵扣有哪些
  • 关于固定资产管理
  • 一般纳税人是否享受小型微利企业优惠政策
  • 经营租赁中出租人发生的初始直接费用是指
  • 餐饮业管理费用明细表
  • 拍短视频服务费怎么算
  • win11如何设置定时关机
  • mysql输入中文显示乱码
  • Win10版本21H2卡死
  • vue中使用echars
  • html中a标签的作用
  • file php
  • 月末一次加权平均和移动加权平均的区别
  • 电子税务局已申报信息查询
  • wisdm数据集
  • 餐饮发票可以计入福利费吗
  • elementui动态表单数据回显
  • eccv论文下载
  • php显示图片代码
  • 再次回归的成语
  • 房租费发票可以抵扣增值税吗
  • 收入调节方式有哪三种
  • 公司给员工交社保是怎么交的
  • 工资的补贴是多少
  • python读取不到文件怎么办
  • 报销人和收款人是一个人
  • mysql数据库如何升级
  • c#连接数据库的基本步骤是什么
  • 预付房租计入长期待摊费用吗
  • 收到营业外收入政府补贴的会计分录
  • 无偿赠送货物如何申报增值税
  • 小规模纳税人减按1%账务处理
  • 家电销售范围包括哪些
  • 期末余额和期初余额
  • 流动比率与速动比率下降说明什么
  • 已经入库的商品出库了要怎么做会计分录
  • 政府无偿划拨土地如何摊销
  • 加计抵减附加税怎么算
  • 外账进销存单据是怎么弄的?
  • 研发费用会影响什么
  • 留抵税额可以抵欠税吗
  • 商业会计机构的组织形式
  • WINDOWS体验指数5.1
  • win10怎么设置有线网络
  • windows资源管理器被结束进程了怎么办
  • linux安装gdb命令
  • smsss.exe - smsss是什么进程
  • msg是啥
  • msqry32.exe进程是什么文件 作用是什么 msqry32进程查询
  • win10 2020h1
  • 如何用mac制作ppt
  • win7怎么设置u盘启动为第一启动项
  • Win10预览版更新弹窗如何关闭
  • shell在linux
  • Android游戏开发入门
  • jquery设计模式
  • jquery中绑定事件
  • shell for循环执行命令
  • diskpart ntfs
  • django 软删除
  • unity简单项目
  • jquery get(0)
  • 关于怀孕在线咨询
  • 涉农项目有哪些项目
  • 地址变更去税务局办理
  • 兼营增值税应税项目和免税项目
  • 职称申报后附件打不开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设