扩散模型应用·个性化生成
封面来自 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
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 更优的结果:
- 合并两个数据集同时训练两个概念;
- 分别训练之后合并模型。
第一种方法没什么好说的。对于第二种方法,作者将其形式化为了一个优化问题。设一共有
点击查看 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]。对于卷积网络而言,我们首先将卷积层改写作全连接层:设卷积核为
点击查看 SVDiff 的生成样例(摘自官网)
ZipLoRA
Google UIUC 2023.11.22
自 DreamBooth + LoRA 提出后,该方法得到了人们的广泛使用。但是随之而来了一个问题:能否同时使用多个 LoRA?早期人们的解决方案是直接将两个 LoRA 的权重按比例加起来:
为此,研究人员提出 ZipLoRA[8],试图不依赖任何超参数地合并两个 LoRA 权重。具体而言,作者关注的是合并一个内容 LoRA
- LoRA 权重的绝大部分都接近于零,甚至将 90% 的权重置为零都不怎么影响生成效果。
- 如果两个 LoRA 权重的对应列的余弦相似度很高,那么按直接相加的方式合并的效果很差;相反,如果列与列之间是正交的,那么效果就不错。
于是,作者认为我们应该尽可能在合并两个 LoRA 权重时使它们对应列正交,为此设计了如下合并方案:
如图所示,损失函数为:
点击查看 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 张图像。
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 作用的效果,作者提出了 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 细节参看论文附录。
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. 设
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 步。
References
- 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). ↩︎
- 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). ↩︎
- 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). ↩︎
- 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. ↩︎
- 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). ↩︎
- 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). ↩︎
- Robb, Esther, Wen-Sheng Chu, Abhishek Kumar, and Jia-Bin Huang. Few-shot adaptation of generative adversarial networks. arXiv preprint arXiv:2010.11943 (2020). ↩︎
- 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). ↩︎
- 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). ↩︎
- 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). ↩︎
- 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). ↩︎
- 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). ↩︎
- 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). ↩︎
- InstantFamily ↩︎