easyphoto 妙鸭相机

AIGC专栏7——EasyPhoto 人像训练与生成原理详解-CSDN博客如何训练一个高品质的人像Lora与应用高品质Lora的链路对于写真生成而言非常重要。由《LoRA: Low-Rank Adaptation of Large Language Models》 提出的一种基于低秩矩阵的对大参数模型进行少量参数微调训练的方法,广泛引用在各种大模型的下游使用中。目前对超过数十亿以上参数的具有强能力的大模型针对下游任务进行微调中会呈现出巨大开销。LoRA 建议冻结预训练模型的权重并在每个自注意力部分通过全连接的方式注入可训练层。https://blog.csdn.net/weixin_44791964/article/details/132922309

原作者的解释文档,说的非常详细,可以对着文档进行分析,分为两个阶段,一个是训练流程,一个是推理流程,整个过程还是很复杂的,这里面应该有很多可以优化的地方。在训练阶段,经过了图像预处理得到图像排序,再经过人像分割得到人像区域,使用lora训练,lora的结果通过img2img来验证;推理阶段,用用户上传的最正的图像作为参考图像,与模版图像的人脸融合图作为canny图,模板图与训练后产生的lora换脸,作为openpose图,在人脸融合图基础上进行多次lora和controlnet得到最终结果。

训练流程:

用户上传图片,会对图片进行预处理,再lora训练。

1.人像得分排序

人像排序包括:人脸特征向量,图像质量评分,人脸偏移角度。

人脸特征向量,利用retinaface检测脸,并对齐,使其成为标准脸,利用人脸特征提取模型curricularface提取特征量,先计算人像的平均特征,然后计算每一张图片和平均特征的相似程度,相似程度是0-1的相似度分数;图像质量评分;人脸偏移角度,计算双眼的旋转角度,眼睛连线相对于水平线的倾斜角,偏移角为0,得分为1,偏移角为90,得分为0-1,偏移角分数0-1,并选出最正的人像在推理时作为参考人像

人像排序:相似度分数与图像质量分数相乘,选出最高的topk个人像进行训练。

2.人像分割与修复

人脸分割,lora训练保留人像特征,因此只关注人脸区域即可,显著性分割取出背景,人脸检测选出人脸周围区域;GPEN进行人脸修复,并超分,ABPN人像美肤,产生了比较好的人像图。(lora的学习能力强,不仅能学到人像特征,还能学到模糊、噪声、不清晰等特征)

3.lora训练

kohya_ss的lora,同时训练text encoder和unet。lora模型融合,每100step保留一次lora权重,正常会训练800steps。使用一些模版图像进行img2img,保证出来的人像一定是正脸照。例如800steps,会产生800组验证结果和8个lora模型,使用验证结果与训练图片进行人脸特征向量提取,进行人脸相似度计算,然后选择其中最佳的几个lora模型进行融合,由于每组验证结果包含多张(4),会根据每组验证结果 被选中的比例 作为这个lora模型所占的比重。

推理流程:

1.初步重建

1.1 人脸融合 

reference photo是计算偏移角时选出的最正的人像,作为目标脸型进行人脸融合,人像重建是img2img完成,人脸融合算法用于提供一个比较好的基础图片,这样的结果就更像用户,在sd中提供canny。

1.2 人脸裁剪与放射变换

在完成训练后,可以获得一张与用户最为相似的图片,这张图片也是生成的,但是在训练的过程中会将所有的验证图片与训练图片进行人脸相似度比对。裁剪这个人像的图片并且进行放射变换,利用5个人脸关键点,将其贴到模版图像上,获得replaced image,这个图像会在下一步sd重建时使用,提供openpose。

1.3 stable diffusion重建 + 颜色转移

在1.1中完成人脸融合,下一步是使用lora重建,但是光用lora是不够的,还要结合controlnet,从推理图上人脸融合和放射变换似乎重合了,但是他们是提供不同的controlnet模式的。

使用1.1中的人脸融合图像的canny控制(防止人像崩坏)。

使用1.1中的人脸融合图像的颜色控制(使生成的颜色符合模版)。

使用1.2中replaced image的openpose+face openpose控制(使眼睛与轮廓更像本人)。

使用训练的lora。

使用mask对人脸区域进行重建。

2.边缘完善

2.1 人脸融合

再进行一次人脸融合以提升人脸的相似度。

2.2 stable diffusion重建

初步重建后可以获得一个不错的人像,但可能存在边缘上的问题,因此还设立了二次重建用于进行边缘完善,依然是lora+controlnet,但和初步重建不同,重建的是非人脸区域。

使用1.1中的人脸融合图像的tile控制(防止颜色过于失真)。

使用1.1中的canny控制(防止人脸崩坏)。

使用训练的lora。

使用mask对人像周围区域进行重建。

3.后处理

人像美肤和超分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/165497.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法练习Day24】递增子序列全排列全排列 II

​📝个人主页:Sherry的成长之路 🏠学习社区:Sherry的成长之路(个人社区) 📖专栏链接:练题 🎯长路漫漫浩浩,万事皆有期待 文章目录 递增子序列容易出错的地方 …

安装Git和git命令使用

文章目录 安装Git创建版本库版本回退工作区和暂存区管理修改撤销修改 安装Git 在Windows上安装Git 在Windows上使用Git,可以从Git官网直接下载安装程序,然后按默认选项安装即可。 安装完成后,在开始菜单里找到“Git”->“Git Bash”&…

CentOS 7 安装 nginx

CentOS 7 安装 nginx 官网下载 nginx nginx官网下载链接:http://nginx.org/en/download.html 下载稳定版即可 将压缩包上传到 CentOS 7 虚拟机中 这里由于上传工具很多,不予展示 安装步骤 检查是否存在 nginx(有的话需要卸载掉自带的&a…

【C++ 学习 ㉙】- 详解 C++11 的 constexpr 和 decltype 关键字

目录 一、constexpr 关键字 1.1 - constexpr 修饰普通变量 1.2 - constexpr 修饰函数 1.3 - constexpr 修饰类的构造函数 1.4 - constexpr 和 const 的区别 二、decltype 关键字 2.1 - 推导规则 2.2 - 实际应用 一、constexpr 关键字 constexpr 是 C11 新引入的关键字…

蓝牙资讯|AirPods Pro 2推送新固件,苹果Find My功能受到好评

苹果公司今天面向采用 Lightning 端口和 USB-C 端口的 AirPods Pro 2 耳机,更新推出了内部编号为 6A305 的全新固件,高于 10 月 10 日发布的 6A303 更新。 苹果官方并没有公布固件的更新日志,目前尚不清楚具体引入了哪些新功能、新特性。苹…

2019年亚太杯APMCM数学建模大赛A题基于图像分析的二氧化硅熔化表示模型求解全过程文档及程序

2019年亚太杯APMCM数学建模大赛 A题 基于图像分析的二氧化硅熔化表示模型 原题再现 铁尾矿的主要成分是二氧化硅,而二氧化硅是铁尾矿成分中最难熔化的部分。因此,铁尾矿的熔融行为可以用二氧化硅的熔融行为来表示。然而,高温熔池的温度超过…

jdk21的外部函数和内存API(官方翻译)

1、jdk21: 引入一个 API,通过该 API,Java 程序可以与 Java 运行时之外的代码和数据进行互操作。通过有效地调用外部函数(即JVM外部的代码)和安全地访问外部内存(即不由JVM管理的内存)&#xf…

统计学习方法 感知机

文章目录 统计学习方法 感知机模型定义学习策略学习算法原始算法对偶算法 学习算法的收敛性 统计学习方法 感知机 读李航的《统计学习方法》时,关于感知机的笔记。 感知机(perceptron)是一种二元分类的线性分类模型,属于判别模型…

大模型,重构自动驾驶

文|刘俊宏 编|王一粟 大模型如何重构自动驾驶?答案已经逐渐露出水面。 “在大数据、大模型为特征,以数据驱动为开发模式的自动驾驶3.0时代,自动驾驶大模型将在车端、云端上实现一个统一的端到端的平台管理。”毫末智…

uni-app:实现时钟自走(动态时钟效果)

效果 核心代码 使用钩子函数 mounted(),设置定时器,是指每秒都要去执行时间的获取,以至于实现时间自走的效果 mounted() { this.updateTime(); // 初始化时间 setInterval(this.updateTime, 1000); // 每秒更新时间 }, 自定义方法…

NodeMCU ESP8266 读取按键外部输入信号详解(图文并茂)

NodeMCU ESP8266 读取按键外部输入信号教程(图文并茂) 文章目录 NodeMCU ESP8266 读取按键外部输入信号教程(图文并茂)前言按键输入常用接口pinModedigitalRead 示例代码结论 前言 ESP8266如何检测外部信号的输入,通常…

Java封装:面向对象的三大特性之一

👑专栏内容:Java⛪个人主页:子夜的星的主页💕座右铭:前路未远,步履不停 目录 一、封装的概念二、访问修饰限定符三、包1、包的概念2、导入包中的类3、常见的包 嗨!前面我们简单的认识了一下什么…

常用的设计模式以及操作Redis、MySQL数据库、各种MQ、数据类型转换的方法

文章目录 🌟 如何优雅地写出高质量的Java代码🍊 设计模式🎉 单例模式🎉 工厂模式🎉 观察者模式 🍊 操作Redis🎉 连接Redis🎉 存储数据🎉 获取数据🎉 删除数据…

Java注解处理器APT

注解处理器介绍 什么是APT? 在JDK6的时候引入了JSR269的标准,即APT(Annotation Processing Tool),用于在编译时处理源代码中的注解,从而生成额外的代码、配置文件或其他资源。与传统的运行时反射相比&…

深入探索Sharding JDBC:分库分表的利器

随着互联网应用的不断发展和用户量的不断增加,传统的数据库在应对高并发和大数据量的场景下面临着巨大的挑战。为了解决这一问题,分库分表成为了一个非常流行的方案。分库分表主流的技术包括MyCat和Sharding JDBC。我们来通过一张图来了解这两者有什么区…

C语言——二周目——程序的翻译与执行环境

一、程序环境 对于一个C语言程序的实现,整个过程一般存在两个不同的环境,分别是翻译环境与执行环境。在翻译环境中,我们所写的源代码经过一系列处理被转换成为可执行的机器指令;在执行环境中,会实际执行代码。 整个程序…

Open3D(C++) 最小二乘拟合平面(拉格朗日乘子法)

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。 一、算法原理 设拟合出的平面方程为: a x + b y + c

手写redux的connect方法, 使用了subscribe获取最新数据

一. 公共方法文件 1. connect文件 import React, { useState } from "react"; import MyContext from "./MyContext"; import _ from "lodash";// 模拟react-redux的 connect高阶函数 const connect (mapStateToProps, mapDispatchToProps) &…

数学建模——最优连接(基于最小支撑树)

一、概念 1、图的生成树 由图G(V,E)的生成子图G1(V,E1)(E1是E的子集)是一棵树,则称该树为图G的生成树(支撑树),简称G的树。图G有支撑树的充分必要条件为图G连通。 2、最小生成树问题 连通图G(V,E),每条边…

STM32串口

前言 提示:这里可以添加本文要记录的大概内容: 目前已经学习了GPIO的输入输出,但是没有完整的显示信息,最便宜的显示就是串口。 000 -111 AVR单片机 已经学会过了, 提示:以下是本篇文章正文内容&#x…