« 主页

探云月刊 2024-03 AI 绘画 - 控制

发布于

版权声明:眯眼探云原创,可随意转载,请保留该版权声明及链接:https://tyun.fun/post/94.tanyun-monthly-2024-03/

现在很多专业人士已经用上了 AI 绘画提升效率,但对于更多的人而言,AI 绘画依然是个迷思,似乎 AI 会画画了,非常厉害,但如果真去试试,又发现好像画的不咋样,根本画不出自己想要的效果。

我最近因为工作需要,深入研究了使用 Stable Diffusion + ComfyUI 进行 AI 绘画,尤其是画人像。整个过程非常有意思,趁还热乎,赶紧把相关的经验、思考记录下来,希望对于想要了解 AI 绘画的同学快速提供一个基本的理解框架。不要怕,完全没有数学公式。

想来想去,还得先从画画本身讲起。我大学选修过色彩课,但对画画了解并不多,对画画的直观印象就是,画出一张漂亮的画。后来随着生活阅历的增加,我逐渐理解了,一幅画不止是漂亮,它还是一个工具,一个传递信息的工具。一个画家通过绘画,传递他的所感所悟。举个特别明显的例子,下面两张图,内容都是一棵树,但给人的感觉是完全不一样的。

用 AI 画画,虽然工具换了,但核心没变,你需要用 AI 画出的画来传递你想传递的信息。这个信息可以是单纯漂亮的风景,也可以是一个长的好看的美女/帅哥,也可以是一些抽象、但精美的图案给人带来一些视觉震撼。那怎样让 AI 按照自己的想法画出自己想要的画呢(比如那两棵树,长的相似,但又不同)?通过各种控制手段

文生图

最基础的 AI 画图控制手段:文生图

这大概是大多数人目前心中的 AI 绘画:描述一下我心中所想,然后 AI 帮你画一张图。比如你可以给 AI 说:画一张美女图。然后 AI 就会给你画一张美女图。是不是很简单?但你说不对啊,我是想要一张动漫风格的美女。然后你加上了动漫风格,但好像还是不太对,那换成卡通试试?最后,似乎 2.5d 动漫看起来不错。(见下图)

有没有体会到,让 AI 画一张图很简单,但要让他画出自己想要的图可能就没那么容易了。在实际的创作中,一幅画有方方面面的元素,要想准确的描述出这些元素其实并不容易,是需要丰富的相关专业知识。

如果你真有心深入体验文生图,那你大概率是有参考别人的 AI 画图“咒语”。“咒语”真正专业的称呼是 Prompt(提示词)。但“咒语”这个称呼其实挺恰当的,因为当前常见的 AI 绘画的工具,Prompt 看起来都不那么像自然语言,而是些词和短语构成的大段文字。

为啥不用自然语言呢?AI 绘图工具如何理解你说的内容呢?大概的过程是这样:先有一个 AI 模型(比如 CLIP)把你描述的内容进行编码,转化成另一种表达形式,然后做一定的映射转换到真正绘图的 AI 模型(比如 UNET),绘图的 AI 模型根据这些映射后的内容进行绘画。

当前的咒语由词 & 短语构成,主要是因为当前的两大主要 AI 绘画工具(SD - Stable Diffusion & MJ - Midjourney)的文字理解能力都不算强,并不能真正理解文字中的复杂逻辑关系。好在大部分情况下,只要通过合适的词 & 短语的组合,我们已经可以描述出图片的各种关键特征。这时候就会遇到另一个问题,那就是绘图的那个 AI 模型,其实并不是真的什么都能画,或者说他可能擅长画西方照片风格的人像,但画亚洲动漫人物就不太给力。

那我要怎样才能知道那些关键词更容易被理解,要怎样才能知道 AI 是不是擅长画某些内容呢?两个方法:查阅相关的资料(包括他人的经验),自己多尝试。这两个方法都很重要,就像你可以通过简历快速了解某个人的大致情况,但要真正深入认识这个人,得和他持续的有互动。只有把图实际的跑出来,亲眼看到结果,你才知道模型的能力边界在哪里。

一个模型是否可以根据用户的 Prompt 准确画出图,有个专门的衡量指标是叫 Prompt Alighment。根据我的了解,目前 Prompt Algihment 最好的应该是 OpenAI 的 DALL E 3 模型,可以准确的理解自然语言,并画出相应的图。我近期博客的封面就是用 DALL E 3 画的。那为啥现在主流的 AI 绘画工具还是 SD 和 MJ,而不是 DALL E 3 呢?

俗话说,一图胜千言,一张图中的信息实在是太多了,自然语言其实只能描述图中的一部分内容。一张真正能用到产品(尤其是卖钱的产品)中的图,限制条件是非常多的,只靠文字描述,无法对内容实现足够的控制。而 SD & MJ 提供了更多的控制手段,帮助 AI 画师画出自己想要的画。MJ & SD 各有优势,但总体上而言,使用 SD 可以有更多的控制手段,因此我这段时间主要研究 SD 绘图。

当我们说到使用 Stable Diffusion 画图时,其实是指的用 Stable Diffusion 模型,以及一整套配套工具进行画图。Stable Diffusion 模型就像是汽车的引擎,而要想开动一辆车,我们得需要一整辆车,而不只是一个引擎。现在最流行的“车架”有 SD-WebUI 和 ComfyUI。其中 SD-WebUI 的操作更简单,但灵活程度不如 ComfyUI。ComfyUI 更加复杂 & 难上手,但如果想要充分、灵活的利用各种控制手段,ComfyUI 是最好的选择。有了“车架”,再加上开源社区的各种工具 & 辅助模型,就算是一辆整车啦!

使用 SD 绘图的主要控制手段包括:大模型,LoRA,Embeddings,ControlNet,IPAdapter,FaceID,Detailer,还有……PS修图等等。不要怕这些术语,接下来都会展开讲一讲,理解背后的思路就行。

大模型

当我们说到 SD 模型的时候,其实并不是指一个特定的模型,而是一系列模型。包括 StabilityAI 开源出来的原始 Stable Diffusion 模型,以及许多大神在这些基础模型上再训练的模型。这些不同的模型(主要指那些再训练的模型),有着不同的能力,擅长不同的风格,比如有些更擅长画真实照片风格,有些更擅长画动漫或 3D 风格。

目前市面上主要有 sd1.5 系列的模型,以及 sdxl 1.0 系列的模型,其中 sdxl 1.0 系列的模型整体能力更强。为什么要要把这两个系列专门拿出来说呢?因为这两个系列的基础模型不同,相关的配套模型(比如 lora、controlnet)是无法相互兼容的,比如 sd1.5 的 lora 就只能用于 sd1.5 的模型。整体而言,sdxl 1.0 模型能力更强,但 sd1.5 的生态依然活跃,依然有些无法被完全取代的地方。

可以在C 站(civitai.com)上找各种二次训练的开源 SD 模型。作者通常都会相应的说明在使用上的一些注意事项,按照这些注意事项去使用通常能够获得更好的结果。如果模型擅长的内容、风格正好是自己所需,那就太好了,直接用起来。如果没有那么合适的,那就得多花时间多去试一下不同的大模型画图的实际效果,看看是不是符合自己的所需。

LoRA & Embeddings

LoRA 的用途是作为大模型的定向调整。比如有的 3D LoRA,用上以后,就可以比较稳定的画出 3D 的立体效果。一方面可以去找开源的各种 LoRA,另一方面,也可以根据自己的需求训练特定的 LoRA。在实际生产中有很多在多图中保持一致性的需求,主要都是通过 LoRA 来达到效果的,比如要画特定的角色。

训练 LoRA 和训练大模型有啥区别呢?LoRA 并不能真正提升大模型的能力,但用较少的样本,用相对较低的成本就可以让大模型画出特定的内容,因此在生产环境中会非常有用,可操作性非常强。

Embeddings 同样可以认为是对大模型画图时做定向的调整,不过方式和 LoRA 不同。相对于 LoRA 是对大模型本身能力的调整,Embeddings 相当于提前准备好的 Prompt,把一些通用,或特定目的的 Prompt 打包起来使用,更加的方便。

ControlNet

这个技术名字里面都有 Control(控制),可见本身就是为了控制而生。ControlNet 的工作方式是在绘图的过程中为绘图提供特定的控制能力,我常用的主要有:通过骨骼点来控制人体姿势;通过线图来精细的控制物体的细节轮廓(比如前面两颗相似的树,就用到了这个);或者通过深度图来控制物体的空间位置分布。

ControlNet 也是一系列的模型,使用的方式是先有有对应的控制图片,比如人的骨骼点姿势,或者线图,可以通过一些预处理工具从已有的图片中提取这些信息。

接下来就是在绘图的过程中,控制器模型和绘图模型共同生效,从而达到控制绘图的目的,因此 ControlNet 会显著降低绘图的速度。在 SDXL 1.0 模型发布以后,StabilityAI 发布了轻量级的控制模型,叫 ControlLora,效果接近,但模型更小,而且速度更快,非常推荐。另外还有一种类似的控制网络叫做 t2i adapters,速度也很快,但我实际试下来,效果不太让我满意。

IPAdapter & FaceID

前面提到了,一图胜千言,图片中的许多信息是很难用自然语言准确的描述的,那有没有直接用图片作为输入呢?当然可以。IPAdapter 就可以让你用图片作为输入,再辅以少量的文字,就能够更好的描述你心中想要的图片。IPAdapter 可以解构图片中的所有 AI 能够理解的元素,然后再画出类似的画,甚至还可以把两张画中的内容进行融合。尤其在 ComfyUI 中,IPAdapter 可以非常灵活的组合使用,充分让图片来提供信息,帮自己画出想要的内容。

在生产中画人物,一个必然的需求就是画出相同的脸。其中一种方式就是前面提到的,通过训练 LoRA 的方式来保持人脸的一致性。有了 IPAdapter 后,在某些情况下,就可以直接通过垫图的方式来保持人脸的一致性。普通的 IPAdater 基础上,还有更加有针对性的 IPAdapter FaceID,以及 IPAdapter FACE PLUS 等方式来增强人脸的一致性。

如果图中的元素我并不全都想要,只想要其中的一部分,可以吗?当然可以。目前的 IPAdapter 支持单独提取图片中的风格构图,然后用于新的图片生成。

在研究学习的过程中,IPAdapter 给了我很大的震撼,在我看来是一个非常实用的控制手段,直接把画图的有效控制提升到了一个新的层次。这个控制模型是由腾讯发布的,点个赞。

Detailer

AI 绘图的模型能力是有限的,就像人一样。如果注意力集中到一个点,就可以画的很细致,如果是画一张大图,那很多细节就管不过来了。在很多时候,如果让 AI 画一张特写的脸,可以画的非常细致。但如果让 AI 画一整个人,那脸部很有可能就会出错,不太正常。因此,修脸在 AI 画图中是非常常见的一步。

理解了原理,修脸的思路就很容易理解了:首先通过 AI 中图中识别出人脸区域,然后对人脸及附近的区域进行裁剪放大,然后用 AI 专门对人脸的部分进行重绘,画好了之后再贴回原图。这样就可以让 AI 把注意力完全集中在人脸区域,画的非常细致。绝大部分情况下,都可以用这样的方式来修复人脸。

对于图中其他有问题的部分,也可以采用这样的方式修复,只要对应的部分是 AI 模型的能力范围内。一个非常显著的例外就是手,AI 很难画好手,因此就没法用这样的方式来进行修复。

PS 修图

AI 画图非常厉害,但也有其固有的缺陷,因此在 AI 画图的过程中,灵活的结合 PS,反而是更加有效的方式。比如手,AI 画不好,那就可以直接在 PS 中处理,然后再丢给 AI 稍微帮忙润色一下边缘细节。这里的 PS 并不单指 PhotoShop,而是指任何的图片编辑工具,比如免费的 GIMP,把错误的地方稍微涂一涂,再丢给 AI 处理一下细节,也完全够用了。

ComfyUI

前面专门提到了 ComfyUI,但又没细讲,是因为这玩意儿的确比较复杂,而且更多的是偏实操的内容,但它的价值是不可忽视的。如果要用一句话来说明它的价值,那就是:ComfyUI 提供了更灵活的使用方式,可以让我们对 AI 绘画的过程有更充分的控制

根据 ComfyUI 作者的说明,他开发这个工具的主要目的之一,是为了更好的理解 Stable Diffusion 的工作方式,从而更好的去使用它。这也就决定了,要使用 ComfyUI 的门槛较高,需要理解许多相关的技术知识,但相应的,它能够更充分的发挥 Stable Diffusion 的潜力,并且能够根据自己的需要灵活的调整生成图像的各个环节。最终可以达到非常高的效率,以及更好的效果。

如果没有编程背景,我不太建议自己搭建 ComfyUI 的工作环境,会遇到相当多的问题,可以去试试第三方已经搭建好的环境,或者只使用 SD-WebUI 都是很好的选择。

一个简单的绘图流程示例

不要怕,不会有数学公式!不会有实际的操作!只是简单的讲一讲思路,以画人物为例。

  1. 第一步是做各种探索,试用不同的大模型,LoRA 搭配,来看看怎样可以画到自己想要的效果(在画人物的场景下,主要是脸)。还可以通过 IPAdapter 垫图的方式,来提升在探索过程中的控制力。
  2. 在找到了自己想要的效果以后,接下来就需要通过选用合适的控制手段,让 AI 在接下来的过程中,能够相对稳定的画出相同或近似程度很高的脸,比如结合:大模型+LoRA+Prompt+IPAdapter等等。
  3. 接下来就是跑人体的姿势,这时就可以考虑 ControlNet,来控制人物的姿势。当然,这一步其实少不了去找各种姿势的图片,提取其中的骨骼点来用。
  4. 有了比较满意的整图以后,就可以考虑先高清放大,然后用 Detailer 的方式修脸,以及一些其他的细节。这时还可以引入图片编辑工具,对一些 AI 不擅长处理的部分,直接修改,然后再丢给 AI 润色。

在实际的生产过程中,上面的环节可能会反反复复,按需采用,最终才能获得想要的成品图。在此过程中,ComfyUI 的优势就可以得到极大的发挥:把相关的环节都整合到一个工作流中,可以根据自己的需要很容易的切换各个环节,并保持相关参数的一致性。

总结

希望通过这篇文章,能够让你对使用 AI 绘画(主要是 SD)有一个整体的了解,无论只是简单的了解 AI 绘画,还是后续有兴趣深入学习 AI 绘画,希望都能为你提供一定的帮助。

未来 AI 绘画能力会越来越强,控制的手段也会越来越丰富、好用,但要想创作出专业的作品,依然需要你在绘画本身这个领域足够专业。(比如我研究了各种技术后,还是得配合我们的设计师,辅助他们最终完成工作中所需的创作内容)

PS:本文中并没有提到一个重要的东西,那就是:调整各种参数。调整各种参数对于各种控制手段都是非常关键的,但过于偏实操,需要上手试才有感觉,因此在本文中就略过了。可以去看一些相关的视频,并多上手实操,才会对各个参数有实际的体感。

感谢阅读,欢迎交流!