【深度学习】【风格迁移】Zero-shot Image-to-Image Translation

news2024/11/26 6:03:22

论文: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行展示了没有交叉注意力引导的去噪结果,导致结构上的大幅偏离。

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

【网络编程】实现一个简单多线程版本TCP服务器(附源码)

TCP多线程 🌵预备知识🎄 Accept函数🌲字节序转换函数🌳listen函数 🌴代码🌱Log.hpp🌿Makefile☘️TCPClient.cc🍀TCPServer.cc🎍 util.hpp 🌵预备知识 &…

未来C#上位机软件发展趋势

C#上位机软件迎来新的发展机遇。随着工业自动化的快速发展,C#作为一种流行的编程语言在上位机软件领域发挥着重要作用。未来,C#上位机软件可能会朝着以下几个方向发展: 1.智能化:随着人工智能技术的不断演进,C#上位机…

数据结构--最小生成树

数据结构–最小生成树 连通图 \color{red}连通图 连通图的生成树是 包含图中全部顶点的一个极小连通子图 \color{red}包含图中全部顶点的一个极小连通子图 包含图中全部顶点的一个极小连通子图。 若图中顶点数为n,则它的生成树含有 n-1 条边。对生成树而言&#xff…

RFID技术助力半导体制造行业自动化生产

由于芯片短缺问题和近2年海运拥堵和成本上升等因素,致使全球资本对于芯片制造工厂的投入增大,而中兴、华为的例子已经凸显出国产半导体供应链的重要性,除去地缘政治上的意义,发展半导体其实是中国经济的转型的必走之路。 半导体生…

Vue2(生命周期,列表排序,计算属性和监听器)

目录 前言一,生命周期1.1,生命周期函数简介1.2,Vue的初始化流程1.3,Vue的更新流程1.4, Vue的销毁流程1.5, 回顾生命周期1.,6,代码演示1.6-1,beforeCreate1.6-2,created1.6-3&#xf…

雨水旋流过滤器、旋流雨水过滤器、水力旋流雨水过滤器、旋流分离器、旋流沉砂一体机、旋流沉砂井

产品组成 主要材料:PE304不锈钢 组成:过滤器筒体、桶盖、截止阀(选配)、不锈钢滤网 工作原理 雨水由过滤器进水口进入时,水流被引导沿过滤器内壁切线方向进入筒体。在水力、重力等作用下,形成雨水紧贴过…

【基础类】—前端算法类

一、排序 1. 排序方法列表 2. 常见排序方法 快速排序选择排序希尔排序 二、堆栈、队列、链表 堆栈、队列、链表 三、递归 递归 四、波兰式和逆波兰式 理论源码

Unity之ShaderGraph 节点介绍 Utility节点

Utility 逻辑All(所有分量都不为零,返回 true)Any(任何分量不为零,返回 true)And(A 和 B 均为 true)Branch(动态分支)Comparison(两个输入值 A 和…

wm8960没有声音

最近在imx6ull上调试这个声卡,用官方的镜像是能发声的,换到自己做的镜像上,就没有声音。 记录一下过程: 内核和设备树。只要有下面的显示,就说明加载成功。 再看一下aplay的显示 到此,驱动都是正常的。但…

每天一道leetcode:剑指 Offer 32 - II. 从上到下打印二叉树 II(适合初学者)

今日份题目: 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。 示例 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回其层次遍历结果: [ [3], […

selenium常见等待机制及其特点和使用方法

目录 1、强制等待 2、隐式等待 3、显式等待 1、强制等待 强制等待是在程序中直接调用Thread.sleep(timeout) ,来完成的,该用法的优点是使用起来方便,语法也比较简单,缺点就是需要强制等待固定的时间,可能会造成测试的时间过…

APP外包开发的android开发模式

开发 Android 应用有多种方法,每种方法都有其优势和适用场景。综合考虑各自的特点,你可以根据项目的需求和团队的技能选择最合适的开发方法。今天和大家分享几种常见的开发方法以及它们之间的对比,希望对大家有所帮助。北京木奇移动技术有限公…

探索泛型与数据结构:解锁高效编程之道

文章目录 引言第一部分:了解泛型1.1 为什么使用泛型1.2 使用泛型的好处 第二部分:泛型的使用场景2.1 类的泛型2.2 方法的泛型2.3 接口的泛型 第三部分:泛型通配符3.1 通配符3.2 通配符的受限泛型 第四部分:数据结构和泛型的应用4.…

边缘计算框架 Baetyl v2.4.3 正式发布

导读Baetyl v2.4.3 版本已经发布,对 v2.3.0 版本的部分功能进行了升级优化。公告称,这些新功能继续遵循云原生理念,构建了一个开放、安全、可扩展、可控制的智能边缘计算平台。 Baetyl 项目由百度发起,基于百度天工 AIoT 智能边缘…

【LeetCode】数据结构题解(9)[复制带随机指针的链表]

复制带随机指针的链表 😉 1.题目来源👀2.题目描述🤔3.解题思路🥳4.代码展示 所属专栏:玩转数据结构题型❤️ 🚀 >博主首页:初阳785❤️ 🚀 >代码托管:chuyang785❤…

使用Pytest集成Allure生成漂亮的图形测试报告

目录 前言 依赖包安装 Pytest Allure Pytest Adaptor 改造基于Pytest的测试用例 生成测试报告 运行测试 生成测试报告 打开测试报告 资料获取方法 前言 之前写过一篇生成测试报告的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架&#xff…

(杭电多校)2023“钉耙编程”中国大学生算法设计超级联赛(6)

1001 Count 当k在区间(1n)/2的左边时,如图,[1,k]和[n-k1,n]完全相同,所以就m^(n-k) 当k在区间(1n)/2的右边时,如图,[1,n-k1]和[k,n]完全相同,所以也是m^(n-k) 别忘了特判,当k等于n时,n-k为0,然后a1a1,a2a2,..anan,所以没什么限制,那么就是m^n AC代码: #includ…

Vue3 大屏数字滚动效果

父组件&#xff1a; <template> <div class"homePage"> <NumRoll v-for"(v, i) in numberList" :key"i" :number"v"></NumRoll> </div> </template> <script setup> import { onMounted, r…

【Vue3】动态组件

动态组件的基本使用 动态组件&#xff08;Dynamic Components&#xff09;是一种在 Vue 中根据条件或用户输入来动态渲染不同组件的技术。 在 Vue 中使用动态组件&#xff0c;可以使用 元素&#xff0c;并通过 is 特性绑定一个组件的名称或组件对象。通过在父组件中改变 is 特…

C++ 虚析构函数

在C中&#xff0c;不能声明虚构造函数&#xff0c;但是可以声明虚析构函数。 析构函数没有类型&#xff0c;也没有参数&#xff0c;和普通成员函数相比&#xff0c;虚析构函数情况很简单。 虚析构函数的声明语法&#xff1a; virtual ~类名();如果一个类的析构函数是虚函数&…