Prompt-to-Prompt Image Editing with Cross Attention Control
Prompt-to-Prompt Image Editing with Cross Attention Control (P2P)
Amir Hertz, Tel Aviv University, ICLR23, Paper, Code
1. 前言
编辑对这些生成模型来说是具有挑战性的,因为编辑技术的一个固有特性是保留大部分原始图像,而在基于文本的模型中,即使对文本提示进行微小修改,也往往会导致完全不同的结果。现有技术的方法通过要求用户提供空间掩模来定位编辑,从而忽略掩模区域内的原始结构和内容来减轻这种情况。在本文中,我们追求一个直观的示编辑框架,其中编辑仅由文本控制。为此,我们深入分析了一个文本条件模型,并观察到交叉注意力层是控制图像空间布局与提示中每个单词之间关系的关键。根据这一观察结果,我们提出了几个仅通过编辑文本提示来监控图像合成的应用程序。这包括通过替换单词进行本地化编辑,通过添加规范进行全局编辑,甚至精细地控制单词在图像中的反映程度。我们在不同的图像和提示上展示了我们的结果,展示了高质量的合成和对编辑提示的逼真度。
2. 整体思想
通常U-Net结构用Cross-Attention接入文本,再细致一点是Q来自扩散模型,K和V来自文本Prompt。在Cross-Attention中,细微的语义改变可能对采样有很大影响。本文希望固定背景和布局的语义,细微调整特定文字的语义。换句话说,本文微调Cross- Attention中的注意力图达到控制的目的。但是本文仅从Prompt出发,无法像Mask方法保证背景完全一致性,但从效果来看还是很好的。是值得细读的一篇文章。
3. 方法
设 I I I是由文本引导的扩散模型使用文本提示 P P P和随机种子 s s s生成的图像。我们的目标是编辑仅由编辑提示 P ∗ P^* P∗引导的输入图像,从而生成编辑图像 I ∗ I^* I∗。如果我们想固定种子,消除随机性,然后仅通过改变文本来进行编辑,就会出现以下问题。

可以看到原始图片的结构和背景都被替换。本文的观察来自于交叉注意力的注意力图,这也是融合文本的地方。通过下图可以看到,如果固定了注意力图,那么的确可以达到较好的可编辑性。

注意力图在Cross-Attention中可以表示为:
M = s o f t m a x ( Q K T d ) M = softmax(\frac{QK^T}{\sqrt{d}}) M=softmax(dQKT)
其中, M i , j M_{i,j} Mi,j定义像素 i i i上的第 j j j个令牌的值的权重,并且其中 d d d是Keys和Queries的潜在投影维度。直观地说,交叉注意力输出 M V M V MV是值 V V V的加权平均值,其中权重是与 Q Q Q和 K K K之间的相似性相关的注意力图 M M M。在实践中,为了提高它们的表现力,并行使用多头注意力,然后将结果连接起来并通过学习的线性层来获得最终输出。
我们回到我们的关键观察点——生成图像的空间布局和几何结构取决于交叉注意力图。像素和文本之间的这种交互如下图所示,其中绘制了平均注意力图。可以看出,像素更容易被描述它们的单词所吸引,例如,熊的像素与单词“熊”相关。请注意,进行平均是为了可视化,在我们的方法中,每个头部的注意力图都是分开的。有趣的是,我们可以看到,图像的结构已经在扩散过程的早期步骤中确定。

设 D M ( z t , P , t , s ) DM(z_t,P,t,s) DM(zt,P,t,s)是扩散过程的单个步骤 t t t的计算,其输出噪声图像 z t − 1 z_{t−1} zt−1和注意力图 M t M_t Mt(如果不使用则省略)。我们用 D M ( z t , P , t , s ) { M ← o ~ M } DM(z_t,P,t,s)\{M←õM\} DM(zt,P,t,s){M←o~M}表示扩散步骤,在该步骤中,我们用额外的给定映射 M ^ \hat M M^覆盖注意力映射 M M M,但保持所提供提示的值 V V V。我们还用 M t ∗ M^*_t Mt∗表示使用编辑提示 P ∗ P^* P∗生成的注意力图。最后,我们将 E d i t ( M t , M t ∗ , t ) Edit(M_t,M^*_t,t) Edit(Mt,Mt∗,t)定义为一个通用的编辑函数,在原始图像和编辑图像的生成过程中接收它们的第 t t t个注意力图作为输入。
我们用于受控图像生成的通用算法包括同时对两个提示执行迭代扩散过程,其中根据所需的编辑任务在每个步骤中应用基于注意力的操作。我们注意到,为了使上述方法发挥作用,我们必须修复内部随机性。这是由于扩散模型的性质,即使对于相同的提示,两个随机种子也会产生截然不同的输出。形式上,我们的通用算法是:

这里其实就是把你想编辑的 P ∗ P^* P∗产生的注意力图替换或者修改原来 P P P的注意力图。图和替换或修改如下:
- 单词交换。例如, P P P="a big red bicycle"到 P ∗ P^* P∗=“a big red car”。主要的挑战是在处理新提示的内容的同时保留原始组成。为此,我们将源图像的注意力图注入到具有修改提示的生成中。然而,所提出的注意力注入可能会过度约束几何结构,尤其是当涉及大型结构修改时,如“汽车”到“自行车”。我们通过建议更温和的注意力约束来解决这一问题:
E d i t ( M t , M t ∗ , t ) : = { M t ∗ if t < τ M t otherwise Edit\left(M_{t}, M_{t}^{*}, t\right):=\left\{\begin{array}{ll} M_{t}^{*} & \text { if } t<\tau \\ M_{t} & \text { otherwise } \end{array}\right. Edit(Mt,Mt∗,t):={Mt∗Mt if t<τ otherwise
- 添加新短语。例如, P P P="a castle next to a river"到 P ∗ P^∗ P∗ =“children drawing of a castle next to a river”。为了保留共同的细节,我们只对来自两个提示的共同标记应用注意力注入。形式上,我们使用对齐函数A,该函数从目标提示 P ∗ P^* P∗接收令牌索引,并在不匹配的情况下输出相应的令牌索引inP或None。然后,编辑功能由下式给出:
( E d i t ( M t , M t ∗ , t ) ) i , j : = { ( M t ∗ ) i , j if A ( j ) = N o n e ( M t ) i , A ( j ) otherwise (Edit\left(M_{t}, M_{t}^{*}, t\right))_{i,j}:=\left\{\begin{array}{ll} (M_{t}^{*})_{i,j} & \text { if } A(j)=None \\ (M_{t})_{i,A(j)} & \text { otherwise } \end{array}\right. (Edit(Mt,Mt∗,t))i,j:={(Mt∗)i,j(Mt)i,A(j) if A(j)=None otherwise
- 注意力重新加权。例如,考虑提示 P P P=“一个蓬松的红色球”,并假设我们想使球或多或少蓬松。为了实现这种操作,我们用参数 c ∈ [ − 2 , 2 ] c∈[−2,2] c∈[−2,2]缩放指定标记 j ∗ j^* j∗的注意力图,从而产生更强/更弱的效果。其余的注意力图保持不变。即:
( E d i t ( M t , M t ∗ , t ) ) i , j : = { c ( M t ) i , j if j = j ∗ ( M t ) i , A ( j ) otherwise (Edit\left(M_{t}, M_{t}^{*}, t\right))_{i,j}:=\left\{\begin{array}{ll} c(M_{t})_{i,j} & \text { if } j=j^* \\ (M_{t})_{i,A(j)} & \text { otherwise } \end{array}\right. (Edit(Mt,Mt∗,t))i,j:={c(Mt)i,j(Mt)i,A(j) if j=j∗ otherwise 
4. 实验

上图是通过不同数量的扩散步骤注入注意力。在顶部,我们显示源图像和提示。在每一行中,我们通过替换文本中的单个单词并注入源图像的交叉注意力图来修改图像的内容,该图的范围从0%(左侧)到100%(右侧)的扩散步骤。请注意,一方面,如果没有我们的方法,就不能保证保留任何源图像内容。另一方面,在所有扩散步骤中注入交叉注意力可能会过度约束几何结构,导致对文本提示的保真度较低,例如,汽车(第三排)变成了具有完全交叉注意力注入的自行车。
更多结果如下:




相关文章:
Prompt-to-Prompt Image Editing with Cross Attention Control
Prompt-to-Prompt Image Editing with Cross Attention Control (P2P) Amir Hertz, Tel Aviv University, ICLR23, Paper, Code 1. 前言 编辑对这些生成模型来说是具有挑战性的,因为编辑技术的一个固有特性是保留大部分原始图像,而在基于文本的模型中…...
实验11 OSPF协议配置
实验11 OSPF协议配置 一、OSPF单区域配置(一)原理描述(二)实验目的(三)实验内容(四)实验配置(五)实验步骤 二、OSPF多区域配置(一)原理…...
ChatGPT-4o, 腾讯元宝,通义千问对比测试中文文化
国内的大模型应用我选择了国内综合实力最强的两个,一个是腾讯元宝,一个是通义千问。其它的豆包,Kimi,文心一言等在某些领域也有强于竞品的表现。 问一个中文文化比较基础的问题,我满以为中文文化chatGPT不如国内的大模型。可事实…...
node.js学习
node.js学习实操及笔记 温故node.js,node.js学习实操过程及笔记~ node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记 为什么学node.js 可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vue react angular离不开node.js …...
python将一个图片雕刻镂空成二维码
本文使用创作助手。 要将一个图片雕刻镂空成二维码,你可以使用Python中的Pillow库来处理图像,并使用qrcode库来生成二维码。以下是一个示例代码,用于将图片雕刻镂空成二维码: import qrcode from PIL import Image# 打开待处理的…...
OS进程取样器OS Process Sampler执行CMD/Shell命令
Apache JMeter - Users Manual: Component Reference 1.背景 项目上最近需要测试一种很少用到的DICOM协议,但是网上资料很少,基本上可以总结为三种方案: 直接发送TCP 16进制数据包,但是参数化数据准备难度大通过开发封装jar包发送,需要开发组提供通过发送cmd命令给前置机…...
excel两个数据表格,怎样实现筛选的联动?
如图,想要通过处理器或者像素条件进行筛选,形成一个右边图2的对比表,如何实现实现联动显示呢? 这个在excel里可以借用数据透视表切片器来完成。步骤如下: 1.添加表 选中数据区域中任意一个单元格,点击 插…...
python,django好的get和post请求
获得get请求 df request.GET.get("dades")获得post请求 文件settings.py关闭csrf MIDDLEWARE [ ‘django.middleware.security.SecurityMiddleware’, ‘django.contrib.sessions.middleware.SessionMiddleware’, ‘django.middleware.common.CommonMiddleware’…...
volatile的用法
目录 前言 使用volatile的注意事项: 示例: 总结: 前言 在嵌入式C编程中,volatile是一个关键字,它用于告知编译器被修饰的变量可能会在程序的任何地方、任何时候被不可预见的、非程序本身控制的因素所改变。这通常…...
MySQL 与 PostgreSQL 关键对比二(SQL语法)
目录 1 详细示例 1.1自动增量列 1.2 字符串连接 1.3 JSON 支持 2 总结 MySQL 和 PostgreSQL 是两种流行的开源关系数据库管理系统(RDBMS)。尽管它们在许多方面相似,但在 SQL 语法和功能上存在一些显著差异。 以下SQL语句的执行如果需要开…...
徐州服务器租用该如何维护?
服务器能够帮助企业处理网络上大部分的数据和信息,在互联网行业中起着十分重要的作用,服务器的存在能够保障网站稳定的运行,主要是由内存、硬盘和处理器等组成,服务器除了进行正常的工作运行,还需要定期维护和管理&…...
C++习题精选(4)—— 栈
目录 1. 最小栈2. 栈的压入弹出序列3. 逆波兰表达式求值 1. 最小栈 题目描述:设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素…...
Web前端ES6-ES13笔记合集(下)
#### 五.ES10新特性 ##### 1. Object.fromEntries > Object.fromEntries()方法允许你轻松地将键值对列表转换为对象 js const arr [["name", "kerwin"], ["age", 100]]; console.log(Object.fromEntries(arr))//{name: kerwin, age: 100} …...
我要成为算法高手-双指针篇
目录 什么是双指针?问题1:移动零问题2:复写零问题3:快乐数问题4:盛最多水的容器问题5:有效三角形个数问题6:查找总价格和为目标值的两个商品(两数之和)问题7:三数之和问题8:四数之和…...
Fake news detection: A survey of graph neural network methods
abstract 各种社交网络的出现产生了大量的数据。捕获、区分和过滤真假新闻的有效方法变得越来越重要,特别是在 COVID-19 大流行爆发之后。本研究对假新闻检测系统的图神经网络 (GNN) 的现状和挑战进行了多方面、系统的回顾,并概述了使用 GNN 实现假新闻…...
HCIE认证,这些误区要避开
追求HCIE认证是许多网络工程师提升职业水平的选择之一。 然而,在这条备考之路上,存在不少误解可能会误导你的学习方向或影响你的备考效率。 了解并避开这些常见误区,将帮助你更有效地准备HCIE认证考试。 01 误区一:过分依赖题库 …...
主题切换之CSS文件篇
动态加载CSS: 利用HTML的标签,可以通过JavaScript动态改变其href属性来加载不同的CSS文件。这意味着我们可以在运行时切换整个页面的样式表,从而实现主题的变化。 分离样式: 将不同主题的样式分别放在不同的CSS文件中。例如,default_styles.…...
Vue进阶(八十八)前端测试工具介绍
文章目录 一、前言1.1 引入1.2 基础语法1.2.1 全局函数 describe 和 it1.2.2 断言 expect1.2.3 匹配器1.2.4 snapshot 快照1.2.5 测试用例覆盖率报告1.2.6 React Testing Library render1.2.7 screen1.2.8 查询函数1.2.9 waitFor1.2.10 fireEvent 和 userEvent 二、Jest 基本用…...
【录制,纯正人声】OBS录制软件,音频电流音,杂音解决办法,录制有噪声的解决办法
速度解决的方法 (1)用RNNoise去除噪声。RNNoise是一个开源的,效果不好的噪声去除器。使用方法就是点击滤镜,然后加噪声抑制RNNoise。【这方法不好用】 (2)用Krisp(https://krisp.ai/) 去除噪声。这个Kris…...
Django中drf动态过滤查询
Django中drf动态过滤查询 1、page.py 代码: from rest_framework.pagination import PageNumberPaginationclass UserPagination(PageNumberPagination):"""用户分页器"""page_size = 10 # 默认的页面数据数量page_query_param = page # 定…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
RSS 2025|从说明书学习复杂机器人操作任务:NUS邵林团队提出全新机器人装配技能学习框架Manual2Skill
视觉语言模型(Vision-Language Models, VLMs),为真实环境中的机器人操作任务提供了极具潜力的解决方案。 尽管 VLMs 取得了显著进展,机器人仍难以胜任复杂的长时程任务(如家具装配),主要受限于人…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
PHP 8.5 即将发布:管道操作符、强力调试
前不久,PHP宣布了即将在 2025 年 11 月 20 日 正式发布的 PHP 8.5!作为 PHP 语言的又一次重要迭代,PHP 8.5 承诺带来一系列旨在提升代码可读性、健壮性以及开发者效率的改进。而更令人兴奋的是,借助强大的本地开发环境 ServBay&am…...
破解路内监管盲区:免布线低位视频桩重塑停车管理新标准
城市路内停车管理常因行道树遮挡、高位设备盲区等问题,导致车牌识别率低、逃费率高,传统模式在复杂路段束手无策。免布线低位视频桩凭借超低视角部署与智能算法,正成为破局关键。该设备安装于车位侧方0.5-0.7米高度,直接规避树枝遮…...
