OpenVINO学习系列1
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