【AIGC】InstructPixPix:基于文本引导的图像编辑技术
github:diffusers/examples/instruct_pix2pix/train_instruct_pix2pix_sdxl.py at main · huggingface/diffusers · GitHub
论文:https://arxiv.org/pdf/2211.09800
摘要
我们提出了一种从人类指令编辑图像的方法:给定一个输入图像和告诉模型做什么的书面指令,我们的模型遵循这些指令来编辑图像。为了获得这个问题的训练数据,我们结合了两个大型预训练模型(语言模型 (GPT-3) 和文本到图像模型 (Stable Diffusion))的知识,以生成大量图像编辑示例数据集。我们的条件扩散模型 InstructPix2Pix 在我们生成的数据上进行了训练,并在推理时推广到真实图像和用户编写的指令。由于它在前向传递中执行编辑,并且不需要每个示例的微调或反转,因此我们的模型在几秒钟内快速编辑图像。我们展示了对不同集合输入图像和书面指令的令人信服的编辑结果。
介绍
我们提出了一种教学生成模型的方法,以遵循人工编写的指令进行图像编辑。由于此任务的训练数据难以大规模获取,我们提出了一种生成成对数据集的方法,该数据集结合了在不同模态上预训练的多个大型模型:大型语言模型 (GPT-3 [7]) 和文本到图像模型 (Stable Diffusion [52])。这两个模型捕获了有关语言和图像的补充知识,这些知识可以结合起来为跨越两种模态的任务创建成对的训练数据。
使用我们生成的成对数据,我们训练了一个条件扩散模型,该模型给定输入图像和文本指令如何编辑它,生成编辑后的图像。我们的模型直接在前向传递中执行图像编辑,不需要任何额外的示例图像、输入/输出图像的完整描述或每个示例微调。尽管完全接受了合成示例的训练(即生成的书面说明和生成的图像),我们的模型实现了对任意真实图像和自然人工编写的指令的零样本泛化。我们的模型实现了直观的图像编辑,可以遵循人类指令来执行多样化的编辑集合:替换对象、更改图像的样式、更改设置、艺术媒介等。选定的示例可以在图 1 中找到。
方法
我们将基于指令的图像编辑视为监督学习问题:(1)首先,我们在编辑前后生成文本编辑指令和图像的配对训练数据集(第 3.1 节,图 2a-c),然后(2)我们在这个生成的数据集上训练图像编辑扩散模型(第 3.2 节,图 2d)。尽管是用生成的图像和可编辑指令,我们的模型能够泛化到使用任意人工编写的指令编辑真实图像。有关我们方法的概述,请参见下图2。
我们的方法由两部分组成:生成图像编辑数据集,并在该数据集上训练扩散模型。(a) 我们首先使用微调的 GPT-3 来生成指令和编辑的标题。(b) 然后,我们使用 StableDiffusion [52] 结合 Prompt-to-Prompt [17] 从字幕对生成图像对。我们使用此过程来创建超过 450,000 个训练示例的数据集 (c)。(d) 最后,我们在生成的数据上训练我们的 InstructPix2Pix 扩散模型,以从指令编辑图像。在推理时,我们的模型可以推广到从人工编写的指令中编辑真实图像
生成多模态训练数据集
我们结合了两种在不同模态上运行的大规模预训练模型的能力——大型语言模型 [7] 和文本到图像模型 [52]——以生成包含文本编辑指令的多模式训练数据集以及编辑前后的相应图像。在接下来的两节中,我们将详细描述此过程的两个步骤。在第 3.1.1 节中,我们描述了微调 GPT-3 [7] 以生成文本编辑集合的过程:给定一个描述图像的提示,生成一个描述要进行更改的文本指令,以及一个描述该更改后图像的提示(图 2a)。然后,在第 3.1.2 节中,我们描述了使用文本到图像模型 [52] 将两个文本提示(即编辑前后的)转换为一对对应图像的过程(图 2b)。
生成指令和配对提示词
我们首先完全在文本领域进行操作,我们利用一个大型语言模型来获取图像标题,并在编辑后生成编辑说明和最终的文本标题。例如,如图2a所示,提供“一个女孩骑马的照片”的输入标题,我们的语言模型既可以生成一个合理的编辑指令“让她骑马”,也可以生成一个适当修改的输出标题“一个女孩骑马的照片”。在文本域中操作使我们能够生成大量不同的编辑集合,同时保持图像更改和文本指令之间的对应关系。我们的模型是通过在一个相对人工编写的编辑三元组小数据集:(1)输入标题,(2)编辑指令,(3)输出标题。为了生成微调数据集,我们从LAION-Aesthetics V2 6.5+[57]数据集中采样了700个输入标题,并手动编写指令和输出标题。关于我们的书面指令和输出标题的示例,请参见表1a。使用这些数据,我们使用默认训练参数对GPT-3达芬奇模型进行了单个epoch的微调。
得益于GPT-3的丰富知识和泛化能力,我们的微调模型能够生成创造性但明智的说明和说明。例如GPT-3生成的数据见表1b。我们的数据集是通过使用此训练模型生成大量编辑和输出标题来创建的,其中输入标题是来自LAION-Aesthetics的真实图像标题(不包括具有重复标题或重复图像url的样本)。我们之所以选择LAION数据集,是因为它的大小、内容的多样性(包括对专有名词和流行文化的引用)和媒介的多样性(照片、绘画、数字艺术品)。LAION的一个潜在缺点是它非常嘈杂,并且包含许多无意义或描述性的标题——然而,我们发现通过数据集过滤(第3.1.2节)和无分类器指导(第3.2.1节)的组合可以减轻数据集噪声。我们生成的指令和标题的最终语料库由454,445个示例组成。
表1。我们标记了一个小型文本数据集,微调GPT-3,并使用该微调模型生成一个大型文本三元组数据集。作为标记示例和生成示例的输入标题,我们使用来自LAION的真实图像标题。高亮显示的文本是由GPT-3生成的。
从配对字幕生成配对图像
接下来,我们使用预训练的文本到图像模型将一对字幕(参考编辑前后的图像)转换为一对图像。将一对字幕转换为一对相应的图像的一个挑战是,文本-图像模型不能保证图像的一致性,即使在条件的非常微小的变化下也是如此提示。例如,两个非常相似的提示:“一只猫的图片”和“一只黑猫的图片”可能会产生截然不同的猫的图像。这并不适合我们的目的,我们打算使用这些配对数据作为监督来训练模型来编辑图像(而不是产生不同的随机图像)。因此,我们使用了Prompt-to-Prompt[17],这是一种最近的方法,旨在鼓励文本到图像扩散模型的多代相似。这是通过在一些去噪步骤中借用交叉注意权重来完成的。图3显示了使用和不使用Prompt-to-Prompt的采样图像的比较。
图3。使用StableDiffusion[52]和不使用Prompt-to-Prompt[17]生成的一对图像。两者对应的标题都是“女孩骑马的照片”和“女孩骑马的照片”。
虽然这极大地有助于吸收生成的图像,但不同的编辑可能需要对图像空间进行不同程度的更改。例如,较大幅度的变化,例如那些改变大规模图像结构的变化(例如,四处移动物体,用不同形状的物体替换),可能对生成的图像对的相似性要求较低。幸运的是,Prompt-to-Prompt有一个参数可以控制两个图像之间的相似性:具有共享注意力权重的去噪步骤p的比例。不幸的是,仅从标题和编辑文本中识别p的最佳值是很困难的。因此,我们为每个标题对生成100个样本对图像,每个图像具有随机的p ~ U(0.1, 0.9),并对这些图像进行过滤 使用基于CLIP的度量:Gal等人[14]引入的CLIP空间中的方向相似性。该度量度量两个图像(在CLIP空间中)之间的变化与两个图像标题之间的变化的一致性。执行这种过滤不仅有助于最大限度地提高图像对的多样性和质量,而且还使我们的数据生成对提示到提示和稳定扩散的失败更加健壮。
InstructPix2Pix
我们使用生成的训练数据来训练一个条件扩散模型,该模型可以根据书面指令编辑图像。我们的模型基于稳定扩散,这是一种大规模文本到图像的潜在扩散模型。
扩散模型[60]学习通过一系列去噪自编码器来生成数据样本,这些自编码器估计数据分布的分数[23](指向更高密度数据的方向)。潜伏扩散[52]通过在预训练的具有编码器E和解码器d的变分自编码器[30]的潜伏空间中运行,提高了扩散模型的效率和质量。对于图像,扩散过程在编码的潜伏z = E(x)中添加噪声,产生噪声潜伏zt,其中噪声水平随着时间步长t∈t而增加。我们学习了一个网络θ,在给定图像条件cI和文本指令条件cT的情况下,该网络可以预测添加到噪声潜在zt中的噪声。我们最小化以下潜在扩散目标:
两种条件下的无分类器引导
无分类器扩散指导[20]是一种权衡扩散模型生成的样本质量和多样性的方法。它通常用于类条件图像和文本条件图像生成,以提高生成图像的视觉质量,并使采样图像更好地与其条件相对应。无分类器引导有效地将概率质量向数据转移,其中隐式分类器pθ(c|zt)将高似然性分配给条件c。无分类器引导的实现包括联合训练扩散模型进行条件和无条件去噪,并在推理时组合两个得分估计。无条件去噪的训练是通过在训练期间简单地将条件设置为某个频率下的固定零值c=∅来完成的。在推理时,当引导量表s≥1时,在di中外推修正的得分估计值eθ(zt,c)-朝向条件eθ(zt,c),远离无条件eθ。
对于我们的任务,分数网络eθ(zt,cI,cT)有两个条件:输入图像cI和文本指令cT。我们发现,在两种条件下利用无分类器指导是否有益。Liu等人[38]证明,条件扩散模型可以从多个不同的条件值中组合分数估计。我们将相同的概念应用于具有两个单独条件输入的模型。在训练过程中,我们随机设置5%的样本只有cI=∅I,5%的样本只有cT=⇼T,5%的示例同时有cI=?I和cT=?T。因此,我们的模型能够对两个或两个条件输入进行条件或无条件的去噪。我们引入了两个指导量表,sI和sT,可以调整它们来权衡生成的样本与输入图像的对应程度和它们与编辑指令的对应程度。我们修改后的分数估计如下:
在图4中,我们显示了这两个参数对生成样本的影响。关于我们的无分类器引导公式的详细信息,请参见附录B
结果
我们在一组不同的真实照片和艺术品上展示了基于指令的图像编辑结果,用于各种类型的编辑和指令文字。所选结果见图1、5、6、7、11、12、15、16、17、18和19。我们的模型成功地执行了许多具有挑战性的编辑,包括替换对象、更改季节和天气、替换背景、修改材质属性、转换艺术媒介等。
我们将我们的方法与最近的几部作品SDEdit[39]和Text2Live[6]进行了定性比较。我们的模型遵循如何编辑图像的说明,但之前的工作(包括这些基线方法)需要对图像(或编辑层)进行描述。因此,我们为他们提供了“编辑后”的文字说明,而不是编辑说明。我们还将我们的方法与SDEdit进行了定量比较,使用了两个衡量图像一致性和编辑质量的指标,如第4.1节所述。最后,我们在第4.2节中展示了生成的训练数据的大小和质量如何影响我们模型的性能。
图5。蒙娜丽莎变成了各种艺术媒介。
图6。亚当的创造与新的背景和主题(以768分辨率生成)。
图7。披头士乐队标志性的专辑《艾比路》封面以各种方式发生了变化。
训练配置
我们在8×40GB NVIDIA A100 GPU上训练我们的图像编辑模型,在25.5小时内完成10000步。我们以256×256的分辨率进行训练,总批量大小为1024。我们应用随机水平翻转增强和裁剪增强,其中图像首先在256和288像素之间随机调整大小,然后裁剪到256。我们使用10−4的学习率(没有任何学习率预热)。从Stable Diffusion v1.5检查点的EMA权重初始化我们的模型,并采用公共Stable Diffusion代码库中的其他训练设置。虽然我们的模型是在256×256分辨率下训练的,但我们发现它在推理时很好地推广到512×512分辨率,并在本文中使用Kerras等人提出的具有去噪方差调度的Euler祖先采样器在512分辨率下生成了100个去噪步骤的结果[25]。在A100 GPU上使用我们的模型编辑图像大约需要9秒。
相关文章:

【AIGC】InstructPixPix:基于文本引导的图像编辑技术
github:diffusers/examples/instruct_pix2pix/train_instruct_pix2pix_sdxl.py at main huggingface/diffusers GitHub 论文:https://arxiv.org/pdf/2211.09800 摘要 我们提出了一种从人类指令编辑图像的方法:给定一个输入图像和告诉模型做什么的书面…...

无人机动力系统设计之桨叶推力计算
无人机动力系统设计之桨叶推力计算 1. 源由2. 关键参数2.1 特性参数2.1.1 材质(Material)2.1.2 叶片数量(Number of Blades)2.1.3 重量(Weight)2.1.4 噪音水平(Noise Level) 2.2 安装…...

LabVIEW重构其他语言开发的旧系统
在面对一个运行已久、代码不清晰的项目时,如果该项目涉及复杂的通讯协议(如串口和488通讯),重新开发并优化成LabVIEW版本可以极大提升系统的易用性和维护性。为了确保通讯协议的顺利解析和移植,借助专业工具分析现有通…...
[晕事]今天做了件晕事43 python-byte串长度与转义字符
今天办了一件晕事,导致测试结果与预期不一致。 过程是,组装byte串的时候,整个字符串里有转义字符\x0d。 from scapy.all import IPv6, UDP pkt IPv6(src"2002:db8:a0b:12f0::157", dst"2002:db8:a0b:12f0::13")/UDP(sp…...

初识redis(String,Hash,List,Set,SortedSet)
认识NoSql sql关系型数据库 nosql非关系型数据库 nosql具有非结构化,Key/Value,Document,Draph 无关联的,非sql,BASE(原子性,持久性,一致性,隔离性) 认识r…...
Ton与ETH的一些独特的区别
文章目录 前言一、智能合约需要收取租金。二、从数据到大数据的转变三、智能合约不能运行其他合约的getter方法四、合约不是无法改变的五、Ton取消了无限制的数据结构六、钱包和地址具有独立性 前言 TON区块链是一个现代化的区块链,它为智能合约开发带来了一些全新…...

C++ | Leetcode C++题解之第396题旋转图像
题目: 题解: class Solution { public:int maxRotateFunction(vector<int>& nums) {int f 0, n nums.size();int numSum accumulate(nums.begin(), nums.end(), 0);for (int i 0; i < n; i) {f i * nums[i];}int res f;for (int i …...

前向渲染路径
1、前向渲染路径处理光照的方式 前向渲染路径中会将光源分为以下3种处理方式: 逐像素处理(需要高等质量处理的光)逐顶点处理(需要中等质量处理的光)球谐函数(SH)处理(需要低等质量…...

Python画笔案例-040 绘制五角星顶圆
1、绘制五角星顶圆 通过 python 的turtle 库绘制五角星顶圆,如下图: 2、实现代码 绘制五角星顶圆,以下为实现代码: """五角星顶圆.py """ import turtledef draw_circle(d):turtle.left(90)for _ …...

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例
伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教…...
期货量化-群体优化算法:混合蛙跳算法(SFL)
1. 概述 混合蛙跳算法(Shuffled Frog Leaping Algorithm, SFL)由 M. Eusuff 等人在2003年提出。这一算法结合了模因算法与粒子群优化算法的原理,灵感来源于一群青蛙在觅食过程中的行为模式。 SFL 最初作为一种求解组合优化问题的元启发式方法…...
tensorflow-线性回归python入门
目录 读入库 构造数据 建立训练和测试数据 创建第一层到最后一层的神经网络 开始测试 sin函数回归 读入库 import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import time 构造数据 X np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, …...
VSCode学习笔记
1. 快捷键 KeyDescriptionPlatformF1打开命令面板(Command Palette)Win10Shift Delete剪切当前光标所在的代码行Win10 2. 文件 2.1 在文件列表中定位当前文件 操作路径:右键单击文件名 ⇒ 在右键菜单中点击 【Reveal in Explorer View】...

【Canvas与艺术】菊花孔雀螺旋
【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>菊花孔雀螺旋</title><style type"text/css">…...

circuitjs 普通开关和按钮开关
circuitjs 各类开关中最基本的有 (普通)开关 和 按钮开关(瞬时开关). 添加 在菜单 “绘制–无源元件–添加开关” 下可以添加一个普通开关.在菜单 “绘制–无源元件–添加按钮开关” 下可以添加一个按钮开关. 两者在缺省外观上没有什么区别, 如上, 左边是普通开关, 右边是按钮…...

客户端绑定本地端口与服务器建立连接的详细实现
客户端绑定本地端口与服务器建立连接的详细实现 一、网络编程基础1.1 TCP/IP协议1.2 套接字(Socket)1.3 客户端与服务器模型二、客户端程序的设计2.1 需求分析2.2 流程设计三、具体代码实现3.1 伪代码3.2 C代码实现四、代码详解4.1 初始化套接字库4.2 创建套接字4.3 绑定本地…...
C++ std::bind函数用法
看一个例子解释用法: TcpServer类的构造函数中定义: acceptor_->setNewConnectionCallback(std::bind(&TcpServer::newConnection, this,std::placeholders::_1, std::placeholders::_2));// 有一个新的客户端的连接,acceptor会执行这…...

Caffenie配合Redis做两级缓存
一、什么是两级缓存 在项目中。一级缓存用Caffeine,二级缓存用Redis,查询数据时首先查本地的Caffeine缓存,没有命中再通过网络去访问Redis缓存,还是没有命中再查数据库。具体流程如下 二、简单的二级缓存实现-v1 目录结构 2…...

MATLAB实现PID参数自动整定
目录 1、项目说明 2、文件说明 1、项目说明 本项目旨在通过 MATLAB 语言实现 PID 参数的自动整定,并设计了一个直观易用的 GUI 界面。该系统特别适用于实验室环境下的 PID 参数自整定任务。整定的核心原则在于优化系统性能,使系统的衰减比尽可能接近理…...

UE5学习笔记21-武器的射击功能
一、创建C类 创建武器子弹的类,创建生产武器子弹的类,创建弹壳的类,生产武器子弹的类的父类是武器的类 创建后如图,ProjectileMyWeapon类(产生子弹的类)继承自weapon类,Projectile(子弹的类),Casing(弹壳声…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 在 GPU 上对图像执行 均值漂移滤波(Mean Shift Filtering),用于图像分割或平滑处理。 该函数将输入图像中的…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...