deit-small-patch16-224项目介绍
项目背景
deit-small-patch16-224是一个数据高效的图像变换器(Data-efficient Image Transformer, DeiT)模型,专注于图像分类任务。它是在ImageNet-1k数据集上预训练和微调的,该数据集包含100万张图像和1000个类别。DeiT模型最初由Touvron等人在论文“通过注意力的训练数据高效图像变换器与蒸馏”中提出,并首先在GitHub上发布。此版本的权重由Ross Wightman从timm库中转换而来。
模型描述
DeiT模型是一种视觉变换器(Vision Transformer, ViT),其主要特点是利用BERT风格的Transformer编码器结构。图像会被分割为固定尺寸为16x16的图像块,并线性嵌入后输入模型。同时,还会在序列前增加一个[CLS]标记用于分类任务。
经过预训练,DeiT模型能够从图像中提取出可用于下游任务的特征。例如,使用一个简单的线性层可以在预训练的编码器基础上进行图像分类。通常情况下,分类任务会在[CLS]标记的最后隐藏状态上附加线性层,因为该状态可以视为整张图像的表示。
预期用途与限制
该模型主要用于图像分类任务,用户可以直接使用原始模型对图像进行分类。还可以在模型库中寻找经过微调的版本,以适配特定任务。
使用方法
作为一个高效训练的视觉变换器模型,deit-small-patch16-224可以与ViTModel或ViTForImageClassification组件结合使用。注意,模型期望数据是通过DeiTFeatureExtractor准备的。使用AutoFeatureExtractor可以自动根据模型名称使用合适的特征提取器。
以下代码展示了如何使用该模型将COCO 2017数据集中的一张图像分类为1000个ImageNet类别之一:
from transformers import AutoFeatureExtractor, ViTForImageClassification
from PIL import Image
import requests
url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = Image.open(requests.get(url, stream=True).raw)
feature_extractor = AutoFeatureExtractor.from_pretrained('facebook/deit-small-patch16-224')
model = ViTForImageClassification.from_pretrained('facebook/deit-small-patch16-224')
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
当前,特征提取器和模型均支持PyTorch,未来将支持Tensorflow和JAX/FLAX。
模型训练数据
该模型在ImageNet-1k数据集上预训练,该数据集包含100万张图像和1000个类别。
模型训练过程
数据预处理
训练和验证过程中对图像的预处理具体细节可以在GitHub上的代码中找到。在推理阶段,图像会被调整到分辨率256x256,并中心裁剪至224x224,然后在RGB通道上进行归一化处理。
预训练
模型在一个8-GPU的节点上训练了3天,训练分辨率为224。对于批次大小和学习速率等超参数,请参考原始论文的表9。
评估结果
模型 | ImageNet top-1 准确率 | ImageNet top-5 准确率 | 参数量 | URL |
---|---|---|---|---|
DeiT-tiny | 72.2 | 91.1 | 5M | DeiT-tiny Model |
DeiT-small | 79.9 | 95.0 | 22M | DeiT-small Model |
DeiT-base | 81.8 | 95.6 | 86M | DeiT-base Model |
对于微调而言,更高的分辨率(如384x384)可以获得更好的结果,特别是当增大模型尺寸时,性能会显著提升。
DeiT-small模型在减少参数量的同时取得了相对较高的准确率,是一个在性能与效率间平衡的选择。