本文将对基于SDWebUI插件生态的EasyPhoto插件进行源码解析。EasyPhoto插件是由FaceChain-Inpaint功能的开发团队迅速推出的一款开源项目,旨在满足AIGC领域同学们对适配真人写真功能的需求。通过本插件,用户可以上传5-20张同一个人的照片,利用Lora模型进行快速训练,并结合用户提供的模板图片,快速生成真实、逼真、美观的个人写真照片。
在AIGC领域中,妙鸭相机作为一款收费产品,成功展示了如何利用AIGC技术通过少量的人脸图片进行建模,以极短的时间提供高质量的个人写真服务,吸引了大量付费客户。与此同时,StableDiffusion领域的开源社区也迅速发展起来,其中涌现了许多基于Modelscope开源社区和diffusers的项目,例如FaceChain,旨在指导用户快速开发个人写真功能。
然而,对于大量使用SDWebUI的AIGC同学们而言,在短时间内却没有找到一个足够出色的开源插件,能够适配真人写真这一功能。为了解决这一问题,FaceChain-Inpaint团队迅速响应社区需求,开发了EasyPhoto插件。该插件基于SDWebUI插件生态,为用户提供了一种简便的方式来训练Lora模型,并结合用户上传的模板图片,快速生成真实、逼真、美观的个人写真照片。
本文将深入解析EasyPhoto插件的源码,探讨其实现原理和关键技术。我们将逐步介绍插件的功能和使用方法,包括如何上传照片、训练Lora模型以及生成个人写真照片的过程。通过对源码的解析,读者将对EasyPhoto插件的工作原理有更深入的了解,从而能够更好地应用和定制该插件,满足个人写真需求。
在接下来的章节中,我们将详细介绍EasyPhoto插件的核心代码和关键算法,以及其与SDWebUI插件生态的集成方式。同时,我们还将讨论插件的性能优化和扩展性,以及可能的改进方向。通过本文的阅读,读者将能够全面了解EasyPhoto插件,并在AIGC领域中应用其强大的功能,为用户提供更出色的个人写真体验。
其中,
├── api_test --- API测试代码
├── images --- 模版图片
├── javascript --- UI代码
├── models --- 模型相关文件,包含训练模版图片文件夹、推理模版图片文件夹以及SD 1.5相关配置
├── scripts --- 核心代码,也是本文主要介绍的部分
│ ├── train_kohya --- Lora训练相关文件
│ ├── api.py --- API接口服务端入口代码
│ ├── easyphoto_config.py --- EasyPhoto配置相关信息
│ ├── easyphoto_infer.py --- EasyPhoto推理相关逻辑代码
│ ├── easyphoto_train.py --- EasyPhoto训练相关逻辑代码
│ ├── easyphoto_ui.py --- EasyPhoto UI相关代码,通过gradio实现
│ ├── easyphoto_utils.py --- EasyPhoto 工具函数相关代码
│ ├── face_process_utils.py --- 脸部处理相关函数代码
│ ├── preprocess.py --- EasyPhoto 训练预处理相关函数代码
│ └── sdwebui.py --- SDWebUI插件入口相关代码
├── .gitignore --- 用于指定Git版本控制系统忽略哪些文件和目录,它们将不会被添加、提交或跟踪到Git仓库中。
├── COVENANT.md --- 开发者公约
├── COVENANT_zh-CN.md --- 开发者公约中文版
├── LICENSE --- Apache License 2.0
├── README.md --- EasyPhoto, Your Smart AI Photo Generator
├── README_zh-CN.md --- EasyPhoto,您的智能 AI 照片生成器介绍
└── install.py --- 安装脚本,运行后主要安装各种python依赖包
在这个训练和推理过程中,EasyPhoto大量的使用了 ModelScope 和其他Github的开源模型,用于完成如下的人脸功能:
人脸模型 | 模型卡片 | 功能 | 使用 |
---|---|---|---|
FaceID | 对矫正后的人脸提取特征,同一个人的特征距离会更接近 | EasyPhoto图片预处理,过滤非同ID人脸EasyPhoto训练中途验证模型效果EasyPhoto预测挑选基图片 | |
人脸检测 | 输出一张图片中人脸的检测框和关键点 | 训练预处理,处理图片并抠图预测定位模板人脸和关键点 | |
人脸分割 | 显著目标分割 | 训练预处理,处理图片并去除费劲 | |
人脸融合 | 融合两张输入的人脸图像 | 预测,用于融合挑选出的基图片和生成图片,使得图片更像ID对应的人 | |
人脸美肤 | 对输入的人脸进行美肤 | 训练预处理:处理训练图片,提升图片质量预测:用于提升输出图片的质量。 |
主要是easyphoto_train_forward函数,此函数的主要作用是对用户提供的图像进行训练,包括预处理、执行训练命令、保存训练后的权重文件等。最终返回一个训练完成的消息。high level的逻辑为:
整个过程中使用了4次子进程调用。
其中最关键的逻辑是预处理的逻辑,代码在preprocess.py中。核心逻辑有:
预处理核心就是规避由于用户传入错误的人脸图片(没有人脸的图片,其他人脸的图片等情况),照片格式不对、效果不佳、尺寸不合适、背景过于复杂等问题。这一块的逻辑是非常重要的。处理后的照片如下所示:
其中,*.txt文件中的prompt为:
easyphoto_face, easyphoto, 1person.
可以发现,如果原图质量不佳,处理后的训练图也会有一些问题。
其中最关键的是easyphoto_infer_forward函数,它实现了一个完整的图像处理流程,包括图像修复、颜色转移、背景恢复、皮肤修饰、肖像增强等操作,并可以计算生成图像与roop图像之间的FaceID相似度。核心步骤为:
本文详述了训练和推理两个过程的代码解析,输出了核心业务逻辑。希望能为大家理解EasyPhoto提供帮助。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。