脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了

  • 导语
  • StyleDrop组件
    • Muse
      • Muse架构
      • Muse图像生成实现流程
    • 适配器微调
      • Adapter Tuning
      • Muse中的Adapter Tuning
    • 反馈迭代训练

最近,谷歌发布了一款引人瞩目的AI绘画工具——StyleDrop。这个工具通过学习特定的艺术风格,能够根据文字描述一键生成与之相同风格的图片,简直让人惊叹不已。

这个新工具在艺术和设计领域掀起了一股热潮!AI的力量实在是令人疯狂,正在悄然改变着艺术设计的游戏规则。

只需提供一张参考图,StyleDrop就能立即生成各种相同风格的图片,相似度高达99.99%!它甚至能够轻松处理平面插画、水彩、油画、3D渲染以及各种材质,还有logo设计和品牌形象制作,只需几秒钟的时间……

AI每个月的升级速度,竟然超过了设计师十年的学习进程。

有了这款工具,设计师再也不必为素材和灵感的问题而困扰。只需将自己的设计稿输入其中,立刻就能得到与之相同风格的其他图片,整体方案设计将变得轻松无比!毫不夸张地说,设计效率将实现10倍的飞跃。

许多设计师认为这款工具比Midjourney还要好用,尤其在制作logo方面,效果和效率都有了很大的提升。


下面内容是小编对谷歌发布这个StyleDrop技术的论文解读

论文标题:StyleDrop: Text-to-Image Generation in Any Style
官方地址:https://styledrop.github.io,目前还没有发布开源

导语

预训练的大型文本到图像模型能够利用适当的文本提示合成出令人印象深刻的图像。然而,自然语言中固有的歧义性以及分布外效应使得合成特定设计模式、纹理或材质的图像风格变得困难

谷歌介绍了一种名为StyleDrop的方法,该方法利用文本到图像模型能够合成出忠实于特定风格的图像。所提出的方法非常灵活,能够捕捉用户提供的风格中的细微差别和细节,例如色彩方案、明暗效果、设计模式以及局部和整体效果。通过微调极少量的可训练参数(不到总模型参数的1%)并通过人工或自动化反馈进行迭代训练,它可以高效地学习一种新的风格并提高质量。

即使用户只提供一张指定所需风格的单张图像,StyleDrop也能够生成出和这张图片风格一样的多个图像。

这让我想到了我之前写过的风格迁移算法

StyleDrop组件

StyleDrop结构包含如下几个关键组件:

  1. 基于Transformer的文本到图像生成模型(Muse)
  2. 适配器微调
  3. 反馈的迭代训练。

Muse

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第1张图片
论文链接: https://arxiv.org/abs/2301.00704
项目主页: https://muse-model.github.io/

文本到图像(Text-to-Image,简称TTI)模型一直是生成型人工智能革命的核心,像DALL-E、Stable Diffusion或Midjourney等模型引起了广泛关注。这些高质量的TTI模型的爆炸式增长主要得益于能够有效计算文本和图像之间相似性的扩散或自回归方法。由于这些架构的初生性质,从计算的角度来看,它们相对较为昂贵,仍有许多改进效率和成本的工作需要完成。

Google推出了Muse,一种TTI模型,可以实现最先进的图像质量输出,同时比扩散和自回归模型更高效

Muse采用了Image中引领的级联Transformer模型的一些思想。然而,Muse并不生成像素级表示,而是使用离散的标记(tokens)

如何理解这这句话:想象一下,生成像素级表示就像是把一幅图像绘制在纸上,每个像素都是细微的颜色变化和细节。但是Muse选择了另一种方式,它像是一个有限的艺术家,只能使用有限的调色板和离散的标记来表达图像。这位艺术家(Muse)并不直接画出整个图像,而是通过组合和排列这些离散的标记来表达图像的特征和内容。就好像他在一块画布上逐渐添加和移动拼图块,最终组合成了完整的图像。这种方式虽然不像绘制每个像素那样细致入微,但它依然能够传达出图像的整体信息和特征。

这种方法有助于输出的稳定性。从这个意义上说,Muse的扩散方法将图像解码为一组离散的标记,并进行重构。

Muse架构

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第2张图片
Muse可以分为三个基本层。

  • 第一层使用预训练的文本编码器对输入的prompt进行编码文本嵌入,用于与图像标记进行交叉注意力计算。

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第3张图片

  • 第二层负责执行标记解构过程。该层使用VQ Tokenizer,将输入图像(低分辨率256x256)加上随机的mask图像标记,转换为一个16x16的离散标记的潜空间(Masked Tokens),再联合第一层的文本嵌入一起送到基础模型(BaseTransformer)中。

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第4张图片

  • 第三层也使用VQ Tokenizer来随机mask图像标记。将输入图像(高分辨率512x512)加上随机的mask图像标记,转换为一个64x64的离散标记的潜空间(Masked high-res Tokens),此外作者还设计了一个SuperRes Transformer,负责将低分辨率token转换为高分辨率token,实现超分辨率功能。

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第5张图片

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第6张图片

通过第一层获得的文本嵌入,再结合第二层通过Transformer的自注意力层、交叉注意力层和MLP层来进行对应的特征映射。生成的基础模型为低分辨率token特征图(16x16分辨率,对应于256x256的输入图像)。随后将其输入到超分辨率模型中上采样到64x64分辨率(对应于512x512的输入图像),整体流程如下图所示。

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第7张图片
通过这种设计,模型可以实现跨分辨率的信息融合,低分辨率的token包含较多的图像语义,高分辨率的token又兼顾了图像细节,随后通过Transformer中的交叉注意力进行特征融合,并使用更高分辨率的VQGAN解码来得到最终的高质量高分辨率生成图像。

Muse图像生成实现流程

Muse是一种基于遮蔽生成式图像变换器(MaskGIT)的最先进文本到图像合成模型。

Muse架构由文本编码器T、变换器G、采样器S、图像编码器E和解码器D共同组成。

其中 T T T将文本提示 t ∈ T t \in T tT映射到连续的嵌入空间 E E E
G G G处理文本嵌入 e ∈ E e \in E eE,生成视觉标记序列的logits l ∈ L l \in L lL

S S S通过迭代解码从logits绘制视觉标记序列 v ∈ V v \in V vV

该过程在文本嵌入e和前几个步骤解码的视觉标记的条件下运行。最后,由解码器 D D D将离散标记序列映射到像素空间 I I I上。

简而言之,给定文本提示t,图像 I I I的合成如下所示:
I = D ( S ( G , T ( t ) ) ) , l k = G ( v k , T ( t ) ) + λ ( G ( v k , T ( t ) ) − G ( v k , T ( n ) ) ) I = D(S(G,T(t))),l_k = G(v_k,T(t)) + \lambda (G(v_k,T(t)) - G(v_k,T(n))) I=D(S(G,T(t))),lk=G(vk,T(t))+λ(G(vk,T(t))G(vk,T(n)))

其中 n ∈ T n \in T nT是一个控制生存图像离散程度的, λ \lambda λ是一个引导尺度,k是合成步骤, l k l_k lk是logits,从中采样出下一组视觉标记 v k + 1 v_k+1 vk+1 E E E D D D采用VQGAN, G G G使用了大量的(图像,文本)数据集对,并在 D D D上通过遮蔽视觉标记建模损失进行训练,

损失函数如下:

L = E ( x , t ) ∼ D , m ∼ M [ C E m ( G ( M ( E ( x ) , m ) , T ( t ) ) , E ( x ) ) ] L=E_{(x,t) \sim D,m \sim M}[CE_m(G(M(E(x),m),T(t)),E(x))] L=E(x,t)D,mM[CEm(G(M(E(x),m),T(t)),E(x))]

其中M是一个应用于 v i v_i vi标记的掩码运算符。 C E m CE_m CEm是通过仅对未被掩码的标记求和计算的加权交叉熵。

适配器微调

对于第二个组件,采用适配器微调来高效地调整大型文本到图像Transformer的风格。具体而言,通过组合内容和风格文本描述符构建了一个风格参考图像的文本输入,以促进内容和风格的解耦。

在这个文本到图像的情景中,我们可以将适配器微调看作是一个设计师,它需要在生成图像时同时考虑内容和风格。为了实现这一目标,它使用内容描述符来确定图像的主题和元素,并使用风格描述符来指导图像的风格和表现方式。
通过将内容和风格文本描述符结合起来,就像设计师综合各种风格元素一样,适配器微调能够生成一个文本输入,该输入既包含了要表达的内容,又包含了所需的风格。这样一来,内容和风格可以在生成图像的过程中相互解耦,使得调整和控制风格变得更加高效和灵活。

多种Transformer文本到图像模型的微调,有多种参数高效微调方法,例如prompt tuning 、LoRA或adapter tuning

在Muse模型,考虑它是一种基于非自回归(NAR)的文本到图像Transformer,这里参数微调使用adapter tuning 方法。

Adapter Tuning

Adapter Tuning 是一种用于参数微调的方法,它的原理是在现有的模型中引入适配器层(adapter layer),并仅微调适配器层的参数,而保持其他层参数固定。

适配器层的作用是在模型中添加额外的可学习参数,用于适应新的任务或领域。这样做的好处是可以在不影响原模型性能的情况下,快速地进行微调和适应新任务。

具体来说,适配器层会接收原始模型的输入,并通过一系列非线性变换将输入特征映射到适配器层的输出。输出特征会经过一些额外的变换,然后与原始模型的输出进行融合,最终得到微调后的模型输出。

在Adapter Tuning 中,微调的目标是最小化特定任务的损失函数,同时只更新适配器层的参数。这样可以避免对整个模型进行大规模的参数更新,从而提高微调的效率和参数利用率。

具体的公式可以表示为

假设适配器层的输入为 x x x,输出为 f adapter ( x , θ ) f_{\text{adapter}}(x, \theta) fadapter(x,θ),其中 θ \theta θ 是适配器层的参数。

微调过程中,适配器层的参数会被更新,以最小化特定任务的损失函数。对于特定任务的损失函数 L task L_{\text{task}} Ltask,微调的目标是找到最优的适配器参数 θ ∗ \theta^* θ

θ ∗ = arg ⁡ min ⁡ θ L task ( f adapter ( x , θ ) ) \theta^* = \arg\min_{\theta} L_{\text{task}}(f_{\text{adapter}}(x, \theta)) θ=argθminLtask(fadapter(x,θ))
其中, f adapter ( x , θ ) f_{\text{adapter}}(x, \theta) fadapter(x,θ) 是适配器层的输出,表示适配器层对输入特征 x x x 进行变换得到的输出。

Muse中的Adapter Tuning

在Muse模型中,适配器微调被用于文本到图像Transformer的参数微调。具体来说,Muse模型采用了一个基于非自回归(NAR)的文本到图像Transformer,通过修改以支持参数高效微调(PEFT)和适配器。

脚踩Midjourney、Stable Diffusion,谷歌StyleDrop真要杀疯了!_第8张图片
上图为Muse的Transformer层的简化架构,通过修改以支持参数高效微调(PEFT)和适配器 。使用L层Transformer来处理以文本嵌入 e e e为条件的一系列绿色视觉标记。可学习参数 θ θ θ用于构建适配器微调的权重。

在Muse中,适配器微调的最小化特定任务的损失函数可以表示为:

θ = arg ⁡ min ⁡ θ L θ , L θ = E ( x , t ) ∼ D t r , m ∼ M [ C E m ( G ^ ( M ( E ( x ) , m ) , T ( t ) , θ ) , E ( x ) ) ] \theta = \arg\min_{\theta} L_{\theta},L_{\theta}=E_{(x,t) \sim D_{tr},m \sim M}[CE_m(\hat G(M(E(x),m),T(t),\theta),E(x))] θ=argθminLθ,Lθ=E(x,t)Dtr,mM[CEm(G^(M(E(x),m),T(t),θ),E(x))]

其中, D t r D_tr Dtr包含少量(图像,文本)对,用于微调。
其中 L θ L_θ Lθ为微调的学习目标在每个的解码步骤中可以表示为 l k l_k lk,可以通过以下方式计算:

l k = G ^ ( v k , T ( t ) , θ ) + λ A ( G ^ ( v k , T ( t ) , θ ) − G ( v k , T ( t ) ) ) + λ B ( G ( v k , T ( t ) ) − G ( v k , T ( n ) ) ) l_k=\hat G(v_k,T(t),\theta)+\lambda_A(\hat G(v_k,T(t),\theta) - G(v_k,T(t))) + \lambda_B(G(v_k,T(t)) - G(v_k,T(n))) lk=G^(vk,T(t),θ)+λA(G^(vk,T(t),θ)G(vk,T(t)))+λB(G(vk,T(t))G(vk,T(n)))

其中, λ A \lambda_A λA通过对比两个生成分布来控制对目标分布的适应程度,一个是经过微调的 G ^ ( v k , T ( t ) , θ ) \hat G(v_k, T(t), \theta) G^(vk,T(t),θ),另一个是没有经过微调的 G ( v k , T ( t ) ) G(v_k, T(t)) G(vk,T(t)) λ B \lambda_B λB通过对比 ( t ) (t) (t) ( n ) (n) (n)的文本提示来控制文本的对齐。这样可以在微调过程中同时考虑风格和内容的调整。

反馈迭代训练

对于第三个组件,提出了一个迭代训练框架,该框架在先前训练的适配器中采样图像进行训练。

当在少量高质量合成图像上进行训练时,迭代训练能够有效减轻过拟合问题,这是在非常少量(例如一张)图像上微调文本到图像模型时普遍存在的问题

在 StyleDrop 模型中,反馈迭代训练的实现如下:

  1. 初始训练阶段:首先,使用一个单一的样式参考图像进行训练,生成一系列合成图像。在此阶段,可能会出现一些合成图像与样式参考图像泄露了内容的情况。
  2. 图像选择:使用 CLIP 分数来评估生成图像的质量。CLIP 分数衡量图像与文本之间的对齐度,可以作为评估生成图像质量的指标。选择具有最高 CLIP 分数的图像作为成功的样本。
  3. 迭代训练:将成功的样本与原始训练集合并,形成一个新的训练集。然后使用这个新的训练集进行迭代训练。迭代训练的目标是提高生成图像对于文本的准确性(更好的分离样式与内容)。这一过程有助于改善生成图像的质量。
  4. 人类反馈:除了使用 CLIP 分数进行评估外,还可以使用人类反馈来进一步提高生成图像的质量。人类反馈可以直接将用户的意图注入到合成图像的质量评估中。人类反馈在捕捉微妙的样式属性方面更加有效。

通过不断迭代训练,结合 CLIP 分数和人类反馈,可以改进生成图像的质量,增强对文本的准确性,并在合成图像中更好地平衡样式与内容。这种迭代的训练方法可以提高生成图像的质量和适应性,使其更符合设计师的意图。

你可能感兴趣的:(AIGC,前沿,midjourney,stable,diffusion,人工智能)