当前位置: 首页 > news >正文

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文:https://arxiv.org/abs/2404.16022
代码:https://github.com/ToTheBeginning/PuLID

文章目录

  • Abstract
  • Introduction
  • Related Work
  • Methods

Abstract

我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customization(PuLID)。通过将Lightning T2I分支与标准扩散分支结合,PuLID引入了对比对齐损失和准确ID损失,最大程度地减少了对原始模型的干扰,确保了高ID保真度。实验表明,PuLID在ID保真度和可编辑性方面都表现出色。PuLID的另一个吸引人的特性是,在插入ID前后,图像的元素(例如背景、光照、构图和风格)尽可能保持一致。代码和模型将会发布在https://github.com/ToTheBeginning/PuLID。

Introduction

作为一种特定类别的定制化文本生成图像(T2I)方法【5, 30, 12, 17, 40, 42】,身份(ID)定制允许用户适配预训练的T2I扩散模型,以符合他们的个性化ID。一类方法【5, 30, 12, 17】通过在用户提供的同一ID的若干图像上微调某些参数,从而将ID嵌入到生成模型中。这些方法催生了许多流行的AI肖像应用程序,如PhotoAI和EPIK。

尽管基于微调的解决方案取得了可观的成果,但每个ID的定制需要耗费数十分钟的微调时间,因此使个性化过程经济成本较高。另一类方法【41, 42, 2, 36, 20, 19, 38】则放弃了每个ID微调的必要性,转而在一个庞大的肖像数据集上预训练一个ID适配器【11, 24】。这些方法通常利用编码器(例如CLIP图像编码器【27】)提取ID特征。然后,将提取的特征以特定方式(例如嵌入到交叉注意力层中)整合到基础扩散模型中。尽管这些无需微调的方法效率极高,但面临两个显著挑战。

  • ID插入会破坏原始模型的行为。一个纯粹的ID信息嵌入应具有两个特征。首先,理想的ID插入应仅改变与ID相关的方面,如面部、发型和肤色,而与特定身份不直接相关的图像元素,如背景、光照、构图和风格,应该与原始模型的行为保持一致。据我们所知,以前的工作并未关注这一点。尽管一些研究【42, 38, 20】展示了生成风格化ID的能力,但与ID插入前的图像相比,风格明显退化(如图1所示)。具有较高ID保真度的方法往往会导致更严重的风格退化。

其次,在ID插入后,仍应保持原始T2I模型遵循提示的能力。在ID定制的背景下,这通常意味着能够通过提示改变ID属性(例如年龄、性别、表情和发型)、方向和配件(例如眼镜)。为了实现这些特性,目前的解决方案通常分为两类。第一类涉及增强编码器。IPAdapter【42, 1】从早期版本的CLIP提取网格特征转向利用面部识别骨干【4】提取更抽象和相关的ID信息。尽管编辑性有所改善,但ID保真度还不够高。InstantID【38】通过包括一个额外的ID和标志控制网【43】来进行更有效的调节。尽管ID相似性显著提高,但却牺牲了一定程度的编辑性和灵活性。第二类方法【20】通过构建按ID分组的数据集支持非重建训练以增强编辑性;每个ID包含若干图像。然而,创建这样的数据集需要付出巨大的努力。而且,大多数ID对应于有限数量的名人,这可能会限制其对非名人的效果。

  • 缺乏ID保真度。考虑到我们对面部的高度敏感性,在ID定制任务中保持高度的ID保真度至关重要。受GAN时代【7】面部生成任务【29, 39】成功经验的启发,提高ID保真度的一个直接想法是在扩散训练中引入ID损失。然而,由于扩散模型的迭代去噪特性【10】,实现准确的x0需要多个步骤。以这种方式训练所消耗的资源可能高得令人望而却步。因此,一些方法【2】直接从当前时间步预测x0,然后计算ID损失。然而,当当前时间步较大时,预测的x0往往嘈杂且有缺陷。在这种条件下计算ID损失显然不准确,因为面部识别骨干【4】是在照片级真实感图像上训练的。尽管提出了一些变通方法,如仅在噪声较小的时间步计算ID损失【25】或通过额外的推理步骤预测x0【45】,但仍有改进空间。

在这项工作中,为了在减少对原始模型行为影响的同时保持高ID保真度,我们提出了PuLID,一种通过对比对齐实现的纯粹和快速的ID定制方法。具体而言,我们引入了一个Lightning T2I分支以及标准扩散去噪训练分支。利用最近的快速采样方法【23, 32, 21】,Lightning T2I分支可以在有限且可控的步骤内从纯噪声生成高质量图像。通过这个额外的分支,我们可以同时解决上述两个挑战。首先,为了最小化对原始模型行为的影响,我们构建了一个对比对,其中包括相同提示和初始潜在变量,有和没有ID插入。在Lightning T2I过程中,我们在语义上对齐对比对的UNet特征,指导ID适配器如何插入ID信息而不影响原始模型的行为。其次,由于我们现在在ID插入后有了精确和高质量的生成x0,我们可以自然地提取其面部嵌入并与真实面部嵌入计算准确的ID损失。值得一提的是,这种x0生成过程与实际测试环境一致。我们的实验表明,在这种情况下优化ID损失可以显著提高ID相似性。

贡献总结如下:(1) 我们提出了一种无需调整的方法,即PuLID,在减轻对原始模型行为影响的同时保持高ID相似性。(2) 我们引入了一个Lightning T2I分支和常规扩散分支。在这个分支中,我们结合了对比对齐损失和ID损失,以最小化ID信息对原始模型的污染,同时确保保真度。与当前主流方法提高ID编码器或数据集相比,我们提供了新的视角和训练范式。(3) 实验表明,我们的方法在ID保真度和可编辑性方面实现了SOTA性能。此外,与现有方法相比,我们的方法对模型的ID信息侵扰较少,使得我们的方法在实际应用中更加灵活。

Related Work

基于微调的文本生成图像ID定制。文本生成图像模型的ID定制旨在使预训练模型能够生成特定身份的图像,同时遵循文本描述。两个开创性的基于微调的工作【5, 30】努力实现这一目标。Textual Inversion【5】为用户提供的ID优化了一个新的词嵌入,而Dreambooth【30】则通过微调整个生成器进一步增强了保真度。随后,各种方法【12, 17, 8, 35】在生成器和嵌入空间探索了不同的微调范式,以实现更高的ID保真度和文本对齐。尽管这些进展显著,但每个ID的耗时优化过程(至少需要几分钟)限制了其更广泛的应用。

无需微调的文本生成图像ID定制。为了减少在线微调所需的资源,一系列无需微调的方法【36, 38, 25, 42, 20, 41, 3】应运而生,这些方法直接将ID信息编码到生成过程中。这些方法面临的主要挑战是,在保持高ID保真度的同时,尽量减少对T2I模型原始行为的干扰。为了最小化干扰,一个可行的方法是使用面部识别模型【4】提取更抽象和相关的面部领域特定表示,就像IP-Adapter-FaceID【1】和InstantID【38】所做的那样。包含同一ID的多张图像的数据集可以促进共同表示的学习【20】。尽管这些方法取得了一定的进展,但它们还没有从根本上解决干扰问题。值得注意的是,ID保真度较高的模型往往会对原始模型的行为造成更大的干扰。在本研究中,我们提出了一种新的视角和训练方法来解决这一问题。有趣的是,该方法不需要按ID分组的数据集,也不局限于特定的ID编码器。

为了提高ID保真度,以前的工作【16, 2】使用了ID损失,这一做法受到了先前基于GAN的工作【29, 39】的启发。然而,在这些方法中,通常在当前时间步使用单一步骤直接预测x0,这往往会导致嘈杂和有缺陷的图像。这些图像对于面部识别模型【4】来说并不理想,因为它们是在真实世界的图像上训练的。PortraitBooth【25】通过仅在噪声较小的阶段应用ID损失来缓解这一问题,但这忽略了早期步骤中的损失,从而限制了其整体有效性。Diffswap【45】通过使用两步而不是一步来获得更好的预测x0,尽管这种估计仍然包含嘈杂的伪影。在我们的工作中,通过引入Lightning T2I训练分支,我们可以在更准确的设置中计算ID损失。

我们注意到一个同时进行的工作LCM-Lookahead【6】,它也使用了快速采样技术(即LCM【23】)来实现更精确的x0预测。然而,该工作与我们的工作有几个不同之处。首先,LCM-Lookahead在传统的扩散去噪过程中对x0进行精确预测,而我们从纯噪声开始,迭代去噪到x0。我们的方法与实际测试设置更一致,使得ID损失的优化更加直接。其次,为了增强提示编辑能力,LCM-Lookahead利用了SDXL-Turbo【32】的模式崩溃现象来合成一致的ID数据集。然而,合成的数据集可能面临多样性和一致性挑战,作者发现,使用该数据集训练可能比其他方法更频繁地产生风格化结果。相比之下,我们的方法不需要按ID分组的数据集。相反,我们通过一种更基础和直观的方法,即对比对齐,来增强提示跟随能力。

扩散模型的快速采样。在实践中,扩散模型通常在1000步内进行训练。在推理过程中,这种冗长的过程可以借助高级采样方法【33, 22, 15】缩短到几十步。最近基于蒸馏的工作【21, 23, 32】进一步将这一生成过程加速到10步以内。其核心动机是指导学生网络对齐与基础教师模型更远的点。在本研究中,我们引入的Lightning T2I训练分支利用了SDXL-Lightning【21】加速技术,从而使我们能够在仅4步内从纯噪声生成高质量图像。

Methods

在这里插入图片描述
图2:PuLID框架概述。框架的上半部分展示了传统的扩散训练过程。从同一图像中提取的面部用作ID条件 ( C_{\text{id}} )。框架的下半部分展示了本研究中引入的Lightning T2I训练分支。该分支利用了最新的快速采样方法,通过几步迭代去噪从纯噪声生成高质量图像(本文中为4步)。在这个分支中,我们构建了有ID注入和无ID注入的对比路径,并引入了对齐损失,以指导模型如何在不破坏原始模型行为的情况下插入ID条件。由于该分支可以生成照片级真实感图像,这意味着我们可以实现更准确的ID损失优化。

在这里插入图片描述

在这里插入图片描述

相关文章:

【深度学习】PuLID: Pure and Lightning ID Customization via Contrastive Alignment

论文:https://arxiv.org/abs/2404.16022 代码:https://github.com/ToTheBeginning/PuLID 文章目录 AbstractIntroductionRelated WorkMethods Abstract 我们提出了一种新颖的、无需调整的文本生成图像ID定制方法——Pure and Lightning ID customizatio…...

Elastic 8.14:用于简化分析的 Elasticsearch 查询语言 (ES|QL) 正式发布

作者:来自 Elastic Brian Bergholm 今天,我们很高兴地宣布 Elastic 8.14 正式发布。 什么是新的? 8.14 版本最重要的标题是 ES|QL 的正式发布(GA),它是从头开始设计和专门构建的,可大大简化数据调查。在新的查询引擎的…...

C语言指针与数组的区别

在C语言中,指针和数组虽然在很多情况下可以互换使用,但它们在概念上和行为上存在一些区别。下面详细解释这些区别: ### 数组 1. **固定大小**:数组在声明时必须指定大小,这个大小在编译时确定,之后不能改…...

springboot3一些听课笔记

文章目录 一、错误处理机制1.1 默认1.2 自定义 二、嵌入式容器 一、错误处理机制 1.1 默认 错误处理的自动配置都在ErrorMvcAutoConfiguration中,两大核心机制: ● 1. SpringBoot 会自适应处理错误,响应页面或JSON数据 ● 2. SpringMVC的错…...

【小沐学Python】Python实现Web服务器(CentOS下打包Flask)

文章目录 1、简介2、下载Python3、编译Python4、安装PyInstaller5、打包PyInstaller6、相关问题6.1 ImportError: urllib3 v2 only supports OpenSSL 1.1.1, currently the ssl module is compiled with OpenSSL 1.0.2k-fips 26 Jan 2017. See: https://github.com/urllib3/url…...

Cesium开发环境搭建(一)

1.下载安装Node.js 进入官网地址下载安装包 Node.js — Download Node.js https://cdn.npmmirror.com/binaries/node/ 选择对应你系统的Node.js版本,这里我选择的是Windows系统、64位 安装完成后,WINR,输入node --version,显示…...

视频、图片、音频资源抓取(支持视频号),免安装,可批量,双端可用!

今天分享一款比较好用资源嗅探软件,这个嗅探工具可以下载视频号,界面干净,可以内容预览和批量下载,看到这里你是不是想用它爬很多不得了的东西。这款软件无需安装,打开即用。同时他支持windows系统和Mac系统,是一款不可…...

FreeRTOS实时系统 在任务中增加数组等相关操作 导致单片机起不来或者挂掉

在调试串口任务中增加如下代码,发现可以用keil进行仿真,但是烧录程序后,调试串口没有打印,状态灯也不闪烁,单片机完全起不来 博主就纳了闷了,究竟是什么原因,这段代码可是公司永流传的老代码了&…...

CentOS 7基础操作08_Linux查找目录和文件

1、which命令——查找用户所执行的命令文件存放的目录 which命令用于查找Linux命令程序并显示所在的具体位置.其搜索范围主要由用户的环境变量PATH决定(可以执行言echo sPATH”命令查看),这个范围也是Linux操作系统在执行命令或程序时的默认搜索路径。 which命令使用要查找的命…...

CI/CD实战面试宝典:从构建到高可用性的全面解析

实战部署与配置 请描述你设计和实现的一个CI/CD pipeline的完整流程,包括构建、测试、部署各个阶段。 我设计的CI/CD pipeline通常包括以下几个阶段: 代码提交:开发人员将代码提交到Git仓库,触发CI/CD流程。代码检查&#xff1…...

NLP实战入门——文本分类任务(TextRNN,TextCNN,TextRNN_Att,TextRCNN,FastText,DPCNN,BERT,ERNIE)

本文参考自https://github.com/649453932/Chinese-Text-Classification-Pytorch?tabreadme-ov-file,https://github.com/leerumor/nlp_tutorial?tabreadme-ov-file,https://zhuanlan.zhihu.com/p/73176084,是为了进行NLP的一些典型模型的总…...

MySQL: 表的增删改查(基础)

文章目录 1. 注释2. 新增(Create)3. 查询(Retrieve)3.1 全列查询3.2 指定列查询3.3 查询字段为表达式3.4 别名3.5 去重: distinct3.6 排序: order by3.7条件查询3.8 分页查询 4. 修改 (update)5. 删除(delete)6. 内容重点总结 1. 注释 注释:在SQL中可以使用“–空格…...

WDF驱动开发-PNP和电源管理(三)

对于PNP设备来说,理解它们的启动和删除顺序,以及意外移除顺序非常重要,在早期,经常有拔插U盘导致windows重启的例子,这就是意外移除带来的问题。 功能或Filter驱动程序的启动顺序 下图显示了框架调用 WDF (KMDF 和 U…...

Redis集群和高可用性:保障Redis服务的稳定性

I. 引言 A. 对Redis的简单介绍和其在现代Web应用中的角色 Redis(REmote DIctionary Server)是一个开源的、基于内存的键值数据库,它支持多种数据结构,如字符串、哈希、列表、集合、有序集合等。由于Redis的高性能和丰富的数据类型,使其在现代Web应用中广泛使用。例如,它…...

C# WPF入门学习主线篇(二十一)—— 静态资源和动态资源

C# WPF入门学习主线篇(二十一)—— 静态资源和动态资源 欢迎来到C# WPF入门学习系列的第二十一篇。在上一章中,我们介绍了WPF中的资源和样式。本篇文章将深入探讨静态资源(StaticResource)和动态资源(Dynam…...

出现 Navicat 和 Cmd 下SQL 版本 | 查询不一致的解决方法

目录 1. 问题所示1.1 查询表格不一致1.2 版本不一致2. 原理分析3. 解决方法1. 问题所示 命令行和数据库使用工具出现不一致的情况,分别有如下情况 1.1 查询表格不一致 使用工具查询当地表格: 使用命令行查询当地表格: 1.2 版本不一致 在cmd命令下mysql --version 查询…...

31、matlab卷积运算:卷积运算、二维卷积、N维卷积

1、conv 卷积和多项式乘法 语法 语法1:w conv(u,v) 返回向量 u 和 v 的卷积。 语法2:w conv(u,v,shape) 返回如 shape 指定的卷积的分段。 参数 u,v — 输入向量 shape — 卷积的分段 full (默认) | same | valid full:全卷积 ‘same…...

C++青少年简明教程:文件

C青少年简明教程:文件 文件是指存储在计算机文件系统中的数据集合。文件可以包含各种类型的信息,例如文本、图像、音频视频等。在 C中,文件是一种数据流,可以用于读取或写入数据。C提供了一系列的文件操作函数,用于实现…...

Kimichat使用案例010:快速识别出图片中的表格保存到Excel

文章目录 一、介绍二、图片信息三、输入内容四、输出内容五、markdown提示词六、markdown输出一、介绍 如果有一张图片格式的表格,想要快速复制到Excel表格中,那么一般要借助于OCR工具。之前试过不少在线OCR工具,识别效果差强人意。其实,kimichat就可以非常好的完成这个任务…...

[大师C语言(第二十四篇)]C语言指针探秘

引言 在C语言的学习和应用中,指针无疑是最重要、最难以掌握的概念之一。它为C语言提供了强大的功能和灵活性,同时也带来了不少的复杂性。本文将深入探讨C语言指针背后的技术,帮助你更好地理解和应用指针。 第一部分:指针的基本概…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...