项目介绍:Vision Perceiver Conv
项目背景
Vision Perceiver Conv是一个基于Perceiver IO的模型,主要进行图像分类任务。该模型在著名的数据集ImageNet上进行了预训练,ImageNet包含1400万张图像和1,000个类别。Perceiver IO模型由Jaegle等人在论文《Perceiver IO: A General Architecture for Structured Inputs & Outputs》中提出,并在Deepmind的GitHub仓库中首次发布。
模型描述
Perceiver IO是一种Transformer编码器模型,可以应用于多种模态,如文本、图像、音频和视频。其核心思想是利用自注意力机制于一组数量不大的潜在向量上(例如256或512个),仅使用输入与潜在向量进行交叉注意力。这种方法使得自注意力机制的时间和内存需求不再依赖输入的大小。
在解码阶段,作者使用所谓的解码查询,这允许灵活地解码潜在向量的最终隐藏状态,以生成任意大小和语义的输出。对于图像分类任务,输出是一个包含logits的张量,其形状为(batch_size, num_labels)。
Perceiver IO与典型的视觉Transformer(ViT)模型不同之处在于,其不依赖于输入块,而是直接在原始像素值上训练。这一特定模型在像素值上应用简单的2D卷积和最大池化的预处理网络,然后使用输入与潜在向量进行交叉注意力。
通过模型的预训练,它能学习到图像的内部表示,并能够提取出对后续任务有用的特征:例如,如果用户拥有一组带标签的图像数据集,可以通过替换分类解码器来训练标准分类器。
模型的使用
用户可以使用这个模型进行图像分类。具体使用方法与PyTorch结合如下:
from transformers import PerceiverFeatureExtractor, PerceiverForImageClassificationConvProcessing
import requests
from PIL import Image
feature_extractor = PerceiverFeatureExtractor.from_pretrained("deepmind/vision-perceiver-conv")
model = PerceiverForImageClassificationConvProcessing.from_pretrained("deepmind/vision-perceiver-conv")
url = "http://images.cocodataset.org/val2017/000000039769.jpg"
image = Image.open(requests.get(url, stream=True).raw)
# 准备输入
inputs = feature_extractor(image, return_tensors="pt").pixel_values
# 前向传播
outputs = model(inputs)
logits = outputs.logits
print("Predicted class:", model.config.id2label[logits.argmax(-1).item()])
训练数据
该模型在ImageNet数据集上进行了预训练。ImageNet是一个大型的数据集,包含1,400万张图像以及1,000个类别,各种图像经过中心裁剪,调整至224x224分辨率,并在RGB通道上进行了归一化。此外,在预训练过程中还使用了数据增强技术。
预训练及评估结果
关于超参数的详细信息,读者可以参考论文附录H。预训练后,该模型在ImageNet-1k数据集上实现了82.1的Top-1准确率。
此模型由自由开源协议Apache-2.0授权,用户可以根据需要进行扩展和定制。项目团队并没有为此模型编写模型卡,因此当前模型卡由Hugging Face团队编写。使用者可以在模型库中查找其他特定任务的微调版本。