EasyPhoto:基于 SD WebUI 的艺术照生成插件来啦!

本文涉及的产品
交互式建模 PAI-DSW,每月250计算时 3个月
模型训练 PAI-DLC,5000CU*H 3个月
模型在线服务 PAI-EAS,A10/V100等 500元 1个月
简介: EasyPhoto 是一个基于 SD WebUI 的艺术照生成开源插件。允许用户通过上传几张同一个人的照片,快速训练Lora模型,然后结合用户自定义的模板图片,生成 真/像/美的写真图片。诚邀开发者们一起体验,多多提ISSUE,一同优化,让每个AIGCer都拥有自己的AI写真相机!

作者bubbliiiing , wuziheng


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

EasyPhoto 交流群:钉钉搜索群号“54095000124


EasyPhoto 是一个基于 SD WebUI 的艺术照生成插件。支持低代码操作、自定义风格,让更多开发者灵活地开发自己的风格化艺术照生成应用。


背景介绍

最近,基于生成式AI技术批量产出真/像/美的个人写真应用非常受欢迎。同时,随着 Stable Diffusion 领域开源社区的快速发展,社区也涌现了类似 FaceChain 的开源项目,帮助开发者开发个性化的真人写真生成应用。越来越多开发者对这个方向投来关注,希望得到更多灵活的开发方式。



EasyPhoto项目介绍

作为FaceChain-Inpaint功能的开发团队,我们快速上线了一款基于 SD WebUI 插件生态的个性化写真生成开源插件 EasyPhoto。这款插件允许用户通过上传几张同一个人的照片,快速训练Lora模型,然后结合用户自定义的模板图片,生成 真/像/美的写真图片。

image.png

图1

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

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


原理介绍

AI真人写真是一个基于 StableDiffusion和AI人脸相关技术,实现的定制化人像Lora模型训练和指定图像生成链路的集合,这里我们简单介绍我们在EasyPhoto中实现的相关技术,下图是EasyPhoto的生成链路介绍,

image.png图2

EasyPhoto整体分为训练和推理两个阶段, 下文图3详细展示了训练阶段,上图2展示了生成阶段。


EasyPhoto生成

EasyPhoto生成采用基于开源模型StableDiffusion + 人物定制Lora的方式 + ControlNet 的方式完成艺术照生成

  1. 使用人脸检测模型对输入的指定模板进行人脸检测(crop & warp)并结合数字分身进行模板替换。
  2. 采用FaceID模型挑选用户输入的最佳ID Photo和模板照片进行人脸融合(face fusion)。
  3. 使用融合后的图片作为基底图片,使用替换后的人脸作为control条件,加上数字分身对应的Lora,进行图到图局部重绘生成。
  4. 采用基于StableDiffusion + 超分的方式进一步在保持ID的前提下生成高清结果图。

EasyPhoto训练

image.png

图3


EasyPhoto训练采用了大量的人脸预处理技术,用于把用户上传的图片进行筛选和预处理,并引入相关验证和模型融合技术,参考图3.

  1. 采用FaceID和图像质量分数对所有图片进行聚类和评分,筛选非同ID照片。
  2. 采用人脸检测和主体分割,抠出1筛选后的人脸图片进行人脸检测抠图,并分割去除背景。
  3. 采用美肤模型优化部分低质量人脸,推升训练数据的图片质量。
  4. 采用单一标注的方案,对处理后的训练图片进行打标,并使用相关的Lora 训练。
  5. 训练过程中采用基于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边缘作为信号,控制输出的小狗。

image.png

图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这些是插件的生成结果,从生成结果来看,插件的生成效果还是非常不错的:

image.png

图5


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

image.png

图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。

image.png

图7


安装方式二:源码安装

如果你想要使用项目源码安装,直接进入到Webui的extensions文件夹,打开git工具,git clone即可。下载完成后,重新启动webui,便会检查需要的环境库并且安装。

image.png

8


其他安装项:ControlNet

EasyPhoto需要SDWebUI支持ControlNet,具体使用的相关插件是Mikubill/sd-webui-controlnet。在使用 EasyPhoto 之前,您需要安装这个软件源。

  • 此外,我们至少需要三个 Controlnets 用于推理。因此,您需要设置 Multi ControlNet: Max models amount (requires restart)


image.png

图9


EasyPhoto训练


EasyPhoto训练包含如下2个步骤 1. 上传个人图片 2. 调整训练参数 3点击训练并设置ID, 整体界面如下

image.png

图10


上传训练图片

左边是训练图片,点击Upload Photos即可上传图片,点击Clear Photos可以删除已经上传的图片

调整训练参数

上传完图片后,右边是训练参数,初次训练可不做参数调整。image.png

图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


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

image.png

简单来理解就是:图片数量少的时候,训练步数为photo_num * max_steps_per_photos。图片数量多的时候,训练步数为max_train_steps。


训练&设置ID

完成设置后,点击下方的开始训练,此时需要在上方填入一下User ID,比如 用户的名字,然后就可以开始训练了。

image.png

图12


观察训练

!!初次训练时会从我们预备的oss(公用)上下载一部分预训练模型的权重,我们耐心等待即可,下载进度需要关注终端。

image.png

图13


训练正常开始的相关log

15.png

图14


终端显示成这样就已经训练完了,最后这步是在计算验证图像与用户图像之间的人脸 ID 差距,从而实现 Lora 融合,确保我们的 Lora 是用户的完美数字分身。

14.png

图15


EasyPhoto预测

训练完后,我们需要将tab页转到Inference。由于Gradio的特性,刚训练好的模型不会自动刷新,可以点击Used id旁的蓝色旋转按钮进行模型刷新

13.png

图16

  • 刷新完后选择刚刚训练的模型,然后选择对应的模板即可开始预测。
  • 初次预测需要下载一些modelscope的模型,耐心等待一下即可。


预置了部分模板,也可以切到upload image,直接自己上传模板进行预测。然后我们就可以获得预测结果了。

17.png

图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写真!


EasyPhoto交流群:钉钉搜索群号“54095000124

相关实践学习
使用PAI-EAS一键部署ChatGLM及LangChain应用
本场景中主要介绍如何使用模型在线服务(PAI-EAS)部署ChatGLM的AI-Web应用以及启动WebUI进行模型推理,并通过LangChain集成自己的业务数据。
机器学习概览及常见算法
机器学习(Machine Learning, ML)是人工智能的核心,专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能,它是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域。 本课程将带你入门机器学习,掌握机器学习的概念和常用的算法。
相关文章
|
7月前
|
人工智能 异构计算
基于PAI-DSW使用SD WebUI实现AI扩图功能
在本教程中,您将学习如何在阿里云交互式建模(PAI-DSW)中,使用Stable-Diffusion-WebUI实现AI扩图功能。
基于PAI-DSW使用SD WebUI实现AI扩图功能
|
2月前
|
人工智能 并行计算 搜索推荐
ollama本地部署llama3(window系统)
这篇文章详细介绍了如何在Windows系统上本地部署Ollama框架来运行Llama 3大模型,并提供了具体的安装步骤和注意事项,以便实现离线使用高级AI模型进行对话。
332 0
ollama本地部署llama3(window系统)
|
15天前
|
Docker 容器
marco-o1 + ollama + Open-WebUI 实现 o1 的折叠推理效果
marco-o1 + ollama + Open-WebUI 实现 o1 的折叠推理效果
60 2
|
22天前
|
存储 安全 API
使用Ollama和Open WebUI管理本地开源大模型
Open WebUI 是一个功能丰富且用户友好的自托管 Web 用户界面(WebUI),它被设计用于与大型语言模型(LLMs)进行交互,特别是那些由 Ollama 或与 OpenAI API 兼容的服务所支持的模型。Open WebUI 提供了完全离线运行的能力,这意味着用户可以在没有互联网连接的情况下与模型进行对话,这对于数据隐私和安全敏感的应用场景尤为重要。
|
4月前
|
前端开发 API C#
使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像
本文介绍了如何将Unity游戏引擎与Stable-Diffusion-WebUI的文生图API相结合,实现在Unity中生成图像的功能。内容包括启动Stable Diffusion的API设置、在Unity中创建脚本与UI配置,以及通过按钮点击事件触发图像生成的详细步骤和测试过程。
使用Unity 接入 Stable-Diffusion-WebUI的 文生图api 并生成图像
|
5月前
|
机器学习/深度学习 缓存 运维
函数计算产品使用问题之如何解决SD中安装了ebsynth_utility插件但在webui中没有入口的问题
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
123 4
|
5月前
|
存储 监控 Serverless
函数计算产品使用问题之怎么批量下载Stable Diffusion(SD)图片
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
函数计算产品使用问题之怎么批量下载Stable Diffusion(SD)图片
|
5月前
|
Serverless API 数据处理
函数计算产品使用问题之部署Stable Diffusion并下载了插件,找不到该插件,该怎么办
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
5月前
|
缓存 Serverless API
函数计算产品使用问题之如何开通Stable Diffusion(SD)的API并在本地软件中调用
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
6月前
|
运维 Serverless API
函数计算产品使用问题之上传了几个g的模型到sd目录之后,无法打开,同时也无法打开webui,是什么导致的
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。