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

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(d QKT)
其中, 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} zt1和注意力图 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){Mo~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(MtMtt)定义为一个通用的编辑函数,在原始图像和编辑图像的生成过程中接收它们的第 t t t个注意力图作为输入。

我们用于受控图像生成的通用算法包括同时对两个提示执行迭代扩散过程,其中根据所需的编辑任务在每个步骤中应用基于注意力的操作。我们注意到,为了使上述方法发挥作用,我们必须修复内部随机性。这是由于扩散模型的性质,即使对于相同的提示,两个随机种子也会产生截然不同的输出。形式上,我们的通用算法是:

在这里插入图片描述

这里其实就是把你想编辑的 P ∗ P^* P产生的注意力图替换或者修改原来 P P P的注意力图。图和替换或修改如下:

  1. 单词交换。例如, 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):={MtMt if t<τ otherwise 

  1. 添加新短语。例如, 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 

  1. 注意力重新加权。例如,考虑提示 P P P=“一个蓬松的红色球”,并假设我们想使球或多或少蓬松。为了实现这种操作,我们用参数 c ∈ [ − 2 , 2 ] c∈[−2,2] c[22]缩放指定标记 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. 前言 编辑对这些生成模型来说是具有挑战性的&#xff0c;因为编辑技术的一个固有特性是保留大部分原始图像&#xff0c;而在基于文本的模型中…...

实验11 OSPF协议配置

实验11 OSPF协议配置 一、OSPF单区域配置&#xff08;一&#xff09;原理描述&#xff08;二&#xff09;实验目的&#xff08;三&#xff09;实验内容&#xff08;四&#xff09;实验配置&#xff08;五&#xff09;实验步骤 二、OSPF多区域配置&#xff08;一&#xff09;原理…...

ChatGPT-4o, 腾讯元宝,通义千问对比测试中文文化

国内的大模型应用我选择了国内综合实力最强的两个&#xff0c;一个是腾讯元宝&#xff0c;一个是通义千问。其它的豆包&#xff0c;Kimi&#xff0c;文心一言等在某些领域也有强于竞品的表现。 问一个中文文化比较基础的问题,我满以为中文文化chatGPT不如国内的大模型。可事实…...

node.js学习

node.js学习实操及笔记 温故node.js&#xff0c;node.js学习实操过程及笔记~ node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记 为什么学node.js 可以让别人访问我们编写的网页为后续的框架学习打下基础&#xff0c;三大框架vue react angular离不开node.js …...

python将一个图片雕刻镂空成二维码

本文使用创作助手。 要将一个图片雕刻镂空成二维码&#xff0c;你可以使用Python中的Pillow库来处理图像&#xff0c;并使用qrcode库来生成二维码。以下是一个示例代码&#xff0c;用于将图片雕刻镂空成二维码&#xff1a; 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两个数据表格,怎样实现筛选的联动?

如图&#xff0c;想要通过处理器或者像素条件进行筛选&#xff0c;形成一个右边图2的对比表&#xff0c;如何实现实现联动显示呢&#xff1f; 这个在excel里可以借用数据透视表切片器来完成。步骤如下&#xff1a; 1.添加表 选中数据区域中任意一个单元格&#xff0c;点击 插…...

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的注意事项&#xff1a; 示例&#xff1a; 总结&#xff1a; 前言 在嵌入式C编程中&#xff0c;volatile是一个关键字&#xff0c;它用于告知编译器被修饰的变量可能会在程序的任何地方、任何时候被不可预见的、非程序本身控制的因素所改变。这通常…...

MySQL 与 PostgreSQL 关键对比二(SQL语法)

目录 1 详细示例 1.1自动增量列 1.2 字符串连接 1.3 JSON 支持 2 总结 MySQL 和 PostgreSQL 是两种流行的开源关系数据库管理系统&#xff08;RDBMS&#xff09;。尽管它们在许多方面相似&#xff0c;但在 SQL 语法和功能上存在一些显著差异。 以下SQL语句的执行如果需要开…...

徐州服务器租用该如何维护?

服务器能够帮助企业处理网络上大部分的数据和信息&#xff0c;在互联网行业中起着十分重要的作用&#xff0c;服务器的存在能够保障网站稳定的运行&#xff0c;主要是由内存、硬盘和处理器等组成&#xff0c;服务器除了进行正常的工作运行&#xff0c;还需要定期维护和管理&…...

C++习题精选(4)—— 栈

目录 1. 最小栈2. 栈的压入弹出序列3. 逆波兰表达式求值 1. 最小栈 题目描述&#xff1a;设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。实现 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&#xff1a;移动零问题2&#xff1a;复写零问题3&#xff1a;快乐数问题4&#xff1a;盛最多水的容器问题5&#xff1a;有效三角形个数问题6&#xff1a;查找总价格和为目标值的两个商品(两数之和)问题7&#xff1a;三数之和问题8&#xff1a;四数之和…...

Fake news detection: A survey of graph neural network methods

abstract 各种社交网络的出现产生了大量的数据。捕获、区分和过滤真假新闻的有效方法变得越来越重要&#xff0c;特别是在 COVID-19 大流行爆发之后。本研究对假新闻检测系统的图神经网络 (GNN) 的现状和挑战进行了多方面、系统的回顾&#xff0c;并概述了使用 GNN 实现假新闻…...

HCIE认证,这些误区要避开

追求HCIE认证是许多网络工程师提升职业水平的选择之一。 然而&#xff0c;在这条备考之路上&#xff0c;存在不少误解可能会误导你的学习方向或影响你的备考效率。 了解并避开这些常见误区&#xff0c;将帮助你更有效地准备HCIE认证考试。 01 误区一&#xff1a;过分依赖题库 …...

主题切换之CSS文件篇

动态加载CSS: 利用HTML的标签&#xff0c;可以通过JavaScript动态改变其href属性来加载不同的CSS文件。这意味着我们可以在运行时切换整个页面的样式表&#xff0c;从而实现主题的变化。 分离样式: 将不同主题的样式分别放在不同的CSS文件中。例如&#xff0c;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录制软件,音频电流音,杂音解决办法,录制有噪声的解决办法

速度解决的方法 &#xff08;1&#xff09;用RNNoise去除噪声。RNNoise是一个开源的&#xff0c;效果不好的噪声去除器。使用方法就是点击滤镜&#xff0c;然后加噪声抑制RNNoise。【这方法不好用】 &#xff08;2&#xff09;用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 # 定…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

Go 语言接口详解

Go 语言接口详解 核心概念 接口定义 在 Go 语言中&#xff0c;接口是一种抽象类型&#xff0c;它定义了一组方法的集合&#xff1a; // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的&#xff1a; // 矩形结构体…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】&#xff0c;注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录&#xff08;即exe所在文件夹&#xff09;加入系统变量…...