【AIGC】【图像生成】controlNet介绍(原理+使用)

在这里插入图片描述


文章目录

  • 安装
  • 1、ControlNet:AI绘画
    • 1.1、ControlNet的本质是文生图(txt2img)
    • 2.2、预处理器 & 模型选择
    • 1.3、参数配置
  • 2、ControlNet 模型分类
    • 2.1、草图类(6个)
    • 2.2、高级特征类(3个)
    • 3.3、高级类(5个)
  • 3、配置参数
  • 4、基本原理:可控的SD模型
  • 5.可视化效果
  • 总结


安装

下载安装:建议下载V1.1版本,模型在:
https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main

1、ControlNet:AI绘画

如果要画一幅画,一方面是构图,一方面是风格。现在的AI绘画,就是炼丹。需要通过各种 prompt 来控制画面的构图和风格。

鉴于prompt 的专业性与复杂性,产生了两个模型: ControlNet就是用来控制构图的,LoRA就是用来控制风格。还有一个风格迁移的模型shuffle,此外,SD1.5也能生成好的图像。

那ControlNet是 如何构图呢?有以下两种方法:
1、已经手绘了草图,后续的完善和美化由 AI 去做;
2、利用现成的图,生成不同风格的新图。
那么这就是ControlNet做的事情:通过你手上已有的图而不是咒语,实现对AI绘图的控制。

这里只介绍 ControlNet,LoRA作为锦上添花的 work 后续介绍。

1.1、ControlNet的本质是文生图(txt2img)

ControlNet的原始论文:《Adding Conditional Control toText-to-Image Diffusion Models》 及代码,最原始是一个 txt2img 的工作。此外还有 inpaint 的附加功能,也就是替换、消除等。
所以在WEB UI中,不管是txt2img还是img2img,都有ControlNet。

2.2、预处理器 & 模型选择

要保证预处理器(preprocessor)跟模型(model)是同类的

预处理器preprocessor:对参考图预处理,作为控制图,给到后续的对应模型进行控制出图。比如:如果选择了scribble类的预处理器,那么模型就最好选择scribble模型:
在这里插入图片描述
上图中,第一行分别是原图和scribble预处理后的图,想画一只类似猫头鹰。第二行是不同配置条件下的AI出图结果。只有预处理跟模型是一致的情况下,才能得到比较好的结果图,如果预处理器或者模型有一者为空,基本就等同于ControlNet未生效,就是一般的SD出图,如第二行的中间两幅图。 WEB UI开发者也注意到了预处理器vs模型之间对应关系的问题,所以在1.1.2XXX版本中限定了预处理和模型之间的对应关系,如下图所示。

在这里插入图片描述

1.3、参数配置

由于可调参数多,第一次使用默认参数,如果效果不好,再做参数细调。

2、ControlNet 模型分类

ControlNet1.1版本发布了14个模型,主要可以分成三类:

2.1、草图类(6个)

主要是用预处理器,将图像处理成草图,或者直接输入手稿也行。

预处理器有以下几种:
1)Canny:边缘提取器,最常用
2)MLSD:特殊的线条检测(比如直线),适合建筑设计、室内设计
3)lineart :线条提取(早期版本叫fake_scribble )
4)lineart_anime:需要配合anything_v3-v5的大模型(需要复杂提示词)使用
5)SoftEdge:区分几种预处理器,综合效果选择SoftEdge_PIDI
6)Scribble:涂鸦,类似于简笔画

以下是不同预处理器的效果和差异

在这里插入图片描述

以下是Scribble的效果

在这里插入图片描述
简单的prompt就能生成非常好的效果图

2.2、高级特征类(3个)

1)depth:深度图
2)seg:语义分割图。譬如粉色是建筑物、绿色是植物等
3)normalbae:法线贴图(法线就是像素的梯度,反映了纹理)

以下是效果图,后面两列是模型生成的新图

在这里插入图片描述

对应的预处理器如下(可随机选,效果类似):

1.depth:支持depth_Midas, depth_Leres, depth_Zoe等等,以及别其他软件生成的depth map
2.seg:支持Seg_OFADE20K、Seg_OFCOCO、Seg_UFADE20K,以及人工手绘的蒙版。
3.normalbae:支持normal_bae, normal_midas

3.3、高级类(5个)

1)OpenPose:骨骼捕捉,很热门
2)inpaint:局部修图,可以很自然删除一些目标
3)shuffle:风格混合,转换不同风格
4)ip2p:指令式修图,可以识别有限的指令
5)tile:图像超分:会增加原图没有的细节。

以下是ip2p的效果

在这里插入图片描述

以下是shuffle 的效果

在这里插入图片描述


3、配置参数

大多数参数选择默认就可以了,在高阶应用时需要调参。除了对预处理器与模型的选择,下面介绍别的参数

在这里插入图片描述

黄色框:跟所选的 预处理器和模型相关的。主要是线条粗细、细节丰富程度等参数

红色框

第一组:基础控制,比较简单
1)enable:是否启用ControlNet
2)lowVRAM:低精度,可以减少显存消耗
3)Pixel Perfect:是新版本新增功能,对应黄框中的第一项preprocessor resolution,算法自己去计算最合适的resolution。如果不是512*512这种的方形出图,建议勾上这个选项。
4)allow preview:提前预览 预处理器的效果

第二组:权重控制(可以直接用默认)
1)control weight:控制网络的控制权重
2)starting control step:什么时候介入控制(百分比)
3)ending control step:什么时候退出控制(百分比)
如果不想用controlNet控制太多,则可以晚点介入

第三组:控制模式(可以直接用默认)
1)balanced
2)my prompt is important
3)ControlNet is important
用于分配 prompt 和 参考图的权重比例

第四组:裁剪方式
当控制图(参考图)的尺寸跟目标图(txt2img里面要生成的图)的尺寸不一致时,需要配置这组参数:
1)just resize:变更控制图的长宽比以适应目标图的尺寸比例(可能导致形变)。
2)crop and resize:对控制图进行裁剪以适应目标图的尺寸比例 。
3)resize and fill:对控制图进行缩放,保证整个控制图能塞到目标图中去,然后对多余部分进行空白填充。

4、基本原理:可控的SD模型

ControlNet:将stable diffusion模型,克隆出一个副本

ControlNet是一个用于 深度神经网络 的控制技术,它可以通过操作神经网络的输入条件来控制神经网络的行为。网络主要包含 “resnet”块、“conv-bn-relu”块、多头注意力块等。通过克隆神经网络块的参数, 并应用零卷积连接层来实现ControlNet的目标。

副本网络与原始网络块的输入和输出是一致的。训练初始阶段,ControlNet不会对神经网络产生影响。零卷积的权重和偏置值都被初始化为零,这使得ControlNet在优化过程中不会影响权重和偏置值的梯度。ControlNet通过控制神经网络块的输入条件来调整神经网络的行为,并适应不同的任务和数据。每个神经网络块由一组参数来定义,这些参数可以在训练过程中进行优化。

在这里插入图片描述

ControlNet 应用于任意神经网络块。x; y 是神经网络中的深度特征。“+” 表示特征加法。“c” 是我们要添加到神经网络中的额外条件。“zero convolution” 是一个 1 × 1 卷积层,其权重和偏置都初始化为零

ControlNet结构可以表示为:

yc = F(x; α) + Z(F(x + Z(c;βz1); βc); βz2)

其中,yc是该神经网络块的输出结果。在第一次训练步骤中,神经网络块的可训练副本锁定副本的所有输入和输出不受ControlNet 影响。任何神经网络块的能力、功能和结果质量都得到完美保留,并且任何进一步的优化将变得像微调一样快(与从头开始训练这些层相比)。

在第一次训练步骤中,由于零卷积层的权重和偏置值都初始化为零,我们有:

Z(c; βz1) = 0
F(x + Z(c; βz1); βc) = F(x; βc) = F(x; α)
Z(F(x + Z(c; βz1); βc); βz2) = Z(F(x; βc); βz2) = 0

当应用ControlNet到一些神经网络块时,在任何优化之前,它都不会对深度神经特征产生影响。任何神经网络块(比如预训练的SD)的能力、功能和结果质量都得到完美保留,并且任何进一步的优化将变得像微调一样快。通过迭代的过程,重复应用ControlNet操作来优化神经网络块。这样,在每一步中,我们可以保持所有其他神经网络块不变,仅对某些神经网络块进行修改和调整

原文以 Stable Diffusion为基础,使用ControlNet对大型网络进行控制:将Encoder复制训练,decoder部分进行skip connection。

在这里插入图片描述

图中 “Zero Convolution”是带有零初始化权重和偏差的1×1卷积。模型开始训练之前,所有零卷积输出都是零,此时模型仍然是原始的Stable Diffusion Model而在加入自己的训练数据之后,则会对最终结果做微调,因此不会导致模型出现重大偏离的情况

我们从整体的模型结构上可以看出,作者在Stable Diffusion 模型的decode层加入了上述“0卷积层”,以实现对最终模型与训练数据的一致性。

5.可视化效果

图像分割搭配SD1.5
在这里插入图片描述

姿态检测搭配SD1.5:
在这里插入图片描述

通过HED轮廓,搭配SD1.5
在这里插入图片描述

灵魂画师搭配SD1.5
在这里插入图片描述


总结

部分图片转载自知乎用户@BitByBit

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

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

相关文章

嵌入式IDE(2):KEIL中SCF分散加载链接文件详解和实例分析

在上一篇文章IAR中ICF链接文件详解和实例分析中,我通过I.MX RT1170的SDK中的内存映射关系,分析了IAR中的ICF链接文件的语法。对于MCU编程所使用的IDE来说,IAR和Keil用得比较多,所以这一篇文章就来分析一下Keil的分散文件.scf(scat…

flink的物理DataFlow图及Slot处理槽任务分配

背景 在flink中,有几个比较重要的概念,逻辑DataFlow图,物理DataFlow图以及处理槽执行任务,本文就来讲解下这几个概念 概念详解 假设有以下代码:数据源和统计单词算子的并行度是2,数据汇算子的并行度是1&…

学习Bootstrap 5的第四天

目录 表格 基础表格 实例 条纹表格 实例 带边框表格 实例 有悬停效果的行 实例 黑色/深色表格 实例 黑色/深色条纹表格 实例 可悬停的黑色/深色表格 实例 无边框表格 实例 上下文类 可用的上下文类: 实例 表头颜色 实例 小型表格 实例 响应…

Python 递归、迷宫问题、八皇后问题

递归应用场景 各种数学问题,如八皇后问题、汉诺塔、阶乘问题、迷宫问题、球和篮子问题等各种算法中也会使用到递归,比如快排、归并排序、二分查找、分治算法等能够用栈解决的问题递归的优点就是代码比较简洁 迷宫问题(Python版)…

pcie 总结

用户空间pci 常用命令 lspci 查看所有pci 设备 lspci -t 树形查看所有设备 lspci -s 00:1f.6 -vvv 查看某个设备所有信息 lspci -s 00:1f.6 -vvv -xxx 增加16进制看看 sudo cat /proc/iomen | grep PCI 查看所有地址映射 如何确定pcie io空间 内存空间大小 (1)读取出基地址…

什么是RPA机器人?RPA机器人能做什么?RPA机器人的应用场景

什么是RPA机器人? RPA机器人是一种使用软件机器人来模拟和执行人类操作的技术。RPA代表Robotic Process Automation(机器人流程自动化)。它是一种自动化技术,可以使用预定规则和预定流程来执行重复性、繁琐或规定任务的工作。 RP…

[论文笔记] Gunrock: A High-Performance Graph Processing Library on the GPU

Gunrock: A High-Performance Graph Processing Library on the GPU Gunrock: GPU 上的高性能图处理库 [Paper] [Code] PPoPP’16 摘要 Gunrock, 针对 GPU 的高层次批量同步图处理系统. 采用了一种新方法抽象 GPU 图分析: 实现了以数据为中心(data-centric)的抽象, 以在结点…

机房运维管理软件不知道用哪个好?

云顷网络还原系统V7.0是一款专业的机房运维管理产品,基于局域网络环境,针对中高端机房中电脑运维管理需求所设计开发的。网络还原系统软件通过全面的规划和设计,遵从机房部署、使用到维护阶段化使用方式,通过极速网络同传/增量对拷…

智能电话机器人的出现,能够解决哪些问题?

经济的繁荣与高速的发展,使得电销这个方式快速地融合在房地产与金融投资等大部分行业上。在电销人员与客户的沟通上,难免会出现很多问题,毕竟所面对的客户都是各行各业,他们有着不同的经历和身份。 对于时常需要处理客户投诉、安…

2023数模国赛C 题 蔬菜类商品的自动定价与补货决策-完整版创新多思路详解(含代码)

题目简评:看下来C题是三道题目里简单一些的,考察的点比较综合,偏数据分析。涉及预测模型和运筹优化(线性规划),还设了一问开放型问题,适合新手入门,发挥空间大。 题目分析与思路: 背景&#x…

MJ绘制「酱香拿铁」可爱壁纸;LLM产品团队招聘预告;FlowGPT提示词大赛第3季;台大深度学习音乐分析与生成最新课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 蹭「酱香拿铁」热点的Midjouney绘图创意,好可爱的手机壁纸 小红书作者 美学孤诣 使用 Midjourney 制作了「上个茅班」的手…

Emgu调用摄像头

1,安装EMgu 2,调用摄像头 public FaceLoad(){InitializeComponent();try{capture new Capture();capture.Start();//摄像头开始工作capture.ImageGrabbed frameProcess;//实时获取图像}catch (NullReferenceException excpt){//MessageBox.Show(excpt.Message);}}…

原生JavaScript+PHP多图上传实现

摘要 很多场景下需要选择多张图片上传&#xff0c;或者是批量上传以提高效率&#xff0c;多图上传的需求自然就比较多了&#xff0c;本文使用最简单的XMLHttpRequest异步上传图片。 界面 上传示例 代码 index.html <!DOCTYPE html> <html><head><titl…

【C++ • STL】一文带你走进string

文章目录 一、STL简介二、标准库中的string类三、string类的常用接口说明2.1 string类对象的常见构造2.2 string类对象的访问及遍历操作2.2.1 元素访问2.2.2 迭代器 2.3 string类对象的容量操作2.4 string类对象的修改操作2.5 string类非成员函数 四、总结 ヾ(๑╹◡╹)&#x…

Docker 的分层文件系统

1 分层文件系统 UnionFS 联合文件系统 bootfs&#xff1a;boot file systemrootfs&#xff1a;root file system 分层文件系统 Docker镜像都是只读的&#xff0c;当容器启动时&#xff0c;一个新的可写层被加到镜像的顶部&#xff0c;这一层就是我们通常说的容器层&#xf…

2023高教杯数学建模1:ABC题目+初步想法

2023 ABC题目初步想法 写在最前面A题&#xff1a;定日镜场的优化设计问题1&#xff1a;建模将其抽象为数学公式问题2&#xff1a;固定部分参数&#xff0c;约束条件下的局部最优化问题可尝试方法 问题3&#xff1a;约束条件下的局部最优化问题附录&#xff1a;相关计算公式参考…

LeetCode 1004.最大连续1的个数

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 硬往题目介绍上边去想的话其实非常困难&#xff0c;如果换种方式思考就会简单许多。 若我们将思想转化为&#xff0c;找出最长的子串(里面含有的0的数量最大为k)&#xff0c;然后返…

ipad触控笔有必要买原装吗?开学季ipad2023手写笔推荐

随着开学新学期的开始了&#xff0c;而平板电脑也开始在学校里流行了起来&#xff0c;这也给学生们带来了更多的便利。而苹果的原装电容笔&#xff0c;尽管功能很强&#xff0c;但是因为它的价格比较贵&#xff0c;要是你仅仅只是用来做学习和记录笔记的话&#xff0c;所以在国…

结构方程模型SEM、路径分析房价和犯罪率数据、预测智力影响因素可视化2案例...

原文链接&#xff1a;http://tecdat.cn/?p25044 在本文&#xff0c;我们将考虑观察/显示所有变量的模型&#xff0c;以及具有潜在变量的模型&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 1 简介 第一种有时称为“路径分析”&#xff0c;而后者有时称为“测…

这应该是最全的机器学习模型可解释性的综述

模型可解释性方面的研究&#xff0c;在近两年的科研会议上成为关注热点&#xff0c;因为大家不仅仅满足于模型的效果&#xff0c;更对模型效果的原因产生更多的思考&#xff0c;这样的思考有助于模型和特征的优化&#xff0c;更能够帮助更好的理解模型本身和提升模型服务质量。…