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

【深度学习】【风格迁移】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…...

国际腾讯云账号云核算概述!!

云核算概述 维基百科界说&#xff1a;云核算是一种依据互联网的新型核算方法&#xff0c;经过互联网上异构、自治的服务为个人和企业供给按需即取的核算。 云核算描绘的一起特征&#xff1a;云是一种按需运用的服务&#xff0c;运用者只重视服务本身。 云核算作为IT服务形式&am…...

.NET 6.0 重启 IIS 进程池

在 .NET 6.0 中&#xff0c;你可以使用 Microsoft.Web.Administration 命名空间提供的 API 来管理 IIS 进程池并实现重启操作。以下是一个示例代码&#xff0c;展示如何使用 .NET 6.0 中的 Microsoft.Web.Administration 来重启 IIS 进程池&#xff1a; using Microsoft.Web.A…...

一位心理学教师对ChatGPT的看法,提到了正确地使用它的几个要点

在没有自主学习能力和有自主学习能力的两类学生中&#xff0c;ChatGPT的出现&#xff0c;会加大他们在知识学习及思维发展上的鸿沟。爱学习的人会因为AI变得更好…… 从2022年年底起&#xff0c;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初次上手

文章目录 一、前置知识&#xff1a;二、学习目标三、学习资料四、操作过程1、创建空项目2、高德 SDK 环境接入2.1 获取高德 key2.2下载 SDK 并导入2.2.1、下载SDK 文件2.2.2、SDK 导入项目2.2.3、清单文件配置2.2.4、隐私权限 3、显示地图 一、前置知识&#xff1a; 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分支是由指针管理起来的&#xff0c;所以创建、切换、合并、删除分支都非常快&#xff0c;非常适合大型项目的开发。 在分支上做开发&#xff0c;调试好了后再合并到主分支。那么每个人开发模块式都不会影响到别人。 分支使用策略&#xf…...

【基础学习笔记 enum】TypeScript 中的 enum 枚举类型介绍

因为之前网上查好多博客都是只说最基础的&#xff0c;所以这里记录一下&#xff0c;最基础的放在最后面。 这里重点要记录的是枚举成员的值可以是字符串&#xff08;字符串枚举&#xff0c;因为网上大部分只介绍常数枚举&#xff09;&#xff0c;需要注意的一点是&#xff0c;…...

SpringBoot中间件使用之EventBus、Metric、CommandLineRunner

1、EventBus 使用EventBus 事件总线的方式可以实现消息的发布/订阅功能&#xff0c;EventBus是一个轻量级的消息服务组件&#xff0c;适用于Android和Java。 // 1.注册事件通过 EventBus.getDefault().register(); // 2.发布事件 EventBus.getDefault().post(“事件内容”); …...

ffmpeg命令行是如何打开vf_scale滤镜的

前言 在ffmpeg命令行中&#xff0c;ffmpeg -i test -pix_fmt rgb24 test.rgb&#xff0c;会自动打开ff_vf_scale滤镜&#xff0c;本章主要追踪这个流程。 通过gdb可以发现其基本调用栈如下&#xff1a; 可以看到&#xff0c;query_formats&#xff08;&#xff09;中创建的v…...

【Vue3】自动引入插件-`unplugin-auto-import`

Vue3自动引入插件-unplugin-auto-import&#xff0c;不必再手动 import 。 自动导入 api 按需为 Vite, Webpack, Rspack, Rollup 和 esbuild 。支持TypeScript。由unplugin驱动。 插件安装&#xff1a;unplugin-auto-import 配置vite.config.ts&#xff08;配置完后需要重启…...

每日温度(力扣)单调栈 JAVA

给定一个整数数组 temperatures &#xff0c;表示每天的温度&#xff0c;返回一个数组 answer &#xff0c;其中 answer[i] 是指对于第 i 天&#xff0c;下一个更高温度出现在几天后。如果气温在这之后都不会升高&#xff0c;请在该位置用 0 来代替。 示例 1: 输入: temperatur…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

虚幻基础:角色旋转

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 移动组件使用控制器所需旋转&#xff1a;组件 使用 控制器旋转将旋转朝向运动&#xff1a;组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转&#xff1a;必须移动才能旋转&#xff0c;不移动不旋转控制器…...