【问题标题】:Whats the right way of using openCV with openVINO?将openCV与openVINO一起使用的正确方法是什么?
【发布时间】:2019-08-09 05:18:48
【问题描述】:

Dislcaimer:我之前从未使用过 openCV 或 openVINO,或者事实上任何接近 ML 的东西。然而,我一直在研究神经网络(在线阅读材料),因为我必须在边缘设备上使用英特尔的 openVINO。 以下是官方文档中关于将 openCV 与 openVINO 结合使用的内容(使用 openVINO 的推理引擎与 openCV)。

->使用openVINO的模型优化器优化预训练模型(创建IR文件对) 将这些 IR 文件用于

 openCV's dnn.readnet() //this is where the inference engine gets set? 

https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_raspbian.html

尝试挖掘更多并找到第三方参考。这里采取了一种差异化的方法。

->中间文件(不创建bin/xml,而是使用caffe模型文件)

->推理引擎使用以下行显式定义

net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)

https://www.learnopencv.com/using-openvino-with-opencv/

现在我知道要使用 openCV,我们必须使用它的推理引擎和预训练模型。我想知道这两种方法中哪一种是正确(或首选)的一种,如果相反,我没有遗漏任何东西。

【问题讨论】:

  • 我认为使用 OpenVINO 附带的 OpenCV,IE 后端是默认设置。至少在专门设置后端对我来说没有区别......但是使用“常规”openCV(没有可用的 IE)执行速度较慢,并且将后端显式设置为 IE 会导致错误(这很有意义)

标签: opencv neural-network conv-neural-network openvino


【解决方案1】:

您可以从以下位置开始使用 OpenVino:https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_windows.html

您需要一组先决条件来运行您的示例。 OpenCV 是您的计算机视觉软件包,可用于图像处理。

Openvino 推理要求您将任何经过训练的模型(.caffemodel、.pb 等)转换为中间表示(.xml、.bin)文件。

为了更好地了解 OpenVino 和示例演示,请观看视频/订阅 OpenVino Youtube 频道:https://www.youtube.com/channel/UCkN8KINLvP1rMkL4trkNgTg

【讨论】:

  • 感谢您抽出宝贵时间。我已经阅读了文档并且已经阅读了那部分。我了解模型优化器的作用、IR 文件是什么以及其他。我对使用 openVINO 和 openCV 以及使用 openCV 设置 openVINO 的推理引擎感到困惑
【解决方案2】:

如果你使用的拓扑是OpenVino支持的,最好的使用方式是openvino自带的opencv。为此,您需要

1.通过在你的openvino路径(C:\Program Files (x86)\IntelSWTools\openvino\bin)中运行setupvars.bat来初始化openvino环境

2.使用模型优化器为您的模型生成 IR 文件 (xml&bin)。

3.使用路径/inference_engine_samples_build/中的推理引擎样本运行

如果不支持拓扑,那么您可以执行您提到的其他过程。

【讨论】:

    【解决方案3】:

    我遇到的最常见的问题:

    • setupvars.bat 必须在同一个终端中运行,或者使用 os.environ["varname"] = varvalue
    • OpenCV 需要在构建时支持推理引擎(即 DLDT)。这里有预构建的二进制文件:https://github.com/opencv/opencv/wiki/Intel%27s-Deep-Learning-Inference-Engine-backend
    • 目标推理引擎:net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)
    • 目标 NCS2:net.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD)

    位于 OpenVino 目录中的 OpenCV 预构建二进制文件已经支持 IE,也是一个选项。

    请注意,神经计算棒 2 AKA NCS2 (OpenVino IE/VPU/MYRIAD) 需要 FP16 模型格式 (float16)。还要尽量让你的图像保持这种格式,以避免转换惩罚。不过,您可以输入以下任何格式的图像:FP32、FP16、U8

    我发现本指南很有帮助:https://learnopencv.com/using-openvino-with-opencv/

    这是一个针对来自https://medium.com/sclable/intel-openvino-with-opencv-f5ad03363a38 的 NCS2 的示例:

    # Load the model.
    net = cv2.dnn.readNet(ARCH_FPATH, MODEL_FPATH)
    
    # Specify target device.
    net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)
    net.setPreferableTarget(cv2.dnn.DNN_TARGET_MYRIAD) # NCS 2
    
    # Read an image.
    print("Processing input image...")
    img = cv2.imread(IMG_FPATH)
    if img is None:
        raise Exception(f'Image not found here: {IMG_FPATH}')
    
    # Prepare input blob and perform inference
    blob = cv2.dnn.blobFromImage(img, size=(672, 384), ddepth=cv2.CV_8U)
    net.setInput(blob)
    out = net.forward()
    
    # Draw detected faces
    for detect in out.reshape(-1, 7):
        conf = float(detect[2])
        xmin = int(detect[3] * frame.shape[1])
        ymin = int(detect[4] * frame.shape[0])
        xmax = int(detect[5] * frame.shape[1])
        ymax = int(detect[6] * frame.shape[0])
        
        if conf > CONF_THRESH:
            cv2.rectangle(img, (xmin, ymin), (xmax, ymax), color=(0, 255, 0))
    

    这里有更多示例(jupyter notebook/python):https://github.com/sclable/openvino_opencv

    【讨论】:

      猜你喜欢
      • 2018-04-10
      • 2013-01-02
      • 1970-01-01
      • 2020-08-27
      • 2020-07-10
      • 2020-09-29
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      相关资源
      最近更新 更多