Lumina-T2X:大型扩散DiTs在多模态内容生成中的新篇章

论文地址:https://arxiv.org/pdf/2405.05945
代码地址:https://github.com/Alpha-VLLM/Lumina-T2X
论文标题:Lumina-T2X: Transforming Text into Any Modality, Resolution, and Duration via Flow-based Large Diffusion Transformers

一、摘要总结:

        Lumina-T2X是由上海人工智能实验室开发的一系列基于流匹配的大型扩散变换器(Flag-DiT),旨在将文本指令转换为图像、视频、多视图3D对象和音频剪辑。该框架通过将潜在的空间时间空间标记化,并整合可学习的占位符(例如[nextline]和[nextframe]标记),实现了不同模态在各种空间时间分辨率上的统一表示。Lumina-T2X支持在训练过程中使用单一框架进行不同模态的训练,并在推理过程中灵活生成任何分辨率、纵横比和长度的多模态数据。该模型采用了DiTs、流匹配、RoPE、RMSNorm等先进技术,增强了Flag-DiT的稳定性、灵活性和可扩展性,支持高达70亿参数的模型,并能够扩展到128K标记的上下文窗口。特别是,Lumina-T2I模型利用5亿参数的Flag-DiT,在训练计算成本上仅为600万参数的朴素DiT(PixArt-α)的35%。

二、网络结构:

本文提出的Lumina-T2X框架的细节网络结构主要围绕Flow-based Large Diffusion Transformers(Flag-DiT)展开,以下是关键的网络结构细节:

  1. Flag-DiT架构:Flag-DiT是Lumina-T2X的核心,它采用了灵感来自大型语言模型(LLMs)的设计原则,如可扩展架构和上下文窗口扩展,以增加参数大小和序列长度。

  2. RoPE (Rotary Position Embedding):RoPE是一种位置嵌入,用于在自注意力操作中编码相对位置信息。它提供了平移不变性,增强了模型对上下文窗口的扩展潜力。

  3. RMSNorm:Flag-DiT使用RMSNorm代替传统的LayerNorm,以提高训练稳定性。

  4. KQ-Norm:在关键查询(Key-Query)点积注意力计算之前引入KQ-Norm,以防止注意力logits中的极值导致损失发散。

  5. 零初始化注意力 (Zero-initialized Attention):Flag-DiT采用零初始化的门控机制,逐步将条件信息注入到标记序列中。

  6. 流匹配 (Flow Matching):Flag-DiT从DiT的DDPM设置转换为流匹配公式,提供了另一种灵活性。流匹配通过线性插值在噪声和数据之间建立连续时间扩散路径。

  7. 特殊标记:Lumina-T2X引入了可学习的占位符,如[nextline]和[nextframe]标记,这些标记能够将不同尺度和时长的训练样本转换为统一的一维序列。

  8. 文本编码:Lumina-T2X使用预训练的语言模型作为文本编码器,支持多种不同大小和优化各种需求及模态的文本编码器。

  9. 输入和目标构建:在训练期间,将潜在帧展平为一维序列,并添加[nextline]和[nextframe]标记作为标识。

  10. 网络架构和损失:使用Flag-DiT作为去噪主干,通过预测速度场来回归目标速度,使用条件流匹配损失函数来计算损失。

  11. 多模态支持:Lumina-T2X框架通过统一的框架支持不同模态(如图像、视频、3D对象视图和语音)的生成。

  12. 高级应用:Lumina-T2I支持高级视觉创作,包括分辨率外推、风格一致生成、高分辨率图像编辑和组合生成。

其在文生图,具备以下特点:

高分辨率扩展:

风格一致性:

组合生成:

高分辨率编辑:

三、实验结果:

a.)总体指标:

除此之外,Lumina还有T2V、T2MV、T2Speech等工作,详见论文。

b.)Ablation Study:

  • 10
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要定制 Android 系统 USB 鼠标右键的功能,您可以使用 Android 系统提供的 InputDevice 和 MotionEvent 类来监听 USB 鼠标的输入事件,并在接收到鼠标右键按下的事件时,执行您需要的操作。 具体地,您可以通过以下步骤来完成这个任务: 1. 在您的应用程序,使用 InputDevice.getDevice() 方法获取 USB 鼠标的输入设备信息。 ``` InputDevice device = InputDevice.getDevice(event.getDeviceId()); ``` 2. 使用 InputDevice.getSources() 方法获取输入设备的类型,判断是否为鼠标设备。 ``` int source = device.getSources(); if ((source & InputDevice.SOURCE_MOUSE) == InputDevice.SOURCE_MOUSE) { // 处理鼠标事件 } ``` 3. 在处理鼠标事件的方法,使用 MotionEvent.getAction() 方法获取事件的动作类型,并判断是否为鼠标右键按下的事件。 ``` int action = event.getAction(); if (action == MotionEvent.ACTION_DOWN && event.getButtonState() == MotionEvent.BUTTON_SECONDARY) { // 处理鼠标右键按下事件 } ``` 4. 在鼠标右键按下事件,执行您需要的操作。例如,您可以弹出一个菜单,或者执行一些特定的操作。 ``` if (action == MotionEvent.ACTION_DOWN && event.getButtonState() == MotionEvent.BUTTON_SECONDARY) { // 执行您需要的操作 } ``` 需要注意的是,USB 鼠标的输入事件可能会与触摸屏幕的事件冲突。您可以通过使用 InputDevice.getSources() 方法获取输入设备的类型,来区分不同的输入设备,并选择性地处理输入事件。此外,您还需要为您的应用程序添加权限,以便访问系统的输入设备。例如,您需要添加以下权限: ``` <uses-permission android:name="android.permission.INJECT_EVENTS" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> ``` 希望这些信息能帮助您完成您的任务。如果您有其他问题,请继续问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI记忆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值