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 by Mark Sandler et al. and first released in this repository.

We develop a modified version that could be supported by AMD Ryzen AI.

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 to look for fine-tuned versions on a task that interests you.

How to use

Installation

  1. Follow Ryzen AI Installation to prepare the environment for Ryzen AI.

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

    pip install -r requirements.txt 
    

Test & Evaluation

  • Inference one image (Image Classification):

    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.

      python eval_onnx.py  --onnx_model=./mobilenetv2_int8.onnx --data_dir=./{DATA_PATH}
      
    • Test accuracy of the quantized model on IPU.

      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

@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},
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Inference Providers NEW
This model is not currently available via any of the supported Inference Providers.
The model cannot be deployed to the HF Inference API: The model has no library tag.

Dataset used to train amd/mobilenet_v2_1.0_224