RAM(Recognize Anything Model)

发布时间 2023-07-20 23:24:52作者: 贝壳里的星海

Recognize Anything Model

摘要

我们提出了识别任何事物模型(RAM):一个强大的图像标记基础模型。RAM为计算机视觉中的大型模型迈出了实质性的一步,证明了零样本能够以高精度识别任何常见类别。RAM引入了一种新的图像标记模式,利用大规模的图像-文本对进行训练,而不是手动注释。RAM的开发包括四个关键步骤。首先,通过自动文本语义解析,大规模地获得无标注的图像标签。随后,通过统一分别由原始文本和解析的标签监督的标题和标记任务,训练用于自动注释的初步模型。第三,使用数据引擎生成额外的注释并清除不正确的注释。最后,使用处理后的数据对模型进行再训练,并使用较小但质量较高的数据集进行微调。

我们在许多基准测试中评估了 RAM 的标记功能,并观察到令人印象深刻的零样本性能,显着优于 CLIP 和 BLIP。值得注意的是,RAM 甚至超越了完全监督的方式,并表现出了与 Google 标记 API 竞争的性能。我们将在 https://recognize-anything.github.io/ 上发布 RAM,以促进计算机视觉中大型模型的进步

1.Introduction

在大规模网络数据集上训练的大型语言模型 (LLM) 引发了自然语言处理 (NLP) 领域的一场革命。这些模型表现出令人印象深刻的零样本泛化能力,使它们能够泛化到训练领域之外的任务和数据分布。在计算机视觉(CV)方面,分割任意模型(SAM)也通过数据扩展展示了卓越的零样本定位能力。然而SAM作为一个极致的定位大模型,并没有识别(Recognition)能力,而识别是与定位同等重要的CV基础任务。多标签图像识别,也称为图像标记,旨在通过识别给定图像的多个标签来提供语义标签。图像标记是一项重要且实用的计算机视觉任务,因为图像本质上包含多个标签,包括对象、场景、属性和动作。遗憾的是,现有的多标签分类、检测、分割和视觉语言方法模型在标记方面存在缺陷,其特点是范围有限或准确性较差,如图1所示.

img

两个核心组件阻碍了图像标记的进展。 1)困难在于大规模高质量数据的收集。具体来说,缺乏通用统一的标签系统和高效的数据标注引擎,能够对海量类别的大规模图像进行半自动甚至自动标注。 2)缺乏高效灵活的模型设计,可以利用大规模弱监督数据构建开放词汇和强大的模型。

为了解决两个关键瓶颈,本文介绍了识别任何模型(RAM)一个增强的图像标记基础模型。RAM克服了与数据相关的挑战,包括标签系统、数据集和数据引擎,以及模型设计的限制。

标签系统: 我们首先建立一个通用且统一的标签系统。我们整合了流行学术数据集(分类、检测和分割)以及商业标记产品(谷歌、微软、苹果)的类别。我们的标签系统是通过将所有公共标签与文本中的常见标签合并而获得的,从而覆盖了大多数常见标签,数量适中,为 6,449 个。剩余的开放词汇标签可以通过开放集识别来识别。

数据集: 如何使用标签系统自动注释大规模图像是另一个挑战。受到 CLIP 和 ALIGN 的启发,它们利用大规模公开可用的图像文本对来训练强大的视觉模型,我们采用类似的数据集进行图像标记。为了利用这些大规模的图像文本数据进行标记,我们通过自动文本语义解析来解析文本并获得图像标签。这个过程使我们能够根据图像文本对获得各种无注释图像标签的集合。

数据引擎: 然而,来自网络的图像文本对本质上是嘈杂的,通常包含丢失或不正确的标签。为了提高注释的质量,我们设计了一个标记数据引擎。在解决丢失标签的问题时,我们利用现有模型来生成额外的标签。对于不正确的标签,我们首先定位图像中与不同标签相对应的特定区域。随后,我们采用区域聚类技术来识别和消除同一类中的异常值。此外,我们过滤掉整个图像与其相应区域之间表现出相反预测的标签,确保更清晰、更准确的注释。

模型: Tag2Text 通过将图像标记和标题集成,采用轻量级识别解码器与原始图像编码器结合,展示了卓越的图像标记功能。然而,Tag2Text 的有效性仅限于识别固定和预定义的类别。相比之下,RAM 通过将语义信息合并到标签查询中,能够泛化到以前未见过的类别。模型设计 RAM 能够增强任何视觉数据集的识别能力,突显其在多种应用中的潜力。

​ 受益于大规模、高质量的图像-标签-文本数据以及标签与标题的协同集成,我们开发了一个强大的识别任何模型(RAM)。 RAM 代表了图像标记的新范式,证明在噪声、无注释数据上训练的通用模型可以优于完全监督的模型。 RAM 的优点总结如下:

  • Strong and general RAM 展现出卓越的图像标记功能和强大的零样本泛化能力,如图 2 所示;

  • Reproducible and affordable RAM 需要开源且无注释的数据集,复制成本低。而且,最强版本的RAM只需要3天8颗A100 GPU的训练;

  • Flexible and versatile RAM 提供了卓越的灵活性,可满足各种应用场景。通过选择特定的类别,可以直接部署 RAM 来满足特定的标记需求。此外,当与定位模型(Grounding DINO 和 SAM)结合时,RAM 形成了用于视觉语义分析的强大而通用的管道。

img

2.Recognize Anything Model

2.1. Model Architecture

​ 如图3所示,我们通过文本语义解析提取图像标签,提供大规模的标签,而无需昂贵的手动注释。RAM的整体架构类似于Tag2Text,它由三个关键模块组成: 用于特征提取的图像编码器,随后用于标记的图像标签识别解码器,以及用于字幕的文本生成编码器。图像特征通过图像-标签交互编码器和识别解码器中的交叉注意层与标签交互。在训练阶段,识别头学习预测从文本解析的标签,而在推理阶段,它通过预测标签充当图像到标签的桥梁,为图像字幕提供更明确的语义指导。与Tag2Text相比,RAM在模型设计上的核心进步是开放词汇识别的引入。 Tag2Text只能识别训练时见过的类别,而RAM可以识别任何类别。

img

2.2. Open-Vocabulary Recognition

Textual Label Queries. 关键的增强在于将语义信息合并到识别解码器的标签查询中,这有助于在训练阶段泛化到以前未见过的类别。为了实现这一目标,我们利用现成的文本编码器对标签列表中的各个标签进行编码,从而提供具有丰富语义上下文的文本标签查询。相比之下,原始识别解码中使用的标签查询是随机可学习的嵌入,缺乏与未见类别的语义关系,因此仅限于预定义的已见类别。

Implementation Details. 我们采用swin-transformer作为图像编码器,因为它在视觉语言和标记任务方面都比朴素的ViT表现出更好的性能。用于文本生成的编码器-解码器是12层transformers,标签识别解码器是2层transformers。我们利用 CLIP 中现成的文本编码器并执行提示集成 来获取文本标签查询。我们还采用CLIP图像编码器来提取图像特征,通过图文特征对齐进一步提高模型对未见过的类别的识别能力。

2.3. Model Efficiency

Training Phase. RAM 在分辨率为 224 的大型数据集上进行预训练,并使用小型高质量数据集在分辨率 384 上进行微调。经验证据表明,RAM 收敛速度很快,通常在最少量的 epoch(通常少于 5 个 epoch)后即可实现收敛。这种加速收敛增强了 RAM 在有限计算资源下的再现性。为了说明这一点,在 400 万张图像上预训练的 RAM 版本需要 1 天的计算,而在 1400 万张图像上预训练的最强 RAM 版本在 8 个 A100 GPU 上只需要 3 天的计算。

Inference Phase. 轻量级图像标签识别解码器有效保证了RAM对图像标签的推理效率。此外,我们从识别解码器中消除了自注意力层,这不仅进一步提高了效率,而且还避免了标签查询之间的潜在干扰。因此,RAM 不是固定的类别和数量,而是允许对任何想要自动识别的类别和数量进行标签查询的自定义,从而增强其在各种视觉任务和数据集中的实用性。

3.Data

3.1. Label System

​ 这项工作采用三个指导原则来制定标签系统:1)经常出现在图像-文本对中的标签由于其在图像描述中的代表性意义而更有价值。 2)标签中应该表示各种领域和上下文。我们对标签的概念包括来自一系列来源的对象、场景、属性和动作,这有助于模型泛化到复杂的、看不见的场景。 3)标签数量要适中。过多的标签数量可能会产生高昂的注释成本。

​ 最初,我们利用 SceneGraph-Parser 进行少量修改,将预训练数据集中的 1400 万个句子解析为标签。然后,我们从前 10k 个最常出现的标签中手工挑选标签。我们的选择有意涵盖来自众多流行数据集的标签,用于分类、检测和分割,如图 4 所示。

3.2. Datasets

与 BLIP 和 Tag2Text 类似,我们在广泛使用的开源数据集上预训练我们的模型。采用400万(4M)图像和1400万(14M)图像设置。 4M设置包括两个人工注释的数据集COCO (113K图像,557K字幕)和Visual Genome (101K图像,822K字幕),以及两个基于网络的大型数据集Conceptual Captions (3M图像,3M字幕)和SBU Captions (849K图像,849K字幕) )。 14M 设置建立在 4M 的基础上,并添加了概念 12M (10M 图像,10M 字幕)

3.3. Data Engine

鉴于我们的训练数据集主要是开源的,这些数据集主要是从互联网上爬取的,我们遇到了不可忽略的丢失和不正确标签的数量。为了缓解这种情况,我们设计了一个自动数据引擎来生成额外的标签并清除错误的标签

Generation 我们的第一步涉及使用标题和从这些标题解析的标签来训练基线模型,类似于 Tag2Text 中使用的方法。然后,我们利用该基线模型分别利用其生成和标记功能来补充标题和标签。原始标题和标签与生成的标题、相应的解析标签和生成的标签一起合并以形成临时数据集。这一步将 4M 图像数据集中的标签数量从 1200 万个显着扩展至 3980 万个

Cleaning 为了解决标签不正确的问题,我们最初使用 Grounding-Dino 来识别和裁剪所有图像中与特定类别相对应的区域。随后,我们基于 K-Means++ 对该类别中的区域进行聚类,并消除与异常值 10% 相关的标签。同时,我们还删除了没有使用基线模型预测该特定类别的标签。其动机是通过预测区域而不是整个图像可以提高标记模型的精度。

4. Experiment

学习总结

RAM的很大工作都是基于Tag2Text,RAM 其实是一个增强型的 Tag2Text,RAM中提到的识别,本质上是图片标记任务(image tagging)

RAM模型结构上 Tagging 和 Generation 两个 其中 Tagging 分支用来多tags推理,完成识别任务;Generation用来做 image caption任务

新增CLIP Text Encoder用于得到其对应的文本标签查询

  • Image Encoder 使用 Swin,
  • 训练时,Tagging分支和Generation分支都用 解析的Tags作为label;
  • 测试时,Tagging会输出Tags,用于Generation的Caption任务生成最终的Text;

训练过程

首先,通过自动文本语义解析大规模获得无注释图像标签。随后,通过统一标题和标记任务,训练了一个初步模型用于自动注释,分别由原始文本和解析的标签监督。 第三,使用数据引擎来生成额外的注释并清除不正确的注释。 最后,使用处理后的数据对模型进行再训练,并使用更小但质量更高的数据集进行微调。

参考资料

https://zhuanlan.zhihu.com/p/635734778

https://zhuanlan.zhihu.com/p/635886914