文章主题:, 文章, 关键词, AI生成
前言
文章很长,合理使用目录功能
自从4月的时候我就在玩AI生成,一晃才半年多,技术的飞跃已经是魔法级的了。
在当前的互联网时代,我们可以找到大量的教程,但是这些教程在某些方面可能存在不足。许多用户在来信中提到的问题,如 outpainting 和 dreambooth,表明这些问题在网上的教程中并没有得到很好的解决。因此,为了提供一个最全面、最新的指南,我们决定在这里详细讨论这些问题。值得注意的是,本文中所提到的小白是指那些已经具备一定初级动手能力的同学,对于完全没有任何经验的新手,我们建议他们使用云服务。
Stable diffusion是一种扩散模型,其特点是持续移除噪声以达到理想结果。在AI绘画的初期阶段,扩散过程是在像素空间中进行的,这不仅导致效果不佳,而且单张图像的处理时间长达10-15分钟。然而,英国初创公司StabilityAI对这一模型进行了改进,将核心计算从像素空间转移到潜在空间(latent space),从而显著提升了稳定性和画质,并实现了速度的飞跃。因此,这种新型的扩散模型被命名为Stable diffusion,从而推动了AI绘画技术的迅猛发展。值得注意的是,由于Stable diffusion是一个开放源代码的模型,后续许多AI绘图创业公司都基于此模型进行开发,因此他们的成果都具有很高的相似性。
若想运用这项尖端科技,最为便捷的方式便是借助云服务平台。对于我国的学生而言,选择全中文的提词工具,例如Tiamat或盗梦师是个不错的选择。然而,当前这两个工具的质量仍有待提升,尤其是盗梦师,其表现几乎与未经过精细调整的原始开源版相当,与国外Midjourney的产品相比,存在明显的差距。而Tiamat虽然在艺术风格上有所优化,但其平均生成速度在50秒至3分钟之间,相对较慢。
国产AIGC平台:盗梦师和Tiamat尽管云服务的便利性不可否认,但是,Stable Diffusion之所以能够吸引众多研究者投入其中,原因在于其应用的深层次和复杂性,远非简单的点击操作所能涵盖。为了充分挖掘这项技术的潜力,本地安装成为最佳选择。
主要是四大原因:
首先,本地生成不存在隐私问题,你可以使用任意源图片,也不必担忧你辛苦创作的提词被泄露。
第二,本地生成不存在审查问题,甚至于有些同学特别喜欢生成NSFW的图片,那么绝对只能本地生成;
第三,优势在于速度快且完全免费。只要拥有一台性能强劲的PC设备,本地生成的速度堪称是最优选择,无需排队、避开高峰期。一般来说,一台中 RTX3090 的电脑单图能够在3-5秒内完成渲染,而配置更强的4090电脑则可实现约2秒左右的快速处理。如此高效的速度,让你能够迅速构建起一个庞大的图库,无需从网络上逐一下载图片。
在第四点上,我们不得不承认,本地生成的选项以及其可操作性远超网络上的那些简单题词框和按钮。在风格控制方面,它的表现也显然更为出色,且具备众多实用扩展功能,如引人入胜的inpainting和outpainting等。此外,你还可以自由切换底层模型,甚至能够对模型(Dreambooth)进行微调。然而,这一切都需要付出更高的学习成本。如果你对这个新兴领域充满敬意,那么使用本地版的stable diffusion无疑是最明智的选择。
用户界面上stable diffusion有很多种流行的项目,这里推荐使用国外的AUTOMATIC111 的Stable-diffusion-webui,虽然英文会是一个难点,但是强烈推荐使用这个项目。
国外开源stable diffusion项目很多安装Stable Diffusion Webui
第一步是安装,安装这个问题其实很简单,但是对于新手却很难。对硬件最低要求是需要一个8GB显存以上的Nvidia 1000系显卡,最好是RTX系列显卡,会快不少。AMD和Intel显卡不可以。达不到的同学可以白嫖Google Colab的计算资源(显存16GB+)。
这里面还有一个最主要问题就是科学上网,如果不会的话大概率是进行不下去的(请折回使用云服务),因为要下载的东西比较多,但我们又都知道因为某种特殊原因我国的python pkg,github和huggingface已经处于半下岗状态。
小白步骤如下:
Windows
Linux
Mac OS, 不推荐,会出现Cuda错误
对于老手而言,推荐使用Anaconda,自己建立需要的venv,选择安装torch+cuda11.6,跳过项目里的自动torch安装。都是老鸟了,详细过程就不说了。
安装好了之后需要下载stable-diffusion 1.5的模型,https://huggingface.co/runwayml/stable-diffusion-v1-5/tree/main
需要注册一个账号,点击同意开源协议,然后下载如图的文件。
下载sd-1.5版的预训练权重多提一句如果不是从github下载的项目,我推荐一定要检查是否包含git文件夹,因为这项目进化得非常快,几天时间就会加入新功能,新优化等等
启动后会出现一个命令窗口,不能关闭,等出现如图字样时才表示启动完成(启动完成也不能关闭)。
启动完成的提示之后就可以在浏览器中输入http://localhost:7860打开stable diffusion的界面,这个框架是用Gradio写的,所以如果喜欢深色,在地址后面添加 ?__theme=dark 即可
基本使用就不多讲了,这里重点说outpainting和dreambooth
Inpainting
Inpainting相信大家都很熟悉了,就是相当于Photoshop的自动修复(Spot Healing)功能,只不过精度要高得多。列在这里是让大家有一个明显对比。
Outpainting
什么是outpainting
这个创意最早是来自OpenAI Dall-E 的demo,Outpainting 是一种扩展原图的方式,demo如下:
相对于DALL-E的缓慢的速度和云端闭源收费,Stable-diffusion-webui依靠第三方扩展可以无缝支持Outpainting。常用的扩展有infinity 和paintHua。这里介绍这个叫做PaintHua的国产扩展,目前是最好用的outpainting工具,完全免安装,支持历史回退,masking和多选择,只需要在原stable-diffusion-webui上加上几个参数。
配置PaintHua
注意网上有些教程让改webui.bat里面的 app.user_middleware 这行,这个方法已经淘汰了,因为很不安全,基本是给黑客开大门。
使用PaintHua
启动painthua后双击任意空白处可以出现一个初始填充,如果没有,或者显示一大堆英文,那么你上面步骤操作有误。
如图注意每次填充后需要点击Accept才算是写入到画板里,如果想要换一个样子点击Accept右边的More按钮,然后之前结果也不会消失,可以按右边的Prev, Next按钮进行切换,十分的好用。点击Cancel可以取消当前填充块。
需要点击Accept通过使用Mask功能PaintHua也能支持Inpainting,也就是替换原有图片上的区域(如下图),传统PS去除小规模杂物的工作已经可以被彻底替代了,现在小白也能做,甚至可能更好。
跟生成全图一样,要改变当前图片内容的话需要改变提词,单击左上角的Prompt按钮。记得你的Prompt要跟图片内容差不多才行,否则填充就会很不统一。一般来说要进行多次扩图,需要针对不同区域微调提词。
改提词还有一个要注意的就是画布大小,PaintHua的默认画布大小是打开时的浏览器大小并且固定住,打开以后再调整浏览器窗口大小无效。如果想要最大的画布区域Config里面有一个Config/Canvas_w canvas_h的选项,但是实测不能超过4K x 4K,而且每次更改都必须要刷新页面,所以最好第一次就设置好4096×4096,之后打开会自动保存这个设置。如果是中途更改,那么刷新页面前记得保存(Ctrl+S)。
最后要擦除一块区域的话,点击右键拖拽就行
删除区域对上面说的这些功能结合使用,很容易得到不错的效果,比如下图在不借助任何其它工具情况下单用stable-diffusion只花了5分钟,整体草稿就形成了:
5分钟 Outpainting + Inpainting demo目前Adobe也在积极集成AI功能进photoshop,可以预见要不了多久,PS求人的需求将很大一部分被AI替代。
对于Painthua就介绍到这里,这个项目里面还有很多细节功能,比如任意填充大小,快捷键,克隆,移动工具等等,可以自己探索。
DreamBooth
这个功能显存要求12GB,可能很多同学硬件是满足不了的,就只能采用云计算的办法,
谷歌Colab云计算入口: Stable-Diffusion
使用方法跟下面一致,但是根据版本的不同,多半需要手动安装bitsandbytes库:
pip install bitsandbytes
或者采用纯命令行方式训练DreamBooth:DreamBooth.ipynb
下面只说本地的。
什么是DreamBooth
原始stable diffusion是无法进行稳定的对象输出的,每一次都相当于摇骰子或者叫抽卡,多次生成之间的主体没有关联性。而Dreambooth改善了这个问题,这货是来自google的一项图片个性化研究,在原图片生成网络上加入了Prior Preservation Loss,经过几张图片的简单训练就可以重新采样潜空间,输出指定的对象。这个个性化定制输出的效果,也让DreamBooth成为目前AI图像生成里面最火的功能之一。
DreamBooth原本Dreambooth是基于Google的Imagen和T5网络的,但是github上有人用stable diffusion和CLIPText重新实现了一遍,这也是我们现在使用到的stable diffusion 版DreamBooth的内核。
如前文所说,dreambooth是需要预先训练的,不是直接使用,整个训练过程如今有了UI,终于不需要再敲命令了!
安装DreamBooth扩展
启动stable-diffusion-webui后找到最边上的Extension选项卡,然后选择Available子选项卡,然后点击Load from。这时会看到一串可用扩展的列表,点击DreamBooth那一行的Install按钮然后慢慢等待安装完成即可(安装log在命令窗口里)。
DreamBooth扩展插件不过这个插件写得不太好,虽然能用但是有很多问题,所以对于老鸟而言,建议去掉requirements.txt对于torch, torchvision, nump, gradio, transformers等重要库的安装,使用stable-diffusion-webui的库
进一步针对老鸟,有些同学依然会遇到torch的覆盖性安装,这时最好注释掉install.py里面的两行代码,自己装torch最方便:
【BUG】如果遇到类似”Bad File” “Error verifying pickled file from …” 之类的错误,打开webui-user.bat,在set COMMANDLINE_ARGS=后面添加上 “ –disable-safe-unpickle” (包含空格),然后重启stable-diffusionDreambooth的训练需要至少12GB显存,所以至少需要Nvidia RTX3060 12GB以上的显卡。
另外这个dreambooth只支持CUDA 11.6,为什么呢?是因为这里面用到了我之前在调试transformers时编译的Windows 版bitsandbytes库,没有这个库,显存需求得变成24GB,变成必须3090以上显卡才能运行。我在编译这个库的时候只是作为测试,所以只编译了CUDA 11.6版。但是现在一不小心变成了全网唯一的windows版int8 Adam库,必然对具体操作环境造成影响。这个是我编译的库的源链接,有需要测试的同学从这里下载:
我的Windows dll链接:https://github.com/DeXtmL/bitsandbytes-win-prebuilt使用的话需要改一点代码,详见 README
Dll的安全问题想必大家多少听说过,不要相信任何其它来源的。暂时不打算编译 11.8 版本的以上安装好后,stable-diffusion-webui界面上会多出一个 DreamBooth选项卡,没有看到这个选项卡则说明安装失败,要去查一下log。
使用DreamBooth
要使用DreamBooth需要首先创建一个空的model,每次训练对应一个model,每个model可以包含一个或多个对象,按照下图填写:
其中名字可以随便取,但一定不能和现有英文词汇重合,最好随便创造一个新词。Checkpoint是指在哪一个stable-diffusion权重上训练,推荐sd-1.5版,最后Scheduler一定要选ddim,其它scheduler的效果比较差。
如果不用ddim而选择LMSDiscrete很可能变成这样如果是第一次创建,点击Create后需要多等待一段时间(下载一些模型文件),平均2-3分钟左右,如果时间过长则需要检查一下是否出错。
创建好之后上方的Models下拉框里如果出现刚刚创建的模型表示创建成功,如图
然后我们切换到Train Model选项卡,可以看到这里面的选项非常多,但实际需要改动的很少,如图(长图):
其中Instance prompt是实例词,一般采用photo of xxx的格式,我的物体取名叫xmetalgolfer,它是一个小雕塑statue, 因此这里写 photo of xmetalgolfer statue (可以不写介词a)
Class prompt是类别描述词,直接写photo of statue
Save a checkpoint every N steps, 这个最好写成0,相当于禁用,一般用于调试
Generate preview image every N steps, 这个最好写成5000,相当于禁用,因为输出结果经常是错误的
下面Advanced栏里面,只要不是3090以上显卡的同学都要勾上8bit adam,让系统调用之前说到的bitsandbytes库,降低显存消耗
Mixed Precision精度要选择为fp16,注意不要错选bf16,游戏显卡不支持这个格式
其余值保留默认。
都设置妥当后,点击那个巨大橘黄色按钮Train开始训练
【BUG】注意这个插件的代码不支持大写的扩展名,例如.JPEG无法被正确识别,需要把所有图片扩展名改成小写!追求完美的同学可以改代码( train_dreambooth.py/is_image ),或者等PR在训练时,如果没有启用8bit Adam,那么内存消耗为16GB,加上stable-diffusion本省消耗的3-5GB,一共20GB左右显存,巅峰时消耗23.6GB,训练时间为8分钟
启用8bit Adam之后,训练时间15-20分钟,消耗依然在12GB左右,因此开头提到要一个高显存显卡。
训练完成后,选择你刚刚训练的模型权重,例如我训练了1000步,那么名字就是xmetalgolfer_1000.ckpt,如果保存了中间步骤,有可能还会出现xmetalgolfer_500.ckpt之类的名字。如果名字没有出现那么点击右边的蓝色按钮刷新。
DreamBooth的模型非常容易训练过头(overfit),所以切忌贪杯,不是step越高越好,一般1200次是可以的。
以下是我的结果
训练集:
输出结果
仅仅8分钟的训练,这个结果非常优秀了,如果进一步细调,以及加入classification dataset的话,效果还要好不少。下回有时间的话更新classification和 Prior Preservation的用法。
写了这么多,最后最后,有很多人想要体验二次元NovelAI的模型,这个就不公开给链接了,需要的同学私信我,精力有限,非粉不回。
本次更新就只写了outpainting和dreambooth,未来还有其它重要扩展的话继续在这里添加。
点击关注不迷路
END
AI时代,拥有个人微信机器人AI助手!AI时代不落人后!
免费ChatGPT问答,办公、写作、生活好得力助手!
搜索微信号aigc666aigc999或上边扫码,即可拥有个人AI助手!