我也不想标题党,可它们就是好萌啊!看看下面这些你认识多少?
我是憨憨,一个不会画画的设计师。过去半年里,AI绘画曾经多次引爆公众讨论,网络上那些精致的二次元同人插画、堪比真人的AI穿搭博主、打破次元壁的赛博Coser……背后都有一个“幕后黑手” —— Stable Diffusion,其背后的技术便是人们常说的扩散模型(扩散模型这个概念源自热力学,在图像生成问题中得以应用)。
想知道上面这些精致的插画是如何实现的吗?接下来,我将结合这个案例带你走进 Stable Diffusion 的世界,帮你系统性地了解并掌握这神奇AI绘画魔法。
虽然我们把这个过程称之为AI绘画,但实际上它并不是像人类画图一样打草稿、构线描边,再去上色、对细节加工……这样按部就班地去完成一幅画作的,它采取了一个人类不曾设想的路径 —— Diffusion(扩散)。
有一个非常形象的方式,来解释 Diffusion 的原理。
这是我家的傻狗,你可以将自己的角色带入到执行绘画指令的AI中,现在让你把这幅画用宫崎骏风格重新绘制一遍,你做得到吗?你可以尝试着把眼睛眯成一条缝去看它(如果你近视可以摘掉自己的眼镜),它是不是变得模糊了?保持这个状态,想象着它正在逐渐变成动漫里的样子,随后慢慢睁开眼睛……
这就是一个扩散模型工作的基本流程了。
在这个过程中,AI会将图片通过增加噪声的方式进行“扩散”,使它变得模糊,就像是眯起眼睛的你一样,当内容模糊了以后,你就有更充分的空间去从它原本的形态抽离,并且想象它是否能变成其他模样。AI通过深度学习的方式,将很多不同的图像都转换成了这样的抽象内容,并逐渐开始理解了这个“扩散”的过程,每学一张图,它就会通过一些方式提取图像里的信息特征,并和它的原图建立关联。
在刚才的例子中,当提到宫崎骏风格的时候,你的脑海里肯定也会跳出跟这类作品相关的风格特质来,因为你看过并且记得,这个时候,我们开始去想象它变成动画片里的样子,并且用一个动漫的方式“睁开眼睛”,让图片恢复清晰,这就是在对图像进行逆向的扩散,也就是去噪。这幅画,就已经被你脑海里关于宫崎骏的想象重新绘制一遍了。
这一原理,为我们在AI绘画中的操作提供了理论基础和指导思想。当然,这只是一个简单的比喻,在真实的AI图像生成过程中要远复杂得多,我们只需要知道,在SD里面我们能接触到的各种提示词、模型、controlNet 等,其实控制的都只是AI的学习、转化、去噪过程,而非它一笔一画的动作。
这是 Stable Diffusion webUI,我们所有的操作都是在这里完成的。webUI其实只是一个执行的程序,用来屏蔽掉 Stable Diffusion 复杂的模型和代码操作。当你在浏览器里打开了这个webUI以后,就可以利用它开始作画了。
WebUI 上面一整排标签栏对应了不同的功能,做图最常用的是前两个:文生图与图生图,它代表的是两种绘制的基本方式,第三个标签的更多主要用于对图片进行AI放大处理,它可以让你生成更清晰的大图。
看过《哈利波特》的影迷一定会记得,在霍格沃滋的魔法世界里,一个魔咒想要成功施展,不仅需要集中精神念对咒语,还需要一根魔杖,以及正确地挥动魔杖的手势,任何一个步骤出现错误,都有可能导致魔咒发动的失败,极端情况甚至会被反噬,在AI绘画的魔法世界里也是类似。
WebUI 中被我们输入进去的描述文字或图像信息,就是 Prompts (提示词):用于生成图像的文字输入,需要使用英文输入,但你也可以通过探索 Extensions 来实现中文输入。提示词的涵盖范围很广,可以包括:主体、风格、颜色、质感特点等一些具体要素。
提示词分成两部分,一部分是正向的提示词,另一部分是反向提示词,分别用来控制你想要在画面里出现的、想排除在外的内容。
AI 生成出来的东西是具有随机性的,每次生成出来的东西都会不太一样,这个过程就像是在“抽卡”:想出好的图片,得靠运气来抽。 比如:一个女孩在林中漫步,这其实只是一个非常概括的描述,这个女孩长什么样子、森林里有什么、时间是早上还是晚上、天气如何……这些AI都不知道,提示词太过于笼统,那AI就只能瞎蒙、抽卡了。我们可以把自己想象成一个无情的甲方,向AI沟通你的需求、AI需要改进的地方。我们对AI提的要求其实就是提示词 Prompts ,如果AI没有达到想要的效果,就不断补充、说明,多试几次总有一次可以抽到想要的效果~
虽说AI是人工智能,但它和人类智慧还是有一定差距的,有时候你会发现即使提示词已经给了很多,自己依然很难向AI表达清楚自己的需求。其实在现实生活里,这种对于需求的传递偏差与错误解读其实也普遍存在着,比如:总是干架的产品经理和程序员、甲方客户与设计师。拿我熟悉的设计举例,假如你是需求方,除了不断对着设计师一遍又一遍的咆哮需求以外,还有什么办法让他快速开窍呢?
你可以拿着一张海报或者banner,告诉设计师我想要的感觉是这样的,那他就会更直观、具体的感受到你的想法。AI绘画也是一样,当你觉得提示词不足以表达你的想法,或者希望以一个更为简单清晰的方式传递一些要求的时候,那就再丢一张图片给他就好了。此时,图片的作用和文字是相当的,就是都作为一种信息输送到AI那里,让它拿来生成一张新的图片,这就是图生图。
这部分内容介绍一下在AI绘画过程中,webUI里面这些复杂的参数设置。
(1)采样算法(Sampler) 简单来说,通过这些采样算法,噪声图像可以逐渐变得更清晰。webUI提供的算法选项非常多,包括 Euler a、DPM、DDIM 等。我分享几个我们经常会用到的:
•想使用快速、新颖且质量不错的算法,可以尝试 DPM++ 2M Karras,设置 20~30 步;
•想要高质量的图像,那么可以考虑使用 DPM++ SDE Karras,设置 10~15 步(计算较慢的采样器)、或者使用 DDIM 求解器,设置 10~15 步;
•喜欢稳定、可重现的图像,请避免使用任何原始采样器(SDE 类采样器);
•Euler、Euler a 比较适合插画风格,出图比较朴素;
(2)采样迭代步数(Steps) 与采样算法配合使用,表示生成图像的步数。步数越大,需要等待的时间越长。通常 20-30 步就足够了。默认的采样步数一般都是20。如果你的算力充足且想追求更高的细致度,就设置为30-40,最低不要低于10,不然你可能会被你自己产出的作品吓到。
(3)面部修复 在画人物的时候需要勾选上,他可以改善细节、纠正不准确的特征,让生成的人脸显得更加自然和美观,类似美图秀秀的一键美颜。
(4)宽度 & 高度 生成图像的宽度和高度分辨率。默认的分辨率是 512 x 512, 但这个分辨率下的图片,哪怕是细节再丰富,看起来也很模糊,所以设备允许的情况下,我们一般把它提到1000左右。相同的提示词用更高的分辨率跑出来,质感完全都不一样。当然,分辨率设置的太高也会有问题,显卡显存扛不住,出现 “CUDA out of memory”的提示。为了让我的AI绘画有强悍的性能,保证我的出图效率和体验,我使用了京东云GPU云主机,它拥有超强的并行计算能力,在深度学习、科学计算、图形图像处理、视频编解码等场景广泛使用,可以提供触手可得的算力,有效缓解计算压力,让我在高清出图时不再有“爆显存”的烦恼。
(5)平铺/分块(Tiling)**用来生成无缝贴满整个屏幕的、纹理性图片的,如果没有需要慎重勾选哦,它会让你的画面变得很奇怪。
(6)提示词相关性(SFG Scale)**CFG Scale 的范围是 1-30,默认值为 7。我们可以通过调整不同的 Scale 值来观察图像的变化。它的数值越高,AI绘画忠实地反应你提示词的程度就越高,7~12之间是比较安全的数值,数值太高则容易引起图片变形。
(7)随机种子(Seed)**生成图像的随机种子,类似于抽奖的幸运种子,会影响生成的图像结果,是我们用来控制画面内容一致性的重要参数。如果我们想要画面保持一样的风格,就可以使用同一个随机种子。在这个随机种子里面,有2个功能按钮,点击右侧的骰子,可以把随机参数设置成-1,每一次都抽一张新的卡;点击中间的循环按钮,就会把种子设置成上一张图片抽出来的数字。
(8)生成批次、每批数量 每批、每次次生成的图像数量,如果显存不够大,建议调小数值。因为AI绘画的不确定性,即使是同一组提示词,也需要反复试验。这个试验过程有时候会很漫长,如果你想让AI一直不断地按照同一组提示词和参数出图,可以尝试批次数调高,绘制的过程则会不断重复地进行。所以完全可以让它一口气来上个几十次甚至上百次,自己去吃个饭、睡一觉,让显卡默默地在这里打黑工。增大 \[每批数量\] 可以让每批次绘制的图像数量增多,理论上效率会更高,但它同一批绘制的方法是:把这些图片拼在一起看作一张更大的图片,所以如果你的设备不好,非常容易爆显存。
标签:diffusion,ControlNet,AI,模型,深入浅出,生成,图像,Stable,图片 From: https://blog.51cto.com/u_15714439/9603275