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