0

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

尝试挖掘更多并找到第三方参考。这里采取了不同的方法。

->Intermediatte 文件(不创建 bin/xml。而是使用 caffe 模型文件)

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

net.setPreferableBackend(cv2.dnn.DNN_BACKEND_INFERENCE_ENGINE)

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

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

4

3 回答 3

2

您可以从以下位置开始使用 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

于 2019-08-09T07:00:24.833 回答
1

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

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

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

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

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

于 2019-08-16T05:53:36.910 回答
0

我遇到的最常见的问题:

  • 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

于 2021-01-28T19:12:29.503 回答