认识了sd和国内版的平替liblib,有的小伙伴现在已经迫不及待的想开始做画了,执行力强的小伙伴已经用stay body fusion做出一些自己喜欢的图片。
毕竟stability fusion不像major journey有张数的限制,我们可以在服务器上无限的作画,无限的测试,它相较于miss jenny更专业一些,这对于我们新手来说还是很友好的。
今天我们来聊一聊这个stability就是绘画的底层原理,毕竟我觉得通过了解这个stability fusion的底层原理,我们才能更好的去控制它。我最近看了stability fusion相关的论文和一些视频,里面涉及到一些专业的理论比如扩散算法,神经网络,我试着用简单的语言方式把这个ai绘图的原理和过程解释出来。
我站在窗前,望着天津大学的校园,一阵秋风吹过,零星的杨树叶随风飘落在柏油路上。说实话,看到这个我就突然开悟了,这个就是AI绘图的原理啊。stable de fusion的核心原理呢,就是一个逆向降噪过程,举个栗子,咱们来看一下这个图,草坪上落了星星点点的花瓣,我们把草坪上的一片片花瓣看成图片上的噪点。原来干净的草坪被花瓣逐渐的填满,就是一个给图片加噪点的过程,这个过程在技术上来说呢,并没有什么难度。真正有难度的是把一张铺满噪点的图片逆向恢复成原图像,就好比说把一个铺满花瓣的草坪用某种方法逆向还原成原来干净草坪的样子,而这个过程呢,其实也就是ai绘图的过程。
不论是stable diff US还是made journey,他在绘图的时候都是先给出一个模糊的的图片,然后这个图片逐渐的清晰。本质上呢,这就是一个通过算法给图片降噪的过程。那么现在就有两个问题,第一就是为什么要给这个图片加噪点,第二呢,就是这个噪点应该如何去去除?我们先来说第一个问题啊,为什么要给这个图片加噪点,其实就是为了给图片降维,图片是由一个个有颜色的像素排列而成的,而这个像素的颜色,我们可以用这个rgb值来表示,如果一张512×512像素的图片,那么这张图片在计算机的眼中就可以被转化为512×512×3的一组数字,这个三呢就代表红绿蓝三个是组合的像素颜色。对于计算机来说呢,读取786432枚的数据是很容易的,但是如果把它放在算法里去跑,显然这个维度太高了,对神经网络学习,对算力有相当高的要求,显然不是一张家用的显卡能搞定的。解决这个问题的办法呢,也很简单,就是通过加噪点给图片进行降维。我们还是拿这个眼前的草坪来举例子,大家把上面的花瓣想象成噪点,但我们一看到这个图片就能知道它是一个草坪,虽然上面也有很多的花瓣,但它其实并没有完全的盖住草坪,所以我们大脑里看到这个景象的时候,已经接收到了足够的信息,告诉我们花瓣下面的这个东西就是草坪。同样的道理,我们通过不断的给图片加噪点,然后去训练ai ,ai就能逐渐的从一个满是噪点的图片中提取到这个图片的关键信息,继而知道这个图片内容是什么。但是注意啊,我这里用的是不断的给图片加造,也就是说这个过程是循序渐进的,而在这个循序渐进的过程中,ai只抓取到了重点的信息,对这张图片进行了标注,因此它所用到的数据量相对于原图来说是非常小的。小代表着两件事情。第一,他可以学习更多的图片,而众多的图片通过ai的学习和分类被打包成了我们所谓的模型。第二,更少的信息代表着需要更少的算力,这也让stability fusion有了在消费级显卡上运行的可能性。
其实今天写的stable di fusion的原理,也是一个降维的过程。因为关于stability fusion的具体原理还有神经网络是怎么运作的?不是一句话就能讲清楚的,需要大量的论文和专业知识,但是我把其中的一些关键点用比喻的方式讲出来,方便理解,这实际上呢,也是对知识的一种降维,它的好处就是大家大概能理解sd运行的原理,比起看论文省去了大量的时间和脑细胞。缺点就是大家只是大概了解了,并没有掌握它,因为这个知识被降维了。
第二个问题,这个噪点如何去去除,说起这个问题呢,又要涉及到一大堆名词什么ve。1 unit呀clip呀巴拉巴拉巴拉什么之类的,那咱们 还是回到我们的草坪啊。如果说现在是一片草坪,上面只有一个花瓣,我们想把这个草坪恢复原貌是非常容易的,只需把这个花瓣拿掉就可以了。如果说又落下一片花瓣,想恢复原貌也容易,先把第二片花瓣拿掉,然后就成了刚才这个只有一片花瓣的状态,再把第一片花瓣也拿掉,就恢复了。以此论推,假设落了N次花瓣,只需要先把它恢复到第N-1的状态,然后类似剥洋葱似的层层迭代,就恢复到了最开始的状态。而对应到我们sd上面就是我们的采样,通过上面说的清除花瓣的例子,我们能理解,步数越高,理论上来说,最后的效果也就越好。假如采样步骤只有一步,相当于清洁工只清理了一下,清理的效果,也一定会非常的差。,那么我们清理花瓣的过程,其实就是一个图片降噪的过程,在ai的运行中会有专门的算法去预测图片的噪点,然后每次迭代的去降噪,这也就是我们为什么看到made journey或者stability fusion作图的时候刚出来的这个图片都是模糊的,然后逐渐清晰的原因,因为这就是AI的不断的迭代和降噪。而对应到sd里,这个步骤就是采样器,在sd的的后台有不同的采样器,我们可以理解为对一个落满花瓣的操作的不同的细节方法我们的呢有的人是一片片片去剪,有的人是用这个吸尘器吸,有的人用笤帚扫的。大家如果还不理解的话可以想一想这个春天满地的落花夏天满天的飞沙秋天飘下的落叶还有冬天飘落的雪花其实都是一个加噪和降噪的过程如果说这个ai是一门艺术的话那这门艺术它肯定是源于生活的好我们现在呢。
大概知道了,这个ai是怎么通过降噪去画出一张图的,那它又是如何根据我们的指令去作图的?比如我告诉这个ai说给我画一条太空中的狗,那他是怎么画出来的?要做到这个呢,需要两个条件,首先呢,就是我们上面讲到的,必须有一个足够大的降维的,能够快速提供运算的图片的数据库,这个东西呢,也就是我们通常说的模型,第二点呢,就是要让ai去理解我们要求的意思,并且呢,可以在模型中找到我们符合要求的图片的库去进行创作,那第一点呢,我刚刚已经说到了,就是通过这个降维和扩散算法来解决,那我们来说一下这个第二点,说实话,我也没有想到一个太好的比喻啊,但是其实那也不太难理解。简单的说呢,就是我们说的每一个词,在这个ai看来它都是一个数字,这个就用到一个叫transformer的模型,chan的ppt里那个t啊,就是代表这个transform其实理解了图片降维之后transform也可以简单的理解为对文的一个降维,比如说太空中的狗,那么这个太空啊,可能就被ai转换为数字十这个狗呢,可能会被转换为数字20注意啊,我这里只是打个比方,这个数字肯定是不对的,但是我们现在假设这个数字是对的,然后ai再通学习呢,将这个20的狗和我们图片模型中狗的部分,比如说这个坐标是30相对应,那么当我们输入这个狗的时候ai就知道哦,我接收到了一个20,然后。我应该去图片素材库里找这个30的坐标,那么这个30的坐标就代表着有许多。狗的图片所以这就是为什么ai可以理解我们要求的意思并做出相应的图片就是因为他把这个文字的坐标和我们图片的坐标做了一个对应但是说归这么说啊其实实际操作的过程会比这个复杂很多大家肉眼可见的就是ai在收到我们指令的时候他会先出一个很模糊的图像然后再进行迭代图片才会逐渐的清楚这就好比是一个小孩在这个积雪上画一辆汽车他先画出来一个车轮然后呢又下起雪来了他就回家休学习了一下学会了这个怎么画车门然后雪停了之后他又出来他就把这个车门画好了然后又下起雪来了他又回家休息了一下然后学会了这个画车窗然后雪又停了他就又出来把这个车窗,画也画好,就这么去,反反复复的操作。这个下雪呢?就好比是在加造,然后这个画画呢,就好比是在降噪,最后呢,等这个雪停了之后,车也就画好了。这个比喻可能不是那么的贴切啊,但是这个也是我现有的智商下能想到的恰当的比喻了,也希望大家能理解我这个意思。那这节课呢?说实话,有点无聊,因为它太偏理论了,可能很多小伙伴听了会打瞌睡啊,但是我也实在想不出这个更好的解释方式了,起码感觉用这种比喻的方式来解释,要比大家去看论文的话来的容易一些,那我们通过这节课打好了基础之后,下节课呢,我们就可以开始实操了。