Recognize Anything:一个强大的图像标记模型

news2024/11/19 1:47:09

Recognize Anything是一种新的图像标记基础模型,与传统模型不同,它不依赖于手动注释进行训练;相反,它利用大规模的图像-文本对。RAM的开发过程包括四个关键阶段:

  • 通过自动文本语义解析获得大规模的无标注图像标签。
  • 结合标题和标注任务,训练一个自动标注的初步模型。该模型由原始文本和解析后的标签进行监督。
  • 利用数据引擎创建额外的注释并纠正不正确的注释。
  • 用处理过的数据重新训练模型,并使用更小但质量更高的数据集对其进行微调。

RAM在多个基准测试中表现出令人印象深刻的零样本性能,并且优于CLIP和BLIP。它的性能甚至超过了完全监督的方法。

Recognize Anything Model

Recognize Anything Model使用文本语义解析来提取图像标记,提供大量标记,而不需要昂贵的手动注释。RAM的整体架构类似于Tag2Text,包括三个关键模块:用于特征提取的图像编码器,用于标记的图像标签识别解码器和用于文本生成的文本编码器-解码器。

在训练阶段,识别头学习预测从文本解析的标签,而在推理阶段,它通过预测标签为图像标题提供更明确的语义指导,作为从图像到标签的桥梁。

RAM相对于Tag2Text的一个关键进步是引入了开放词汇识别。与Tag2Text只能识别训练中遇到的类别不同,RAM可以识别任何类别,从而扩大了它的实用性。

Open-Vocabulary

RAM的一个显著增强在于它将语义信息整合到识别解码器的标签查询中。这种方法可以让模型泛化到在训练阶段未见过的类别。RAM通过使用现成的文本编码器对标签列表中的单个标签进行编码,这样可以让文本标签查询具有语义丰富的上下文。而Tag2Text中的标签查询是随机可学习的嵌入,缺乏与未见类别的语义关系,因此仅限于预定义的可见类别。

在实现细节方面,RAM使用swing - Transformer作为图像编码器,因为它在视觉语言和标记领域的性能优于标准Vision Transformer (ViT)。文本生成编解码器由12层Transformer组成,标签识别解码器由2层Transformer组成。

RAM还利用CLIP现成的文本编码器通过提示集成生成文本标签查询。采用CLIP图像编码器提取图像特征,通过对图像-文本特征对齐,增强了模型对未见类别的识别能力。

模型的效率

在其训练阶段,RAM在分辨率为224的大规模数据集上进行预训练,然后使用较小的高质量数据集在分辨率为384的情况下进行微调。RAM的收敛速度很快,通常在不到5个epoch的时间内就可以收敛,这增强了有限计算资源下的可重复性。例如,对400万张图像进行预训练的RAM版本只需要1天的计算,而对1400万张图像进行预训练的最强版本只需要在8个A100 gpu上进行3天的计算。

在推理阶段,轻量级的图像标签识别解码器提高了RAM对图像标签的推理效率。从识别解码器中去除了自注意力层,不仅提高了效率还避免了标签查询之间的潜在干扰。所以RAM可以自动识别的任何类别和数量定制标签查询,增强其在各种视觉任务和数据集中的实用性。

数据和处理

RAM的标签系统遵循三个原则:

  • 经常出现在图像-文本对中的标签由于其在图像描述中的重要作用而被赋予了更多的价值。
  • 各种领域和上下文应该在标签中表示,包括对象、场景、属性和操作,这有助于将模型推广到复杂的、看不见的场景。
  • 标签的数量需要适度,以避免大量的注释成本。

RAM使用SceneGraphParser将其预训练数据集中的1400万个句子解析为标签,并进行了少量修改。然后手动选择出现频率最高的1万个标签。选择的标记涵盖了用于分类、检测和分割的许多流行数据集,除了ImageNet和OpenImages V6等少数数据集,为了标记不常见的类别,RAM还部分涵盖了通过使用公共api获得开源图像产生的标签。

RAM可以识别多达6449个固定标签,这已经远远超过Tag2Text。为了减少冗余,它还通过各种方法收集同义词,包括人工检查、参考WordNet、翻译和合并标签等。同一同义词组中的标签被分配相同的标签ID,这样标签系统中的标签ID为4585。

为了处理开源训练数据集中缺失和错误的标签,RAM还设计了一个自动数据引擎来生成额外的标签并纠正错误的标签。

在生成阶段,使用从这些标题中解析的标题和标记来训练基线模型,类似于Tag2Text中使用的方法。然后使用该模型来补充标题和标签,将400万图像数据集中的标签数量从1200万扩展到3980万。

在清洗阶段,ground - dino用于识别和裁剪所有图像中对应于特定类别的区域。然后基于k - means++对这些区域进行聚类,并删除与异常值10%相关的标签。没有使用基线模型预测特定类别的标签也被淘汰。这样可以通过预测区域而不是整个图像,可以提高标记模型的精度。

结果

在多标签分类、检测、分割和视觉语言模型方面,RAM与最先进的模型进行了比较。

多标签分类模型:虽然监督模型在特定领域表现出色,但它们很难推广到其他领域和未知类别。通才模型在所有领域都不能达到令人满意的准确性。RAM展示了广泛的覆盖范围和令人印象深刻的准确性,甚至在某些数据集上超过了监督模型,训练数据更少,但标签更多。它利用其开放词汇表的能力来识别任何常见的类别。

检测和分割模型:这些模型在具有有限类别的特定领域中表现出色,但由于计算开销高和泛化性能差,它们在较大的类别表现并不好。而RAM展示了令人印象深刻的开集能力,超越了现有的检测和分割模型,可以泛化更广泛的类别。

视觉语言模型:尽管它们具有开放集识别能力,但像CLIP和BLIP这样的模型的准确性低于标准,可解释性有限

RAM在几乎所有数据集中都明显超过这些模型,显示出卓越的性能。但是RAM页在罕见类的情况下表现不佳,这是由于它的训练数据集较小,并且在训练期间对这些类的强调较少。

消融研究

模型消融研究:主要发现如下:

  • 在训练中整合字幕和标注可以提高标注能力。
  • 开放集识别可以通过文本查询实现,但对训练中看到的类别影响不大。
  • 由于增加了模型训练的难度,扩展标签系统会对现有类别产生轻微影响。但是这样增强了模型对未见类别的覆盖和开放集能力。

研究表明

  • 添加更多的标签可以显著提高所有测试集的模型性能,突出了原始数据集中缺少标签的问题。
  • 清除某些类别的标记会略微提高OPPO-common和OpenImages-common测试集上的性能。
  • 将训练图像从4M扩展到14M,可以显著提高所有测试集的性能。
  • 使用更大的骨干网络只略微提高了openimages的性能(很少),甚至略微降低了常见类别的性能,作者将其归因于进行超参数搜索的资源有限。
  • 对从COCO Caption数据集解析的标签进行微调,显著提高了OPPO-common和OpenImages-common测试集上的性能。该数据集提供了全面的描述,近似于一套完整的标签系统。

限制

与CLIP一样,当前版本的RAM可以有效地识别常见的对象和场景,但在处理抽象任务(如对象计数)时遇到困难。它在细粒度分类(如区分汽车模型或识别特定的花卉或鸟类)中的性能也落后于零样本的特定任务模型。另外由于RAM是在开源数据集上训练的,因此它可能潜在地反映了这些数据集中存在的偏见。

论文项目地址:

https://avoid.overfit.cn/post/a8e9304fa5be47f7867aa10e267e0afb

作者:Andrew Lukyanenko

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011537.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络电视盒子哪个品牌好?测评工作室深入分析电视盒子排名

电视盒子只需要联网就可以收看海量资源,不需要每月缴费,玩游戏、上网课、K歌都不在话下,对新手来说电视盒子如何选择?网络电视盒子哪个品牌好?工作室购入了最热销的15款电视盒子经过多角度对比后整理了电视盒子排名&am…

Linux内核源码分析 (B.x)Linux页表的映射

Linux内核源码分析 (B.x)Linux页表的映射 文章目录 Linux内核源码分析 (B.x)Linux页表的映射一、ARM32页表1、页表术语2、虚拟地址到物理地址转换3、一级页表项4、二级页表项 二、ARM64页表1、ARMv8-A架构2、4KB大小页4级映射 三、Linux内核中关于页表的函数和宏1、查询页表2、…

第三方ipad笔哪个牌子好用?开学季比较好用的电容笔

新学期有什么电容笔值得入手?这款平替电容笔,名为Apple Pencil,唯一的区别就是它的压力感应功能,同时拥有重力压感以及倾斜压感,而平替电容笔仅只拥有倾斜压感一种功能,不过它的压力感应能力很强&#xff0…

034:vue项目利用qrcodejs2生成二维码示例

第034个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例和信息点介绍,做到灵活运用。 (1)提供vue2的一些基本操作:安装、引用,模板使…

无涯教程-JavaScript - IF函数

描述 如果条件为TRUE,则IF函数返回一个值,如果条件为FALSE,则返回另一个值。 语法 IF (logical_test, value_if_true, [value_if_false]) 争论 Argument描述Required/Optionallogical_testThe condition you want to test.Requiredvalue_if_trueThe value that you want re…

藿香正气水泡脚火了!谁都可以“插一脚”吗?

白露身不露,寒露脚不露 眼见着凉凉秋意脚步将至 不少人又把泡脚养生提上了日程 不过,用藿香正气水泡脚你有尝试过吗? 有人说泡完能祛湿 可有人居然腹泻了这是怎么回事? 👇👇👇 藿香正气水…

足不出户游登封,千里之外访嵩山

阿里元境联合河南登封文旅打造首个虚实结合的文旅元宇宙 虚实结合元宇宙成效明显 说到河南嵩山,很多人会想到“五岳”。作为五岳之一,嵩山历史悠久,历史人文景观众多。徐霞客曾评价:“嵩山天下奥,少室险奇特。不游三皇…

【css】能被4整除 css :class,判断一个数能否被另外一个数整除,余数

判断一个数能否被另外一个数整除 一个数能被4整除的表达式可以表示为:num%40,其中,num为待判断的数,% 为取模运算符,为等于运算符。这个表达式的意思是,如果num除以4的余数为0,则返回true&…

uniapp——生成一个签字板

在开发项目中有签名/签字的需求&#xff0c;以下实现&#xff1a; <template><view class"new_file" v-if"showAutograph"><view class"popupBox"><view class"popupTopBox">签字板</view><canvas c…

SpringBoot-Actuator

SpringBoot-Actuator 1 综合 Spring Boot Actuator 模块 详解&#xff1a;健康检查&#xff0c;度量&#xff0c;指标收集和监Spring boot——Actuator 详解Spring Boot Actuator官网 - 最新Spring Boot Actuator官网-2.3.x关于spring-boot-actuator的httptrace端点不生效问题…

焊接符号学习

欧美焊接符号举例 4.5------表示焊点直径 【3】------根据图示说明&#xff0c;表示此项为CC项或者SC项 6-------表示此处为第六CC项或者SC项 BETWEEN①AND②------表示①件和②件俩点之间的焊点 12X------表示俩点之间的焊点个数为12个 日本焊接符号举例 A------根据图示&…

IO和进程day08(消息队列、共享内存、信号灯集)

今日任务 1.代码 inversion.c #include <stdio.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/ipc.h> #include <sys/shm.h> #include <sys/types.h> #include …

革命性创新:RFID技术引领汽车零部件加工新时代

革命性创新&#xff1a;RFID技术引领汽车零部件加工新时代 RFID&#xff08;Radio Frequency Identification&#xff0c;射频识别&#xff09;技术是一种利用无线电频率进行自动识别的技术&#xff0c;可以快速、准确地识别物体并获取相关数据。在汽车零部件加工中&#xff0…

科普AI技术中API不可缺的理由

API是什么 API是应用程序接口&#xff0c;是一些预先定义的函数&#xff0c;或指软件系统不同组成部分衔接的约定。 API目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力&#xff0c;而又无需访问原码或理解内部工作机制的细节。API的一个主要功能是提供…

RDPV5P-10/350-EB、RBP10P-10/50Y-EB电控比例溢流阀放大器

RDPV5P-10/50-EC、RDPV5P-10/100-EB、RDPV5P-10/150-EC、RDPV5P-10/250-EB、RDPV5P-10/315-EC、RDPV5P-10/350-EB电液比例直动式溢流阀 RBP10P-10/50Y-EB、RBP20P-10/100Y-EC、RBP30P-10/150Y-EB、RBP35P-10/250Y-EC、RBP20P-10/315Y-EB、RBP10P-10/350Y-EC电液比例柱塞平衡式溢…

【技术方案】深度分析打印日志为啥要使用占位符

背景&#xff1a; 最近项目上&#xff0c;关于是否使用占位符有不同的意见&#xff0c;尤其是以前使用字符串拼接的&#xff0c;觉得挺好的&#xff0c;没啥问题&#xff0c;为啥使用占位符&#xff0c;然后&#xff0c;他们在网上还找了一篇专门做性能比对的&#xff0c;主要…

怎么裁剪图片?总结了下面几个方法

怎么裁剪图片&#xff1f;在日常的生活中&#xff0c;图片已经成为了我们不可或缺的一部分。或许你正在整理自己的相册时&#xff0c;或者我们需要向互联网上发布一些图片的时候&#xff0c;总之我们随时都可能会遇到一张需要进行裁剪的图片。比如说&#xff0c;一些图片上存在…

【OJ比赛日历】快周末了,不来一场比赛吗? #09.16-09.22 #12场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-09-16&#xff08;周六&#xff09; #3场比赛2023-09-17…

中尺度混凝土二维有限元求解——运行弯曲、运行光盘、运行比较、运行半圆形(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【每日一题】744. 寻找比目标字母大的最小字母

744. 寻找比目标字母大的最小字母 - 力扣&#xff08;LeetCode&#xff09; 给你一个字符数组 letters&#xff0c;该数组按非递减顺序排序&#xff0c;以及一个字符 target。letters 里至少有两个不同的字符。 返回 letters 中大于 target 的最小的字符。如果不存在这样的字符…