总览
大家好,我是 卷了又没卷,薛定谔的卷的 AI 算法工程师「陈城南」~ 负责某大厂的算法工程师,带来最新的前沿 AI 常识和工具,欢送 大家交换~
继 MetaAI 的 SAM 后,OPPO 研究院公布辨认所有模型(Recognize Anything Model,RAM):
- 我的项目链接:https://recognize-anything.github.io/
- Demo 链接:https://huggingface.co/spaces/xinyu1205/Tag2Text
- 源码链接:https://github.com/xinyu1205/recognize-anything
- 论文链接:https://arxiv.org/pdf/2306.03514.pdf
无论是从论文内容、源码 git 或者 Demo,都不难看出 RAM 其实是一个增强型的 Tag2Text,RAM 中提到的辨认,实质上是 图片标记 工作(image tagging),而 Tag2Text 也是作者团队提出的可利用于 image tagging 工作的大模型预训练框架。
图片辨认:给一个图片,旨在通过辨认给定图像的多个标签来提供语义标签,能够了解为给出多个 tags 用来形容这个图,包含指标(object)、场景(scene)、属性(attribute)和行为(action),是一个多标签分类(multi-label classification)。
宰割所有模型 (SAM) 的 Zero Shot 能力很强,但其 只有定位能力 (location), 没有辨认能力(SAM 只能给出宰割 Mask,没法指定该 Mask 的类别)。因而RAM 旨在于提供弱小的辨认能力(蕴含 Zero Shot 的辨认能力)。作者也将 RAM 和定位模型(SAM、Grounding-DINO)进行了联合,具体在 Grounded-SAM 我的项目中,这样就能同时达到定位 + 辨认了。下图是作者给出的 SAM、RAM 等模型的别离特点。
因为 RAM 的很大工作都是基于 Tag2Text,所以在介绍 RAM 前我须要先介绍 Tag2Text,理解 Tag2Text 论文的敌人能够间接看 RAM。
Tag2Text:Guiding Vision-Language Model via Image Tagging
Tag2Text 是一种视觉语言预训练(Vision Language Pretrain, VLP)框架。在该框架中,作者通过对视觉语言模型 (Vision-Language Models) 引入图片标记 (images tagging) 工作来领导模型学习更好的视觉 - 语言特色。图片标记,相似于给一个图片打个多个与图片无关的 label,有点像多 label 分类。
如上图所示,之前的 Tagging 办法(OSCAR、VIVO、VinVL)遵循的是基于检测器的范式。通过应用指标 tags 作为锚点来简化图片和文本之间的语义对其。这些办法通过一个检测器来提取图片特色,并送进多模态交互模块中进行学习。这种状况下检测器参数都是冻住的(如果梯度优化检测性能就会骤降),所以检测器不能优化,导致检测器性能会制约视觉 - 语言特色的学习。
作者提出了用 图片标记 来作为 视觉语音预训练的多任务 ,有两个关键问题: 数据 和网络结构。
数据问题
引入了图片标记(image tagging)就须要结构图片中的 tags 作为 label 用于训练。因为 image-text-pair 数据很丰盛,所以作者对 image-text-pair 进行自动化文本语义解析,从而从 text 中获取图片的 tags。这样,图像 tags 能提供了图像和文本之间更好的桥梁,因为解析的标记类别更加多样化,同时比指标检测的 object 更丰盛,有例如场景、属性、动作等。
从 Text 开掘 Tags 来构建数据,蕴含 2 个要害:
- 解析获取 Tags:利用解析器 [58] 来辨认 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 Tagging:用了 Query2Label 中的多 label 分类 transformer decoder(用法如下图,都是 DETR 的思路),同时为了防止解析的 tags 中有某些对应图片 tag 的缺失、正负样本的不均衡,应用了 Asymmetirc Loss(ASL)。
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 别离进行监督。
RAM:Recognize Anything: A Strong Image Tagging Model
模型构造
如图,SAM 构造上与 Tag2Text 类似,Tag2Text 有 3 个分支,tagging,generation 和 alignment;SAM 只保留了 Tagging 和 Generation 两个,其中 Tagging 分支用来多 tags 推理,实现辨认工作;Generation 用来做 image caption 工作;Tag2Text 中的 alignment 是做 Visual-Language Features 学习的,在这里被移除了。
- Image Encoder 应用 Swin,
- 训练时,Tagging 分支和 Generation 分支都用 解析的 Tags 作为 label;
- 测试时,Tagging 会输入 Tags,用于 Generation 的 Caption 工作生成最终的 Text;
综合起来,SAM 在网络上根本和 Tag2Text 统一,多了一点区别在和图中的 CLIP 无关,具体在 凋谢词汇辨认 这一节。
凋谢词汇辨认
- 受 [23, 28] 的启发,作者把每个 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 会比拟差;
另外作者还用 CLIP 的 Image Encoder 对 SAM 的图片 feature 进行蒸馏(因为 CLIP 的 image 和 text 特色是对齐的),这样 SAM 模型在没见过的类别也会有更好的特色生成。
所以综合来看,SAM 和 Tag2Text 在网络框架上的区别,根本也就在这个 CLIP 的额定应用上。
数据问题
在 Tag2Text 中作者利用 image-text-pair 的 text 进行解析,失去 tags,而后利用高频排序进行筛选,取了前 5k 的。频率越高越重要。
SAM 中则进一步扩充了数据量,同时频率筛选扩充到 top-10k。还有一系列扩充数据量的办法,间接翻译下摘要大家能够看看,数据这部分就不赘述了,细节大家看看原文吧:
标签零碎:咱们首先建设一个通用和对立的标签零碎。咱们联合了来自风行学术数据集(分类、检测和宰割)以及商业标记产品(谷歌、微软、苹果)的类别。咱们的标签零碎是通过将所有公共标签与文本中的公共标签合并而取得的,从而笼罩了大多数公共标签,数量适中,为 6,449。残余的凋谢词汇标签能够通过凋谢集辨认来辨认。
数据集:如何用标签零碎主动标注大规模图像是另一个挑战。从 CLIP 和 ALIGN 中吸取灵感,它们大规模利用公开可用的图像文本对来训练弱小的视觉模型,咱们采纳相似的数据集进行图像标记。为了利用这些大规模图像文本数据进行标记,依照[9、10],咱们解析文本并通过主动文本语义解析取得图像标签。这个过程使咱们可能依据图像文本对取得各种各样的无正文图像标签。
数据引擎:然而,来自网络的图像文本对实质上是嘈杂的,通常蕴含缺失或不正确的标签。为了进步正文的品质,咱们设计了一个标记数据引擎。在解决失落的标签时,咱们利用现有模型生成额定的标签。对于不正确的标签,咱们首先定位与图像中不同标签对应的特定区域。随后,咱们采纳区域聚类技术来辨认和打消同一类中的异样值。此外,咱们过滤掉在整个图像及其相应区域之间体现出相同预测的标签,确保更清晰和更精确的正文。
因为 RAM 在分类、检测、宰割等数据集都有笼罩,同时也有 seen 数据(训练数据中有的)和 unseen 数据(训练中没有的)的辨认能力,所以作者做了一个图,体现不同识别方法的辨认范畴(Recognition Scope),RAM-unseen 是红色,因为 RAM 有开集辨认能力,所以是最大的。
- PS:这都不是六边形兵士了,间接画了个圆,这图太唬人了
- PS+:我第一眼认为是 performance 比拟,看论文才发现是 scope 比拟;
除了数据、模型,作者还有一些模型效率上的优化。
试验后果
最初看看试验局部,绿色为监督训练,蓝色是 Zero-shot,黄色是无监督。
局部参考文献
[58] Hao Wu, Jiayuan Mao, Yufeng Zhang, Yuning Jiang, Lei Li, Weiwei Sun, and Wei-Ying Ma. Unified visual-semantic embeddings: Bridging vision and language with structured meaning representations. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition, pages 6609–6618, 2019.
[9] Xinyu Huang, Youcai Zhang, Ying Cheng, Weiwei Tian, Ruiwei Zhao, Rui Feng, Yuejie Zhang, Yaqian Li, Yandong Guo, and Xiaobo Zhang. Idea: Increasing text diversity via online multi-label recognition for vision-language pre- training. In Proceedings ofthe 30th ACM International Con- ference on Multimedia, pages 4573–4583, 2022.
[10] Xinyu Huang, Youcai Zhang, Jinyu Ma, Weiwei Tian, Rui Feng, Yuejie Zhang, Yaqian Li, Yandong Guo, and Lei Zhang. Tag2text: Guiding vision-language model via image tagging. arXiv preprint arXiv:2303.05657, 2023.