赞
踩
这篇论文介绍了一个名为“Recognize Anything Model”(RAM)的新型基础模型,专用于图像标签识别(图像分类)。这一模型采用大规模图像-文本配对数据进行训练,无需手动注释,能够在零样本学习环境中识别任何常见类别,并显示出高准确率。RAM的开发包括四个关键步骤:首先,通过自动文本语义解析获取无需注释的图像标签;然后,训练一个初步模型来进行自动注释;接着,使用数据引擎生成额外的注释并清除错误注释;最后,使用处理过的数据重新训练模型,并利用更小但质量更高的数据集进行微调。
RAM模型利用大规模的图像-文本对进行训练,无需依赖传统的手动标注。这种方法利用自然语言处理技术从文本中自动解析标签,生成与图像相关的标签,减少了人工标注的需求和成本。
模型开发过程中引入了一个数据引擎,用于生成额外的标签并清理错误的标签。这一步骤提高了标签的质量和准确性,使模型能够从更准确的数据中学习。
通过自动文本语义解析来获取图像标签,这不仅提升了标签生成的自动化水平,还增强了数据的多样性和覆盖范围。
RAM通过引入开放词汇表的概念,使得模型能够识别训练数据中未出现的新类别。这一点通过在模型的识别解码器中融入语义信息来实现,从而提升了模型对未知类别的泛化能力。
RAM采用了先进的神经网络架构,包括Swin Transformer作为图像编码器,以及一个轻量级的图像标签识别解码器,这有助于提高训练和推理阶段的效率。
该模型结合了图像标签与图像描述生成任务,通过交叉注意力机制在图像特征与标签之间进行有效的交互,进一步增强了模型的表现。
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
获取图像的中英文输出:
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
图像标签: 扶手椅 | 毯子/覆盖层 | 灯 | 地毯 | 沙发 | 狗 | 灰色 | 绿色 | 坐垫/搁脚凳/草丛 | 家/住宅 | 躺 | 客厅 | 相框 | 枕头 | 植物 | 房间 | 壁灯 | 坐/放置/坐落 | 木地板
''' * 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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。