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

news2024/11/23 1:01:34

脚踩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

在这里插入图片描述
论文链接: 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架构

在这里插入图片描述
Muse可以分为三个基本层。

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

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

在这里插入图片描述
通过这种设计,模型可以实现跨分辨率的信息融合,低分辨率的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)和适配器。

在这里插入图片描述
上图为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 分数和人类反馈,可以改进生成图像的质量,增强对文本的准确性,并在合成图像中更好地平衡样式与内容。这种迭代的训练方法可以提高生成图像的质量和适应性,使其更符合设计师的意图。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642986.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ZYNQ - 以太网远程更新贴片SD卡应用程序【SD NAND应用】

写在前面 对于ZYNQ系列的板卡固化,可以通过JTAG接口,使用SDK固化到FLASH中,或者可将SD卡取出将SD卡中保存的固化工程进行修改,但在很多情况下,离线更新会很不方便,本文借鉴网上常见的远程更新QSPI FLASH的…

解析Java异常机制:捕获编程中的错误,保障代码稳定性

工作中,程序遇到的情况不可能完美。比如:程序要打开某个文件,这个文件可能不存在或者文件格式不对;程序在运行着,但是内存或硬盘可能满了等等。 软件程序在运行过程中,非常可能遇到刚刚提到的这些问题&…

java OpenCSV自定义列标题和列位置

背景:最近使用csv进行数据导出,提高导出性能 问题:CsvBindByName和CsvBindByPosition不能同时用,要么是没标题要么是不是指定的排序规则 实现思路: 自定义排序规则,HeaderNameBaseMappingStrategy的writeOrder 属性可…

C++基于jrtp实现rtp发送与接收代码实现(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、jrtp是什么二、rtp sender源码三、rtp receive源码总结前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实…

Mininet拓扑构建与命令使用

实验目的: 1、通过命令模拟创建SDN网络。 2、深入了解Mininet的命令使用。 3、学会使用网络构建启动参数、内部交互命令及外部运行参数。 实验环境: 设备名称软件环境硬件环境主机Mininet_2.2.0_desktop_cv1.1CPU:1核 内存:2G 磁…

【MySQL数据库】MySQL数据库管理

MySQL数据库管理 一、数据库简述1.1简介1.2数据库基本概念1.3数据库的发展史1.3主流的数据库介绍1.4数据库的类型1.4.1关系型数据库特点1.4.2非关系型数据库介绍 1.5SQL语言分类 二、数据库基础应用2.1查看数据库2.2创建新的库、表2.3删除库、表2.4管理表中的数据记录2.4.1插入…

Java新技术和趋势:如何应对Java生态的变化和发展趋势

章节一:引言 Java是一门广泛使用的编程语言,具有强大的生态系统和持续的发展。随着时间的推移,Java生态系统不断演进和改变,出现了许多新技术和趋势。在本文中,我们将探讨一些最新的Java技术和趋势,并分享…

路径规划算法:基于适应度相关优化的路径规划算法- 附代码

路径规划算法:基于适应度相关优化的路径规划算法- 附代码 文章目录 路径规划算法:基于适应度相关优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能…

路径规划算法:基于社会群体优化的路径规划算法- 附代码

路径规划算法:基于社会群体优化的路径规划算法- 附代码 文章目录 路径规划算法:基于社会群体优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要:本文主要介绍利用智能优化…

【Linux】Nginx+Tomcat负载均衡、动静分离、多实例部署

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 NginxTomcat负载均衡、动静分离、多实例部署 一、Tomcat 多实例部署1.安装好 jdk 及 tomcat2.配置 tomcat 环境变量3.修改 tomcat2 中的 server.xml 文件4.修改各 tomcat 文件…

RocketMQ源码解析之消息存储机制

RocketMQ是一款开源的分布式消息中间件,在大数据、云计算等领域具有广泛的应用。要想深入了解RocketMQ的源码实现,首先需要了解它的消息存储机制。 RocketMQ采用的是文件存储的方式,即RocketMQ将消息以文件的形式存储在磁盘上。具体来说,RocketMQ将消息存储在commitlog文件…

精通postman教程(三)postman各模块详解

作为一名测试工程师,那么Postman绝对是大伙必备的工具之一。 在这个系列教程中,我将为大伙详细讲解如何使用Postman进行API测试。 今天我为大伙介绍Postman的各个模块,让你们快速上手这款工具。 一、顶部及左侧工作栏 1、My Workspace - …

java基础(多线程)-常用方法具体使用

一、Thread.start()方法 start()方法:启动子线程 new Thread();当前线程的状态为NEW 调用start()方法之后当前线程的状态变为RUNNABLE 二、Thread.sleep()静态方法 1. 调用sleep会让当前线程从Running进入Timed Waiting 状态 2.其他线程可以使用interrupt方法…

ES6相关概念

什么是ES6? ES 的全称是 ECMAScript , 它是由 ECMA 国际标准化组织,制定的一项脚本语言的标准化规范。 为什么使用 ES6 ? 每一次标准的诞生都意味着语言的完善,功能的加强。JavaScript语言本身也有一些令人不满意的地方。 变量提升特性增加了程序运行…

一文讲清超算,高性能计算,并行计算,分布式计算的区别

摘要: 超算、高性能计算、并行计算和分布式计算是计算领域中的重要概念,但它们之间的区别常常令人困惑。本文将为你解析它们的概念与特点,让你在这个领域里轻松游刃有余。 ... ... 超算、高性能计算、并行计算和分布式计算是计算领域中的重要概念&#x…

LVS + Keepalived群集

文章目录 LVS Keepalived1 Keepalived及其工作原理2 一个健康的集群的特点3 Keepalived常见问题脑裂3.1 原因3.2 预防3.3 配置 4 部署keepalived4.1 部署192.168.146.204.2 部署192.168.146.30 5 LVSKeepalived高可用群集5.1 部署192.168.146.50(nginx)5.2 部署192.168.146.60…

在家就能赚钱的方法,我不允许你还不知道

近年来,随着互联网的迅猛发展,具有敏锐嗅觉的人们只需利用互联网,就能愉快地获取收入。一般而言,在线赚钱所需的投资较少,有时只需一台可上网的电脑或手机即可满足,因此有时被称为“零成本或低成本网络赚钱…

Vue学习 之 第一个Vue应用

第一个 Vue 应用 安装WebStorm 在这之前,已下载安装好了WebStorm。 打开WebStorm,点击”“就可以创建一个新的应用。 项目文件目录地址: /Users/morris/WebstormProjects 或者在 file -> new priject 也可以新建一个项目 新建一个 ht…

中小商户如何实现门店数字化运营与管理,有没有好用的工具推荐?

中小商户开展门店数字化运营与管理,能够实现在线支付、退货、换货等快速操作,针对性的精准营销和服务,增加客户忠诚度。 门店数字化运营与管理可以帮助商家建立全面、实时的业务数据管理系统,提高工作效率和客户满意度&#xff0c…

线程池的主要处理流程及常用方法

线程池的主要处理流程及常用方法 更多优秀文章,请扫码关注个人微信公众号或搜索“程序猿小杨”添加。 一、主要处理流程: 当调用线程池execute() 方法添加一个任务时, threadPoolExecutor.execute,具体代码如下: p…