乐趣区

关于人工智能:使用-InstructPix2Pix-对-Stable-Diffusion-进行指令微调

本文次要探讨如何应用指令微调的办法教会 Stable Diffusion 依照指令 PS 图像。这样,咱们 Stable Diffusion 就能听得懂人话,并依据要求对输出图像进行相应操作,如: 将输出的天然图像卡通化

图 1:咱们摸索了 Stable Diffusion 的指令微调能力。这里,咱们应用不同的图像和提醒对一个指令微调后的 Stable Diffusion 模型进行了测试。微调后的模型仿佛可能了解输出中的图像操作指令。(倡议放大并以彩色显示,以获得最佳视觉效果)

InstructPix2Pix: Learning to Follow Image Editing Instructions 一文首次提出了这种教 Stable Diffusion 依照用户指令 编辑 输出图像的想法。本文咱们将探讨如何拓展 InstructPix2Pix 的训练策略以使其可能了解并执行更特定的指令工作,如图像翻译 (如卡通化)、底层图像处理 (如图像除雨) 等。本文接下来的局部安顿如下:

  • 指令微调简介
  • 本工作的灵感起源
  • 数据集筹备
  • 训练试验及后果
  • 潜在的利用及其限度
  • 开放性问题

你可在 此处 找到咱们的代码、预训练模型及数据集。

引言与动机

指令微调是一种有监督训练方法,用于传授语言模型依照指令实现工作的能力。该办法最早由谷歌在 Fine-tuned Language Models Are Zero-Shot Learners (FLAN) 一文中提出。最近大家耳熟能详的 Alpaca、FLAN V2 等工作都充分证明了指令微调对很多工作都有助益。

下图展现了指令微调的一种模式。在 FLAN V2 论文 中,作者在一个样本集上对预训练语言模型 (如 T5) 进行了微调,如下图所示。

图 2: FLAN V2 示意图 (摘自 FLAN V2 论文)。

应用这种办法,咱们能够创立一个涵盖多种不同工作的训练集,并在此数据集上进行微调,因而指令微调可用于多任务场景:

输出 标签 工作
Predict the sentiment of the
following sentence:“The movie
was pretty amazing. I could not
turn around my eyes even for a
second.”
Positive Sentiment analysis /
Sequence classification
Please answer the following
question.
What is the boiling point of
Nitrogen?
320.4F Question answering
Translate the following
English sentence into German:“I have
a cat.”
Ich habe eine Katze. Machine translation

在该理念的领导下,FLAN V2 的作者对含有数千个工作的混合数据集进行了指令微调,以达成对未见工作的零样本泛化:

图 3: FLAN V2 用于训练与测试的混合工作集 (图来自 FLAN V2 论文)。

咱们这项工作背地的灵感,局部来自于 FLAN,局部来自 InstructPix2Pix。咱们想摸索是否通过特定指令来提醒 Stable Diffusion,使其依据咱们的要求解决输出图像。

预训练的 InstructPix2Pix 模型 善于体会并执行一般性指令,对图像操作之类的特定指令可能并不善于:

图 4: 咱们能够看到,对同一幅输出图像(左列),与预训练的 InstructPix2Pix 模型(两头列)相比,咱们的模型(右列)能更忠诚地执行“卡通化”指令。第一行后果很有意思,这里,预训练的 InstructPix2Pix 模型很显然失败了。倡议放大并以彩色显示,以获得最佳视觉效果。原图见此处。

但咱们依然能够利用在 InstructPix2Pix 上的一些教训和察看来帮忙咱们做得更好。

另外,卡通化、图像去噪 以及 图像除雨 等工作的公开数据集比拟容易获取,所以咱们能比拟轻松地基于它们构建指令提醒数据集 (该做法的灵感来自于 FLAN V2)。这样,咱们就可能将 FLAN V2 中提出的指令模板思维迁徙到本工作中。

数据集筹备

卡通化

刚开始,咱们对 InstructPix2Pix 进行了试验,提醒其对输出图像进行卡通化,成果不迭预期。咱们尝试了各种推理超参数组合 (如图像疏导比 (image guidance scale) 以及推理步数),但后果始终不现实。这促使咱们开始寻求不同的解决这个问题的形式。

正如上一节所述,咱们心愿联合以下两个工作的劣势:

(1) InstructPix2Pix 的训练方法,以及
(2) FLAN 的超灵便的创立指令提醒数据集模板的办法。

首先咱们须要为卡通化工作创立一个指令提醒数据集。图 5 展现了咱们创立数据集的流水线:

图 5: 本文用于创立卡通化训练数据集的流水线(倡议放大并以彩色显示,以获得最佳视觉效果)。

其次要步骤如下:

  1. 请 ChatGPT 为“Cartoonize the image.”这一指令生成 50 个同义表述。
  2. 而后利用预训练的 Whitebox CartoonGAN 模型对 Imagenette 数据集 的一个随机子集 (5000 个样本) 中的每幅图像生成对应的卡通化图像。在训练时,这些卡通化的图像将作为标签应用。因而,在某种程度上,这其实相当于将 Whitebox CartoonGAN 模型学到的技能迁徙到咱们的模型中。
  3. 而后咱们依照如下格局组织训练样本:
图 6: 卡通化数据集的样本格局(倡议放大并以彩色显示,以获得最佳视觉效果)。

你能够在 此处 找到咱们生成的卡通化数据集。无关如何筹备数据集的更多详细信息,请参阅 此处。咱们将该数据集用于微调 InstructPix2Pix 模型,并取得了相当不错的后果 (更多细节参见“训练试验及后果”局部)。

上面,咱们持续看看这种办法是否能够推广至底层图像处理工作,例如图像除雨、图像去噪以及图像去模糊。

底层图像处理 (Low-level image processing)

咱们次要专一 MAXIM 论文中的那些常见的底层图像处理工作。特地地,咱们针对以下工作进行了试验: 除雨、去噪、低照度图像增强以及去模糊。

咱们为每个工作从以下数据集中抽取了数量不等的样本,构建了一个独自的数据集,并为其增加了提醒,如下所示: 工作 提醒 数据集 抽取样本数

工作 提醒 数据集 抽取样本数
去模糊 “deblur the blurry image” REDS (train_blur
train_sharp)
1200
除雨 “derain the image” Rain13k 686
去噪 “denoise the noisy image” SIDD 8
低照度图像增强 “enhance the low-light image” LOL 23

上表中的数据集通常以 输入输出对 的模式呈现,因而咱们不用放心没有真值 (ground-truth)。你能够从 此处 找到咱们的最终数据集。最终数据集如下所示:

图 7: 咱们生成的底层图像处理数据集的样本(倡议放大并以彩色显示,以获得最佳视觉效果)。

总的来说,这种数据集的组织形式来源于 FLAN。在 FLAN 中咱们创立了一个混合了各种不同工作的数据集,这一做法有助于咱们一次性在多任务上训练单个模型,使其在可能较好地实用于含有不同工作的场景。这与底层图像处理畛域的典型做法有很大不同。像 MAXIM 这样的工作尽管应用了一个繁多的模型架构,其能对不同的底层图像处理工作进行建模,但这些模型的训练是在各个数据集上分别独立进行的,即它是“单架构,多模型”,但咱们的做法是“单架构,单模型”。

训练试验及后果

这) 是咱们的训练试验的脚本。你也能够在 Weight and Biases 上找到咱们的训练日志 (包含验证集和训练超参):

  • 卡通化 (超参)
  • 底层图像处理 (超参)

在训练时,咱们摸索了两种办法:

  1. 对 InstructPix2Pix 的 checkpoint 进行微调
  2. 应用 InstructPix2Pix 训练方法对 Stable Diffusion 的 checkpoint 进行微调

通过试验,咱们发现第一个办法从数据集中学得更快,最终训得的模型生成品质也更好。

无关训练和超参的更多详细信息,可查看 咱们的代码 及相应的 Weights and Biases 页面。

卡通化后果

为了测试 指令微调的卡通化模型 的性能,咱们进行了如下比拟:

图 8: 咱们将指令微调的卡通化模型(最初一列)的后果与 CartoonGAN 模型(第二列)以及预训练的 InstructPix2Pix 模型(第三列)的后果进行比拟。显然,指令微调的模型的后果与 CartoonGAN 模型的输入更统一(倡议放大并以彩色显示,以获得最佳视觉效果)。原图参见此处。

测试图像是从 ImageNette 的验证集中采样而得。在应用咱们的模型和预训练 InstructPix2Pix 模型时,咱们应用了以下提醒: _“Generate a cartoonized version of the image”_,并将 image_guidance_scaleguidance_scale、推理步数别离设为 1.5、7.0 以及 20。这只是初步成果,后续还须要对超参进行更多试验,并钻研各参数对各模型成果的影响,尤其是对预训练 InstructPix2Pix 模型成果的影响。

此处 提供了更多的比照后果。你也能够在 此处 找到咱们用于比拟模型成果的代码。

然而,咱们的模型对 ImageNette 中的指标对象 (如降落伞等) 的解决成果 不迭预期,这是因为模型在训练期间没有见到足够多的这类样本。这在某种程度上是意料之中的,咱们置信能够通过减少训练数据来缓解。

底层图像处理后果

对于底层图像处理 (模型),咱们应用了与上文雷同的推理超参:

  • 推理步数: 20
  • image_guidance_scale: 1.5
  • guidance_scale: 7.0

在除雨工作中,通过与真值 (ground-truth) 和预训练 InstructPix2Pix 模型的输入相比拟,咱们发现咱们模型的后果相当不错:

图 9: 除雨后果(倡议放大并以彩色显示,以获得最佳视觉效果)。提醒为“derain the image”(与训练集雷同)。原图见此处。

但低照度图像增强的成果不尽如意:

图 10: 低照度图像增强后果(倡议放大并以彩色显示,以获得最佳视觉效果)。提醒为“enhance the low-light image”(与训练集雷同)。原图见[此处]。

这种状况或者能够归因于训练样本有余,此外训练方法也尚有改良余地。咱们在去模糊工作上也有相似发现:

图 11: 去模糊后果(倡议放大并以彩色显示,以获得最佳视觉效果)。提醒为“deblur the image”(与训练集雷同)。原图见此处。

咱们置信对社区而言,底层图像处理的工作不同组合如何影响最终后果 这一问题十分值得摸索。 在训练样本集中减少更多的工作品种并减少更多具代表性的样本是否有助于改善最终后果? 这个问题,咱们心愿留给社区进一步摸索。

你能够试试上面的交互式演示,看看 Stable Diffusion 能不能体会并执行你的特定指令:

体验地址: https://instruction-tuning-sd-instruction-tuned-sd.hf.space

潜在的利用及其限度

在图像编辑畛域,领域专家的想法 (想要执行的工作) 与编辑工具 (例如 Lightroom) 最终须要执行的操作之间存在着脱节。如果咱们有一种将自然语言的需要转换为底层图像编辑原语的简略办法的话,那么用户体验将非常丝滑。随着 InstructPix2Pix 之类的机制的引入,能够必定,咱们正在靠近那个现实的用户体验。

但同时,咱们仍须要解决不少挑战:

  • 这些零碎须要可能解决高分辨率的原始高清图像。
  • 扩散模型常常会误解指令,并按照这种误解批改图像。对于理论的图像编辑应用程序,这是不可承受的。

开放性问题

目前的试验依然相当初步,咱们尚未对试验中的很多重要因素作深刻的融化试验。在此,咱们列出试验过程中呈现的开放性问题:

  • 如果扩充数据集会怎么? 扩充数据集对生成样本的品质有何影响?目前咱们试验中,训练样本只有不到 2000 个,而 InstructPix2Pix 用了 30000 多个训练样本。
  • 缩短训练工夫有什么影响,尤其是当训练集中工作品种更多时会怎么? 在目前的试验中,咱们没有进行超参调优,更不用说对训练步数进行融化试验了。
  • 如何将这种办法推广至更宽泛的工作集?历史数据表明,“指令微调”仿佛比拟善于多任务微调。 目前,咱们只波及了四个底层图像处理工作: 除雨、去模糊、去噪和低照度图像增强。将更多任务以及更多有代表性的样本增加到训练集中是否有助于模型对未见工作的泛化能力,或者有助于对复合型工作 (例如:“Deblur the image and denoise it”) 的泛化能力?
  • 应用同一指令的不同变体即时组装训练样本是否有助于进步性能? 在卡通化工作中,咱们的办法是在 数据集创立期间 从 ChatGPT 生成的同义指令集中随机抽取一条指令组装训练样本。如果咱们在训练期间随机抽样,即时组装训练样本会如何?对于底层图像处理工作,目前咱们应用了固定的指令。如果咱们依照相似于卡通化工作的办法对每个工作和输出图像从同义指令集中采样一条指令会如何?
  • 如果咱们用 ControlNet 的训练方法会如何? ControlNet 容许对预训练文生图扩散模型进行微调,使其能以图像 (如语义宰割图、Canny 边缘图等) 为条件生成新的图像。如果你有趣味,你能够应用本文中提供的数据集并参考 这篇文章 进行 ControlNet 训练。

总结

通过本文,咱们介绍了咱们对“指令微调”Stable Diffusion 的一些摸索。尽管预训练的 InstructPix2Pix 善于体会执行个别的图像编辑指令,但当呈现更专门的指令时,它可能就没法用了。为了缓解这种状况,咱们探讨了如何筹备数据集以进一步微调 InstructPix2Pix,同时咱们展现了咱们的后果。如上所述,咱们的后果依然很初步。但咱们心愿为钻研相似问题的钻研人员提供一个根底,并激励他们进一步对本畛域的开放性问题进行摸索。

链接

  • 训练和推理代码
  • 演示
  • InstructPix2Pix
  • 本文中的数据集和模型

感激 Alara Dirik 和 Zhengzhong Tu 的探讨,这些探讨对本文很有帮忙。感激 Pedro Cuenca 和 Kashif Rasul 对文章的审阅。

援用

如需援用本文,请应用如下格局:

@article{
  Paul2023instruction-tuning-sd,
  author = {Paul, Sayak},
  title = {Instruction-tuning Stable Diffusion with InstructPix2Pix},
  journal = {Hugging Face Blog},
  year = {2023},
  note = {https://huggingface.co/blog/instruction-tuning-sd},
}

英文原文: https://hf.co/blog/instruction-tuning-sd

原文作者: Sayak Paul

译者: Matrix Yao (姚伟峰),英特尔深度学习工程师,工作方向为 transformer-family 模型在各模态数据上的利用及大规模模型的训练推理。

审校 / 排版: zhongdongy (阿东)

退出移动版