首页 文章详情

EasyPhoto SDWebui艺术照插件

AI算法与图像处理 | 3 2023-09-07 02:24 0 0 0
UniSMS (合一短信)

作者 :bubbliiiing , wuziheng    来源 | Smarter

项目地址: https://https://github.com/aigc-apps/sd-webui-EasyPhoto-webui-EasyPhoto

背景介绍

AIGC真实人像写真,妙鸭相机作为AIGC领域一款收费产品成功的为大家展示了,如何使用AIGC技术少量的人脸图片建模,快速提供真/像/美的个人写真,在极短的时间拥有了大量的付费客户。同时,随着StableDiffusion领域开源社区的快速发展,社区也涌现了类似 FaceChain 这样基于 Modelscope开源社区结合 diffusers 的开源项目,用于指导用户快速开发个人写真。然而对于大量使用SDWebUI的 AIGC 同学们,短时间内却没有一个效果足够好的开源插件,去适配真人写真这一功能。

作为FaceChain-Inpaint功能的开发团队,快速为社区开发了一款基于SDWebUI 插件生态的 EasyPhoto 插件,这款插件允许用户通过上传几张同一个人的照片,快速训练Lora模型,然后结合用户上传的模板图片,快速生成 真/像/美的写真图片。让我们先来快速看看效果

图.1

项目地址: https://https://github.com/aigc-apps/sd-webui-EasyPhoto-webui-EasyPhoto

欢迎大家多多提ISSUE,一同优化,让每个AIGCer都拥有自己的AI写真相机!

原理介绍

AI真人写真是一个基于 StableDiffusion和AI人脸相关技术,实现的定制化人像Lora模型训练和指定图像生成链路的集合,这里我们简单介绍我们在EasyPhoto中实现的相关技术,下图是EasyPhoto的生成链路介绍,我们将从在后续的章节简单介绍相关技术,更多细节也欢迎大家参考Repo的代码。(如果你已经对这一技术路线非常熟悉,欢迎直接跳到第三章 EasyPhoto & SDWebUI)

图.2

文图生成(SD/Control/Lora)

StableDiffusion

StableDiffusion作为Stability-AI开源图像生成模型,通常分为SD1.5/SD2.1/SDXL等版本, 是通过对海量的图像文本(LAION-5B)对进行训练结合文本引导的扩散模型(DiffusionModel),使用训练后的模型,通过对输入的文字进行特征提取,引导扩散模型在多次的迭代中生成高质量且符合输入语义的图像。感兴趣的同学可以参考 《stable diffusion原理解读通俗易懂,史诗级万字爆肝长文,..》, 下面的图像就是 stablediffusion 官网 Repo 贴出来的他们的效果。

图.3

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的开源模型,用于完成如下的人脸功能

人脸模型模型卡片功能使用
FaceIDhttps://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对输入的人脸进行美肤训练预处理:处理训练图片,提升图片质量预测:用于提升输出图片的质量。

cv_resnet50_face

cv_u2net_salient

cv_unet-image-face-fusion

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-webui-EasyPhoto

用户可以参考SDWebUI的插件使用方式进行安装使用。

EasyPhoto插件简介

EasyPhoto是一款Webui UI插件,用于生成AI肖像画,该代码可用于训练与用户相关的数字分身。

  • 1. 建议使用 5 到 20 张肖像图片进行训练,最好是半身照片且不要佩戴眼镜(少量可以接受)。

  • 2. 训练完成后,EasyPhoto可以在推理部分生成图像。

  • 3. EasyPhoto支持使用预设模板图片与上传自己的图片进行推理。

图.1, 图.6这些是插件的生成结果,从生成结果来看,插件的生成效果还是非常不错的:

图.6

每个图片背后都有一个模板,EasyPhoto会对模板进行修改使其符合用户的特征。在EasyPhoto插件中,Inference侧已经预置了一些模板,可以用插件预置的模板进行体验;另外,EasyPhoto同样可以自定义模板,在Inference侧有另外一个tab页面,可以用于上传自定义的模板。如下图所示。

图.7

而在Inference预测前,我们需要进行训练,训练需要上传一定数量的用户个人照片,训练的产出是一个Lora模型。该Lora模型会用于Inference预测。

总结而言,EasyPhoto的执行流程非常简单:1、上传用户图片,训练一个与用户相关的Lora模型;2、选择模板进行预测,获得预测结果。

安装方式一: SDWebUI界面安装

网络良好的情况下!!!在SDWebUI中跳转到Extentions,然后选择install from URL。输入https://https://github.com/aigc-apps/sd-webui-EasyPhoto,点击下方的install即可安装。

在安装过程中,会自动安装依赖包,这个需要耐心等待一下。安装完需要重启WebUI。

安装方式二:源码安装

如果你想要使用项目源码安装,直接进入到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 alphaLora训练的正则化参数,一般为rank的二分之一,默认为64

根据上述表格最终训练步数的计算公式也比较简单。

FinalTrainingStep=min(photo_num×max_steps_per_photos,max_train_steps)

简单来理解就是:图片数量少的时候,训练步数为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第二次人脸融合的比例,越大代表越像
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写真!

项目地址:https://github.com/aigc-apps/sd-webui-EasyPhotohttps://https://github.com/aigc-apps/sd-webui-EasyPhoto


good-icon 0
favorite-icon 0
收藏
回复数量: 0
    暂无评论~~
    Ctrl+Enter