![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiYWan5SO0EWZ5EzYidTYhlDMllTOhFWYmJzY1EGM3YzN5QWO58CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.gif)
點選上方藍字關注我們
關注:OpenCV幹貨與教程第一時間送達!
歡迎星标或者置頂【OpenCV學堂】
概述
OpenVINO中模型優化器(Model Optimizer)支援tensorflow/Caffe模型轉換為OpenVINO的中間層表示IR(intermediate representation),進而實作對模型的壓縮與優化,友善推斷引擎更快的加載與執行這些模型。以tensorflow對象檢測架構支援的SSD MobileNet v2版本的模型為例,實作從tensorflow的pb檔案到IR格式的bin與xml檔案生成。全部的過程可以分為三個部分,下面一一解析!
Tensorflow層支援
模型優化器對各種深度學習架構模型的支援并非是100%的,以tensorflow為例,隻有下面這些層建構的模型才可以被模型優化器轉換為中間層IR(.xml與.bin檔案),R5版本支援的層清單如下:
注意:上述支援層建構的tensorflow模型才可以被轉換成IR模型!
特别值得贊揚的是模型優化器在R4版本中開始支援原生的tensorflow與基于tensorflow對象檢測架構預訓練與遷移學習兩種方式生成的tensorflow模型。
轉換腳本運作
在使用轉換腳本之前,首先需要安裝tensorflow支援,如果之前電腦上已經安裝了tensorflow可以跳過此步!完整的從tensorflow模型到中間層IR轉換步驟可以分為如下幾步:
01
配置模型優化器依賴
主要是要安裝tensorflow架構支援
// 如果已經安裝可以跳過此步
02
導出PB檔案或者當機預測圖
如果不知道如何操作可以看我們公衆号以前的文章即可,文章連結如下:
Tensorflow如何導出與使用預測圖
tensorflow模型導出與OpenCV DNN中使用
03
使用模型優化器生成腳本生成IR檔案
xml檔案-描述網絡拓撲結構
bin檔案-包含權重參數的二進制檔案
打開cmd指令行,首先到openvino安裝好的模型優化器目錄下
/deployment_tools/model_optimizer
裡面有很多轉換模型的腳本,其中mo_tf.py是支援把tensorflow模型轉換為IR,腳本運作指令行如下:
python mo_tf.py --input_model .pb --log_level DEBUG
預設生成的模型會在/deployment_tools/model_optimizer該目錄下面。其中
--input_model表示tensorflow模型的pb檔案路徑
--log_level表示輸出調試資訊
--output_dir聲明IR輸出保持路徑
--reverse_input_channels表示交換R與B通道順序
上述的運作腳本與參數隻能支援tensorflow本身的導出PB檔案,對tensorflow對象檢測架構中的預訓練模型與自定義訓練生成的模型無法正确生成IR。Tensorflow object detection API訓練出來的模型必須通過下面的指令行參數才可以正确生成IR
--input_model
預訓練的模型(二進制的bp檔案路徑)
--tensorflow_use_custom_operations_config
用來替換來自對象檢測架構模型網絡結構的子圖配置與比對檔案,必須跟模型一一對應.
目前支援的模型配置json檔案包括如下:ssd_v2_support
--tensorflow_object_detection_api_pipeline_config
來自對象檢測架構導出模型時候config檔案,描述模型的結構與訓練相關資訊。
--input_shape
模型的輸入資料,相當于對象檢測網絡中image_tensor的四維資料
以對象檢測網絡中SSD MobileNet V2版本為例,執行如下腳本即可轉換為IR模型:
python mo_tf.py /
--input_model D:\tensorflow\ssd_mobilenet_v2_coco_2018_03_29\frozen_inference_graph.pb /
--tensorflow_use_custom_operations_config extensions/front/tf/ssd_v2_support.json /
--output="detection_boxes,detection_scores,num_detections" /
--tensorflow_object_detection_api_pipeline_config D:\tensorflow\ssd_mobilenet_v2_coco_2018_03_29\pipeline.config /
--data_type FP32
其中
--data_type 表示資料類型, 支援FP16 FP32 half float四種格式
選擇FP16或者half模型壓縮後大小大概是原來的二分之左右,這樣模型可以在受限的嵌入式裝置上運作。運作指令行,會生成SSD MobileNet V2版本的xml與bin檔案
運作輸出與結果:
使用IR模型
轉換為IR的模型同樣可以在OpenCV DNN中使用,完成對象檢測,示範代碼如下:
string binModel =
運作結果如下:
如此成功解鎖tensorflow模型到OpenVINO中間層模型壓縮與優化輸出IR檔案,并通過OpenCV DNN 加載IR檔案實作模型使用IE加速預測。記得點【在看】
往期回顧
使用OpenVINO ToolKit 實時推斷
系列 | OpenVINO視覺加速庫使用一
Tensorflow如何導出與使用預測圖
用Tensorflow Object Detection API實作對象檢測
Windows下安裝Tensorflow Object Detection API
金舟不能淩陽侯之波
玉馬不任騁千裡之迹
【掃碼關注我們】