草庐IT

图像生成终结扩散模型,OpenAI「一致性模型」加冕!GAN的速度一步生图,高达18FPS

新智元 2023-05-10 原文

ChatGPT、Midjourney的火爆,让其背后技术扩散模型成为「生成式AI」革命的基础。

甚至,还受到业内研究者极力追捧,其风头远远盖过曾经逆袭天下的GAN。

就在扩散模型最能打的时候,竟有网友突然高调宣布:

Diffusion models时代终结!Consistency models加冕为王!

这究竟是怎么回事???

原来,OpenAI曾在3月发布了一篇重磅、且含金量十足的论文「Consistency Models」,并在今天在GitHub上公开了模型权重。

论文地址:https://arxiv.org/abs/2303.01469

项目地址:https://github.com/openai/consistency_models

「一致性模型」在训练速度上颠覆了扩散模型,能够『一步生成』,比扩散模型更快一个数量级完成简单任务,而且用到的计算量还要少10-2000倍。

那么,这到底有多快呢?

有网友表示,相当于在大约3.5秒内生成64张分辨率为256x256的图像,也就是每秒18张

而且,最新模型最主要优势之一,就是不需要「对抗训练」就能实现高质量样本。

这篇研究由图灵三巨头之一Hinton学生,AlexNet的主要推动者Ilya Sutskever亲笔撰写,还有研发DALL-E 2的华人学者Mark Chen、Prafulla Dhariwal,研究内容有多硬核可想而知。

甚至还有网友称,「一致性模型」才是未来的研究方向,相信我们未来一定会嘲笑扩散模型。

所以,扩散模型也要不存在了?

更快,更强,无需对抗

目前,这篇论文还是未定稿版本,研究还在继续中。

2021年,OpenAI首席执行官Sam Altman曾撰写了一篇博客,讨论摩尔定律应该如何应用于所有领域。

Altman前段时间又在推特上公开谈到了人工智能正在实现「蛙跳」。他表示,「新版摩尔定律可能很快就会出现,宇宙中的智能数量每18个月翻一番。」

对于其他人来说,Altman的乐观可能看起来毫无根据。

但OpenAI的首席科学家Ilya Sutskever带领团队做出的最新研究,恰恰为Altman的主张提供了强有力的支撑。

都说2022年是AIGC元年,是因为许多模型的泉涌背后都是基于扩散模型。

扩散模型的大红大紫逐渐取代了GAN,并成为当前业界最有效的图像生成模型,就比如DALL.E 2、谷歌Imagen都是扩散模型。

然而,最新提出的「一致性模型」已被证明可以在更短的时间内,输出与扩散模型相同质量的内容。

这是因为,这种「一致性模型」采用了类似GAN的单步生成的过程。

相比之下,扩散模型采用了一种反复采样的过程,逐步消除图像中的噪声。

这种方法虽然让人印象深刻,但需要依赖执行一百到数千步的步骤才能取得良好的结果,不仅操作成本高,而且速度慢。

扩散模型的持续迭代生成过程,比「一致性模型」消耗的计算量要多10-2000倍,甚至减慢了训练过程中的推理速度。

「一致性模型」强大之处在于,必要时能够在样本质量和计算资源两者间进行权衡。

此外,这个模型还能够执行零样本的数据编辑任务,比如图像修补,着色或笔触引导的图像编辑。

使用在LSUN Bedroom 256^256上通过蒸馏训练的一致性模型进行零样本图像编辑

「一致性模型」还能在使用数学方程时将数据转换成噪声,并确保结果输出对于相似数据点是一致的,从而实现它们之间的平滑过渡。

这类方程称为「概率流常微分方程」(Probability Flow ODE)。

这项研究将这类模型命名为「一致性」,因为它们在输入数据和输出数据之间保持了这种自洽性。

这些模型既可以在蒸馏模式(distillation mode)下训练,也可以在分离模式(isolation mode)下训练。

在蒸馏模式中,模型能够从预训练的扩散模型中提取数据,使其能够在单个步骤中执行。

在分离模式下,模型完全不依赖于扩散模型,从而使其成为一种完全独立的模型。

值得注意的是,这两种训练方法都将「对抗训练」从中删除。

不得不承认,对抗训练确实会产生更强大的神经网络,但其过程是较为迂回。即它引入一组被错误分类的对抗性样本,然后用正确的标签重新训练目标神经网络。

因此,对抗训练这种方式也会导致深度学习模型预测的准确性略有下降,甚至它可能在机器人应用中带来意想不到的副作用。

实验结果表明,用于训练「一致性模型」的蒸馏技术优于用于扩散模型的。

「一致性模型」在 CIFAR10图像集和 ImageNet 64x64数据集上,分别获得了3.55和6.20的最新最先进的FID分数。

这简直就是实现了,扩散模型的质量 + GAN的速度,双重完美。

2月份,Sutskever曾发布了一条推文暗示,

许多人认为伟大的AI进步必须包含一个新的「想法」。但事实并非如此:许多AI的最伟大进步都是以这样的形式出现的,嗯,原来这个熟悉的不起眼的想法,如果做得好,会变得令人难以置信。

最新研究正好证明了这一点,基于旧概念的微调可以改变一切。

作者介绍

作为OpenAI的联合创始人兼首席科学家,Ilya Sutskever无须赘述,看看这张「顶级扛把子」大合照就够了。

(图片最右)

Yang Song(宋飏)

论文一作宋飏,是OpenAI的研究科学家。

此前,他在清华大学获得数学和物理学学士学位,并在斯坦福大学获得了计算机科学硕士和博士学位。此外,他还在谷歌大脑、Uber ATG和微软研究院做过实习。

作为一名机器学习的研究人员,他专注于开发可扩展的方法来建模、分析和生成复杂的高维数据。他的兴趣横跨多个领域,包括生成建模、表征学习、概率推理、人工智能安全和AI for science。

Mark Chen

Mark Chen是OpenAI多模态和前沿研究部门的负责人,同时也是美国计算机奥林匹克队的教练。

此前,他在麻省理工学院获得了数学与计算机科学学士学位,并曾在几家自营交易公司(包括Jane Street Capital)担任量化交易员。

加入OpenAI后,他带领团队开发了DALL-E 2,并将视觉引入到GPT-4中。此外,他还领导了Codex的开发,参与了GPT-3项目,并创建了Image GPT。

Prafulla Dhariwal

Prafulla Dhariwal是OpenAI的一名研究科学家,从事生成模型和无监督学习。在此之前,他是麻省理工学院的一名本科生,学习计算机、数学和物理学。

有趣的是,扩散模型可以在图像生成领域吊打GAN,正是他在2021年的NeurIPS论文中提出的。

网友:终于做了回Open AI

OpenAI今天开放了一致性模型源代码。

终于做回了Open AI。

面对每天太多疯狂突破和宣布。网友发问:我们是稍作休息,还是加速前进?

与扩散模型相比,这将大大节约研究人员训练模型的节约成本。

还有网友给出了「一致性模型」的未来用例:实时编辑、NeRF渲染、实时游戏渲染。

目前倒是没有demo演示,但值得确定的能够实现图像生成的速度大幅提升总是赢家。

我们直接从拨号升级到宽带了。

脑机接口,外加几乎实时生成的超逼真图像。

有关图像生成终结扩散模型,OpenAI「一致性模型」加冕!GAN的速度一步生图,高达18FPS的更多相关文章

  1. ruby - i18n Assets 管理/翻译 UI - 2

    我正在使用i18n从头开始​​构建一个多语言网络应用程序,虽然我自己可以处理一大堆yml文件,但我说的语言(非常)有限,最终我想寻求外部帮助帮助。我想知道这里是否有人在使用UI插件/gem(与django上的django-rosetta不同)来处理多个翻译器,其中一些翻译器不愿意或无法处理存储库中的100多个文件,处理语言数据。谢谢&问候,安德拉斯(如果您已经在ruby​​onrails-talk上遇到了这个问题,我们深表歉意) 最佳答案 有一个rails3branchofthetolkgem在github上。您可以通过在Gemfi

  2. ruby-on-rails - Rails - 子类化模型的设计模式是什么? - 2

    我有一个模型:classItem项目有一个属性“商店”基于存储的值,我希望Item对象对特定方法具有不同的行为。Rails中是否有针对此的通用设计模式?如果方法中没有大的if-else语句,这是如何干净利落地完成的? 最佳答案 通常通过Single-TableInheritance. 关于ruby-on-rails-Rails-子类化模型的设计模式是什么?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.co

  3. ruby-on-rails - Rails - 一个 View 中的多个模型 - 2

    我需要从一个View访问多个模型。以前,我的links_controller仅用于提供以不同方式排序的链接资源。现在我想包括一个部分(我假设)显示按分数排序的顶级用户(@users=User.all.sort_by(&:score))我知道我可以将此代码插入每个链接操作并从View访问它,但这似乎不是“ruby方式”,我将需要在不久的将来访问更多模型。这可能会变得很脏,是否有针对这种情况的任何技术?注意事项:我认为我的应用程序正朝着单一格式和动态页面内容的方向发展,本质上是一个典型的网络应用程序。我知道before_filter但考虑到我希望应用程序进入的方向,这似乎很麻烦。最终从任何

  4. ruby-on-rails - Rails 3 I18 : translation missing: da. datetime.distance_in_words.about_x_hours - 2

    我看到这个错误:translationmissing:da.datetime.distance_in_words.about_x_hours我的语言环境文件:http://pastie.org/2944890我的看法:我已将其添加到我的application.rb中:config.i18n.load_path+=Dir[Rails.root.join('my','locales','*.{rb,yml}').to_s]config.i18n.default_locale=:da如果我删除I18配置,帮助程序会处理英语。更新:我在config/enviorments/devolpment

  5. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  6. ruby-on-rails - 如何验证非模型(甚至非对象)字段 - 2

    我有一个表单,其中有很多字段取自数组(而不是模型或对象)。我如何验证这些字段的存在?solve_problem_pathdo|f|%>... 最佳答案 创建一个简单的类来包装请求参数并使用ActiveModel::Validations。#definedsomewhere,atthesimplest:require'ostruct'classSolvetrue#youcouldevencheckthesolutionwithavalidatorvalidatedoerrors.add(:base,"WRONG!!!")unlesss

  7. ruby-on-rails - form_for 中不在模型中的自定义字段 - 2

    我想向我的Controller传递一个参数,它是一个简单的复选框,但我不知道如何在模型的form_for中引入它,这是我的观点:{:id=>'go_finance'}do|f|%>Transferirde:para:Entrada:"input",:placeholder=>"Quantofoiganho?"%>Saída:"output",:placeholder=>"Quantofoigasto?"%>Nota:我想做一个额外的复选框,但我该怎么做,模型中没有一个对象,而是一个要检查的对象,以便在Controller中创建一个ifelse,如果没有检查,请帮助我,非常感谢,谢谢

  8. ruby-on-rails - 如何将验证与模型分开 - 2

    我有一些非常大的模型,我必须将它们迁移到最新版本的Rails。这些模型有相当多的验证(User有大约50个验证)。是否可以将所有这些验证移动到另一个文件中?说app/models/validations/user_validations.rb。如果可以,有人可以提供示例吗? 最佳答案 您可以为此使用关注点:#app/models/validations/user_validations.rbrequire'active_support/concern'moduleUserValidationsextendActiveSupport:

  9. ruby-on-rails - Rails 模型——非持久类成员或属性? - 2

    对于Rails模型,是否可以/建议让一个类的成员不持久保存到数据库中?我想将用户最后选择的类型存储在session变量中。由于我无法从我的模型中设置session变量,我想将值存储在一个“虚拟”类成员中,该成员只是将值传递回Controller。你能有这样的类(class)成员吗? 最佳答案 将非持久属性添加到Rails模型就像任何其他Ruby类一样:classUser扩展解释:在Ruby中,所有实例变量都是私有(private)的,不需要在赋值前定义。attr_accessor创建一个setter和getter方法:classUs

  10. ruby-on-rails - Rails - 从另一个模型中创建一个模型的实例 - 2

    我有一个正在构建的应用程序,我需要一个模型来创建另一个模型的实例。我希望每辆车都有4个轮胎。汽车模型classCar轮胎模型classTire但是,在make_tires内部有一个错误,如果我为Tire尝试它,则没有用于创建或新建的activerecord方法。当我检查轮胎时,它没有这些方法。我该如何补救?错误是这样的:未定义的方法'create'forActiveRecord::AttributeMethods::Serialization::Tire::Module我测试了两个环境:测试和开发,它们都因相同的错误而失败。 最佳答案

随机推荐