作者: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 的开源模型,用于实现如下的人脸性能
人脸模型 | 模型卡片 | 性能 | 应用 |
---|---|---|---|
FaceID | https://github.com/deepinsight/insightface | 对改正后的人脸提取特色,同一个人的特色间隔会更靠近 | EasyPhoto 图片预处理, 过滤非同 ID 人脸;EasyPhoto 训练中途验证模型成果;EasyPhoto 预测筛选基图片 |
人脸检测 | cv\_resnet50\_face | 输入一张图片中人脸的检测框和关键点 | 训练预处理,解决图片并抠图;预测定位模板人脸和关键点 |
人脸宰割 | cv\_u2net\_salient | 显著指标宰割 | 训练预处理,解决图片并去除背景 |
人脸交融 | cv\_unet-image-face-fusion | 交融两张输出的人脸图像 | 预测,用于交融挑选出的基图片和生成图片,使得图片更像 ID 对应的人 |
人脸美肤 | cv\_unet\_skin\_retouching\_torch | 对输出的人脸进行美肤 | 训练预处理:解决训练图片,晋升图片品质;预测:用于晋升输入图片的品质。 |
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
这里咱们也对参数进行一个介绍
参数名 | 含意 |
---|---|
resolution | 训练时喂入网络的图片大小,默认值为 512 |
validation & save steps | 验证图片与保留两头权重的 steps 数,默认值为 100,代表每 100 步验证一次图片并保留权重 |
max train steps | 最大训练步数,默认值为 800 |
max steps per photos | 每张图片的最大训练数,默认为 200,与 max train steps 联合取小。 |
train batch size | 训练的批次大小,默认值为 1 |
gradient accumulationsteps | 进行梯度累计,默认值为 4,train batch size= 1 的时候,每个 step 相当于喂入四张图片 |
dataloader num workers | 数据加载的 works 数量,windows 下不失效,因为设置了会报错,Linux 失常设置 |
learning rate | 训练 Lora 的学习率,默认为 1e-4 |
rank Lora | 权重的特色长度,默认为 128 |
network alpha | Lora 训练的正则化参数,个别为 rank 的二分之一,默认为 64 |
根据上述表格最终训练步数的计算公式也比较简单。
简略来了解就是: 图片数量少的时候,训练步数为 photo\_num * max\_steps\_per\_photos。 图片数量多的时候,训练步数为 max\_train\_steps。
训练 & 设置 ID
实现设置后,点击下方的开始训练,此时须要在上方填入一下 User ID,比方 用户的名字,而后就能够开始训练了。
图 12
察看训练
!!首次训练时会从咱们准备的 oss(专用)上下载一部分预训练模型的权重,咱们急躁期待即可,下载进度须要关注终端。
<p align=center> 图 13</p>
训练失常开始的相干 log
<p align=center> 图 14</p>
终端显示成这样就曾经训练完了,最初这步是在计算验证图像与用户图像之间的人脸 ID 差距,从而实现 Lora 交融,确保咱们的 Lora 是用户的完满数字分身。
<p align=center> 图 15</p>
EasyPhoto 预测
训练完后,咱们须要将 tab 页转到 Inference。因为 Gradio 的个性,刚训练好的模型不会主动刷新,能够点击 Used id 旁的蓝色旋转按钮进行模型刷新。
<p align=center> 图 16</p>
- 刷新完后抉择刚刚训练的模型,而后抉择对应的模板即可开始预测。
- 首次预测须要下载一些 modelscope 的模型,急躁期待一下即可。
预置了局部模板,也能够切到 upload image,间接本人上传模板进行预测。而后咱们就能够取得预测后果了。
<p align=center> 图 17</p>
预测参数阐明
对于预测界面的局部参数阐明
参数名 | 含意 |
---|---|
After Face Fusion Ratio | 第二次人脸交融的比例,越大代表越像 |
First Diffusion steps | 第一次 Stable Diffusion 的步数 |
First Diffusion denoising strength | 第一次 Stable Diffusion 重建的比例 |
Second Diffusion steps | 第二次 Stable Diffusion 的步数 |
Second Diffusion denoising strength | 第二次 Stable Diffusion 重建的比例 |
Crop Face Preprocess | 是否先裁剪人脸后再进行解决,适宜大图 |
Apply Face Fusion Before | 是否进行第一次人脸交融 |
Apply Face Fusion After | 是否进行第一次人脸交融 |
写在最初
EasyPhoto 全副应用来自开源社区的模型和相干技术,旨在探讨 StableDiffusion 在 AIGC X 真人写真畛域的技术和相干利用,文章所有波及的图片仅做演示应用,如有侵权请及时分割咱们,也请大家援用时表明转载!!!。
十分欢送大家下载试用,并参加开发,共建真像美的 AI 写真!