直接用表征还是润色改写?LLM用于文生图prompt语义增强的两种范式

直接用表征还是润色改写?LLM用于文生图prompt语义增强的两种范式

导语

目前的文生图模型大多数都是使用 CLIP text encoder 作为 prompt 文本编码器。众所周知,由于训练数据是从网络上爬取的简单图文对,CLIP 只能理解简单语义,而无法理解复杂语法 。这导致生成的图片经常出现语义错误、属性绑定错误等问题。为了适配 CLIP 的简单语义的模式,现有的 Stable Diffusion 等生图模型的文本 prompt 也一般是宛如咒语一般的一组单词,而非正常的自然语言句子。现在的 LLM 大模型所擅长的正是复杂文本的语义理解,近来出现了一些工作使用 LLM 来对生图 prompt 进行润色改写或直接作为文生图模型的文本编码器,从而提高文生图模型对 prompt 的理解能力,并将 prompt 的语义在生图结果中更好地体现出来。

具体来说,目前使用 LLM 对文生图 prompt 进行语义增强的方法可以分为两种范式:一是使用 LLM 的文本生成能力对 prompt 进行改写、润色,使之适用于作为生图 prompt;二是直接将 LLM 的 hidden states 拿出来替换掉 CLIP 的 text embedding,作为条件通过交叉注意力注入到 UNet 生图过程中。本质上,这两类范式的区别就是语言模型与生图模型交互的交互媒介(interface)不同,关于这两类范式各自的优劣,将在文末讨论。

LaVi-Bridge

TL; DR:在 LLM 和 DM 中各自插入一些 LoRA,并在二者之间接一个 MLP。

方法

在 LLM 和 DM 中各自插入一些 LoRA,并在二者之间接一个 MLP。可以用于在各种 LLM 和 DM 之间适配。

在这里插入图片描述

总结

LaVi-Bridge 是比较简单直接的连接 LLM 和 DM 的做法。

ELLA

TL; DR:使用 LLM + Adapter 替换 CLIP text encoder 的简单语义 embedding,其中 LLM 和 Diffusion UNet、VAE 均冻结,仅训练 Adapter 部分。目前适用于 sd1.5 的模型已开源,但是训练代码和适用于 sdxl 的模型预计不会开源 (issue link)。

方法
  • 网络结构:提出了一种不同时间步不同的网络结构 TSC (Timestep-aware Semantic Connector)。实际上是用的 Flamingo 中的 Resampler,从而支持对于任意长度的文本输入,输出固定长度的 query token。另外,考虑到在不同的时间步,模型生成的重点不同(比如在前期确定整体构图布局,后期是增加更多细节),所以本文在 Adapter 上加入了 timestep embedding,从而使得 Adapter 能感知当前所处的时间步,来输出不同的 query token。将 LLM 的最后一层 hidden states 作为 TSC Adapter 的输入,然后 TSC Adapter 的输出通过交叉注意力作为条件注入到 UNet 中。
  • 训练数据:由于 web 上的图文对训练数据质量较差,本文使用 CogVLM 在筛选的图片上生成复杂文本描述。图片筛选条件包括美学分和最小分辨率等。
  • 新基准:本文还提出了一个复杂 prompt 信息文生图的 benchmark:DPG-Bench。

在这里插入图片描述

效果展示

ELLA 展示出的效果还是非常不错的,可以看到相比于 SDXL 和 DALL-E 3,ELLA 对 prompt 的理解都更好,对于复杂的物体关系、物体属性,都在生图结果中有正确的体现。

在这里插入图片描述

总结

使用 LLM 代替 CLIP 提供语义更完善准确的文本 embedding,虽然需要进行训练,但是 ELLA 的方案看起来是比较简洁的。但是比较可惜 ELLA-SDXL 不开源。

RPG Master

TL; DR:本文提出 RPG 生图框架,通过利用 LLM 的 CoT 推理能力,来对复杂的生图 prompt 进行拆解,将复杂图像的生成拆分为多个子区域的生成。并集成了文本生成和图像编辑,最后通过互补区域扩散,将全局 prompt 和各个区域 prompt 结合起来,完成最终生图。


方法

现有的文生图方法在面对包含多个物体,多种属性的复杂生图 prompt 时,经常出现属性绑定错落的情况。RPG 方法的三个字母,指的分别是 Recaption、Plan 和 Generate,这是本方法的三个步骤,通过 LLM 的复杂文本理解能力,对原 prompt 进行重写和分区域规划,再用互补区域采样生成完整图片。整体流程如下图所示。

在这里插入图片描述

  1. Recaption 是根据用户的复杂 prompt(本文中也作为 base prompt),由 (M)LLM 识别出其中的实体并对每个实体重写一个 prompt。注意根据实体的属性、数目等,会有特定的切分策略,避免多种属性落到同一区域内导致混乱;
  2. Plan 是根据 base prompt 和各实体的 prompt,进行计划划分,将不同实体分配到图像的各个区域,并按照指定的格式输出区域切分的长宽比和
  3. Generate 阶段,作者使用了一种新的多区域采样方法 CRD(Complementary Regional Diffusion)(如下图所示),base prompt 和各区域 prompt 各自进行正常的生成,最后将各区域的 latent 进行缩放并按位置拼接,得到一整张图的区域 latent,再与 base prompt 的全局 latent 计算加权和,解码得到最终图像。

在这里插入图片描述

另外,RPG 还支持使用多模态大模型(MLLM)结合文本 prompt 和此前的生图结果进行闭环迭代式的 prompt 图像编辑(流程见下图)。MLLM 同时接收编辑修改后的 prompt 和此前的生图结果,将二者的实体进行对照,根据二者差异进行 Add / Del / Mod 三种类型的修改,重新进行 Recaption、Plan、Generate 三个步骤,实现图像编辑。

在这里插入图片描述

效果展示

RPG 的效果展示如下图,可以看到,在面对多个物体、多种属性的复杂 prompt (如上方例子中的冰山、火山、村庄、滑雪、游玩等)时,利用 LLM 在不同区域生成对应的 prompt 并各自采样,RPG 可以将 prompt 中描述的物体和属性的对应关系正确地体现出来,而 SDXL 和 DALL-E 3 则出现了或是出现了属性缺失,或是出现了属性错乱的现象。

在这里插入图片描述

总结

RPG 中核心问题的解决方式就是利用 LLM 的推理能力,来对复杂 prompt 进行重写和分区域规划。因此该方法能否 work 的关键就在于所谓的 MLLM’s powerful reasoning ability 到底有没有那么 powerful。在实测中貌似许多 (M)LLM 对指令的理解能力和 reasoning 能力并不足以稳定的进行 recaptioning 和 planning。而且这个 instruct prompt 看起来也需要非常复杂详尽,不太好写。不过 RPG 是 training-free 的,这点比较好。

SUR-Adapter

TL; DR:构建简单 prompt、复杂 prompt、高质量图片三元组数据集,训练一个新增的 Adapter,蒸馏 LLM 从简单 prompt 到复杂 prompt 的扩写能力。


方法

上面的 RPG 解决的是 prompt 过于复杂,导致生图结果中物体属性混乱的问题,这里的 SUR-Adapter 解决的则是 prompt 过于简单,生图结果中细节太少,整体质量较差的问题。RPG 将复杂 prompt 进行改写拆分,分区域单独生成,避免属性混乱,而 SUR-Adapter 则是将简单 prompt 进行语义增强扩充,使得文生图模型能够得到细节更丰富的结果。

首先,作者构建了一个 SURD (Semantic Understanding and Reasoning Dataset)数据集:在 lexica、C 站、sd web 网站上收集高质量图片及其详细、复杂 prompt 的 pair,然后用 blip 生成该图片的简单 prompt,组成简单 prompt、复杂 prompt、高质量图片的三元组数据。经过清洗,最终共收集了 57000+ 样本。

在这里插入图片描述

然后,作者在预训练的文生图模型中加入了一个 Adapter(具体结构如下图所示),用于学习将简单 prompt 的文本特征优化对齐到复杂 prompt 的文本特征,这中间蒸馏 LLM 的理解、推理能力,来进行学习。具体来说,Adapter 的训练需要三个训练目标来驱动。

1 蒸馏 LLM 的理解推理能力

首先是要蒸馏学习 LLM 的理解、推理能力,学会从简单 prompt 到复杂 prompt 的扩写。将简单 prompt 分别输入到 LLM 和 text-encoder + adapter 中,最小化二者得到 embedding 的 KL 散度。

2 维持生图模型的原有生图能力

为了避免微调 adapter 过程中对原生图模型的生图能力有损害,第二个训练目标是常规扩散模型的去噪训练。值得注意的是,这里的用的文本 embedding 是 LLM 和 text-encoder + adapter 二者对简单 prompt 提取的文本 embedding 的加权和。

3 对齐简单 prompt 和复杂 prompt 的表征

对齐 2 中实际输入 UNet 的加权文本 embedding 与 text encoder 对复杂 prompt 的表征结果,最小化二者的 KL 散度。

在这里插入图片描述

效果展示

下图左侧展示了 CLIP text encoder 在多物体计数和多物体色彩绑定情况下出的问题,右侧分别展示了文生图模型在复杂 prompt、简单 prompt 和本文方法对简单 prompt 进行增强的情况下的生图结果。可以看到,仅使用简单 prompt 时,生图的细节确实比较单薄,而使用复杂 prompt 或本文增强的 prompt,细节明显更加丰富。

在这里插入图片描述

总结

也属于利用 LLM hidden states 表征能力的方法,搞得比较花哨。相当于学习 LLM 对简单 prompt 的扩写、细节丰富的能力。

整体总结

直接用表征还是润色改写?这是目前 LLM 用于文生图 prompt 语义增强的两种范式。

润色改写的代表方法是 RPG。这类方法优点是利用 LLM 本身的生成能力,不需要额外训练,缺点是比较依赖 (M)LLM 强大的指令跟随和语义理解能力,并且 LLM instruct prompt 的设计需要比较复杂详尽。如果 (M)LLM 能力不够强或 LLM instruct prompt 写得不好,很难稳定地生成高质量的结果。

直接用表征的方法比较多,LLaVi-Bridge、ELLA、SUR-Adapter 都属于这类方法。这类方法将 LLM 作为一个强大的文本表征模型,直接使用 LLM 的 hidden states 替换 CLIP 的 text embedding,都需要引入额外的 adapter 并进行训练。但是不需要设计 LLM instruct prompt,训练后的出图效果一般也比较稳定。但笔者一直有一个疑惑就是 LLM 这类预测下一个 token 的自回归模型用作表征模型的效率到底如何,以及为什么 LLM 的 hidden states 就比 CLIP 的 text embedding 的语义表征能力更强?

本质上,这两类范式的区别就是语言模型与生图模型交互的交互媒介(interface)不同。前者是使用 embedding 作为交互媒介,后者则是使用自然语言。直觉上来说,以 embedding 作为交互媒介似乎是更符合深度学习时代的做法。但是,最近的也有工作(如 De-Diffusion)指出了大模型/AIGC时代自然语言作为交互媒介的优势:灵活性和可解释性。以自然语言作为 interface,我们就能无缝地对接各类 LLMs、Diffusion Models,而不需要任何额外训练。这在介绍上述各方法时也有体现,只有以自然语言为媒介的 RPG 是不需要额外微调的。另外,自然语言可以直接被人类阅读,可解释性也大大增强。也可以引入人工参与,手动修改中间的 prompt。

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

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

相关文章

拿捏 顺序表(1)

目录 1. 顺序表的分类2. 顺序表实现3. 顺序表实现完整代码4. 总结 前言: 一天xxx想存储一组数据, 并且能够轻松的实现删除和增加, 此时数组大胆站出, 但是每次都需要遍历一遍数组, 来确定已经存储的元素个数, 太麻烦了, 于是迎来了顺序表不屑的调侃: 数组你不行啊… 顺序表是一…

第二期书生浦语大模型训练营第四次笔记

大模型微调技术 大模型微调是一种通过在预训练模型的基础上,有针对性地微调部分参数以适应特定任务需求的方法。 微调预训练模型的方法 微调所有层:将预训练模型的所有层都参与微调,以适应新的任务。 微调顶层:只微调预训练模型…

oracle 12c+ max_string_size参数

一个客户的数据库版本是19.3,在做数据库复制的时候,目标端报错了,查看了一下问题发现表的字段长度有不对,在12c以前我们都知道varchar的长度最大是4000,但是客户这里居然有32767: 把客户的建表语句弄出来,放到我的一个19c的测试环境进行测试: 发现报错了: 这里报错很明显了,是M…

学习c语音的自我感受

因为是自学,所以走过不少弯路。去年,受知乎“python性能弱”风潮的影响,学过go,rust。 在学习这些新语言的时候,由衷感受到,或是本身侧重方向的原因(如go侧重服务器),或是语言太新不…

uniapp——组件多颜色模块展示、气泡框

一、自定义颜色&#xff1a; 样式 代码 <template><view class"content"><!-- 右上角 --><view class"coverStatus" :class"[itemClass, positionClass,cornerClass,sanJiaoCss,sanJiaoCss2]":style"dynamicStyle&q…

python getsize如何使用

第一步&#xff0c;点击键盘 winr&#xff0c;打开运行窗口&#xff1b;在窗口中输入“cmd"&#xff0c;点击确定&#xff0c;打开windows命令行窗口。 第二步&#xff0c;在windows命令行窗口中&#xff0c;输入“python”&#xff0c;进入python交互窗口。 第三步&#…

笔记 | 嵌入式系统概论

1 嵌入式系统简介 1.1 嵌入式系统的定义 根据美国电气与电子工程师学会&#xff08;IEEE&#xff1a;Institute of Electrical and Electronics Engineers )的定义&#xff0c;嵌入式系统是用于控制、监视或辅助操作机器和设备的装置(原文: devices used to control, monitor…

WiFi、Ethenet、4G优先级切换

1、多网卡情况下如何调整优先级方案 按照目前公司前辈给出的方案&#xff0c;调整优先级的手段有两种&#xff1a; <1>.删除默认路由--route del 的方法 <2>.ifmetric源码提供的修改路由表的mteric的值来设置路由的优先级&#xff0c;metric越小优先级越高。 应…

ANSYS Help 的使用

ANSYS 帮助文档是相当实用且重要的第一手资料&#xff0c;90% 以上的纯操作问题都可以在帮助文档找到相关的解释。 点击开始菜单的 ANSYS Help即可打开帮助文档 帮助文档有两种打开方式&#xff1a; 基于帮助文档的安装包安装于本地后&#xff0c;可直接启动帮助程序没有安装…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描&#xff0c;Spring 会自动从扫描指定的包及其子包下的所有类&#xff0c;并根据类上的特定注解将该类装配到容器中&#xff0c;而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

书生·浦语大模型实战营之Llama 3 高效部署实践(LMDeploy 版)

书生浦语大模型实战营之Llama 3 高效部署实践&#xff08;LMDeploy 版&#xff09; 环境&#xff0c;模型准备LMDeploy chatTurmind和Transformer的速度对比LMDeploy模型量化(lite)LMDeploy服务(serve) 环境&#xff0c;模型准备 InternStudio 可以直接使用 studio-conda -t …

机器学习运用-民宿价格

项目简介 随着旅游业的蓬勃发展&#xff0c;民宿市场迎来了前所未有的增长机遇。正好最近在参加拓尔思数据挖掘公益实习活动&#xff0c;我的项目将应用机器学习技术开发一个价格预测模型。可以达到更好地理解和预测民宿价格的目的&#xff0c;该模型综合考虑了从容纳人数、便…

【Python】Python函数的黑魔法:递归,嵌套函数与装饰器

欢迎来到CILMY23的博客 本篇主题为&#xff1a; Python函数的黑魔法&#xff1a;递归&#xff0c;嵌套函数与装饰器 个人主页&#xff1a;CILMY23-CSDN博客 系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 感谢观看&#xff0c;支持的可以给个一键三连&#xff…

基于51单片机的矩阵按键扫描的proteus仿真

文章目录 一、按键按键按键消抖 二、独立按键仿真图仿真程序 三、矩阵按键仿真图仿真程序 四、总结 一、按键 按键 按键通常指的是电子设备上的一种输入装置&#xff0c;用于在按下时发送信号&#xff0c;以便设备执行相应的操作。按键可以分为独立按键和矩阵按键两种类型。 …

TRIZ理论下攀爬机器人的创新设计与研究

随着科技的飞速发展&#xff0c;机器人技术已广泛应用于各个领域。特别是在复杂环境下的作业&#xff0c;如灾难救援、太空探测等&#xff0c;对机器人的移动能力和适应性提出了更高要求。在这样的背景下&#xff0c;基于TRIZ理论的攀爬机器人设计与研究应运而生&#xff0c;它…

简单的图像处理算法

本笔记参考crazy_Bingo 基础&#xff1a; 图像处理都是用卷积矩阵对图像卷积计算&#xff0c;如3X3 的矩阵对640 X 480分辨率的图像卷积&#xff0c;最终会得到638 X 478 的图像。卷积过程是这样的&#xff1a; 一、中值滤波 &#xff1a; 找出矩阵中的最中间值作为像素点 中…

Flink的安装、项目创建、任务打包和部署完整实现,任务实现使用JAVA语言

Flink资源下载地址 Flink安装包下载地址 一、本地模式安装Flink 1、在Linux服务上&#xff0c;创建flink文件夹 mkdir flink 2、上传文件并解压 tar -zxvf flink-1.14.6-bin-scala_2.11.tgz 解压完成后&#xff0c;如图&#xff1a; 3、启动Flink 进入到解压目录下&#x…

YOLOv9训练损失、精度、mAP绘图功能 | 支持多结果对比,多结果绘在一个图片(消融实验、科研必备)

一、本文介绍 本文给大家带来的是YOLOv9系列的绘图功能&#xff0c;我将向大家介绍YOLO系列的绘图功能。我们在进行实验时&#xff0c;经常需要比较多个结果&#xff0c;针对这一问题&#xff0c;我写了点代码来解决这个问题&#xff0c;它可以根据训练结果绘制损失(loss)和mA…

Java的八大基本数据类型和 println 的介绍

前言 如果你有C语言的基础&#xff0c;这部分内容就会很简单&#xff0c;但是会有所不同~~ 这是我将要提到的八大基本数据类型&#xff1a; 注意&#xff0c;Java的数据类型是有符号的&#xff01;&#xff01;&#xff01;和C语言不同&#xff0c;Java不存在无符号的数据。 整…

Day:动态规划 LeedCode 123.买卖股票的最佳时机III 188.买卖股票的最佳时机IV

123. 买卖股票的最佳时机 III 给定一个数组&#xff0c;它的第 i 个元素是一支给定的股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。 注意&#xff1a;你不能同时参与多笔交易&#xff08;你必须在再次购买前出售掉之前的股票&a…