作者 :wuziheng
布景介绍
最近,根据生成式AI技能批量产出真/像/美的个人写真运用十分受欢迎。同时,随着 Stable Diffusion 范畴开源社区的快速开展,社区也涌现了相似 FaceChain 的开源项目,协助开发者开发个性化的真人写真生成运用。越来越多开发者对这个方向投来重视,期望得到更多灵敏的开发方法。
EasyPhoto项目介绍
作为FaceChain-Inpaint功能的开发团队,咱们快速上线了一款根据 SD WebUI 插件生态的个性化写真生成开源插件 EasyPhoto。这款插件允许用户经过上传几张同一个人的相片,快速练习Lora模型,然后结合用户自定义的模板图片,生成 真/像/美的写真图片。
图1
项目地址: github.com/aigc-apps/s…
欢迎咱们多多提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 | github.com/deepinsight… | 对矫正后的人脸提取特征,同一个人的特征间隔会更接近 | 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插件,将上述原理说到的 人脸预处理/练习/艺术照生成全部集成到了这一插件中。
项目地址:github.com/aigc-apps/s…
用户能够参阅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。输入github.com/aigc-apps/s…,点击下方的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(公用)上下载一部分预练习模型的权重,咱们耐性等候即可,下载进度需求重视终端。
图13
练习正常开端的相关log
图14
终端显现成这样就现已练习完了,终究这步是在核算验证图画与用户图画之间的人脸 ID 差距,然后完结 Lora 交融,确保咱们的 Lora 是用户的完美数字兼顾。
图15
EasyPhoto猜测
练习完后,咱们需求将tab页转到Inference。因为Gradio的特性,刚练习好的模型不会主动刷新,能够点击Used id旁的蓝色旋转按钮进行模型刷新。
图16
- 刷新完后挑选刚刚练习的模型,然后挑选对应的模板即可开端猜测。
- 初度猜测需求下载一些modelscope的模型,耐性等候一下即可。
预置了部分模板,也能够切到upload image,直接自己上传模板进行猜测。然后咱们就能够取得猜测成果了。
图17
猜测参数阐明
关于猜测界面的部分参数阐明
参数名 | 意义 |
---|---|
After Face Fusion Ratio | 第2次人脸交融的份额,越大代表越像 |
First Diffusion steps | 第一次Stable Diffusion的步数 |
First Diffusion denoising strength | 第一次Stable Diffusion重建的份额 |
Second Diffusion steps | 第2次Stable Diffusion的步数 |
Second Diffusion denoising strength | 第2次Stable Diffusion重建的份额 |
Crop Face Preprocess | 是否先裁剪人脸后再进行处理,合适大图 |
Apply Face Fusion Before | 是否进行第一次人脸交融 |
Apply Face Fusion After | 是否进行第一次人脸交融 |
写在终究
EasyPhoto全部运用来自开源社区的模型和相关技能,旨在探讨StableDiffusion在AIGC X 真人写真范畴的技能和相关运用,文章一切触及的图片仅做演示运用,如有侵权请及时联络咱们,也请咱们引用时标明转载!!!。
十分欢迎咱们下载试用,并参与开发,共建真像美的AI写真!