OpenVINO介紹
OpenVINO是英特爾推出一套基於深度學習的計算機視覺加速優化框架,支持其它機器學習平台模型的壓縮優化、加速計算等功能。 自發布以后就得到開發者的青睞,其強大的模型優化與壓縮能力與加速計算引擎帶來的速度提升讓人十分驚喜,前面發布過一篇文章,詳細介紹了OpenVINO的架構與其加速引擎(Inference Engine-IE)使用,如何幫助開發者在CPU上對深度學習的模型跑出實時幀率,文章鏈接如下:
相關內容鏈接
其下載地址如下:
https://software.intel.com/en-us/openvino-toolkit/choose-download/free-download-windows
核心組件與功能
OpenVINO主要包括兩個核心組件一個預訓練模型庫
核心組件-模型優化器
模型優化器Model Optimizer,模型優化器支持的深度學習框架包括
-ONNX -TensorFlow -Caffe -MXNet
核心組件-推斷引擎
推斷引擎(Inference Engine)支持硬件指令集層面的深度學習模型加速運行,同時對傳統的OpenCV圖像處理庫也進行了指令集優化,有顯著的性能與速度提升。支持的硬件平台包括如下:
-GPU -GPU -FPGA -MYRIAD(英特爾加速計算棒第一代與第二代) -HDDL -GAN
公開模型庫
Intel發布的大量預訓練模型,這些模型包括


這些模型庫涵蓋了很多視覺應用場景的通用模型,可以快速的搭建項目原型,得到效果,同時還支持把tensorflow/caffe等框架訓練出來的模型通過模型優化器,優化處理成為二進制IR模型。
使用預訓練模型實現車輛與車牌檢測
OpenCV4.0 DNN模塊支持直接加載這些模型,API為:
Net cv::dnn::readNetFromModelOptimizer( const String &xml, const String &bin ) 其中 Xml表示模型配置信息文件 Bin表示二進制的模型文件
在OpenCV DNN中加載車輛與車牌檢測模型,代碼如下:
// 加載模型
Net net = readNetFromModelOptimizer(xmlInfo, binModel); net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE); net.setPreferableTarget(DNN_TARGET_CPU);
使用模型進行預測代碼如下:
// 運行網絡
Mat blob = blobFromImage(image, 1.0, Size(300, 300), Scalar(), false, false, 5); net.setInput(blob); Mat detection = net.forward();
對輸出的detection進行解析之后顯示:
// 解析輸出結果
for (int i = 0; i < detectionMat.rows; i++) { float confidence = detectionMat.at<float>(i, 2); if (confidence > confidence_threshold) { size_t objIndex = (size_t)(detectionMat.at<float>(i, 1)); float tl_x = detectionMat.at<float>(i, 3) * image.cols; float tl_y = detectionMat.at<float>(i, 4) * image.rows; float br_x = detectionMat.at<float>(i, 5) * image.cols; float br_y = detectionMat.at<float>(i, 6) * image.rows; Rect object_box((int)tl_x, (int)tl_y, (int)(br_x - tl_x), (int)(br_y - tl_y)); rectangle(image, object_box, Scalar(0, 0, 255), 2, 8, 0); } }
運行結果如下所示:

圖像大小為1600x1200