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 可以在几秒内完成图像编辑,速度非常快。

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

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

如图所示,图中 Input LAION caption 一列都是取自 LAION,第二列和第三列的前一半是人工标注的,后一半浅绿色高亮的是 GPT-3 生成的。
使用 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) p∼U(0.1,0.9) 采样,生成 100 组图像再用 CLIP 进行筛选。
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 写的相当简洁清晰,创建环境后下载预训练模型即可。
实验记录:

ip2p 虚拟环境后,使用 conda activate 指令无法激活环境,改为 source activate 即可;
RuntimeError: PytorchStreamReader failed reading zip archive: failed finding central directory 报错:

bash scripts/download_checkpoints.sh 总是下载中断,也可以手动执行脚本内指令,下载到本地再用 FillZilla 上传至 checkpoints 文件夹;
实验结果:




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


更多【机器学习-InstructPix2Pix:通过用户指令编辑图像】相关视频教程:www.yxfzedu.com