识别一切模型RAM(Recognize Anything Model)及其前身 Tag2Text 论文解读
总览
大家好,我是卷了又没卷,薛定谔的卷的AI算法工程师「陈城南」~ 担任某大厂的算法工程师,带来最新的前沿AI知识和工具,欢迎大家交流~
继MetaAI 的 SAM后,OPPO 研究院发布识别一切模型(Recognize Anything Model,RAM):
无论是从论文内容、源码git或者Demo,都不难看出 RAM 其实是一个增强型的 Tag2Text,RAM中提到的识别,本质上是图片标记任务(image tagging),而 Tag2Text 也是作者团队提出的可应用于 image tagging 任务的大模型预训练框架。
图片识别:给一个图片,旨在通过识别给定图像的多个标签来提供语义标签,可以理解为给出多个tags用来形容这个图,包括目标(object)、场景(scene)、属性(attribute)和行为(action),是一个多标签分类(multi-label classification)。
分割一切模型(SAM)[12]的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 [32]、VIVO [21]、VinVL [61])遵循的是基于检测器的范式。通过使用目标 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[35]中的多label分类transformer decoder(用法如下图,都是DETR的思路),同时为了避免解析的tags中有某些对应图片tag的缺失、正负样本的不平衡,使用了Asymmetirc Loss(ASL)[44]。
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[29] 中 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[22] 扩充,然后送入训好的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。剩余的开放词汇标签可以通过开放集识别来识别。
数据集:如何用标签系统自动标注大规模图像是另一个挑战[30]。从 CLIP [22] 和 ALIGN [11] 中汲取灵感,它们大规模利用公开可用的图像文本对来训练强大的视觉模型,我们采用类似的数据集进行图像标记。为了利用这些大规模图像文本数据进行标记,按照[9、10],我们解析文本并通过自动文本语义解析获得图像标签。这个过程使我们能够根据图像文本对获得各种各样的无注释图像标签。
数据引擎:然而,来自网络的图像文本对本质上是嘈杂的,通常包含缺失或不正确的标签。为了提高注释的质量,我们设计了一个标记数据引擎。在解决丢失的标签时,我们利用现有模型生成额外的标签。对于不正确的标签,我们首先定位与图像中不同标签对应的特定区域。随后,我们采用区域聚类技术来识别和消除同一类中的异常值。此外,我们过滤掉在整个图像及其相应区域之间表现出相反预测的标签,确保更清晰和更准确的注释。
因为RAM在分类、检测、分割等数据集都有覆盖,同时也有seen数据(训练数据中有的)和unseen数据(训练中没有的)的识别能力,所以作者做了一个图,体现不同识别方法的识别范围(Recognition Scope),RAM-unseen是红色,因为RAM有开集识别能力,所以是最大的。
PS:这都不是六边形战士了,直接画了个圆,这图太唬人了
PS+:我第一眼以为是 performance 比较,看论文才发现是 scope 比较;
除了数据、模型,作者还有一些模型效率上的优化。
实验结果
最后看看实验部分,绿色为监督训练,蓝色是Zero-shot,黄色是无监督。
识别一切模型RAM(Recognize Anything Model)及其前身 Tag2Text 论文解读的更多相关文章
- 理论沉淀:隐马尔可夫模型(Hidden Markov Model, HMM)
理论沉淀:隐马尔可夫模型(Hidden Markov Model, HMM) 参考链接:http://www.zhihu.com/question/20962240 参考链接:http://blog. ...
- NLP —— 图模型(一)隐马尔可夫模型(Hidden Markov model,HMM)
本文简单整理了以下内容: (一)贝叶斯网(Bayesian networks,有向图模型)简单回顾 (二)隐马尔可夫模型(Hidden Markov model,HMM) 写着写着还是写成了很规整的样 ...
- 3d模型 手办制作 3d model manual production
3d模型 手办制作 3d model manual production 作者:韩梦飞沙 Author:han_meng_fei_sha 邮箱:313134555@qq.com E-mail: 313 ...
- .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)
本文内容 异步编程类型 异步编程模型(APM) 参考资料 首先澄清,异步编程模式(Asynchronous Programming Patterns)与异步编程模型(Asynchronous Prog ...
- JAVA内存模型(Java Memory Model ,JMM)
http://blog.csdn.net/hxpjava1/article/details/55189077 JVM有主内存(Main Memory)和工作内存(Working Memory),主内存 ...
- 隐变量模型(latent variable model)
连续隐变量模型(continuous latent model)也常常被称为降维(dimensionality reduction) PCA Factor Analysis ICA 连续的情形比离散的 ...
- 向量空间模型(Vector Space Model)
搜索结果排序是搜索引擎最核心的构成部分,很大程度上决定了搜索引擎的质量好坏.虽然搜索引擎在实际结果排序时考虑了上百个相关因子,但最重要的因素还是用户查询与网页内容的相关性.(ps:百度最臭名朝著的“竞 ...
- 【计算机视觉】阶编码本模型(Multi phase codebook model)
转自:http://www.cnblogs.com/xrwang/archive/2012/04/24/MPCBBGM.html 多阶编码本模型(Multi phase codebook model) ...
- 论文解读丨表格识别模型TableMaster
摘要:在此解决方案中把表格识别分成了四个部分:表格结构序列识别.文字检测.文字识别.单元格和文字框对齐.其中表格结构序列识别用到的模型是基于Master修改的,文字检测模型用到的是PSENet,文字识 ...
- 人工智能论文解读精选 | PRGC:一种新的联合关系抽取模型
NLP论文解读 原创•作者 | 小欣 论文标题:PRGC: Potential Relation and Global Correspondence Based Joint Relational ...
随机推荐
- C#/VB.NET:如何将PDF转为PDF/A
PDF/A是一种ISO标准的PDF文件格式版本,是为长期保存文件而设计的.它提供了一种工具,使电子文件在长时间之后依然以一种保留其外观的方式重现,而不管该文件是用什么工具和系统创建.储存或制作的.这种 ...
- 重磅!Apache Hudi联合传智教育推出免费中文视频教程
基础介绍 Apache Hudi(简称:Hudi)使得您能在hadoop兼容的存储之上存储大量数据,同时它还提供两种原语,使得除了经典的批处理之外,还可以在数据湖上进行流处理.这两种原语分别是: Up ...
- 自编写二进制安装kubernetes脚本v2.0版本
一键安装 二进制安装Kubernetes(k8s) v2.0 手动安装:https://github.com/cby-chen/Kubernetes 脚本安装:https://github.com/c ...
- pysimplegui之元素常用属性
常用元素参数 您将在几乎所有元素创建调用中看到的一些参数包括: key - 与 window[key].事件和返回值字典一起使用 工具提示tooltip - 将鼠标悬停在元素上,您将获得包含此文本的弹 ...
- [Linux]监控外部用户登录及外部主机连接情况
1 外部用户/外部主机 /var/log 在CentOS系统上,用户登录历史存储在以下这些文件中: /var/log/wtmp 用于存储系统连接历史记录被last工具用来记录最后登录的用户的列表 /v ...
- 在NodeJS中安装babel
安装babel 打开终端,输入命令:npm install --save-dev @babel/core @babel/cli @babel/preset-env @babel/node 安装完毕之后 ...
- BPM工作流中的一些业务场景
会签 会签是指两个或多个节点同时审批完,才能到下一节点. 案例: 合同流程 1.媒体合同需要CS.财务两部门共同审批确认:2.两个部门无审批顺序之分:3.需要两个部门全部审批通过后,流程才能往下走. ...
- tcp,udp tcp三次握手四次挥手,基于套接字进行简单通信
1.应用层: 应用层功能:规定应用程序的数据格式. 例:TCP协议可以为各种各样的程序传递数据,比如Email.WWW.FTP等等.那么,必须有不同协议规定电子邮件.网页.FTP数据的格式,这些应用程 ...
- 【LeetCode动态规划#11】打家劫舍系列题(涉及环结构和树形DP的讨论)
打家劫舍 力扣题目链接(opens new window) 你是一个专业的小偷,计划偷窃沿街的房屋.每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻 ...
- SQL Server 2022 AlwaysOn新特性之包含可用性组介绍
由于技术能力有限,文章仅能进行简要分析和说明,如有不对的地方,请指正,谢谢. SQL Server的容灾功能一直弱于Oracle和MySQL,无法自动同步元数据(用户.登录名.权限.SQL 代理作业. ...