论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
人工智能
›
人工智能
›
一次性搞懂AI绘画是怎样生成图像的!
一次性搞懂AI绘画是怎样生成图像的!
玛卡巴卡的卡巴卡玛
论坛元老
|
2025-4-15 02:04:16
|
显示全部楼层
|
阅读模式
楼主
主题
1748
|
帖子
1748
|
积分
5244
为什么我们输入一句话,人工智能便能产出一幅画作呢?AI绘画究竟是怎样生成图像的?这篇文章里,作者将AI绘画过程拆解成了5个焦点问题,或许搞清晰这5个焦点问题,你就能明白AI绘画的工作原理了,一起来看看吧。
写在前面
前段时间和Leader聊AIGC时,提到了关于AI绘画原理的话题,一直只知道人工智能是降噪画图的原理,但是许多细节不是很清晰,挺好奇为什么输入一句话,人工智能就能明白,并且画出来一幅“可圈可点”的画作。
趁着周末爬了些资料,也找学术界朋友给推荐了一些研究论文,大概明白了AI绘画是怎样工作的,分享给各人,共勉。
Ps:重要通过白话的方式阐述AI绘画原理,手动绘制了插图和流程图作为示意,算法原理略去了许多细节,实用于泛AIGC爱好者阅读和学习相识。
整个AI绘画过程,我拆解成了
五个焦点问题
,搞清晰这五个问题,AI绘画也就清晰了:
我只输入了一句话,
AI是怎么知道这句话描述
的是什么?
AI绘画流程里提到的
噪声图是哪里来的
?
就算有了噪声图,
噪声图是怎么被一点一点去掉“马赛克”的
?
那AI是**怎么去掉无用的“马赛克”**的,最终去掉后是符合结果的?
就算有了最终结果,为什么
重新作画的结果不一样
?
是不是看到这五个问题也有点懵,别着急,下面我们先看下AI绘画的绘制过程,就清晰这五个问题都是在问什么了。
先看总述:AI绘画的绘制过程
AI绘画发展很快,最范例的就是去年的《太空歌剧院》,获得科罗拉多州艺术一等奖,其时还是蛮震撼的。
由于再往前看几年,其实AI绘画的结果是如许的(12年吴恩达和团队用1.6万GPU和上万张数据,花了3天时间画出来的猫…):
我们再看下现在AI绘画的结果(平凡人输入一句话,几秒钟画出来的作品):
Source: https://liblib.ai/ 官网
可以看出画质高清、精致,写实感很强,乃至可以比得上照相师的作品了。
所以AI到底是怎么越来越优秀,根据一句话和几个参数就能画出这么好的作品呢?
先抛结论,AI绘画原理就是:
去除马赛克,就能看清了。
其实N多年前某些成人网就有了类似的技能,不过谁人是1vs1还原,
AI绘画本质是1vsN还原
,焦点就是把马赛克一点一点抹掉,最终“漏出”底图,完成所谓的“AI绘画”。
图像绘制:Designed byLiunn
我们先看下,AI绘画的使用场景,全部的软件或模型,基本上第一步都是让用户输入绘画关键词,也就是Prompt。
以Diffusion Model的示意如下,我们把最右边的当做正常图片,从右到左是不停含糊的,直至最后看不出来是什么,这个过程就是
算法的叠加噪声。
你可以明白为不停对图片进行马赛克处理,这就是最著名的**“扩散(Diffusion)”过程**。
Source:https://mp.weixin.qq.com/s/ZtsFscz7lbwq_An_1mo0gg
打个比喻,我们把这个过程想象成你在发朋友圈照片时,想屏蔽一些信息,所以使用“编辑”功能不停地对某些地区进行涂抹,直到这个地区看不清原本的内容了。
并且每一次的噪声迭代其实仅仅和上一次的状态相关联,所以这本质上也是一个
马尔科夫链模型
(简单明白为随机模型,细节可以移步google)。
此时,假如把这个过程倒过来,从左到右做处理,那么就是
一步步把一个图片渐渐去除噪声,变清晰
的过程。
也就是你的朋友圈照片马赛克越来越少,这个过程就是
Diffusion Model的原理。
OK,看到这里,我们明白了大概流程和原理,接下来,我们来依次看五个焦点问题。
第一个问题:怎样明白文本信息
你输入的笔墨,
AI是怎么知道你想要描述的是什么?
按照上面所说的原理,图片是被一点点抹去马赛克的,但是我写的文本信息是怎么匹配到某一个马赛克图片的呢?
我们都知道,目前AI绘画最主流的使用方式就是在模型或软件里,输入一句话(俗称Prompt),可以写主体、背景、人物、风格、参数等等,然后发送,就可以得到一张图。
好比,“一个穿背带裤打球的鸡”,结果如下:
图像绘制:Source: Designed byLiunn
AI绘画底层也是大模型,是一个
图像模型
。
最早的时候文本控制模型的做法是让模型生成一堆图片,然后再让分类器从中选出一个最符合的,这种方式没什么欠好,唯一的缺点就是当数据量大到肯定水平的时候,就会瓦解(想象一下,用excel处理上百亿行的数据,是不是负担很大)。
所以一方面需要非常多的图片数据来练习,另一方面又需要高效且快捷的处理,能承担这个任务的,就是
Openai在21年推出的OpenCLIP。
CLIP的工作原理其实可以简单明白为:爬虫、文本+图片的信息对。
第一,先看CLIP的爬虫和数据库。
CLIP的最大亮点之一就是采用了非常多的数据,构成了一个庞大的数据库。
每次CLIP爬取到一张图片后,都会给图片打上对应的标签以及描述(现实CLIP 是根据从网络上抓取的图像以及其 “alt” 标签进行练习的)
Source:https://jalammar.github.io/illustrated-stable-diffusion/,引自Jay Alammar博客
然后从
768个维度
重新编码这些信息(你可以明白为从768个不同的角度来描述这个图)。
然后根据这些信息构建出一个
超多维的数据库
,每一个维度都会和其他维度交叉起来。
同时相似的维度会相对靠拢在一起,按照这种方式CLIP不停爬取,最终构建了一个大概
4~5亿的数据库
。
图像绘制:Source: Designed byLiunn
第二,再看CLIP的文本图像匹配能力。
OK,有了数据库,库里的图像怎么和输入的笔墨匹配呢?这里又分两个步调:
步调01,怎么具备文本-图像匹配的能力。
先看下图,是算法的原理图,看不懂没关系,我在下面重新绘制了一幅降维版的示意图。
Source: https://github.com/openai/CLIP
我们来看下面这幅示意图,CLIP是怎样识别文本和图像的关联。
作图绘制参考Source: https://jalammar.github.io/illustrated-stable-diffusion/,Designed By Liunn
这里是一个简化的算法模型,其本质是不停地通过大量数据来练习CLIP去关联、熟悉图片和笔墨,并且根据和答案的比对,不停地矫正,最后达到
精确匹配关键词和特征向量。
步调02,怎样去做文本-图像匹配的关联。
好了,我们再来看CLIP是怎样做到文本图像的匹配的。
当我们开始作画时,会录入文本描述(即Prompt),CLIP模型就会根据Prompt去上面的数据库里从768个维度进行相似度的匹配,然后拿图像和文本编码后的特征去
计算出一个相似性矩阵
。
再根据最大化对角线元素同时最小化非对角线元素的约束,不停地
优化和调整编码器
,最终让文本和图片编码器的
语义强关联
起来。
图像绘制:Source: Designed byLiunn
最后,当找到最相似的维度描述后,把这些图像特征全部融合到一起,构建出本次要产出的图像的
总图像特征向量集。
至此,输入的一段话,就转换成了这次生成图像所需要的全部特征向量,也就是AI所谓的已经“明白了你想画什么样的画了”。
这个跨越已经算是AI界的“登月一小步”了
有了CLIP的这个创新举措,基本上彻底打通了笔墨和图片之间的鸿沟,搭建了一个
文本和图像之间关联的桥梁
,再也不需要以前图像处理界的打标签的方式来不停堆人了。
第二个问题:原始噪声图的泉源
上面讲到AI绘画是把“马赛克”一点点抹掉,那所谓的“马赛克”图,也就是噪声图是怎么来的呢?
噪声图的是扩散模型生成的,先记住这个概念**“扩散模型”。**
讲扩散模型之前,需要先讲另一个概念,AI生成图片的过程,其实是人工智能领域的一个分支,
生成模型(Generative Model)。
生成模型重要是生成图像的,通过扔进去大量真实的图片让AI不停去相识、熟悉和学习,然后根据练习结果,自己生成图片。
在生成模型里,有个
自动编码器
的东西,它包罗两个部分:
编码器和解码器。
编码器可以把比较大的数据量压缩为较小的数据量,压缩的前提是这个较小的数据量是能够代表最开始的大数据量的;
解码器可以根据这个较小的数据量在得当的条件下,还原为最开始的的大数据量。
所以这个时候就故意思了:
能否直接给它一个较小的数据量,看看它自己能随机扩大成一个什么样的大数据量?
图像绘制:Source: Designed byLiunn
答案是可以的,但,测试结果很一般。
所以自动编码器不可了,怎么办呢,科学家发明白另一个东西,叫
VAE(变分编码器,Variational Auto-encoder)。
VAE是做什么的,重要是把较小的数据量进行规律化,让其符合高斯分布的概率。
如许就可以依据这个,来调整一个图片信息按照概率的变革进行对应的改变,但是有个问题,这个太依靠概率了,大部分概率都是假设的理想情况,那怎么办呢?
所以这个时候科学家就想,能不能做两个AI,
一个负责生成,一个负责检验它生成的行不可,也就是AI相互评估真假,这就是GAN,对抗神经网络诞生了。
GAN一方面生成图片,一方面自己检测行不可,好比偶尔候有些图片细节没有按照要求生成,检测的时候GAN发现了,它后面就会不停增强这块,最终让自己觉得结果可以,如许不停地迭代成千上亿次,最终生成的结果,检测也OK的时候,就是生成了一个AI的图片了。
但问题又来了
GAN一方面自己做活动员,一方面自己做裁判,太忙了,不但消耗大量的计算资源,同时也容易出错,稳定性也欠好,那怎么办呢?能不能让AI别搞这么复杂,用一套流程完成呢?
答案是肯定的,这就是
跨越了生成模型时代后,扩散模型的时代到来了
。
话题回到扩散模型这里。
扩散模型最早是由斯坦福和伯克利学术专家,在2015年相关论文里提出的,
依据正态分布给图像逐步增加噪声
,到了2020年加噪声的过程被改为根据
余弦相似度
的规律来处理。(文末附上了15年和20年的原始学术论文链接,感兴趣可以自行阅读)
根据余弦调理渐渐正向扩散原始图,就像把一个完备的拼图一步一步拆开,直至完全打乱。
图像绘制:Source
esigned byLiunn
到这里,第二个问题也解决了。当你看到这里的时候,AI绘画的输入信息基本Ready了。
第三个问题:模型怎样去除噪声
AI把笔墨转成了特征向量了,也拿到噪声图片了,但噪声图是怎么一点点被去除“马赛克”的呢?
它是怎么消除掉马赛克的呢?这里面分为两个步调:
步调一,降维数据运算,提升运算效率;
步调二,计划降噪网络,识别无用噪声,精准降噪。
**先看步调一:**还记得上文提到的自动编码器么?
图像特征向量和噪声图,会一起扔到编码器里进行降噪,也就是去除马赛克的过程。
但是这里有个问题,就是一张512_512的RGB图片就需要运算786432次,即512_512*3=786432条数据,这个运算量太大了
所以在这些数据在进入到编码器之前,都会被压缩到
潜空间
里去,
降维到64*64*4=16384条数据
(不知道你有没有用SD的时候注意到,我们在Stable Diffusion里调整图像大小的时候,最小只能拖到64px,这就是其中的原因)。
Source:https://jalammar.github.io/illustrated-stable-diffusion,Designed byLiunn
如许的话,整个文生图的任务就能够降维到
消耗级的GPU
上运算(虽然现在算力依然是个问题,A100都没有吧?有的话 私我!)
降低了落地门槛,运算和配置效率都得到了极大的提升。
**再看步调二:**计划一个降噪网络。
明白了数据降维的问题,我们继续看,AI怎么逐步去除噪声生成新图呢,图像编码器又是怎样给图像降噪,从而生成一张全新的图片的呢?
图像绘制:Designed byLiunn
关于降噪方式,ddpm在2020年年底的相关论文猜测了三件事:
噪声均值(mean of noise):猜测
每个时间步长的噪声均值。
原始图像(original image):
直接猜测原始图像
,一步到位。
图像噪声(noise of image):直接
猜测图像中的噪声
,以获得噪声更少的图像。
现在的模型,大部分都是采用了第三种方式。
这个去除噪声的网络是怎么计划的呢?
这个重要归功于编码器中的**U-Net(卷积神经网络-图像分割)**了。
Source:https://jalammar.github.io/illustrated-stable-diffusion/
U-Net是一个类似于编码-解码器的漏斗外形的网络(上图左),不同点在于U-Net在
相同层级的编码、解码层增加了直连通道
(你可以明白为两栋大楼之间,同一楼层之间加了连桥,可以走动)
如许利益在于处理图片时,相同位置的信息在编码、解码过程中可以
方便快捷的进行信息传输。
那它是怎么工作的呢?
刚才我们说了,DDPM提到,目前基本上全部的模型都采用
直接猜测图像中的噪声
,以便于获得一张噪声更少的图片。
U-Net也是云云。
U-Net根据拿到第一节里提到的图像的全部特征向量集合后,从向量集合里通过采样的方式抽取一部分特征向量,再根据这些向量
识别出其中的无用的噪声
然后用最开始的全噪声图和当前这次猜测的噪声
做减法
(现实处理过程比这会复杂一些),然后得到一个比最开始噪声少一些的图,然后再拿这个图,重复上述流程,再次通过采样的方式抽取一部分特征向量,再去做噪声猜测,然后再拿N-2次的图像和N-1次的图像相减,拿到N-3次的图像
继续重复上述流程,直至最终图像清晰,
没有噪声或没有识别出无用的噪声为止,最终生成一张符合要求的图像。
图像绘制思路:
Source:https://jalammar.github.io/illustrated-stable-diffusion/,Designed byLiunn
这里面,有的同学注意到了,还涉及到一个
采样方法的环节。
每一次的采样,根据不同的采样方法,可以用同样的方式,也可以用不同的采样方式。不同的采样方法会抽取出不同维度、不同特质、不同规模的特征向量,最终确实会对输出结果有影响(这也是影响AI绘画可控性的因素之一)。
最后,还记得刚刚提到的数据降维吗?
降维是为了降低运算量,加速速率,降维后其实是进入到一个
潜空间
里,那么图像全部降噪完成后,会通过图像解压器也就是VAE模型,重新还原返来,被重新释放到
像素空间
里(可以明白为IPhone里云端存储的照片,你最开始看的是缩略图,当你点开大图想看的时候,会慢慢从云端下载,酿成高清的)。
以上,就是
噪声模型网络去噪的浅易过程。
第四个问题:应该去除哪些无用的噪声
AI是怎么能够按照我描述的来去除特定的马赛克,而不是我写了“狗狗”,画出来一只“猫咪”呢?
U-Net模型怎样识别应该去除哪些噪声呢?其实这就是一个模型练习的过程。
讲解模型练习之前,需要先普及几个概念:
**练习集:**用来不停让AI学习和纠错的,让AI可以不停成长的一个数据集合,你可以明白为打篮球时教练带你在练习场练习。
**强化学习:**当AI犯错的时候,告诉它错了;当AI正确的时候,告诉他对了;你可以明白为篮球教练在不停纠正你的投篮姿势,让你练习的更快更强。
**测试集:**用练习集练习一段时间后,看看AI能力怎样的一个数据集合,你可以明白为打篮球时练习半年,构造了一场友谊赛。
先看U-Net的练习集是怎么构建的,重要分为四个步调:
从图文数据集中
随机选择照片;
生产
不同强度的噪声
,顺次排列;
随机
选择
某个强度的噪声;
将该噪声
加到图片里。
图像绘制思路: Source:https://jalammar.github.io/illustrated-stable-diffusion/,Designed byLiunn
再来看U-net是怎么处理的。
U-Net的练习集是许多张已经叠加了随机噪声的数据库,可以明白为许多添加了马赛克的图片(篮球练习场地),然后让AI不停地从这个数据库里抽取图片出来,自己实验抹去噪声,全部抹掉后再来和这张图的原图做比对,看看差别多大。
计算出这个差距
,然后重新去库里抽取,再实验抹去噪声(强化学习),循环无数次,最终实现的结果是,无论怎么随机抽,并且换一个新的噪声图片库(测试集),AI抹掉的噪声后的图像也能和原图很像(风格都类似,不肯定是原图,这也就是为什么AI每次出图都不一样)。
如许的话就算通过了,这个模型就算Ready了(可以上线了)。
以上就是U-Net识别且去除无用噪声的过程。
第五个问题(稳定性控制),我应该怎样控制出图结果?
经常玩AI绘画的小伙伴会发现,其实目前大模型最不可控的地方就是它的不稳定性。
那么假如想要轻微控制下AI绘画的结果,有什么好的方法吗?
这里给出
四种方式
,供各人参考。
first:调整Prompt(也就是改描述语,本质是调整图片的CLIP特征)
通过输入不同的描述词,以及
更改局部Prompt
,一步步引导AI模型输出不同的图像,其本质就是
更改了
匹配到的CLIP对应的待处理的
图像特征向量集合
,所以最终的出图会不停地调整、优化(这里还有一些玄学本事,好比给某些Prompt里的部分起名字,也可以获得稳定性,本质是给部分Prompt布局打标记,便于AI算法识别…)。
Second:垫图(也就是俗称的img2img,本质是加噪声)
现在主流的AI绘画软件和模型都支持垫图功能,也就是你上传一张图,然后根据你这张图的轮廓或者大概样式,再生成一张图。
其本质就是将你
上传的图叠加几层噪声
,然后拿这个叠噪后的图片作为基础再让AI进行去噪操作,后续流程不变,所以最终风格、布局和原图相似的概率很大。
不过值得一提的是,现在许多Webui还支持选择和原图相似度多少的操作,对应到算法上其实就是在问你要叠加多少层噪声,固然是
叠加的噪声越少,越和原图相似
,反之大概越不像(不过这也是概率问题,也会存在叠加的多的时候生成的图也比叠加的少的时候更像)。
Third,插件(通过第三方插件/工具辅助控制,本质是练习模型)
拿最范例、最经典的ControlNet来说,可以通过任意条件或要求来控制生成的结果,基本上可以说是指哪打哪的结果了。
其本质你可以明白为是
通过一张图来练习模型
,达到自己想要的结果。
它把去噪模型整个复制了一遍,然后两个模型并行处理,一个做常态去噪,一个做条件去噪,最后再合并,达到稳定控制的结果。
Fourth,练习模型(自己拿大量数据单独练习,本质是Finetune)
这个不解释了吧,就是你自己有许多图,自己建个图像库,然后不停地练习大模型去识别这些图像,最终给模型一两个词,大模型就能识别且生成相似的图像,如许就实现了
Finetune一个自己的小模型
的结果。
注意:Finetune需要注意边界和用力水平,测试集的结果的评判指标要做好,否则练习时间好久的时候,就会对小样本数据过拟合,如许会失去大模型的泛化性,大概得不偿失(也有解决方案,好比Reply,让大模型重新学一遍,或者正则化模型,或者做并行模型,细节不展开)。
恭喜,当你阅读到这里的时候,基本上应该已经相识了AI绘画的前龙去脉了,由于是把许多算法文章抽象为了白话文,所以许多细节也都略去了,抛砖引玉,有遗漏或不当的地方,欢迎和各人交流、相互学习。
关于AI绘画技能储备
学好 AI绘画 不论是就业还是做副业赢利都不错,但要学会 AI绘画 还是要有一个学习规划。最后各人分享一份全套的 AI绘画 学习资料,给那些想学习 AI绘画 的小伙伴们一点资助!
对于0基础小白入门:
假如你是零基础小白,想快速入门AI绘画是可以考虑的。
一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以找到适合自己的学习方案
包罗:stable diffusion安装包、stable diffusion0基础入门全套PDF,视频学习教程。带你从零基础系统性的学好AI绘画!
零基础AI绘画学习资源介绍
继续阅读请点击广告
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
玛卡巴卡的卡巴卡玛
论坛元老
这个人很懒什么都没写!
楼主热帖
SQL SERVER事务提交回滚
Kubernetes(k8s)Deployment、Statefu ...
基于STM32的手势识别检测
【C++】ZZ1864- 解题精讲
一文读懂,硬核 Apache DolphinSchedul ...
ConcurrentHashMap源码,看我这篇就够 ...
如何用技术改变生活
数据类型的内置方法
同事写了一个责任链模式,bug 无数... ...
【Openxml】颜色变化属性计算 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
Nosql
向量数据库
中间件
linux
快速回复
返回顶部
返回列表