本节内容,给大家带来的是Stable Diffusion ControlNet常用控制类型解析与实战课程的第一节课程。在上期课程中,我们已经了解了ControlNet的基本概念和使用方法,我们也知道,ControlNet提供了多达十几种的控制方式,而且控制类型和数量还在不断增加中,

我们在使用controlnet时,经常遇到的问题是如何在众多的可选择控制方式中选取合适的项目,帮助我们控制图像的生成,接下来的几节课程,我们将对常用的controlnet控制方式进行演示和详细解析,帮助大家对controlnet控制类型,预处理器等建立更全面的认识,因为controlnet的控制类型种类较多,我们将分为五节课程来进行讲解。
总的来说控制类型的选择取决于我们希望ControlNet以何种方式控制图像。不同的控制类型采用不同的方式处理输入的图像,进而控制图像的生成。
我们先讲解一下canny,lineart,softedge,mlsd, scribble这五个控制类型,他们都可以用于提取图像的线稿,

但是各自有各自的特色,在讲解之前还需要提醒一下,不同的controlnet版本提供的控制类型可能有所区别,尤其是越新的controlnet可能提供更多或者更细致的控制类型选项,我们在课程中使用的controlnet版本是1.1.417版本。]
一:Canny
我们先来看一下canny控制类型,
canny是边缘检测器。它可以提取图像的轮廓。具体点来说canny可以根据提供的图片经由预处理器提取出线条,然后通过模型控制图像扩散,我们可以通过canny预处理器提取人物,汽车,动物等图像的黑白线稿然后进行重绘。我们做一下演示

在文生图中启用controlnet,点击controlnet下拉框
在controlnet unit0,勾选启用,pixel perfect,Allow preview,这几个选项我们在上节课程中已经介绍
controltype选择canny,这个时候stable diffusion webui会帮我们自动设置预处理器为canny,并选择了合适的模型,我们也可以自行调整预处理器和模型选择。

我们使用单张图像标签页,点击左侧的图片上传区域上传参考图,这是一幅客厅的图像,点击预处理器与模型中间的爆炸按钮,在预览区域可以看到根据参考图提取的线条,

在正向提示词区域填入简单的提示词"living room",点击生成,可以看到,stable diffusion会根据提取的线条绘制图像,绘制的图像整体与参考图是类似的,但是在色彩等方面重新进行了创作。

通过预览图可以看到,canny提取的线稿比较细,识别出的线条很多,从而能更贴近地还原原图,这是他的特色。

canny提供了几个附加选项,
可以调整图像生成过程中的一些参数,比如control weight可以调节权重,Starting Control Step和Ending Control Step可以设置canny的介入时机控制绘图过程。

另外,调整Canny Low Threshold和Canny High Threshold阈值参数可以控制采样深度从而调整提取线条的精细程度。我们做一下演示,Canny High Threshold保持不变,调高Canny Low Threshold和后,通过预览图可以看到提取的线条不如默认时的多。

而Canny low Threshold保持不变,调低Canny high Threshold后,提取的线条更细,我们可以通过调整这两个参数控制提取线条细致程度从而影响最终的绘图结果。

canny控制类型的预处理器项目还可以选择invert,该预处理器可以根据反色规则提取出黑底白线的线稿,我们绘制出白底黑线的线稿图后,可以使用该预处理反色,然后绘制图像,从而实现线稿上色。

二:Lineart
我们再来看一看另外一个提取线稿的控制类型lineart
Lineart控制类型可以针对不同类型的图片提取线稿,包括动漫,素描,写实,黑白线稿。

刚才的参考图,我们选择lineart,点击预览可以看到同样提取了参考图的线稿,

点击生成,同样可以生成与原图结构相似的客厅图像。

点击lineart预处理器列表可以看到还有多个可选择项,我们用一幅人物参考图像做演示,对比一下不同项目提取的预览图。

其中
lineart_anime 或 lineart_anime_denoise主要用于动漫图像的预处理,
lineart_anime_denoise能根据算法去除一些噪点,提取的线条更加简洁
lineart_coarse用于素描图像的预处理,该预处理器提取的线稿比较粗略,但给了SD更大的发挥空间
lineart_realistic用于写实图像的预处理,该预处理器提取出的线稿比较精细,图像整体还原度也比较高。
lineart_standard则用于黑白线稿图像的预处理,可以提取出黑底白线条的线稿

另外lineart 控制类型也有不同的可选模型,其中带有anime字样的模型更多用于动漫图像预处理和生成。
在匹配模型时需要注意,比如如果我们在使用lineart_anime 或 lineart_anime_denoise预处理器,则最好选择带有anime字样的模型。

三:SoftEdge
softedge控制类型也属于线稿类控制类型,可以提取图像的线稿。

我们上传一幅人物图像,使用softedge,查看预处理预览图,可以看到使用softedge提取的线条比较柔和。

点击生成,stable diffusion根据线稿图绘制出了一幅类似的人物图像

softedge相比canny的细节要少很多,从而给SD发挥的空间也就更大,

softedge目前有4个细分预处理器,我们可以看一下预处理预览图的对比
hed是合成柔边图,
pid是简笔柔边图,pid通常描绘的细节更少,出图自由空间更大。
而带有safe关键字的预处理器,处理后的线稿边缘更加清晰,同时可能会取除一些背景中的元素,图像背景的自由发挥空间更大。

四:MLSD
另外一个重要的线稿类控制类型是MLSD,
MLSD预处理器只识别图中的直线部分,所以他通常用于室内设计提取线稿,然后重绘。

我们选择MLSD控制类型,上传一幅客厅图片,点击预览,可以看到MLSD预处理器提取的预览图,只有直线,有弧度的线条都会被忽略掉。

点击生成,生成了新的客厅图像,新绘制的图像对客厅的整体结构进行了较好的还原,但如预览图所示,某些非直线的元素会发生变化。

MLSD可以实现毛坯变精装,线稿成图,一键装修等实战场景,提供了较高的实际应用价值
五:Scribble
我们再看一个控制类型scribble,通过scribble预处理器可以提取类似涂鸦的线稿,然后再根据提示词和模型对图像进行着色和风格化。

我们看一下演示,我们上传刚刚的客厅图,选择使用scribble控制类型,点击预览,可以发现,scribble提取线稿图比 Canny、SoftEdge 和 Lineart 更粗放,自由度也要更高,给予了AI更大的发挥空间。

比如我们将生成批次设置为4,点击生成,一次生成4张图像,可以看到Stable diffusion基于涂鸦控制类型绘制的图像内容差异是比较大的。

scribble也有几种细分预处理器:

我们简单做一下比较scribble_hed,scribble_pidinet,scribble_xdog,
scribble_hed 预处理器提取的线稿会注重于一些细节
scribble_pidinet 预处理器提取的线稿对整体的把握更好
scribble_xdog 提起取的涂鸦线条更细致。

scribble_xdog增加了XDoG Threshold选项,可以调节该选项,调整提取线条的细致程度,

我们比较一下不同数值提取的线稿,可以看到,该值越低,提取的线条越丰富,也越细致,

值越高,提取的线条则会越少,从而在出图时与参考图差异越大。

好了,本节课的内容到这里就结束了,本节课程,我们讲述了ControlNet中的5个控制类型,这几个控制类型均是通过提取图像中的线稿,进而控制图像的绘制。这5种类型各自有各自的特色,canny提取的线稿比较细,识别出的线条多,从而能更贴近地还原图像中的元素。Lineart可以对动漫,素描,写实,黑白线稿等不同类型的图片有针对性地提取线稿。softedge提取的线条比较柔和,适合毛发等细节的提取,MLSD则只提取直线部分线稿,适合建筑、家装等应用场景。scribble提取的线条比较粗放,从而给予AI发挥的空间更大。
除了提取线稿控制,ControlNet还提供了更多角度的控制方式。下节课程,我们将讲述另外一些重要的控制类型,比如基于姿势控制的openpose,基于深度图的depth,基于语义分割的segmentation,这些控制类型提供了基于不同角度和算法的控制方式,从而能在不同的需求和场景下发挥stable diffusion的创造力。