stable diffusion(四)——Hypernetworks原理与实践


这个系列会分享下stable diffusion中比较常用的几种训练方式,分别是Dreambooth、textual inversion、LORA和Hypernetworks。在https://civitai.com/选择模型时也能看到它们的身影。本文该系列的第四篇

Hypernetworks

hypernetworks是一种fine tune的技术,最开始由novel AI开发。hypernetworks是一个附加到stable diffusion model上的小型网络,用于修改扩散模型的风格。

How does Hypernetworks work?

既然Hypernetworks会附加到diffusion model上,那么会附加到哪一部分呢?答案仍然是UNet的cross-attention模块,Lora模型修改的也是这一部分,不过方法略有不同。

hypernetworks是一个很常见的神经网络结构,具体而言,是一个带有dropout和激活函数的全联接层。通过插入两个网络转换key和query向量,下面的两张图是添加Hypernetworks之前和之后的网络图

在训练期间stable diffusion model的参数被冻结,而Hypernetworks网络参数可以改变。由于Hypernetworks参数量很小,在有限的资源下也可很快完成训练。在按默认的超参数配置的情况下Hypernetworks的文件大小在116Mb。

checkpoints: 包含生成图像所需要的所有网络结构和参数,模型大小一般在2~7GB,而Hypernetworks一般低于200Mb。Hypernetworks无法单独运行,需要使用checkpoints生成图像,

LoRA: Lora模型和Hypernetworks比较相似,都是通过作用于UNet的cross-attention模块,改变生成图像的风格。区别在于LoRA改变的是cross-attention的权重,而Hypernetworks插入了其他的模块。LoRA的结果通常比Hypernetworks更好,而且模型结构都很小,基本都低于200Mb。值得注意的是,LoRA指的是一种数据存储的方式,没有定义训练过程,因此可以和Dreambooth和其他的训练方式结合起来使用

embeddings: 是textual inversion方法的结果,和Hypernetworks方法一样,不会改变模型,会定义一些新的关键字实现某些样式。embedding和Hypernetworks作用的地方不同。embedding在text encoder中创造新的embedding达到左右模型生成图片的效果。根据一些参考资料,embedding的效果比Hypernetworks要稍好一些。

训练Hypernetworks

和embedding(Textual Inversion)比较类似, 训练在同一个tag下,首先第一步需要创建Hypernetworks模型,下面这饿参数需要设置下,有些有推荐值,没有推荐值的可以按照自己炼丹的经验进行设置,或者多尝试几组,下面是我配置的参数

创建完模型后,就可以开始训练了,训练的参数设置也和Textual Inversion十分相似,这里就不赘述了

设置完后,选择底部的Train Hypernetworks就可以开始训练了

先来看看人/物的生成,这里同样适用了Halley的照片作为训练集

prompt: blue_sky, cloud, building, Halley, fence, no_humans, outdoors, road, scenery, shiba_inu, sky, tree

头还是挺像的,但身子就不太像了-.-

下面是风格的生成

prompt: beamed_eighth_notes, book, clock, eighth_note, musical_note,plant,potted_plant
看起来效果没有textual inversion和Dream booth好,也可能是调参数的问题

总结

这一系列文章总结了Dreambooth、textual inversion、LoRA和Hypernetworks, 从我自己的实践来看,光生成效果这块dream booth>textual inversion>Hypernetworks。当然我并没有在数据集和参数上做过多的尝试,为了对比效果数据集选用的是同样的,人物和风格的数据都在20张左右,调参根据其他blog/论文和我自己的经验做了预设。有可能在特定的数据集和参数组合下,会发挥出更好的效果。

在讲Hypernetworks的同时也对比下该方法和之前文章中提到过的几种方法的差异:

checkpoints: 包含生成图像所需要的所有网络结构和参数,模型大小一般在2~7GB,而Hypernetworks一般低于200Mb。Hypernetworks无法单独运行,需要使用checkpoints生成图像.

LoRA: Lora模型和Hypernetworks比较相似,都是通过作用于UNet的cross-attention模块,改变生成图像的风格。区别在于LoRA改变的是cross-attention的权重,而Hypernetworks插入了其他的模块。LoRA的结果通常比Hypernetworks更好,而且模型结构都很小,基本都低于200Mb。值得注意的是,LoRA指的是一种数据存储的方式,没有定义训练过程,因此可以和Dreambooth和其他的训练方式结合起来使用

embeddings: 是textual inversion方法的结果,和Hypernetworks方法一样,不会改变模型,会定义一些新的关键字实现某些样式。embedding和Hypernetworks作用的地方不同。embedding在text encoder中创造新的embedding达到左右模型生成图片的效果。根据一些参考资料,embedding的效果比Hypernetworks要稍好一些。

-------------本文结束感谢您的阅读-------------