InstructPix2Pix: 动动嘴皮子,超越PS
摘要:InstructPix2Pix提出了一种使用文本编辑图像的方法:给定输入图像和编辑指令,告诉模型要做什么,模型将遵循这些指令来编辑图像。
本文分享自华为云社区《InstructPix2Pix: 动动嘴皮子,超越PS》,作者:杜甫盖房子。
InstructPix2Pix: Learning to Follow Image Editing Instructions
InstructPix2Pix提出了一种使用文本编辑图像的方法:给定输入图像和编辑指令,告诉模型要做什么,模型将遵循这些指令来编辑图像,如:

我们在ModelArts中发布了一个notebook方便大家玩一玩,同时也将对模型的实现方法进行简单介绍:

方法概览
在InstructPix2Pix中,作者通过有监督的方法来实现文本编辑图像。方法主要包括两部分:
- 数据集生成:作者整合了语言模型GPT-3和文生图模型Stable Diffusion,生成了一个用于图像编辑的数据集;
- 模型训练:作者使用生成的数据集训练了一个条件扩散模型来实现文本编辑图像:

在推理时,图像在模型forward过程中被编辑,不需要微调,因此推理速度很快,可玩性较高。
数据准备
在数据准备时,首先通过GPT-3生成一些文本编辑指令,之后通过Stable Diffusion和Prompt-to-Prompt生成编辑前后文本图像对。
生成文本编辑指令
作者使用了700条人工标注的文本编辑指令三元组微调GPT-3,之后使用微调过的GPT-3生成大规模的文本三元组。如下图,文本三元组包括(1)输入描述;(2)编辑指令;(3)编辑后的描述。
在使用GPT-3生成数据集时只需提供输入描述,高亮的编辑指令与输出描述都由GPT-3生成,这样可以保证描述指令的多样性。

生成图像对
在得到描述对后,作者使用Stable Diffusion将编辑前与编辑后的描述转换成图像对。在这个过程中面临了一个挑战:即使输入提示只有微小的不同,生成的图像也无法保证内容的一致性,如分别使用“photograph of a girl riding a horse”和“photograph of a girl riding a dragon”为提示生成图像,会得到下图内容:

为了解决此问题,作者使用了Prompt-to-Prompt方法。该方法通过在扩散过程中注入原始图像的注意力图来控制编辑图像的注意力映射,实现了内容一致的图像生成。使用该方法与相同的提示词,会得到下图内容:

作者共生成 454,445 个样本,生成的数据可以通过开源脚本下载。
条件扩散模型
InstructPix2Pix通过训练条件扩散模型来实现根据输入图像和文本指令来编辑图像的功能。作者使用预训练的Stable Diffusion对模型进行初始化,同时在第一个卷积层增加了额外的条件通道来支持图像编辑。在训练时模型将输入图像xx编码为隐向量z=E(x)z=E(x),在扩散过程中将噪声tt添加到编码向量zz中得到隐噪声变量ztzt,其中噪声等级随时间提升。
训练一个网络ϵθϵθ来预测在给定的图像条件cIcI和文本指令cTcT下的噪声tt,目标函数:

为了平衡扩散模型生成的样本的质量和多样性,作者在InstructPix2Pix中引入了Classifier-free Guidance方法。当我们使用一个条件来生成图像时,我们希望生成的图像与该条件有较高的相关性,Classifier-free Guidance利用一个隐式分类器 pθ(c∣zt)pθ(c∣zt) 来对生成的样本进行评分。其中,ztzt是一个编码图像的潜在表示,cc是一个条件,可以是一个文本描述或者其他图像。这个分类器会对每个样本分配一个相应的分数,表示该样本与给定条件的相关性。训练时,会通过噪声引导使概率偏向那些隐式分类器得分高的数据点上,从而提高生成的样本与给定条件的相关性。
对于文本编辑图像任务,作者设计了评分网络 eθ(zt,cI,cT)eθ(zt,cI,cT),对于图像条件cIcI和文本指令cTcT设计了指导尺度sIsI和sTsT,可以调整网络对输入图像和编辑指令的遵循程度:

针对不同的指导尺度作者给出了示例实验结果:

更多实验结果与局限性讨论可以在Project Page中查看。
案例介绍
上文提到,为了方便大家玩一玩,我们ModelArts中发布了一键运行的notebook,除了可以免去复杂的环境适配步骤外,还可以享受免费GPU资源
开源模型下载好慢好慢,体贴的我也为大家将资源转存到OBS中:

此外,预训练模型只支持英文,哪里有英语废,哪里就有翻译,翻译模型也准备好了,惊不惊喜,意不意外:

案例使用gradio搭建了一个小小的应用,一键运行后直接在应用框输入图片与中文编辑命令生成结果即可:

使用结束后不要忘记关闭哦:

InstructPix2Pix: 动动嘴皮子,超越PS的更多相关文章
- 面试想拿 10K,HR 说你只值 7K,该怎样回答或者反驳?
当HR压你价,说你只值7K时,你可以流畅地回答,记住,是流畅,不能犹豫. 礼貌地说:"7K是吗?了解了.嗯~其实我对贵司的面试官印象很好.只不过,现在我的手头上已经有一份11K的offer. ...
- 控制反转(Inversion of Control)之我的理解
关于控制反转(Inversion of Control),在具体实现上也有许多其它的叫法,如依赖倒置(Dependency Inversion Principles, DIP).依赖注入(Depend ...
- 夏宇闻教授谈FPGA工程师的入门学习
1. 必须清楚自己究竟适合不适合做工程师. 看看自己的性格特点,是不是特别安静,又耐得住寂寞.因为FPGA工程师是一个辛苦的工作,不但要通过不断学习研究提升自己的设计水平,还要经常性的熬夜加班敲写代码 ...
- 【转载】给想要入门渗透的人的忠告——schiz0wcingU
最近发现很多拥有黑客梦想的年轻人在群里或者论坛里,找"师傅"或者学一些所谓的"社工" 这些找师傅的人当中,有极大一部分人是还在上学的学生,自然也就没有收入来源, ...
- 听说尤雨溪在开发vue4.0?是谁煽动了前端圈的焦虑情绪
导火索因P图而起 今天前端圈里被一张P图搞得好热闹,最初只是QQ群里一个冒名尤雨溪的前端网友发了一句调侃的话,原话截图如下: 看完觉得好搞笑,说尤雨溪在开发vue4.0,有谁学不动了,就给他发10块钱 ...
- 【硅谷问道】Chris Lattner 访谈录(上)
[硅谷问道]Chris Lattner 访谈录(上) 话题 Chris Lattner 是谁? Xcode 的编译器 LLVM 背后有怎样的故事? Swift 诞生的前世今生,封闭的苹果为何要拥抱开源 ...
- emmm 深入浅出教你看懂现代金融游戏
3303只信仰公平[网易陕西省西安网友]1 比特币是骗人的.你们都被“现代帼家纸币”概念茜脑了,而且茜的很彻底,所以你们看不透比特币的骗局.简单来说,现代纸币是“空气纸”,比特币是“空气币(空气数据) ...
- 为什么我严重不建议去培训机构参加SAP培训?
欢迎关注微信公众号:sap_gui (ERP咨询顾问之家) 关于是否要参加SAP培训的话题已经是老生常谈了,知乎上随便一搜有好多人在问是否要去参加SAP培训,底下已经有很多人在上面给出了正确建议.但也 ...
- 硝烟中的Scrum和XP
硝烟中的Scrum和XP 初次接触Scrum和XP(更加准确的说是"看到"),心里不免有些疑问,软件开发为什么会有如此多的方式,难道软件开发.软件工程不就是写写代码的事儿吗?直到后 ...
- 10 Dubbo 配置实战
Dubbo 配置实战 快速入门 dubbo 建议看这篇文章是在学习了快速入门 dubbo 那篇文章的基础上来学习 配置说明 文档地址 https://dubbo.apache.org/zh/index ...
随机推荐
- JAVA XML转对象
最近遇到XML转对象进行业务操作的问题 这是我需要解析的XML 1,建XML对应自己需要参数的Bean.有的很长很乱,没必要全部建,只建自己需要的就行了 import lombok.Data; imp ...
- 最简单明了的yield from解释
def one(): print('one start') res = yield from two() print('function get res: ', res) return 'one' + ...
- Flink监控信息写入到PushGateway出现 java.io.IOException: Response code from http xx was 200问题
最近在将Flink的Metrics存储由InfluxDB迁移到Prometheus的时候,由于使用的版本问题,导致一直出现下面的WARN日志 2020-05-16 12:36:57.794 [Flin ...
- Spectracom 默认口令
网络空间搜索: FoFa 找到页面: 默认口令 在github上去找 登陆成功 End!!!
- 第08组Beta冲刺(3/4)
队名 八组评分了吗 组长博客链接(2分) 组员1李昕晖(组长) 过去两天完成了哪些任务 文字/口头描述 了解各个小组的进度与难以攻破的地方,晚上安排开会,安排新的冲刺任务. 重新分配小组及个人任务. ...
- Windows+svn +Jenkins+发布NetCore/VUE项目
1. NetCore环境下载,注意是下载SDK,不是Runtime:https://dotnet.microsoft.com/download/dotnet-core?utm_source=getdo ...
- 5、MySQL中的锁
1.6. MySQL中的锁 InnoDB中锁非常多,总的来说,可以如下分类: 这些锁都是做什么的?具体含义是什么?我们现在来一一学习. 1.6.1.解决并发事务问题 我们已经知道事务并发执行时可能带来 ...
- 音速启动 Vstart 5.7 win10手动移除后台设置主页
Vstart 用了快12年了,用Wireshark跟踪确实会访问广告页面,也会去上传数据.还会悄悄设置主页 ,所以在Win10上老是被干掉 也想着换 CLaunch 确实不喜欢. Rolan 买了一年 ...
- mysql零基础-3
第17章_触发器 在实际开发中,我们经常会遇到这样的情况:有 2 个或者多个相互关联的表,如 商品信息 和 库存信息 分 别存放在 2 个不同的数据表中,我们在添加一条新商品记录的时候,为了保证数据的 ...
- latex常见的错误(自己经常出现的)
1. undifned control consequence 有非法的命令---有可能没有导入对应的宏包.见latex常用的宏包. 2. See the amsmath package docum ...