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

Paper: 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.
Introduction: https://www.timothybrooks.com/instruct-pix2pix/
Code: https://github.com/timothybrooks/instruct-pix2pix

InstructPix2Pix 所做的任务是根据用户指令编辑图像。InstructPix2Pix 先使用预训练的 LLM 和 T2I 模型生成大量的训练样本,然后使用生成的样本训练一个条件 diffusion 模型。训练完成的 InstructPix2Pix 可以按用户指令的要求对输入图像进行编辑,包括替换元素、改变风格和背景等。由于图像编辑是发生在 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 写的相当简洁清晰,创建环境后下载预训练模型即可。(HuggingFace 也提供了 demo,可以在线使用)

  • 平台: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. 第一次执行时需要下载模型文件和加载管道组件,费时较长,耐心等待即可。以后每次调用就可以直接加载:python edit_cli.py --input imgs/example.jpg --output imgs/output.jpg --edit "XXX"
    在这里插入图片描述

实验结果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述


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

  • 23
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值