RADIO

RADIO

通过多模型融合提升性能的通用视觉基础模型

AM-RADIO是一个将多个大型视觉基础模型蒸馏为单一模型的框架。其核心产物RADIO作为新一代视觉基础模型,在多个视觉任务中表现优异,可作为通用视觉骨干网络使用。RADIO通过蒸馏整合了CLIP、DINOv2和SAM等模型,保留了文本定位和分割对应等特性。在ImageNet零样本分类、kNN和线性探测分割等任务上,RADIO超越了教师模型,同时提升了视觉语言模型的性能。此外,RADIO支持任意分辨率和非方形图像输入,并提供了名为E-RADIO的高效变体。

RADIO视觉基础模型CLIPDINOv2SAMGithub开源项目

在GitHub上标星 许可证 论文 论文

[CVPR 2024] AM-RADIO:聚合视觉基础模型 - 将所有领域归一化

<img src="https://yellow-cdn.veclightyear.com/835a84d5/1f359c0e-0ae6-4c16-95bc-d9bf6c26b90b.png" width="256" align="right">

[CVPR 2024] AM-RADIO:聚合视觉基础模型 - 将所有领域归一化的官方PyTorch实现。

Mike Ranzinger、Greg Heinrich、Jan KautzPavlo Molchanov

英伟达研究院

如有商业合作,请访问我们的网站并提交表单:英伟达研究院授权

[论文][引用]

<br clear="left"/>

新闻/发布

  • [2024.7.22] 🔥 RADIOv2.5 ViT-B/16和ViT-L/16已发布。对于VLLM任务,RADIOv2.5-B与RADIOv2相当或更好,而RADIOv2.5-L则明显更优!详见技术报告
  • [2024.4.30] 🔥 README更新了更多指标,arXiv更新了新结果。
  • [2024.3.21] 🔥 RADIOv2.1发布。使用bf16训练,提升了指标!
  • [2024.2.26] AM-RADIO论文已被CVPR 2024接收
  • [2024.2.15] RADIOv2发布。使用DFN CLIP、OpenAI CLIP、DINOv2、SAM教师模型进行训练。注意之前的模型未使用SAM教师模型。
  • [2024.1.5] 初始GitHub仓库发布。

摘要

AM-RADIO是一个将大型视觉基础模型蒸馏成单一模型的框架。 RADIO,一种新的视觉基础模型,在各种视觉领域表现卓越,可作为视觉骨干网络的优秀替代品。它通过蒸馏整合了CLIP变体、DINOv2和SAM,保留了文本定位和分割对应等独特特性。在ImageNet零样本(+6.8%)、kNN(+2.39%)和线性探测分割(+3.8%)以及视觉语言模型(LLaVa 1.5提升至1.5%)方面优于教师模型,可扩展到任意分辨率,支持非方形图像。我们还提供了一个高效变体E-RADIO,比CLIP和DINOv2快6-10倍。

<div align="left"> <img src="https://yellow-cdn.veclightyear.com/835a84d5/5d9c4ead-6363-4b69-bc60-cb61bfd57593.png" width="768"/> </div>

快速开始和模型版本:

最新的模型版本是RADIOv2。一旦有新模型可用,我们将更新描述。

TorchHub

要在TorchHub中加载,请使用以下命令:

import torch model_version="radio_v2.5-l" # 用于RADIOv2.5-L模型(ViT-L/16) #model_version="radio_v2.5-b" # 用于RADIOv2.5-B模型(ViT-B/16) #model_version="e-radio_v2" # 用于E-RADIO model = torch.hub.load('NVlabs/RADIO', 'radio_model', version=model_version, progress=True, skip_validation=True) model.cuda().eval() x = torch.rand(1, 3, 512, 512, device='cuda') if "e-radio" in model_version: model.model.set_optimal_window_size(x.shape[2:]) #其中期望输入图像的(height, width)元组。 # RADIO期望输入值在[0, 1]之间。它会自动将其归一化为均值0标准差1。 summary, spatial_features = model(x) # RADIO还支持混合精度运行: with torch.autocast('cuda', dtype=torch.bfloat16): summary, spatial_features = model(x) # 如果你更愿意预先归一化输入,可以这样做: conditioner = model.make_preprocessor_external() # 现在,模型不会改变输入,用户需要在调用`model(cond_x)`之前调用`cond_x = conditioner(x)`。 # 如果你想将条件处理移到现有的数据处理流程中,你很可能会这样做。 with torch.autocast('cuda', dtype=torch.bfloat16): cond_x = conditioner(x) summary, spatial_features = model(cond_x)

对于之前的版本,使用radio_v1radio_v2radio_v2.1,或eradio_v1用于E-RADIO模型。

请参阅快速开始部分了解更多使用详情。有关如何加载适配器(特定教师头)的信息也可在快速开始部分找到。

名称架构精度教师模型吞吐量零样本Top-1kNN Top-1ADE20kVOCGQATextVQAVQAv2SAM-COCO
radio_v2.5-lViT-L/16-CPEFloat32DFN CLIP; SigLIP; DINOv2; SAM81.0184.6851.4785.4964.1361.9381.0275.06
radio_v2.5-bViT-B/16-CPEFloat32DFN CLIP; SigLIP; DINOv2; SAM74.5781.8948.9484.3563.3156.9379.2273.87
radio_v2.1ViT-H/16-CPEBFloat16DFN CLIP; OpenAI CLIP; DINOv2; SAM55682.9386.0651.3484.7163.0156.3279.2876.58
radio_v2ViT-H/16-CPEFloat32DFN CLIP; OpenAI CLIP; DINOv2; SAM55682.7185.9251.3362.7856.3779.0076.21
radio_v1ViT-H/14-CPEFloat32DFN CLIP; OpenAI CLIP; DINOv255682.7385.2950.3285.1761.4354.9277.88
eradio_v1E-RADIOFloat32Meta CLIP; DINOv2369777.8783.7345.5079.9559.5546.3172.05

结果

模型统计和总结指标:

对于总结结果,我们使用模型的总结令牌。对于零样本,我们对大多数模型使用相应的语言嵌入。对于RADIO模型,我们使用来自DFN CLIP 378模型的语言嵌入。

模型参数量 (百万)分辨率吞吐量ImageNet1K 零样本ImageNet1K k-NN
OpenCLIP-H/1463222450377.1981.10
MetaCLIP-H/1463222448680.5182.12
SigLIP-L/1442838424182.6185.16
Intern-ViT-6B5,9022246383.2078.43
5,5374481468.64
DFN CLIP-H/1463337817083.9085.27
OpenAI CLIP-L/1430533641475.5479.80
DINOv2-g/14-reg1,137224294-83.41
SAM-H/16637102412-22.12
-----------------------------------------------------------------------------------------
E-RADIO-L39151246880.7383.89
RADIOv2.165343215882.9386.06
RADIOv2.5-B76874.57
RADIOv2.5-L102481.01

分割指标:

  • 分割设置:线性探测,简单头部
  • 对于SAM COCO结果,我们用相应的RADIO模型替换SAM模型的视觉主干网络。解码器从原始模型中冻结。
模型ADE20k分割VOC分割SAM COCO
OpenCLIP-H/1440.0468.03-
MetaCLIP-H/1435.3962.62-
SigLIP-L/1440.5370.31-
Intern-ViT-6B47.2076.85-
42.7874.43-
DFN CLIP-H/1439.0070.29-
OpenAI CLIP-L/1436.5167.04-
DINOv2-g/14-reg48.6882.78-
SAM-H/1628.0834.3477.18
-------------------------------------------------------
E-RADIO-L48.2281.6476.31
RADIOv2.151.3484.7176.23
RADIOv2.5-B48.9484.3573.87
RADIOv2.5-L51.4785.4975.06

LLaVa 1.5中的视觉-语言模型性能指标:

我们替换视觉主干网络并保持与LLaVa 1.5相同的LLM和训练方法:

模型GQAPOPETextVQAVQAv2
OpenCLIP-H/1457.9483.6150.4872.24
MetaCLIP-H/1460.5784.7653.6575.71
SigLIP-L/1457.7084.8556.6571.94
Intern-ViT-6B-1-2 (224)60.1884.0252.4576.75
(448)61.1987.2360.3678.83
DFN CLIP-H/1461.7385.9156.7878.78
OpenAI CLIP-L/1462.2086.0957.9278.49
DINOv2-g/14-reg61.8885.6247.1876.23
SAM-H/1649.9281.7643.9157.65
-----------------------------------------------------------
E-RADIO-L (512px)61.7085.0751.4776.73
RADIOv2.1 (432px)*63.0186.2056.3279.28
RADIOv2.5-B (768px)*63.3187.5456.9379.22
RADIOv2.5-L (768px)*64.1387.6861.9381.02

*注意:我们在432px分辨率下运行RADIOv2.1,在768px分辨率下运行RADIOv2.5-X。虽然这看起来可能不公平,但实际上是因为 RADIOv2.1中的模式切换问题阻止了它在高于432的分辨率上获得强大的结果。从RADIOv2.5开始, 我们已经修复了模式切换问题,这使我们能够增加输入分辨率,从而在各项指标上都取得了显著的改进。 详细信息请参见技术报告

探测3D感知能力

探测3D感知能力:我们使用来自探测视觉基础模型的3D感知能力的代码,并 评估我们的RADIO模型及其教师模型在单目深度、 表面法线和多视图对应任务上的表现,使用 NAVI数据集。对于每个任务,我们报告平均 所有阈值的准确率。RADIO保留了DINOv2的特征,并且 表现比CLIP类似模型好得多。

主干网络深度表面法线多视图对应
DFN CLIP-H/1452.523.020.3
OpenAI CLIP-L/1453.725.320.7
DINOv2-g/14-reg83.259.659.9
SAM-H/1668.250.345.3
---------------------------------------------------------
RADIOv2.181.058.562.1
RADIOv2.5-B83.057.556.1
RADIOv2.5-L84.760.158.5

详细用法

import torch # 如果不提供`version`参数,将返回最新的ViT版本。 model = torch.hub.load('NVlabs/RADIO', 'radio_model', version='radio_v2.5-l', progress=True) model.cuda().eval() x = torch.rand(1, 3, 224, 224, device='cuda') # 注意:RADIO模型期望输入的值在[0, 1]范围内 # 注意2:`radio_v1`是一个ViT-H/14模型,支持输入尺寸范围为`224 < dim < 1008` # 其中每个维度必须能被14整除。 # 支持非方形输入。 # 注意3:`radio_v2`是一个ViT-H/16模型,支持输入尺寸范围为`224 < dim < 2048` # 其中每个维度必须能被16整除。 summary, spatial_features = model(x) # RADIO还支持混合精度运行,如下所示: with torch.cuda.amp.autocast(dtype=torch.bfloat16): summary, spatial_features = model(x)

HuggingFace

from PIL import Image from transformers import AutoModel, CLIPImageProcessor hf_repo = "nvidia/RADIO" # 对于RADIO。 # hf_repo = "nvidia/E-RADIO" # 对于E-RADIO。 image_processor = CLIPImageProcessor.from_pretrained(hf_repo) model = AutoModel.from_pretrained(hf_repo, trust_remote_code=True) model.eval().cuda() image = Image.open('./examples/image1.png').convert('RGB') pixel_values = image_processor(images=image, return_tensors='pt').pixel_values pixel_values = pixel_values.to(torch.bfloat16).cuda() summary, features = model(pixel_values)

使用方法

RADIO和E-RADIO将返回一个包含两个张量的元组。 summary类似于ViT中的cls_token,旨在表示整个图像的一般概念。 它的形状为$(B,C)$,其中$B$是批次维度,$C$是某个通道数。 spatial_features表示更局部化的内容,适用于密集任务(如语义分割)或集成到LLM中。 RADIO和E-RADIO返回不同形状的空间特征:

  • RADIO:空间特征的形状为$(B,T,D)$,其中$T$是展平的空间标记,$D$是空间特征的通道数。注意,通常$C \neq D$。
  • E-RADIO:空间特征的形状为$(B,H,W,D)$,其中$H$是高度,$W$是空间特征的宽度。 对于RADIO,可以使用模型的下采样大小结合输入张量形状来转换为空间张量格式。对于'radio_v1',patch大小为14。
from einops import rearrange spatial_features = rearrange(spatial_features, 'b (h w) d -> b d h w', h=x.shape[-2] // patch_size, w=x.shape[-1] // patch_size)

得到的张量形状将为(B,D,H,W),这是计算机视觉模型中常见的形状。

RADIOv1/v2 注意事项

我们训练这个模型以适应灵活的输入维度。它支持任意输入大小。返回的模型设置了一些有用的属性,您可以查询:

model.patch_size: int model.max_resolution: int # (图像在任何维度上都不能大于此值) model.preferred_resolution: Tuple[height, width] # 这是RADIO主要训练的分辨率,对于摘要任务可能会产生最佳结果。 # 密集任务需要实验来找到最佳分辨率。 model.window_size: Optional[int] # 如果指定了`vitdet_window_size`,这就是该值 model.min_resolution_step: int # 结合`patch_size`和`window_size`来定义图像每个维度必须是多少的倍数。 # 例如,如果`patch_size == 16`,那么宽度和高度必须是16的倍数 # 如果`patch_size == 14`且`window_size == 8`,那么宽度和高度必须是14*8的倍数 # 为方便起见,您也可以调用这个函数来获取给定图像的最近有效输入大小 nearest_height, nearest_width = model.get_nearest_supported_resolution(height=1024, width=1024)

RADIO允许非方形输入。实际上,RADIOv1和RADIOv2在允许较大图像维度变化,只固定较小维度时,都能获得更高的零样本分类分数。

适配器

(目前仅支持TorchHub)

您可以额外指定模型适配器以实现额外的行为。目前,'clip'是唯一支持的适配器。在这种模式下,radio将返回一个包含元组的字典:

model = torch.hub.load(..., adaptor_names='clip', ...) output = model(x) bb_summary, bb_features = output['backbone'] clip_summary, clip_features = output['clip']

参考examples/zero_shot_imagenet.py以获取使用示例。

预处理

默认情况下,RADIO期望输入图像的归一化值在[0, 1]范围内。如果您已经有现有的数据管道,并且希望在那里进行条件处理而不是在RADIO模型内部,您可以调用此函数:

preprocessor = model.make_preprocessor_external() images = preprocessor(images) ... output = model(images)

E-RADIO限制

E-RADIO是RADIO的一个更高效的变体,但它有一些限制:

  • E-RADIO原生仅支持大小可被32整除的图像。支持其他分辨率,但可能会导致性能下降。
  • E-RADIO的性能对第3和第4块中窗口注意力的窗口大小敏感。为获得最佳性能,请自动调整输入分辨率的窗口大小:model.model.set_optimal_window_size(IMAGE_SHAPE),其中IMAGE_SHAPE是输入图像的(高度, 宽度)元组。

中间层激活

(目前仅支持RADIO)

在推理过程中可以使用forward_intermediates()方法获取中间层激活。 示例:

outputs = model.forward_intermediates(images, indices=[7, 15, 23, 31])

训练

即将推出

Star历史

[此处显示Star历史图表]

引用RADIO

如果您发现这个仓库有用,请考虑给予星标和引用:

CVPR 2024 引用:

@InProceedings{Ranzinger_2024_CVPR, author = {Ranzinger, Mike and Heinrich, Greg and Kautz, Jan and Molchanov, Pavlo}, title = {AM-RADIO: Agglomerative Vision Foundation Model Reduce All Domains Into One}, booktitle = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, month = {June}, year = {2024}, pages = {12490-12500} }

ArXiv 引用:

@misc{ranzinger2023amradio, title={AM-RADIO: Agglomerative Model -- Reduce All Domains Into One}, author={Mike Ranzinger and Greg Heinrich and Jan Kautz and Pavlo Molchanov}, year={2023}, eprint={2312.06709}, archivePrefix={arXiv}, primaryClass={cs.CV} }

许可证

版权所有 © 2024,NVIDIA Corporation。保留所有权利。

本作品根据NVIDIA Source Code License-NC提供。点击此处查看此许可证的副本。

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多