在移动设备和边缘设备上,MobileNetV4提供了高精度和低计算成本之间的平衡。尽管苹果公司开发了MobileNetV4,但尚未发布使用该架构的预训练权重。然而,Hugging Face使用MobileNetV4架构训练了自己的权重。这些权重在分类任务上表现出色,因此将在本指南中使用它们来演示MobileNetV4的使用。
本文将指导使用MobileNetV4进行分类。将重点关注使用预训练权重。不会涵盖微调自己的模型。让开始吧!
MobileNetV4是由苹果公司开发的图像分类模型。它是MobileNetV4系列模型的迭代,这些计算机视觉模型专为更小的(移动)应用而构建。该模型在ImageNet-1k数据集上进行了训练,并在尺寸和资源有限的情况下展示了SOTA(State of the Art)结果。在不同的移动设备上,MobileNetV4在准确性方面超越了许多其他图像分类模型,从MobileNetMultiAvg到FastViT。MobileNetV4实现了参数数量高达75%的减少,显著降低了其大小。该模型也比之前的MobileNet模型和其他轻量级模型快3-4倍。
首先,需要下载将在项目中使用的依赖项。运行以下命令以安装依赖项:
!pip install transformers timm torch pillow
接下来,添加以下代码行以导入需要的库。
from urllib.request import urlopen
from PIL import Image
import timm
import torch
这一步将帮助使用Pillow(安装的库之一)通过链接获取图像。
test_img_url1 = 'https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/beignets-task-guide.png'
test_img1 = Image.open(urlopen(test_img_url1))
test_img1
在上述代码片段中,添加需要的图像的URL。在colab中运行代码以查看图像。
ImageNet4V在Imagenet-1k上进行了训练。因此,需要从Imagenet获取标签。从这个GitHub链接中收集它们。收集的标签将包括许多不同的类别。它们从像红狐这样的动物到像风筝和卡布奇诺这样的物体。然而,大多数与动物有关。将字典链接到一个名为“image_net_labels”的变量。
在这一步中,构建一个函数,该函数将在任何图像上运行MobileNetV4。
def predict_with_ImageNetV4(img):
# 从timm加载预训练的MobileNetV4模型
model_name = "hf_hub:timm/mobilenetv4_hybrid_large.ix_e600_r384_in1k"
model = timm.create_model(model_name, pretrained=True)
model = model.eval()
# 获取模型特定的转换(归一化,调整大小)
data_config = timm.data.resolve_data_config({}, model=model)
transform = timm.data.create_transform(**data_config)
# 应用转换并添加批次维度
input_tensor = transform(img).unsqueeze(0)
# 通过模型进行前向传递
with torch.no_grad():
output = model(input_tensor)
# 获取前5个概率和类别索引
top5_probabilities, top5_class_indices = torch.topk(output.softmax(dim=1), k=5)
# 将概率转换为百分比
top5_probabilities = top5_probabilities * 100
# 打印前5个概率和类别索引
print("Top-5 probabilities:")
print(top5_probabilities)
print("Top-5 class indices:")
print(top5_class_indices)
top5_class = top5_class_indices[0]
list_form_c = top5_class.tolist()
top5_prob = top5_probabilities[0]
list_form_p = top5_prob.tolist()
# 将类别索引映射到image_net-1k中的相关词汇
predictions=[]
for i in range(5):
predictions.append([image_net_labels[list_form_c[i]], round(list_form_p[i], 2)])
print(predictions)
上述代码:
使用timm从HuggingFace hub加载模型。
从模型中获取输出。
检索数据并获取前5个类别和概率。
将类别映射到标签。
使用以下函数对各种不同的图像进行推理。在这里,调用了test_img1的函数,这将给出结果图像:
predict_with_ImageNetV4(test_img1)
根据ImageNetV4,模型准确地预测图像为espresso,置信度约为58%。