月度归档:2024年07月

一文了解文生图中 ControlNet 的实现原理和生态发展

在聊 ControlNet 的之前,先了解一下 ControlNet 的基础模型 Stable Diffusion 的生成过程。

Stable Diffusion (SD) 是一种基于扩散模型的文本到图像生成技术,它可以根据输入的文字描述,生成与之语义相符的高质量图片。整个 SD 模型的架构包含了多个关键组件,它们分工协作、相互配合,共同完成了这一令人惊叹的创意生成任务。

Stable Diffusion 的实现原理

SD 的核心思路源自扩散模型。扩散模型是一类生成式模型,它的基本原理是:先将原始数据加入大量随机噪声,然后学习如何一步步去除噪声、恢复数据。 SD 正是利用了这一思路来生成图像。它先将原始图片加入高斯噪声,得到一张几乎全是噪点的图。然后,使用一个名为 UNet 的神经网络,通过多轮迭代去噪,最终生成干净、清晰的图像。

在训练阶段,SD 模型接受三个输入:原始图片、加噪后的图片、以及对原始图片的文本描述。其中,UNet 学习建立起加噪图片和原始图片之间的映射关系。通过最小化预测噪声与真实噪声的差异,UNet 掌握了去噪的能力。同时,由于训练数据中包含了图像-文本对,UNet 也学会了如何根据文本线索对图像去噪,这是后续根据文字生图的基础。

但是,直接对原始图片进行去噪训练会带来巨大的计算开销。为了提高效率,SD 先使用变分自编码器(VAE)将高维图像压缩到低维隐空间,然后在隐空间中进行去噪操作。VAE 不仅大幅降低了数据维度,它学习到的隐空间还具有良好的语义结构,使得相似图像在隐空间中更紧邻、更易融合。

为了让输入的文本 Prompt 有效地指引图像生成,SD 使用 CLIP 模型对文本进行编码。CLIP 模型擅长捕捉图像和文本的对齐关系,它生成的文本特征向量与图像视觉特征的分布更加一致。在生成阶段,文本编码和初始噪声图像一起输入 UNet,共同决定去噪的方向和结果,使得最终图像在语义上与文本描述相匹配。

但是,扩散模型通常需要上千步去噪迭代才能生成好的图像,这非常耗时。为了加速生成过程,SD 借鉴了 DDIM 等快速采样方法。它们通过跳过一些中间去噪步骤,在保证质量的同时大幅提升了生成速度。

SD 模型的生成流程可以概括为:输入的文本描述先被 CLIP 编码为语义向量,同时在隐空间中随机生成一张噪声图像。二者一同输入 UNet 进行多步去噪,并使用 DDIM 等采样加速。最终,去噪得到的隐空间图像通过 VAE 解码,还原为高清的 RGB 图片输出。

SD 的一大亮点是其开源、模块化的设计。得益于此,各个组件都可以灵活地替换升级,社区还发明了ControlNet、LoRA 等参数高效微调技术,使得 SD 模型可以快速适应各种新的应用场景。这极大地激发了开发者和艺术家们的创造力,SD 已成为当前 AIGC 领域的一大热点。

虽然 SD 已经很优秀了,超出了人们的想象,但是 SD 模型本身有一些问题需要解决,如无条件的生成,生成过程难以控制,无法根据用户的特定意图或要求来生成或编辑图像等。

这导致SD模型在实际应用中面临一些局限性,如缺乏可控性、灵活性不足、难以进行精细的图像编辑等。

2023 年年初 ControlNet 横空出世,通过引入额外的控制信号和可学习的控制器网络,解决了 SD 模型在可控图像生成方面的这些问题,使其能够根据用户提供的边缘、关键点、分割掩码等条件,生成满足特定约束的高质量图像,大大扩展了 SD 模型的应用场景和实用性。

ControlNet 的原理

ControlNet 是一种用于可控图像生成的扩散模型。它通过接受额外的控制信号(如边缘、关键点、分割掩码等)来指导图像生成过程,使生成的图像符合给定的控制约束。

ControlNet 解决的主要问题是如何在图像生成过程中引入更多的控制和约束,使生成的图像符合用户的特定要求。具体来说,ControlNet 解决了以下几个问题:

  1. 可控性问题:传统的扩散模型通常是无条件的,生成的图像无法根据用户的意图进行控制。ControlNet通过引入额外的控制信号,如边缘、关键点、分割掩码等,使得生成的图像能够满足特定的约束条件,提高了图像生成的可控性。
  2. 灵活性问题:以往的图像生成方法通常针对特定的任务或控制类型设计,泛化能力有限。ControlNet 提出了一种通用的控制器网络设计,可以适应不同类型的控制信号,无需为每种控制任务重新训练整个模型,大大提高了模型的灵活性和适用性。
  3. 图像编辑问题:传统的图像编辑方法通常需要复杂的人工操作或专门设计的算法。ControlNet 允许用户通过提供简单的控制信号(如涂鸦、关键点等)来指导图像的编辑过程,使得图像编辑更加直观和便捷。
  4. 多模态融合问题:在许多应用场景中,需要将不同模态的信息(如文本、语音、图像等)融合生成图像。ControlNet提 供了一种将不同模态信息编码为控制信号的方法,使得扩散模型能够根据多模态输入生成相应的图像。
  5. 数据效率问题:训练高质量的图像生成模型通常需要大量的数据和计算资源。ControlNet 通过固定预训练的扩散模型,只训练控制器网络,大大减少了训练所需的数据和计算量,提高了数据利用效率。

ControlNet 的核心思路是通过引入额外的控制信号,在扩散模型的生成过程中引导图像的合成使其符合预定的约束条件。其主要思路简单来说如下:

  1. 利用预训练的扩散模型作为图像生成的基础,保持其参数不变。
  2. 设计一个控制器网络,将其插入到扩散模型的每个去噪步骤中,使得扩散模型的每一步与对应的控制信号相结合,这个控制网络是 ControlNet 的核心。
  3. 控制器网络接受图像的潜在表示和对应步骤的控制信号表示,学习如何将它们融合以调制扩散过程。
  4. 通过控制器网络的调制,使扩散模型的去噪过程朝着满足控制约束的方向进行,最终生成符合要求的图像。ControlNet 支持多种类型的控制信号,如边缘、关键点、分割掩码、深度图等。针对不同类型的控制,控制器网络的结构可能有所不同,但基本原理类似。

ControlNet 通过引入可学习的控制器网络,有效解决了扩散模型在可控图像生成领域面临的局限性。

它支持多种类型的控制信号,如边缘、关键点、分割掩码等,使得用户能够根据特定意图对生成图像进行精细控制。ControlNet 生成的图像在满足控制约束的同时,保持了高质量和逼真性。

此外,ControlNet采用了固定预训练扩散模型、仅训练控制器网络的策略,大大提高了数据和计算效率。ControlNet 为图像生成和编辑任务带来了新的可能性,在创意设计、虚拟内容生成等领域展现出广泛的应用前景。

ControlNet 的性能在一定程度上依赖于控制信号的质量,噪声或不完整的控制信号可能导致生成图像的缺陷。

目前,ControlNet 主要针对低级视觉控制进行设计,对高层语义控制的支持有限。此外,ControlNet在生成高分辨率、细节丰富图像时,可能面临计算开销大、推理速度慢的挑战,在实时交互场景中的应用受到一定限制。

未来,提高 ControlNet 在语义理解、鲁棒性和计算效率方面的表现,将是其进一步发展的重点方向。同时,探索 ControlNet 与其他生成模型、编辑工具的结合,有望进一步拓展其应用范围和功能。

ControlNet 的生态

从 SD 模型版本支持来看,ControlNet 可以分为 SD1.5 和 SDXL 两个常用版本。其中 SD1.5 在生态方面更完善一些,SDXL 发展过程中,大家不约而同选择了闭源自己玩多一些。

从发行机构来看,分为官方模型和第三方模型。

官方模型多分支 SD1.5 和 SD2.0 模型,没有 SDXL 的模型,SDXL 的模型多来源于社区,大概的生态情况如下:

ControlNet 1.1 包括 14 个模型(10 个生产就绪模型、2 个实验模型、2 个融合版本):

10 个生产模型:

  • control_v11p_sd15_canny.pth Canny边缘检测模型:使用 Canny 算法提取图像主体轮廓的边缘线条,再进行填色。1.1 版本相对于之前的版本,消除训练数据缺陷,并通过大规模训练提升了模型性能和输出质量。
  • control_v11p_sd15_inpaint.pth Inpaint 修补模型:对图像局部重绘修饰,保留其他部分。用于小范围创意设计。
  • control_v11p_sd15_lineart.pth Lineart 线性检测模型:提取精细丰富的线稿,适用于产品设计等。
  • control_v11p_sd15_mlsd.pth MLSD 模型:善于提取直线线段,如建筑线条结构,适合建筑/室内设计风格。1.1 版本相对于之前的版本,扩充训练集并增加训练量,使直线检测能力得到进一步提高。
  • control_v11p_sd15_normalbae.pth Normal 法线贴图模型:检测像素的 RGB 值和表面法线方向,分离主体和背景,用于整体色彩调整。1.1 版本相对于之前的版本,采用更准确的法线贴图估计方法,增强了模型的鲁棒性和实用性。
  • control_v11p_sd15_openpose.pth Openpose 人体姿态检测模型:识别人体关键点和运动轨迹,用于调整人物姿态、表情等。1.1 版本相对于之前的版本,对 Openpose 实现细节进行改进,提高了人体姿态估计,尤其是手部的准确度。
  • control_v11p_sd15_scribble.pth Scribble 涂鸦模型:可以基于用户手绘的线条、涂鸦等输入生成相关图像。1.1 版本相对于之前的版本,适应更粗的涂鸦输入,同时通过修正数据和延长训练改善效果。
  • control_v11p_sd15_seg.pth Segmentation 语义分割网络:将图像分割为约 150 种颜色代表的物体,可单独处理天空、建筑、树木等要素。1.1 版本相对于之前的版本,扩展了对COCO数据集的支持,向下兼容旧版输入。
  • control_v11p_sd15_softedge.pth Softedge 软线性检测模型:一种边缘检测模型,生成更柔和自然的线条。1.1 版本相对于之前的版本,新的预处理方法和针对性数据筛选,使模型的边缘处理能力大幅提升,实用性与depth相当。
  • control_v11p_sd15s2_lineart_anime.pth Anime Lineart动漫线稿检测模型:Lineart的升级版,专门用于动漫线稿上色,效果更自然流畅。

2 个实验版本:

  • control_v11e_sd15_ip2p.pth IP2P 直接编辑模型:根据文本描述直接编辑图像,如”让房子着火”。需要用户有创意和想象力。
  • control_v11e_sd15_shuffle.pth Shuffle 随机处理模型:随机组合图像要素,生成风格化图像。可用于风格迁移。

2 个融合版本

  • control_v11f1e_sd15_tile.pth Tile 模型:将图像分割成小块处理,用于放大图像细节或图像修复。
  • control_v11f1p_sd15_depth.pth Depth 深度图模型:分析图像中物体的空间位置关系,常用于人物换背景,调整手臂位置等创意设计。1.1 版本相对于之前的版本,通过修复训练数据和采用无偏方法,使模型在更多场景下表现出色。

官方的文件名看起来是有规律的,其规则如下:

  1. 版本号(v11):表示 ControlNet 的版本号,如 v11 代表 1.1 版本,v10 代表 1.0 版本。版本号升级通常意味着模型性能和功能的优化和扩展。
  2. 模型状态(p):表示模型所处的状态,其中:

    • p表示正式版(production),该模型已经比较稳定,适合新手使用。
    • e表示实验版本(experimental),该模型仍在实验阶段,结果可能不太稳定,更适合研究者探索。
    • u表示未完成版本(unfinished),表示模型尚未完成。
  3. Stable Diffusion版本(sd15):表示该ControlNet模型所基于的Stable Diffusion版本,如sd15代表Stable Diffusion 1.5,sd21 代表Stable Diffusion 2.1。不同版本的Stable Diffusion在模型结构和训练数据上可能有所差异,因此 ControlNet 模型需要指定兼容的 SD 版本。
  4. 模型类型(canny):表示该 ControlNet 模型的主要功能和用途,如 canny 代表 Canny边缘检测,openpose 代表人体姿态估计,hed 代表 Holistically-Nested Edge Detection 用于提取软边缘,scribble 代表涂鸦等。不同类型的 ControlNet 模型在控制方式和生成效果上各有特点。

举个例子:control_v11p_sd15_canny 这个模型名称表示:这是一个 ControlNet 1.1 版本的模型,已经发布为正式版,基于 Stable Diffusion 1.5 训练,主要用于 Canny 边缘检测任务。

模型下载地址:https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main

第三方模型相对无序一些,并且以在 SDXL 表现较多,大概有如下的一些:

  • Lvmin 的模型集合:包括diffusers ControlNet、Controllllite、Stability AI Control LoRA、T2I Adapter等。
  • Qinglong的Controllllite SDXL模型:包括Normal Dsine、Tile realistic、Tile anime、MLSD、DW pose、Normal、Recolor Luminance、Softedge、Segment animeface等。
  • TTPLanet Tile Realistic:由社区为SDXL训练的逼真瓷砖模型。
  • 2vXpSwA7 cnllliteL:grey2color和anystyle模型。
  • MistoLine:SDXL softedge模型。
  • Kataragi的SDXL模型:包括 Inpaint、Recolor、Lineart、Line2Color 等,提供半精度模型和rank128 LoRA。
  • Xinsir的SDXL模型:包括Canny、Openpose、Scribble、Scribble-Anime等。

一些应用场景

ControlNet 目前在多个领域展现出了广阔的应用前景,主要有以下几个方面:

  1. 设计辅助:通过输入简单的线稿、轮廓或布局,ControlNet 可以帮助平面设计、工业设计、服装设计等领域快速生成多样的设计方案,提高设计效率和创意。
  2. 影视动漫创作:ControlNet 能够根据故事板或概念草图等粗略输入,生成细致的场景、人物、道具等素材,辅助影视、动画、游戏等视觉创意行业的前期创作。甚至是后期的合成及剪辑。
  3. 虚拟试衣/试妆:基于 ControlNet 的姿态估计和人像生成能力,可实现虚拟试衣、试妆等功能,应用于电商、社交、美妆等领域,提供沉浸式的交互体验。
  4. 建筑与室内设计:通过点线面等简单输入,ControlNet 可以辅助建筑外观、室内布局、家居陈设等设计任务,提供多种风格选择,用于方案展示和评估。
  5. 医疗影像分析:ControlNet 能够根据医学影像的轮廓或标注,生成更清晰、更符合诊断需求的医学图像,辅助医生进行疾病诊断和手术规划等。
  6. 教育与培训:基于ControlNet生成各种教学演示素材,如解剖图、示意图等,提高学习效率。在VR/AR场景中自动生成训练环境。
  7. 文旅与数字展览:通过简单的场景布局输入,ControlNet可快速生成丰富多样的游览场景、数字藏品,应用于文旅推广、虚拟展览等。
  8. 智能图像编辑:ControlNet可以实现图像修复、抠图、换背景、图像风格转换等常见图像编辑功能,提供更智能、更简便的图像处理工具。

小结

在 ControlNet 没有出来之前,很多时候能不能出来一个好看的画面,只能通过大量的 Prompt 测试实现,以数量去对冲概率。

在当下,如果能用好控制出图的三个最关键因素:提示词、Lora、ControlNet,能让「出图与我们想象的画面一致」概率更高。

通过前面的几个小节,我们可以看到:

  1. ControlNet 通过使用额外的条件控制输入,如语义分割图、边缘检测图等,让文本到图像生成更加可控。这大大提升了生成图像与用户期望相符的概率。
  2. ControlNet 的一大优势在于它的通用性和灵活性。通过使用不同类型的控制条件,可以引导模型生成各种不同风格和内容的图像。而且这些控制条件可以通过现有的 CV 模型自动获取,方便集成。
  3. 围绕 ControlNet 已经形成了活跃的生态。各种开源实现和 web 应用让普通用户也能轻松使用,专业的 GUI 让艺术创作者可以更高效地把控细节。社区也在不断贡献新的模型权重,扩展 ControlNet 的应用边界。
  4. 但 ControlNet 并非万能,提示词的设计、LoRA 模型的选择仍然是影响效果的关键因素。掌握并灵活组合这三者,才能最大限度提升「如我所愿」出图的成功率。
  5. 展望未来,ControlNet 为可控文生图开辟了新的方向,但仍有很多挑战亟待解决,如更精细的空间控制、更强的全局一致性等。相信随着研究的深入,ControlNet 会带来更多惊喜。

以上