2022年注定伟大,AI行业从传统深度学习时代迈向了AIGC时代,在以Stable Diffusion,Midjourney,ChatGPT为首的大模型爆发式的发展和推动下,AIGC的持续发展浪潮进入了不可逆转的时刻。
AI绘画作为AIGC时代的图像内容核心方向,开源社区已经形成以Stable Difffusion为核心,ConrtolNet和LoRA作为首要AI绘画辅助工具的变化万千的AI绘画工作流。
而本文将要介绍的ControlNet正是让AI绘画社区无比繁荣的关键一环,它让AI绘画生成过程更加的可控,有助于更广泛地将AI绘画应用到各行各业中。
同时,由于Stable Diffusion + LoRA + ControlNet三巨头的强强联合,形成了一个变化多样的AI绘画“大框架”。在这个大框架中,传统图像处理技术(Canny,Depth,SoftEdge等)再次得到广泛使用,成功文艺复兴;传统深度学习技术(人脸识别,目标检测,图像分割,图像分类等)也直接过渡到AIGC时代,成为AIGC工作流中的重要工具。计算机视觉历史中的沉淀与积累,都在AIGC时代有了相应的位置。
因此在本文中,Rocky主要对ControlNet的各个细节做一个深入浅出的分析总结(最新ControlNet资源分享,ControlNet原理解析,ControlNet模型结构解析,从0到1搭建推理流程,从0到1ControlNet模型训练教程等),和大家一些探讨学习,在AIGC时代更好地融合和从容。
1. ControlNet资源分享
- ControlNet论文:https://arxiv.org/pdf/2302.05543.pdf
- 官方项目:lllyasviel/ControlNet: Let us control diffusion models
- ControlNet 1.1模型地址:https://github.com/lllyasviel/ControlNet-v1-1-nightly
- WebUI上的ControlNet插件:https://github.com/Mikubill/sd-webui-controlnet
2023.10.20更新:ControlNet 1.1模型并没有改变网络结构,主要针对之前的模型进行了继续训练并且新增加了几个之前没有公布的模型。
2. 零基础深入理解ControlNet核心基础原理
ControlNet是一种“辅助式”的神经网络模型结构,通过在Stable Diffusion模型中添加辅助模块,从而引入“额外条件”来控制AI绘画的生成过程。
下图是ControlNet模型的最小单元:
ControlNet模型的最小单元结构示意图
从上图可以看到,在使用ControlNet模型之后,Stable Diffusion模型的权重被复制出两个相同的部分,分别是“锁定”副本和“可训练”副本。
ControlNet主要在“可训练”副本上施加控制条件,然后将施加控制条件之后的结果和原来SD模型的结果相加(addd)获得最终的输出结果。
其中“锁定”副本中的权重保持不变,保留了Stable Diffusion模型原本的能力;与此同时,使用额外数据对“可训练”副本进行微调,学习我们想要的添加的条件。没有任何权重是从头开始训练的,所以我们使用小批量数据集就能对控制条件进行学习训练,同时不会破坏Stable Diffusion模型原本的能力。
另外,大家可能发现了ControlNet模型的最小单元结构中有两个zero convolution模块,它们是1×1卷积,并且权重和偏置都初始化为零。这样一来,在我们开始训练ControlNet之前,所有zero convolution模块的输出都为零,使得ControlNet完完全全就在原有Stable Diffusion底模型的能力上进行微调训练,不会产生大的能力偏差。
所以,如果我们不使用ControlNet模型时,可以将图像生成过程表达为:
在使用ControlNet之后,整体的图像生成表达式转化成为:
其中 �=�(�;Θ) 代表了zero convolution模块。
由于训练开始前zero convolution模块的输出都为零,所以ControlNet未经训练的时候输出为0:
这种情况下对SD模型是没有任何影响的,就能确保SD模型原本的性能完整保存,之后ControlNet训练也只是在原SD模型基础上进行优化。ControlNet模型思想使得训练的模型鲁棒性好,能够避免模型过度拟合,并在针对特定问题时具有良好的泛化性,在小规模甚至个人设备上进行训练成为可能。
3. ControlNet核心网络结构解析
在上一章中,Rocky带大家学习了ControlNet核心基础原理与ControlNet最小单元,接下来Rocky将和大家详细讲解完整ControlNet核心网络结构。
我们从ControlNet整体的模型结构上可以看出,其主要在Stable Diffusion的U-Net中起作用,ControlNet主要将Stable Diffusion U-Net的Encoder部分进行复制训练,在Stable Diffusion U-Net的Decoder模块中通过skip connection加入了zero convolution模块处理后的特征,以实现对最终模型与训练数据的一致性。
因此ControlNet可以对图像的背景、结构、动作、表情等特征进行精准的控制。
4. 从0到1在WebUI中使用ControlNet进行AI绘画(全网最详细讲解)
目前ControlNet有18种Control Type,分别是Canny,Depth,NormalMap,OpenPose,MLSD,Lineart,SoftEdge,Scribble/Sketch,Segmentation,Shuffle,Tile/Blur,Inpaint,InstructP2P,Reference,Recolor,Revision,T2I-Adapter,IP-Adapter。
从上面的Control type可以看出,ControlNet无疑引领了CV领域的“文艺复兴”,很多传统图像处理时代的算子(Canny,Depth,SoftEdge等)在AIGC时代中再次展现它们的能量。
下面,Rocky将为大家介绍如何在WebUI中安装使用ControlNet,并且详细讲解18种Control type的用法。
4.1 零基础使用Stable Diffusion WebUI搭建ControlNet推理流程
首先,我们进入WebUI的extensions目录下,并在命令行输入一下命令即可安装ControlNet插件:
cd stable-diffusion-webui/extensions/
git clone https://github.com/Mikubill/sd-webui-controlnet.git
安装完毕后,重启WebUI即可看到ControlNet插件面板:
WebUI中ControlNet插件面板
接下来Rocky为大家详细介绍ControlNet插件面板中各个参数的具体作用,大家可以点赞收藏本文,在使用时可以方便的找到:
ControlNet插件面板第一行中的ControlNet Unit 0-3表示默认设置为三个ControlNet选项界面,能够在Stable Diffusion生成过程中使用三个ControNet模型,可以手动增加或减少ControlNet选项界面。
ControlNet插件面板第二行有Single Image和Batch两个选项卡,表示使用一张图片或一个Batch的图片进行预处理,用于ControlNet过程。
Enable(启用):点击选择Enable后,点击WebUI中的Generate按钮时,将会加载ControlNet模型辅助控制图像的生成过程。如果不点击选择Enable按钮不生效。
Low VRAM(低显存模式):如果我们的显卡显存小于4GB,可以开启此选项降低生成图片时ControlNet的显存占用。
Pixel Perfect(完美像素模式):开启完美像素模式之后,ControlNet 将自动计算选择预处理器分辨率,不再需要我们手动设置分辨率。通过自动进行这些调整,它可以保证最高的图像质量和清晰度。Rocky在这里打一个不太恰当的比喻,ControlNet的Pixel Perfect功能,就如同YOLOv5的自适应anchor一样,自动化为我们的参数调整免去了很多麻烦。
Allow Preview(预览展示模式):启用后将会把图片经过Preprocessor预处理后的结果展示出来,比如图片的边缘信息,深度信息,关键点信息等。
开启和不开启Allow Preview形成的区别
Control Type(控制类型):一共有18种控制类型可以选择,选择一个Control Type后,Preprocessor和Model栏里也会限定只能选择与Control Type相匹配的算法和模型,非常方便。
Preprocessor(预处理器):在Preprocessor栏里我们可以选择需要的预处理器,每个预处理器都有不同的功能。选择的预处理器会先将上传的图片进行预处理,例如Canny会提取图片的边缘特征信息。如果图片不需要进行预处理,设置Preprocessor为none即可。
Model(模型):Model栏里我们可以选择ControlNet模型,用于SD生成图片时进行控制。
Control Weight(ControlNet权重):代表使用ControlNet模型辅助控制SD生成图片时的权重。
Starting Control Step(引导介入时机):表示在图片生成过程中的哪一步开始使用ControlNet进行控制。如果设置为0,就表示从一开始就使用ControlNet控制图片的生成;如果设置为0.5就表示ControlNet从50%的步数时开始进行控制。
Ending Control Step(引导推出时机):表示在图片生成过程中的哪一步结束ControlNet的控制。和引导介入时机相对应,如果设置为1,表示使用ControlNet进行控制直到完成图片的生成。Ending Control Step默认为1,可调节范围0-1,如果设置为0.8时表示到80%的步数时结束控制。
Control Mode(控制模式):在使用ControlNet进行控制时,有三种控制模式可以选择,用于确定ControlNet于Prompt之间的配比。我们可以选择平衡二者 (Balanced),或是偏重我们的提示词 (My prompt is more important),亦或者是偏重ControlNet (ControlNet is more important)。
下图是是三种控制模式的效果对比:
ControlNet三种Control Mode的效果对比
Resize Mode(缩放模式):用于调整图像大小模式,一共三个选项:Just Resize,Crop and Resize和Resize and Fill。
我们拿512x500的图像为例,使用三个缩放模式生成一个 1024x1024的图像,看看主要经过了哪些过程:
Just Resize:不考虑宽高比,直接将图像拉伸成1024x1024分辨率。
Crop and Resize:考虑宽高比,先将图片裁剪至 500x500,然后缩放至1024x1024分辨率,会造成左右两侧的一些数据丢失。
Resize and Fill:通过添加噪音的方式将图像填充至512x512,然后缩放到1024x1024分辨率。
Loopbac按钮:[Loopback] Automatically send generated images to this ControlNet unit。点击开启后,在mov2mov等持续性生成过程中,每一帧的结果都会进行ControlNet控制。
Presets:用于保存已经配置好的ControlNet参数,以便后续快速加载相关参数。
4.2 Canny使用详解
Canny边缘检测算法能够检测出原始图片中各对象的边缘轮廓特征,提取生成线稿图,作为SD模型生成时的条件。
接着再设置不同的提示词,让SD模型生成构图相同但是内容不同的画面,也可以用来给线稿图重新上色。
使用Canny边缘检测算法进行图像预处理的结果
Canny中一共有2种Preprocessor,分别是Canny和invert (from white bg & black line)。
如果输入的图像具有白色背景和黑色线条,我们可以使用invert,其效果如下图所示:
使用invert进行图像预处理的结果
Canny中一共有10种ControlNet模型可以选择,包括coadapter-canny-sd15v1,control_any3_canny,control_sd15_canny,control_canny-fp16,control_v11p_sd15_canny,controlnet-canny-sdxl-1.0,diff_control_sd15_canny_fp16,sdxl_canny_fp16,t2iadapter_canny_sd14v1,t2iadapter_canny_sd15v2。
下面我们来看看,在所有参数相同的情况下,不同Canny ControlNet的效果如何:
(1)coadapter-canny-sd15v1模型
使用Canny coadapter-canny-sd15v1模型控制生成
(2)control_any3_canny模型
control_any3_canny模型主要用于二次元图像的控制生成。
使用Canny control_any3_canny模型控制生成
(3)control_sd15_canny模型和control_canny-fp16模型
下面的control_sd15_canny模型是ContolNet官方发布的模型,其与control_canny-fp16模型的控制效果基本一致。control_sd15_canny模型大小约为5.3G,control_canny-fp16模型是其量化版本,模型大小只有689M。显存较为紧张的读者,Rocky这边推荐可以使用control_canny-fp16模型平替control_sd15_canny模型。
使用Canny control_sd15_canny模型控制生成
使用Canny control_canny-fp16模型控制生成
(4)control_v11p_sd15_canny模型
control_v11p_sd15_canny模型是ControlNet官方发布的Canny增强模型,具备较好的控制力。
使用Canny control_v11p_sd15_canny模型控制生成
(5)diff_control_sd15_canny_fp16模型
使用Canny diff_control_sd15_canny_fp16模型控制生成
(6)t2iadapter_canny_sd14v1模型和t2iadapter_canny_sd15v2模型
最后是使用t2iadapter_canny系列的两个模型进行图像的控制生成。可以看到,使用t2iadapter_canny_sd14v1模型控制生成的图片整体色调更加深沉,而使用使用t2iadapter_canny_sd15v2模型控制生成的图片光影与整体质感更加明亮通透。
使用Canny t2iadapter_canny_sd14v1模型控制生成
使用Canny t2iadapter_canny_sd15v2模型控制生成
4.3 Depth使用详解
Depth算法通过提取原始图片中的深度信息,能够生成和原图一样深度结构的深度图。其中图片颜色越浅(白)的区域,代表距离镜头越近;越是偏深色(黑)的区域,则代表距离镜头越远。
4.4 NormalMap使用详解
NormalMap算法根据图片生成一张记录凹凸纹理信息的法线贴图,通过提取输入图片中的 3D 物体的法线向量,以法线为参考绘制出一副新图,同时给图片内容进行更好的光影处理。
法线贴图在游戏制作领域用的较多,常用于贴在低模上模拟高模的复杂光影效果,非常适合CG建模师。
4.5 OpenPose使用详解
OpenPose算法通过姿势识别,提取关键点信息,从而达到精准控制人体动作。除了生成单人的姿势,它还可以生成多人的姿势,此外还有手部骨骼模型,解决手部绘图不精准问题。
如下图所示,左侧为输入图像,通过OpenPose算法精准识别后,得出右侧的骨骼姿势,再用SD模型的文生图功能,通过Prompt描述主体内容、场景细节和画风后,就能得到一张同样姿势,但风格完全不同的人物图片。
使用OpenPose
4.6 MLSD使用详解
MLSD是一种线条检测算法,通过分析图片的线条结构和几何形状来构建出建筑外框,其生成楼房、建筑场景效果比较好,但是对人或其它有弧度的物体边缘提取效果很差。
4.7 Lineart使用详解
线稿模型
4.8 SoftEdge使用详解
SoftEdge算法一共有四种Preprocessor,分别是softedge_hed,softedge_hedsafe,softedge_pidinet,softedge_pidinetsafe。
softedge_hed跟Canny类似,也是一种边缘检测模型,可以把Canny理解为用铅笔提取边缘,而Hed算法则是用毛笔,被提取的边缘将会非常柔和,细节也会更加丰富,绘制的人物明暗对比明显,轮廓感更强,适合在保持原来构图的基础上重新着色和对画面风格进行改变。
如果是生成棱角分明,或者机械一类的推荐使用Canny;如果是毛发一类的动物,使用softedge_hed可能效果会更好。
同样的,softedge_pidinet也是一种边缘检测模型。
4.9 Scribble/Sketch使用详解
Scribble/Sketch算法能够提取图片中曝光对比度比较明显的区域,生成黑白稿,涂鸦成图,其比Canny算法的自由度更高,也可以用于对手绘线稿进行着色处理。
从下图可以看到提取的涂鸦,不但保留了曝光度对比较大的部分,而且细节保留的也很不错。细节保留的越多,那么SD重新生成图片时所能更改的部分就越少。
4.10 Segmentation使用详解
Segmentation算法是传统深度学习三大支柱(分类,分割,检测)核心之一,主要通过对图片内容(人物、背景、建筑等)进行语义分割,可以区分画面色块,适用于大场景的画风更改。
4.11 Shuffle使用详解
4.12 Tile/Blur使用详解
输入图片,选取一个区域,使其变清晰。
4.13 Inpaint使用详解
4.14 InstryctP2P使用详解
4.15 Reference使用详解
4.16 Recolor使用详解
4.17 Revision使用详解
4.18 T2l-Adapter使用详解
T2l-Adapter主要用于风格迁移。
4.19 IP-Adapter使用详解
4.20 使用多个ControlNet(Multi ControlNet)
之前章节讲到的ControlNet应用,都是只使用一个ControlNet模型进行控制。
当然的,叠加多个ControlNet模型有助于更加精细化的控制,从而有助于更好的提升SD生成图片的效果。所以我们在实际使用中,可以开启多个ControlNet对图像的生成过程进行多条件的控制。
假如我们想对一张图片中的人物姿态和背景分别进行控制,就可以分别配置OpenPose模型和Depth模型对人物姿态和背景结构进行提取与控制,并生成相同姿态和背景结构的新人物内容与新背景风格。
除此此外,我们在保持种子(seed)相同的情况下,固定出画面结构和风格,然后定义人物不同姿态,渲染后进行多帧图像拼接,就能生成一段动画啦。
5. 从0到1上手训练自己的AI绘画ControlNet模型
如果我们想要训练自己的ControlNet模型,我们首先需要固定一个Stable Diffusion作为底模型。
在训练ControlNet模型的过程中,Stable Diffusion底模型权重不更新,只更新ControlNet模型权重。
后续将持续更新,大家敬请期待!
6. 推荐阅读
Rocky会持续分享AIGC的干货技术教程,经典模型讲解,实用的工具应用以及对AIGC行业的深度思考,欢迎大家多多点赞,喜欢,收藏,给Rocky的义务劳动多一些动力吧,谢谢各位!
6.1 深入浅出完整解析Stable Diffusion XL核心基础知识
在此之前,Rocky也对Stable Diffusion XL的核心基础知识作了比较系统的梳理与总结:
深入浅出完整解析Stable Diffusion XL(SDXL)核心基础知识412 赞同 · 67 评论文章编辑
6.2 深入浅出完整解析Stable Diffusion核心基础知识
当然的,Rocky也对Stable Diffusion的核心基础知识作了比较系统的梳理与总结:
深入浅出完整解析Stable Diffusion(SD)核心基础知识226 赞同 · 44 评论文章编辑
6.3 深入浅出完整解析Stable Diffusion中U-Net核心基础知识
同时对Stable Diffusion中最为关键的U-Net结构进行了深入浅出的分析,包括其在传统深度学习中的形态和AIGC中的形态:
深入浅出完整解析Stable Diffusion中U-Net的前世今生与核心知识55 赞同 · 18 评论文章编辑
6.4 深入浅出完整解析LoRA核心基础知识
对于AIGC时代中的“ResNet”——LoRA,Rocky也进行了讲解,大家可以按照Rocky的步骤方便的进行LoRA模型的训练,繁荣整个AIGC生态:
深入浅出完整解析LoRA(Low-Rank Adaptation)模型核心基础知识18 赞同 · 2 评论文章编辑
6.5 手把手教你如何成为AIGC算法工程师,斩获AIGC算法offer!
在AIGC时代中,如何快速转身,入局AIGC产业?成为AIGC算法工程师?如何在学校中学习AIGC系统性知识,斩获心仪的AIGC算法offer?
Don‘t worry,Rocky为大家总结整理了全维度的AIGC算法工程师成长秘籍,为大家答疑解惑,希望能给大家带来帮助:
手把手教你如何成为AIGC算法工程师,斩获AIGC算法offer!(持续更新)26 赞同 · 5 评论文章编辑
6.6 AIGC产业深度思考与分析
2023年3月21日,微软创始人比尔·盖茨在其博客文章《The Age of AI has begun》中表示,自从1980年首次看到图形用户界面(graphical user interface)以来,以OpenAI为代表的科技公司发布的AIGC模型是他所见过的最具革命性的技术进步。
Rocky也认为,AIGC及其生态链,会成为AI行业重大变革的主导力量。AIGC会带来一个全新的红利期,未来随着AIGC的全面落地和深度商用,会深刻改变我们的工作,生活,学习以及交流方式,许多行业都将被重新定义,过程会非常有趣。
2023年的“疯狂三月”,世界上主要科技公司与研究机构们争先恐后发布关于AIGC的最新进展,让人目不暇接,吃瓜群众们纷纷惊呼不已。那么,在狂欢过后,我们该如何更好的审视AIGC的未来?我们该如何更好地拥抱AIGC引领的革新?接下来Rocky准备从技术,产品,长期主义等维度分享一些个人的核心思考与观点,希望能帮助各位读者对AIGC有一个全面的了解。
在疯狂三月之后,深入浅出分析AIGC的核心价值 (上篇)|【AI行研&商业价值分析】4 赞同 · 0 评论文章编辑
在疯狂三月之后,深入浅出分析AIGC的核心价值 (下篇)|【AI行研&商业价值分析】1 赞同 · 0 评论文章编辑