InstructPix2Pix:通过用户指令编辑图像

news2024/9/20 20:50:54

Brooks T, Holynski A, Efros A A. Instructpix2pix: Learning to follow image editing instructions[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 18392-18402.

InstructPix2Pix 所做的任务是根据用户指令编辑图像。InstructPix2Pix 先使用预训练的 LLM 和 T2I 模型生成大量的训练样本,然后使用生成的样本训练一个条件 diffusion 模型。训练完成的 InstructPix2Pix 可以按用户指令的要求对输入图像进行编辑,包括替换元素、改变风格和背景等。由于图像编辑是发生在 diffusion 的正向过程中,因此训练完成的 InstructPix2Pix 可以在几秒内完成图像编辑,速度非常快。

在这里插入图片描述

目录

  • 一. 研究思路
  • 二. 生成多模态训练数据
    • 1. GPT-3 微调
    • 2. Stable Diffusion 修改
  • 三. 训练 InstructPix2Pix 模型
  • 四. 图像生成
  • 五. 总结
  • 六. 复现

一. 研究思路

InstructPix2Pix 的目的是按照人为指令进行图像编辑,因此模型只需要输入待编辑的图像和编辑指令,不需要其他任何描述或额外图像,训练完成后进行推理时也不需要额外的微调。但由于缺少训练数据,需要先自行生成大量(原始图像,编辑指令,编辑图像)对以供训练。

二. 生成多模态训练数据

InstructPix2Pix 将大语言模型 GPT-3 和文生图模型 Stable Diffusion 相结合,生成可用于训练的编辑指令和图像:

  1. 使用 GPT-3 生成原始图像标题 (Input Caption)、编辑指令 (Instruction) 和编辑图像标题 (Edited Caption);
  2. 使用 Stable Diffusion 根据原始图像和编辑图像的标题生成原始图像和编辑图像;
  3. 将原始图像、编辑指令和编辑图像打包,就得到了可用于训练的数据。

在这里插入图片描述

1. GPT-3 微调

使用 GPT-3 生成(原始图像标题,编辑指令,编辑图像标题)时,需要对 GPT-3 进行微调以达到生成 triplets 的目的:

  1. 在 LAION-Aesthetics V2 6.5+ 数据集上采样 700 个图像标题作为原始图像标题,然后人为标注对应的编辑指令和编辑图像标题;
  2. 使用这 700 组数据对 GPT-3 进行微调;
  3. 使用微调后的 GPT-3 生成 454445 组(原始图像标题,编辑指令,编辑图像标题);

在这里插入图片描述
如图所示,图中 Input LAION caption 一列都是取自 LAION,第二列和第三列的前一半是人工标注的,后一半浅绿色高亮的是 GPT-3 生成的。

2. Stable Diffusion 修改

使用 Stable Diffusion 根据(原始图像标题,编辑图像标题)生成(原始图像,编辑图像)时,最棘手的问题就是相似的标题描述可能会生成相差较大的图像,下图为 Stable Diffusion 分别根据 “photograph of a girl riding a horse” 和 “photograph of a girl riding a dragon” 生成的图像:
在这里插入图片描述

这显然不适合用于 InstructPix2Pix 的训练,因为编辑前后的背景、人物也完全不一样。于是引入了 Prompt-to-Prompt 1,通过在某些逆扩散过程中共享交叉注意力权重,使得 diffusion 生成相似的图像。

不仅如此,Prompt-to-Prompt 还可以调节逆扩散共享交叉注意力权重的系数 p p p,以达到不同编辑对图像变化大小的控制。但图像变化大小的控制很难直接从图像标题中得出,因此在实际应用中对 p ∼ U ( 0.1 , 0.9 ) p \sim \mathcal{U}(0.1,0.9) pU(0.1,0.9) 采样,生成 100 组图像再用 CLIP 进行筛选。

三. 训练 InstructPix2Pix 模型

InstructPix2Pix 初始化为预训练的 Stable Diffusion,使用生成的(原始图像,编辑指令,编辑图像)数据对进行训练:
在这里插入图片描述

因为 InstructPix2Pix 的输入同时包含原始图像和编辑指令,因此需要在 Stable Diffusion 文本条件 (text condition) 的基础上加上图像条件 (image condition),记文本条件为 c T c_T cT,图像条件为 c I c_I cI c T c_T cT 直接传入 text condition 的输入口即可; c I c_I cI 则在编码器 E E E 的压缩后与隐变量 z t z_t zt 拼接,因此需要在模型的第一个卷积层中增加额外的条件输入通道。

为了进一步提高图像生成效果以及模型对输入条件的遵循程度,InstructPix2Pix 还引入了 Classifier-free 引导策略。详见 UC伯克利提出AIGC图像编辑新利器InstructPix2Pix,AI模型P图更加精细。

四. 图像生成

在推理阶段,输入原始图像和编辑指令,InstructPix2Pix 就可以输出编辑后的图像:
在这里插入图片描述

五. 总结

InstructPix2Pix 借助 GPT-3 和 Stable Diffusion 生成大规模训练样本,再使用这些训练样本继续训练 Stable Diffusion,从而构建出一个具有更高智能的图像编辑模型 InstructPix2Pix。正因为 InstructPix2Pix 是在大规模数据中训练得到的,所以这是一个通用的图像编辑模型,使用前不需要根据特定任务再做微调,而可以在短暂的几秒内完成图像的编辑。InstructPix2Pix 的出现解决了此前图像编辑方法中存在的编辑指令不直接、不确定的问题,大大推进了 AIGC 的发展进程。

经过实验还发现,InstructPix2Pix 的应用局限于风格和背景的调整,对于局部元素的编辑、增加或删除,效果有待提高。

六. 复现

InstructPix2Pix 的训练需要先使用 GPT-3 和 Stable Diffusion 生成数百个 G 的数据集,再在 8 张 40GB NVIDIA A100 GPU 上训练 25.5 个小时。如果时间经费有限,建议直接使用开源的预训练模型做下游任务,README 中的 quickstart 写的相当简洁清晰,创建环境后下载预训练模型即可。

  • 平台:AutoDL
  • 显卡:A100-PCIE-40GB 40GB
  • 镜像:PyTorch 2.0.0、Python 3.8(ubuntu20.04)、Cuda 11.8
  • 源码:https://github.com/timothybrooks/instruct-pix2pix

实验记录

  1. 一开始使用 RTX 3090,编辑图像时一直报错显示 GPU 驱动版本过低,升级驱动 也没成功。后来换成 A100,配有 535.129.03 版本驱动,就可以了;
    在这里插入图片描述
  2. 创建完 ip2p 虚拟环境后,使用 conda activate 指令无法激活环境,改为 source activate 即可;
  3. 下载预训练模型时经常发生中断,如图所示还有没有读完的 bytes:
    在这里插入图片描述
    如果没有完全下载完成就执行任务,会出现 RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory 报错:
    在这里插入图片描述
    如下图没有 Left time 才是下载完成,下载完成后才可以执行图像编辑任务:
    在这里插入图片描述
  4. 如果 bash scripts/download_checkpoints.sh 总是下载中断,也可以手动执行脚本内指令,下载到本地再用 FillZilla 上传至 checkpoints 文件夹;
  5. 第一次执行时需要下载模型文件和加载管道组件,费时较长,耐心等待即可。以后每次调用就可以直接加载;
    在这里插入图片描述

实验结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到,InstructPix2Pix 的主要应用场景还是图像风格和背景的编辑,对于元素替换以及增减这样的局部调整,效果有待提高:

在这里插入图片描述

在这里插入图片描述


  1. Prompt-to-Prompt:基于 cross-attention 控制的图像编辑技术 ↩︎

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

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

相关文章

SSM整合实战(Spring、SpringMVC、MyBatis)

五、SSM整合实战 目录 一、SSM整合理解 1. 什么是SSM整合?2. SSM整合核心理解五连问! 2.1 SSM整合涉及几个IoC容器?2.2 每个IoC容器盛放哪些组件?2.3 IoC容器之间是什么关系?2.4 需要几个配置文件和对应IoC容器关系&…

Ubuntu系统的基础操作和使用

文章目录 系统安装系统界面文件系统包管理命令行常见问题 Ubuntu是一个基于Debian的Linux发行版,以桌面应用为主。它是自由软件,意味着你可以自由地使用、复制、研究、修改和改进这个软件。下面我们将详细介绍Ubuntu系统的基础操作和使用。 系统安装 U…

Android Studio开发之路(六)(合集)界面优化以及启动图标等

一、导航栏背景、字体修改 导航栏、状态栏等背景颜色的修改一般是在themes.xml文件中修改,android一个activity各个部件参考: colorPrimary,colorPrimaryDark等的意义 添加链接描述 但是问题在于:只在这里修改背景颜色的话,可能…

人工智能的发展之路:时间节点、问题与解决办法的全景解析

导言 人工智能的发展历程充满了里程碑式的事件,从早期的概念到今天的广泛应用,每个时间节点都伴随着独特的挑战和创新。本文将详细描述每个关键时间节点的事件,探讨存在的问题、解决办法,以及不同阶段之间的联系。 1. 195…

[学习笔记]SQL Server中批量查找所有符合Where条件的记录

目标:在SQL Server中查找所有表的UserId 50的记录 创建一个表变量来存储所有包含’UserId’列的表的名称。然后使用一个游标遍历这些表,并对每个表执行一个动态SQL查询 DECLARE TableName nvarchar(256), ColumnName nvarchar(128), SearchStr2 nvarc…

如何在公网环境使用固定域名远程访问内网BUG管理系统协同办公

文章目录 前言1. 本地安装配置BUG管理系统2. 内网穿透2.1 安装cpolar内网穿透2.2 创建隧道映射本地服务3. 测试公网远程访问4. 配置固定二级子域名4.1 保留一个二级子域名5.1 配置二级子域名6. 使用固定二级子域名远程 前言 BUG管理软件,作为软件测试工程师的必备工具之一。在…

【大模型实践】Langchain-Chatchat构建对话模型(二)

本文介绍如何使用Langchain-Chatchat构建论文知识库和文件对话。 关于Langchain-Chatchat: 🤖️ 一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 …

基于vue-cli快速发布vue npm 包

一、编写组件 1. 初始化项目并运行 vue create vue-digital-countnpm run serve2. 组件封装 新建package文件夹 ​ 因为我们可能会封装多个组件,所以在src下面新建一个package文件夹用来存放所有需要上传的组件。 ​ 当然,如果只有一个组件&#xff…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程: 1、项目经理分配模块开发任务给开发人员(项目经理-开发) 2、每个模块单独开发完毕(开发),单元测试(测试) 3、开发完毕后,集成部…

【人生苦短,我学 Python】(9)分支判断和循环

目录 简述 / 前言1. 顺序结构2. 选择结构2.1 单分支2.2 双分支2.3 多分支 3. 循环结构3.1 for 循环3.1.1 range() 3.2 while 循环3.2.1 break 语句3.2.1 continue 语句 3.3 死循环 4. enumerate 函数5. zip 函数文章传送门 简述 / 前言 前面讲了输入、输出和文件的读写&#x…

【UML】第5篇 UML中的视图和图

目录 一、视图和图 二、图的种类 2.1 结构图 2.2 行为图 图是UML中最重要的概念了,起码我是这么认为。 上篇关于低代码的文章,我也说了,未来也许AI编码,我们更重要的工作,是能够为业务进行建模,拆解&a…

【51单片机系列】C51中的中断系统扩展实验

本文是关于51单片机中断系统的扩展实验。 文章目录 一、 扩展实验一:使用外部中断0控制蜂鸣器,外部中断1控制直流电机二、扩展实验二:修改定时器初值,设定3秒钟的定时时间让LED模块闪烁三、扩展实验三:使用定时器1和数…

KBP310-ASEMI适配高端电源KBP310

编辑:ll KBP310-ASEMI适配高端电源KBP310 型号:KBP310 品牌:ASEMI 封装:KBP-4 最大平均正向电流:3A 最大重复峰值反向电压:1000V 产品引线数量:4 产品内部芯片个数:4 产品内…

哈希算法专栏二《力扣题目练习》

引言 在了解了哈希表的基础理论之后,我们就可以开始进行刷题实战了。下面是我在力扣上找的一些题目,认真刷完并理解下面的题目,相信读者至少可以初步掌握哈希算法的思想了。 LeetCode242有效的字母异位词 242. 有效的字母异位词 已解答 简…

智能化安防与监控:全球发展、挑战与未来趋势

导言 智能化安防与监控系统在全球范围内得到广泛应用,成为社会安全和公共管理的重要工具。本文将深入研究其发展历程、遇到的问题及解决过程、未来的可用范围,以及在各国的应用和未来的研究趋势,以探讨在哪些方面能取胜,并在哪些方…

简易实现 STL--list

实现 list 的主要思想及过程 首先,实现过程中的所有代码必须放在自己定义的命名空间中。 定义一个结点的结构体类模板,结点的数据类型就应该是模板类型 T,定义的 next指针和 prev指针都应该是模板指针类型,并且结构体类中药有构…

git的使用思维导图

源文件在github主页:study_collection/cpp学习/git at main stu-yzZ/study_collection (github.com)

力扣:77. 组合(回溯, path[:]的作用)

题目: 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4], ] 示例 2: 输入&…

MS5541/MS5542,高精度DAC,2.7V 到 5.5V、串行输入、电压输出、16 位数模转换器,可替代AD5541

MS5541/MS5542 是一款单通道、 16 位、串行输入、电压 输出的数模转换器,采用 2.7V 至 5.5V 单电源供电,输出范围 为 0V 至 V REF 。在输出范围内保证单调性,在温度范围为 -40 C 至 85 C 能够提供 1LSB INL 的 14 位精度。…

pycharm git 版本回退

参考 https://blog.csdn.net/qq_38175912/article/details/102860195 yoyoketang 悠悠课堂