草庐IT

清华朱军团队开源首个基于Transformer的多模态扩散大模型,文图互生、改写全拿下

机器之心 2023-03-28 原文
据悉 GPT-4 将于本周发布,多模态将成为其一大亮点。当前的大语言模型正在成为理解各种模态的通用接口,能够根据不同模态信息来给出回复文本,但大语言模型生成的内容也仅仅局限于文本。另一方面,当前的扩散模型 DALL・E 2、Imagen、Stable Diffusion 等在视觉创作上掀起一场革命,但这些模型仅仅支持文到图的单一跨模态功能,离通用式生成模型还有一定距离。而多模态大模型将能够打通各种模态能力,实现任意模态之间转化,被认为是通用式生成模型的未来发展方向。

清华大学计算机系朱军教授带领的 TSAIL 团队近期公开的一篇论文《One Transformer Fits All Distributions in Multi-Modal Diffusion at Scale》,率先发布了对多模态生成式模型的一些探索工作,实现了任意模态之间的相互转化。


论文链接:https://ml.cs.tsinghua.edu.cn/diffusion/unidiffuser.pdf

开源代码:https://github.com/thu-ml/unidiffuser

该论文提出了一个为多模态设计的概率建模框架 UniDiffuser,并采用该团队提出的基于 transformer 的网络架构 U-ViT,在开源的大规模图文数据集 LAION-5B 上训练了一个十亿参数量的模型,使得一个底层模型能够高质量地完成多种生成任务(图 1)。简单来讲,除了单向的文生图,还能实现图生文、图文联合生成、无条件图文生成、图文改写等多种功能,大幅提升文图内容的生产效率,也进一步提升了生成式模型的应用想象力。

该论文一作鲍凡目前博士在读,是此前 Analytic-DPM 的提出者,凭借在扩散模型方面的优秀工作荣获 ICLR 2022 的 outstanding paper award(目前唯一一篇大陆单位独立完成的获奖论文)。

此外,机器之心之前还报道过 TSAIL 团队提出的 DPM-Solver 快速算法,目前仍是扩散模型最快的生成算法。多模态大模型正是该团队在深度概率模型的算法和原理方面上长期深入积累的一个集中展示。该工作的合作者包括人民大学高瓴人工智能学院的李崇轩、北京智源研究院的曹越等。

值得注意的是,该项目的论文和代码均已开源。

效果展示

如下的图 8 展示了 UniDiffuser 在图文联合生成的效果:

如下的图 9 展示了 UniDiffuser 在文到图上的效果:

如下的图 10 展示了 UniDiffuser 在图到文上的效果:

如下的图 11 展示了 UniDiffuser 在无条件图像生成上的效果:

如下的图 12 展示了 UniDiffuser 在图像改写上的效果:

如下的图 15 展示了 UniDiffuser 能够实现在图文两个模态之间的来回跳跃 :

如下图 16 展示了 UniDiffuser 能对真实的两张图像进行插值:

方法概览

研究团队将针对通用生成式模型的设计划分成了两个子问题:

  • 概率建模框架:是否能寻找到一个概率建模框架,能同时建模出模态之间所有的分布,例如图文之间的边缘分布、条件分布、联合分布等?
  • 网络架构:是否能设计出一个统一的网络架构,来支持各种不同模态的输入?
概率建模框架

针对概率建模框架,研究团队提出 UniDiffuser,一个基于扩散模型的概率建模框架。UniDiffuser 能够显示地建模多模态数据中包括边缘分布、条件分布、联合分布在内的所有分布。研究团队发现,关于不同分布的扩散模型学习都可以统一成一个视角:首先向两个模态的数据分别加入某种大小的噪声,然后再预测两个模态数据上的噪声。其中两个模态数据上的噪声大小决定了具体的分布。例如,将文本的噪声大小设置为 0,则对应了文生图的条件分布;将文本噪声大小设置为最大值,则对应了无条件图像生成的分布;将图文噪声大小设置为相同,则对应了图文的联合分布。根据该统一的视角,UniDiffuser 只需要将原始扩散模型的训练算法做少许的修改,便能同时学习上述的所有分布 — 如下图所示,UniDiffuser 同时向所有模态加噪而非单个模态,输入所有模态对应的噪声大小,以及预测所有模态上的噪声。

以双模态为例子,最终的训练目标函数如下所示:

其中

代表数据,

代表加入到两个模态中的标准高斯噪声,

代表两个模态加入噪声的大小(即时间),两者独立的从 {1,2,…,T} 中采样,

为噪声预测网络,同时预测两个模态上的噪声。

在训练后,通过向噪声预测网络设置两个模态合适的时间,UniDiffuser 能够实现无条件、条件以及联合生成。例如将文本的时间设置为 0,可以实现文到图生成;将文本的时间设置为最大值,可以实现无条件图像生成;将图文时间设置为相同值,可以实现图文联合生成。

下面罗列了 UniDiffuser 的训练和采样算法,可见这些算法相对原始的扩散模型均只做了微小的改动,易于实现。

此外,由于 UniDiffuser 同时建模了条件分布和无条件分布,因此 UniDiffuser 天然地支持 classifier-free guidance。下面的图 3 展示了 UniDiffuser 的条件生成和联合生成在不同的 guidance scale 下的效果:

网络架构

针对网络架构,研究团队提出使用基于 transformer 的架构来参数化噪声预测网络。具体地,研究团队采用了最近提出的 U-ViT 架构。U-ViT 将所有的输入都视作 token,并在 transformer 块之间加入了 U 型连接。研究团队也采用了 Stable Diffusion 的策略,将不同模态的数据都转换到了隐空间再进行扩散模型的建模。值得注意的是,U-ViT 架构同样来自该研究团队,并且已被开源在 https://github.com/baofff/U-ViT。

实验结果

UniDiffuser 首先和 Versatile Diffusion 进行了比较。Versatile Diffusion 是过去的一个基于多任务框架的多模态扩散模型。首先 UniDiffuser 和 Versatile Diffusion 进行了文到图上的效果比较。如下面的图 5 所示,在不同的 classifier-free guidance scale 下,UniDiffuser 在 CLIP Score 和 FID 指标上均要好于 Versatile Diffusion。

然后 UniDiffuser 和 Versatile Diffusion 进行了图到文上的效果比较。如下面的图 6 所示,UniDiffuser 在图到文上有更好的 CLIP Score。

UniDiffuser 也和专用的文到图模型在 MS-COCO 上进行了 zero-shot FID 的比较。如下面的表 1 所示,UniDiffuser 可以和专用的文到图模型取得可比的效果。

有关清华朱军团队开源首个基于Transformer的多模态扩散大模型,文图互生、改写全拿下的更多相关文章

  1. TimeSformer:抛弃CNN的Transformer视频理解框架 - 2

    Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图

  2. ruby-on-rails - Rabl 多模合集 - 2

    我正在使用RABL输出Sunspot/SOLR结果集,搜索结果对象由多种模型类型组成。目前在rablView中我有:objectfalsechild@search.results=>:resultsdoattribute:id,:resource,:upccodeattribute:display_description=>:descriptioncode:start_datedo|r|r.utc_start_date.to_iendcode:end_datedo|r|r.utc_end_date.to_iendendchild@search=>:statsdoattribute:to

  3. ruby-on-rails - 如何使用连接表制作多模型 tag_cloud? - 2

    我有一个连接表create_table"combine_tags",force:truedo|t|t.integer"user_id"t.integer"habit_id"t.integer"valuation_id"t.integer"goal_id"t.integer"quantified_id"end其目的是让tag_cloud为多个模型工作。我把它放在application_controllerdeftag_cloud@tags=CombineTag.tag_counts_on(:tags)end我的tag_cloud看起来像这样:css_class%>#orthisdepen

  4. 超分算法ESRT:Transformer for Single Image Super-Resolution - 2

    这篇文章网络结构ESRT(EfficientSuper-ResolutionTransformer)还是蛮复杂的,是一个CNN和Transformer结合的结构。文章提出了一个高效SRTransformer结构,是一个轻量级的Transformer。作者考虑到图像超分中一张图像内相似的细节部分可以作为参考补充,(类似于基于参考图像Ref的超分),于是引入了Transformer,可以在图像中建模一种长期依赖关系。而ViT这些方法计算量太大,太占内存,于是提出了这个轻量版的Transformer结构(ET)ET只使用了transformer中的encoder,并且作者还使用了featurespi

  5. ruby - Capybara 麻烦填写 JS 模态 - 2

    首先让我确认这不是重复的(因为那里发布的答案没有解决我的问题)。Thispost本质上是我的确切问题:Capybara无法在Stripe模式中找到表单字段来填写它们。这是我的capybara规范:describe'checkout',type::feature,js:truedoit'checksoutcorrectly'dovisit'/'page.shouldhave_content'Amount:$20.00'page.find('#button-two').click_button'PaywithCard'Capybara.within_frame'stripe_checkou

  6. transformer中QKV的通俗理解(剩女与备胎的故事) - 2

     用vit的时候读了一下transformer的思想,前几天面试结束之后发现对QKV又有点忘记了,写一篇文章来记录一下参考链接:哔哩哔哩:在线激情讲解transformer&Attention注意力机制(上)在线激情讲解transformer&Attention注意力机制(上)_哔哩哔哩_bilibiliAttentionisallyouneed介绍更具体的介绍可以去阅读论文在Attentionisallyouneed这篇文章中提出了著名的Transformer模型Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。更准确地讲,Transform

  7. javascript - 与用户操作交互的模态弹出窗口,如用户设置的最大化、最小化、关闭、调整大小和可拖动 - 2

    我需要与用户操作交互的模态弹出窗口,如下图所示。但是这个模态弹出窗口应该是纯java脚本。严禁使用JQuery或JQuery插件。期待您的来信。提前致谢。 最佳答案 这里我分享一些插件,基本上都是用Jquery和Javascript创建的。无论您在纯JavaScript中寻找什么,都可以使用http://alpha.jspanel.de/media/demos/nojquery/index.php另一个是使用Jquery创建的。是https://lobianijs.com/site/lobipanel#examples使用第一个选项

  8. javascript - 单击时使用纯 JavaScript 隐藏 Bootstrap 模态 - 2

    我正在研究BootstrapPopUpModals。我有2个按钮,分别名为Button1和Button2。&我有2个模态框,分别名为Modal1和Modal2。Note:Button2isinsidetheModal1&Button1isontheWebPage.如果我点击Button1,Modal1应该是打开的&如果我点击Button2是在Modal里面,那么Modal1应该会自动隐藏并且应该显示Modal2。我正在使用jQueryYet做这件事并且它工作正常。$('#button1').click(function(){$('#modal1').modal('hide');$('#

  9. javascript - 我怎样才能在 twitter bootstrap 中只显示一次模态? - 2

    这是我的代码:$(document).ready(function(){if($.cookie('msg')==0){$('#myModal').modal('show');$.cookie('msg',1);}});在页面加载时模型显示,但当我刷新时它一直显示它应该只显示一次。$.cookie来自https://github.com/carhartl/jquery-cookie更新:这有效:“隐藏”由于某种原因无效$(document).ready(function(){if($.cookie('msg')==null){$('#myModal').modal('show');$.c

  10. javascript - 如何获取模态框jquery UI的输入值 - 2

    {%csrf_token%}如何从以下位置获取EMAIL值:到:从这里开始:functionshowDialog(){$("#dialog-modal").dialog({});} 最佳答案 使用对话框打开时调用的对话框打开事件...所以替换那里的值..$("#dialog-modal").dialog({open:function(event,ui){varboxInput=$("#befor-box").find('input[name="email"]').val();//getthevalue..$("#dialog-mod

随机推荐