扩散模型应用·个性化生成

封面来自 CivitAI.

个性化生成(personalized generation),也称作主体驱动生成(subject-driven generation),指的是用户提供若干张(甚至只有一张)某主体(人或物)的照片,模型生成该主体其他图像。

Textual Inversion

Tel Aviv University NVIDIA 2022.08.02

顾名思义,Textual Inversion[1] 采用类似于 GAN Inversion 的方式——在 text embedding 空间中寻找一个向量来重建原图。具体而言,给定 3-5 张描述某概念的图像,通过如下优化目标找到 word embedding v,使得提示词 A photo of S 能够重建输入图像: v=argminvEzE(x),y,ϵN(0,1),t[ϵϵθ(zt,t,cθ(y,v))22]

Textual Inversion 简单有效,并且最后只需要保存 embedding vector,所以文件非常小;但是效果会比微调整个模型的 DreamBooth 和微调额外网络的 LoRA(见下文)更差一些。

点击查看 Textual Inversion 的生成样例(摘自官网

DreamBooth

Google 2022.08.25

与 Textual Inversion 几乎同时,DreamBooth[2] 也想到了让预训练模型学习用户指定的概念来进行个性化生成。为此,作者考虑将用户给出的物体与一个特殊的 identifier 绑定,然后用包含这个特殊 identifier 的 prompt 和用户的图像来微调整个 UNet. 微调结束后,只要用户输入的 prompt 中包含这个 identifier,那么模型就能生成用户想要的物体。整体思路清晰易懂,但是实现上有些小细节需要说明。

首先,这个 identifier 要与描述其类别的词一起使用,即 a [identifier] [class noun],这样预训练模型能借用其已有的关于那个类别的知识,训练更快速稳定、生成的效果也更好。

其次,identifier 的选取也有讲究,应该尽可能避免使用常用的单词(如 "unique"、"special" 等),否则模型还得学会分辨什么时候这个词是原来的意思,什么时候是新的意思。然而,直接用随机的字符串也不是一个好的选择,因为 tokenizer 可能会把它拆散,变成常见的 tokens. 因此,作者先查找罕见的 tokens,再把它们映射回 text space 来得到 identifier.

最后,直接微调可能会导致 language drift 问题,即模型遗忘了预训练时的知识;模型还可能失去多样性,即生成的物体都有类似的姿态、视角。为此,作者提出了 prior preservation loss,在微调的同时用模型自己生成的样例监督它自己,相当于一个正则项,如下图所示:

点击查看 DreamBooth 的生成样例(摘自官网

DreamBooth + LoRA

LoRA[3] 是一种参数高效微调方法(PEFT),最早应用于微调语言大模型之中,后来由 cloneofsimo 引入到对 Stable Diffusion 模型的微调之中。LoRA 并不改变原模型的权重,而是在线性层旁边新增一个下采样-上采样的支路,通过训练这个支路来完成微调。因此,同一个基底 Stable Diffusion 模型可以搭载不同的 LoRA 使用,具有很高的灵活性。由于 LoRA 支路网络的参数量小,相比微调整个模型,对算力的需求更加友好,并且也能达到不错的效果,因此很快受到大家的热烈欢迎,成为了目前最流行的微调 Stable Diffusion 的方法之一。

特别地,我们可以按照 DreamBooth 的方式(即使用 a [identifier] [class noun] 的描述词 + 正则化图像)来训练 LoRA,相比原始 DreamBooth 微调整个模型,资源消耗大大减小并且灵活性更高。

Custom Diffusion

CMU THU Adobe CVPR 2023 2022.12.08

不同于 DreamBooth 微调整个模型,Custom Diffusion[4] 只微调 cross-attention 层中的 K、V 投影矩阵以及一个输入 text token(如下图所示),微调时间大大减小的同时能取得与 DreamBooth 相当的效果。并且,Custom Diffusion 还支持合并两个微调的模型,实现多概念生成

为什么选择 K、V 投影矩阵微调呢?因为作者分析了微调整个模型后各模块权重的相对变化量,发现 cross-attention 层的 K、V 投影矩阵变化最大。进一步地,这部分参数只占全部参数的 5%,说明了它们在微调中的重要性。具体到微调过程,其实与 DreamBooth 区别不大,也是使用特殊标识符,并且也使用了正则化图像。

关于多概念生成,作者尝试了两种方法,都达到了比 DreamBooth 更优的结果:

  1. 合并两个数据集同时训练两个概念;
  2. 分别训练之后合并模型。

第一种方法没什么好说的。对于第二种方法,作者将其形式化为了一个优化问题。设一共有 个概念, 表示描述第 个概念的词汇 embeddings. 记原投影矩阵为 ,微调后的投影矩阵为 ,那么优化问题为: 其中 包含了所有 个概念一共 个目标词汇 embeddings,. 直观而言,我们希望优化后的投影矩阵在个性化概念上的输出与分别微调的模型保持一致,同时在正则化图像上与原模型的输出差异最小。这个优化问题具有封闭解: 其中 .

点击查看 Custom Diffusion 的生成样例(摘自官网

SuTI

Google 2023.04.01

DreamBooth 等方法需要为每种个性化主体分别微调出一个专家模型,比较麻烦。SuTI[5] 希望只使用一个模型,输入若干张主体图片,就能够生成该主体的其他图片,这样的模型被称作 apprentice model. 为了训练这个 apprentice model,我们需要一个大规模的个性化主体数据集,而数据的获取方式极其粗暴——从网络上爬几百万张图像,训练大量的专家模型,用这些专家模型来产生数据,如下图所示。虽然 SuTI 的训练消耗极大,但推断的时候能比基于逐主体优化的方法快 20 倍,相当于把时间开销从推断转移到了训练,因此如果模型能够开源出来,对普通用户无疑是一个好消息。不过嘛,考虑到这是 Google,而且 SuTI 基于的是未开源的 Imagen……恐怕是“可远观而不可亵玩焉”。

可以看出,SuTI 非常偏工程,比如怎么收集数据集、怎么把同一个主体聚在一起、怎么生成文本描述、怎么过滤质量差的图片等,对普通课题组没有太多的参考意义(而且也玩不起啊),这里便不再赘述。

SVDiff

Rutgers University Google 2023.05.20

SVDiff[6] 的动机与 LoRA、Custom Diffusion 类似,依旧是希望避免微调整个模型的所有参数,试图寻找一个更为紧凑的参数空间。具体而言,SVDiff 微调的是权重矩阵的奇异值,在 Stable Diffusion(全部参数占 3.66GB)上只需要微调 1.7MB 的参数,并且能够实现多概念生成。

微调权重矩阵的奇异值这一想法其实来自于 FSGAN[7]。对于卷积网络而言,我们首先将卷积层改写作全连接层:设卷积核为 ,输入的图像 patch 为 ,那么: 其中 . 对 进行奇异值分解: 我们通过训练 spectral shift 来微调权重矩阵 对于两次微调的 spectral shift ,我们可以设计一些方式将它们融合起来: 至于多概念生成,作者提出了一种数据增强方法 Cut-Mix-Unmix,通过左右拼接两个概念的图像作为数据来训练模型。另外,作者还通过只在一个图像文本对上微调的方式实现了单图像编辑。私以为这两点的做法并不优雅,这里就不赘述了。

点击查看 SVDiff 的生成样例(摘自官网

ZipLoRA

Google UIUC 2023.11.22

自 DreamBooth + LoRA 提出后,该方法得到了人们的广泛使用。但是随之而来了一个问题:能否同时使用多个 LoRA?早期人们的解决方案是直接将两个 LoRA 的权重按比例加起来: 其中 是超参数,控制各个 LoRA 的“强度”。不过,为了达到理想的效果,这两个超参数往往需要仔细调整,非常不方便。

为此,研究人员提出 ZipLoRA[8],试图不依赖任何超参数地合并两个 LoRA 权重。具体而言,作者关注的是合并一个内容 LoRA 和一个风格 LoRA ,使可以生成指定风格的指定主体。作者首先分析了已有的 LoRA 的权重,有两个重要发现:

  1. LoRA 权重的绝大部分都接近于零,甚至将 90% 的权重置为零都不怎么影响生成效果。
  2. 如果两个 LoRA 权重的对应列的余弦相似度很高,那么按直接相加的方式合并的效果很差;相反,如果列与列之间是正交的,那么效果就不错。

于是,作者认为我们应该尽可能在合并两个 LoRA 权重时使它们对应列正交,为此设计了如下合并方案: 其中 可学习向量,维度等于 的列数。上式的含义是对 的各列加权求和。

如图所示,损失函数为: 其中 表示预训练权重, 表示 LoRA 层的集合, 表示配备了 LoRA 的模型。 为训练用的内容图像和风格图像, 为文本 prompt. 损失函数的前两项是正常的重构损失,最后一项是为了鼓励各自 LoRA 权重列之间的正交性(说实话我对这里讲的“正交性”有异议,系数 并不能改变 LoRA 权重列的方向,加入正则项只会鼓励其中一个系数趋近于零,当两个 LoRA 的这一列都很重要的时候,这样做势必导致效果不好)。基础模型和要合并的 LoRA 权重都是固定的,只训练合并系数 ,因此非常高效。实验在 SDXL 上进行,只需要 100 次梯度更新即可。

点击查看 ZipLoRA 的生成样例(摘自官网

PhotoMaker

Nankai University Tencent University of Tokyo 2023.12.07

给定若干张人物照片作为参考,PhotoMaker[9]可以保留人物 ID,生成该人物的任意风格其他图像。尽管 Textual Inversion 和 DreamBooth 等个性化生成方法也可以做到这一点,但它们需要测试时的优化过程,而 PhotoMaker 在训练后,测试时只需要一次前向传播即可。

如图所示,PhotoMaker 主要是针对 text embeddings 进行改动。为此,对于每个参考照片,首先使用 CLIP 的图像编码器提取 image embeddings,这样能与 Stable Diffusion 的文本空间对齐。由于 CLIP 是在自然图像上训练的,为了让模型能够迁移到人物 ID 上,作者开放了 CLIP 的部分层以供微调。随后,找到文本中对应 "man" 或 "woman" 的 text embedding,使用两层 MLP 将其与提取出的 ID embeddings 融合,各个融合后 embeddings 沿长度维度 stack 起来得到 stacked ID embedding. 为了让模型更好地适应新的融合 embedding,作者为 attention 模块添加了 LoRA 进行微调。

由于 PhotoMaker 需要多张人物照片作为参考,训练时需要构建一个大规模带有人物 ID 的数据集。这个构建 pipeline 在上图右侧有所展示,最终筛选出的训练集包含 100+k 张图像。

点击查看 PhotoMaker 的生成样例(摘自论文)

InstantID

Xiaohongshu 2024.01.15

InstantID[10]与 PhotoMaker 的动机相同,但是相比于 PhotoMaker 着重处理 embedding,InstantID 则与 Stable Diffusion 有更多的交互。

由图可见,InstantID 深受 IP-Adapter 和 ControlNet 的影响,遵循的思路是——一条分支提取人脸特征,映射后按 IP-Adapter 方式融入 UNet;另一条分支提取人脸关键点位置,作为空间控制通过 ControlNet 融入 UNet,只不过 text embedding 换成了 face embedding. 整体思路可以说非常简单直接。

InstantID 是在包含 50 million 张图像的 LAION-Face 数据集以及从网络收集的 10 million 高质量人物图像上(不会就是小红书里的吧,逃)用 48 张 H800训练出来的,数据量和计算资源相当可观……

点击查看 InstantID 的生成样例(摘自官方 repo

Multi-LoRA Composition

UIUC Microsoft 2024.02.26

现有的 LoRA 合并方法包括直接加权组合或者上文介绍的 ZipLoRA. 然而,它们都主要关注于操纵 LoRA 权重,忽视了 LoRA 与 Stable Diffusion 之间的交互。因此,这种做法在 LoRA 数量增加时效果会下降。Multi-LoRA[13]则保持所有 LoRA 权重的完整性,提出了两种 learning-free 的合并方法,LoRA Switch 和 LoRA Composite,如下图所示:

可以看见,LoRA Switch 的做法非常简单,即每隔一段步长就更换一个 LoRA,这样每个 LoRA 都能轮流发挥作用。LoRA Composite 则启发自 classifier-free guidance. 设 表示原模型, 表示融合了第 个 LoRA 后的模型,则: 其中 是调整 LoRA 重要度的超参数, 是文本条件。相比先合并 LoRA 再去噪的做法,LoRA Composite 则是先让每个 LoRA 分别发挥作用,再合并结果,能够提升多 LoRA 效果的稳定性。不过,由于每个 LoRA 都要作用一次,所以该方法的缺点在于采样时长变成了原来的 倍。

为了测试多 LoRA 作用的效果,作者提出了 ComposLoRA 测试基准。作者首先从 CivitAI 上收集了 22 个 LoRA 模型,包括真实和动漫两个子集。每个子集包含 3 个角色 LoRA、2 个衣服 LoRA、2 个风格 LoRA、2 个背景 LoRA 和 2 个物体 LoRA. 将它们组合并排除冲突,最终得到了 480 个 LoRA 集合,其中 48 个集合包含 2 个 LoRA、144 个集合包含 3 个 LoRA、192 个集合包含 4 个 LoRA、96 个集合包含 5 个 LoRA.

测试时,考虑到常用的文本图像对齐指标(如 CLIP score)并不能识别图像的细节和复杂的组成,作者决定使用 GPT-4V. 作者通过 prompt 引导 GPT-4V 为输入的图像打分,如下图所示:

具体 prompt 细节参看论文附录。

点击查看 Multi-LoRA Composition 的生成样例(摘自论文)

Infinite-ID

USTC The University of Sydney 2024.03.18

Infinite-ID[11] 同样着眼于人物 ID 参考下的人像生成。作者首先分析了人物 ID 生成的难点——平衡 ID 保真度和与输入文本的语义一致性。以 PhotoMaker 为代表的方法由于主要是对 text embedding 操作,因此满足语义一致性,但 ID 信息被压缩到 text embedding 空间中,因此欠缺 ID 保真度。以 IP-Adapter 为代表的方法主要是引入视觉条件,因此有较好的 ID 保真度,但会过分参考图像,忽视文本的语义。为此, Infinite-ID 提出 ID-semantics 解耦范式和一个特征交互机制来解决该问题。

如上图所示,在训练阶段,Infinite-ID 丢弃了文本输入,将去噪图像与 face embedding 视作一对数据,其中 face embedding 由 CLIP 图像编码器和人脸识别网络提取的特征经映射后拼接而得。训练时用这个 face embedding 代替原本的 text embedding,对每个 cross-attention 层训练新的 K,V 投影矩阵。于是新训练的 K,V 投影矩阵完全不受文本影响,从而完成 ID 和文本语义之间的解耦。

推断时,首先不考虑 face embedding 做一次生成,计算生成过程中的 K,V 投影矩阵。然后引入 face embedding,对每个 cross-attention 层将二者的计算结果相加。另外作者还引入了 mixed attention 与 AdaIN-mean 操作,如下图所示:

其中 AdaIN-mean 操作定义为: 意在更好地将文本中的“风格”带入到生成的图像之中。

点击查看 Infinite-ID 的生成样例(摘自官网

IDAdapter

PKU InsightFace DeepGlint 2024.03.20

IDAdapter[12]依旧是人物 ID 参考的生成方法。如果说 PhotoMaker 主要是通过 text embedding 注入,InstantID 主要是视觉条件注入,那么 IDAdapter 则是结合了二者的思路,并且新增了 face ID loss.

如上图所示,整体框架上,IDAdapter 会提取若干张参考人物照片的 CLIP 图像特征和人脸特征,经过 MFF 模块融合后给到 adapter 注入 Stable Diffusion;同时 CLIP 图像特征也会经过 MLP 映射后用于代替文本中的标识词 (sks) 的 embedding. 其中,MFF 模块提出的动机是作者发现 CLIP 特征和人脸识别器提取的特征都会包含非 ID 的信息,如脸部朝向和表情,从而影响生成图像的多样性。为了解决这个问题,作者采用不止一张参考图片,同时施加数据增强,从而希望模型能够提取更好的人脸 ID 特征。提取出的 N 个特征经过两层 attention 后给到 adapter. 具体细节请参考论文。

另外,作者采用了一个 face ID loss. 设 ​ 为一个预训练人脸识别模型,则 loss 为: 其中 是多张参考照片的平均人脸特征。然而,当时间步较大时,模型预测的 是模糊的,不利于 提取人脸特征,因而作者还引入了一个人脸检测模型 ,只有当检测模型检测到人脸时才加入 ​ 这一项。

点击查看 IDAdapter 的生成样例(摘自论文)

InstantFamily

SK Telecom 2024.04.30

尽管 PhotoMaker、InstantID、Infinite-ID 和 IDAdapter 将人物 ID 生成做得越来越好,但都局限于生成一个人物,InstantFamily[14]则可以做到多人物 ID 生成。

上面这 3 张图将 InstantFamily 的方法非常直观地展现了出来。可以看到,InstantFamily 依旧是从两方面入手——一个分支提取人脸的局部和全局特征,通过交叉注意力融入 UNet 来控制 ID;另一个分支提取人体骨骼 (openpose),通过 ControlNet 融入 UNet 来控制姿态。在第一个分支中,局部特征和全局特征经过维度投影后拼成 K 向量集,与原图的 Q 向量集做交叉注意力。作者在交叉注意力中引入了 mask 机制,使得每个 Q 中某人脸特征的部分只会 attend 到 K 中对应的人脸部分,如上面左下图所示。实现上还有一些小的细节,可以参看论文 4.2 节。

数据集由四个部分组成:

  • 2M 张来自 LAION-Face 数据集的图像
  • 0.3M 张从网络上收集的多人图像,用 BLIP2 打标
  • 人脸识别数据集,用 BLIP2 打标
  • 模型生成的 50K 张高质量图像

训练在 SD1.5 的基础上进行,8 卡 A100 训练 400k 步。

点击查看 InstantFamily 的生成样例(摘自论文)

References

  1. Gal, Rinon, Yuval Alaluf, Yuval Atzmon, Or Patashnik, Amit H. Bermano, Gal Chechik, and Daniel Cohen-Or. An image is worth one word: Personalizing text-to-image generation using textual inversion. arXiv preprint arXiv:2208.01618 (2022). ↩︎
  2. Ruiz, Nataniel, Yuanzhen Li, Varun Jampani, Yael Pritch, Michael Rubinstein, and Kfir Aberman. Dreambooth: Fine tuning text-to-image diffusion models for subject-driven generation. arXiv preprint arXiv:2208.12242 (2022). ↩︎
  3. Hu, Edward J., Yelong Shen, Phillip Wallis, Zeyuan Allen-Zhu, Yuanzhi Li, Shean Wang, Lu Wang, and Weizhu Chen. Lora: Low-rank adaptation of large language models. arXiv preprint arXiv:2106.09685 (2021). ↩︎
  4. Kumari, Nupur, Bingliang Zhang, Richard Zhang, Eli Shechtman, and Jun-Yan Zhu. Multi-concept customization of text-to-image diffusion. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pp. 1931-1941. 2023. ↩︎
  5. Chen, Wenhu, Hexiang Hu, Yandong Li, Nataniel Rui, Xuhui Jia, Ming-Wei Chang, and William W. Cohen. Subject-driven text-to-image generation via apprenticeship learning. arXiv preprint arXiv:2304.00186 (2023). ↩︎
  6. Han, Ligong, Yinxiao Li, Han Zhang, Peyman Milanfar, Dimitris Metaxas, and Feng Yang. Svdiff: Compact parameter space for diffusion fine-tuning. arXiv preprint arXiv:2303.11305 (2023). ↩︎
  7. Robb, Esther, Wen-Sheng Chu, Abhishek Kumar, and Jia-Bin Huang. Few-shot adaptation of generative adversarial networks. arXiv preprint arXiv:2010.11943 (2020). ↩︎
  8. Shah, Viraj, Nataniel Ruiz, Forrester Cole, Erika Lu, Svetlana Lazebnik, Yuanzhen Li, and Varun Jampani. Ziplora: Any subject in any style by effectively merging loras. arXiv preprint arXiv:2311.13600 (2023). ↩︎
  9. Li, Zhen, Mingdeng Cao, Xintao Wang, Zhongang Qi, Ming-Ming Cheng, and Ying Shan. Photomaker: Customizing realistic human photos via stacked id embedding. arXiv preprint arXiv:2312.04461 (2023). ↩︎
  10. Wang, Qixun, Xu Bai, Haofan Wang, Zekui Qin, and Anthony Chen. InstantID: Zero-shot Identity-Preserving Generation in Seconds. arXiv preprint arXiv:2401.07519 (2024). ↩︎
  11. Wu, Yi, Ziqiang Li, Heliang Zheng, Chaoyue Wang, and Bin Li. Infinite-ID: Identity-preserved Personalization via ID-semantics Decoupling Paradigm. arXiv preprint arXiv:2403.11781 (2024). ↩︎
  12. Cui, Siying, Jiankang Deng, Jia Guo, Xiang An, Yongle Zhao, Xinyu Wei, and Ziyong Feng. IDAdapter: Learning Mixed Features for Tuning-Free Personalization of Text-to-Image Models. arXiv preprint arXiv:2403.13535 (2024). ↩︎
  13. Zhong, Ming, Yelong Shen, Shuohang Wang, Yadong Lu, Yizhu Jiao, Siru Ouyang, Donghan Yu, Jiawei Han, and Weizhu Chen. Multi-LoRA Composition for Image Generation. arXiv preprint arXiv:2402.16843 (2024). ↩︎
  14. InstantFamily ↩︎

扩散模型应用·个性化生成
https://xyfjason.github.io/blog-main/2023/02/11/扩散模型应用·个性化生成/
作者
xyfJASON
发布于
2023年2月11日
许可协议