草庐IT

首个超大规模GAN模型!生成速度比Diffusion快20+倍,0.13秒出图,最高支持1600万像素

新智元 2023-03-28 原文
​​AIGC爆火的背后,从技术的角度来看,是图像生成模型的架构发生了巨大的变化。

随着OpenAI发布DALL-E 2,自回归和扩散模型一夜之间成为大规模生成模型的新标准,而在此之前,生成对抗网络(GAN)一直都是主流选择,并衍生出StyleGAN等技术。

从GAN切换到扩散模型的架构转变也引出了一个问题:能否通过扩大GAN模型的规模,比如说在 LAION 这样的大型数据集中进一步提升性能吗?

最近,针对增加StyleGAN架构容量会导致不稳定的问题,来自浦项科技大学(韩国)、卡内基梅隆大学和Adobe研究院的研究人员提出了一种全新的生成对抗网络架构GigaGAN,打破了模型的规模限制,展示了 GAN 仍然可以胜任文本到图像合成模型。

论文链接:https://arxiv.org/abs/2303.05511

项目链接:https://mingukkang.github.io/GigaGAN/

GigaGAN有三大优势。

1. 它在推理时速度更快,相比同量级参数的Stable Diffusion-v1.5,在512分辨率的生成速度从2.9秒缩短到0.13秒。

2. 可以合成高分辨率的图像,例如,在3.66秒内合成1600万像素的图像。

3. 支持各种潜空间编辑应用程序,如潜插值、样式混合和向量算术操作等。

GAN到极限了吗?最近发布的一系列模型,如DALL-E 2、Imagen、Parti和Stable Diffusion,开创了图像生成的新时代,在图像质量和模型灵活性方面达到了前所未有的水平。

现在占主导地位的范式「扩散模型」和「自回归模型」,都依赖于迭代推理这把双刃剑,因为迭代方法能够以简单的目标进行稳定的训练,但在推理过程中会产生更高的计算成本。

与此形成对比的是生成对抗网络(GAN),只需要一次forward pass即可生成图像,因此本质上是更高效的。

虽然GAN模型主导了生成式建模的「前一个时代」,但由于训练过程中的不稳定性,对GAN进行扩展需要仔细调整网络结构和训练考虑,因此GANs虽然在为单个或多个对象类别建模方面表现出色,但扩展到复杂的数据集上(更不用说开放世界物体生成了),仍然具有挑战性。

所以目前超大型的模型、数据和计算资源都主要集中在扩散和自回归模型上。

在这项工作中,研究人员主要解决以下问题:

GAN能否继续扩大规模并有可能从这些资源中受益?或者说GAN已经到达极限了?是什么阻碍了GAN的进一步扩展?能否克服这些障碍?

稳定训练GAN研究人员首先用StyleGAN2进行实验,观察到简单地扩展骨干网会导致不稳定的训练,在确定了几个关键问题后,提出了在增加模型容量的同时稳定训练的技术。

首先,通过保留一个滤波器库(a bank of filters),并采取一个特定样本的线性组合来有效地扩展生成器的容量。

改编了几个在扩散模型上下文中常用的技术,并确认它们可以为GANs带来了类似的性能提升,例如将自注意力机制(仅图像)和交叉注意力(图像-文本)与卷积层交织在一起可以提高性能。

此外,研究人员重新引入了多尺度训练(multi-scaletraining),找到了一个新的方案可以改善图像-文本对齐和生成输出的低频细节。

多尺度训练可以让基于GAN的生成器更有效地使用低分辨率块中的参数,从而具有更好的图像-文本对齐和图像质量。

生成器

GigaGAN的生成器由文本编码分支(text encoding branch)、样式映射网络(style mapping network)、多尺度综合网络(multi-scale synthesis network)组成,并辅以稳定注意力(stable attention)和自适应核选择(adaptive kernel selection)。

在文本编码分支中,首先使用一个预先训练好的 CLIP 模型和一个学习的注意层 T 来提取文本嵌入,然后将嵌入过程传递给样式映射网络 M,生成与 StyleGAN 类似的样式向量 w

合成网络采用样式编码作为modulation,以文本嵌入作为注意力来生成image pyramid,在此基础上,引入样本自适应核选择算法,实现了基于输入文本条件的卷积核自适应选择。

判别器

与生成器类似,GigaGAN的判别器由两个分支组成,分别用于处理图像和文本条件。

文本分支处理类似于生成器的文本分支;图像分支接收一个image pyramid作为输入并对每个图像尺度进行独立的预测。

公式中引入了多个额外的损失函数以促进快速收敛。

实验结果对大规模文本-图像合成任务进行系统的、受控的评估是困难的,因为大多数现有的模型并不公开可用,即使训练代码可用,从头开始训练一个新模型的成本也会过高。

研究人员选择在实验中与Imagen、Latent Diffusion Models(LDM)、Stable Diffusion和Parti进行对比,同时承认在训练数据集、迭代次数、批量大小和模型大小方面存在相当大的差异。

对于定量评价指标,主要使用Frechet Inception Distance(FID)来衡量输出分布的真实性,并使用CLIP分数来评价图像-文本对齐。

文中进行了五个不同的实验:

1. 通过逐步纳入每个技术组件来展示提出方法的有效性;

2. 文本-图像合成结果表明,GigaGAN表现出与稳定扩散(SD-v1.5)相当的FID,同时生成的结果比扩散或自回归模型快数百倍;

3. 将GigaGAN与基于蒸馏的扩散模型进行对比,显示GigaGAN可以比基于蒸馏的扩散模型更快地合成更高质量的图像;

4. 验证了GigaGAN的上采样器在有条件和无条件的超分辨率任务中比其他上采样器的优势;

5. 结果表明大规模GANs仍然享有GANs的连续和分解潜伏空间的操作,实现了新的图像编辑模式。

经过调参,研究人员在大规模的数据集,如LAION2B-en上实现了稳定和可扩展的十亿参数GAN(GigaGAN)的训练。

并且该方法采用了多阶段的方法,首先在64×64下生成,然后上采样到512×512,这两个网络是模块化的,而且足够强大,能够以即插即用的方式使用。

结果表明,尽管在训练时从未见过扩散模型的图像,但基于文本条件的GAN上采样网络可以作为基础扩散模型(如DALL-E 2)的高效、高质量的上采样器。

这些成果加在一起,使得GigaGAN远远超过了以前的GAN模型,比StyleGAN2大36倍,比StyleGAN-XL和XMC-GAN大6倍。

虽然GiGAN的10亿参数量仍然低于最近发布的最大合成模型,如Imagen(3B)、DALL-E 2(5.5B)和Parti(20B),但目前还没有观察到关于模型大小的质量饱和度。

GigaGAN在COCO2014数据集上实现了9.09的zero-shot FID,低于DALL-E 2、Parti-750M和Stable Diffusion的FID

应用场景提示插值(Prompt interpolation)

GigaGAN可以在提示之间平滑地插值,下图中的四个角是由同一潜码生成,但带有不同的文本提示。

解耦提示混合(Disentangled prompt mixing)

GigaGAN 保留了一个分离的潜空间,使得能够将一个样本的粗样式与另一个样本的精细样式结合起来,并且GigaGAN 可以通过文本提示直接控制样式。

粗到精风格交换(Coarse-to-fine sytle swapping)

基于 GAN 的模型架构保留了一个分离的潜在空间,使得能够将一个样本的粗样式与另一个样本的精样式混合在一起。

参考资料:​

https://mingukkang.github.io/GigaGAN/

有关首个超大规模GAN模型!生成速度比Diffusion快20+倍,0.13秒出图,最高支持1600万像素的更多相关文章

  1. kvm虚拟机安装centos7基于ubuntu20.04系统 - 2

    需求:要创建虚拟机,就需要给他提供一个虚拟的磁盘,我们就在/opt目录下创建一个10G大小的raw格式的虚拟磁盘CentOS-7-x86_64.raw命令格式:qemu-imgcreate-f磁盘格式磁盘名称磁盘大小qemu-imgcreate-f磁盘格式-o?1.创建磁盘qemu-imgcreate-fraw/opt/CentOS-7-x86_64.raw10G执行效果#ls/opt/CentOS-7-x86_64.raw2.安装虚拟机使用virt-install命令,基于我们提供的系统镜像和虚拟磁盘来创建一个虚拟机,另外在创建虚拟机之前,提前打开vnc客户端,在创建虚拟机的时候,通过vnc

  2. Ubuntu20.04系统WineHQ7.0安装微信 - 2

    提供3种Ubuntu系统安装微信的方法,在Ubuntu20.04上验证都ok。1.WineHQ7.0安装微信:ubuntu20.04安装最新版微信--可以支持微信最新版,但是适配的不是特别好;比如WeChartOCR.exe报错。2.原生微信安装:linux系统下的微信安装(ubuntu20.04)--微信适配的最好,反应最快,但是微信版本只到2.1.1,版本太老,很多功能都没有。3.深度deepin-wine6安装微信:ubuntu20.04+系统deepin-wine6安装新版微信--综合比较好,当前个人使用此种方法1个月,微信版本3.4;没什么大问题,尚可。一、WineHQ7.0安装微信

  3. Stable Diffusion - 2

    序言AI绘图已经火了有一段时间了,国外各种AI绘图,AI视频剪辑等已经被玩坏了。StableDiffusionInfinity免费开源的StableDiffusion已经能扩画了,StableDiffusionInfinity是其子功能,下面可以来看看这个开源项目。github克隆项目(使用镜像)如果有vpn的或者能上谷歌的同学直接上github上搜索该项目,如果没有的话,找到github镜像。镜像链接:gitclone.comvsCode打开项目该项目是python写的,可以使用vscode打开查看,vscode安装参考:RunningVisualStudioCodeonmacOS项目基本信

  4. java - Ruby 和 Java 的速度 - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。在我在网上找到的每个基准测试中,Ruby似乎都很慢,比Java慢得多。Ruby的人只是说这无关紧要。您能举个例子说明RubyonRails(以及Ruby本身)的速度真的无关紧要吗?

  5. ruby-on-rails - encode_www_form 将空格转换为 + 而不是 %20 - 2

    我正在尝试从使用RubyonRails的散列创建http参数,我尝试使用URI.encode_www_form(params),但这没有正确生成参数。下面是我的哈希值params['Name'.to_sym]='NiaKun'params['AddressLine1'.to_sym]='AddressOne'params['City'.to_sym]='CityName'这个方法把空格转成+,我要的是把空格转成%20我收到"Name=Nia+Kun&AddressLine1=Address+One&City=City+Name"但我需要将此空格转换为%20

  6. ruby-on-rails - Ruby 的 range step 方法导致执行速度很慢? - 2

    我有这段代码:date_counter=Time.mktime(2011,01,01,00,00,00,"+05:00")@weeks=Array.new(date_counter..Time.now).step(1.week)do|week|logger.debug"WEEK:"+week.inspect@weeks从技术上讲,代码有效,输出:SatJan0100:00:00-05002011SatJan0800:00:00-05002011SatJan1500:00:00-05002011etc.但是执行时间完全是垃圾!每周计算大约需要四秒钟。我在这段代码中是否遗漏了一些奇怪的低效

  7. ruby-on-rails - XPath 或 CSS 解析速度更快(对于 HTML 文件上的 Nokogiri)? - 2

    我想知道NokogiriXPath或CSS解析是否可以更快地处理HTML文件。速度有何不同? 最佳答案 Nokogiri没有XPath或CSS解析。它将XML/HTML解析为单个DOM,然后您可以使用CSS或XPath语法进行查询。CSS选择器在要求libxml2执行查询之前在内部转换为XPath。因此(对于完全相同的选择器)XPath版本会快一点点,因为CSS不需要先转换成XPath。但是,您的问题没有通用答案;这取决于您选择的是什么,以及您的XPath是什么样的。很有可能,您不会编写与Nokogiri创建的相同的XPath。例如

  8. ruby - proc、Proc.new、lambda 和 stabby lambda 之间的速度差异 - 2

    过程和lambdadiffer关于方法范围和return关键字的效果。我对它们之间的性能差异很感兴趣。我写了一个测试,如下所示:deftime(&block)start=Time.nowblock.callp"thattook#{Time.now-start}"enddeftest(proc)time{(0..10000000).each{|n|proc.call(n)}}enddeftest_block(&block)time{(0..10000000).each{|n|block.call(n)}}enddefmethod_testtime{(1..10000000).each{|

  9. ruby - 如何在 Node.js/RoR 中监控 20 个网站(Ping 或 HTTP)的正常运行时间 - 2

    每5分钟(例如)ping20个网站的列表以了解该网站是否响应HTTP202的最佳方法是什么?最简单的想法是将20个URLS保存在数据库中,然后运行数据库并对每个URL执行ping操作。但是,当一个人不回答时会发生什么?之后的人会怎样?此外,是否有更好但更简单的解决方案?恐怕该列表会增长到20000个网站,然后没有足够的时间在我需要ping的5分钟内全部ping通它们。基本上,我是在描述PingDom、UptimeRobot等的工作原理。我正在使用node.js和RubyonRails构建这个系统。我也倾向于使用MongoDB来保存所有ping和监控结果的历史记录。建议?非常感谢!

  10. ruby-on-rails - 如何加快为 rspec 测试创建 5,000 条记录的速度? - 2

    我正在使用RubyonRails3.2.2、FactoryGirl3.1.0、FactoryGirlRails3.1.0、Rspec2.9.0和RspecRails2.9.0。为了测试我的应用程序,我必须在数据库中创建大量记录(大约5000条),但是该操作非常慢(创建记录需要10多分钟)。我这样进行:before(:each)do5000.timesdoFactoryGirl.create(:article,)endend如何改进我的规范代码以加快速度?注意:可能速度较慢是由在每个文章创建过程前后运行的(5)个文章回调引起的,但我可以跳过这些(因为我唯一需要测试的是文章和不是关联的模型

随机推荐