|
## MobileNetV2 |
|
|
|
MobileNetV2 是在分辨率 224x224 的 ImageNet-1k 数据集上预训练的图像分类模型。https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet |
|
|
|
我们开发了一个 AMD Ryzen AI (https://ryzenai.docs.amd.com/en/latest/) 支持的修改版本 - https://huggingface.co/models?search=mobilenet_v2 |
|
|
|
详情可参照 https://huggingface.co/amd/mobilenet_v2_1.0_224 |
|
|
|
## 安装 |
|
|
|
按照 https://ryzenai.docs.amd.com/en/latest/inst.html 为 Ryzen AI 准备环境。 |
|
|
|
运行以下脚本安装pre-requisites包 |
|
|
|
```shell |
|
|
|
pip install -r requirements.txt |
|
|
|
``` |
|
|
|
|
|
|
|
## 推理 |
|
|
|
|
|
推理一张图片 |
|
```shell |
|
|
|
import sys |
|
import onnxruntime |
|
import torch |
|
import torchvision.transforms as transforms |
|
from PIL import Image |
|
|
|
image_path = sys.argv[1] |
|
onnx_model = sys.argv[2] |
|
|
|
normalize = transforms.Normalize( |
|
mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]) |
|
img_transformer = transforms.Compose([ |
|
transforms.Resize(256), |
|
transforms.CenterCrop(224), |
|
transforms.ToTensor(), |
|
normalize]) |
|
img_tensor = img_transformer(Image.open(image_path)).unsqueeze(0) |
|
img_tensor = torch.permute(img_tensor, (0, 2, 3, 1)) |
|
so = onnxruntime.SessionOptions() |
|
ort_session = onnxruntime.InferenceSession( |
|
onnx_model, so, |
|
providers=['CPUExecutionProvider'], |
|
provider_options=None) |
|
input = img_tensor.numpy() |
|
ort_input = {ort_session.get_inputs()[0].name: input} |
|
|
|
output = ort_session.run(None, ort_input) |
|
top5_probabilities, top5_class_indices = torch.topk(torch.nn.functional.softmax(torch.tensor(output[0])), k=5) |
|
|
|
|
|
``` |
|
|
|
vaip_config.json 来自于Ryzen AI 安装包 https://ryzenai.docs.amd.com/en/latest/inst.html, voe-4.0-win_amd64 of ryzen-ai-sw-1.0.zip. |
|
|
|
|
|
使用 eval_onnx.py 推理 ImageNet validation dataset (50,000 Images). |
|
|
|
测试量化模型CPU |
|
|
|
```shell |
|
|
|
python eval_onnx.py --onnx_model=./mobilenetv2_int8.onnx --data_dir=./{DATA_PATH} |
|
|
|
``` |
|
|
|
测试量化模型IPU |
|
|
|
```shell |
|
|
|
python eval_onnx.py --onnx_model=./mobilenetv2_int8.onnx --data_dir=./{DATA_PATH} --ipu --provider_config Path\To\vaip_config.json |
|
|
|
Metric Accuracy on IPU |
|
top1& top5 accuracy 75.62% / 92.52% |
|
|
|
``` |
|
|
|
DATA_PATH: ImageNet validation目录 |
|
|
|
### 引用 |
|
|
|
```shell |
|
|
|
@article{MobileNet v2, |
|
author = {Mark Sandler and |
|
Andrew G. Howard and |
|
Menglong Zhu and |
|
Andrey Zhmoginov and |
|
Liang{-}Chieh Chen}, |
|
title = {MobileNetV2: Inverted Residuals and Linear Bottlenecks}, |
|
year = {2018}, |
|
url = {http://arxiv.org/abs/1801.04381}, |
|
} |
|
|
|
``` |