【深度学习】【风格迁移】Zero-shot Image-to-Image Translation
论文:https://arxiv.org/abs/2302.03027
代码:https://github.com/pix2pixzero/pix2pix-zero/tree/main
文章目录
- Abstract
- 1. Introduction
- 相关工作
- 3. Method
Abstract
大规模文本到图像生成模型展示了它们合成多样且高质量图像的显著能力。然而,直接将这些模型应用于编辑真实图像仍然存在两个挑战。首先,用户很难提供完美的文本提示,准确描述输入图像中的每个视觉细节。其次,尽管现有模型可以在某些区域引入期望的改变,但它们通常会在不需要编辑的区域引入意想不到的变化,从而大幅改变输入内容。在这项工作中,我们提出了pix2pix-zero,一种图像到图像的转换方法,可以在没有手动提示的情况下保留原始图像的内容。我们首先自动发现反映文本嵌入空间中所需编辑的编辑方向。为了在编辑后保留一般内容结构,我们进一步提出了交叉注意力引导,旨在在扩散过程中保留输入图像的交叉注意力图。此外,我们的方法不需要对这些编辑进行额外的训练,可以直接使用现有的预训练文本到图像扩散模型。我们进行了大量实验证明,我们的方法在真实和合成图像编辑方面优于现有和同时进行的工作。
图1:我们提出了pix2pix-zero,这是一种基于扩散的图像到图像转换方法,允许用户即时指定编辑方向(例如,猫 → 狗)。我们在真实图像(上方2行)和合成图像(底部行)上执行各种翻译任务,同时保留输入图像的结构。我们的方法既不需要为每个输入图像手动进行文本提示,也不需要为每个任务进行昂贵的微调。

1. Introduction
最近的文本到图像扩散模型,如DALL·E 2 [43]、Imagen [51]和Stable Diffusion [47],生成具有复杂对象和场景的多样化、逼真的合成图像,展示了强大的组合能力。
然而,将这些模型重新用于编辑真实图像仍然具有挑战性。
首先,图像并不自然地附带文本描述。指定一个文本描述是繁琐且耗时的,因为一张图片价值千言万语,包含许多纹理细节、光照条件和形状微妙之处,在词汇表中可能没有对应的词语。其次,即使有初始和目标文本提示(例如,将猫改为狗),现有的文本到图像模型往往会合成完全新的内容,不符合输入图像的布局、形状和物体姿态。毕竟,编辑文本提示只告诉我们想要改变什么,但并未传达我们想要保留的内容。最后,用户可能希望对多样的真实图像执行各种编辑。因此,我们不希望为每个图像和编辑类型进行大规模的微调,因为这将带来极高的成本。
为了克服上述问题,我们引入了pix2pix-zero,一种基于扩散的图像到图像转换方法,无需训练和文本提示。
用户只需即时指定编辑方向,形式为源域 → 目标域(例如,猫 → 狗),无需为输入图像手动创建文本提示。我们的模型可以直接使用预训练的文本到图像扩散模型,无需为每个编辑类型和图像进行额外的训练。
在这项工作中,我们做出了两个关键贡献:(1) 高效的自动编辑方向发现机制,无需输入文本提示。我们自动发现适用于广泛输入图像的通用编辑方向。给定一个原始词(例如,猫)和一个编辑后的词(例如,狗),我们分别生成包含原始和编辑后词的两组句子。然后,我们计算两组句子之间的CLIP嵌入方向。由于该编辑方向基于多个句子,比仅仅在原始和编辑后词之间找到方向更加稳健。这一步仅需约5秒即可预先计算。(2) 通过交叉注意力引导进行内容保留。我们观察到交叉注意力图对应于生成物体的结构。为了保留原始结构,我们鼓励文本-图像交叉注意力图在转换前后保持一致。因此,我们在整个扩散过程中应用交叉注意力引导来强制实现这种一致性。在图1中,我们展示了使用我们的方法进行各种编辑的结果,同时保留输入图像的结构。
我们进一步通过一系列技术来改进结果并提高推断速度:(1) 自相关正则化:在应用DDIM [55]反转时,我们观察到DDIM反转容易使中间预测的噪声不太符合高斯分布,这降低了反转图像的可编辑性。因此,我们引入了自相关正则化,以确保在反转过程中噪声接近高斯分布。(2) 条件GAN蒸馏:由于多步推断的昂贵扩散过程,扩散模型较慢。为了实现交互式编辑,我们将扩散模型蒸馏为快速的条件GAN模型,给定来自扩散模型的原始和编辑后图像的配对数据,从而实现实时推断。
我们在各种图像到图像转换任务上演示了我们的方法,例如改变前景对象(猫 → 狗)、修改物体(在猫图像上添加眼镜)以及改变输入的风格(草图 → 油 pastel),用于真实图像和合成图像。
大量实验证明,pix2pix-zero在逼真性和内容保留方面优于现有和同时进行的作品[35, 22]。最后,我们对各个算法组件进行了广泛的剔除研究,并讨论了我们方法的限制。更多结果和相关代码请访问我们的网站https://pix2pixzero.github.io/。
相关工作
使用GAN进行深度图像编辑。随着生成建模的发展,图像编辑技术使用户可以以不同的方式表达他们的目标(例如,滑块、空间掩码或自然语言描述)。其中一类工作是训练条件GAN,将输入图像从一个域转换到目标域[28, 52, 71, 14, 61, 26, 39, 34, 5],这通常需要特定任务的模型训练。另一类编辑方法是通过图像反转来操纵GAN的潜在空间,并发现编辑方向[70, 27, 45, 69, 63, 7]。
这些方法首先将目标图像投影到预训练GAN模型的潜在空间,然后通过沿着与解缠结属性相对应的方向操纵潜在代码来编辑图像。许多先前的工作提出了对GAN模型进行微调以更好地匹配输入图像[8, 38, 46],探索不同的潜在空间[62, 1, 2],反转到多个层[19, 40],以及利用潜在编辑方向[21, 54, 41, 3]。尽管这些方法在单一类别的策划数据集上取得了成功,但在更复杂的图像上很难获得高质量的反转结果。
文本到图像模型。最近,大规模的文本到图像模型通过在互联网规模的文本-图像数据集上进行训练,显著提高了图像的质量和多样性[51, 43, 44, 64, 17, 18]。然而,在文本输入之外,它们对生成过程的控制能力有限。通过改变输入句子中的单词来编辑真实图像是不可靠的,因为它往往会以意外的方式改变图像的大部分内容。有些方法[37, 4]使用额外的掩码来约束编辑的应用位置。与这些方法不同,我们的方法保留了输入图像的结构,无需使用任何空间掩码。其他最近和同时进行的作品(例如,Palette [50],InstructPix2Pix [10],PITI [60])学习了针对图像到图像转换任务的条件扩散模型。相比之下,我们使用预训练的Stable Diffusion模型,无需进行额外的训练。
使用扩散模型进行图像编辑。最近的一些工作采用了扩散模型进行图像编辑。
SDEdit [35]通过在输入图像中添加噪声和用户编辑引导来进行编辑,然后去噪以增加其真实感。随后,它与文本到图像模型(例如GLIDE [37]和Stable Diffusion模型[47])一起用于基于文本的图像修复和编辑。其他方法[13, 56]提出了通过加入条件用户输入来修改扩散过程,但仅适用于单一类别的模型。
两个同时进行的工作,Imagic [30]和prompt-toprompt [22],也尝试使用预训练的文本到图像扩散模型进行结构保留的编辑。Imagic [30]展示了出色的编辑结果,但需要为每个图像微调整个模型。prompt-to-prompt [22]不需要微调,并使用原始图像的交叉注意力图(其值对应于编辑文本)来保留结构,主要关注合成图像的编辑。我们的方法在三个方面与它们不同。首先,我们的方法对输入图像不需要文本提示。其次,我们的方法更加稳健,因为我们不直接使用原始文本的交叉注意力图,这可能与编辑后的文本不兼容。我们的引导方法确保了编辑图像的交叉注意力图保持接近,但仍具有根据编辑文本进行变化的灵活性。
第三,我们的方法专门针对真实图像,同时对合成图像也有效。我们展示了我们的方法在图像质量和内容保留方面优于SDEdit和prompt-to-prompt。
3. Method
略

图3:pix2pix-zero方法的概述,通过一个猫→狗编辑示例进行说明。首先,我们使用正则化的DDIM反转获得一个反转的噪声图。这由文本嵌入c引导,文本嵌入c是使用图像字幕网络BLIP [33]和CLIP文本嵌入模型自动计算得到的。接着,我们通过原始文本嵌入对图像进行去噪,得到交叉注意力图,作为输入图像结构的参考(顶部行)。然后,我们通过编辑后的文本嵌入c + ∆cedit 进行去噪,使用损失函数鼓励交叉注意力图与参考交叉注意力图匹配(第2行)。这确保编辑后图像的结构与原始图像相比没有发生显著变化。第3行展示了没有交叉注意力引导的去噪结果,导致结构上的大幅偏离。


相关文章:
【深度学习】【风格迁移】Zero-shot Image-to-Image Translation
论文:https://arxiv.org/abs/2302.03027 代码:https://github.com/pix2pixzero/pix2pix-zero/tree/main 文章目录 Abstract1. Introduction相关工作3. Method Abstract 大规模文本到图像生成模型展示了它们合成多样且高质量图像的显著能力。然而&#x…...
Day 30 C++ STL 常用算法(上)
文章目录 算法概述常用遍历算法for_each——实现遍历容器函数原型示例 transform——搬运容器到另一个容器中函数原型注意示例 常用查找算法find——查找指定元素函数原型示例 find_if—— 查找符合条件的元素函数原型示例 adjacent_find——查找相邻重复元素函数原型示例 bina…...
MES系统在机器人行业生产管理种的运用
机器人的智能水平也伴随技术的迭代不断攀升。 2021年的春晚舞台上,来自全球领先工业机器人企业abb的全球首款双臂协作机器人yumi,轻松自如地表演了一出写“福”字,赢得了全国观众的赞叹。 在汽车装配领域,一台机器人可以自主完成一…...
Spark(39):Streaming DataFrame 和 Streaming DataSet 输出
目录 0. 相关文章链接 1. 输出的选项 2. 输出模式(output mode) 2.1. Append 模式(默认) 2.2. Complete 模式 2.3. Update 模式 2.4. 输出模式总结 3. 输出接收器(output sink) 3.1. file sink 3.2. kafka sink 3.2.1. 以 Streaming 方式输出数据 3.2.2. 以 batch …...
【云原生】Docker 详解(一):从虚拟机到容器
Docker 详解(一):从虚拟机到容器 1.虚拟化 要解释清楚 Docker,首先要解释清楚 容器(Container)的概念。要解释容器的话,就需要从操作系统说起。操作系统太底层,细说的话一两本书都说…...
代码随想录第48天 | 198. 打家劫舍、213. 打家劫舍II、337. 打家劫舍III
198. 打家劫舍 当前房屋偷与不偷取决于 前一个房屋和前两个房屋是否被偷了。 递归五部曲: dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金额为dp[i]。决定dp[i]的因素就是第i房间偷还是不偷。 如果偷第i房间&…...
【LeetCode】按摩师
按摩师 题目描述算法分析编程代码 链接: 按摩师 题目描述 算法分析 编程代码 class Solution { public:int massage(vector<int>& nums) {int n nums.size();if(n 0) return 0;vector<int> f(n);auto g f;f[0] nums[0];for(int i 1;i<n;i){f[i] g[i…...
国际腾讯云账号云核算概述!!
云核算概述 维基百科界说:云核算是一种依据互联网的新型核算方法,经过互联网上异构、自治的服务为个人和企业供给按需即取的核算。 云核算描绘的一起特征:云是一种按需运用的服务,运用者只重视服务本身。 云核算作为IT服务形式&am…...
.NET 6.0 重启 IIS 进程池
在 .NET 6.0 中,你可以使用 Microsoft.Web.Administration 命名空间提供的 API 来管理 IIS 进程池并实现重启操作。以下是一个示例代码,展示如何使用 .NET 6.0 中的 Microsoft.Web.Administration 来重启 IIS 进程池: using Microsoft.Web.A…...
一位心理学教师对ChatGPT的看法,提到了正确地使用它的几个要点
在没有自主学习能力和有自主学习能力的两类学生中,ChatGPT的出现,会加大他们在知识学习及思维发展上的鸿沟。爱学习的人会因为AI变得更好…… 从2022年年底起,ChatGPT的技术突破使人类终于进入了一个AI被广泛应用在工作、学习、生活的时代。…...
认识Node.js及三个模块
文章目录 1.初识 Node.js1.1 什么是 Node.js1.2 Node.js 中的 JavaScript 运行环境1.3 Node.js 可以做什么1.4 Node.js 环境的安装1.4.1 区分 LTS 版本和 Current 版本的不同1.4.2 查看已安装的 Node.js 的版本号1.4.3 什么是终端1.4.4 终端中的快捷键 1.5 在 Node.js 环境中执…...
49 | 公司销售数据分析
公司销售数据分析报告 本数据是2012~2014年间一家生产体育类产品的全球销售订单数据,分别按时间、产品类别、销售国家统计产品销售情况,分析销售额和利润额统计各产品市场占有份额,为下一步生产计划提供有价值的建议。 数据大小:88475 行, 11 列 Retailer country销售国…...
Android 项目导入高德SDK初次上手
文章目录 一、前置知识:二、学习目标三、学习资料四、操作过程1、创建空项目2、高德 SDK 环境接入2.1 获取高德 key2.2下载 SDK 并导入2.2.1、下载SDK 文件2.2.2、SDK 导入项目2.2.3、清单文件配置2.2.4、隐私权限 3、显示地图 一、前置知识: 1、Java 基…...
生成树协议用来解决网络风暴的问题?(第三十二课)
生成树协议用来解决网络风暴的问题?(第三十二课) 一 STP RSTP MSTP 介绍 STP(Spanning Tree Protocol)、RSTP(Rapid Spanning Tree Protocol)和MSTP(Multiple Spanning Tree Protocol)都是用于网络中避免环路的协议。 STP是最初的协议,它通过将某些端口阻塞来防止…...
git分支操作
Git分支的操作 1.1 Git分支简介 Git分支是由指针管理起来的,所以创建、切换、合并、删除分支都非常快,非常适合大型项目的开发。 在分支上做开发,调试好了后再合并到主分支。那么每个人开发模块式都不会影响到别人。 分支使用策略…...
【基础学习笔记 enum】TypeScript 中的 enum 枚举类型介绍
因为之前网上查好多博客都是只说最基础的,所以这里记录一下,最基础的放在最后面。 这里重点要记录的是枚举成员的值可以是字符串(字符串枚举,因为网上大部分只介绍常数枚举),需要注意的一点是,…...
SpringBoot中间件使用之EventBus、Metric、CommandLineRunner
1、EventBus 使用EventBus 事件总线的方式可以实现消息的发布/订阅功能,EventBus是一个轻量级的消息服务组件,适用于Android和Java。 // 1.注册事件通过 EventBus.getDefault().register(); // 2.发布事件 EventBus.getDefault().post(“事件内容”); …...
ffmpeg命令行是如何打开vf_scale滤镜的
前言 在ffmpeg命令行中,ffmpeg -i test -pix_fmt rgb24 test.rgb,会自动打开ff_vf_scale滤镜,本章主要追踪这个流程。 通过gdb可以发现其基本调用栈如下: 可以看到,query_formats()中创建的v…...
【Vue3】自动引入插件-`unplugin-auto-import`
Vue3自动引入插件-unplugin-auto-import,不必再手动 import 。 自动导入 api 按需为 Vite, Webpack, Rspack, Rollup 和 esbuild 。支持TypeScript。由unplugin驱动。 插件安装:unplugin-auto-import 配置vite.config.ts(配置完后需要重启…...
每日温度(力扣)单调栈 JAVA
给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用 0 来代替。 示例 1: 输入: temperatur…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
前端倒计时误差!
提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...
Python爬虫(一):爬虫伪装
一、网站防爬机制概述 在当今互联网环境中,具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类: 身份验证机制:直接将未经授权的爬虫阻挡在外反爬技术体系:通过各种技术手段增加爬虫获取数据的难度…...
ElasticSearch搜索引擎之倒排索引及其底层算法
文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
