OpenVINO- The Model Optimizer
The Model Optimizer 允許你使用非 OpenVINO Pre-Trained 好的model. 如下圖: 首先你先訓練一個模型(如 Tensorflow),然後 將模型丟在 "Model Optimizer" 裡面傳換成 OpenVINO 的格式,然後再將轉好的檔 (訓練好的模型) 丟到 Inference Engine後再跟 User Application 互通。
安裝其他framework的 Model Optimizer
以windows 為例,在 OpenVINO的資料夾底下(C:\Program Files (x86)\IntelSWTools\openvino_2019.3.379\deployment_tools\model_optimizer\install_prerequisites),可以看到 OpenVINO 支援 caffe, Kaldi, mxnet, onnx and tf(tensorflow)
OpenVINO 裡 Optimization 的技巧
- Quantization - Weights 和 Biase 的精準度設定,要經準備小數點第幾位。
- Freezing- (只適用在Tensorflow): Frezzing 在 TensorFlow裡面會移除某些會移除某些只用在訓練時候的operation。例如:BackPropagation。所以當 OpenVINO 在轉換 TensorFlow訓練出來的模型,使用 Freezing,然後進行 Inference 就是一個很好的應用。
- Fusion:將多重層次的operation變成單層次的operation. 這個方法容易使用在 GPU 做 Inference的模型。一般都會散布在多個GPU執行的模型,OpenVINO最佳化的方式就是將其轉換成單一層次的 operation.
IR (Intermediate Representations) 轉換
其他 Framework 訓練好的 Model, 在 Model Optimizer 丟入 IR 後,會產生兩個文件檔,一個是 .xml, 另一個是 .bin
.xml 定義了 model 的架構及其他的 metadata
.bin存放了 weights, biases
這兩個檔案被 IR 出來後,才能丟進去 inference engineer和 user application作互動。
範例:轉 Tensorflow訓練好的模型
參考文件
- 假設我們需使用 ssd_mobilenet_v2 這個 tensorflow 已經訓練好的模型。使用 wget 來下載:
wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz
下載完,用 tar 解壓縮, 可以看到兩個重要檔案
pipeline.config : 包含模型的參數、訓練的參數及評估的參數等等。
fronzen_inference_graph.pb: 因為是 frozen, 所以是帶有權重的訓練好的網路模型。
接下來我們執行 mo.py 來轉換 Tensflow 所訓練好的模型,
python /opt/intel/openvino/deployment_tools/model_optimizer/mo.py --input_model frozen_inference_graph.pb --tensorflow_object_detection_api_pipeline_config pipeline.config --reverse_input_channels --tensorflow_use_custom_operations_config /opt/intel/openvino/deployment_tools/model_optimizer/extensions/front/tf/ssd_v2_support.json
參數說明
1) input_model : frozen 的 pb 檔
2)tensorflow_object_detection_api_pipeline_config : pipeline.config 檔
3) reverse_input_channels, 把 RGB 轉成 OpenVINO的 BRG
4)tensorflow_use_custom_operations_config: 這是輔助的設定檔,如你使用的是 TensorFlow* Object Detection API zoo 下載後的模型,你可以在 openVINO install path (/opt/intel/openvino/deployment_tools/model_optimizer/extensions/)找到輔助的使用檔。
執行上述指令後,產出 .xml 以及 .bin files ,完成!
總結來說 Model Optimizer 就是 將 其他訓練好的模型 (TF, Caffe, ONNX) 轉換成 OpenVINO 的 格式, 產生 bin及 xml檔。