前言
在摩托车追焦群看到了机甲风的AI照片,觉得甚是炫酷。偶然看到了Stable Diffusion实现AI绘画的文章,所以就从一个使用者的角度,来开始学习Stable Diffusion。
我理解的AI绘画,会涉及卷积网络以及数学的知识。我深知自己几斤几两,所以不求甚解,学完知道Stable Diffusion是什么,有哪些组件以及组件功能。到后来如何安装使用Stable Diffusion实现AI绘画,这就是我的个人小目标。
关于Stable Diffusion
我是在家里的电脑上安装完Stable Diffusion Webui之后,从博客再到官方文档学习的Stable Diffusion的原理。虽然说webui封装了Stable Diffusion,底层模型对于用户透明,使用者不用再通过编码的方式去调用API使用模型。
但是webui上的组件、参数,我个人觉得还是研究一下比较有意思。当你以后和别人谈论起这个技术的时候,可以用自己的理解去互相交流。
在学习初期,晚上回家通过copy模板化的参数去实践。白天就学习Stable Diffusion的基本概念,以及实践中遇到的一些问题。
Stable Diffusion是什么
首先,Stable Diffusion属于一个被称作扩散模型的深度学习模型,而且是一个生成模型,用来生成与训练中看到的类似的新数据,这里的数据指的是图像。
Stable Diffusion是一个生成AI图片的潜在扩散模型(Latent diffusion model)。扩散模型有很多,例如OpenAI的DALL-E模型,Google的Imagen模型。
Stable Diffusion能干什么
- 文生图(txt2img):用的最多的就是文生图,根据输入的文本提示(text prompt),来生成相应的风格图片。
- 图生图(img2img):输入一张图片,然后根据输入的文本提示(text prompt),就可以得到另一张图片。可以实现图片细节的优化、图片风格转变等。如图:
- 照片编辑:可以修复老的或者残缺的照片。
- 制作视频:比如AI换脸。
在后面研究Stable Diffusion的过程中,只对1和2的文生图和图生图进行深入学习。
为什么要选择Stable Diffusion
上面提到过,扩散模型或者说AI绘画技术那么多,为什么要选择Stable Diffusion?
Stable Diffusion同样作为扩散模型,优势在于Latent,在学习Stable Diffusion原理的过程中,总是围绕着latent。部分扩散模型在图像空间(Image Space)进行运算,而上面提到的Imagen和DALL-E扩散模型都在像素空间(Pixel Space)中,来使模型更快。
如果模型在图像空间和像素空间进行的,一个512×512的图像,有三个颜色通道(红绿蓝),就是一个786432维度的空间,个人电脑上GPU是不可能提供足够的计算能力。
但是Stable Diffusion会将图片进行编码(encode),然后放到一个4×64×64的潜在空间(Letent Space)计算,这也就是为什么普通的个人电脑可以运行Stable Diffusion的原因。换句话说:不是我不选择其他的,是选择了也用不了。
如何使用Stable Diffusion
我在学习Stable Diffusion的过程中,看到官网提供了很多online的免费网站(例如:Playground AI、Dream Studio等)可以去使用AI绘画功能,但是很可惜都是在外网,所以访问不了。
而国内的一些基本上都是需要充值才能使用。所以对于大部分人来说,自己动手搭建一套Stable Diffusion是比较最佳方案。
Stable Diffusion部署后,如果想直接使用还是有些难度的。国内一名大佬秋葉aaaki提供了Stable Diffusion的集成客户端/安装包,同时基于Stable Diffusion部署后,如果想直接使用还是有些难度的。
国内一名大佬秋葉aaaki基于开源Stable Diffusion WebUi,简称AUTOMATIC1111,集成了Stable Diffusion的客户端/安装包,同时基于只要配置环境、下载之后,就可以一键使用启动器傻瓜式运行。所以对使用者来说,甚至不了解Stable Diffusion,都可以使用。
所以大部分人,学到这里就可以去下载Stable Diffusion WebUi,去玩AI绘画了。
整合包安装
2024年1月更新了v4.6版本,无需下载python、git和cuda就能解压即用,我之前用的是v3版本,配置cuda费了挺多的时间。
cuda是Nvidia开发的一种编程接口,安装之后stable diffusion才能使用GPU(显卡)进行计算。同时还安装了一个用于深度神经网络的GPU加速库cudnn。最后就是安装python的torch和tensorflow-cpu模块。
不过有了v4.6版本之后,上面的步骤都去掉了(我之前鼓捣了一晚上,泪崩!),直接下载解压,一键启动。
启动之后,就会自动在浏览器打开web页面,一共两页才能翻到底。
从页面里可以看到有模型、VAE、Clip、提示词等众多参数,如何配置才能生成我们想要图片?为什么这样配置?这都是我们要思考和学习的,所以抱着这种目的开始找资料学习stable diffusion。
上面在讲stable diffusion功能时,用了一个苹果的案例,看看在webui中如何复现。我从网上随便找了一个苹果图片,然后使用prompt(apple,green,4k)和controlNet完成了图生图。
prompt、vae、controlNet都是stable diffusion学习中比较常用的名词,我在接下来的学习过程中就要去了解学习。
结语
这算是一个反向学习的过程,从需求结果出发,然后去开始学习理论。不过我刚开始就是学的理论,去看博客、找资料,整体地了解了Stable Diffusion是一个什么样的架构,工作流程和原理是怎么样的后来就是结合webui接着学的。