zoukankan      html  css  js  c++  java
  • OpenVINO学习系列1

    OpenVINO介绍

    OpenVINO是英特尔推出一套基于深度学习的计算机视觉加速优化框架,支持其它机器学习平台模型的压缩优化、加速计算等功能。 自发布以后就得到开发者的青睐,其强大的模型优化与压缩能力与加速计算引擎带来的速度提升让人十分惊喜,前面发布过一篇文章,详细介绍了OpenVINO的架构与其加速引擎(Inference Engine-IE)使用,如何帮助开发者在CPU上对深度学习的模型跑出实时帧率,文章链接如下:

    相关内容链接

    使用OpenVINO ToolKit 实时推断

    OpenCV调用Faster-RCNN对象检测网络

    其下载地址如下:

    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

     
  • 相关阅读:
    控制台——args参数的赋值方法
    整数排序的几种方法
    基于CentOS系统下的Oracle的安装
    QT的学习
    HDU 2104 hide handkerchief
    HDU 2103 Family Plan
    HDU 2115 I Love This Game
    HDU 2100 Lovekey
    猜数字游戏
    利用Hough变换识别图像中的直线
  • 原文地址:https://www.cnblogs.com/upright/p/11471000.html
Copyright © 2011-2022 走看看