当前位置: 首页 > news >正文

Recognize Anything: A Strong Image Tagging Model(RAM模型使用方法)

一、RAM模型介绍

  这篇论文介绍了一个名为“Recognize Anything Model”(RAM)的新型基础模型,专用于图像标签识别(图像分类)。这一模型采用大规模图像-文本配对数据进行训练,无需手动注释,能够在零样本学习环境中识别任何常见类别,并显示出高准确率。RAM的开发包括四个关键步骤:首先,通过自动文本语义解析获取无需注释的图像标签;然后,训练一个初步模型来进行自动注释;接着,使用数据引擎生成额外的注释并清除错误注释;最后,使用处理过的数据重新训练模型,并利用更小但质量更高的数据集进行微调。

在这里插入图片描述

RAM模型的创新点

  1. 无需手动标注的训练数据:

  RAM模型利用大规模的图像-文本对进行训练,无需依赖传统的手动标注。这种方法利用自然语言处理技术从文本中自动解析标签,生成与图像相关的标签,减少了人工标注的需求和成本。

  1. 数据引擎和自动注释系统:

  模型开发过程中引入了一个数据引擎,用于生成额外的标签并清理错误的标签。这一步骤提高了标签的质量和准确性,使模型能够从更准确的数据中学习。

  通过自动文本语义解析来获取图像标签,这不仅提升了标签生成的自动化水平,还增强了数据的多样性和覆盖范围。

  1. 开放词汇表和零样本学习:

  RAM通过引入开放词汇表的概念,使得模型能够识别训练数据中未出现的新类别。这一点通过在模型的识别解码器中融入语义信息来实现,从而提升了模型对未知类别的泛化能力。

  1. 模型架构的优化:

  RAM采用了先进的神经网络架构,包括Swin Transformer作为图像编码器,以及一个轻量级的图像标签识别解码器,这有助于提高训练和推理阶段的效率。

  该模型结合了图像标签与图像描述生成任务,通过交叉注意力机制在图像特征与标签之间进行有效的交互,进一步增强了模型的表现。

  1. 灵活性和实用性:

  RAM的设计允许在各种视觉任务和数据集中灵活部署,用户可以根据具体需求选择适用的类别进行标签识别。
模型能够与定位模型结合,形成一条强大而通用的视觉语义分析流水线,这在多种应用场景中都显示出极大的潜力。

二、RAM模型使用方法

开始

  安装 recognize-anything 软件包:

pip install git+https://github.com/xinyu1205/recognize-anything.git

  或者,为了开发,您可以从源代码构建

git clone https://github.com/xinyu1205/recognize-anything.git
cd recognize-anything
pip install -e .

  然后就可以在其他项目中导入 RAM++、RAM 和 Tag2Text 模型了:

from ram.models import ram_plus, ram, tag2text

RAM++ Inference

  获取图像的中英文输出:

python inference_ram_plus.py  --image images/demo/demo1.jpg \
--pretrained pretrained/ram_plus_swin_large_14m.pth

  输出结果如下

Image Tags:  armchair | blanket | lamp | carpet | couch | dog | gray | green | hassock | home | lay | living room | picture frame | pillow | plant | room | wall lamp | sit | wood floor
图像标签:  扶手椅  | 毯子/覆盖层 || 地毯  | 沙发 || 灰色 | 绿色  | 坐垫/搁脚凳/草丛 |/住宅 || 客厅  | 相框  | 枕头  | 植物  | 房间  | 壁灯  |/放置/坐落 | 木地板

RAM推理完整代码

'''* The Recognize Anything Model (RAM)* Written by Xinyu Huang
'''
import argparse
import numpy as np
import randomimport torchfrom PIL import Image
from ram.models import ram
from ram import inference_ram as inference
from ram import get_transformparser = argparse.ArgumentParser(description='Tag2Text inferece for tagging and captioning')
parser.add_argument('--image',metavar='DIR',help='path to dataset',default='image/family7.jpg')
parser.add_argument('--pretrained',metavar='DIR',help='path to pretrained model',default='pretrained_ram/ram_swin_large_14m.pth')
parser.add_argument('--image-size',default=384,type=int,metavar='N',help='input image size (default: 448)')if __name__ == "__main__":args = parser.parse_args()device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')transform = get_transform(image_size=args.image_size)#######load modelmodel = ram(pretrained=args.pretrained,image_size=args.image_size,vit='swin_l')model.eval()model = model.to(device)image = transform(Image.open(args.image)).unsqueeze(0).to(device)res = inference(image, model)print(type(res[0]))print("Image Tags: ", res[0])print("图像标签: ", res[1])

参考文献

[1] Zhang Y, Huang X, Ma J, et al. Recognize anything: A strong image tagging model[J]. arxiv preprint arxiv:2306.03514, 2023.

[2] https://github.com/xinyu1205/recognize-anything

相关文章:

  • 各品牌电视安装第三方软件失败的解决方法
  • 理解数仓建模
  • 移动安全赋能化工能源行业智慧转型
  • 软件2_算法功能23
  • 数据库(28)——联合查询
  • Web前端Hack:深入探索、挑战与防范
  • 【C++】深入理解decltype和decltype(auto)
  • MyBatisPlus插件生成代码
  • Web前端 CodeView:深度解析与实用指南
  • .net后端程序发布到nignx上,通过nginx访问
  • 【React】json-server
  • 【第13章】SpringBoot实战篇之项目部署
  • 医疗器械网络安全风险管理的基本步骤
  • 多关键字排序
  • C++STL(四)priority_queue的详细用法及仿函数实现
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • ES6 ...操作符
  • Java编程基础24——递归练习
  • KMP算法及优化
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • Selenium实战教程系列(二)---元素定位
  • Spark RDD学习: aggregate函数
  • VUE es6技巧写法(持续更新中~~~)
  • Vue.js 移动端适配之 vw 解决方案
  • 编写高质量JavaScript代码之并发
  • 产品三维模型在线预览
  • 那些被忽略的 JavaScript 数组方法细节
  • 区块链共识机制优缺点对比都是什么
  • 在Mac OS X上安装 Ruby运行环境
  • LIGO、Virgo第三轮探测告捷,同时探测到一对黑洞合并产生的引力波事件 ...
  • PostgreSQL之连接数修改
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • !$boo在php中什么意思,php前戏
  • #FPGA(基础知识)
  • #NOIP 2014# day.1 T2 联合权值
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (10)Linux冯诺依曼结构操作系统的再次理解
  • (AngularJS)Angular 控制器之间通信初探
  • (done) NLP “bag-of-words“ 方法 (带有二元分类和多元分类两个例子)词袋模型、BoW
  • (js)循环条件满足时终止循环
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (备忘)Java Map 遍历
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
  • (正则)提取页面里的img标签
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ***linux下安装xampp,XAMPP目录结构(阿里云安装xampp)
  • .NET Core Web APi类库如何内嵌运行?
  • .net FrameWork简介,数组,枚举
  • .NET Framework杂记
  • .net反编译工具
  • .net通用权限框架B/S (三)--MODEL层(2)