标签:src OpenVINO lib int opencv 模块 ssd net IE
OpenVINO 学习笔记(5):IE 模块使用
- 本节主要记录使用 IE 模块来进行推理加速。
1. 编译环境配置
-
先新建项目,然后配置属性页。
-
将以下目录添加到配置包含目录
C:\IntelSWTools\openvino_2020.1.033\opencv\include
-
将以下目录添加到配置库目录
C:\IntelSWTools\openvino_2020.1.033\opencv\lib
-
将以下库添加到链接器输入
opencv_calib3d420d.lib opencv_core420d.lib opencv_dnn420d.lib opencv_features2d420d.lib opencv_flann420d.lib opencv_gapi420d.lib opencv_highgui420d.lib opencv_imgcodecs420d.lib opencv_imgproc420d.lib opencv_ml420d.lib opencv_objdetect420d.lib opencv_photo420d.lib opencv_stitching420d.lib opencv_video420d.lib opencv_videoio420d.lib
-
配置环境变量
C:\IntelSWTools\openvino_2020.1.033\opencv\lib
2. 模型下载与生成 pbtxt 文件
-
在测试代码前,我们还需要一些准备工作。
-
首先,我们需要下载模型文件。进入 models , 选择下载 ssd_mobilenet_v2_coco 模型文件。
-
下载完成之后,我们还需要生成一个 pbtxt 文件,才能在 dnn 里面载入模型文件。
-
在 opencv 编译文件目录中搜索 tf_text_graph_ssd.py ,然后在 tf_text_graph_ssd.py 文件夹中打开 cmd ,输入命令:
python tf_text_graph_ssd.py --input E:\OpenVINO_Study_Log\ssd_mobilenet_v2_coco_2018_03_29\frozen_inference_graph.pb --config E:\OpenVINO_Study_Log\ssd_mobilenet_v2_coco_2018_03_29\pipeline.config --output frozen_inference_graph.pbtxt
-
运行完成之后就会生成 pbtxt 文件。
-
注意自己的各文件路径。
-
接下来,我们就可以进行代码测试了。
3. 测试代码
-
在项目的源文件里,新建 main.cpp 。输入以下代码:
#include <opencv2/opencv.hpp> #include <opencv2/dnn.hpp> #include <iostream> using namespace cv; using namespace cv ::dnn; using namespace std; string model = "E:/OpenVINO_Study_Log/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb"; string config = "E:/OpenVINO_Study_Log/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pbtxt"; int main(int argc, char** argv) { Mat src = imread("C:/Users/LWL/Desktop/dl.jpg"); //读取图片 if (src.empty()) { printf("Load image failed"); return -1; } Net net = readNetFromTensorflow(model, config); // 载入模型网络 net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE); // 指定计算后台设备 net.setPreferableTarget(DNN_TARGET_CPU); // 指定计算设备 printf("ssd network model loaded...\n"); Mat blob = blobFromImage(src, 1.0, Size(300, 300), Scalar(), true, false, 5); net.setInput(blob); Mat detection = net.forward(); // 获取推断时间 vector<double> layerTimigs; double freq = getTickFrequency() / 1000; double time = net.getPerfProfile(layerTimigs) / freq; ostringstream ss; ss << "infernece:" << time << "ms"; putText(src, ss.str(), Point(50, 50), FONT_HERSHEY_SIMPLEX, 1, Scalar(255, 0, 0), 2, 8); // 在图片上打印推理所用时间 Mat detectionMat(detection.size[2], detection.size[3], CV_32F, detection.ptr<float>()); float threshold = 0.8; // 圈出可能目标 for (int i = 0; i < detectionMat.rows; i++) { float confidence = detectionMat.at<float>(i, 2); if (confidence > threshold) { int obj_index = (size_t)detectionMat.at<float>(i, 1); float tl_x = detectionMat.at<float>(i, 3) * src.cols; float tl_y = detectionMat.at<float>(i, 4) * src.rows; float br_x = detectionMat.at<float>(i, 5) * src.cols; float br_y = detectionMat.at<float>(i, 6) * src.rows; Rect object_box((int)tl_x, (int)tl_y, int(br_x - tl_x), int(br_y - tl_y)); rectangle(src, object_box, Scalar(0, 0, 255), 2, 8, 0); } } imshow("ssd_detection", src); // 显示图片 waitKey(0); // 等待用户按键 destroyAllWindows(); // 摧毁所有显示图片的窗口 return 0; }
4. 运行结果比较
- 如果 net.setPreferableBackend 的参数为:DNN_BACKEND_INFERENCE_ENGINE
- 如果 net.setPreferableBackend 的参数为:DNN_BACKEND_OPENCV
- 从上面两图可以看出,如果使用 ie ,可以有 4 到 5 倍的加速效果。
- 这还是由于我的 cpu 代数比较低,如果使用 6 代以上(包括 6 代)的 cpu,差不多可以有 10 倍加速效果。
5. 结语
- 如果其中有不对的地方或是需要改进的地方,请指正。
- 联系方式 email:1156494696@qq.com
- 本文到这就结束了。
标签:src,OpenVINO,lib,int,opencv,模块,ssd,net,IE 来源: https://blog.csdn.net/u011385476/article/details/104891572
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。