Tag2Text
通过对视觉语言模型引入图片标记任务(类似于给一个图片打个多个与图片有关的label)来指导模型更好的学习视觉-语言特征。
数据
对image-text-pair进行自动化文本语义解析,从而从text中获取图片的tags。
从Text挖掘Tags来构建数据,包含2个关键:
-
解析获取Tags:利用解析器来识别Text中的实体(head+modifier)和关系,然后映射出tags:Head->目标(object)和场景(scene),modifier->attribute,relationship->action;
-
筛选有效Tags:得到解析后的Tags集合,按照Tags的频率将其排序,只取前5000个最高频的进行人工筛序,最后保留了3429个tag类别作为需要的有效Tags;
网络结构
包含3个分支:Tagging, Generation, Alignment。训练后分别可以用于不同的子任务。比如下图右边的:多标签识别(就是tagging),Image Caption生成,Visual QA 和 Image-Text 检索。

-
Image-Tag Recognition Decoder,用了Query2Label中的多label分类transformer decoder
-
Image-Tag-Text Generation,用了NLP中标准的transformer的encoder-decoder框架,tags/text 都经过 tokennizer + embeding matrix 映射为 embeding,然后 tags embeding(随机乱序,防止顺序影响学习)与 image embedding(features) 一起送入 encoder,再经过decoder解码。输出与text embedding进行loss计算。相当于用 tag 指导 image 生成 text;
-
Image-Text Alignment:用了BLIP 中 Encoder 结构,image embedding 与 text embeding送入encoder。用粗粒度的 Image-Text Contrastive(ITC) Loss 和 细粒度的 Image-Text Matching(ITM) Loss 分别进行监督。
实现细节
用于文本生成的编码器-解码器结构和图像-文本对齐的编码器是从 BERTBase 初始化的 12 层transformer。生成解码器和对齐编码器在交叉注意力层共享参数。标签识别解码器是从 BERTBase 初始化的 2 层transformer,并与交互编码器的最低2层共享参数。这些模型经过 20 个 epoch 的预训练,批量大小为 960,在 8 个 NVIDIA A100 GPU 上。优化器是权重衰减为 0.05 的 AdamW。在前 3,000 次迭代中,学习率预热至 1e-4,然后以 0.9 的速率跟随线性衰减。在训练阶段,输入图像均匀地调整为 224 × 224。
训练目标:
Image tagging:对每个类别进行非对称交叉熵损失
Image-Tag-Text generation:语言建模损失 (LM) ,以自回归方式最大化文本的可能性:
Image-text alignment:基于多模态特征余弦相似度的图像-文本对比损失(ITC)和基于多模态特征融合的图像-文本匹配损失(ITM) 。
RAM
RAM结构上与 Tag2Text 相似,Tag2Text 有3个分支,tagging,generation 和 alignment;RAM 只保留了 Tagging 和 Generation 两个,其中 Tagging 分支用来多tags推理,完成识别任务;Generation用来做 image caption任务;Tag2Text 中的alignment是做 Visual-Language Features学习的,在这里被移除了。
总的来说,RAM在tag2text的基础上删除了alignment模块,增加了CLIP进行开放词汇学习。
标签系统
整合了流行学术数据集(分类、检测和分割)以及商业标记产品(谷歌、微软、苹果)的类别。标签系统是通过将所有公共标签与文本中的常见标签合并而获得的,从而覆盖了大多数常见标签,数量适中,为 6,449 个。剩余的开放词汇标签可以通过开放集识别来识别。
数据集
使用标签系统自动注释大规模图像,利用大规模公开可用的图像文本对,通过自动文本语义解析来解析文本并获得图像标签。
数据引擎
在解决丢失标签的问题时,利用现有模型来生成额外的标签。对于不正确的标签,首先定位图像中与不同标签相对应的特定区域。随后,采用区域聚类技术来识别和消除同一类中的异常值。此外,过滤掉整个图像与其相应区域之间表现出相反预测的标签,确保更清晰、更准确的注释。
模型
开放词汇识别:作者把每个Tag进行prompt ensembling扩充,然后送入训好的CLIP Text Encoder得到其对应的文本标签查询(Textual label queries,其实就是 promopt + tag 的 embedding),作者认为这些 queries 比可学习的参数有更强的语义性和上下文信息。然后将这些Label Queris送进Tagging Decoder用image features进行Cross Attention。不做Tag prompt扩充的话,tag太短了,送入模型得到的embedding会比较差;
训练效率:RAM 在分辨率为 224 的大型数据集上进行预训练,并使用小型高质量数据集在分辨率 384 上进行微调。经验证据表明,RAM 收敛速度很快,通常在最少量的 epoch(通常少于 5 个 epoch)后即可实现收敛。这种加速收敛增强了 RAM 在有限计算资源下的再现性。为了说明这一点,在 400 万张图像上预训练的 RAM 版本需要 1 天的计算,而在 1400 万张图像上预训练的最强 RAM 版本在 8 个 A100 GPU 上只需要 3 天的计算。
推理效率:轻量级图像标签识别解码器有效保证了RAM对图像标签的推理效率。此外,从识别解码器中消除了自注意力层,这不仅进一步提高了效率,而且还避免了标签查询之间的潜在干扰。因此,RAM 不是固定的类别和数量,而是允许对任何想要自动识别的类别和数量进行标签查询的自定义,从而增强其在各种视觉任务和数据集中的实用性。

实验效果
采用400万(4M)图像和1400万(14M)图像分别训练了RAM-4M和RAM-14M两个模型

RAM++
现有SOTA的图像识别模型分析
-
CLIP 通过浅层交互(点积)对齐,尽管 CLIP 在单标签分类任务中表现出显著的性能,但浅层特征交互限制了其在更真实和细粒度的图像标记任务上的性能 。
-
RAM 为了识别固定标签系统之外的类别,RAM 使用现成的文本编码器来提取文本标签嵌入。然而,在没有直接文本监督的情况下,RAM 的开放集能力仅依赖于开放集标签查询和预定义类别之间的文本嵌入相似性。因此,RAM 在识别开放集类别方面的能力仍然有限。

模型结构
对于图像-标签-文本三元组,RAM 仅执行图像标签对齐以进行图像标记。为了丰富固定标签类别之外的语义概念,除了标记框架内的图像标签对齐之外,还引入了 Image-Text 对齐,如下所示。

标签提示
为每个标签类别设计了总共5个LLM提示,如下所示:(1) "Describe concisely what a(n) {} looks like"; (2) "How can you identify a(n) {} concisely?"; (3) "What does a(n) {} look like concisely?"; (4) "What are the identifying characteristics of a(n) {}"; (5) "Please provide a concise description of the visual characteristics of {}".
基于设计的LLM提示,通过调用LLM API自动为每个标签类别生成描述。具体来说,使用“GPT-35-turbo”模型,并设置最大标记长度 = 77,这是现成的文本编码的相同标记长度。为了促进LLM响应的多样性,设置temperature= 0.99。因此,为每个LLM提示获得了10个独特的响应,每个类别总共收集了50个标签描述。
在训练阶段自动重新加权多个标签描述的创新方法。如下所示。

实验效果
图像编码器:ImageNet上与训练的SwinBase
文本编码器:CLIP text encoder
对齐解码器:2层的transformer
损失函数:ASL(非对称损失)用于image-tag,image-text
模型训练:分别使用tag2text和RAM模型的数据集进行模型训练,然后在coco数据集上进行微调
训练时间:4M 和14M 版本分别需要 1天、 3天, 使用8 A100 GPUs
下图中的描述代表了自动重新加权中权重较高的描述。值得注意的是,RAM++ 在openset类别预测概率方面取得了显著的改进

方法总结
RAM在tag2text的基础上删除了alignment模块,增加了CLIP进行开放词汇学习。
RAM++在RAM基础上增加了图像-文本对的学习,提高了开放集检测效果。