我正在尝试安装 Openvino 将 Keras 模型转换为推理引擎的表示形式。我正在运行命令:
\npython3 openvino/tools/mo/mo_tf.py \xe2\x80\x94model_13.h5/ --input_shape=\\[180,180\\]\n\nRun Code Online (Sandbox Code Playgroud)\n这会返回错误:
\nfrom openvino.tools.mo.subprocess_main import subprocess_main\nModuleNotFoundError: No module named 'openvino'\nRun Code Online (Sandbox Code Playgroud)\n我试过了pip install openvino但始终得到:
ERROR: Could not find a version that satisfies the requirement openvino (from versions: none)\nERROR: No matching distribution found for openvino\nRun Code Online (Sandbox Code Playgroud)\n为了尝试确保运行脚本和安装 Openvino 的 python 版本相同,我尝试过:
\npython3 -m pip install openvino\n\nRun Code Online (Sandbox Code Playgroud)\nmo_tf.py 脚本的内容很简单:
\n#!/usr/bin/env python3\n\n# Copyright (C) 2018-2021 Intel Corporation\n# SPDX-License-Identifier: Apache-2.0\n\n\nif __name__ == "__main__":\n from openvino.tools.mo.subprocess_main import subprocess_main\n …Run Code Online (Sandbox Code Playgroud) 我已经转换了 Keras 模型以与 OpenVino 一起使用。最初的 Keras 模型使用 sigmoid 返回 0 到 1 范围内的分数进行二元分类。将模型转换为与 OpenVino 一起使用后,两个类别的分数均接近 0.99,但其中一个类别的分数似乎略低。
例如,test1.jpg 和 test2.jpg(来自相反的类别)分别产生 0.00320357 和 0.9999 的分数。
使用 OpenVino,相同的图像分别产生 0.9998982 和 0.9962392 的分数。
编辑* 一种怀疑是输入数组仍然被 OpenVino 模型接受,但在形状上发生了某种改变或“扰乱”,因此永远不会匹配第一类?换句话说,如果你给它输入随机噪声,分数也将始终为 0.9999。也许我必须以某种方式让 OpenVino 模型接受原始形状 (1,180,180,3) 而不是 (1,3,180,180),这样我就不必强制输入与原始模型接受的形状不同?但这很奇怪,因为我在为 openvino 制作 xml 和 bin 时指定了形状:
python3 /opt/intel/openvino_2021/deployment_tools/model_optimizer/mo_tf.py --saved_model_dir /Users/.../Desktop/.../model13 --output_dir /Users/.../Desktop/... --input_shape=\[1,180,180,3]
Run Code Online (Sandbox Code Playgroud)
但是,我从错误消息中得知,推理引擎出于某种未知原因正在期待 (1,3,180,180)。这可能是问题所在吗?另一个怀疑是原始模型的冻结方式有问题。我正在探索不同的方法来冻结原始模型(keras 模型转换为 pb),以防问题与此相关。
我检查以确保 OpenVino 实现中使用了 Sigmoid 激活函数(与 Keras 模型相同的激活),看起来确实如此。那么,为什么这些值不一样呢?任何帮助将非常感激。
OpenVino推理的代码是:
import openvino
from openvino.inference_engine import IECore, IENetwork
from skimage import io
import sys
import numpy as …Run Code Online (Sandbox Code Playgroud) 如何解决这个问题?我尝试过dtype=None在image.img_to_array method.
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import matplotlib.pyplot as plt
from keras.preprocessing import image
image_size = (180, 180)
batch_size = 32
model = keras.models.load_model('best_model.h5')
img = keras.preprocessing.image.load_img(
"GarnetCreek_7-15-2019.jpeg", target_size=image_size
)
img_array = image.img_to_array(img)
img_array = tf.expand_dims(img_array, 0) # Create batch axis
predictions = model.predict(img_array)
score = predictions[0]
Run Code Online (Sandbox Code Playgroud)
这会引发以下错误:
Traceback (most recent call last):
img_array = image.img_to_array(img, dtype=None)
return image.img_to_array(img, data_format=data_format, **kwargs)
x = np.asarray(img, dtype=dtype)
return array(a, dtype, …Run Code Online (Sandbox Code Playgroud) 我有以下使用 FastApi 和 Uvicorn 的代码用于 ASGI 服务器实现。它应该通过发布请求获取上传的图像,并在返回响应之前使用模型对其进行分类。该错误似乎与 Uvicorn 有关,但我不知所措。任何帮助将非常感激。以前有人见过这样的错误吗?这是代码:
import uvicorn
from fastapi import FastAPI, File, UploadFile
import sys
from PIL import Image
from io import BytesIO
import numpy as np
import tensorflow as tf
from tensorflow import keras
from tensorflow.keras import layers
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing import image
import PIL
import sys
from cv2 import cv2
from scipy import misc
import os
import shutil
from pathlib import Path
from tempfile import NamedTemporaryFile
from typing import Callable
app …Run Code Online (Sandbox Code Playgroud)