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

news2024/11/27 10:33:54

一、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 random

import torch

from PIL import Image
from ram.models import ram
from ram import inference_ram as inference
from ram import get_transform


parser = 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 model
    model = 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.coloradmin.cn/o/1805247.html

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

相关文章

Java--可变参数

1.JDK1.5开始,Java支持同类型的可变参数给一个方法 2.在方法声明之前,在指定参数类型后加一个省略号(...) 3.一个方法只能指定一个可变参数,它必须是方法的最后一个参数,任何普通的参数必须在它之前声明 …

国产操作系统上给virtualbox中win7虚拟机安装增强工具 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上给virtualbox中win7虚拟机安装增强工具 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上给win7虚拟机安装virtualbox增强工具的文章。VirtualBox增强工具(Guest Additions&a…

Java----抽象类和接口

欢迎大家来这次博客-----抽象类和接口。 1.抽象类 1.1 抽象类概念 在Java中我们都是通过类来描述对象,但反过来并不是所有的类都是用来描述对象的。当一个类中没有足够的信息来描述一个具体对象,我们就将该类称为抽象类。 如上图中的Shape类&#xff…

《MySQL是怎样运行的》读书笔记(三) B+树索引

前言 从前面数据存储结构中我们已经知道了页和记录的关系示意图: 其中页a、页b、页c ... 页n 这些页可以不在物理结构上相连,只要通过双向链表相关联即可。 在正式介绍索引之前,我们需要了解一下没有索引的时候是怎么查找记录的。下边先只讨论搜索条件…

单源最短路径算法 -- 迪杰斯科拉(Dijkstra)算法

1. 简介 迪杰斯科拉(Dijkstra)算法是一种用于在加权图中找到最短路径的经典算法。它是由荷兰计算机科学家Edsger Wybe Dijkstra在1956年首次提出的,并以他的名字命名。这个算法特别适合于解决单源最短路径问题,即计算图中一个顶点…

Application Load Balancer-ALB

Application Load Balancer-ALB 什么是ALB开通ALB服务实现IPv4服务的负载均衡创建ALB实例创建服务器组添加后端服务器配置监听设置域名解析(可选)释放ALB实例 什么是ALB 在介绍ALB之前首先介绍一下负载均衡SLB,可以说SLB是负载均衡家族之首 …

htb-linux-6-beep

nmap web渗透 目录扫描 漏洞关键词 shell py脚本执行 flag root 目前的权限 nmap root

【Unity Shader入门精要 第13章】使用深度和法线纹理(一)

1. 原理 深度纹理的本质是一张RenderTexture,只不过其中记录的不是颜色值,而是一个深度值 这些深度值来自于顶点在空间变换后得到的归一化设备坐标(NDC)的Z值 由于NDC坐标的分量取值范围在[-1, 1]之间,要使颜色值能…

实现Redis和数据库数据同步问题(JAVA代码实现)

这里我用到了Redis当中的发布订阅模式实现(JAVA代码实现) 先看图示 下面为代码实现 首先将RedisMessageListenerContainer交给Spring管理. Configuration public class redisConfig {AutowiredRedisConnectionFactory redisConnectionFactory;AutowiredQualifier("car…

《精通ChatGPT:从入门到大师的Prompt指南》附录A:常用Prompt示例

附录A:常用Prompt示例 在《精通ChatGPT:从入门到大师的Prompt指南》的附录A中,我们将展示一系列常用的Prompt示例,帮助读者更好地理解和应用Prompt技术。每个示例将包含Prompt的描述、使用场景、预期结果以及实际输出。希望这些示…

Springboot+Vue的网上购物商城系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 角色对应功能 用户商家 功能截图

二、Nginx原来是这样?(系列篇02)

二、Nginx原来是这样?(系列篇02) 大家好,我是秋意零。 今天分享Nginx系列篇的第二节。Nginx目录结构、运行原理、基本配置。 更多请关注,Nginx系列篇主页:https://mp.weixin.qq.com/mp/appmsgalbum?__b…

MFA 轰炸:苹果用户的攻击目标

一些 Apple (苹果) 用户报告了利用密码重置功能进行的网络钓鱼攻击。 你注意到 iPhone 上的系统提示你输入密码。你点击“不允许”。然后这种情况一次又一次地发生。 在某个时候,你可能会感到恼火或开始恐慌,然后点击“允许”。 然后,你接…

[羊城杯 2023]CSGO

主函数初始化时,有反调试检测 打个断点在前面,然后nop掉 go语言的主函数是main_main 直接来到main_main,发现能可能是base64变表 在前面打个断点,F9 此处为base64变表,来到v25的地址处 得到变表LMNOPQRSTUVWXYZab…

【云原生】Kubernetes----轻量级的现代HTTP反向代理和负载均衡器之Traefik

目录 引言 一、Traefik基本概念 (一)什么是Ingress (二)什么是Traefik (三)Traefik和Nginx的区别 1.设计目标 2.配置语言 3.容器支持 4.功能特性 二、安装部署Traefik (一&#xff0…

Redis实战篇02

1.分布式锁Redisson 简单介绍: 使用setnx可能会出现的极端问题: Redisson的简介: 简单的使用: 业务代码的改造: private void handleVoucherOrder(VoucherOrder voucherOrder) {Long userId voucherOrder.getUserI…

NGINX之location和rewrite

一.NGINX常用的正则表达式 二.Location location作用:对访问的路径做访问控制或者代理转发 1.location 常用的匹配规则: 进行普通字符精确匹配,也就是完全匹配^~ / 表示普通字符匹配。使用前缀匹配。如果匹配成功,则不再匹配其它 …

QGraphicsView实现简易地图20『鹰眼视图-全图显示』

前文链接:QGraphicsView实现简易地图19『迁徙图』 鹰眼视图-全图显示 能够显示所有已加载的瓦片地图,支持当前视口的范围显示器。鼠标在鹰眼视图上移动时,支持是否干预主视图地图加载两种模式,即移动时是否让主视图加载空白处的瓦…

无头+单向+非循环链表的实现

这里写目录标题 1. 链表1.1 链表的概念及结构1.2 链表的分类 2. 接口实现3. 链表的实现3.1 打印链表3.2 头插3.3 尾插3.4 头删3.5 尾删3.6 单链表查找3.7 在pos之前插入3.8 在pos之后插入3.9 删除pos位置的值3.10 删除pos位置之后的值3.11 链表的释放3.12 动态申请一个节点 4. …

基于SVPWM矢量控制的无速度传感器电机控制系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于SVPWM矢量控制的无速度传感器电机控制系统simulink建模与仿真,包括电机,SVPWM模块,矢量控制器模块等。 2.系统仿真结果 3.核心程序与模…