jjzjj

GAN的反击:朱俊彦CVPR新作GigaGAN,出图速度秒杀Stable Diffusion

机器之心 2023-03-28 原文
图像生成是当前 AIGC 领域最热门的方向之一。近期发布的图像生成模型如 DALL・E 2、Imagen、Stable Diffusion 等等,开创了图像生成的新时代,实现了前所未有的图像质量和模型灵活性水平。扩散模型也成为目前占据主导地位的范式。然而,扩散模型依赖于迭代推理,这是一把双刃剑,因为迭代方法可以实现具有简单目标的稳定训练,但推理过程需要高昂的计算成本。

在扩散模型之前,生成对抗网络(GAN)是图像生成模型中常用的基础架构。相比于扩散模型,GAN 通过单个前向传递生成图像,因此本质上是更高效的,但由于训练过程的不稳定性,扩展 GAN 需要仔细调整网络架构和训练因素。因此,GAN 擅长对单个或多个对象类进行建模,但扩展到复杂数据集(更不用说现实世界)则极具挑战性。因此,超大型模型、数据和计算资源现在都专用于扩散模型和自回归模型。

但作为一种高效的生成方法,许多研究者并没有完全放弃 GAN 方法。例如,最近英伟达提出了 StyleGAN-T 模型;港中文等用基于 GAN 的方法​生成流畅视频​,这些都是 CV 研究者在 GAN 上做的进一步尝试。

现在,在一篇 CVPR 2023 论文中,来自 POSTECH、卡耐基梅隆大学和 Adobe 研究院的研究者们联合探究了关于 GAN 的几个重要问题,包括:

  • GAN 能否继续扩大规模并从大量资源中受益,GAN 遇到瓶颈了吗?
  • 是什么阻止了 GAN 的进一步扩展,我们能否克服这些障碍?

  • 论文链接:https://arxiv.org/abs/2303.05511
  • 项目链接:https://mingukkang.github.io/GigaGAN/
值得注意的是,CycleGAN 的主要作者、曾获 2018 年 ACM SIGGRAPH 最佳博士论文奖的朱俊彦是这篇 CVPR 论文的第二作者。

该研究首先使用 StyleGAN2 进行实验,并观察到简单地扩展主干网络会导致训练不稳定。基于此,研究者确定了几个关键问题,并提出了一种在增加模型容量的同时稳定训练的技术。

首先,该研究通过保留一组滤波器(filter)并采用特定于样本的线性组合来有效地扩展生成器的容量。该研究还采用了扩散上下文(diffusion context)中常用的几种技术,并证实它们为 GAN 带来了类似的好处。例如,将自注意力(仅图像)和交叉注意力(图像 - 文本)与卷积层交织在一起可以提高模型性能。

该研究还重新引入了多尺度训练,并提出一种新方案来改进图像 - 文本对齐和生成输出的低频细节。多尺度训练允许基于 GAN 的生成器更有效地使用低分辨率块中的参数,从而实现了更好的图像 - 文本对齐和图像质量。经过仔细调整后,该研究提出了十亿参数的新模型 GigaGAN,并在大型数据集(例如 LAION2B-en)上实现了稳定和可扩展的训练,实验结果如下图 1 所示。

此外,该研究还采用了多阶段方法 [14, 104],首先以 64 × 64 的低分辨率生成图像,然后再上采样到 512 × 512 分辨率。这两个网络是模块化的,并且足够强大,能够以即插即用的方式使用。

该研究表明,基于文本条件的 GAN 上采样网络可以用作基础扩散模型的高效且更高质量的上采样器,如下图 2 和图 3 所示。

上述改进使 GigaGAN 远远超越了以前的 GAN:比 StyleGAN2 大 36 倍,比 StyleGAN-XL 和 XMC-GAN 大 6 倍。虽然 GigaGAN 十亿(1B)的参数量仍然低于近期的大型合成模型,例如 Imagen (3.0B)、DALL・E 2 (5.5B) 和 Parti (20B),但研究者表示他们尚未观察到关于模型大小的质量饱和。

GigaGAN 在 COCO2014 数据集上实现了 9.09 的零样本 FID,低于 DALL・E 2、Parti-750M 和 Stable Diffusion。


此外,与扩散模型和自回归模型相比,GigaGAN 具有三大实用优势。首先,它的速度快了几十倍,在 0.13 秒内生成了 512 像素的图像(图 1)。其次,它可以在 3.66 秒内合成 4k 分辨率的超高分辨率图像。第三,它具有可控的潜在向量空间,适用于经过充分研究的可控图像合成应用,例如风格混合(图 6)、prompt 插值(图 7)和 prompt 混合(图 8)。


该研究成功地在数十亿现实世界图像上训练了基于 GAN 的十亿参数规模模型 GigaGAN。这表明 GAN 仍然是文本到图像合成的可行选择,研究人员们应考虑将其用于未来的积极扩展。

方法概览

研究者训练了一个生成器 G (z, c),在给定一个潜在编码 z∼N (0, 1)∈R^128 和文本调节信号 c 的情况下,预测一个图像 x∈R^(H×W×3)。他们使用一个判别器 D (x, c) 来判断生成的图像的真实性,与训练数据库 D 中的样本相比较,后者包含图像 - 文本对。

尽管 GAN 可以成功地在单类和多类数据集上生成真实的图像,但在互联网图像上进行开放式文本条件合成仍然面临挑战。研究者假设,目前的限制源于其对卷积层的依赖。也就是说,同样的卷积滤波器被用来为图像所有位置上的所有文本条件进行通用图像合成函数建模,这是个挑战。有鉴于此,研究者试图通过根据输入条件动态选择卷积滤波器,并通过注意力机制捕捉长程依赖,为参数化注入更多的表现力。

GigaGAN 高容量文本 - 图像生成器如下图 4 所示。首先,研究者使用预训练的 CLIP 模型和学习过的编码器 T 来提取文本嵌入。使用交叉注意力将局部文本描述符提供给生成器。全局文本描述符,连同潜在编码 z,被送入风格映射网络 M 以产生风格码 w。风格码使用论文中的风格 - 自适应内核选择调节主生成器,如右侧所示。

生成器通过将中间特征转换为 RGB 图像来输出一个图像金字塔。为了达到更高的容量,研究者在每个尺度上使用多个注意力层和卷积层(附录 A2)。他们还使用了一个单独的上采样器模型,该模型未在此图中显示。

判别器由两个分支组成,用于处理图像和文本调节 t_D。文本分支对文本的处理与生成器类似(图 4)。图像分支接收一个图像金字塔,并对每个图像尺度进行独立预测。此外,预测是在下采样层的所有后续尺度上进行的,这使得它成为一个多尺度输入、多尺度输出(MS-I/O)的判别器。

实验结果

在论文中,作者记录了五个不同的实验。

在第一个实验中,他们通过逐个纳入每个技术组件来展示所提方法的有效性。

在第二个实验中,他们测试了模型文生图的能力,结果显示,GigaGAN 表现出与 Stable Diffusion(SD-v1.5)相当的 FID,同时产生的结果比扩散或自回归模型快得多。

在第三个实验中,他们将 GigaGAN 与基于蒸馏的扩散模型进行比较,结果显示,GigaGAN 能比基于蒸馏的扩散模型更快地合成更高质量的图像。

在第四个实验中,他们验证了 GigaGAN 的上采样器在有条件和无条件的超分辨率任务中相比其他上采样器的优势。

最后,他们展示了自己提出的大规模 GAN 模型仍然享受 GAN 的连续和解纠缠的潜在空间操作,从而实现了新的图像编辑模式。图表请参见上文中的图 6 和图 8。


有关GAN的反击:朱俊彦CVPR新作GigaGAN,出图速度秒杀Stable Diffusion的更多相关文章

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

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

  2. 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.但是执行时间完全是垃圾!每周计算大约需要四秒钟。我在这段代码中是否遗漏了一些奇怪的低效

  3. 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。例如

  4. 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{|

  5. 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)个文章回调引起的,但我可以跳过这些(因为我唯一需要测试的是文章和不是关联的模型

  6. ruby-on-rails - 测试速度 : ActiveRecord use_transactional_fixtures vs. DatabaseCleaner.strategy = :transaction - 2

    从来源(database_cleaner,active_record)来看,它们应该同样快。但是有人声称使用database_cleaner的事务策略会降低Controller和模型规范的速度(forexample)。我手头没有用于基准测试的大型测试套件。任何人有任何见解或比较两者? 最佳答案 我花了一点时间在广泛使用ActiveRecord固定装置的中型代码库上比较两者。当我将其切换为使用DatabaseCleaner而不是use_transactional_fixtures时,模型规范开始花费大约两倍的时间。在进行了与您相同的比

  7. AiBote 2022 新研发的自动化框架,支持 Android 和 Windows 系统。速度非常快 - 2

    Ai-Bot基于流行的Node.js和JavaScript语言的一款新自动化框架,支持Windows和Android自动化。1、Windowsxpath元素定位算法支持支持Windows应用、.NET、WPF、Qt、Java和Electron客户端程序和ie、edgechrome浏览器2、Android支持原生APP和H5界面,元素定位速度是appium十倍,无线远程自动化操作多台安卓设备3、基于opencv图色算法,支持找图和多点找色,1080*2340全分辨率找图50MS以内4、内置免费OCR人工智能技术,无限制获取图片文字和找字功能。5、框架协议开源,除官方node.jsSDK外,用户可

  8. ruby - 为什么某些 Ruby 代码在 2.53GHz 上的运行速度是在 2.2GHz Core 2 Duo 处理器上的两倍? - 2

    (本题试图找出为什么一个程序在不同的处理器上运行会有所不同,所以它与编程的性能方面有关。)以下程序在配备2.2GHzCore2Duo的Macbook上运行需要3.6秒,在配备2.53GHzCore2Duo的MacbookPro上运行需要1.8秒。这是为什么?这有点奇怪……当CPU的时钟速度仅快15%时,为什么要加倍速度?我仔细检查了CPU仪表,以确保2个内核中没有一个处于100%使用率(以便查看CPU是否忙于运行其他东西)。难道是因为一个是MacOSXLeopard,一个是MacOSXSnowLeopard(64位)?两者都运行Ruby1.9.2。pRUBY_VERSIONpRUBY_

  9. ruby-on-rails - 编辑文本时 Rails 控制台运行速度异常缓慢 - 2

    在我的一个Rails应用程序中,当我粘贴文本、键入和(尤其是)删除文本时,控制台开始运行得非常慢。我可以在顶部看到irb正在使用大量cpu。但我不知道如何进一步诊断这个问题。它是几周前才开始发生的。我想知道它是否可能与readline/wirble相关?这两个我都用。我刚刚在另一个应用程序中尝试了它,粘贴了一段文本,它看起来同样糟糕-文本以每秒一个字符的速度出现!也许我的命令行历史已经填满了?我怎样才能删除它?(对于Rails控制台,不是我的bash命令行历史记录)感谢任何建议-max编辑-抱歉,应该提供一些系统详细信息。给你:System-Ubuntu10.04Rubyversion

  10. ruby - 如何以较低的速度运行 Selenium(通过 Capybara 使用)? - 2

    默认情况下,Selenium在我使用Cucumber定义的场景中尽可能快地运行。我想将它设置为以较低的速度运行,这样我就可以拍摄该过程的视频。我发现Selenium::Client::Driver的一个实例有一个set_speed方法。对应于JavaAPI.如何获取Selenium::Client::Driver类的实例?我可以得到page.driver,但它返回Capybara::Driver::Selenium的实例。 最佳答案 感谢http://groups.google.com/group/ruby-capybara/msg

随机推荐