Project Icon

recognize-anything

通用图像识别模型:支持开放域类别和高精度标签生成

Recognize Anything Model是一系列开源图像识别模型,包括RAM++、RAM和Tag2Text。这些模型能准确识别常见和开放域类别,支持高精度图像标签生成和全面描述。项目提供预训练模型、推理代码和训练数据集,适用于多种计算机视觉任务。模型性能优于现有先进方案,尤其在零样本识别方面表现突出。

:label: 识别万物模型

本项目旨在开发一系列开源且强大的基础图像识别模型。

训练数据集 标签列表 网页演示 在Colab中打开 在Bohrium中打开

  • 识别万物增强模型 (RAM++) [论文]

    RAM++是RAM的下一代版本,能够高精度识别任何类别,包括预定义的常见类别和多样化的开放集类别

  • 识别万物模型 (RAM) [论文][演示]

    RAM是一个图像标记模型,能够高精度识别任何常见类别

    RAM已被CVPR 2024多模态基础模型研讨会接收。

  • Tag2Text (ICLR 2024) [论文] [演示]

    Tag2Text是一个由标记引导的视觉-语言模型,可以同时支持标记和全面的描述生成

    Tag2Text已被ICLR 2024接收!维也纳见!

:bulb: 亮点

卓越的图像识别能力

RAM++在常见标签类别、非常见标签类别和人-物交互短语方面的表现优于现有的最先进图像基础识别模型。

零样本图像识别性能比较。

强大的视觉语义分析

我们将Tag2Text和RAM与定位模型(Grounding-DINO和SAM)结合,在Grounded-SAM项目中开发了一个强大的视觉语义分析流程。

:sunrise: 模型库

RAM++

RAM++是RAM的下一代版本,能够高精度识别任何类别,包括预定义的常见类别和多样化的开放集类别。

  • 对于常见预定义类别。 RAM++展现了卓越的图像标记能力,具有强大的零样本泛化能力,保持了与RAM相同的能力。

  • 对于多样化的开放集类别。 RAM++在CLIP和RAM的基础上实现了显著的增强。

(绿色表示完全监督学习,其他表示零样本性能。)

RAM++在开放集类别识别方面展现出显著提升。

RAM

RAM是一个强大的图像标记模型,能够高精度识别任何常见类别。

  • 强大且通用。 RAM展现了卓越的图像标记能力,具有强大的零样本泛化能力;
    • RAM展示了令人印象深刻的零样本性能,显著优于CLIP和BLIP。
    • RAM甚至超越了完全监督方法(ML-Decoder)。
    • RAM与Google标记API表现相当。
  • 可复现且经济实惠。 RAM使用开源和无需标注的数据集,复现成本低;
  • 灵活多用。 RAM提供了卓越的灵活性,适用于各种应用场景。

(绿色表示完全监督学习,蓝色表示零样本性能。)

RAM在Tag2text框架的基础上显著改进了标记能力。

  • 准确性。 RAM利用数据引擎生成额外的标注并清理不正确的标注,与Tag2Text相比准确性更高
  • 范围。 RAM将固定标签数量从3,400+升级到**6,400+(同义词归约后为4,500+个不同语义标签),涵盖更多有价值的类别**。 此外,RAM具备开放集能力,可以识别训练期间未见过的标签。
Tag2text Tag2Text是一个高效且可控的视觉语言模型,通过标签指导实现。
  • 标签。 Tag2Text可识别**3,400多个**常用人类类别,无需人工标注。
  • 描述。 Tag2Text将标签信息作为引导元素整合到文本生成中,从而生成更可控和全面的描述
  • 检索。 Tag2Text提供标签作为图像-文本检索的额外可见对齐指标

Tag2Text在标签指导下生成更全面的描述。

Tag2Text提供标签作为额外的可见对齐指标。

训练数据集

图像文本和标签

这些标注文件来自Tag2TextRAM。Tag2Text从图像-文本对中自动提取图像标签。RAM通过自动数据引擎进一步增强了标签和文本。

数据集大小图像数文本数标签数
COCO168 MB113K680K3.2M
VG55 MB100K923K2.7M
SBU234 MB849K1.7M7.6M
CC3M766 MB2.8M5.6M28.2M
CC3M-val3.5 MB12K26K132K

CC12M将在下一次更新中发布。

LLM标签描述

这些标签描述文件来自RAM++,通过调用GPT API生成。您也可以使用generate_tag_des_llm.py自定义任何标签类别。

:toolbox: 检查点

注意:您需要创建"pretrained"文件夹并将这些检查点下载到该文件夹中。

名称骨干网络数据说明检查点
1RAM++ (14M)Swin-LargeCOCO, VG, SBU, CC3M, CC3M-val, CC12M为任何类别提供强大的图像标记能力。下载链接
2RAM (14M)Swin-LargeCOCO, VG, SBU, CC3M, CC3M-val, CC12M为常见类别提供强大的图像标记能力。下载链接
3Tag2Text (14M)Swin-BaseCOCO, VG, SBU, CC3M, CC3M-val, CC12M支持全面的图像描述和标记。下载链接

:running: 模型推理

环境设置

  1. 创建并激活Conda环境:
conda create -n recognize-anything python=3.8 -y
conda activate recognize-anything
  1. recognize-anything作为包安装:
pip install git+https://github.com/xinyu1205/recognize-anything.git
  1. 或者,如果是开发目的,您可以从源代码构建:
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++推理

获取图像的英文和中文输出:

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++对未见类别的推理(开放集)

  1. 获取图像的OpenImages-Uncommon类别

我们已经在openimages_rare_200_llm_tag_descriptions中发布了OpenImages-Uncommon类别的LLM标签描述。

python inference_ram_plus_openset.py  --image images/openset_example.jpg \
--pretrained pretrained/ram_plus_swin_large_14m.pth \
--llm_tag_des datasets/openimages_rare_200/openimages_rare_200_llm_tag_descriptions.json

输出将如下所示:

Image Tags: Close-up | Compact car | Go-kart | Horse racing | Sport utility vehicle | Touring car
  1. 您还可以通过标签描述自定义任何标签类别进行识别:

修改categories,并调用GPT API生成相应的标签描述:

python generate_tag_des_llm.py \
--openai_api_key '您的openai api密钥' \
--output_file_path datasets/openimages_rare_200/openimages_rare_200_llm_tag_descriptions.json

批量推理和评估

我们发布了两个数据集OpenImages-common(214个常见标签类别)和OpenImages-rare(200个不常见标签类别)。将OpenImages v6的测试图像复制或符号链接到datasets/openimages_common_214/imgs/datasets/openimages_rare_200/imgs

要在OpenImages-common上评估RAM++:

python batch_inference.py \
  --model-type ram_plus \
  --checkpoint pretrained/ram_plus_swin_large_14m.pth \
  --dataset openimages_common_214 \
  --output-dir outputs/ram_plus

要评估RAM++在OpenImages-rare上的开放集能力:

python batch_inference.py \
  --model-type ram_plus \
  -- pretrained/ram_plus_swin_large_14m.pth \
  --open-set \
  --dataset openimages_rare_200 \
  --output-dir outputs/ram_plus_openset

OpenImages-common 上评估 RAM:

python batch_inference.py \
  --model-type ram \
  -- pretrained/ram_swin_large_14m.pth \
  --dataset openimages_common_214 \
  --output-dir outputs/ram

OpenImages-rare 上评估 RAM 的开放集能力:

python batch_inference.py \
  --model-type ram \
  -- pretrained/ram_swin_large_14m.pth \
  --open-set \
  --dataset openimages_rare_200 \
  --output-dir outputs/ram_openset

OpenImages-common 上评估 Tag2Text:

python batch_inference.py \
  --model-type tag2text \
  -- pretrained/tag2text_swin_14m.pth \
  --dataset openimages_common_214 \
  --output-dir outputs/tag2text

更多选项请参考 batch_inference.py。要获得 RAM 论文表 3 中的 P/R,请为 RAM 传递 --threshold=0.86,为 Tag2Text 传递 --threshold=0.68

要对自定义图像进行批量推理,您可以按照给定的两个数据集设置自己的数据集。

:golfing: 模型训练/微调

RAM++

  1. 下载 RAM 训练数据集,其中每个 json 文件包含一个列表。列表中的每个项目是一个包含三个键值对的字典:{'image_path': 图像路径, 'caption': 图像文本, 'union_label_id': 用于标记的图像标签,包括解析标签和伪标签}。

  2. 在 ram/configs/pretrain.yaml 中,将 'train_file' 设置为 json 文件的路径。

  3. 准备 预训练的 Swin-Transformer,并在 ram/configs/swin 中设置 'ckpt'。

  4. 下载 RAM++ 冻结标签嵌入文件 "ram_plus_tag_embedding_class_4585_des_51.pth",并将文件设置在 "ram/data/frozen_tag_embedding/ram_plus_tag_embedding_class_4585_des_51.pth"。

  5. 使用 8 个 A100 GPU 预训练模型:

python -m torch.distributed.run --nproc_per_node=8 pretrain.py \
  --model-type ram_plus \
  --config ram/configs/pretrain.yaml  \
  --output-dir outputs/ram_plus
  1. 使用 8 个 A100 GPU 微调预训练的检查点:
python -m torch.distributed.run --nproc_per_node=8 finetune.py \
  --model-type ram_plus \
  --config ram/configs/finetune.yaml  \
  --checkpoint outputs/ram_plus/checkpoint_04.pth \
  --output-dir outputs/ram_plus_ft
RAM
  1. 下载 RAM 训练数据集,其中每个 json 文件包含一个列表。列表中的每个项目是一个包含四个键值对的字典:{'image_path': 图像路径, 'caption': 图像文本, 'union_label_id': 用于标记的图像标签,包括解析标签和伪标签, 'parse_label_id': 从标题解析的图像标签}。

  2. 在 ram/configs/pretrain.yaml 中,将 'train_file' 设置为 json 文件的路径。

  3. 准备 预训练的 Swin-Transformer,并在 ram/configs/swin 中设置 'ckpt'。

  4. 下载 RAM 冻结标签嵌入文件 "ram_tag_embedding_class_4585.pth",并将文件设置在 "ram/data/frozen_tag_embedding/ram_tag_embedding_class_4585.pth"。

  5. 使用 8 个 A100 GPU 预训练模型:

python -m torch.distributed.run --nproc_per_node=8 pretrain.py \
  --model-type ram \
  --config ram/configs/pretrain.yaml  \
  --output-dir outputs/ram
  1. 使用 8 个 A100 GPU 微调预训练的检查点:
python -m torch.distributed.run --nproc_per_node=8 finetune.py \
  --model-type ram \
  --config ram/configs/finetune.yaml  \
  --checkpoint outputs/ram/checkpoint_04.pth \
  --output-dir outputs/ram_ft
Tag2Text
  1. 下载 RAM 训练数据集,其中每个 json 文件包含一个列表。列表中的每个项目是一个包含三个键值对的字典:{'image_path': 图像路径, 'caption': 图像文本, 'parse_label_id': 从标题解析的图像标签}。

  2. 在 ram/configs/pretrain_tag2text.yaml 中,将 'train_file' 设置为 json 文件的路径。

  3. 准备 预训练的 Swin-Transformer,并在 ram/configs/swin 中设置 'ckpt'。

  4. 使用 8 个 A100 GPU 预训练模型:

python -m torch.distributed.run --nproc_per_node=8 pretrain.py \
  --model-type tag2text \
  --config ram/configs/pretrain_tag2text.yaml  \
  --output-dir outputs/tag2text
  1. 使用 8 个 A100 GPU 微调预训练的检查点:
python -m torch.distributed.run --nproc_per_node=8 finetune.py \
  --model-type tag2text \
  --config ram/configs/finetune_tag2text.yaml  \
  --checkpoint outputs/tag2text/checkpoint_04.pth \
  --output-dir outputs/tag2text_ft

:black_nib: 引用

如果您发现我们的工作对您的研究有用,请考虑引用。

@article{huang2023open,
  title={Open-Set Image Tagging with Multi-Grained Text Supervision},
  author={Huang, Xinyu and Huang, Yi-Jie and Zhang, Youcai and Tian, Weiwei and Feng, Rui and Zhang, Yuejie and Xie, Yanchun and Li, Yaqian and Zhang, Lei},
  journal={arXiv e-prints},
  pages={arXiv--2310},
  year={2023}
}

@article{zhang2023recognize,
  title={Recognize Anything: A Strong Image Tagging Model},
  author={Zhang, Youcai and Huang, Xinyu and Ma, Jinyu and Li, Zhaoyang and Luo, Zhaochuan and Xie, Yanchun and Qin, Yuzhuo and Luo, Tong and Li, Yaqian and Liu, Shilong and others},
  journal={arXiv preprint arXiv:2306.03514},
  year={2023}
}

@article{huang2023tag2text,
  title={Tag2Text: Guiding Vision-Language Model via Image Tagging},
  author={Huang, Xinyu and Zhang, Youcai and Ma, Jinyu and Tian, Weiwei and Feng, Rui and Zhang, Yuejie and Li, Yaqian and Guo, Yandong and Zhang, Lei},
  journal={arXiv preprint arXiv:2303.05657},
  year={2023}
}

:hearts: 致谢

这项工作是在 BLIP 这个优秀代码库的帮助下完成的,非常感谢!

我们要感谢 @Cheng Rui @Shilong Liu @Ren Tianhe 在 将 RAM/Tag2Text 与 Grounded-SAM 结合 方面的帮助。

我们还要感谢 Ask-AnythingPrompt-can-anything 结合了 RAM/Tag2Text,这极大地扩展了 RAM/Tag2Text 的应用边界。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号