从OmniGen的训练数据、模型设计与训练策略中深度了解多模态统一生成模型。
今天详细讲讲多模态大模型OmniGen~之前有总结过一篇多模态大模型的研究趋势,
感兴趣的小伙伴也可以具体看一下这篇介绍多模态大模型的文。
OmniGen就属于统一视觉模型这个方向中,将多个特定任务转化为具备通用能力的图像生成统一模型;本篇来具体介绍OmniGen的细节,以及未来前瞻技术研究可能值得借鉴的部分。
下面是一个快捷目录。
一、OmniGen简介
二、X2I数据集
三、OmniGen模型设计
四、OmniGen训练策略
五、一些启发
一、OmniGen简介
OmniGen,是用于统一图像生成的新扩散模型,并且不需要额外的模块(如ControlNet或IP-Adapter)来处理多样化的控制条件。
2. 特点
另外,此模型也存在一些推理能力和链式思维机制的潜在应用,但这块不够成熟。
二、X2I数据集
OmniGen的训练数据集整个构造思路是非常值得借鉴的,个人感觉这块甚至比模型本身更有学习意义,所以放在前面说,整个X2I数据集包含大约1亿张图像。
输入为纯文本,输出为图像。
1)开源数据
开源数据包括Recap-DataComp(5600万张图像的子集)、SAM-LLaVA 、ShareGPT4V 、LAION-Aesthetic (万张图像的子集)、ALLaVA-4V 、DOCCI、DenseFusion 和 JourneyDB。
2)合成数据
合成数据主要使用InternVL2 为内部数据和LAION-Aesthetic创建合成注释。
3)数据使用技巧
在训练初期,主要使用“文本到图像”数据集来学习广泛的图像-文本匹配关系和多样化知识;经过第三阶段后,需要利用内部收集的1600万张高质量图像来提升生成图像的美学质量。
1)常见混合模态提示
任务类型包括图像编辑(SEED-Data-Edit 、MagicBrush 和 InstructPix2Pix )、人体运动(Something-Something )、虚拟试穿(HR-VITON 和 FashionTryon)和风格迁移(stylebooth )
数据构造形式:输入为任意交错的文本和图像,输出为符合文本和图像条件的新图像。
另外使用MultiGen数据集来学习利用额外的视觉条件进行细粒度空间控制,选择六种代表性视觉条件:Canny、HED、Depth、Skeleton、Bounding Box 和分割
数据构造形式:输入为文本提示和特定的视觉条件(如分割图和人体姿态图);输出为符合文本和图像条件的新图像。
2)主题驱动的图像生成
基于GRIT数据集中图像物体名称标注,应用Grounding DINO模型进行文本到边界框的对齐。基于边界框使用SAM分割裁剪后的图像,获得物体掩码。进一步使用MS-Diffusion模型重新绘制物体图像,提升数据质量。构造了600万对数据。
基于构造的GRIT-Entity数据集由于直接提取原始图像中的输入数据,导致模型陷入简单的复制粘贴模式。因此Web Images数据集使用知名人物的自然图像构建。
构建了包含533,000对图像的数据集。
输入是源图像和自然语言表达,输出是突出显示相应对象的图像。
这里的目的是为了增强模型的图像生成能力;把从传统计算机视觉任务中获得的知识转移到图像生成任务中,从而实现更复杂的图像生成能力。
低级任务包括低光图像增强、去雨、去模糊、修复、外推和着色,其中注释本身就是图像;并从GPT-4o生成的指令中随机抽取文本指令添加进去。
将所有注释表示为图像。
使用LAION作为源图像,并选取注释作为目标来构建图像对(如源图像及其人体姿态映射)。注释内容包括人体姿态、深度映射、Canny和分割。
此外引入图像分割的数据集,包括RefCOCO 、ADE20k 和ReasonSeg。
随机选择了一些示例,并将原始输入与这些示例结合形成新的输入。
三、OmniGen模型设计
1)通用性:接受任何形式的图像和文本输入以用于各种任务;
2) 简洁性,避免过于复杂的结构设计和众多的额外组件。
OmniGen的框架主要是VAE + 预训练大规模transformer。
输入文本被标记化为token,输入图像通过VAE转换为嵌入。OmniGen可以接受自由形式的多模态提示,并通过修正流方法生成图像。
这里用的架构是SDXL,在训练中会先冻结。
Stable Diffusion XL是一个二阶段的级联扩散模型,包括Base模型和Refiner模型:
SDXL和之前的版本也是基于latent diffusion架构,对于latent diffusion,首先会采用一个auto encoder模型来图像压缩为latent,然后扩散模型用来生成latent,生成的latent可以通过auto encoder的decoder来重建出图像。
2)Transformer
文中主要是基于Phi-3初始化。
Phi-3是微软研究院推出的一系列小型语言模型(SLM),包括phi-3-mini、phi-3-small和phi-3-medium三个不同规模的版本,分别适合不同的应用场景和需求。具体模型结构可以见下图。
图引用自“2024最新大模型详查之:微软Phi-3系列”(
模型的输入是自由形式的多模态交错文本和图像。
1)文本:
利用Phi-3的分词器处理文本,无需任何修改。
2)图像:
3)文本和图像拼接
在将每个图像序列插入到文本令牌序列之前,用两个特殊令牌:“<img>”和“<img>”封装,另外还在输入序列的末尾添加了时间步嵌入。
注意力机制这里,把图像应该作为一个整体来建模。
相对于LLM中的注意力机制,论文中修改了LLM中常见的因果注意力机制,对序列中的每个元素应用因果注意力,但在每个图像序列内部应用双向注意力。
目的是每个patch关注同一图像内的其他patch,同时确保每个图像只能关注之前出现过的其他图像或文本序列。
推理过程中,随机采样一个高斯噪声,然后应用流匹配方法来预测目标速度,通过多次迭代获得最终的潜在表示。
最后,使用VAE将潜在表示解码为预测图像。默认的推理步数设置为50。
另外,由于注意力机制的存在,OmniGen可以通过使用kv缓存像LLMs一样加速推理;存储输入的之前时间步和当前时间步的键值状态在GPU上来计算注意力机制,而不需要冗余计算。
四、OmniGen训练策略
使用修正流来优化模型的参数,流匹配通过在线性插值噪声和数据之间进行前向过程。在步骤t, xt 定义为
其中 x 是原始数据,ϵ∼N(0,1) 是高斯噪声。模型被训练以直接回归给定的噪声数据 xt 、时间步 t 和条件信息 c 的目标速度。具体而言,目标是最小化均方误差损失:
这里, vθ 表示模型预测的目标速度,θ 是模型参数。通过最小化上述损失函数,模型能够学习如何从噪声中恢复原始数据,进而实现图像生成任务。
这种修正流方法在处理复杂的多模态数据时提供了一种有效的方式来训练扩散模型,不仅提高了模型的效率,而且通过减少训练时间和资源消耗,使模型更加易于优化。
对于图像编辑任务,目标是在保持其他区域不变的同时修改输入图像的特定区域。
OmniGen会在图像发生变化的区域放大损失,来避免直接将输入图像复制为输出的情况,具体是根据输入图像 x′和目标图像 x的潜在表示来计算每个区域的损失权重:
在训练过程中需要逐渐增加图像分辨率。低分辨率在数据效率方面表现良好,而高分辨率可以提高生成图像的美学质量。
五、一些启发
1. 多模态模型中多任务数据非常重要
论文对比了跟SD3的效果,
这确实说明了多任务数据X2I在提升文本到图像能力方面的作用,以及多任务学习使模型能够展现出新兴能力。
2. 多模态统一模型已经具备In-context learning能力
当提供一个示例后,OmniGen能够做出准确的预测,这表明上下文学习可以增强模型在不同领域的泛化能力。因此也可以尝试用思维链来探索多模态统一大模型了。
3. 现阶段的多模态大模型还比较脆弱,针对这些点还有很大的探索和发论文的空间
主要体现在下面的点:
其实多模态大模型如何通过数据集、模型设计和训练策略来实现统一任务指令对齐这块还有很大的研究空间,OmniGen确实是个很值得参考和学习的例子;还有其他的一些可以发论文的思路大家也可以一起讨论~
参考文献:
[1]OmniGen: Unified Image Generation(
[2]
[3]