计算机视觉领域的基础模型

时间:2024-07-12 17:34:33

参考:计算机视觉领域的基础模型 (qq.com)

注意:本文只做笔记,不做搬运

将CV(Computer Vision)分为四类:

  1. 传统模型:只有图像输入,使用Transformer架构和自监督学习方法。
  2. 文本提示模型/视觉语言模型(VLMs):接受图像和文本输入,如OpenAI的CLIP和Flamingo模型。
  3. 视觉提示模型:需要图像和视觉提示(如边界框或点)或文本提示,例如Segment Anything Model(SAM)。
  4. 异构模型:可以接受多种类型输入并生成多种类型输出的模型。

传统模型

 传统模型只有图像输入,用于分类、目标检测和分割任务。

发展流程如下:

 视觉语言模型(VLMs)

接受图像和文本输入,但由文本输入提示 。这些文本提示的模型根据其训练目标大致分为三种主要类型:对比、生成和混合方法。

有两个里程碑式的模型是OpenAI的CLIP模型和Flamingo模型。尽管CLIP类型的模型缺乏生成语言的能力,但它最终成为计算机视觉模型中广泛使用的组件。随后,Flamingo模型为包括大型语言模型(LLM)在内的模型奠定了基础,后者称为生成型VLMs。

2.1 对比学习

对比学习旨在通过学习图像和文本之间的对齐表示,来训练通用的视觉语言基础模型。这些模型能够在不同的下游任务中展示出良好的泛化能力。

CLIP(Contrastive Language Image Pre-training)对比语言-图像预训练是对比学习方法中的一个里程碑,它通过大规模的图像和文本配对数据进行训练。

CLIP的对比预训练,使得图像和文本映射到了共享的特征空间

 

该模型的核心思想是通过海量的弱监督图片文本对通过对比学习,将图像和文本通过各自的与训练模型来获得编码向量在向量空间上的对齐。CLIP模型有两个模态,一个是文本模态,一个是视觉模态,包括两个主要部分:

  1. Text Encoder:用于将文本转换为低维向量表示-Embeding,例如Bert。
  2. Image Encoder:用于将图像转换为类似的向量表示-Embedding,例如ViT。

具体来说,OpenAI搜集了四亿张图片文本对,这些图片和文本是两两对应的。将三万对放入编码器部分,分别生成N个文本向量和图片向量,再两两进行相乘,得到N*N大小的矩阵,进行归一化,则矩阵可表征为两两的相似度,类似于余弦相似度\frac{A*B}{|A||B|},使对角线上全是正样本,其他的全是负样本。初始化一个标签矩阵,对角线全为1,其他全为0。两个矩阵反正传播以训练编码器,使得两个编码器编码出来的向量进行对齐。

预测:CLIP模型通过计算文本和图像向量之间的相似度来生成预测。

具体来说,输入一个照片,输入N个文本数据库,分别输入编码器,得到编码向量,然后一一进行相似度计算,相似度最高的即为需要匹配的文本。

CLIP模型在多个领域表现出色,如图像文本检索、图文生成等

其中一个最新利用CLIP的模型是RAM,即识别任意物体模型(Recognize Anything Model)。它的目标是图像分类,即为一张图像预测多个标签。在识别方面,RAM超越了早期的模型,但它并不能在图像中进行定位。然而,它可以与我们稍后会提到的SAM完美配对。

2.2 Open-Set 目标检测/分割

是一种特殊的计算机视觉任务,它涉及到理解和定位图像中与自然语言描述相关联的对象。这种任务要求模型不仅要识别图像中的对象,还要理解描述这些对象的文本表达,并准确地分割或检测出相应的对象。

开发一个强大的系统来检测由人类语言输入指定的任意对象(训练集中有或者没有),我们称之为开放集对象检测

这里提到的闭集对象检测与开放集对象检测相反,类别在训练和测试时都是已知的。而另外一个概念参考对象检测,则是一项任务,这里模型会接收到一个自然语言描述或参考表达,然后基于此检测出对应的对象。

2.2.1 参考表达对象检测/分割

这种任务涉及模型接收一个自然语言描述或参考表达,并基于此描述来检测或分割出图像中对应的对象。

以Grounding DINO为例,通过将基于Transformer的检测器DINO与真值预训练相结合,该检测器可以通过人类输入(如类别名称或指代表达)对任意物体进行检测。

  • 1、图像及文本backbone分别提取原始图像及文本特征;
  • 2、特征强化模块用于跨模态特征融合;
  • 3、通过语言引导查询选择模块从图像特征中选择与文本对应的跨模态query;
  • 4、跨模态解码器从跨模态query中提取需要特征,更新query;
  • 5、输出query用于预测目标框及提取对应短语。

具体来说:

输入文本和图像

  • 文本骨干网络(Text Backbone):输入文本(例如,“cat”、“person”、“mouse”、“A cat sits on a table.”)经过文本骨干网络处理,生成初始文本特征。
  • 图像骨干网络(Image Backbone):输入图像(例如,一只猫的图像)经过图像骨干网络处理,生成初始图像特征。

特征增强层(Feature Enhancer Layer)

  • 自注意力(Self-Attention):在文本特征和图像特征上应用自注意力机制,捕捉内部依赖关系。
  • 跨注意力(Cross-Attention)
    • 文本到图像跨注意力(Text-to-Image Cross-Attention):通过关注图像特征来增强文本特征。
    • 图像到文本跨注意力(Image-to-Text Cross-Attention):通过关注文本特征来增强图像特征。
  • 前馈网络(FFN):将更新后的文本和图像特征输入前馈网络进行进一步增强。
  • 该层的输出是更新后的文本和图像特征。

语言引导查询选择(Language-guide Query Selection)

  • 基于更新后的文本特征生成跨模态查询,这些查询指导模型将文本与相关图像区域对齐。

跨模态解码器(Cross-Modality Decoder)

  • 输入跨模态查询、更新后的文本和图像特征。
  • 文本跨注意力(Text Cross-Attention):使用文本特征作为键和值,跨模态查询作为查询,聚焦于相关的文本特征。
  • 图像跨注意力(Image Cross-Attention):使用图像特征作为键和值,跨模态查询作为查询,聚焦于相关的图像特征。
  • 自注意力(Self-Attention):在跨模态查询上应用自注意力机制,捕捉内部依赖关系。
  • 前馈网络(FFN):将注意力机制的输出输入前馈网络。
  • 该层的输出是更新后的跨模态查询。

模型输出(Model Outputs)

  • 跨模态解码器的输出经过处理,生成最终的模型输出,包括物体定位和分类。
  • 对比损失(Contrastive Loss):通过对比正样本对(正确的文本-图像对)和负样本对,帮助模型学习更好的表示。
  • 定位损失(Localization Loss):帮助模型准确定位图像中的物体。

最先进的用于参考表达分割任务的模型是GRES。同时,他们还引入了一种新的广义参考表达分割任务,这种任务可以处理任意数量的目标对象。这意味着它不仅可以处理多目标,还可以处理没有明确目标的情况。 

 2.2.2 开放词汇对象检测/分割

允许模型识别和分割图像中的各种对象类别,即使这些类别在训练时没有出现过。

OVOD/OVS(开放词汇对象检测/分割)结合了零样本学习和开放集任务的挑战。“开放词汇”意味着对象类别可以扩展或不固定。虽然文本不是必须的输入,但可以选择加入自然语言描述或用户定义的类别。这使得OVOD能够在开放世界场景中检测各种对象。

  • 用于对象检测的参考模型是OWL-ViT (Minderer et al., 2022),采用基于CLIP的训练方法。
  • 对于分割任务,目前最先进的是OVSeg(Liang et al., 2023),它基于Mask-adapted CLIP,即使用遮罩输入训练的CLIP变体(参见(Awais 等人,2023)的图4)。
  • 另外,还有FC-CLIP,,用于开放词汇全景分割,结合了实例分割和语义分割。

以OWL-ViT为例:同时处理文本和图像信息,通过 Transformer 编码器将文本和图像映射到相同的嵌入空间,从而实现对象的检测和分类。采用CLIP的训练方法

文本 Transformer 编码器 (Text Transformer encoder)

  • 输入:描述图像中可能出现对象的标签,如“giraffe”(长颈鹿)、“tree”(树)、“car”(汽车)。
  • 输出:生成对应的查询嵌入(Query embeddings)。

视觉 Transformer 编码器 (Vision Transformer encoder)

  • 输入:待处理的图像。
  • 输出:生成图像的对象嵌入(Object image embeddings)。

线性投影层 (Linear projection)

  • 输入:视觉 Transformer 编码器生成的对象嵌入。
  • 输出:映射到一个新的空间,与查询嵌入进行匹配。

MLP 头 (MLP head)

  • 输入:线性投影后的对象嵌入。
  • 输出:预测图像中对象的边界框坐标 (x, y, w, h)。

预测结果

  • 类别预测:通过匹配查询嵌入和对象嵌入来预测图像中对象的类别。
  • 边界框预测:MLP 头输出对象的边界框坐标。

损失计算

  • 对图像中对象的类别和边界框进行预测损失计算。

 2.2.3 生成学习

结合了视觉和语言处理的能力,并能够生成语言描述或回答,而不仅仅是识别或分类图像。

核心功能:

  1. 图像理解:模型能够分析输入图像,识别其中的对象、场景和属性。
  2. 语言生成:基于对图像的理解,模型能够生成描述图像内容的自然语言文本。
  3. 交互能力:模型能够与用户进行交互,回答有关图像的问题或根据指令生成相关内容。

Flamingo为例:是DeepMind开发的一个强大的视觉语言模型,旨在处理多模态任务,即结合图像和文本信息来完成一系列复杂的任务。Flamingo主要应用于图像描述生成、视觉问答、多模态翻译等领域。

作者从互联网数据中收集了大量的图文交织(Image-Text Interleaving)数据,这为Flamingo提供few-shot、in-context能力提供了基础保障

具体流程: 

  • 输入图像:首先,模型接收两幅图像输入,每幅图像通过一个预训练且冻结的视觉编码器处理,提取特征表示。这些视觉编码器如图所示,以蓝色标记。

  • 感知器重采样器(Perceiver Resampler):从视觉编码器提取的特征被送入感知器重采样器模块,该模块从零开始训练(图中以紫色标记),进一步处理和压缩视觉特征。

  • 文本处理:文本输入(例如:“This is a very cute dog.”)在经过处理后,添加图像标签(例如:“<image> This is a very cute dog.<image>This is”),使得视觉和文本数据交错在一起,形成联合表示。

  • 视觉/文本数据融合:处理后的文本和视觉特征一起输入到语言模型(LM)块中,语言模型由多个块组成,每个块包含一个门控的自注意力-密集层(GATED XATTN-DENSE)。这些模块中有些是从零开始训练的(图中以紫色标记),有些是预训练且冻结的(图中以蓝色标记)。

  • 输出:经过多个语言模型块处理后,模型最终生成文本输出。

其中感知重采样器和门控注意力单元的结构如图所示,其中的视觉编码器采用NFNet,先在图文对数据上采用CLIP的方式对NFNet进行预训练,随后进行参数固定。 

门控注意力单元的设计,则是在原先固定的LLM结构的每一层基础上叠加了门控单元,门控单元由交叉注意力机制和门控结构、FFW交替组成,其中交叉注意力的k和v都是感知重采样器的输出,而q则是文本输入。为了保证在训练初始阶段模型和原先的LLM不至于偏差太远,作者采用了门控机制,具体来说就是将新层的输出乘上一个可学习的tanh(α),将LLM的原先输入与其加和,只需要在初始化时候将α=0即可确保初始化时候和原先LLM无太大偏差。作者对在训练过程中每一LM层的α变化进行了可视化,见图可发现两个规律,第一随着层数加深,门控值则更大,第二随着训练过程,门控值也逐渐变大,这个倒是符合我们的认识,浅层提取基础特征而深层则更加富有语义信息,因此在深层中的门控更大有利于引入更多的视觉语义信息。

视觉提示模型

这种类型的模型需要输入一张图像和(最好是)视觉提示(如边界框或点)或文本提示。大多数模型允许多种提示类型。输出根据模型的不同而变化,可以是语义分割掩码、实例分割掩码或一般的分割掩码(如SAM)。

3.1 零样本和少样本分割

CLIPSeg 是一个用于语义分割的模型,它使用提供的文本提示或原型图像来分割图像。它是为参考分割设计的,即根据文本提示或参考图像来分割图像。前者称为参考表达分割,后者称为参考图像分割。它在提供文本提示时执行零样本分割,在显示原型图像时执行一次分割。尽管新颖,但CLIP并非设计用于学习像素级信息,因为它专注于全局特征。

 SegGPT是一个统一解决多样化分割任务的模型,如语义分割、实例分割、部分分割,甚至特殊场景下的分割如航拍图像分割。它可以执行少样本分割,或使用上下文示例来提供掩码,基本上相当于一次分割。Roboflow上也有使用它的实际例子。

Segment Anything Model 基于点、边界框、掩码或文本输入输出分割掩码。SAM实际上执行交互式分割,返回一般的分割掩码;但如果选择好输入,你实际上可以进行语义和/或实例分割。交互式分割涉及用户根据边界框、点、涂鸦或其他提示来指导分割过程。与视觉提示相比,SAM在处理文本提示时的表现较弱。

SAM为例:

三个关键部分:

  • 任务:提示分割任务,其目标是在给定任何分割提示下返回一个有效的分割掩码,通用
  • 模型:一个强大的图像编码器计算图像嵌入,一个提示编码器嵌入提示,然后将两个信息源组合在一个轻量级掩码解码器中来预测分割掩码。
  • 训练数据:多样化、大规模训练数据,1100W张图片,10亿的Mask
  • 数据集引擎:交互式分割(训练一个粗糙版的模型,利用交互式进行人工修正,再次训练模型,如此模型会越来越好)、半自动分割(模型会自动分割出一些模型,但是会漏掉一些,人工修正之后再进行训练)、全自动分割(模型自动分割,对得分较高的进行保留)

Prompt Encoder: 

  • point和box可以作为一类实验position encoder(文本向量)
  • text可以使用CLIP作为encoder
  • mask是一种密集型的prompt,可以使用卷积作为encoder

Image Encoder:ViT(为什么不用CNN是因为最终要进行特征融合、多模态,就需要用transformer这样的通用模型)

Mask Encoder

  • output tokens:目标token
  • A to B attn:A做Q,B做K和V;结果是融合了B的A特征
  • masks:每个像素点属于分割目标的概率
  • IoU scores:分割出来的物体和目标物体的交集
  • 一个prompt,三个mask:主要解决物体之间相互覆盖的问题 

3.2 通用分割

通用分割是指能够适应各种类型的人工提示并处理不同分割任务的过程。在这个领域,有两个强大的模型:一个SEEM(Segment Everything Everywhere All at Once)提供了一个通用分割任务的界面,同时支持参考分割和交互式分割。另一个模型是Semantic-SAM,它的目标是在任何尺度上分割和识别任何对象。它提供了与SEEM类似的功能,此外还能输出多达6种不同粒度的分割掩码。这个模型首先通过再现SAM作为一个子任务,并在粒度丰富性、语义感知和质量方面超越了SAM,从而实现了通用分割。

SEEM为例:

提示

  • 文本提示:通过用户输入的文本生成掩模,进行一键分割
  • 图像提示:给一个香蕉的图,就能分割任何目标图像上的香蕉
  • 点击与涂鸦提示:SEEM通过对引用图像的简单点击,或涂鸦,就能够对目标图像上有相似语义的对象进行分割。
  • SEEM非常了解空间关系。左上行斑马被涂鸦后,也会分割出最左边的斑马。
在不提供提示的情况下,SEEM以开放集的方式支持通用分割任务(包括语义、实例和全景分割)。SEEM还可以灵活地组合使用视觉、文本和参考区域提示,使其成为一个提示和交互式分割界面。

SEEM有四个需求i) 多功能性。我们引入了一种新的视觉提示来统一不同的空间查询,包括点、框、涂鸦和掩码,可以进一步推广到不同的参考图像;

  • ii) 组合性。我们学习了文本和视觉提示之间的联合视觉语义空间,这有助于各种分割任务所需的两种提示类型的动态组合;
  • iii) 交互。我们进一步将可学习的记忆提示合并到解码器中,通过从解码器到图像特征的掩码引导交叉注意来保留分割历史;
  • iv) 语义感知。我们使用文本编码器将文本查询和掩码标签编码到相同的语义空间中以进行开放词汇分割。

模型框架

(a)左边是对该模型的概述。首先,特征 和 提示 由其相应的编码器或采样器编码到一个联合的视觉-语义空间。而可学习的查询则是随机初始化的。SEEM解码器将查询、特征和提示作为输入和输出,并将类和掩码嵌入用于掩码和语义预测。右边部分是SEEM解码器和视觉采样器的细节。

(b)显示了多轮的交互作用。每一轮都包含一个人的循环和一个模型循环。在人循环中,人接收最后一次迭代的掩模输出,并通过视觉提示对下一轮解码的正或负反馈。在模型循环中,模型接收并更新内存提示,以便进行未来的预测。

 

训练和评估期间的查询和提示交互。(a) 可学习的查询被复制为每个任务具有相同权重集的对象、基础和视觉查询。(b) 算法中的任何两种标记(表示为 qpm)之间的注意掩码。Tentative 表示交互没有经过训练,但无需任何修改即可进行推理。

3.3 Grounding SAM

在SAM发布后不久,它便与其他新型强大模型结合,以提供视觉定位功能。第一个版本将Grounding Dino与SAM连接起来,这样用户可以通过文本提示模型,基于Grounding Dino生成的边界框来分割所有对象。

 第二个版本是RAM-Grounded-SAM,通过在流程中预先添加RAM,不需要任何用户输入即可生成分割结果。

异构模型 

这一类别包含能够接受多种类型输入并生成多种类型输出的模型。它由三个子类别组成,即通用模型、多模态大语言模型(MLLMs,例如Image Bind)和具身模型。

4.1 通用模型

这类模型旨在解决比分割更广泛的视觉任务。它们在任务定义和输出方面有所不同。第一个是Painter,它执行从分割到去噪或图像增强等任务,其输入是一张图像以及另一张图像和该图像的“解决方案”,有效地实现了上下文视觉学习——类似于SegGPT,它实际上基于Painter。

接下来是Prismer,一个采用专家混合(MoE,即每个任务都有一个特定的基础模型)的方法来执行分割、OCR、边缘检测等任务,然后将这些作为输入传递给LLM的跨模态模块。这样,用户可以生成图像的描述或与输入图像进行对话。

最后一类模型使用大型语言模型(LLM)进行任务编排,即让LLM将任务分配给正确的视觉模型。示例包括VisionLLM 和微软的 TaskMatrix/VisualGPT。这类模型可以处理的任务范围比视觉语言模型(VLM)更广泛,但在视觉语言任务上的表现较差,因为在跨模态时信息会有所丢失。

4.2 多模态大语言模型(MLLM)

多模态大语言模型(MLLM)指的是那些至少接受三种不同模态作为输入的模型——文本、图像以及至少一种其他模态。有时,视觉语言模型(VLM)也被称为MLLM。在这方面,一个重要的模型是Meta的ImageBind 及其最近的继任者 AnyMAL。虽然ImageBind使用图像作为中心模态,AnyMAL则将文本作为中心模态,并采用类似于LLAVA的架构,AnyMAL的输出是文本。

ImageBind结合了7种模态,并以图像作为中心模态

多模态能力被NexT-GPT进一步提升,这个模型被描述为一种“任意到任意”的多模态大语言模型(Any-to-Any MLLM)。与AnyMAL一样,这些模态通过投影来连接;实际上,它在投影之前使用ImageBind作为输入端。这里有一个有趣的想法,即使用LLM的输出作为输入,传递给扩散模型以生成答案。

根据Next-GPT,输入和输出多种模态(来源)
MLLM的参考和定位能力

 4.3 具身模型

具身模型是指那些结合了感知、认知和行动能力的模型,它们可以模拟真实世界中的身体或代理(如机器人)与环境的交互。这些模型通常用于机器人学习、自主导航、交互式任务和其他需要模型理解并实时响应环境变化的应用。

PaLM-E(Palm with Embodied agents)是一个具身多模态语言模型,它可以将视觉和语言知识应用于具身推理,规划机器人在动态环境中的动作,并回答与可观察现实相关的问题。PaLM-E通过端到端训练,使用多模态句子,将来自各种模态的输入作为文本标记的补充。

此外,还讨论了其他类型的具身模型,如ViMA(Visual Multimodal Affordance Model),它展示了如何使用多模态提示来表达广泛的机器人操作任务,并通过多模态提示学习机器人操作。

具身模型是人工智能领域的一个活跃研究方向,它们的目标是创建能够自然地与环境交互并执行复杂任务的智能系统。