【深度学习】【风格迁移】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. 新建一个空白游戏项目 章节操作,重…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...

MMaDA: Multimodal Large Diffusion Language Models
CODE : https://github.com/Gen-Verse/MMaDA Abstract 我们介绍了一种新型的多模态扩散基础模型MMaDA,它被设计用于在文本推理、多模态理解和文本到图像生成等不同领域实现卓越的性能。该方法的特点是三个关键创新:(i) MMaDA采用统一的扩散架构…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

论文笔记——相干体技术在裂缝预测中的应用研究
目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术:基于互相关的相干体技术(Correlation)第二代相干体技术:基于相似的相干体技术(Semblance)基于多道相似的相干体…...
【JavaSE】多线程基础学习笔记
多线程基础 -线程相关概念 程序(Program) 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程分配内存…...
MySQL 8.0 事务全面讲解
以下是一个结合两次回答的 MySQL 8.0 事务全面讲解,涵盖了事务的核心概念、操作示例、失败回滚、隔离级别、事务性 DDL 和 XA 事务等内容,并修正了查看隔离级别的命令。 MySQL 8.0 事务全面讲解 一、事务的核心概念(ACID) 事务是…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...