这些天花时间梳理了一下Latent Diffusion Models相关的文献,在线文档和相关代码,已经制作了相关PPT,录制了相关内容,这里做一下总结以备后需查阅。
1、基于矩阵低秩的适配,LoRA(Low-Rank Adaption)方式是采用低秩矩阵对模型的预训练的权重进行调整,从而实现高效的模型微调。其大体的过程可以分为:(1)、将模型关键部分的参数的residual部分进行低秩分解,将其权重矩阵分解为两个较小的低秩矩阵的乘积;(2)、微调方法:只更新低秩矩阵的参数,而不是整个模型权重矩阵,大大减少训练时需要更新的参数量;(3)矩阵重构:通过低秩矩阵的乘积来恢复原始的权重矩阵,在加载的时候将重构的矩阵参数和原先预训练的模型的参数对应的部分进行相加得到最终的模型参数;
2、Dreambooth,是一种支持某个类别(如cat,dog等)特殊的subject(如Hally dog)的丰富多样性场景生成的Latent Diffusion Model的扩展,为了克服language drift等现象,提出了用类别的preservation loss和基于unique identifier的类别下subject的联合loss训练,即保证了类别的多样性和泛化能力,也支持特定subject的丰富多样的产经生成。支持全模型微调和基于LoRA的微调。
3、Textual Inversion,基于文本嵌入模型的微调,产生一个特殊的新的需要训练的风格或特性的图片的token,扩展文本嵌入模型的embedding层的输入,多加一个token,在训练时其他的参数冻结(包括DDPM,以及VAE和Text Embedding),只更新多加的token相关的embedding转换的参数,训练的过程实现了特殊的token的embedding和风格特性图片之间的关联关系的建立。
4、ControlNet,在模型的结构上有较大的扩展,在文生图的应用场景下,提供了额外的更加个性化多样化的约束控制,如基于深度图,canny算子边缘图,语义分割图,human pose等等额外的约束,而且ControlNet本身是对Stable Diffusion模型的扩展,和Stable Diffusion模型本身独立保存,加载时和StableDiffusion模型进行融合。而且针对某个特殊的额外约束,一般时需要单独的ControlNet模型,这样各种各样的ControlNet模型就有多个,ControlNet主要由零卷积和UNet中的编码层的block组成,零卷积保证了一开始的训练和原始模型的输出保持一致,保证了训练的稳定性。由于复用了Stable Diffusion模型中UNet的编码层的相关结构,而且初始化时直接将预训练好的Stable Diffusion模型对应的参数拷贝过来作为初始化,因此ControlNet的版本要和Stable Diffusion的基础模型版本要一致以实现加载后兼容。
关于这些内容的实现实验,可以参考引文3中的代码实现细节,在diffusers库的examples目录下,这些天学习的效率进步还不错,技术的素材和内容也在不断积累和进步中,希望能保持下来后面有更多的输出,也希望能和相关的同行有更多的机会交流最新的技术进展的机会。
参考文献
- 1、DreamBooth官方介绍:https://dreambooth.github.io/
- 2、Textual Inversion算法官方介绍: https://textual-inversion.github.io/
- 3、Huggingface的diffusers库:https://github.com/huggingface/diffusers
- 4、B站合集链接:基于扩散模型的图像生成技术原理和实践系列内容分享-哔哩哔哩视频
Leave a Reply