Dalle3:"那时的你向往奇幻,向往天空,梦里都是五彩斑斓的世界,我想大概是这样的吧..."
然后开始画图:
我:"I have a dream when a was young"
SD:"你啥玩意儿?"
然后开始画图:
由此可见, Dalle3不怎么挑输入质量,甚至能对抽象或模糊的输入进行联想,最终画出一张质量还可以的图,而SD对输入信息要求较高,如果不告诉SD具体要画什么,它会选择直接躺平。
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。
举个栗子:
用一张猫图作为训练图像,通过为其不断添加噪声,最终得出一张噪声图,这个添加噪声的过程被噪声预测器所记录
当我们需要生成一张猫图的时候,便可通过如下方法来达成:
1、生成一张完全随机的噪声图像作为原始图像 。
2、要求噪声预测器告诉我们生成猫图所需要的噪声(记录器记录了之前训练时如何通过添加噪声把一张猫图变成一张随机噪点图,所以能预测出反向操作所需要的噪声)
3、然后我们从原始图像中减去这个预测的噪声
4、不断重复,便会得到一张猫图。
例子中的扩散过程所需要的计算量在普通计算机上很难完成,所以SD的扩散模型不再是在像素空间中完成,而是在低维的潜空间中完成,这带来的直接结果就是我们手中的破电脑也能本地AI出图了。
举个栗子:我们通过某小说文本内容(假设它足够长)训练了一个词向量模型,那当我们把 “黄鱼面”、“凯迪拉克”、“排骨年糕” 这三个词给到它,它是能得出“黄鱼面”和“排骨年糕”更近似。因为在训练中我们给到它足够多包含了这些词的文本,它把每个字和词向量化,然后根据每个字和词出现的位置、频率,从某种意义上计算出彼此之间的关系。虽然它不知道三个词在人类语言中代表什么意思,但是它知道这三个词在向量维度上彼此之间的“关系”。所以,词向量模型可以计算相似度。
再举个栗子:刘焕通过自己的日记和微博上的文本(假设有并且足够多)训练了一个词向量模型,那当他输入“我要”两个字的时候,模型便能预测出接下来大概率要输“放假”。所以,词向量模型可以预测概率。
由此可得,词向量模型虽然不知道输入给它的文本内容在人类世界中代表什么,但是它可以借助向量确定这些内容在它的世界里是什么,甚至计算这些内容彼此之前的关系。
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避免图中出现什么,就要用到反向提示词。
举个栗子:
提示词:master piece,high qulity,a beautifull girl,black long straigh hair,pretty face,moonlight
反向提示词:nsfw,sexy
上面提示词要求图中出现女孩儿,黑长直,月光,要求避免出现社死内容,出图如下:
在二次元风格模型下出图效果:
在国漫风格模型下出图效果:
还是以刚才的“女孩儿,黑长直,月光”为提示词为例,使用iu的人物Lora模型:
使用八重神子的Lora模型:
还是以刚才的“女孩儿,黑长直,月光”为提示词为例,我们指定一个顶流舞蹈小熊舞截图的姿势:
并把ControlNet的processor设为openpose,出图效果就会偏向这个姿势:
当我们在画布上画一个横着的小人作为参照姿势:
出图就会尽量贴近这个横着人的小人:
简单的提示词就可以让工具按要求生成图像,稍加控制就能指定人物的表情和姿势,还能训练自己的人物模型,AI画图给我们工作和生活带来便利的同时,不禁让我们感慨AI的无所不能。既然它画的比我们快,还画的比我们好,那本着打不过就加入的原则,让我们一起拥抱AI吧!