Stable Diffusion 使用详解(3)---- ControlNet

背景

炼丹师在AI绘画的过程中,由于Stable Diffusion的原理是水滴式的扩散作图原理,其实在前面也有提到,他的发挥是‘不稳定’的,因为你没有办法做到精确控制,只能说是大致符合你的预期。你不能总依赖抽卡+固定随机数种子的方式来寻找你满意的结果,那样太耗时,所以有必要深入研究下ControlNet 的使用方法,做到精确控图,满足你生产的需求。

ControlNet 简介

如果想对图做精准控制,那就需要使用ControlNet 告诉AI 你想绘制的东西答案有哪些表定量的部分,因为有的东西通过文生图与图生图无法准确表达。简单介绍下  ControlNet。

ControlNet的工作原理

  • 条件生成:ControlNet是一种条件生成对抗神经网络(GAN),它通过额外的输入(如参考图像)来控制预训练的大模型(如Stable Diffusion)。
  • 图像迁移:它能够将参考图像的构图、人体姿势等特征迁移到目标图像中,实现图像的高效控制。

ControlNet的优势与应用

  • 优势
    • 细节控制:相比单纯的关键词控制,ControlNet提供了更精细的图像控制能力。
    • 多场景适用:适用于各种图像处理任务,如线条检测、风格迁移等。
    • 扩展性强:可以与其他Stable Diffusion模型搭配使用,增强图像生成的效果。
  • 应用
    • 线条检测:如动漫线稿提取、标准线稿提取等,用于生成以线稿为框架的新图像。
    • 风格迁移:通过对构图类似但风格不同的图像进行风格迁移尝试。
    • 姿态控制:通过OpenPose等模型提取人体姿态信息,控制Stable Diffusion生成具有特定姿态的图像。

ControlNet 种类

ControlNet 种类很多,目前我使用过的差不多有20种。而且不同ControlNet彼此可以相互组合,而且不仅限于两两相互组合,如果显存够好,组合3-5个也没有问题。我先说下我用的比较多的几个ControlNet:

OpenPose

就是检测pose 的,我希望检测一个pose 来让AI作图。比如:

Depth

描述前后关系,有颈深的概念在里面,其实就是描述 Z 方向的关系,比如手在头的前还是以后面。

Canny

Canny是一种硬边缘检测模型,用于提取图片中的边缘信息,生成对应的轮廓线稿图。
它能够很好地识别图像内各对象的边缘轮廓,生成的线稿图较为精细且边缘清晰。
在图像生成过程中,可以通过Canny模型提取参考图片的线稿,再基于该线稿和提示词生成具有相同轮廓结构的新图。常用于需要精确控制图像轮廓的场景,如人物、物体等的轮廓重建。


SoftEdge

SoftEdge是一种软边缘检测模型,也是用于提取图片中的边缘信息,但与Canny不同,它生成的边缘更为柔和。
SoftEdge模型提供了多种预处理器选项,如softedge_hed、softedge_hedsafe、softedge_pidinet等,这些预处理器在处理边缘时具有不同的效果和质量。
在图像生成中,SoftEdge模型可以生成更自然的边缘效果,适用于需要保留更多细节且不希望边缘过于生硬的场景。
通过SoftEdge提取的线稿图,可以在后续的图像着色和风格化过程中获得更加自然的视觉效果。


Sketch

Sketch(或Scribble)模型用于处理涂鸦或草图形式的输入,并基于这些输入生成图像。
它支持从参考图中提取涂鸦信息,也支持在空白画布上直接手绘涂鸦作为输入。

在艺术创作和设计中,Sketch/Scribble模型提供了一种自由度更高的图像生成方式。
用户可以通过手绘草图来表达自己的创意,然后利用Sketch/Scribble模型将这些草图转化为具体的图像。这种方式特别适用于需要快速迭代和试错的场景,如概念设计、草图渲染等。

生成效果

我们先看看上面的生成效果,注意这里还是要和提示词,图生图等一起结合使用。

正向提示词

one girl,standing near the sea,
(masterpiece:1,2),best quality,masterpiece,highres,original,extremely detailed wallpaper,

负向提示词

下载embeddings 直接填写, 内容: BadDream UnrealisticDream.,easynegative,ng_deepnegative_v1_75t,negative_hand,

使用模型

找一个类似写真的底膜就行,我这里用了随便选了一个写真底膜。

生成图片

 还是挺不错的,我个人比较偏向第三幅图片。通过 controlnet 的精细化控制,结合promption及对的底膜,及embeddings,还是比较好的还原出了我想要的场景和人物。

下面的sketch 生成的画面:

脸部有点问题,重新矫正下,为了减少出图时间,我直接用图生图生成,promption 加强了下对face 的描述:

(radiant beautiful face:1.22)

手的姿势不太对,再调整下:

raise left hand diagonally upwards towards the sky,

注意事项

当然对于controlNet的使用,正如上面所说,他只是构图中的一环,其他promption,底膜,图生图原图等都是AI 作画需要考虑的因素,因此,如果你试图在图生图中,使用一个infomation 不太够的图片,而又妄图想从controlnet 中补充时,你要特别注意,通常来讲,图生图的原理还是脱离不开底图。比如,在上面的例子中,你使用上一次我上次使用的一张深渊橘的底膜绘制的AI,保持上面设置不动,出图结果是这样:

看着还是挺舒服的,但是你看到了,你设置的pose 完全没体现出来,为什么?因为图生图,就是要依据你的原图,你通过controlnet 做动作调整这些是没有问题的,但是你最好不要试图通过它去完成一些原图没有的场景,那样的话,你最好还是用文生图比较好。

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-23 06:58:02       49 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-23 06:58:02       53 阅读
  3. 在Django里面运行非项目文件

    2024-07-23 06:58:02       42 阅读
  4. Python语言-面向对象

    2024-07-23 06:58:02       53 阅读

热门阅读

  1. 背包问题模板

    2024-07-23 06:58:02       16 阅读
  2. 如何看待云原生下的多活容灾

    2024-07-23 06:58:02       14 阅读
  3. PyTorch 中的一个函数:torch.pow

    2024-07-23 06:58:02       13 阅读
  4. 图像处理 -- ISP调优(tuning)的步骤整理

    2024-07-23 06:58:02       13 阅读
  5. 时间和空间复杂度

    2024-07-23 06:58:02       16 阅读
  6. vivado IOBDELAY

    2024-07-23 06:58:02       15 阅读