机器学习中的多模态领域近年来取得了显著进展。能够处理图像、音频或视频以及文本(语言)的模型显著增多,特别是在Transformer模型的帮助下。
我们对现在的多模态按照架构模式分为四类:A、B、C、D。A和B类型在模型内部层中深度融合多模态输入,可以实现细粒度控制模态信息流动,但需要大量训练数据和计算资源;C和D类型在输入层融合多模态输入,C类型具有模块化设计,可以容易地添加更多模态。D类型使用标记化,可以方便地训练不同模态,但需要训练通用标记器。
按照不同架构模式跟踪多模态发展,里程碑如下:
多模态发展里程碑
1、A型多模态模型
A类模型,即基于标准交叉注意力的深度融合(Standard Cross-Attention based Deep Fusion, SCDF)。
1.1 特点
- 内部层深度融合:该架构使用标准的Transformer模型,并在模型的内部层添加了标准的交叉注意力层,以实现输入多模态信息的深度融合。
- 不同模态输入编码:每个输入模态(图像、视频、音频等)都通过对应的编码器进行编码,然后将编码后的多模态特征输入到模型内部层。
- 跨模态特征融合:模型内部层通过标准的交叉注意力层对不同模态的特征进行融合,使模型能够同时处理多个模态的信息。
- 多模态解码器:通常采用只包含解码器的Transformer模型作为多模态解码器,用于生成多模态输出。
- 自回归生成:多模态解码器可以实现多模态输入的自回归生成,即生成多模态输出。
- 训练数据需求:需要大量多模态训练数据,计算资源需求较高。
- 添加模态困难:在模型内部层添加更多模态比较困难。
1.2 优势与不足
- A类型多模态模型具有多模态信息精细控制的优势。
- 计算资源需求较高,模型复杂,添加模态困难。
1.3 典型A类模型开源代码
- Flamingo
官方代码: https://github.com/flamingo-vl/flamingo
基于Transformer的多模态模型,可以处理图像和文本数据。
- OpenFlamingo
官方代码: https://github.com/openai/flamingo
开源的Flamingo模型的实现,提供了模型的复现。
- Otter
官方代码: https://github.com/microsoft/otter-generative
基于OpenFlamingo的多模态模型,可以处理图像和文本数据。
- MultiModal-GPT
官方代码: https://github.com/tuanvu2203/multimodal-gpt
基于OpenFlamingo的多模态模型,可以处理图像和文本数据。
- PaLI-X
官方代码: https://github.com/microsoft/PALI-X
多模态模型,可以处理图像、文本和视频数据。
- IDEFICS
官方代码: https://github.com/google/IDEFICS
开源的Flamingo模型的实现,提供了模型的复现。
- Dolphins
官方代码: https://github.com/microsoft/Dolphins
基于OpenFlamingo的多模态模型,用于自动驾驶场景。
2、B型多模态模型
B类模型,即基于定制层的深度融合(Custom Layer based Deep Fusion, CLDF),在多模态学习中以其定制化的层和深度融合策略而著称。
2.1 特点
- 使用自定义层进行模态融合:与A类型模型不同,B类型模型不使用标准的Transformer跨注意力层来融合多模态输入,而是采用自定义设计的层来进行模态间的融合。这些自定义层可以是自注意力层、卷积层、线性层等。
- 跨注意力层或自定义层的深度融合:多模态输入通过模态编码器进行处理,然后通过自定义层或跨注意力层与语言模型进行深度融合。这种深度融合有助于模态间的信息交互和共享。
- 解码器端多模态模型为主:通常包含一个预训练的语言模型,用于作为解码器。模态编码器处理不同模态的数据,然后通过自定义层或跨注意力层与解码器层进行融合,从而生成多模态的输出。
- 模态交互和共享机制:通过自定义层或跨注意力层实现模态间的交互和共享。这种机制有助于模型更好地理解多模态数据之间的关联性。
- 支持更多模态类型:自定义层设计可以支持更多类型的模态,包括图像、文本、音频、视频等。通过灵活的自定义层设计,模型可以适应不同的多模态任务需求。
- 训练数据和计算资源需求:训练需要大量的多模态数据和计算资源。自定义层的设计需要大量的实验和调参来优化模型性能。
- 可扩展性:自定义层设计具有一定的可扩展性,可以方便地添加新的模态类型。然而,模型的扩展性仍然有限,需要仔细设计自定义层以支持新的模态类型。
2.2 优势与不足
2.2.1 优势
- 细粒度模态控制:模型可以通过自适应注意力层或自适应模块更好地控制不同模态信息在模型中的流动,实现细粒度的模态融合。
- 灵活的架构设计:自适应注意力层或自适应模块可以根据不同的任务需求进行定制设计,提供更多的灵活性。
- 降低计算复杂度:相比Type-A,B类型模型不需对LLM内部层进行大规模的修改,计算复杂度较低。
- 可扩展性:模型支持增加新的模态,只需要在输入层添加新的自适应模块或注意力层即可。
2.2.2 不足
- 计算资源需求:虽然B类型模型计算复杂度较低,但相比C类型,训练和推理仍然需要较多的计算资源。
- 训练难度:自适应注意力层或自适应模块的设计和训练需要较深的神经网络知识,对研究者有一定挑战。
- 模态融合控制:虽然提供了细粒度的模态控制,但过多控制可能导致模态信息的过度融合或不融合,需要仔细设计。
- 参数数量:添加自适应注意力层或自适应模块会增加模型参数数量,增加计算和存储需求。
- 性能:相比C类型,B类型模型的性能可能略低,因为模型设计更为复杂,需要更多训练数据和计算资源。
2.3 典型B类模型开源代码
- LLaMA-Adapter
官方代码:https://github.com/microsoft/llama-adapter
采用自适应注意力层进行模态融合,适用于文本和图像输入,并输出文本。
- LLaMA-Adapter-V2
官方代码:https://arxiv.org/abs/2304.15010
在LLaMA-Adapter基础上增加了视觉指令模型,使用自适应注意力层进行模态融合,适用于文本和图像输入,并输出文本。
- CogVLM
官方代码:https://github.com/microsoft/cogvlm
在LLM的注意力层之前添加了自适应注意力层,用于学习图像特征,适用于图像和文本输入,并输出文本。
- mPLUG-Owl2
官方代码:https://github.com/microsoft/mplug-owl
在LLM的注意力层之前添加了自适应注意力层,称为“模式适应模块”,适用于图像和文本输入,并输出文本。
- CogAgent
官方代码:https://github.com/microsoft/cogagent
在LLM的注意力层之前添加了自适应注意力层,用于学习图像特征,适用于图像和文本输入,并输出文本。
- InternVL
官方代码:https://github.com/microsoft/internvl
包含视觉编码器、重采样器、LLM、特征同步器等,适用于图像和文本输入,并输出文本。
- MM-Interleaved
官方代码:https://github.com/microsoft/mm-interleaved
包含视觉编码器、重采样器、LLM、特征同步器等,适用于图像和文本输入,并输出图像和文本。
- CogCoM
官方代码:https://github.com/microsoft/cogcom
包含视觉编码器、重采样器、LLM、特征同步器等,适用于图像和文本输入,并输出图像和文本。
- InternLM-XComposer2
官方代码:https://github.com/microsoft/internlm-xcomposer
添加了LoRA权重来学习图像模态,适用于图像和文本输入,并输出文本。
- MoE-LLaVA
官方代码:https://github.com/microsoft/moe-llava
在LLaVA的基础上修改了每个解码器层的FFN层,创建了混合专家层,适用于图像和文本输入,并输出文本。
3、C型多模态模型
C类模型,即非标记化早期融合(NTEF)架构,在多模态学习领域中以其模块化和灵活性而著称。
3.1 特点
- 早期融合:与深度融合模型(A类和B类)不同,C类模型在模型的输入阶段就实现了模态的融合,而不是在模型的内部层中。
- 非标记化输入:直接将不同模态的输入提供给模型,而不需要将输入转换为离散的标记(tokens)。这意味着模型在处理输入时不需要进行复杂的分词处理。
- 模块化设计:具有模块化架构,将不同模态的编码器输出与语言模型(LLM)或变换器模型直接连接起来,无需在模型内部层进行模态融合。可以轻松替换或更新模型的不同部分,如编码器或连接层,而不影响整个系统的其他部分。
- 简化的集成:由于其模块化的特性,可以更容易地集成新的模态或更新现有模态的处理方式。
- 端到端可训练:尽管在输入阶段融合模态,但它们仍然可以端到端地进行训练。
- 资源效率:与其他类型的多模态模型相比,C类模型通常需要较少的训练数据和计算资源。
- 连接器/适配器的使用:使用不同类型的连接器或适配器来链接模态编码器和语言模型(LLM)。这些连接器可以是线性层、多层感知器(MLP)、Q-former、注意力池化层、卷积层、Perceiver resampler或Q-former的变体。
- 训练策略:通常采用预训练、指令调整和对齐调整的三阶段训练策略。预训练阶段主要目的是对齐不同模态并学习多模态世界知识;指令调整用于提高模型对用户指令的理解能力;对齐调整则进一步优化模型以适应人类交互。
- 易于扩展:由于其设计,可以较容易地扩展以包含更多的模态,这使得它们在构建任何到任何的多模态模型时非常有用。
3.2 优势与不足
3.2.1 优势
- 简单高效:不需要在模型内部层进行模态融合,因此其设计较为简单,易于实现和训练。此外,模型的模块化设计也使得其在计算资源需求上相对较低。
- 多模态输入输出:可以接受多种模态(如图像、文本、音频等)作为输入,并生成相应的多模态输出。模型的输入端可以根据需要连接不同的模态编码器,例如图像编码器、文本编码器等。
- 适应性强:模块化设计使得其具有较强的适应性,可以轻松地集成新的模态或修改现有的模态编码器,以满足不同任务的需求。
- 通用性强:通用性较强,可以应用于多种多模态任务,如多模态文本生成、多模态对话、多模态理解等。
3.2.2 不足
- 模态信息处理:C类型模型在模态信息的处理上相对简单,可能无法充分挖掘不同模态之间的潜在联系。
- 性能限制:C类型模型的性能可能略低于Type-A和Type-B,因为模型的设计更为复杂,需要更多训练数据和计算资源。
- 模态编码器设计:C类型模型的性能在很大程度上取决于模态编码器的性能,因此需要设计高效的模态编码器。
- 模态融合控制:C类型模型在模态融合的控制上较为困难,需要仔细设计连接模块,以确保不同模态信息的有效融合。
3.3 典型C类模型开源代码
- BLIP-2
官方代码: BLIP-2 GitHub
使用一个名为Q-Former的模块来同时处理图像和文本输入。
- MiniGPT-4
官方代码: MiniGPT-4 GitHub
一个大规模的、可微调的多模态语言模型,它通过设计一个连接模块来连接图像编码器输出和语言模型。
- LLaVA
官方代码: LLaVA GitHub
一个基于指令微调的、可以处理多模态输入和输出的语言模型。它使用一个线性层来连接图像编码器输出和语言模型。
4、D型多模态模型
D类模型,也称为Tokenized Early Fusion (TEF),其架构特点主要围绕使用分词器(tokenizer)来处理和融合多模态输入。
4.1 特点
- 输入分词化:使用通用分词器或模态特定的分词器将多模态输入(如图像、视频、音频)转换为离散的标记(tokens)。
- 早期融合:与C类模型类似,D类模型也在输入阶段实现模态融合,但不同之处在于D类模型通过分词化实现这一融合。
- 统一的Transformer架构:通常采用预训练的大型语言模型(LLM)或编码器-解码器(encoder-decoder)风格的Transformer模型来处理分词化后的输入,并生成多模态输出。
- 端到端可训练:D类模型是端到端可训练的,这意味着从输入分词化到输出生成的整个过程可以在一个统一的框架内进行训练。
- 自动回归目标:由于输入和输出都被分词化,可以使用标准的自动回归目标函数来训练模型,这简化了训练过程。
- 处理多种模态:用于处理包括文本在内的多种模态,使其能够生成图像、音频和不同模态的tokens。
- 灵活性和扩展性:通过分词化,可以相对容易地适应新的模态,尽管为新模态训练或调整分词器可能是一项挑战。
- 大规模训练数据需求:通常需要大量的训练数据来训练分词器和主Transformer模型,这可能导致计算资源的大量需求。
- 可训练参数数量大:由于模型需要学习将不同模态的输入映射到统一的标记空间,D类模型往往具有大量的可训练参数。
- 适用于任何到任何的多模态任务:D类模型由于其设计,非常适合构建能够处理任何输入模态到任何输出模态的多模态模型。
4.2 优势与不足
4.2.1 优势
- 标准化训练目标:由于模态都被标记化,模型可以使用标准的自回归目标函数进行训练,这简化了训练过程。
- 模态扩展性:新的模态可以通过训练一个新的标记化器来添加到模型中,这种灵活性使得模型能够扩展到新的模态。
- 模态通用性:标记化的模态表示可以用于多种下游任务,包括文本生成、图像生成、文本到图像的生成等。
4.2.2 不足
- 标记化复杂性:训练一个通用的标记化器或模态特定的标记化器可能是一个挑战。
- 计算资源需求:标记化和去标记化过程增加了计算复杂性,可能需要额外的计算资源。
- 模态信息的损失:标记化可能会丢失一些模态的原始信息,这可能导致模型性能的下降。
- 模态独立性:标记化可能导致模型在学习模态间交互时遇到困难,因为标记化表示可能掩盖了模态间的依赖关系。
4.3 典型D类模型开源代码
- Unified-IO
官方代码: Unified-IO GitHub
一个多模态预训练模型,它使用VQ-GAN风格的标记化器来处理不同模态的输入,并使用投影层将非文本模态的输出嵌入映射到文本模态的词汇空间。
- Unified-IO-2
官方代码: Unified-IO-2 GitHub
Unified-IO的升级版,它包含了更多的模态和更复杂的预训练任务。
- 4M
官方代码: 4M GitHub
一个可以处理文本、RGB图像、深度、法线和语义分割映射等多模态输入的模型。它使用多模态混合去噪器(Multimodal Mixture of Denoisers)作为预训练目标。
标签:模态,架构,演进,训练,模型,融合,文本,输入 From: https://blog.csdn.net/robinfang2019/article/details/139322252