🚀 用于视觉的Perceiver IO(固定傅里叶位置嵌入)
Perceiver IO模型在ImageNet(1400万张图像,1000个类别)上以224x224分辨率进行预训练。它由Jaegle等人在论文Perceiver IO: A General Architecture for Structured Inputs & Outputs中提出,并首次在this repository发布。
免责声明
发布Perceiver IO的团队并未为该模型撰写模型卡片,此模型卡片由Hugging Face团队撰写。
🚀 快速开始
本模型可用于图像分类任务。你可以直接使用原始模型进行图像分类,也可以在模型中心查找其他针对特定任务微调后的版本。
✨ 主要特性
- 多模态适用性:Perceiver IO是一个Transformer编码器模型,可应用于任何模态(文本、图像、音频、视频等)。
- 高效的注意力机制:通过在一组规模不大的潜在向量(如256或512)上应用自注意力机制,并仅使用输入与潜在向量进行交叉注意力计算,使得自注意力机制的时间和内存需求不依赖于输入的大小。
- 灵活的解码方式:使用解码器查询,可灵活地将潜在向量的最终隐藏状态解码为任意大小和语义的输出。
- 直接处理原始像素值:由于自注意力机制的特性,该模型可以直接在原始像素值上进行训练,而无需像ViT那样对图像进行分块处理。
- 可迁移的特征学习:通过预训练,模型学习到图像的内部表示,可用于提取对下游任务有用的特征。
📦 安装指南
文档未提及安装步骤,若有需要,请参考相关依赖库(如transformers
)的官方安装说明。
💻 使用示例
基础用法
from transformers import PerceiverImageProcessor, PerceiverForImageClassificationFourier
import requests
from PIL import Image
processor = PerceiverImageProcessor.from_pretrained("deepmind/vision-perceiver-fourier")
model = PerceiverForImageClassificationFourier.from_pretrained("deepmind/vision-perceiver-fourier")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
inputs = processor(image, return_tensors="pt").pixel_values
outputs = model(inputs)
logits = outputs.logits
print("Predicted class:", model.config.id2label[logits.argmax(-1).item()])
>>> should print Predicted class: tabby, tabby cat
📚 详细文档
模型描述
Perceiver IO是一个Transformer编码器模型,可应用于任何模态(文本、图像、音频、视频等)。其核心思想是在一组规模不大的潜在向量(如256或512)上应用自注意力机制,并仅使用输入与潜在向量进行交叉注意力计算。这使得自注意力机制的时间和内存需求不依赖于输入的大小。
为了进行解码,作者使用了所谓的解码器查询,它可以灵活地将潜在向量的最终隐藏状态解码为任意大小和语义的输出。对于图像分类任务,输出是一个包含对数概率的张量,形状为(batch_size, num_labels)。

Perceiver IO架构。
由于自注意力机制的时间和内存需求不依赖于输入的大小,Perceiver IO的作者可以直接在原始像素值上训练模型,而不是像ViT那样对图像进行分块处理。这个特定的模型仅在像素值上添加了固定的二维傅里叶位置嵌入。
通过预训练,模型学习到图像的内部表示,可用于提取对下游任务有用的特征。例如,如果你有一个带标签的图像数据集,可以通过替换分类解码器来训练一个标准的分类器。
预期用途与局限性
你可以使用原始模型进行图像分类。请参考模型中心查找其他针对特定任务微调后的版本。
训练数据
该模型在ImageNet上进行了预训练,这是一个包含1400万张图像和1000个类别的数据集。
训练过程
预处理
图像经过中心裁剪和调整大小至224x224分辨率,并在RGB通道上进行归一化处理。请注意,在预训练过程中使用了数据增强技术,具体细节可参考论文Perceiver IO: A General Architecture for Structured Inputs & Outputs的附录H。
预训练
超参数的详细信息可在上述论文的附录H中找到。
评估结果
该模型在ImageNet-1k上的top-1准确率达到79.0,在大规模数据集(JFT-300M,Google的内部数据集)上预训练后,top-1准确率可达84.5。
引用信息
@article{DBLP:journals/corr/abs-2107-14795,
author = {Andrew Jaegle and
Sebastian Borgeaud and
Jean{-}Baptiste Alayrac and
Carl Doersch and
Catalin Ionescu and
David Ding and
Skanda Koppula and
Daniel Zoran and
Andrew Brock and
Evan Shelhamer and
Olivier J. H{\'{e}}naff and
Matthew M. Botvinick and
Andrew Zisserman and
Oriol Vinyals and
Jo{\~{a}}o Carreira},
title = {Perceiver {IO:} {A} General Architecture for Structured Inputs {\&}
Outputs},
journal = {CoRR},
volume = {abs/2107.14795},
year = {2021},
url = {https://arxiv.org/abs/2107.14795},
eprinttype = {arXiv},
eprint = {2107.14795},
timestamp = {Tue, 03 Aug 2021 14:53:34 +0200},
biburl = {https://dblp.org/rec/journals/corr/abs-2107-14795.bib},
bibsource = {dblp computer science bibliography, https://dblp.org}
}
📄 许可证
本项目采用Apache-2.0许可证。