这个系列会分享下stable diffusion中比较常用的几种练习方法,分别是Dreambooth、textual inversion、LORA、Hypernetworks和ControlNet。在civitai.com/挑选模型时也能看到它们的身影。本文该系列的第五篇
- Dreambooth
- Textual Inversion
- LoRA
- Hypernetworks
- ControlNet
前语
论文链接:arxiv.53yu.com/abs/2302.05…
代码链接:github.com/lllyasviel/…
ControlNet能够从供给的参阅图中获取布局或许姿势等信息, 并引导diffusion model生成和参阅图类似的图片。这种功用关于生成模型来说至关重要, ControlNet开源到stable diffusion中时, 很多自媒体文章的标题都是《XX职业要结束了》, 有点杀死比赛的意思。练习和测试过stable diffusion的朋友应该知道, prompt至关重要, 而调整prompt确实是一件费时吃力的事情, 想要操控好一些细节十分不简单。往往都是生成很多图片, 能得到几个满足的。而有了ControlNet则能够准确的操控生成图片的细节(当然, 也依赖于你现已有一张参阅图了)
分散模型中会需求运用text作为条件引导模型生成, 而ControlNet在引导的时分会增加一个条件完成更加可控的text-to-image生成.
diffusion model发展十分敏捷, 针对diffusion model的一些痛点, 作者提出了几个问题和练习分散模型时的约束, 并着手用ControlNet解决:
- 基于prompt的操控是否能满足我们的需求?
- 在图画处理中, 有许多有明确定义的长时刻使命, 是否能够用大模型来使这些使命到达新的高度?
- 应该用什么样的结构处理用户想要的各种各样条件?
- 在特定场景, 新提出的结构怎么能承继大模型(diffusion model)的能力.
三点约束:
- 特定场景的数据量少, 在较少的数据量上很简单出现过拟合
- 大的核算集群很奢华, (stable diffusion base模型需求15万个A100显卡小时)
- end2end是必要的, 一些特定场景需求将原始的输入转为更高语义的表达, 手艺处理的方法不太可行
Method
关于上面的4个问题和3点约束, 作者提出了ControlNet, ControlNet具有以下的特色:
- end2end
- control large im age diffusion model(例如stable diffusion)
- learn task-specific input conditions
为了能承继大模型的能力, ControlNet将本来大模型的参数分为两部分, 分别是可练习和冻住的。比照下增加ControlNet结构前后的网络图很简单理解。
之前stable diffusion的模型结构如下图所示:
图(a)是之前stable diffusion的输出, 图(b)和图(a)的差异在于增加了ControlNet的结构, 具体而言是将neural network block
复制了一份, 作为trainable copy
,而且neural network block
的网络参数会被冻住住。而且trainable copy
前后会有zero convolution
, zero convolution
其实是1*1的卷积。最终会将neural network block
和trainable copy
的特征相加。
neural network block
的作用能够用下面的公式表示
xx是一个2D的feature, 其shape为{h,w,c}分别代表height, width, channel.\theta代表neural network block
的参数, y表示通过neural network block
后的特征。
增加了control后, 网络会从公式1
变为下面的公式2
ZZ代表zero convolution
, z1\theta_{z1},z2\theta_{z2},c\theta_{c}分别代表第一个, 第二个zero convolution
的参数和trainable copy
的参数。
在初始化练习的时分, zero convolution
的weight和bias会被初始化为0, 因而ControlNet具有以下的特色:
实践上是为了让初始化的时分增加了ControlNet的模型和原始的模型作用是相同的, 后续再渐渐finetune
能够简化成下面的表达式
ycy_c是加上ControlNet的输出, 而yy是原始的输出, 模型初始化时两者是持平的
文章中特地解释了zero convolution
梯度更新的问题, 在模型开端迭代前, 有W=0, B=0.则
能够看到权重W的梯度是I, 而偏置B的梯度是1.阐明zero convolution
是能够正常更新的
ControlNet的具体结构如下图所示:
灰色部分是本来stable diffusion的结构, 蓝色部分是从U-Net的encode对应部分copy, 通过zero convolution
后和U-Net的decode相加。
了解了结构后, 下面是练习的细节。−\epsilon-\epsilon_{\theta}和原始的stable diffusion是相同的, 是每次生成噪声和实践噪声的差值。差异在于加入了ControlNet新加的操控条件cfc_f。其他的参数都和stable diffusion相同, ztz_t代表噪声图片, tt代表迭代次数,ctc_t代表text prompt。
在实践练习的时分, 会随机让50%的text prompt变为空, 促使模型更多的关注cfc_f,让模型学习用cfc_f操控图画生成。
虽然ControlNet新加了些模型结构, 但由于大部分参数都被冻住, 因而练习时实践上只用本来stable diffusion模型的23%显存和34%的练习时刻, 能够在单张40GB的A100卡上做练习
核算资源的约束: 假如数据量比较少, 能够只衔接U-Net中的SD Middle Block, 而衔接decoder的zero convolution
都不必, 能够减少参数量。能够将ControlNet的练习速度进步1.6倍(在RTX 3070TI的消费级显卡上也能够做练习)。
有很多的练习资源: 假如有很多的练习资源(8张A100), 为了获取更好的作用能够将原始U-Net模型中的被冻住参数的decoder部分也参与模型练习。
消融实验
这部分没有定量的分析, 更多的是通过一些case标明ControlNet能有用的操控生成的图画, 因为究竟新加了个条件, 没有现成的数据集用来评测。
有无ControlNet结构比照
下面的图最左边是ControlNet运用的canny图;中间是没有controNet, 只通过text prompt操控生成的房子及周边环境;右边是运用了ControlNet的图, 能够看到不实用ControlNet, 房子的结构可能会发生一些改变, 而加上了ControlNet后, 房子的结构一直固定, 改变只有房子的外观和周边的环境。
忽然收敛现象
作者发现ControlNet在练习的时分会出现忽然收敛, 这种收敛一般发生在5000-10000步, 而且收敛之后假如持续迭代模型的变化并不大。例如下面的图, 供给了苹果的canny图和text prompt: apple, 但模型最开端学习到的是苹果电脑相关的, 到6100步图片中依然没有学习到生成供给的canny图类似的图片, 但只是过了33步后到6133步模型忽然就学会了!而且该现象和batch size关系不大, 也便是说假如增大batch size 模型差不多也会在6133步收敛, 优点是大batch size收敛出的模型作用更好。
canny-edge-based模型和练习数据大小的关系
在50k数据之前增加数据作用会有显着的提升, 但50k之后狮子生成的现已很好了, 差异在于增大数据后背景会更加好点。有点像忽然收敛之后持续迭代的状况。
和其他用图画作为条件引导生成方法的比照
depth
在stable diffusion V2.0中有个很重要的更新——Depth-to-Image Diffusion, 能够揣度输入图画的深度信息, 然后利用文本和深度信息生成新图画。
这种方法和depth-base ControlNet很像, 比照如下图所示:
从生成作用上两者看起来都十分好(硬要比的话, ControlNet作用稍好些)。从练习成本上, stable diffusion V2.0需求很多A100的练习集群在1200万的练习数据练习2000GPU-hours, 而Depth-based ControlNet在stable diffusion V1.5的基础上预练习, 运用单张RTX 3090TI在20万数据上练习1周。这么比照确实ControlNet太香了
segmentation
下面的图比照的是PITI(Pretraining-Image-to-Image)和segmentation-base ControlNet
Scribbles
下面的图比照的是Sketch-guided diffusion和scribbles-base ControlNet
canney
下面的图比照的是Taming Transformer和canney-base ControlNet
操控条件比照
不同操控条件下生成作用的比照, 作者给了一个房间布局的图, 然后分别用cannry, depth, HED, Nromal, Line和Scribbles的方法做比照。其实这几个模型都有更适合的使用场景, 关以房间布局的例子而言, Line和HED是更合适的, 这个从Line和HED的图画特征就能看出。
其他
更多的使用,下面的图展现的是把原图的一部分mask掉, 然后随意画几笔草图, 生成的图便是没mask掉的部分结合草图的完成作用。(太牛了)
当图画细节比较简单时, ControlNet能够完成准确的操控
假如需求统筹和提示图片类似与多样性两种需求, 能够在生成图片中灵敏的设置ControlNet参与图片生成的步数。例如下面的图, 和原始图相似, 但也保证了多样性
局限性
ControlNet可能会误解canney和depth等图画特征的意义, 例如下面的图是一个水杯的canney图, ControlNet生成的是一个农田, 加上a glass of water
后, 生成的图片稍微好点, 但依然和实践的有差异。
总结
ControlNet的原理到这儿就介绍完了, 做的改善很简洁, 只需求较小的数据集就能够用作练习(50k, 比较diffusion model亿级别确实实小不少)。用的核算资源较少, 而且做一些参数调整后甚至能够在消费级的显卡上做练习。总共有10个不同图画特征的模型, 能够适应多种生成需求。ControlNet在stable diffusion中现已开源了, 而且在webui上很简单增加和尝试,这部分有十分多的blog和视频有解说, 就不再赘述了。