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 做动作调整这些是没有问题的,但是你最好不要试图通过它去完成一些原图没有的场景,那样的话,你最好还是用文生图比较好。

### Stable DiffusionControlNet 技术详解 #### 控制生成过程中的不确定性 Stable Diffusion 是一种强大的图像生成功能,能够基于文本描述创建视觉内容。不过,在实际应用过程中发现仅依赖于复杂的提示词难以精准控制输出效果[^2]。 为了改善这一点,ControlNet 扩展被引入到 Stable Diffusion 中来增强模型的表现力。通过利用额外的信息作为条件输入给扩散模型,使得用户可以在一定程度上指导生成流程,从而获得更加符合预期的结果。 #### 获取并加载预训练好的 Community Model 对于想要尝试不同风格或者特定功能的使用者来说,可以从 Hugging Face 平台获取由社区贡献的各种版本的 ControlNet 模型文件。这些资源位于指定链接下,并且支持直接应用于个人项目之中[^1]: - 社区 ControlNet 模型下载地址:<https://huggingface.co/lllyasviel/sd_control_collection/tree/main> #### 配置 WebUI 插件以启用 ControlNet 功能 当已经在本地环境中部署好了基础版 Stable Diffusion 后,下一步就是安装对应的插件以便更好地操作新加入的功能模块。这通常涉及到修改配置文件以及确保所有必要的依赖项都已经正确设置完毕。完成之后就可以在图形界面里找到新增加的操作选项了。 #### 调整参数优化输出质量 值得注意的是,除了简单的开启关闭之外,还可以进一步微调一些高级设定比如 `controlnet_exit_step` 来影响整个渲染周期内的干预程度。例如将该值设为 0.8 表明只会在前百分之八十的时间段内保持激活状态直到第 24 步结束时停止作用[^5]。 ```python from diffusers import StableDiffusionPipeline, EulerAncestralDiscreteScheduler import torch model_id = "runwayml/stable-diffusion-v1-5" scheduler = EulerAncestralDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler") pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler).to("cuda") prompt = "A fantasy landscape with mountains and rivers." image = pipe(prompt=prompt, controlnet_model="path_to_your_downloaded_ControlNet", controlnet_exit_step=0.8).images[0] image.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PhoenixAI8

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值