一次性搞懂AI绘画是如何生成图像的!

为什么我们输入一句话,人工智能便能产出一幅画作呢?AI绘画究竟是如何生成图像的?这篇文章里,作者将AI绘画过程拆解成了5个核心问题,或许搞清楚这5个核心问题,你就能明白AI绘画的工作原理了,一起来看看吧。

img

写在前面

前段时间和Leader聊AIGC时,提到了关于AI绘画原理的话题,一直只知道人工智能是降噪画图的原理,但是很多细节不是很清楚,挺好奇为什么输入一句话,人工智能就能理解,并且画出来一幅“可圈可点”的画作。

趁着周末爬了些资料,也找学术界朋友给推荐了一些研究论文,大概明白了AI绘画是如何工作的,分享给大家,共勉。

Ps:主要通过白话的方式阐述AI绘画原理,手动绘制了插图和流程图作为示意,算法原理略去了很多细节,适用于泛AIGC爱好者阅读和学习了解。

整个AI绘画过程,我拆解成了五个核心问题,搞清楚这五个问题,AI绘画也就清晰了:

  1. 我只输入了一句话,AI是怎么知道这句话描述的是什么?
  2. AI绘画流程里提到的噪声图是哪里来的
  3. 就算有了噪声图,噪声图是怎么被一点一点去掉“马赛克”的
  4. 那AI是**怎么去掉无用的“马赛克”**的,最终去掉后是符合效果的?
  5. 就算有了最终效果,为什么重新作画的结果不一样

是不是看到这五个问题也有点懵,别着急,下面我们先看下AI绘画的绘制过程,就清楚这五个问题都是在问什么了。

先看总述:AI绘画的绘制过程

AI绘画发展很快,最典型的就是去年的《太空歌剧院》,获得科罗拉多州艺术一等奖,当时还是蛮震撼的。

因为再往前看几年,其实AI绘画的效果是这样的(12年吴恩达和团队用1.6万GPU和上万张数据,花了3天时间画出来的猫…):

img

我们再看下现在AI绘画的效果(普通人输入一句话,几秒钟画出来的作品):

img

Source: https://liblib.ai/ 官网

可以看出画质高清、精致,写实感很强,甚至可以比得上摄影师的作品了。

所以AI到底是怎么越来越优秀,根据一句话和几个参数就能画出这么好的作品呢?

先抛结论,AI绘画原理就是:

去除马赛克,就能看清了。

其实N多年前某些成人网就有了类似的技术,不过那个是1vs1还原,AI绘画本质是1vsN还原,核心就是把马赛克一点一点抹掉,最终“漏出”底图,完成所谓的“AI绘画”。

img

图像绘制:Designed byLiunn

我们先看下,AI绘画的使用场景,所有的软件或模型,基本上第一步都是让用户输入绘画关键词,也就是Prompt。

以Diffusion Model的示意如下,我们把最右边的当做正常图片,从右到左是不断模糊的,直至最后看不出来是什么,这个过程就是算法的叠加噪声。

你可以理解为不断对图片进行马赛克处理,这就是最著名的**“扩散(Diffusion)”过程**。

img

Source:https://mp.weixin.qq.com/s/ZtsFscz7lbwq_An_1mo0gg

打个比喻,我们把这个过程想象成你在发朋友圈照片时,想屏蔽一些信息,所以使用“编辑”功能不断地对某些区域进行涂抹,直到这个区域看不清原本的内容了。

并且每一次的噪声迭代其实仅仅和上一次的状态相关联,所以这本质上也是一个马尔科夫链模型(简单理解为随机模型,细节可以移步google)。

此时,如果把这个过程倒过来,从左到右做处理,那么就是一步步把一个图片逐渐去除噪声,变清晰的过程。

也就是你的朋友圈照片马赛克越来越少,这个过程就是Diffusion Model的原理。

OK,看到这里,我们明白了大概流程和原理,接下来,我们来依次看五个核心问题。

第一个问题:如何理解文本信息

你输入的文字,AI是怎么知道你想要描述的是什么?

按照上面所说的原理,图片是被一点点抹去马赛克的,但是我写的文本信息是怎么匹配到某一个马赛克图片的呢?

我们都知道,目前AI绘画最主流的使用方式就是在模型或软件里,输入一句话(俗称Prompt),可以写主体、背景、人物、风格、参数等等,然后发送,就可以得到一张图。

比如,“一个穿背带裤打球的鸡”,效果如下:

img

图像绘制:Source: Designed byLiunn

AI绘画底层也是大模型,是一个图像模型

最早的时候文本控制模型的做法是让模型生成一堆图片,然后再让分类器从中选出一个最符合的,这种方式没什么不好,唯一的缺点就是当数据量大到一定程度的时候,就会崩溃(想象一下,用excel处理上百亿行的数据,是不是负担很大)。

所以一方面需要非常多的图片数据来训练,另一方面又需要高效且快捷的处理,能承担这个任务的,就是Openai在21年推出的OpenCLIP。

CLIP的工作原理其实可以简单理解为:爬虫、文本+图片的信息对。

第一,先看CLIP的爬虫和数据库。

CLIP的最大亮点之一就是采用了非常多的数据,构成了一个庞大的数据库。

每次CLIP爬取到一张图片后,都会给图片打上对应的标签以及描述(实际CLIP 是根据从网络上抓取的图像以及其 “alt” 标签进行训练的)

img

Source:https://jalammar.github.io/illustrated-stable-diffusion/,引自Jay Alammar博客

然后从768个维度重新编码这些信息(你可以理解为从768个不同的角度来描述这个图)。

然后根据这些信息构建出一个超多维的数据库,每一个维度都会和其他维度交叉起来。

同时相似的维度会相对靠拢在一起,按照这种方式CLIP不断爬取,最终构建了一个大概4~5亿的数据库

img

图像绘制:Source: Designed byLiunn

第二,再看CLIP的文本图像匹配能力。

OK,有了数据库,库里的图像怎么和输入的文字匹配呢?这里又分两个步骤:

步骤01,怎么具备文本-图像匹配的能力。

先看下图,是算法的原理图,看不懂没关系,我在下面重新绘制了一幅降维版的示意图。

img

Source: https://github.com/openai/CLIP

我们来看下面这幅示意图,CLIP是如何识别文本和图像的关联。

img

作图绘制参考Source: https://jalammar.github.io/illustrated-stable-diffusion/,Designed By Liunn

这里是一个简化的算法模型,其本质是不断地通过大量数据来训练CLIP去关联、认识图片和文字,并且根据和答案的比对,不断地矫正,最后达到精确匹配关键词和特征向量。

步骤02,如何去做文本-图像匹配的关联。

好了,我们再来看CLIP是如何做到文本图像的匹配的。

当我们开始作画时,会录入文本描述(即Prompt),CLIP模型就会根据Prompt去上面的数据库里从768个维度进行相似度的匹配,然后拿图像和文本编码后的特征去计算出一个相似性矩阵

再根据最大化对角线元素同时最小化非对角线元素的约束,不断地优化和调整编码器,最终让文本和图片编码器的语义强关联起来。

img

图像绘制:Source: Designed byLiunn

最后,当找到最相似的维度描述后,把这些图像特征全部融合到一起,构建出本次要产出的图像的总图像特征向量集。

至此,输入的一段话,就转换成了这次生成图像所需要的全部特征向量,也就是AI所谓的已经“理解了你想画什么样的画了”。

这个跨越已经算是AI界的“登月一小步”了

有了CLIP的这个创新举措,基本上彻底打通了文字和图片之间的鸿沟,搭建了一个文本和图像之间关联的桥梁,再也不需要以前图像处理界的打标签的方式来不断堆人了。

第二个问题:原始噪声图的来源

上面讲到AI绘画是把“马赛克”一点点抹掉,那所谓的“马赛克”图,也就是噪声图是怎么来的呢?

噪声图的是扩散模型生成的,先记住这个概念**“扩散模型”。**

讲扩散模型之前,需要先讲另一个概念,AI生成图片的过程,其实是人工智能领域的一个分支,生成模型(Generative Model)。

生成模型主要是生成图像的,通过扔进去大量真实的图片让AI不断去了解、认识和学习,然后根据训练效果,自己生成图片。

在生成模型里,有个自动编码器的东西,它包含两个部分:编码器和解码器。

编码器可以把比较大的数据量压缩为较小的数据量,压缩的前提是这个较小的数据量是能够代表最开始的大数据量的;

解码器可以根据这个较小的数据量在适当的条件下,还原为最开始的的大数据量。

所以这个时候就有意思了:

能否直接给它一个较小的数据量,看看它自己能随机扩大成一个什么样的大数据量?

img

图像绘制:Source: Designed byLiunn

答案是可以的,但,测试效果很一般。

所以自动编码器不行了,怎么办呢,科学家发明了另一个东西,叫VAE(变分编码器,Variational Auto-encoder)。

VAE是做什么的,主要是把较小的数据量进行规律化,让其符合高斯分布的概率。

这样就可以依据这个,来调整一个图片信息按照概率的变化进行对应的改变,但是有个问题,这个太依赖概率了,大部分概率都是假设的理想情况,那怎么办呢?

所以这个时候科学家就想,能不能做两个AI,一个负责生成,一个负责检验它生成的行不行,也就是AI互相评估真假,这就是GAN,对抗神经网络诞生了。

GAN一方面生成图片,一方面自己检测行不行,比如有时候有些图片细节没有按照要求生成,检测的时候GAN发现了,它后面就会不断加强这块,最终让自己觉得结果可以,这样不断地迭代成千上亿次,最终生成的结果,检测也OK的时候,就是生成了一个AI的图片了。

但问题又来了

GAN一方面自己做运动员,一方面自己做裁判,太忙了,不仅消耗大量的计算资源,同时也容易出错,稳定性也不好,那怎么办呢?能不能让AI别搞这么复杂,用一套流程完成呢?

答案是肯定的,这就是跨越了生成模型时代后,扩散模型的时代到来了

话题回到扩散模型这里。

扩散模型最早是由斯坦福和伯克利学术专家,在2015年相关论文里提出的,依据正态分布给图像逐步增加噪声,到了2020年加噪声的过程被改为根据余弦相似度的规律来处理。(文末附上了15年和20年的原始学术论文链接,感兴趣可以自行阅读)

根据余弦调度逐渐正向扩散原始图,就像把一个完整的拼图一步一步拆开,直至完全打乱。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

图像绘制:Source:Designed byLiunn

到这里,第二个问题也解决了。当你看到这里的时候,AI绘画的输入信息基本Ready了。

第三个问题:模型如何去除噪声

AI把文字转成了特征向量了,也拿到噪声图片了,但噪声图是怎么一点点被去除“马赛克”的呢?

它是怎么消除掉马赛克的呢?这里面分为两个步骤:

步骤一,降维数据运算,提升运算效率;

步骤二,设计降噪网络,识别无用噪声,精准降噪。

**先看步骤一:**还记得上文提到的自动编码器么?

图像特征向量和噪声图,会一起扔到编码器里进行降噪,也就是去除马赛克的过程。

但是这里有个问题,就是一张512512的RGB图片就需要运算786432次,即512512*3=786432条数据,这个运算量太大了

所以在这些数据在进入到编码器之前,都会被压缩到潜空间里去,降维到64*64*4=16384条数据(不知道你有没有用SD的时候注意到,我们在Stable Diffusion里调整图像大小的时候,最小只能拖到64px,这就是其中的原因)。

img

Source:https://jalammar.github.io/illustrated-stable-diffusion,Designed byLiunn

这样的话,整个文生图的任务就能够降维到消费级的GPU上运算(虽然现在算力依然是个问题,A100都没有吧?有的话 私我!)

降低了落地门槛,运算和配置效率都得到了极大的提升。

**再看步骤二:**设计一个降噪网络。

明白了数据降维的问题,我们继续看,AI怎么逐步去除噪声生成新图呢,图像编码器又是如何给图像降噪,从而生成一张全新的图片的呢?

img

图像绘制:Designed byLiunn

关于降噪方式,ddpm在2020年年底的相关论文预测了三件事:

  1. 噪声均值(mean of noise):预测每个时间步长的噪声均值。
  2. 原始图像(original image):直接预测原始图像,一步到位。
  3. 图像噪声(noise of image):直接预测图像中的噪声,以获得噪声更少的图像。

现在的模型,大部分都是采用了第三种方式。

这个去除噪声的网络是怎么设计的呢?

这个主要归功于编码器中的**U-Net(卷积神经网络-图像分割)**了。

img

Source:https://jalammar.github.io/illustrated-stable-diffusion/

U-Net是一个类似于编码-解码器的漏斗形状的网络(上图左),不同点在于U-Net在相同层级的编码、解码层增加了直连通道(你可以理解为两栋大楼之间,同一楼层之间加了连桥,可以走动)

这样好处在于处理图片时,相同位置的信息在编码、解码过程中可以方便快捷的进行信息传输。

那它是怎么工作的呢?

刚才我们说了,DDPM提到,目前基本上所有的模型都采用直接预测图像中的噪声,以便于获得一张噪声更少的图片。

U-Net也是如此。

U-Net根据拿到第一节里提到的图像的全部特征向量集合后,从向量集合里通过采样的方式抽取一部分特征向量,再根据这些向量识别出其中的无用的噪声

然后用最开始的全噪声图和当前这次预测的噪声做减法(实际处理过程比这会复杂一些),然后得到一个比最开始噪声少一些的图,然后再拿这个图,重复上述流程,再次通过采样的方式抽取一部分特征向量,再去做噪声预测,然后再拿N-2次的图像和N-1次的图像相减,拿到N-3次的图像

继续重复上述流程,直至最终图像清晰,没有噪声或没有识别出无用的噪声为止,最终生成一张符合要求的图像。

img

图像绘制思路: Source:https://jalammar.github.io/illustrated-stable-diffusion/,Designed byLiunn

这里面,有的同学注意到了,还涉及到一个采样方法的环节。

每一次的采样,根据不同的采样方法,可以用同样的方式,也可以用不同的采样方式。不同的采样方法会抽取出不同维度、不同特质、不同规模的特征向量,最终确实会对输出结果有影响(这也是影响AI绘画可控性的因素之一)。

最后,还记得刚刚提到的数据降维吗?

降维是为了降低运算量,加快速度,降维后其实是进入到一个潜空间里,那么图像全部降噪完成后,会通过图像解压器也就是VAE模型,重新还原回来,被重新释放到像素空间里(可以理解为IPhone里云端存储的照片,你最开始看的是缩略图,当你点开大图想看的时候,会慢慢从云端下载,变成高清的)。

以上,就是噪声模型网络去噪的简易过程。

第四个问题:应该去除哪些无用的噪声

AI是怎么能够按照我描述的来去除特定的马赛克,而不是我写了“狗狗”,画出来一只“猫咪”呢?

U-Net模型如何识别应该去除哪些噪声呢?其实这就是一个模型训练的过程。

讲解模型训练之前,需要先普及几个概念:

  • **训练集:**用来不断让AI学习和纠错的,让AI可以不断成长的一个数据集合,你可以理解为打篮球时教练带你在训练场训练。
  • **强化学习:**当AI犯错的时候,告诉它错了;当AI正确的时候,告诉他对了;你可以理解为篮球教练在不断纠正你的投篮姿势,让你训练的更快更强。
  • **测试集:**用训练集训练一段时间后,看看AI能力如何的一个数据集合,你可以理解为打篮球时训练半年,组织了一场友谊赛。

先看U-Net的训练集是怎么构建的,主要分为四个步骤:

  1. 从图文数据集中随机选择照片;
  2. 生产不同强度的噪声,顺次排列;
  3. 随机选择某个强度的噪声;
  4. 将该噪声加到图片里。

img
图像绘制思路: Source:https://jalammar.github.io/illustrated-stable-diffusion/,Designed byLiunn

再来看U-net是怎么处理的。

U-Net的训练集是很多张已经叠加了随机噪声的数据库,可以理解为很多添加了马赛克的图片(篮球训练场地),然后让AI不断地从这个数据库里抽取图片出来,自己尝试抹去噪声,全部抹掉后再来和这张图的原图做比对,看看差别多大。

img

计算出这个差距,然后重新去库里抽取,再尝试抹去噪声(强化学习),循环无数次,最终实现的效果是,无论怎么随机抽,并且换一个新的噪声图片库(测试集),AI抹掉的噪声后的图像也能和原图很像(风格都类似,不一定是原图,这也就是为什么AI每次出图都不一样)。

这样的话就算通过了,这个模型就算Ready了(可以上线了)。

以上就是U-Net识别且去除无用噪声的过程。

第五个问题(稳定性控制),我应该如何控制出图效果?

经常玩AI绘画的小伙伴会发现,其实目前大模型最不可控的地方就是它的不稳定性。

那么如果想要稍微控制下AI绘画的效果,有什么好的方法吗?

这里给出四种方式,供大家参考。

first:调整Prompt(也就是改描述语,本质是调整图片的CLIP特征)

通过输入不同的描述词,以及更改局部Prompt,一步步引导AI模型输出不同的图像,其本质就是更改了匹配到的CLIP对应的待处理的图像特征向量集合,所以最终的出图会不断地调整、优化(这里还有一些玄学技巧,比如给某些Prompt里的部分起名字,也可以获得稳定性,本质是给部分Prompt结构打标记,便于AI算法识别…)。

Second:垫图(也就是俗称的img2img,本质是加噪声)

现在主流的AI绘画软件和模型都支持垫图功能,也就是你上传一张图,然后根据你这张图的轮廓或者大概样式,再生成一张图。

其本质就是将你上传的图叠加几层噪声,然后拿这个叠噪后的图片作为基础再让AI进行去噪操作,后续流程不变,所以最终风格、结构和原图相似的概率很大。

不过值得一提的是,现在很多Webui还支持选择和原图相似度多少的操作,对应到算法上其实就是在问你要叠加多少层噪声,当然是叠加的噪声越少,越和原图相似,反之可能越不像(不过这也是概率问题,也会存在叠加的多的时候生成的图也比叠加的少的时候更像)。

Third,插件(通过第三方插件/工具辅助控制,本质是训练模型)

拿最典型、最经典的ControlNet来说,可以通过任意条件或要求来控制生成的效果,基本上可以说是指哪打哪的效果了。

其本质你可以理解为是通过一张图来训练模型,达到自己想要的效果。

它把去噪模型整个复制了一遍,然后两个模型并行处理,一个做常态去噪,一个做条件去噪,最后再合并,达到稳定控制的效果。

img

Fourth,训练模型(自己拿大量数据单独训练,本质是Finetune)

这个不解释了吧,就是你自己有很多图,自己建个图像库,然后不断地训练大模型去识别这些图像,最终给模型一两个词,大模型就能识别且生成相似的图像,这样就实现了Finetune一个自己的小模型的效果。

注意:Finetune需要注意边界和用力程度,测试集的效果的评判指标要做好,否则训练时间很久的时候,就会对小样本数据过拟合,这样会失去大模型的泛化性,可能得不偿失(也有解决方案,比如Reply,让大模型重新学一遍,或者正则化模型,或者做并行模型,细节不展开)。

恭喜,当你阅读到这里的时候,基本上应该已经了解了AI绘画的前龙去脉了,由于是把很多算法文章抽象为了白话文,所以很多细节也都略去了,抛砖引玉,有遗漏或不当的地方,欢迎和大家交流、互相学习。

关于AI绘画技术储备

学好 AI绘画 不论是就业还是做副业赚钱都不错,但要学会 AI绘画 还是要有一个学习规划。最后大家分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点帮助!

对于0基础小白入门:

如果你是零基础小白,想快速入门AI绘画是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案

包括:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画!

零基础AI绘画学习资源介绍

👉stable diffusion新手0基础入门PDF👈

(全套教程文末领取哈)
在这里插入图片描述

👉AI绘画必备工具👈

在这里插入图片描述

👉AI绘画基础+速成+进阶使用教程👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉大厂AIGC实战案例👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

👉12000+AI关键词大合集👈

在这里插入图片描述
这份完整版的学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

  • 22
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值