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

Prompt-to-Prompt:基于 cross-attention 控制的图像编辑技术

Hertz A, Mokady R, Tenenbaum J, et al. Prompt-to-prompt image editing with cross attention control[J]. arXiv preprint arXiv:2208.01626, 2022.

Prompt-to-Prompt 是 Google 提出的一种全新的图像编辑方法,不同于任何传统方法需要用户指定编辑区域,Prompt-to-Prompt 只需要用户对 prompt 文本进行编辑,就能获得图像编辑的直观体验。并且 Prompt-to-Prompt 基于预训练的 Latent Diffusion 或 Stable Diffusion,不需要任何训练或微调,可以直接拿来做编辑任务。

Prompt-to-Prompt 所做的任务是根据编辑指令进行图像编辑,保证了编辑不对图像产生大的变动。具体方法是通过在 diffusion 模型的扩散过程中注入 cross-attention maps,来控制 pixels 在扩散过程中关注 prompt 文本的 tokens,从而编辑图像。Cross-attention 层是联系图像空间布局、几何形状和 prompt 文本中 tokens 的关键,这也是本文的一个重要创新。

目录

  • 一. 研究思路
  • 二. Cross-Attention 控制
    • 1. Replacement
    • 2. Refinement
    • 3. Re-weight
  • 三. 编辑图像生成
    • 1. Replacement
    • 2. Refinement
    • 3. Re-weight
  • 四. 应用
  • 五. 总结
  • 六. 复现

一. 研究思路

在图像编辑方法出来之前,想要修改图像都是通过 ⌈ \lceil 遮盖 + 修改 ⌋ \rfloor 的方法进行的,这种局部修改方法比较慢,而且遮盖还会丢失关键信息。但要想直接对图像进行编辑,又有一个相当棘手的问题,就是任何输入文本的微小变动都可能使模型生成的图像发生巨大的改变,而图像编辑需要尽可能保持原有图像。

于是文中提出了一种 Prompt-to-Prompt 方法,使用基于文本的预训练 diffusion 模型,通过调整模型生成图像过程中的 cross-attention maps,从而保证在尽可能保持原有图像的空间布局和几何外观的情况下实现图像编辑。

Prompt-to-Prompt 主要适用于以下三种任务:

  • Word Swap:替换文本中的某个单词,也称为 Replacement;
  • Adding a New Phrase:增加一段新的描述以改变图像风格或增加图像细节,也称为 Refinement;
  • Attention Re–weighting:增强或减弱某个单词(一般是形容词)在图像中的作用效果,也称为 Re-weight;

在这里插入图片描述

Our approach constitutes an intuitive image editing interface through editing only the textual prompt, therefore called Prompt-to-Prompt. This method enables various editing tasks, which are challenging otherwise, and does not requires model training, fine-tuning, extra data, or optimization. Throughout our analysis, we discover even more control over the generation process, recognizing a trade-off between the fidelity to the edited prompt and the source image. We even demonstrate that our method can be applied to real images
by using an existing inversion process. Our experiments and numerous results show that our method enables seamless editing in an intuitive text-based manner over extremely diverse images.

二. Cross-Attention 控制

cross-attention 层是控制图像空间布局 (spatial layout) 和 prompt 中分词 (token) 关系的关键,高维张量 cross-attention maps 可以在 pixels 和 tokens 间建立连接。以 text-conditioned diffusion 的一次图像生成过程为例,pixels 和 tokens 间的联系如下:
在这里插入图片描述

所以 Prompt-to-Prompt 通过在扩散过程向预训练模型中注入特定的 cross-attention maps,能够使得一些 pixels 去匹配对应的 tokens。为了维持原始图像的空间布局与几何形状,可以在生成编辑图像的过程中向 cross-attention maps 中注入原始图像的特定 cross-attention maps。

在这里插入图片描述

1. Replacement

当想要替换文本中的某个单词时,用原始图像的 cross-attention maps M t M_t Mt 替换目标图像的 cross-attention maps M t ∗ M_t^* Mt,这样就可以在维持原始图像空间布局的情况下表示新的语义。

2. Refinement

当想要增加描述时,就将原始文本中没有改变的 token 对应的 M t M_t Mt 部分注入 M t ∗ M_t^* Mt,这样就可以在维持原始图像空间布局的情况下编辑图像细节或风格。

3. Re-weight

当想要增强或减弱某个单词在图像中的作用效果时,只需要调整 cross-attention maps 中 token 对应部分的权重即可。

三. 编辑图像生成

Prompt-to-Prompt 使用基于文本的预训练 diffusion 模型,通过调整模型生成图像过程中的 cross-attention maps,以实现图像编辑。所以 Prompt-to-Prompt 不需要对模型进行训练或微调,也不需要任何训练数据,用户只需要编辑 prompt 文本,就可以直观得体验图像编辑。

记原始图像为 I \mathcal I I,原始 prompt 文本为 P \mathcal P P,编辑后图像为 I ∗ \mathcal I^* I,编辑后 prompt 文本为 P ∗ \mathcal P^* P,随机种子为 s s s D M ( z t , P , t , s ) DM(z_t, \mathcal P, t,s) DM(zt,P,t,s) 表示 t t t 时刻的逆扩散过程,输出隐空间的噪声图像 z t − 1 z_{t-1} zt1 和 cross-attention map M t M_t Mt D M ( z t , P , t , s ) { M ← M ^ } DM(z_t, \mathcal P, t,s)\{M \leftarrow \widehat M\} DM(zt,P,t,s){MM } 表示替换该步骤中的 M M M M ^ \widehat M M E d i t ( M t , M t ∗ , t ) Edit(M_t, M_t^*, t) Edit(Mt,Mt,t) 表示 t t t 时刻的 cross-attention map 是 M t M_t Mt M t ∗ M_t^* Mt

生成编辑图像时,同时使用 diffusion 模型分别对 P \mathcal P P P ∗ \mathcal P^* P 进行图像生成,然后将 P \mathcal P P 生成图像过程中的 M t M_t Mt 注入 M t ∗ M_t^* Mt 得到新的 cross-attention map M ^ \widehat M M ,最后再用 M ^ \widehat M M 生成新的 z t − 1 ∗ z_{t-1}^* zt1 用于下一轮迭代:
在这里插入图片描述

1. Replacement

之前忽略了一个问题就是用原始图像的 M t M_t Mt 替换目标图像的 M t ∗ M_t^* Mt 必须有所节制,不然会导致 prompt 中新加的 token 语义无法显现。因此在扩散过程中设置时间节点 τ \tau τ τ \tau τ 之前按 M t ∗ M_t^* Mt 生成编辑图像,之后再注入 M t M_t Mt,因此有:
E d i t ( M t , M t ∗ , t ) = { M t ∗ t < τ M t o t h e r w i s e Edit(M_t, M_t^*, t)= \begin{cases} M_t^* & t<\tau \\ M_t & otherwise \\ \end{cases} Edit(Mt,Mt,t)={MtMtt<τotherwise

个人认为这里应该倒过来写,因为逆扩散时 t t t 的取值是从大到小的。

因此图像的生成过程应该是一开始只表示编辑后的语义但没能维持原有图像的空间布局和几何状态,后来逐渐收敛到原有图像的形状:
在这里插入图片描述

2. Refinement

增加一段新的描述时只需要对 P \mathcal P P P ∗ \mathcal P^* P 中共有的 token 进行 cross-attention map 注入。使用对齐函数 A A A 输入 P ∗ \mathcal P^* P 中 token 的索引,输出对应 P \mathcal P P 中 token 的索引;如果没有对应则输出 None。因此有:
( E d i t ( M t , M t ∗ , t ) ) i , j = { ( M t ∗ ) i , j A ( j ) = N o n e ( M t ) i , A ( j ) o t h e r w i s e (Edit(M_t, M_t^*, t))_{i,j}= \begin{cases} (M_t^*)_{i,j} & A(j)=None \\ (M_t)_{i,A(j)} & otherwise \\ \end{cases} (Edit(Mt,Mt,t))i,j={(Mt)i,j(Mt)i,A(j)A(j)=Noneotherwise

Adding a New Phrase 可以增加图像细节或是改变风格:
在这里插入图片描述

3. Re-weight

要想增强或减弱某个单词在图像中的作用效果,只需要给该 token 对应的 cross-attention map 乘上参数 c ∈ [ − 2 , 2 ] c \in [-2,2] c[2,2],其余 token 的 cross-attention map 保持不变。因此有:
( E d i t ( M t , M t ∗ , t ) ) i , j = { c ⋅ ( M t ) i , j j = j ∗ ( M t ) i , j o t h e r w i s e (Edit(M_t, M_t^*, t))_{i,j}= \begin{cases} c \cdot (M_t)_{i,j} & j=j^* \\ (M_t)_{i,j} & otherwise \\ \end{cases} (Edit(Mt,Mt,t))i,j={c(Mt)i,j(Mt)i,jj=jotherwise

Attention Re–weighting 可以控制 prompt 中某些形容词的作用效果:
在这里插入图片描述

四. 应用

见 【AIGC第六篇】Prompt-to-Prompt:基于cross-attention控制的图像编辑技术。

五. 总结

Prompt-to-Prompt 最主要的贡献就是发现了 text-conditioned diffusion 模型中 cross-attention 的强大功能,能够控制图像的空间布局和 prompt 文本中每个 token 之间的交互。通过 cross-attention maps 注入,Prompt-to-Prompt 提出了三种编辑方法:Replacement、Refinement、Re-weight,在实际应用中都实现了令人满意的效果。

六. 复现

Prompt-to-Prompt 基于 Latent Diffusion 或 Stable Diffusion,使用时需要提供 HuggingFace 访问私有模型的身份验证令牌,demo 如下:

  • prompt-to-prompt_stable.ipynb;
  • prompt-to-prompt_ldm.ipynb;

相关文章:

Prompt-to-Prompt:基于 cross-attention 控制的图像编辑技术

Hertz A, Mokady R, Tenenbaum J, et al. Prompt-to-prompt image editing with cross attention control[J]. arXiv preprint arXiv:2208.01626, 2022. Prompt-to-Prompt 是 Google 提出的一种全新的图像编辑方法&#xff0c;不同于任何传统方法需要用户指定编辑区域&#xff…...

搭载紫光展锐芯的移远通信RedCap模组顺利通过中国联通OPENLAB实验室认证

近日&#xff0c;移远通信联合紫光展锐在中国联通5G物联网OPENLAB开放实验室&#xff0c;完成了RedCap模组RG207U-CN端到端测试验收&#xff0c;并获颁认证证书。移远通信RG207U-CN成为业内率先通过联通OPENLAB认证的紫光展锐RedCap芯片平台的模组。 本次测试基于联通OPENLAB实…...

16-高并发-队列术

队列&#xff0c;在数据结构中是一种线性表&#xff0c;从一端插入数据&#xff0c;然后从另一端删除数据。 在我们的系统中&#xff0c;不是所有的处理都必须实时处理&#xff0c;不是所有的请求都必须实时反馈结果给用户&#xff0c;不是所有的请求都必须100%一次性处理成功…...

【设计模式-2.5】创建型——建造者模式

说明&#xff1a;本文介绍设计模式中&#xff0c;创建型设计模式中的最后一个&#xff0c;建造者模式&#xff1b; 入学报道 创建型模式&#xff0c;关注于对象的创建&#xff0c;建造者模式也不例外。假设现在有一个场景&#xff0c;高校开学&#xff0c;学生、教师、职工都…...

VideoPoet: Google的一种用于零样本视频生成的大型语言模型

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…...

pytest常用命令行参数

文章目录 一、前置说明二、操作步骤1. 命令行中执行:pytest2. 命令行中执行:pytest - v3. 命令行中执行:pytest -s4. 命令行中执行:pytest -k test_addition5. 命令行中执行:pytest -k test_pytest_command_params.py6. 命令行中执行:pytest -v -s -k test_pytest_comman…...

05. Springboot admin集成Actuator(一)

目录 1、前言 2、Actuator监控端点 2.1、健康检查 2.2、信息端点 2.3、环境信息 2.4、度量指标 2.5、日志文件查看 2.6、追踪信息 2.7、Beans信息 2.8、Mappings信息 3、快速使用 2.1、添加依赖 2.2、添加配置文件 2.3、启动程序 4、自定义端点Endpoint 5、自定…...

AI生成SolidUI-新版本架构调试Debug

背景 SolidUI 0.5.0 版本重构全新版本架构。 dev-python 新架构临时分支&#xff0c;架构调整完后&#xff0c;所有代码合并到dev分支 https://github.com/CloudOrc/SolidUI 使用 设置参数 FLASK_DEBUG 设置 在开发过程中&#xff0c;Web框架的服务器通常会监视代码的变…...

ctfshow sql 195-200

195 堆叠注入 十六进制 if(preg_match(/ |\*|\x09|\x0a|\x0b|\x0c|\x0d|\xa0|\x00|\#|\x23|\|\"|select|union|or|and|\x26|\x7c|file|into/i, $username)){$ret[msg]用户名非法;die(json_encode($ret));}可以看到没被过滤&#xff0c;select 空格 被过滤了&#xff0c;可…...

微信小程序实现地图功能(腾讯地图)

微信小程序实现地图功能(腾讯地图) 主要功能 通过微信 API 获取用户当前位置信息 使用腾讯地图 API 将经纬度转换为地址信息 显示当前位置信息以及周围的 POI&#xff08;兴趣点&#xff09; 代码实现 index.wxml <!-- index.wxml --> <view class"container&…...

Vue如何请求接口——axios请求

1、安装axios 在cmd或powershell打开文件后&#xff0c;输入下面的命令 npm install axios 可在项目框架中的package.json中查看是否&#xff1a; 二、引用axios import axios from axios 在需要使用的页面中引用 三、get方式使用 get请求使用params传参,本文只列举常用参数…...

【数据结构一】初始Java集合框架(前置知识)

Java中的数据结构 Java语言在设计之初有一个非常重要的理念便是&#xff1a;write once&#xff0c;run anywhere&#xff01;所以Java中的数据结构是已经被设计者封装好的了&#xff0c;我们只需要实例化出想使用的对象&#xff0c;便可以操作相应的数据结构了&#xff0c;本篇…...

直接将第三方数据插入到 Redis 中

Redis 是一个内存数据库&#xff0c;可以用于缓存和持久化数据。虽然常见的使用场景是将数据从关系型数据库&#xff08;如MySQL&#xff09;同步到 Redis 中进行缓存&#xff0c;但也可以直接将第三方数据插入到 Redis 中。 你可以通过编程语言的 Redis 客户端库&#xff08;…...

【重点】【DP】322.零钱兑换

题目 法1&#xff1a;动态规划 // 时间复杂度&#xff1a;O(kN) class Solution {public int coinChange(int[] coins, int amount) {int[] dp new int[amount 1];Arrays.fill(dp, amount 1);dp[0] 0;for (int i 1; i < dp.length; i) {for (int coin : coins) {if (…...

Python入门学习篇(六)——for循环while循环

1 for循环 1.1 常规for循环 1.1.1 语法结构 for 变量名 in 可迭代对象:# 遍历对象时执行的代码 else:# 当for循环全部正常运行完(没有报错和执行break)后执行的代码1.1.2 示例代码 print("----->学生检查系统<------") student_lists["张三",&qu…...

el-table 实现行拖拽排序

element ui 表格实现拖拽排序的功能&#xff0c;可以借助第三方插件Sortablejs来实现。 引入sortablejs npm install sortablejs --save组件中使用 import Sortable from sortablejs;<el-table ref"el-table":data"listData" row-key"id" …...

2. 结构型模式 - 桥接模式

亦称&#xff1a; Bridge 意图 桥接模式是一种结构型设计模式&#xff0c; 可将一个大类或一系列紧密相关的类拆分为抽象和实现两个独立的层次结构&#xff0c; 从而能在开发时分别使用 问题 抽象&#xff1f; 实现&#xff1f; 听上去挺吓人&#xff1f; 让我们慢慢来&#x…...

最小二乘法简介

最小二乘法简介 1、背景描述2、最小二乘法2.1、最小二乘准则2.2、最小二乘法 3、最小二乘法与线性回归3.1、最小二乘法与线性回归3.2、最小二乘法与最大似然估计 4、正态分布&#xff08;高斯分布&#xff09; 1、背景描述 在工程应用中&#xff0c;我们通常会用一组观测数据去…...

mathtype公式章节编号

1. word每章标题后插入章节符 如果插入后显示章节符&#xff0c;需要进行隐藏 开始->样式->MTEquationSection->修改样式->字体&#xff0c;勾选隐藏 2. 设置mathtype公式编号格式 插入编号->格式化->设置格式...

医学实验室检验科LIS信息系统源码

实验室信息管理是专为医院检验科设计的一套实验室信息管理系统&#xff0c;能将实验仪器与计算机组成网络&#xff0c;使病人样品登录、实验数据存取、报告审核、打印分发&#xff0c;实验数据统计分析等繁杂的操作过程实现了智能化、自动化和规范化管理。 实验室管理系统功能介…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

【Linux】C语言执行shell指令

在C语言中执行Shell指令 在C语言中&#xff0c;有几种方法可以执行Shell指令&#xff1a; 1. 使用system()函数 这是最简单的方法&#xff0c;包含在stdlib.h头文件中&#xff1a; #include <stdlib.h>int main() {system("ls -l"); // 执行ls -l命令retu…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)

可以使用Sqliteviz这个网站免费编写sql语句&#xff0c;它能够让用户直接在浏览器内练习SQL的语法&#xff0c;不需要安装任何软件。 链接如下&#xff1a; sqliteviz 注意&#xff1a; 在转写SQL语法时&#xff0c;关键字之间有一个特定的顺序&#xff0c;这个顺序会影响到…...

JDK 17 新特性

#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持&#xff0c;不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的&#xff…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...