EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!
作者 :wuziheng
背景介绍
最近,基于生成式 AI 技术批量产出真/像/美的个人写真应用非常受欢迎。同时,随着 Stable Diffusion 领域开源社区的快速发展,社区也涌现了类似 FaceChain 的开源项目,帮助开发者开发个性化的真人写真生成应用。越来越多开发者对这个方向投来关注,希望得到更多灵活的开发方式。
EasyPhoto 项目介绍
作为 FaceChain-Inpaint 功能的开发团队,我们快速上线了一款基于 SD WebUI 插件生态的个性化写真生成开源插件 EasyPhoto。这款插件允许用户通过上传几张同一个人的照片,快速训练 Lora 模型,然后结合用户自定义的模板图片,生成 真/像/美的写真图片。
图 1
项目地址: https://github.com/aigc-apps/sd-webui-EasyPhoto
欢迎大家多多提 ISSUE,一同优化,让每个 AIGCer 都拥有自己的 AI 写真相机!
原理介绍
AI 真人写真是一个基于 StableDiffusion 和 AI 人脸相关技术,实现的定制化人像 Lora 模型训练和指定图像生成链路的集合,这里我们简单介绍我们在 EasyPhoto 中实现的相关技术,下图是 EasyPhoto 的生成链路介绍,
图 2
EasyPhoto 整体分为训练和推理两个阶段, 下文图 3 详细展示了训练阶段,上图 2 展示了生成阶段。
EasyPhoto 生成
EasyPhoto 生成采用基于开源模型 StableDiffusion + 人物定制 Lora 的方式 + ControlNet 的方式完成艺术照生成
使用人脸检测模型对输入的指定模板进行人脸检测(crop & warp)并结合数字分身进行模板替换。
采用 FaceID 模型挑选用户输入的最佳 ID Photo 和模板照片进行人脸融合(face fusion)。
使用融合后的图片作为基底图片,使用替换后的人脸作为 control 条件,加上数字分身对应的 Lora,进行图到图局部重绘生成。
采用基于 StableDiffusion + 超分的方式进一步在保持 ID 的前提下生成高清结果图。
EasyPhoto 训练!
图 3
EasyPhoto 训练采用了大量的人脸预处理技术,用于把用户上传的图片进行筛选和预处理,并引入相关验证和模型融合技术,参考图 3.
采用 FaceID 和图像质量分数对所有图片进行聚类和评分,筛选非同 ID 照片。
采用人脸检测和主体分割,抠出 1 筛选后的人脸图片进行人脸检测抠图,并分割去除背景。
采用美肤模型优化部分低质量人脸,推升训练数据的图片质量。
采用单一标注的方案,对处理后的训练图片进行打标,并使用相关的 Lora 训练。
训练过程中采用基于 FaceID 的验证步骤,间隔一定的 step 保存模型,并最后根据相似度融合模型。
我们将从在后续的章节简单介绍涉及到的相关技术的原理,更多细节也欢迎大家参考 Repo 的代码。(如果你已经对这一技术路线非常熟悉,欢迎直接跳到第三章 EasyPhoto & SDWebUI)
文图生成(SD/Control/Lora)
StableDiffusion
StableDiffusion 作为 Stability-AI 开源图像生成模型,通常分为 SD1.5/SD2.1/SDXL 等版本, 是通过对海量的图像文本(LAION-5B)对进行训练结合文本引导的扩散模型(DiffusionModel),使用训练后的模型,通过对输入的文字进行特征提取,引导扩散模型在多次的迭代中生成高质量且符合输入语义的图像。感兴趣的同学可以参考 《stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,..》, 下面的图像就是 stablediffusion 官网 Repo 贴出来的他们的效果。
ControlNet/Lora
针对使用文本控制的 StableDiffusion 模型,如何对生成的图像内容进行更好的控制,一直是学术界和工业界试图解决的问题,本小节介绍的 ControlNet 和 Lora 就是常用的两种技术。也是图 2 中使用的部分技术,用于控制边缘连贯性和指定 ID 生成。
ControlNet : 由《Adding Conditional Control to Text-to-Image Diffusion Models》提出的通过添加部分训练过的参数,对 StableDiffsion 模型进行扩展,用于处理一些额外的输入信号,例如骨架图/边缘图/深度图/人体姿态图等等输入,从而完成利用这些额外输入的信号,引导扩散模型生成与信号相关的图像内容。例如我们在官方 Repo 可以看到的,使用 Canny 边缘作为信号,控制输出的小狗。
图 4
我们在图 2 中看到 StableDiffusion 有 2 个输入,其中一个部分就是用于控制边缘连贯性和脸型提示的 ControlNet,我们使用了部分的 Canny 边缘和 OpenPose 人体姿态。
Lora : 由《LoRA: Low-Rank Adaptation of Large Language Models》 提出的一种基于低秩矩阵的对大参数模型进行少量参数微调训练的方法,广泛引用在各种大模型的下游使用中。AI 真人写真需要保证最后生成的图像和我们想要生成的人是相像的,这就需要我们使用 Lora 技术,对输入的少量图片,进行一个简单的训练,从而使得我们可以得到一个小的指定人脸(ID)的模型。当然这一技术也可以广泛用于,风格,物品等其他指定形象的 Lora 模型训练,大家可以在 civitai.com 等相关网页上寻找自己想要的 Lora 模型。
人脸相关 AI 模型
针对 AI 写真这一特定领域,如何使用尽量少的图片,快速的训练出又真实又相像的人脸 Lora 模型,是我们能够产出高质量 AI 写真的关键,网络上也有大量的文章和视频资料为大家介绍如何训练。这里我们介绍一些在这个过程中,我们使用的开源 AI 模型,用于提升最后人脸 Lora 训练的效果。
在这个过程中我们大量的使用了 ModelScope 和其他 Github 的开源模型,用于完成如下的人脸功能
EasyPhoto & SDWebUI
SDWebUI [Repo]是社区最常用的 StableDiffusion 开发工具,从年初开源至今,已在 Github 拥有 100k 的 star,我们提到的文图生成/ControlNet/Lora 等功能,都被社区开发者贡献到这一工具中,用于大家快速部署一个可以调试的文图生成服务,所以我们也在 SDWebUI 下实现了 EasyPhoto 插件,将上述原理提到的 人脸预处理/训练/艺术照生成全部集成到了这一插件中。
项目地址:https://github.com/aigc-apps/sd-webui-EasyPhoto
用户可以参考 SDWebUI 的插件使用方式进行安装使用。
EasyPhoto 插件简介
EasyPhoto 是一款 Webui UI 插件,用于生成 AI 肖像画,该代码可用于训练与用户相关的数字分身。
建议使用 5 到 20 张肖像图片进行训练,最好是半身照片且不要佩戴眼镜(少量可以接受)。
训练完成后,EasyPhoto 可以在推理部分生成图像。
EasyPhoto 支持使用预设模板图片与上传自己的图片进行推理。
图 1, 图 5 这些是插件的生成结果,从生成结果来看,插件的生成效果还是非常不错的:
图 5
每个图片背后都有一个模板,EasyPhoto 会对模板进行修改使其符合用户的特征。在 EasyPhoto 插件中,Inference 侧已经预置了一些模板,可以用插件预置的模板进行体验;另外,EasyPhoto 同样可以自定义模板,在 Inference 侧有另外一个 tab 页面,可以用于上传自定义的模板。如下图所示。
图 6
而在 Inference 预测前,我们需要进行训练,训练需要上传一定数量的用户个人照片,训练的产出是一个 Lora 模型。该 Lora 模型会用于 Inference 预测。
总结而言,EasyPhoto 的执行流程非常简单:1、上传用户图片,训练一个与用户相关的 Lora 模型; 2、选择模板进行预测,获得预测结果。
安装方式一: SDWebUI 界面安装
网络良好的情况下!!!在 SDWebUI 中跳转到 Extentions,然后选择 install from URL。输入https://github.com/aigc-apps/sd-webui-EasyPhoto,点击下方的 install 即可安装。
在安装过程中,会自动安装依赖包,这个需要耐心等待一下。安装完需要重启 WebUI。
图 7
安装方式二:源码安装
如果你想要使用项目源码安装,直接进入到 Webui 的 extensions 文件夹,打开 git 工具,git clone 即可。下载完成后,重新启动 webui,便会检查需要的环境库并且安装。
图 8
其他安装项:ControlNet
EasyPhoto 需要 SDWebUI 支持 ControlNet,具体使用的相关插件是Mikubill/sd-webui-controlnet。在使用 EasyPhoto 之前,您需要安装这个软件源。
此外,我们至少需要三个 Controlnets 用于推理。因此,您需要设置 Multi ControlNet: Max models amount (requires restart) 。
图 9
EasyPhoto 训练
EasyPhoto 训练包含如下 2 个步骤 1. 上传个人图片 2. 调整训练参数 3 点击训练并设置 ID, 整体界面如下
图 10
上传训练图片
左边是训练图片,点击 Upload Photos 即可上传图片,点击 Clear Photos 可以删除已经上传的图片
调整训练参数
上传完图片后,右边是训练参数,初次训练可不做参数调整。
图 11
这里我们也对参数进行一个介绍
根据上述表格最终训练步数的计算公式也比较简单。
简单来理解就是: 图片数量少的时候,训练步数为 photo_num * max_steps_per_photos。 图片数量多的时候,训练步数为 max_train_steps。
训练 &设置 ID
完成设置后,点击下方的开始训练,此时需要在上方填入一下 User ID,比如 用户的名字,然后就可以开始训练了。
图 12
观察训练
!!初次训练时会从我们预备的 oss(公用)上下载一部分预训练模型的权重,我们耐心等待即可,下载进度需要关注终端。
图 13
训练正常开始的相关 log
图 14
终端显示成这样就已经训练完了,最后这步是在计算验证图像与用户图像之间的人脸 ID 差距,从而实现 Lora 融合,确保我们的 Lora 是用户的完美数字分身。
图 15
EasyPhoto 预测
训练完后,我们需要将 tab 页转到 Inference。由于 Gradio 的特性,刚训练好的模型不会自动刷新,可以点击 Used id 旁的蓝色旋转按钮进行模型刷新。
图 16
刷新完后选择刚刚训练的模型,然后选择对应的模板即可开始预测。
初次预测需要下载一些 modelscope 的模型,耐心等待一下即可。
预置了部分模板,也可以切到 upload image,直接自己上传模板进行预测。然后我们就可以获得预测结果了。
图 17
预测参数说明
关于预测界面的部分参数说明
写在最后
EasyPhoto 全部使用来自开源社区的模型和相关技术,旨在探讨 StableDiffusion 在 AIGC X 真人写真领域的技术和相关应用,文章所有涉及的图片仅做演示使用,如有侵权请及时联系我们,也请大家引用时表明转载!!!。
非常欢迎大家下载试用,并参与开发,共建真像美的 AI 写真!
版权声明: 本文为 InfoQ 作者【阿里云大数据AI技术】的原创文章。
原文链接:【http://xie.infoq.cn/article/b6c49daf795e6c04fbe864466】。文章转载请联系作者。
评论