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

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

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

相关文章

关于焊点检测(SJ-BIST)模块实现

关于焊点检测(SJ-BIST)模块实现 语言 :Verilg HDL 、VHDL EDA工具:ISE、Vivado、Quartus II 关于焊点检测(SJ-BIST)模块实现一、引言二、焊点检测功能的实现方法(1) 输入接口&#x…

数据库(28)——联合查询

对于union查询&#xff0c;就是把多次查询的结果合并起来&#xff0c;形成一个新的查询结果集。 语法 SELECT 字段列表 FROM 表A... UNION [ALL] SELECT 字段列表 FROM 表B...; 演示 select * from user where age > 22 union all select * from user where age < 50; u…

oracle linux和ubuntu的区别

Oracle Linux和Ubuntu是两种不同的Linux发行版&#xff0c;它们有一些区别&#xff1a; 背景和支持&#xff1a; Oracle Linux是由Oracle公司开发和支持的&#xff0c;它是基于Red Hat Enterprise Linux (RHEL)的一个分支。Ubuntu是由Canonical Ltd.开发和支持的&#xff0c;它…

【Python机器学习】PCA——特征提取(2)

上一篇写过了用单一最近邻分类器训练后的精度只有0.22. 现在用PCA。想要度量人脸的相似度&#xff0c;计算原始像素空间中的距离是一种相当糟糕的方法。用像素表示来比较两张图像时&#xff0c;我们比较的是每个像素的灰度值与另一张图像对应位置的像素灰度值。这种表示与人们…

Vue3 组合式 API:依赖注入(四)

provide() provide() 函数是用于依赖注入的一个关键部分。这个函数允许你在组件树中提供一个值或对象&#xff0c;使得任何子组件&#xff08;无论层级多深&#xff09;都能够通过 inject() 函数来访问这些值。 import { provide, ref } from vue; export default { setup(…

iOS Universal Links 配置

前言 Universal Links 通用链接&#xff0c;我的理解就是通过点击这个链接&#xff0c;能够打开应用&#xff0c;还可以根据配置的路径和参数跳转到App内指定页面和传递参数。我们做微信QQ登录分享时会要求配置这个链接。网上有很多文章介绍了如何配置&#xff0c;但是每次随便…

力扣经典面试题-旋转链表(Java)

1.题目描述&#xff1a;给你一个链表的头节点 head &#xff0c;旋转链表&#xff0c;将链表每个节点向右移动 k 个位置。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], k 2 输出&#xff1a;[4,5,1,2,3] 示例 2&#xff1a; 输入&#xff1a;head [0,1,2], k …

python数据分析-连云港石化基地2023年用电量分析

接下来对连云港石化基地2023年用电量进行分析&#xff0c;首先导入数据分析基本的包&#xff1a; import pandas as pd import matplotlib.pyplot as plt# Load the data from the provided Excel files file_path1 data1.xlsx file_path2 data2.xlsxdata1 pd.read_excel(f…

设计模式之观察者模式ObserverPattern(十一)

一、概述 观察者模式 (Observer Pattern) 是一种行为型设计模式&#xff0c;又被称为发布-订阅 (Publish/Subscribe) 模式&#xff0c;它定义了对象之间的一种一对多的依赖关系&#xff0c;使得当一个对象的状态发生变化时&#xff0c;所有依赖于它的对象都会自动收到通知并更新…

Leetcode 力扣109. 有序链表转换二叉搜索树 (抖音号:708231408)

给定一个单链表的头节点 head &#xff0c;其中的元素 按升序排序 &#xff0c;将其转换为 平衡 二叉搜索树。 示例 1: 输入: head [-10,-3,0,5,9] 输出: [0,-3,9,-10,null,5] 解释: 一个可能的答案是[0&#xff0c;-3,9&#xff0c;-10,null,5]&#xff0c;它表示所示的高…

arm架构下torch环境的安装(主要是conda,torch,torchvision以及tensorflow)

以前装过arm架构下的深度学习环境还是有点麻烦的&#xff0c;在此记录一下 参考&#xff1a;https://blog.csdn.net/condom10010/article/details/128139401?ops_request_misc&request_id&biz_id102&utm_termorin%E5%B9%B3%E5%8F%B0%E6%9E%B6%E6%9E%84%E9%85%8D%E…

ubuntu22.04防火墙策略

1. 安装和配置UFW 1.1 安装UFW 如果UFW尚未安装&#xff0c;可以使用以下命令进行安装&#xff1a; sudo apt update sudo apt install ufw1.2 启用UFW 启用UFW并允许SSH流量&#xff0c;以防止自己被锁定在系统之外&#xff1a; sudo ufw allow OpenSSH sudo ufw enable2…

2 程序的灵魂—算法-2.2 简单算法举例-【例 2.4】

【例 2.4】求 100 1 - 1/2 - 1/3 … 1/100 算法可表示如下&#xff1a; S1: sigh1 S2: sum1 S3: deno2 S4: sigh(-1)sigh S5: term sigh(1/deno ) S6: termsumterm S7: deno deno 1 S8:若 deno≤100&#xff0c;返回 S4&#xff1b;否则&#xff0c;结束。 double sum 1.0; …

C++11 列表初始化(initializer_list),pair

1. {} 初始化 C98 中&#xff0c;允许使用 {} 对数组进行初始化。 int arr[3] { 0, 1, 2 };C11 扩大了 {} 初始化 的使用范围&#xff0c;使其可用于所有内置类型和自定义类型。 struct Date {int _year;int _month;int _day;Date(int year, int month, int day):_year(year…

线性数据结构-栈

在JavaScript中&#xff0c;栈&#xff08;Stack&#xff09;是一种遵循后进先出&#xff08;Last In First Out, LIFO&#xff09;原则的数据结构。这意味着最后进入栈的元素将会是第一个被移除的元素。栈通常被用于限制线性数据的访问顺序&#xff0c;使得数据的插入和删除操…

【MySQL】(基础篇二) —— MySQL初始用

MySQL初始用 目录 MySQL初始用基本语法约定选择数据库查看数据库和表其它的SHOW 在Navicat中&#xff0c;大部分数据库管理相关的操作都可以通过图形界面完成&#xff0c;这个很简单&#xff0c;大家可以自行探索。虽然Navicat等图形化数据库管理工具为操作和管理数据库提供了非…

简单了解java中的Map集合

Map 1、Map集合概述 java.util.Map<K, V>集合&#xff0c;里面保存的数据是成对存在的&#xff0c;称之为双列集合&#xff0c;我们称之为键值对。而Collection集合中的元素是单个存在的&#xff0c;称之为单列集合。 2、Map集合的特点 1、可以存储两个数据 2、key元…

微信小程序 导航navigation-bar

属性类型默认值必填说明最低版本titlestring否导航条标题2.9.0loadingbooleanfalse否是否在导航条显示 loading 加载提示2.9.0front-colorstring否导航条前景颜色值&#xff0c;包括按钮、标题、状态栏的颜色&#xff0c;仅支持 #ffffff 和 #0000002.9.0background-colorstring…

微信机器人实现OCR识别录入数据

介绍 采用微信的hook插件&#xff0c;然后解析微信发来的数据图片&#xff0c;通过ocr识别 然后将数据落入execl表格中。同时有权限的人可以导出数据表格即可。 流程图 代码片 文本消息处理流程_robot.py elif msg.type 0x01: # 文本消息# 管理员列表dba_user_list [wxid_…

关于Latitude5490的问题Bios引导问题

关于Latitude5490的问题Bios引导问题 一、问题描述1、第一次维修&#xff1a;2、第二次维修&#xff1a; 二、捣鼓过程1、Latitude 5490的Bios引导2、捣鼓硬盘分区格式3、使用PE修复引导4、处理方法 三、参考链接 一、问题描述 本人原本电脑型号为Latitude 5480&#xff0c;电…