作者 :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写真!