YOLOX-OpenVINO in C++

This tutorial includes a C++ demo for OpenVINO, as well as some converted models.

Download OpenVINO models.

Model Parameters GFLOPs Test Size mAP Weights
YOLOX-Nano 0.91M 1.08 416x416 25.8 github
YOLOX-Tiny 5.06M 6.45 416x416 32.8 github
YOLOX-S 9.0M 26.8 640x640 40.5 github
YOLOX-M 25.3M 73.8 640x640 47.2 github
YOLOX-L 54.2M 155.6 640x640 50.1 github
YOLOX-Darknet53 63.72M 185.3 640x640 48.0 github
YOLOX-X 99.1M 281.9 640x640 51.5 github

Install OpenVINO Toolkit

Please visit Openvino Homepage for more details.

Set up the Environment

For Linux

Option1. Set up the environment tempororally. You need to run this command everytime you start a new shell window.

source /opt/intel/openvino_2021/bin/setupvars.sh

Option2. Set up the environment permenantly.

Step1. For Linux:

vim ~/.bashrc 

Step2. Add the following line into your file:

source /opt/intel/openvino_2021/bin/setupvars.sh

Step3. Save and exit the file, then run:

source ~/.bashrc

Convert model

  1. Export ONNX model

    Please refer to the ONNX toturial. Note that you should set –opset to 10, otherwise your next step will fail.

  2. Convert ONNX to OpenVINO

    cd <INSTSLL_DIR>/openvino_2021/deployment_tools/model_optimizer
    

    Install requirements for convert tool

    sudo ./install_prerequisites/install_prerequisites_onnx.sh
    

    Then convert model.

    python3 mo.py --input_model <ONNX_MODEL> --input_shape <INPUT_SHAPE> [--data_type FP16]
    

    For example:

    python3 mo.py --input_model yolox_tiny.onnx --input_shape [1,3,416,416] --data_type FP16
    

    Make sure the input shape is consistent with those in cpp file.

Build

Linux

source /opt/intel/openvino_2021/bin/setupvars.sh
mkdir build
cd build
cmake ..
make

Demo

c++

./yolox_openvino <XML_MODEL_PATH> <IMAGE_PATH> <DEVICE>