项目介绍: MobileViT-XX-Small
项目背景
MobileViT 是一种轻量级、低延迟的卷积神经网络,结合了 MobileNetV2 风格的层和一种新的模块。这种新模块通过使用变换器(transformer)实现了从局部处理向全局处理的转变。这一模型的图像数据在被变换器层处理之前,会被转换为扁平化的图片块(patches),然后这些图片块会被"解扁平化"回特征图。这种独特的设计允许 MobileViT 模块可以放置在任何卷积神经网络中,而且不需要任何位置嵌入。
目标用途
MobileViT 的设计非常通用,主要用于图像分类任务。用户可以使用这一基础模型进行图像分类,或者在 Hugging Face 的模型库中搜索特定任务的微调版本。目前,模型已经在 Imagenet-1k 上进行了预训练,具有很好的适用性。
如何使用
用户可以很容易地使用 PyTorch 来调用 MobileViT 模型的特征提取器和分类模型。以下是如何使用此模型对 COCO 2017 数据集的图像进行分类的代码示例:
from transformers import MobileViTFeatureExtractor, MobileViTForImageClassification
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 = MobileViTFeatureExtractor.from_pretrained("apple/mobilevit-xx-small")
model = MobileViTForImageClassification.from_pretrained("apple/mobilevit-xx-small")
inputs = feature_extractor(images=image, return_tensors="pt")
outputs = model(**inputs)
logits = outputs.logits
# 模型会预测出1000个ImageNet类别中的一个
predicted_class_idx = logits.argmax(-1).item()
print("Predicted class:", model.config.id2label[predicted_class_idx])
训练数据
MobileViT 模型在 ImageNet-1k 数据集上进行了预训练,该数据集包含 100 万张图像和 1000 个类别。
训练过程
预处理
在训练过程中,仅需要基本的数据增强技术,例如随机调整大小和水平翻转。为了在不需要微调的情况下学习多尺度表征,训练中使用了多尺度采样器,随机从(160, 160)、(192, 192)、(256, 256)、(288, 288)、(320, 320)这些尺寸选择图像。
在推理期间,图像会被调整为相同的分辨率 (288x288),并在中心裁剪为 (256x256) 的大小。
像素被标准化到 [0, 1] 范围内,预期的图像像素顺序是 BGR,而不是 RGB。
预训练
MobileViT 网络从头开始训练,使用 8 个 NVIDIA GPU,批量大小为 1024,采用学习率预热 3000 步,然后下降的余弦退火。也使用标签平滑的交叉熵损失和 L2 权重衰减。训练时的分辨率从 160x160 到 320x320,使用多尺度采样。
评估结果
在 ImageNet 数据集上的评估结果显示,MobileViT-XX-Small 取得了69.0%的 top-1 准确率,以及88.9%的 top-5 准确率。模型参数量仅为 1.3M,是一种非常高效的模型选择。
模型 | ImageNet top-1 准确率 | ImageNet top-5 准确率 | 参数量 | URL |
---|---|---|---|---|
MobileViT-XXS | 69.0 | 88.9 | 1.3 M | MobileViT-XX-Small |