随着'AI出图', 'AI封面'等概念不断出现在我们的视线中、朋友圈中、甚至是PRD中,大家可能会好奇AI是如何按照我们的要求画图的,今天我们以通俗浅显的方式讲解下其中的过程。本文只讲主要原理和过程,不讲细节和使用,面向的是对AI出图没有经验的同学,读者可请根据自己的经验值酌情跳过。
当前主流AI出图工具有Stable Difussion(下文简称SD)、Midjourney和Dalle3,剔除一个不具代表性的Midjourney,剩下两个的区别可通过几个例子体现。
我:'I have a dream when a was young'
Dalle3:'那时的你向往奇幻,向往天空,梦里都是五彩斑斓的世界,我想大概是这样的吧...'
然后开始画图:
我:'I have a dream when a was young'
SD:'你啥玩意儿?'
然后开始画图:
由此可见, Dalle3不怎么挑输入质量,甚至能对抽象或模糊的输入进行联想,最终画出一张质量还可以的图,而SD对输入信息要求较高,如果不告诉SD具体要画什么,它会选择直接躺平。
我:'给你一个奇幻风格模型, 再给你一个写实人物Lora,再给你亿点点提示词In Casey Baugh's evocative style, art of a beautiful young girl cyborg with long brown hair, futuristic, scifi, intricate, elegant, highly detailed, majestic, Baugh's brushwork infuses the painting with a unique combination of realism and abstraction, greg rutkowski, surreal gold filigree, broken glass, (masterpiece, sidelighting, finely detailed beautiful eyes: 1.2), hdr, realistic painting, natural skin, textured skin, closed mouth, crystal eyes, butterfly filigree, chest armor, eye makeup, robot joints, long hair moved by the wind, window facing to another world, Baugh's distinctive style captures the essence of the girl's enigmatic nature, inviting viewers to explore the depths of her soul, award winning art,严格按照我的要求画一张图'
Dalle3:'不得行,处理不了自定义模型,处理不了Lora'
然后开始画图:
我:'给你一个奇幻风格模型, 再给你一个写实人物Lora,再给你亿点点提示词In Casey Baugh's evocative style, art of a beautiful young girl cyborg with long brown hair, futuristic, scifi, intricate, elegant, highly detailed, majestic, Baugh's brushwork infuses the painting with a unique combination of realism and abstraction, greg rutkowski, surreal gold filigree, broken glass, (masterpiece, sidelighting, finely detailed beautiful eyes: 1.2), hdr, realistic painting, natural skin, textured skin, closed mouth, crystal eyes, butterfly filigree, chest armor, eye makeup, robot joints, long hair moved by the wind, window facing to another world, Baugh's distinctive style captures the essence of the girl's enigmatic nature, inviting viewers to explore the depths of her soul, award winning art,严格按照我的要求画一张图'
SD:'明白!'
然后开始画图:
由此可见,Dalle3不支持自定义主模型和Lora,而SD出图效果的可控性和定制化能力都较强,比如示例中可以自定义主模型,指定某个人物Lora,甚至指定图中人物的表情和姿势 。
通过以上场景示例我们发现Dalle3和SD在以下方面有着明显的区别:
语义理解 | 上手难度 | 画图控制能力 | 费用 | |
Dalle3 | 顶级理解 | 简单 | 较弱 | 收费 |
SD | 有一点,但不多 | 有一定难度 | 极高 | 免费 |
创作者生态里AI封面的场景(通过声音标题或专辑名生成封面)输入大多是抽象的,且对图像控制没有诉求,所以有着优秀语义理解的Dalle3比较契合我们的场景,当前我们的AI封面选用的是Dalle3。
通过开头的例子,我们对于什么是AI出图有了大概的印象,接下来就是本文的主要内容 - 理解AI是如何出图的。由于SD开源且定制能力更强,本文就以SD为例讲解AI出图过程,其中会省略部分晦涩且不影响理解(主要是我也不懂)的环节和原理,主打一个读完包懂。
扩散模型是一个大类,它们的目的是生成类似于它们训练数据的新数据。对于SD来说,就是生成类似训练样本图像的新图像。
举个栗子:
用一张猫图作为训练图像,通过为其不断添加噪声,最终得出一张噪声图,这个添加噪声的过程被噪声预测器所记录
当我们需要生成一张猫图的时候,便可通过如下方法来达成:
1、生成一张完全随机的噪声图像作为原始图像 。
2、要求噪声预测器告诉我们生成猫图所需要的噪声(记录器记录了之前训练时如何通过添加噪声把一张猫图变成一张随机噪点图,所以能预测出反向操作所需要的噪声)
3、然后我们从原始图像中减去这个预测的噪声
4、不断重复,便会得到一张猫图。
例子中的扩散过程所需要的计算量在普通计算机上很难完成,所以SD的扩散模型不再是在像素空间中完成,而是在低维的潜空间中完成,这带来的直接结果就是我们手中的破电脑也能本地AI出图了。
为了方便后续理解我们先来讲一个概念:词向量。简单来说就是它可以把自然语言中的表示方法转换为高维空间内的向量,然后通过余弦相似度或欧氏距离计算它们之间的关系。
举个栗子:我们通过某小说文本内容(假设它足够长)训练了一个词向量模型,那当我们把 “黄鱼面”、“凯迪拉克”、“排骨年糕” 这三个词给到它,它是能得出“黄鱼面”和“排骨年糕”更近似。因为在训练中我们给到它足够多包含了这些词的文本,它把每个字和词向量化,然后根据每个字和词出现的位置、频率,从某种意义上计算出彼此之间的关系。虽然它不知道三个词在人类语言中代表什么意思,但是它知道这三个词在向量维度上彼此之间的“关系”。所以,词向量模型可以计算相似度。
再举个栗子:刘焕通过自己的日记和微博上的文本(假设有并且足够多)训练了一个词向量模型,那当他输入“我要”两个字的时候,模型便能预测出接下来大概率要输“放假”。所以,词向量模型可以预测概率。
由此可得,词向量模型虽然不知道输入给它的文本内容在人类世界中代表什么,但是它可以借助向量确定这些内容在它的世界里是什么,甚至计算这些内容彼此之前的关系。
前面讲词向量,其实是为了方便理解clip。词向量模型可以处理文本与文本的匹配关系(比如知道“狗”和“犬”大概是同一个东西),而clip模型则能处理文本和图像的匹配关系(比如知道“狗”和一张狗的图片是对应的)。
SD的clip包含text encoder和image encoder,text encoder负责把我们输入的文本进行分词,然后转换为标记(Token),再将每个标记向量化(Embedding)。而image encoder在训练时已经掌握了大量的样本, 这里拿文本向量结果按余弦距离进行匹配即可,过程如下图:
现在回过头来看图像生成的过程,当我们输入“一只猫”作为提示词的时候,都发生了什么:
1、提示词被拆分(clip text encoder)
2、拆分后的词被转为标记(clip text encoder)
3、标记被向量化(clip text encoder)
4、从向量维度匹配文本和图像(clip text encoder + clip image encoder)
5、预测生成目标图像所需要的噪声(difussion model)
6、在随机噪声的图上不断减去预测的噪声(difussion model)
7、最终形成一张猫图(difussion model)
这是SD通过文本生成图像的过程,SD还支持通过图像生成图像,感兴趣的小伙伴们可以去了解下生成过程,这里不做展开。
具备生成图像的能力只是完成了第一步,实际场景中应用,当我们把能给的提示词都给到之后,可能生成效果仍然和预期有一定出入,这时候就要借助图像生成的随机性通过重新生成来碰运气,就是俗说的“抽卡”。
那如何减少抽卡的概率呢?就是增强图像生成时的控制能力,SD的图像控制主要通过提示词、主模型、Lora模型、ControlNet来完成。
SD文本生成图像过程中,提示词是成本最低的控制方式,比如通过文本来限定图像的主题、场景、镜头等要素。
提示词是告诉SD生成图像中要有什么,如果要告诉SD避免图中出现什么,就要用到反向提示词。
举个栗子:
提示词:master piece,high qulity,a beautifull girl,black long straigh hair,pretty face,moonlight
反向提示词:nsfw,sexy
上面提示词要求图中出现女孩儿,黑长直,月光,要求避免出现社死内容,出图如下:
出图效果基本符合要求,但这是刘焕爱看的风格而不是我们爱看的,所以我们再加一个反向提示词要求避免出现裸露的腿部:
提示词:master piece,high qulity,a beautifull girl,black long straigh hair,pretty face,moonlight
反向提示词:nsfw,sexy,leg skin
出图就会尽量避免出现腿部皮肤:
2、主模型
前面讲到SD生成图像的核心原理之一是扩散模型,官方的大模型都是花费巨额成本训练了大量图片得到的,它的特点是大而全,但是在特定风格图像的生成上有些力不从心,于是小伙伴们在这些官方基础模型之上,加以训练或融合,最终产出各种不同风格的模型。使用相同的提示词,在不同模型下的表现明显带有对应模型的风格。
还是以刚才的“女孩儿,黑长直,月光”提示词为例,在写实风格模型下出图效果:
在二次元风格模型下出图效果:
在国漫风格模型下出图效果:
SD主模型的训练是需要大量图像样本和计算资源的,如果只需要定制人物、画风等要素,则可以通过对应的Lora模型来实现,训练Lora模型所耗费的资源比主模型要小很多,对人物、画风等要素的定制效果立竿见影
还是以刚才的“女孩儿,黑长直,月光”为提示词为例,使用iu的人物Lora模型:
使用八重神子的Lora模型:
Lora主要用作控制人物,而人物的表情和姿势控制,则要用到ControlNet,Controlnet可以通过参照图像或者画布上画火柴图来控制出图效果。
还是以刚才的“女孩儿,黑长直,月光”为提示词为例,我们指定一个顶流舞蹈小熊舞截图的姿势:
并把ControlNet的processor设为openpose,出图效果就会偏向这个姿势:
当我们在画布上画一个横着的小人作为参照姿势:
出图就会尽量贴近这个横着人的小人:
以上就是SD中常用的图像生成控制方式,SD中还有其它的手段可以干预出图质量和效果,比如VAE、采样器、迭代次数等,感兴趣的小伙伴可以深入的去了解,这里就不展开了。现在我们简单总结一下AI出图的流程:
1、输入提示词(文生图场景输入提示词,图生图场景输入参照图)
2、SD clip处理输入的文本,经过一系列流程转为向量,通过计算近而得知要出什么样的图
3、主模型、Lora、ControlNet出图控图(这里省略VAE、采样器、步数、随机种子等)
4、不断迭代最终生成效果图
简单的提示词就可以让工具按要求生成图像,稍加控制就能指定人物的表情和姿势,还能训练自己的人物模型,AI画图给我们工作和生活带来便利的同时,不禁让我们感慨AI的无所不能。既然它画的比我们快,还画的比我们好,那本着打不过就加入的原则,让我们一起拥抱AI吧!
联系客服