Textual Inversion: 一种精调Stable Diffusion模型的方法

引言

最近的文本到图像Stable Diffusion (SD)模型已经证明了使用文本提示合成新颖场景的前所未有的能力。这些文本到图像的模型提供了通过自然语言指导创作的自由。然而,它们的使用受到用户描述特定或独特场景、艺术创作或新物理产品的能力的限制。很多时候,用户被迫行使她的艺术自由来生成特定的独特或新概念的图像。此外,使用新数据集为每个新概念重新训练模型非常困难且昂贵。

论文《An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion》提供了一种简单的方法来允许这些创作自由。在这篇博文中,我们正在讨论一种将我们自己的猫变成一幅画的方法,或者想象一种基于我们最喜欢的玩具使用SD的新产品。我们可以通过冻结文本到图像模型的嵌入空间中的新“单词”,仅使用对象或样式的 3-5 个图像来学习这些用户提供的新概念。
在这里插入图片描述

textual inversion工作机理

在我们之前关于SD的博客中,我们看到文本编码器模型将任何输入提示转换为嵌入,这些嵌入被馈送到扩散模型作为指导或调节。我们还可以在图 1 中看到,此过程涉及将输入提示tokenize为一组tokens,这些tokens是某些预定义字典中的索引,然后将这些tokens通过文本编码器传递以获取嵌入。每个token都链接到一个唯一的嵌入向量,可以通过基于索引的查找来检索该嵌入向量。

这些文本嵌入与潜在图像输入和 t 一起传递到下游 UNet 模型作为指导。我们还可以更改一个对象的token嵌入,并将其替换为另一个对象的token嵌入,以获得不同的图像。同样,我们可以学习特定对象或概念的新token嵌入。

在 textural inversion中,我们选择这个嵌入空间作为反演的目标。“ textural inversion”背后的想法是使用一些示例图像向文本模型教授一个新单词,并训练其嵌入接近某些视觉表示。这是通过向词汇表添加新token并使用一些代表性图像进行训练来实现的。因此,我们尝试找到代表我们新的特定概念的新嵌入向量。 textural inversion可用于将经过训练的标记添加到词汇表中,并将其与预训练的SD模型一起使用。

因此,我们指定一个占位符字符串,我们将其称为伪词,用 S* 表示,如图 1 所示,来表示我们希望学习的新概念。我们干预嵌入过程,并用新学习的嵌入 v* 替换与tokenized字符串相关的向量。因此,我们能够将新概念注入我们的词汇中。然后像任何其他单词一样对待这个伪单词,并且可以用来为生成模型组成新颖的文本查询或新句子。因此,人们可以要求“一张S在海滩上的照片”,“一幅S挂在墙上的油画”,甚至可以组成两个概念,例如“一幅S1的S2风格的画”。 ”。在此过程中我们没有对生成模型进行任何更改,因此基本生成模型可以用于我们的新概念。

论文作者将 textural inversion过程的示意图如下所示。
在这里插入图片描述

我们可以看到,我们可以从提示“A photo of S*”中获取图像,其中 S* 是一个新对象或新样式,就像我们从提示“A photo of cat”中获取图像一样。

文本嵌入

找到这些伪词的嵌入的任务被定义为反转任务之一。在这里,我们使用固定的预训练文本到图像模型和一小组描述该概念的图像。我们的目标是找到一个单词嵌入,这样“A photo of S*”形式的句子将导致从我们的小集合中重建图像。这种嵌入是通过优化过程找到的(图 4),我们将其称为“Textual Inversion”。

在Latent Diffusion Models领域,inversion是通过向图像添加噪声然后通过网络对其进行去噪来执行的,但此过程会显着改变图像内容。在文本转换中,我们反转用户提供的概念并将该概念表示为模型词汇表中的新伪词。新标记的嵌入存储在一个小型 PyTorch pickled 字典中,其密钥是经过训练的新文本token。由于我们pipeline中的编码器不知道该术语,因此我们需要手动添加它。

训练

Textual Inversion的目的是能够快速引导生成新的、用户指定的概念。我们尝试将这些新颖的概念编码为预训练的文本到图像模型的中间表示。因此,我们寻求在文本到图像模型所使用的文本编码器的词嵌入阶段表示这些概念。人们发现这个嵌入空间的表现力足以捕获基本的图像语义。

Textual Inversion是通过一类名为Latent Diffusion Models的特定生成模型以及最近引入的一类在自编码器的隐空间中运行的去噪扩散概率模型 (DDPM) 来实现的。LDMs 由 2 个核心组件组成:

  • 自编码器:编码器学习将图像 x 映射到空间潜在代码 z = E(x)。随后,解码器 D 将潜在映射回图像,使得 D(E(x)) = x
  • 扩散模型——经过训练可以对正态分布变量进行去噪。扩散模型可以以类标签、文本、语义图或其他图像到图像翻译任务为条件。令 c θ ( y ) c_θ(y) cθ(y) 为将条件输入 y 映射到条件向量的模型。LDM 损失由下式给出:
    在这里插入图片描述

其中 t 是时间步长, z t z_t zt 是到时间 t 降噪的隐图像表示, ε ε ε是未缩放的噪声样本, ε ( θ ) ε (θ) ε(θ) 是去噪网络。我们的目标是正确去除添加到图像潜在表示中的噪声。训练时, c ( θ ) c(θ) c(θ) ε ( θ ) ε (θ) ε(θ) 联合优化以最小化 LDM 损失。我将在未来的博文中提供用于训练和推理的代码。

Textual Inversion

为了找到这些新的嵌入,我们使用一小组图像(通常是 3-5 张),它们描述了跨多种设置(例如不同的背景或姿势)的目标概念。我们通过直接优化找到 v*,通过最小化从小集合中采样的图像的 LDM 损失(如图 3 所示)。我们随机抽取中性上下文文本,如“S* 的照片”、“S* 的演绎”等来调节生成。

我们的优化目标可以定义为:
在这里插入图片描述

这个目标是通过重新使用与原始隐扩散模型相同的训练方案来实现的,同时保持 c ( θ ) c(θ) c(θ) ε ( θ ) ε (θ) ε(θ) 固定。这是一项重建任务,学习到的嵌入有望捕获新颖概念特有的精细视觉细节。

Textual Inversion的应用

Textual Inversion可用于一系列应用,主要包括以下内容:

  • 图像多样化
  • 文本引导合成
  • 风格转移
  • 概念合成
  • 偏差减少
  • 下游应用

我们将在下一节中讨论这些应用程序及其用例:

图像多样化

在这里插入图片描述
Textual Inversion可用于使用单个伪词创建对象的变体,如图 5 所示。它能够使用单个词嵌入捕获对象的更精细的细节。

文本引导合成

在这里插入图片描述

Textual Inversion可用于通过将学习的伪词与新的条件文本结合起来来创建新颖的场景。从图 6 中生成的图像中我们可以看到,可以利用伪词和新条件文本中的语义概念来创建新场景。由于该模型是使用预先训练的大规模文本到图像合成模型构建的,因此单个伪词可以重复使用多代。

风格迁移

在这里插入图片描述
这是Textual Inversion最典型的用例之一,其中用户可以绘制特定艺术家的独特风格并将其应用到新的创作中。Textual Inversion模型也可以找到代表特定未知风格的伪词。我们可以为模型提供一小组具有共享风格的图像,并用诸如“风格 S* 的绘画”之类的风格替换训练文本。应该指出的是,这与传统的风格转移方法不同。

概念合成

在这里插入图片描述
Textual Inversion还可用于组合合成,其中在指导文本中使用多个学习的概念。可以看出,该模型可以同时对多个新概念或伪词进行推理。但它未能将两个概念并列放置。造成这种情况的原因可能是训练样本仅包含来自单个概念的图像。

偏差减少

在这里插入图片描述

从文本到图像生成的图像由于用于训练它们的训练数据而存在偏差。因此,这些偏差也可以在生成的样本中看到,如图 9 所示。可以看出,Textual Inversion可以通过合并更具包容性的数据集来减少训练数据集中的偏差,从而产生更具包容性的生成。

下游应用

在这里插入图片描述
Textual Inversion生成的伪词也可以用于构建LDMs上的下游模型。例如,Blended Latent Diffusion,其中可以通过基于掩模的混合过程来完成基于本地文本的图像编辑,可以与学习的伪词一起进行调节,而不需要对原始模型进行太多改变。

Textual Inversion的概念很重要,原因有以下两个:

  • 我们可以通过在自然语言指令的指导下合成用户提供的概念的新颖场景来生成个性化文本到图像。
  • 生成模型背景下的“Textual Inversion”的想法旨在在文本编码器的嵌入空间中找到新的伪词,该伪词可以捕获新概念的高级语义和精细视觉细节。

注: 博文中的大部分图片均取自原始论文。

参考

  • Gal, R., Alaluf, Y., Atzmon, Y., Patashnik, O., Bermano, A. H., Chechik, G., & Cohen-Or, D. (2022). An image is worth one word: Personalizing text-to-image generation using textual inversion. arXiv preprint arXiv:2208.01618.
  • https://huggingface.co/docs/diffusers/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

设计模式——中介者模式

引言 中介者模式是一种行为设计模式, 能让你减少对象之间混乱无序的依赖关系。 该模式会限制对象之间的直接交互, 迫使它们通过一个中介者对象进行合作。 问题 假如你有一个创建和修改客户资料的对话框, 它由各种控件组成, 例如…

音频I2S

前言 基于网上资料对相关概念做整理汇总,部分内容引用自文后文章。 学习目标:简单了解相关概念、相关协议。 1 概述 数字音频接口DAI,即Digital Audio Interfaces,顾名思义,DAI表示在板级或板间传输数字音频信…

结构型设计模式(二)装饰器模式 适配器模式

装饰器模式 Decorator 1、什么是装饰器模式 装饰器模式允许通过将对象放入特殊的包装对象中来为原始对象添加新的行为。这种模式是一种结构型模式,因为它通过改变结构来改变被装饰对象的行为。它涉及到一组装饰器类,这些类用来包装具体组件。 2、为什…

带PWM 调光的线性降压 LED 恒流驱动器

一、基本概述 TX6410B是一种带 PWM 调光功能的线性降压 LED 恒流驱动器,仅需外接一个电阻就可以构成一个完整的 LED 恒流驱动电路,调节该外接电阻可调节输出电流,输出电流范围为 10~2000mA。TX6410B内置 30V 50 毫欧 MOS。TX6410B内置过热保…

机器学习 | 决策树 Decision Tree

—— 分而治之,逐个击破 把特征空间划分区域 每个区域拟合简单模型 分级分类决策 1、核心思想和原理 举例: 特征选择、节点分类、阈值确定 2、信息嫡 熵本身代表不确定性,是不确定性的一种度量。 熵越大,不确定性越高,…

IDEA2023 + spring cloud 工程热部署设置方法

基于spring cloud 工程进行热部署 &#xff0c;实现每次修改工程源文件&#xff0c;后台自动启动&#xff0c;方便开发测试工作。具体分为5步骤即可&#xff1a; 1、修改工程的pom文件&#xff0c;增加adding devtools 工具包。 <dependency> <groupId>org.s…

olap/clickhouse-编译器优化与向量化

本文主要结合15721和clickhouse源码来聊聊向量化&#xff0c;正好我最近也在用Eigen做算子加速&#xff0c;了解下还是有好处的。 提示编译器 提示编译器而不是复杂化简单的代码 什么时候使用汇编&#xff0c;什么时候使用SIMD&#xff1f;下面有几个基本原则&#xff1a; …

用23种设计模式打造一个cocos creator的游戏框架----(十九)备忘录模式

1、模式标准 模式名称&#xff1a;备忘录模式 模式分类&#xff1a;行为型 模式意图&#xff1a;在不破坏封装性的前提下捕获一个对象的内部状态&#xff0c;并在对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态 结构图&#xff1a; 适用于&#xff1a; …

DMA传输中的中断处理在STM32中的应用

DMA&#xff08;Direct Memory Access&#xff09;是一种在数字系统中进行数据传输的技术&#xff0c;它可以在不依赖CPU的情况下直接从内存中读取或写入数据。在STM32微控制器中&#xff0c;DMA控制器可以与外设进行数据传输&#xff0c;减轻了CPU的负担&#xff0c;提高了数据…

DFT音频还原及降噪实战

傅里叶变换与信息隐写术(二) 声音数据 ​ 声音可以用连续的波形来表示 ​ 声音在计算机中的存储是离散的 ​ 计算机中存储的是声音的几个采样点的数据&#xff0c;1 秒钟采样 5 个点就表示采样频率是 5 Hz&#xff08;每隔 0.25 秒取一个点&#xff0c;注意第 0 秒也取&#…

python:import自定义包或py文件时,pyCharm正常但终端运行提示ModuleNotFoundError: No module named错误

问题 示例项目引用items.py&#xff0c;项目在pycharm开发工具中可以正常运行&#xff0c;但使用终端直接运行会报错ModuleNotFoundError: No module named。如下图。 原因 pycharm开发工具运行正常&#xff0c;说明目录和引用模块是没问题的。问题在于终端的运行环境只搜索文…

链表基础知识(二、双向链表头插、尾插、头删、尾删、查找、删除、插入)

目录 一、双向链表的概念 二、 双向链表的优缺点分析​与对比 2.1双向链表特点&#xff1a; 2.2双链表的优劣&#xff1a; 2.3循环链表的优劣 2.4 顺序表和双向链表的优缺点分析​ 三、带头双向循环链表增删改查实现 3.1SList.c 3.2创建一个新节点、头节点 3.3头插 3.…

手拉手EasyExcel极简实现web上传下载(全栈)

环境介绍 技术栈 springbootmybatis-plusmysqleasyexcel 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性…

华为鸿蒙应用--欢迎页SplashPage+倒计时跳过(自适应手机和平板)-ArkTs

鸿蒙ArkTS 开发欢迎页SplashPage倒计时跳过&#xff0c;可自适应平板和手机&#xff1a; 一、SplashPage.ts import { BreakpointSystem, BreakPointType, Logger, PageConstants, StyleConstants } from ohos/common; import router from ohos.router;Entry Component struct…

数据结构之<树>的介绍

树的基本概念 在数据结构中&#xff0c;树&#xff08;Tree&#xff09;是一种层次结构&#xff0c;由节点和边组成。树的基本概念包括根节点、子节点、父节点、兄弟节点等。节点拥有零个或多个子节点&#xff0c;除了根节点外&#xff0c;每个节点有且仅有一个父节点。树的层…

数据结构-猴子吃桃问题

一、需求分析 有一群猴子摘了一堆桃子&#xff0c;他们每天都吃当前桃子的一半且再多吃一个&#xff0c;到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求&#xff1a; 1)采用数组数据结构实现上述求解&#xff1b; 2)采用链数据结构实现上述…

13、Kafka副本机制详解

Kafka 副本机制详解 1、副本定义2、副本角色3、In-sync Replicas&#xff08;ISR&#xff09;4、Unclean 领导者选举&#xff08;Unclean Leader Election&#xff09; 所谓的副本机制&#xff08;Replication&#xff09;&#xff0c;也可以称之为备份机制&#xff0c;通常是指…

离线编译安装opencv库及多版本切换[ubuntu]

系统版本&#xff1a;ubuntu18.04 库版本&#xff1a;opencv4.6.0 & opencv3.6.0 一、多版本安装前准备 1. 卸载已经安装的opencv版本[可选] 1.1 卸载从软件仓库中安装的opencv sudo apt-get purge libopencv* 1.2 卸载使用source自行编译安装的opencv 首先进入原先编译…

人生感悟 | 又是一年,眼看要2024了

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; 刚过完大雪节气没两天&#xff0c;气温开始急转直下&#xff0c;走在路上明显感觉冷了许多。看天气预报很多地区已经开始下雪了。 看日历已经12月9号了&#xff0c;12月份&#xff0c;一年的最后一个月&#xff0c;2…

自然语言处理阅读第二弹

HuggingFace 镜像网站模型库 NLP中的自回归模型和自编码模型 自回归&#xff1a;根据上文内容预测下一个可能的单词&#xff0c;或者根据下文预测上一个可能的单词。只能利用上文或者下文的信息&#xff0c;不能同时利用上文和下文的信息。自编码&#xff1a;对输入的句子随…