徐锦洪 发表于 2026-2-27 14:51:49

快速明白AIGC图像控制利器ControlNet和Lora的架构原理

ControlNet以及Lora是什么,玩过stable diffusion AI图像天生的同砚应该都不生疏。
一样平常来说,如果你用以SD 或 SDXL为根本的模子来天生图像,产出的图像每每非常随机,很难对图像的内容做相对正确的控制。尤其是原始的SD和SDXL的底模,拥有很好的图像泛化本领(也就是说能根据提示词输出各种范例的图像),但也使得图像的效果通常不是最佳的,对内容的定向正确化控制的本领每每也不敷。
好比你想让天生的图像更靠近真人照相风格一些(肤质,环境,灯光,胶片感等等)

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMGZmNWVmM2NhY2RmMjdhYzAyY2ViYTVhYmI3ZGU0ZGYucG5n
又大概你想正确控制图像天生的内容范畴,好比3D构筑模子大概游戏图标LOGO等

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZjZjOGE2Mjc4OTUzOGRmNDFkMWE4MGY5ZjkxYzg3MTcucG5n
也大概你想指定天生人物的边幅特性,好比天生特定人物,大概你本身的头像,又大概你想正确控制人物的姿势,高低胖瘦,画面的布局构造等等。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYTYwOWM2NmJiYmE5YjE1ZDQ0YmM4ZmI3OWUwOWFhNDYucG5n
这时间,你可以使用一些颠末Finetune微调训练过的专有模子(好比专门针对照相图片举行二次训练的模子)来对图像的内容做一些相对确定性的定制化输出。肯定水平上,这种在特定图像集内举行二次训练的模子,现实上也就是一种对特定内容或风格的图像举行过拟合的过程,使得输出的内容可以大概尽大概靠近指定范畴的图像,但这么做的效果,每每也导致其图像通用泛化输出本领的丧失,也就是捐躯了宽度调换了深度(好比很多人物画像模子就丧失了绘制风景图片的本领)
以是,你每每必要有各种差别的模子来输出差别的内容(至于Mid Journey等商业产物怎样做到泛化内容的高质量输出,我猜大要要否则是模子规模大得多,能容纳更多的知识,要否则就是内部做了差别范畴内容的预分流)。好比civitai上就有各种风格的模子可以下载

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYTY4YmRhOThiYjcyMGQyNmQ2ODlkNmViZDkxZGU5OGIucG5n
但是,类似SD如许的开源根本模子的体积根本都比力大(通常在2GB~8GB之间,相对寻常斲丧者用户来说),如果要大量使用的话,存储和加载的代价都比力高,别的,如果你必要天生多种差别的风格大概内容的混淆图像呢?那大概得组合就更多了。
那么,有没有更低资本和更机动的方式呢,这时间就轮到Lora登场了

LORA

LoRA全称Low-Rank Adaptation(低秩适配器) ,现实上最早是微软的同砚在大语言模子的训练中发明并使用的一种低资本的模子微调技能 (论文的名字就是  LORA: LOW-RANK ADAPTATION OF LARGE LANGUAGE MODELS https://arxiv.org/pdf/2106.09685.pdf )
其根本出发点也是为了低落大语言模子finetune的代价和大量Finetune模子加载的代价题目,毕竟商业化的语言模子通常体积要弘大于图像模子,如果有大量的好比175B尺寸的大语言模子必要定制,其训练,存储和加载的代价纵然是大公司也是难以蒙受的(紧张是商业红利资本方面的可操纵性)。只是厥后发现LoRA相干原理技能,应用在图像天生范畴的模子和场景中,也是特别的得当。
LoRA的根本头脑,是大部分的模子微调(大概定制,过拟合等等)过程,可以把微调后的模子等价的看作是一个原有的网络模子上旁路叠加上一个同样尺寸的针对增量微调内容的网络模子。微调训练后的模子的输出,相当于在原有网络模子的输出效果里混淆上这个增量微调的网络模子的输出效果。
与此同时,既然是模子的定制化微调,那么我们有来由可以假定,差别的内容应该不会特别的大,也就是说,这个旁路模子的有用信息密度大概相比原先的模子要小的多。那么用同样布局和尺寸的网络模子来存储有用信息密度小得多的数据,是不是就有点浪费呢?
我们知道,大部分的网络模子,其焦点数据就是各种网络参数,而这些参数大要上都是以各种巨细的矩阵向量的情势存在的。好比我们在前面“普通深入的明白Sora的架构原理”一文中先容的SD图像扩散模子中的UNet网络布局,就是由数十个卷积网络层构成,Transformer模子中的各种Cross Attention层也类似

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNTM2M2FlYjBiOWQ5ZDliNDIyZDk3MDFkNzgyZmNlZDcuanBlZw==
从数学的角度来说,一个矩阵的信息密度,大要可以用矩阵的“秩”(Rank)来大略衡量(这也是LoRA中Rank的语义泉源)
什么是秩呢,学过线性代数的同砚应该都懂,忘了也没关系,它等价于一个矩阵中互不相干的行或列的数量。也就是不能通过四则运算从别的行或列的数据组合盘算出来的行列有多少。简朴来说,就是有多少行列的数据是不重复冗余的,冗余的行列数据越多,可想而知有用信息密度就越低,矩阵的秩也就越小。
而这个秩的上限,就是矩阵行列数的最小值,好比1000x1000的矩阵,秩的上限就是1000。而1000x2或2x1000的矩阵,秩的上限也就只有2(毕竟最多也就两行或两列数据互不相干)。
以是如果矩阵中的有用数据密度很低(大概数据很希奇),大概它的秩就很低,那我们就没须要用高秩的矩阵来存储这些数据,用低秩的矩阵来近似更换就好了。
那怎么控制参数矩阵的秩呢? 那些参数不都是随机天生然后通过训练得到的嘛,而且,原始网络模子的输入输出的维度也是固定的,你怎么更换呢?
LoRA的方式是把旁路的矩阵更换成两个低秩矩阵的乘积。好比1000x1000的矩阵,用1000x2 和 2x1000的矩阵来更换,后者两个矩阵乘积运算的效果也是一个1000x1000的矩阵,也就是输入和输出可以和原矩阵的维度相匹配,但秩的上限就只有2了(由于按秩的界说,效果矩阵可以用相乘的两个矩阵的两行或两列数据的四则运算得到全部行列的数据)

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvNmY4NjBkODJjZTE3MTcyNmY2YTExOWE5MTlkZGRhZjYucG5n
以是,LoRA现实上并禁绝确控制参数矩阵的秩,只是限定了秩的上限,至于终极的现实数值照旧训练出来的,理论上训练完的模子参数,能充实使用参数矩阵的信息密度上限固然更好,如果不能,那也没办法,但反过来,无论怎样,你突破不了理论上限。
这么做的目的,固然是为了淘汰这部分旁路模子的参数数量,进而也就低落了训练的代价(时间和空间资本),好比上面的例子中,参数的数量就从1000x1000=100万 低落到了 1000x2x2=4000,低落了250倍。
现实训练过程中,原先的根本模子的参数是固定的,在Finetune迭代过程中只必要训练旁路网络的参数。而在使用过程中,只必要更换差别的旁路网络模子(乃至旁路叠加多个差别目的的网络模子),就能实现以较小的代价(训练,存储,推理)支持差别的目的场景输出的目的了。
好比在典范的SD图像天生场景中,一个根本模子的典范巨细大概是2GB到8GB之间,而一个Finetune的LoRA的典范巨细大概只有16MB到128MB之间(代价就是一个LoRA模子每每只能表达少数的特定语义),而训练的过程,简朴的LoRA每每也大概在斲丧级的显卡上用几非常钟到几十小时的时间范围就能完成。现实使用中,大概也是一个根本模子叠加多个LoRA使用,好比一个LoRA控制画面风格,一个LoRA天生指定人物的外貌特性。
喜好刨根到底的同砚大概还会问,既然没有改变终极的网络布局,为啥叠加一个网络模子以后,就可以控制图像的特性了呢,你不是说AIGC图像天生随机性很大,没法正确控制吗?
确实,简直是没法正确控制,以是本质上Finetune的过程,相对于原模子的泛化本领来说,照旧一个类似过拟合的过程,通过淘汰模子的输出大概性,降模子的输出限定到特定的范围内,来低落这个随机性,从而实现输出特定内容的目的。
现实训练LoRA模子的时间,大要都是选择一些特定方向内容的图片举行反复训练(特定人物图像,特定画风图像),使得LoRA模子学习到特定内容的表达方式。好比,下面这个Ink Painting的风格就是通过LoRA来控制实现的。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvZmNjMjVkMDk3YWRlMjVjNTE2ZTgwMzFjMWU4MjY2ZjAucG5n
固然,有些Silder滑轨调治类的LoRA(好比添补差别数值控制从瘦到胖,皮肤白到黑,画面细节增强)等等,则是通过训练相应特性差别阶段性差别的对比图像来实现的,这个就是详细应用层面的本领了。
而SD图像扩散模子,如我们之前文章所述,其天生过程是通已往除噪声来实现的,按差别比例混淆特定内容的噪声数据,也就能实现对特定内容输出控制的强度巨细。在使用的时间,也就可以在原模子的泛化本领和LoRA的过拟合控制之间探求一个符合的均衡点,来实现对特定内容的输出干预。

ControlNet

那么,有了LoRA为什么还必要ControlNet呢,这两者有啥区别不?
现实上,ControlNet的根本焦点思绪和LoRA非常类似,也是通过混淆旁路网络的输出效果,来实现对原网络模子输出效果的干预和调解。由于是模子叠加,以是和LoRA类似,它也能实现根本模子和一个或多个ControlNet模子按差别比例混淆叠加使用之类的效果。
但它和LoRA模子最大的差别,照旧在于网络布局和与原模子参数混淆方式的筹划上。LoRA的原理相对简朴粗暴,Low Rank的压缩方式淘汰了模子体积,但肯定水平上也限定了它的本领上限。
而ControlNet对原模子的参数矩阵并没有举行压缩,而是举行了1比1的正确复刻。固然他并没有复刻全部的模子条理,而是只复刻了部分编码层的模子参数布局。现实应用中,是将每一层编码层的输出效果通过一些线性变更再混淆回原模子的解码层中来实现对终极输出效果的干预和控制。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYjk5ODg1MGExMmZjZGY3MmE0YTQyYWMwMTExZDI3ODUucG5n
由于没有压缩模子参数规模,以是其本领上限很轻易明白,比LoRA是要高不少的,也具备更好的泛化本领。固然,ControlNet模子的尺寸相应的也就要大不少(典范的巨细好比从500MB到2GB之间)
固然,说它和LoRA的原理类似,只是从对根本模子干预的根本流程和原理的角度来说的。现实上,ControlNet最大的卖点照旧在他各种差别的应用模子的详细实现上。
差别于大部分LoRA模子是通过文本的激活和微调控制图像的内容,大部分的ControlNet模子都是以图像作参考来干预内容输出的(能这么做,根本的缘故原由,固然照旧由于本领上限空间更高,以是详细的应用模式就有了较大的区别)
一个典范的ControlNet模子的应用方式,大要分为两个步调

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYmNlNjM5Y2RjMGM2ZDcyY2I5Y2M0ZDA3M2U5NmVjOTgucG5n
第一个步调是通过一幅参考图像天生一个引导图像,这个过程实在并没有用到ControlNet的模子,每每是单独训练的各种特定用途的图像算法的模子,用来抽取这个参考图像的某方面的特性。这个抽取特性的模子,大概是各种经典的图像处置惩罚算法(好比边沿外貌检测,暗昧,反向,灰度梯度),也大概是别的深度学习算法(好比图像切割,姿态检测)。多数环境下也必要和第二个步调真正使用到的ControlNet模子配套使用。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvYWRmMzM5YTE0M2IxMTZmYWI5MjEyMzdiMzlmZDI4ZjUucG5n
第二个步调才是把这个表达了参考图像指定特性的引导图像给到ControlNet的模子作为输入控制条件,用这个引导图像联实用户的别的文本或图像提示条件,再去干预终极的图像天生效果。好比这个人物姿态和脸部特性检测及控制天生的例子。就是通过ControlNet OpenPose模子来实现的。

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvN2UyOWViZjE2YWRiNjA1ODNhNDk3Njc1MmJlN2FjNTcucG5n
固然,如果你已经有了特定的ControlNet模子所必要的引导图像(好比通过别的方式天生,手绘,之前存储下来的等等),那也可以直接使用该图像,从而跳过第一个步调。
看到这,你大概会问,干嘛要搞那么贫苦呢?不能直接用原始图像作参考来训练ControlNet的模子吗?如许使用的时间也不要串联两个模子了。
我个人的明白是:
第一,前面图像特性抽取的算法,已经有很多成熟通用的算法模子了,把这部分拆开,可以最大限度使用既有的先辈技能和效果,没须要重复造轮子。
第二,基于抽取的特性做特定ControlNet模子的训练,可以让模子忽略与想要的特性不相干的内容,克制受到原始图像中与想要抽取的特性不相干的信息的干扰(好比人物的姿态,和人物衣服着装的颜色,格局以致图像配景显然都没有任何关系),如许,一方面有利于增强模子的泛化本领,另一方面可以加快模子的迭代收敛速率。
第三,便于机动组合和更换两个步调中使用到的模子,实现差别的端到端本领组合,大概在差别的应用场景中复用既有的模块本领。
固然,理论归理论,现实本领和效果偶然候照旧挺让人惊奇的(好比洋火杆图可以在图像加噪扩散流程中控制人的形状姿态,这居然也是通过暴力的相干性训练能训练出来的)

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvOTcwODQ1OTEwOGM5NTAzYmM4YTMwMjkyOTdmMTJmM2YucG5n
从上述原理来看,详细的ControlNet模子的应用情势实在也是可以有各种大概的,未必肯定要通过参考图像的方式来运转,也未必肯定要抽取图像的特性来控制新天生的图像布局,完全也可以和LoRA类似好比用来天生特定人物特定画风的图像,但现在大多数的ControlNet模子照旧用来控制图像的详细图像布局的。毕竟前者,使用资本更低的LoRA就能较好的完成,没须要用到ControlNet,而后者正确控制图像布局则是落在通常的LoRA模子本领之外的。
因此,综上,现在的图像天生控制的尺度实践,大多数都是一个根本模子大概特定Finetune过的根本模子用来控制图像的宏观本领和基调,共同LoRA来控制图像风格或指定特定内容天生,然后通过ControlNet来正确控制团体图像构图

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMDUxN2U1ODhmOTlkODc1MWI3MTExZGVmODlkMjJkMDkuanBlZw==
但这并不是绝对唯一的解法,本质上上述各种图像控制方式,不管其架构怎样,都是通过相干文本或图像条件,引导天生特定内容的噪声扩散图像数据,然后在差别的阶段按需混淆到图像去噪的流程环节中,终极诱导模子的输出往指定的方向靠近,只要能告竣类似效果或目的,怎么实现都只是本领,上述流程只是一个当前各人广泛服从的最佳实践而已。
详细使用哪些模子,以什么样的情势去创造上层的不消应用场景形态,好比是控制图像布局照旧指定人物,姿态控制,配景更换,画风控制,换脸,易服服,图像自动扩边(out painting)等等,以致各种商业应用的大概性,可否想到,怎样实现,可否实现,必要共同哪些额外的附加工作流程和外围图像处置惩罚模块。很大水平上也是看你对相干模子的根本工作原理和本领界限是否明白,以及详细应用场景和流程大概性的想象力,以致行业商业模式的相识了。
好比像weshop如许用来做商家服饰模特和商品图天生的应用,就是一种很典范的应用

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvMjE1YmVkZTQzYzVhNDg1NzYxZjU2NWU4OWE2Y2E1M2MucG5n
固然,图像天生控制的模子和控制方式也不光有LoRA和ControlNet两种,现实上图像扩散模子的各个环节理论上都可以大概举行干预和修改,类似的环节大概也有一些差别或大或小的差别的方案实现,好比腾讯的同砚们提出的T2I-Adapter,其头脑和应用流程就和ControlNet很类似(在很多SD上层应用界面的封装中,也把它和ControlNet放在一起),有爱好的同砚可以自行相识

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pLWJsb2cuY3NkbmltZy5jbi9ibG9nX21pZ3JhdGUvOThiYTliOTgxNjJjNjBhY2M3M2Y0MmY3OWFjZDU4NGYucG5n
页: [1]
查看完整版本: 快速明白AIGC图像控制利器ControlNet和Lora的架构原理