Project Icon

RADIO

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

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

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

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

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

Mike Ranzinger、Greg Heinrich、Jan KautzPavlo Molchanov

英伟达研究院

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

[论文][引用]



新闻/发布

  • [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倍。

快速开始和模型版本:

最新的模型版本是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提供。点击此处查看此许可证的副本。

项目侧边栏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号