使用MobileNetV4进行图像分类

在移动设备和边缘设备上,MobileNetV4提供了高精度和低计算成本之间的平衡。尽管苹果公司开发了MobileNetV4,但尚未发布使用该架构的预训练权重。然而,Hugging Face使用MobileNetV4架构训练了自己的权重。这些权重在分类任务上表现出色,因此将在本指南中使用它们来演示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

步骤 #2:导入库

接下来,添加以下代码行以导入需要的库。

from urllib.request import urlopen from PIL import Image import timm import torch

步骤 #3:获取图像

这一步将帮助使用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中运行代码以查看图像。

步骤 #4:获取标签

ImageNet4V在Imagenet-1k上进行了训练。因此,需要从Imagenet获取标签。从这个GitHub链接中收集它们。收集的标签将包括许多不同的类别。它们从像红狐这样的动物到像风筝和卡布奇诺这样的物体。然而,大多数与动物有关。将字典链接到一个名为“image_net_labels”的变量。

步骤 #5:构建检测模型

在这一步中,构建一个函数,该函数将在任何图像上运行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个类别和概率。

将类别映射到标签。

步骤 #6:测试模型

使用以下函数对各种不同的图像进行推理。在这里,调用了test_img1的函数,这将给出结果图像:

predict_with_ImageNetV4(test_img1)

根据ImageNetV4,模型准确地预测图像为espresso,置信度约为58%。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485