共计 10039 个字符,预计需要花费 26 分钟才能阅读完成。
👉腾小云导读
计算机如何生成和实在图片类似的图画?模型是如何听懂咱们想要它生成什么并给出对应后果?AIGC 热潮中的 Stable Diffusion、NovelAI、Latent upscale、ControlNet、LoRA 等等是什么以及有什么亮点?本篇不波及任何一个数学公式、不波及艰涩文献解析,而是通过尽可能直白的解释,让没有太多 AIGC 背景常识的人也能够疾速了解 AI 画画背地的技术原理和倒退历史。欢送浏览和分享。
👉看目录点珍藏,随时涨技术
1. 计算机如何生成图画?
2. 如何管制画面内容?
2.1 如何了解文本?
2.2 如何管制生成的后果?
3. 为什么 AI 画画成果如此惊人?
4. ControlNet:让咱们管制扩散模型
5. 潜在下限
6. LoRA:大型语言模型的低秩自适应
7. mov2mov
AI 画画这个畛域倒退太快了,要晓得去年的 AI 画画还是这个画风:
当初的 AI 画画曾经迅速进化到这个水平,咱们举个例子:
施法咒语长这样——
film still, [film grain], large crowds, cyberpunk street, street level photograph, Chinese neon signs, time square advertisements, Dark atmospheric city by Jeremy Mann, Nathan Neven, James Gilleard, James Gurney, Makoto Shinkai, Antoine Blanchard, Carl Gustav Carus, Gregory Crewdson, Victor Enrich, Ian McQue, Canaletto, oil painting, brush hard, high quality, (brush stroke), matte painting, (very highly detailed)
生成后果长这样——
对于近期各个成果惊人的模型,目前市面上曾经有不少介绍文章,但大部分比拟艰涩难懂。所以本文将尽可能艰深、直白地解释 AI 绘画的原理,欢送各位浏览。开发者敌人们在浏览完本篇后,能够进一步浏览本公众号今日推送的次条文章,追随腾讯工程师的教程疾速部署 Stable Diffusion Web UI,以及《给想玩 AIGC 的小白:教你从 0 搭一个图文视频生成网站(附插件 & 源码)》一文,上手打造 AI 绘画网站~
点下方关注并星标腾讯云开发者,回复 「AIGC」, 一键支付 0 根底AI 绘画 网站搭建教程、模型源件、工具插件、网站源码和部署模型所需 GPU 服务器限量优惠券。**
01、计算机如何生成图画
这章咱们会提到几个大家耳熟的概念:VAE、auto-encoder、GAN、Diffusion model 等等。浏览完这章,你将能有更清晰认知。言归正传,AI 是怎么学会画图的呢?
这就要波及到两个方面了。一个是能生成像实在图片一样的数据,一个是要听得懂咱们想要它生成什么,并给出对应的后果。
首先来看看如何生成像实在图片一样的数据。这波及到机器学习中的一个重要分支——生成模型(generative model)。对于生成图像这个工作来说,通常一个生成模型须要先吞进大量的训练数据(巨量的人类实在图片),而后再学习这些数据的散布,去模拟着生成一样的后果。机器学习的外围无非就是这么回事,难点究竟是在如何设计模型、让模型能更好的学到这样的散布上。
要讲生成模型,有一个不得不提的技术就是 VAE(变分自编码器,即 variational auto-encoder)。这其中的 auto-encoder,尽管叫 auto-encoder,然而其实蕴含了编码器 encoder 和解码器 decoder,是一个对称的网络结构。对于一系列相似的数据例如图片,尽管数据量很大,然而合乎肯定散布法则的,信息量远小于数据量。编码器的目标就是把数据量为 n 维的数据压缩成更小的 k 维特色。这 k 维特色尽可能蕴含了原始数据里的所有信息,只须要用对应的解码器,就能够转换回原来的数据。在训练的过程中,数据通过编码器压缩,再通过解码器解压,而后最小化重建后数据和原始数据的差。训练好了当前,就只有编码器被用作特征提取的工具,用于进一步的工作,例如图像分类等利用中。故,称为 autoencoder。
这时候有人想到:既然 auto-encoder 能够从 k 维特征向量复原出一整张图片,那给你一个随机生成的 k 维特征向量,是否也能够随机生成什么画面呢?
然而理论结果显示,autoencoder 尽管能够「记住」见过的照片,然而生成新图像的能力很差。于是就有了 variational auto-encoder。VAE 令 k 维特色中的每个值变成了合乎高斯分布的概率值,于是概率的扭转能够让图片信息也有相应的平滑的扭转,例如某个管制性别的维度,从 0 到 1 能够从一个男性的人脸开始,生成越来越女性化的人脸。
通过管制特色变量来操控人脸生成后果。
VAE 其实还是有很多统计假设的,而且咱们要判断它生成的成果如何,也须要评估它生成的数据和原始数据的差距大不大。于是有人丢掉所有统计假设,并且把这个评估真(原始数据)假(生成数据)差别的判断器也放进来一起训练、发明了 GAN,生成反抗神经网络。
GAN 有两个局部——生成器和判断器。生成器从一些随机的 k 维向量登程,用采样网络合成大很多的 n 维数据,判断器就负责判断合成进去的图片是真是假。
一开始合成进去的都是意义不明的无规律后果,很简略的判断器就能够分辨进去。生成器发现一些生成的方向,例如有成块的色块能够骗过判断器,它就会往这个方向合成更多的图片。而判断器发现被骗过来了,就会找到更简单的特色来辨别虚实。如此重复,直到生成器生成的后果,判断器曾经判断不出虚实了,这就算是训练好了。这样训练进去的生成器能够生成十分真切的、即便是人眼也很难分辨的图片,然而是不存在的。到了这时候,计算机曾经能学会生成相当真切的画面了,例如上面这张人脸:
尽管 GAN 因为引进了判断器,能生成十分真切的图片,然而它因为要训练反抗网络,切实是太不稳固了,面对吞噬了网络巨量数据的超大规模网络来说十分难以管制。这时候另一个更好的抉择呈现了。也是当初的 AI 画画广泛应用的生成模型——Diffusion model(扩散模型)。
Diffusion model 生成图片的过程看似很简略,其实背地有一套非常复杂的数学实践撑持。简单的实践先放一边,咱们先艰深地聊聊 Diffusion model 是怎么运行的。
上图是 Diffusion model 运行的两个过程。左边是一个失常的图片,从右到左(Forward Diffusion)做的事件是在逐次叠加合乎正态分布的噪声,最初失去一个看起来齐全是噪声的图片,这就是所谓的“扩散(diffusion)”过程。你能够不谨严地设想成你有一块牛排,你一遍一遍地往上撒椒盐,始终到整块牛排都被椒盐笼罩到看不清原来的纹路。因为每次加噪声只和上一次的状态无关,所以是一个马尔科夫链模型,其中的转换矩阵能够用神经网络预测。
从左到右(Reverse Diffusion)做的事件是一步步去除噪声、试图还原图片,这就是 diffusion model 生成数据的过程。
为了达到去噪的目标,Diffusion model 的训练过程实际上就是要从高斯噪声中还原图片,学习马尔科夫链的概率分布、逆转图片噪声,使得最初还原进去的图片合乎训练集的散布。
这个去噪的网络是如何设计的呢?咱们能够从叠加噪声的过程中发现,原图和加噪声后的图片尺寸是齐全一样的!于是很天然能想到用一个 U-net 构造(如下图)来学习。
U-net 是一个相似 auto-encoder 的漏斗状网络,但在雷同尺寸的 decoder 和 encoder 层减少了间接的连贯,以便于图片雷同地位的信息能够更好通过网络传递。在去噪工作中,U-net 的输出是一张带噪声的图片,须要输入的是网络预测的噪声,groundtruth 是理论叠加上的噪声。有了这样一个网络,就能够预测噪声,从而去除掉它,还原图片。因为带噪声的图片 = 噪声 + 图片。这也是为什么 Diffusion model 会比其余办法生成图片更慢,因为它是须要一轮一轮去噪的,而不是网络能够一次性推理出后果。
以上就是 Diffusion model 生成图片的原理,是不是很简略呢!
02、如何管制画面内容
下面解释了计算机如何生成和实在图片类似的图画。接下来解释一下模型是如何了解咱们想要它生成什么,并给出对应的后果的。
2.1 如何了解文本?
玩过 AI 画画的人应该都晓得,AI 画画最支流的模式是在网页输入框中输出一长串吟唱咒语。其中包含想要生成的内容主体、格调、艺术家、一些 buff 等,点击生成后就能够失去一张十分 amazing 的后果(也可能很吓人)。
文字管制模型生成画面最早的做法,其实更像是让生成模型生成一大堆合乎常理的图片之后,再配合一个分类器来失去符合条件的后果。在海量的数据背后这显然是不够用的。这个畛域的开山之作——DALL·E 中最值得一提的是引入了 CLIP 来连贯文字和图片。
CLIP 模型其实就是用了巨量的文本 + 图片数据对,把图片和文本编码后的特色计算相似性矩阵,通过最大化对角线元素同时最小化非对角线元素,来优化两个编码器,让最初的文本和图片编码器的语义能够强对应起来。
如果不能了解 CLIP 的原理,只有记住 CLIP 把文字和图片对应起来了就能够了。它最大的胜利之处不是用了多简单的办法,而是用了巨量的数据。这样带来的益处是,很多现有的图像模型能够很容易扩大成文本管制的图像模型。本来须要大量人工标注的很多工作,当初只须要用集大成的 CLIP 就能够了,甚至还可能生成新数据,例如在 StyleCLIP 里用文本交互管制生成的人脸:
最开始图片的文字信息大多是以打标签的模式通过大量人工标注来实现,有了 CLIP 当前能够说是彻底买通了文字和图片之间的桥梁,使得图像相干的工作失去大大的扩大。说是 AI 画画的基石也不过分。有了这个 CLIP 模型,就能够计算任意图片和文本之间的关联度(即 CLIP-score),拿来领导模型的生成了。
这一步其实还分了几个倒退阶段。最开始用的办法(Guided Diffusion)很 naive:每次降噪后的图片,都计算一次和输出文本之间的 CLIP-score。本来的网络只须要预测噪声,当初网络岂但要预测噪声还须要让去噪后的后果图尽可能和文本靠近(也就是 CLIP-loss 尽量小)。这样在一直去噪的过程中,模型就会偏向于生成和文本相近的图片。因为 CLIP 是在无噪声的图片上进行训练的,这边还有一个小细节是要对 CLIP 模型用加噪声的图片进行 finetune,这样 CLIP 能力“看出”加噪声后的牛排还是一块牛排。
这样做的益处是 CLIP 和 Diffusion model 都是现成的,只须要在生成过程中联合到一起。但毛病是原本就曾经很慢的 Diffusion model 生成过程变得更慢了,而且这两个模型是独立、没法联结训练,失去更进一步的晋升。
于是就有了 Classifier-Free Diffusion Guidence,模型同时反对无条件和有条件的噪声预计,在训练 Diffusion model 时就退出文本的疏导。这样的模型当然也离不开很多很多的数据和很多很多的卡,除了网络爬取,还有通过商业图库结构出巨量的图片和文本对,最初做为成品的 GLIDE 在生成成果上又达到了一次飞跃。尽管当初看有点简陋,然而在过后来说曾经很惊人了,祝贺大家,看到这里曾经追上了 AI 绘画 21 年末的进度!
2.2 如何管制生成的后果?
再衍生一下:如果你试过用 AI 给你画头像,这时候输出条件就变成了图片,那么这样要怎么管制生成的后果呢? 这里有几种不同的办法,其实算是不同流派了。这里咱们将介绍 3 种:
第一种是间接提取图片的 CLIP 特色。 就像文字特色一样去疏导图片。这样生成进去的图片的内容比拟相近,但构造不肯定雷同。例如下图,模型生成了类似的内容然而画风稍微怪诞!
第二种特地好了解,当初支流的 AI 画画 webui 里的 img2img 都是采纳这个办法。 就是对输出的原图减少几层噪声,再以这个为根底进行惯例的去噪。应用你心愿的画风相应的「咒语」,就能够生成和你原图构造相似但画风齐全不同的图片。
叠加的噪声的强度越高,生成的图片和原图就差距越大,AI 画画的施展空间就越大。
上图是用这个办法生成的二次元形象,你把屏幕放远点看这两张图的色块是相近的。因为左边的图片就是基于右边叠加了厚厚的“椒盐”来作为根底生成的,大抵的色块构造仍然保留了,但模型也加上了本人的设想(通过文本疏导)。
第三种办法是用对应的图片去 finetune 生成网络(Dreambooth),如下图。给模型看很多很多小狗狗的图,让模型学到这只小狗狗的样子,这样只须要再加上一些简略的词汇就能够生成各种各样的小狗狗。
03、为什么 AI 画画成果如此惊人——几个里程碑级模型
下面解释了计算机如何生成和实在图片类似的图画,以及模型是如何听懂咱们想要它生成什么并给出对应后果的。到此,AI 画画的基本原理曾经介绍得差不多了。咱们能够发现,其实大部分都是「改良」的工作,然而成果是真的很惊人!在这期间,波及到很多训练网络的 tricks。
当初最炽热的模型就是 Stable Diffusion,因为开源且成果好,失去了泛滥人青睐。另外基于此,排汇了巨量二次元插画的 NovelAI 也在二次元画风上异军突起,甚至在炽热水平上和 Stable Diffusion 相比,有过之而无不及。
讲 Stable Diffusion 为什么这么好,要先从 Latent Diffusion Model 谈起。
让咱们来温习一下 diffusion model 的原理:
对一个带噪声的输出图片,训练一个噪声预测 U-net 网络,让它能预测噪声,而后再从输出中减去,失去去噪后的图片。
个别的 diffusion model 是对原始图片进行加噪去噪,噪声图片和原始图片尺寸是一样的。为了节约训练资源和生成工夫,通常会用较小的图片尺寸训练,再接一个超分辨率模型。
而在 Latent Diffusion Model 中,diffusion 模块被用于生成 VAE 的隐编码。于是整个流程变成了这样:
图片先用训练好的 VAE 的 encoder 失去一个维度小得多的图片隐编码(能够了解为将图片信息压缩到一个尺度更小的空间中),diffusion model 不再间接解决原图而是解决这些隐编码,最初生成的新的隐编码再用对应的 decoder 还原成图片。相较于间接生成图片像素,大幅度缩小计算量与显存。
第二个改良是减少了更多的训练数据,并且还多了一个美学评分的过滤指标——只选难看的图片。这就像是如果想要学会画丑陋的画,就要多看看大艺术家们的 masterpieces 一样。
训练集里都是丑陋的图片,例如这样的:
或者这样的:
含糊的图、有水印的图都被 pass 了,让机器只从丑陋图片里学画画。
最初相比 Latent Diffusion Model 的改良,是用上文提到的 CLIP 来让文本管制图片的生成方向。
这里也提一下二次元画风的 NovelAI。其实在技术上没有十分新的内容,就是拿巨量二次元图片去 finetune 原始 Stable Diffusion 模型。次要一些改良是 CLIP 用了倒数第二层更贴近文本内容的特色、把训练数据扩大为长宽比不限(为了能包容下残缺的人像)、减少了可反对文本输出长度从而让咒语变得更灵便也更简单。笔者集体认为成果好还是因为吞了巨量的图片,外加用户的激情让这个模型迅速发扬光大,甚至还有《元素法典》、《参同真解》等泛滥咒语书,更衍生出了泛滥辅助绘制工具~
04、ControlNet:让咱们管制扩散模型
因为 diffusion 超强的学习能力,实践上网络是能够还原出训练集里的每一张数据的。所以只有数据足够多、足够好,模型就能够生成十分好的图片。和人学画画不同,如果人的难点是画不进去,那么模型就不晓得该往哪个方向画。所以管制模型生成其实就是想方法让模型听话,依照你的批示生成后果。
在上文中,简略展现过 AI 画画中 img2img 的成果。原理是把左图加一些高斯噪声(撒撒黑胡椒)而后作为底图来基于它生成。所以基本上色块散布是靠近的,然而很难管制的更细节。
往年引起爆炸性话题的 ControlNet,则是能够通过任何的条件管制网络生成。原来模型只能失去一个文本的生成疏导,当初它能够听懂任何基于图片提取的信号了,只有你拿一组成对的图片去训练!
这个形式进去当前极大地扩大了可玩性,而且官网曾经提供了十分多罕用的训练好的管制网络。你能够用 depth 控制结构生成各种场景:
能够间接拿线稿上色:
能够轻易涂几笔就生成简单的图片:
还能够通过姿势检测生成很好的多人后果:
只有你想,你甚至能够本人训练。比如说就有人训练了手脚的控制器,解决了 ai 不会画手的问题:
这些管制后果还能够一起用,例如联合人体姿势和深度图:
甚至不须要来自同一张图:
成果是真的十分惊艳,但原理上其实实现得比较简单。为了给原始模型减少额定的条件输出,把整个网络复制了一份,固定原始网络来保障输入的稳定性。原始的网络输出仍然是噪声,而复制的 control 网络的输出是管制条件(深度、姿势等)。把两个输出和输入加起来,用成对的数据集(输出是深度图,输入是原图这种感觉)去训练管制网络,达到管制条件可能很好管制生成后果的水平,就训练好啦!并且这个训练实质上还是在做 finetune,所以耗时也不算很大,和间接 finetune 网络差不多。
05、潜在下限
ControlNet 解决了多人的姿态控制当前,模型曾经能够很好地生成十分正当的构造了。这时候就会面临另一个问题,模型的细节要如何生成得更好?
想要失去高质量的图片,最间接的形式就是调大输入的分辨率。分辨率越大,细节画得就越好(尤其是人脸)。然而实际上高分辨率的后果非常容易崩掉,例如呈现两个身材时因为训练模型里如此高分辨率的图片较少。并且分辨率高了当前计算成本飙升,会算得很慢。
于是一种常见的做法是学生成较小分辨率的后果,而后对图片做超分(就是把图片放大还要保障清晰度),流程如下。
这么做能够保障构造的合理性,而且速度快十分多。然而超分模型对细节的补完不肯定能做得很天然,而且容易有过于锐化的后果。除了传统超分模型,还有同样基于 diffusion 模型的超分算法。因为 diffusion 相当于重绘了,所以能够失去更好的细节成果。然而图片尺寸十分大,跑起来更慢了。
另一个当初被宽泛应用的办法是 latent upscale(webui 自带的 Hires.fix 即可实现),流程如下。
之前写到过,stable diffusion 的构造劣势之一是它是由压缩图片信息的 VAE 和对 latent 进行去噪的 U-net 网络组成,所以它人造适宜基于 latent 的超分办法。
Latent upscale 就是在图片通过 VAE 压缩后,间接对 latent 进行超分,而后再喂给 VAE,就能失去 x2 的图片了。如果和 stable diffusion 联合,那就是 SD 的 U -net 输入 latent 当前,先过一遍 latent upscale,再喂给 VAE 解码。
当然,对 latent 做 upscale 也有基于 diffusion 的办法并且成果应该是最好的。当然于此而来的代价就是耗时也减少了。对图片做一般超分和对 latent 做基于 diffusion 的超分后果比照如下。
集体认为成果好次要是因为 diffusion,基于图片做 diffusion 超分应该也能够达到这个品质,只不过耗时更久。放一张 latent upscale + controlnet 失去的高清美图。
06、LoRA:大型语言模型的低秩自适应
除了 ControlNet,近期 AI 画画畛域另一个不得不提的就是 LoRA,后面的水墨画美少女就是交融 LoRA 模型生成的。
要讲 LoRA 就要先解释模型的 finetune(微调)。模型的 finetune 指的是什么呢?其实就是当你有一个现成的,很厉害的大模型(pre-trained model),你想要让它学一些新常识,或者实现一些更面向具体利用的子工作,或者只是为了适配你的数据分布时,就须要拿你的小样本数据去对模型进行从新训练。这个训练不能训太久,否则模型就会过拟合到你的小样本数据上,丢失掉大模型的泛用性。
Pre-train + finetune 是机器学习中十分常见的组合,在利用上有很大价值。然而其中有一个问题就是“忘记”:模型会在 finetune 过程中一直遗记之前曾经记住的内容。
常见的解决方案有两个:
- replay:就是也把原始常识过一遍;
- 正则化:通过正则项管制模型参数和原始参数尽量统一,不要变太多;还有一个是 Parameter isolation(参数孤立化),这个是通过独立出一个模块来做 finetune,原有的模型不再更新权重。
参数孤立化是最无效的一种形式,具体有好几种实现形式。例如 Adaptor 就是在原模型中减少一个子模块、固定原模型,只训练子模块。是不是听起来很相熟?是的,ControlNet 就是一种相似 Adaptor 的办法,同理还有 T2I-Adapter,也是通过减少子模块来引入新的条件输出管制。
LoRA 则是另一种参数孤立化策略,也在 AI 画画找到了用武之地。它利用低秩矩阵来代替原来全量参数进行训练,从而晋升 finetune 的效率。
能够和之前最罕用的 finetune 办法 DreamBooth 比照一下。
对于 DreamBooth 来说,它是间接更新整个大模型的权重来让模型学习新概念的。尽管能够通过正则项防止忘记,然而 finetune 后的模型仍然十分大(和原模型一样大)。
而应用 LoRA 后,LoRA 影响的只是其中一小部分(通过低秩矩阵叠加到大模型网络上的)权重,所以 finetune 起来更快,更不吃资源,而且失去的 finetune 模型十分小,应用起来不便很多。
因为 LoRA 在结构上是独立于大模型的,所以它有一个额定的益处是替换大模型能够失去不同的、令人惊喜的后果。例如用水墨画训练的一个很难看的 LoRA 模型“墨心”,联合国风美女的根底大模型,能够生成衣着中式服装的水墨画美少女:
在网友写的《AI 形象生成指南》中,提出的办法就是利用能够生成亚裔女性的真人大模型,叠加从二次元大模型 finetune 进去的二次元女性形象 LoRA,来生成带有角色特色的真人 coser 照片:
而且 LoRA 也十分不便进行模型交融。例如说减少另一个韩国偶像 LoRA,失去的后果就交融了两者的特色:
在应用上来说,LoRA 很像是模型的“插件”,能够在根底模型上叠加想要的成果,或者把各种想要的成果加权组合叠在一起,能够产生很多令人惊喜的后果。
当然 LoRA 因为是 finetune 模型,所以画风会趋于繁多,是好是坏见仁见智,在须要固定画风 orID 的时候能施展令人惊喜的用途。然而,应用事实中的真人照片训练 LoRA 并公开模型十分缺德,请各位读者不要这么做。
07、mov2mov
讲完 LoRA 和 ControlNet 了再顺便提一嘴它们的联合产物—— mov2mov,其实原理上就是组合了之前的各种技术。例如 img2img 来保障背景和主体的连续性,controlnet 提供更多管制条件来加强对应性,还须要 LoRA 来保障输入的后果能尽量统一。
除此之外,传统的视频防抖算法如窗口平滑、插帧,这些 buff 全副叠加下来,才可能失去一个仍然很抖的成果。然而其中最重要的是,你须要一个高质量的驱动视频。感兴趣的能够自行搜寻理解。简直算是重绘 MMD 的状况下(简略中的简略模式了)视频成果仍然不算现实,想要有更好的视频生成成果还是有一段距离的。
以上是本次分享全部内容,欢送大家在评论区分享交换。如果感觉内容有用,欢送转发~浏览完本篇后,举荐各位进一步浏览本公众号今日推送的次条,追随腾讯工程师的教程疾速上手部署 Stable Diffusion Web UI,以及《给想玩 AIGC 的小白:教你从 0 搭一个图文视频生成网站(附插件 & 源码)》一文,上手建设你的 AI 绘画网站~
点下方关注并星标腾讯云开发者,回复 「AIGC」, 一键支付 0 根底AI 绘画 网站搭建教程、模型源件、工具插件、网站源码和部署模型所需 GPU 服务器限量优惠券。**
-End-
原创作者|周艺超
技术责编|周艺超
程序员用现有 AIGC 代表产品(如 GPT- 4 等)凋谢的 API 接口,能够做哪些自研工具?有哪些离奇 / 实用的应用形式?
欢送在公众号评论区聊一聊你的创想。在 4 月 17 日前将你的评论记录截图,发送给腾讯云开发者公众号后盾,可支付腾讯云「开发者秋季限定红包封面」一个,数量无限先到先得😄。咱们还将选取点赞量最高的 1 位敌人,送出腾讯 QQ 公仔 1 个。4 月 17 日中午 12 点开奖。快邀请你的开发者敌人们一起来参加吧!
点下方关注并星标腾讯云开发者
公众号回复 「AIGC」
一键支付 0 根底 AI 绘画网站搭建教程、模型源件、工具插件、网站源码和部署模型所需 GPU 服务器限量优惠券