onnx RyzenAI image-classification dataset:imagenet-1k arxiv:1801.04381 license:apache-2.0 region:us
---
license: apache-2.0
tags:
- RyzenAI
- image-classification
- onnx
datasets:
- imagenet-1k
metrics:
- accuracy
---

## MobileNetV2

MobileNetV2 is an image classification model pre-trained on ImageNet-1k dataset at resolution 224x224. It was introduced in the paper [MobileNetV2: Inverted Residuals and Linear Bottlenecks](https://arxiv.org/abs/1801.04381) by Mark Sandler et al. and first released in [this repository](https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet).

We develop a modified version that could be supported by [AMD Ryzen AI](https://ryzenai.docs.amd.com/en/latest/).


## Model description

MobileNetV2 is a simple network architecture that allows to build a family of highly efficient mobile models. It allows memory-efficient inference. MobileNetV2 is a model typically used for image classification tasks. And also can be used for object detection and image segmentation tasks. All tasks show competitive results.

The model is named **mobilenet_v2_depth_size**, for example, **mobilenet_v2_1.4_224**, where **1.4** is the depth multiplier and **224** is the resolution of the input images the model was trained on.


## Intended uses & limitations

You can use the raw model for image classification. See the [model hub](https://huggingface.co/models?search=mobilenet_v2) to look for fine-tuned versions on a task that interests you.


## How to use

### Installation

1. Follow [Ryzen AI Installation](https://ryzenai.docs.amd.com/en/latest/inst.html) to prepare the environment for Ryzen AI.

2. Run the following script to install pre-requisites for this model.

   ```shell
   pip install -r requirements.txt 
   ```

### Test & Evaluation

- Inference one image (Image Classification):

  ```python
  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)
  ```

  

- Evaluate ImageNet validation dataset (50,000 Images), using  `eval_onnx.py` .

  - Test accuracy of the quantized model on CPU.
  
    ```shell
    python eval_onnx.py  --onnx_model=./mobilenetv2_int8.onnx --data_dir=./{DATA_PATH}
    ```
  
  - Test accuracy of the quantized model on IPU.
  
    ```shell
    python eval_onnx.py  --onnx_model=./mobilenetv2_int8.onnx --data_dir=./{DATA_PATH} --ipu --provider_config Path\To\vaip_config.json
    ```
  - Users can use `vaip_config.json` in folder `voe-4.0-win_amd64` of  `ryzen-ai-sw-1.0.zip` file.
  


​		`DATA_PATH`: Path to ImageNet dataset where contains the `validation` folder.

### Performance

Dataset: ImageNet validation dataset (50,000 images).

|       Metric        | Accuracy on IPU  |
| :-----------------: | :-------------: |
| top1& top5 accuracy | 75.62% / 92.52% |

## Citation


```bibtex
@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},
}
```