使用OpenVINO从动物园优化Tensorflow MaskRCNN

时间:2019-01-05 19:41:34

标签: python tensorflow conv-neural-network intel openvino

此主题与英特尔论坛==> Here <==上的这个问题有关

我想运行tensorflow MaskRCNN来分割一些缺陷,但是我有一些矛盾之处:

  • 没有硬件更改(i5-64位,没有GPU)
  • 推理时间应短于采集时间(3秒/图像)

为此,我使用了Tensorflow对象检测动物园中的mask_rcnn_inception_v2_coco

  1. 使用我自己的特征重新训练模型=>确定
  2. 生成Frozen_inference_graph =>确定
  3. 构建看门狗以处理图像=>确定

我面临的问题是处理图像的操作是12秒。为了解决此问题,我尝试使用OpenVINO模型优化器解决方案: OpenVINO WorkFlow

安装库之后,我使用了以下命令:

python .\mo_tf.py --input_model "<path>\frozen_inference_graph.pb"
--tensorflow_use_custom_operations_config 
extensions/front/tf/mask_rcnn_support_api_v1.11.json 
--tensorflow_object_detection_api_pipeline_config 
'<path>\mask_rcnn_inception_v2_coco.config'

[ SUCCESS ] Generated IR model.
[ SUCCESS ] XML file: <path>\frozen_inference_graph.xml
[ SUCCESS ] BIN file: <path>\frozen_inference_graph.bin
[ SUCCESS ] Total execution time: 24.00 seconds.

接下来,我想用Python构建自己的推理引擎。 我是这样做的:

# Loading Network :

network=IENetwork(model=MODEL_XML,weights=MODEL_BIN)
network.add_outputs("detection_output")

input_wrapper = next(iter(network.inputs))
n, c, h, w = network.inputs[input_wrapper].shape
out_wrapper = next(iter(network.outputs))

plugin=IEPlugin(device="CPU")
log.info("Loading CPU Extension...")
plugin.add_cpu_extension(CPU_EXTPATH)

supported_layers = plugin.get_supported_layers(network)
not_supported_layers = [l for l in network.layers.keys() if l not in supported_layers]
if len(not_supported_layers) != 0:
  log.error("Not Supported Layers : "+str(not_supported_layers))

Execution_Network=plugin.load(network=network)
del network
log.info("Network Loaded")

# Inference :
image_np = cv2.imread(imagepath)
im = cv2.cvtColor(image_np,cv2.COLOR_BGR2RGB)
image_org=image_np.copy()
#used to resize image with good dimensions
i0=image_to_tensor(im,c,h,w)
res=Execution_Network.infer(inputs={input_wrapper: i0})

要生成张量,我使用此函数:

def image_to_tensor(image,channels,h,w,info=""):
  print(image[0])
  image_tensor=np.zeros(shape=(1,channels,h,w),dtype=np.float32)
  if image.shape[:-1]!=(h,w):
    log.warning("Image {} is resized from {} to {}".format(info, image.shape[:-1],(h,w)))
  image=cv2.resize(image,(w,h))
  image = image.transpose((2, 0, 1))
  image_tensor[0]=image

  return image_tensor

此后,我构建了自己的自定义函数,以便处理Boundingbox和蒙版(例如使用Tensorflow ObjectDetectionAPI方法的包装器)。

所有这些似乎都可以发挥作用。 问题是,与Tensorflow相比,概率更低并且类别错误。

Openvino: OpenVino Tensorflow: Tensorflow

当我在同一网络上使用OpenVINO maskrcnn_demo时,它似乎可以工作:

Average running time of one iteration: 6774.36 ms
[ INFO ] Processing output blobs
[ INFO ] Detected class 16 with probability 0.98652: [2043.3, 1104.9], [2412.87, 1436.52]
[ INFO ] Image out.png created!
[ INFO ] Execution successful

然后问题出在python引擎上,而不是模型导出上。enter code here

有人已经面临这种行为吗? 是正常的,并且是由于OpenVINO的优化造成的,还是我的操作方式存在问题?

谢谢!

0 个答案:

没有答案