华为计算微信公众号
昇腾AI开发者公众号
华为计算微博
华为计算今日头条
使用同一模型,同一输入图片,同一后处理配置,流程编排与调用API结果不一样
以下是调用API推理的代码
import numpy as np # 用于对多维数组进行计算 import cv2 # 图片处理三方库,用于对图片进行前后处理 from mindx.sdk import Tensor # mxVision 中的 Tensor 数据结构 from mindx.sdk import base # mxVision 推理接口 from mindx.sdk.base import post, ResizedImageInfo '''初始化资源和变量''' base.mx_init() # 初始化 mxVision 资源 pic_path = 'horse.jpg' # 单张图片 device_id = 0 # 指定运算的Device config_path = 'model/yolov3_tf_bs1_fp16.cfg' # 后处理配置文件 label_path = 'model/coco.names' # 类别标签文件 img_size = 416 model_path = "model/yolov3_tf_bs1_fp16.om" # 模型路径 '''加载图片''' img_bgr = cv2.imread(pic_path) H, W, C = img_bgr.shape IP = base.ImageProcessor() img = IP.decode(pic_path) img = IP.resize(img, base.Size(416, 416)) img = img.get_tensor() a = ResizedImageInfo() a.heightOriginal = H a.heightResize = 416 a.resizeType = base.resize_stretching a.widthOriginal = W a.widthResize = 416 '''模型推理''' model = base.model(modelPath=model_path, deviceId=device_id) # 初始化 base.model 类 output = model.infer([img]) # 执行推理。输入数据类型: '''后处理''' postprocessor = post.Yolov3PostProcess(config_path=config_path, label_path=label_path) # 获取后处理对象 pred = postprocessor.process(output, a) print(pred)
以下是流程编排的pipeline
{ "stream0":{ "appsrc0":{ "factory":"appsrc", "next":"mxpi_imagedecoder0", "props":{ "blocksize":"409600", "name":"test_appsrc" } }, "mxpi_imagedecoder0":{ "factory":"mxpi_imagedecoder", "next":"mxpi_imageresize0" }, "mxpi_imageresize0":{ "factory":"mxpi_imageresize", "next":"mxpi_tensorinfer0", "props":{ "resizeWidth":"416", "resizeHeight":"416" } }, "mxpi_tensorinfer0":{ "factory":"mxpi_tensorinfer", "next":"mxpi_objectpostprocessor0", "props":{ "modelPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/yolov3_tf_bs1_fp16.om", "name":"test_mxpi_tensorinfer", "waitingTime":"5000", "dataSource":"auto" } }, "mxpi_objectpostprocessor0":{ "factory":"mxpi_objectpostprocessor", "next":"appsink1", "props":{ "postProcessLibPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/libyolov3postprocess.so", "funcLanguage":"c++", "labelPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/coco.names", "postProcessConfigPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/yolov3_tf_bs1_fp16.cfg" } }, "appsink1":{ "factory":"appsink" }, "stream_config":{ "deviceId":"0" } } }
以下是流程编排的主函数:
import time import numpy as np # 用于对多维数组进行计算 import cv2 # 图片处理三方库,用于对图片进行前后处理 import os # from quirt.sdk import Tensor # mxVision 中的 Tensor 数据结构 from mindx.sdk import base # mxVision 推理接口 from mindx.sdk.base import post # post.Resnet50PostProcess 为 resnet50 后处理接口 from StreamManagerApi import StreamManagerApi, MxDataInput, StringVector, StringVector base.mx_init() # 初始化 mxVision 资源 streamManagerApi = StreamManagerApi() ret = streamManagerApi.InitManager() if ret != 0: print("Failed to init Stream manager, ret=%s" % str(ret)) exit() else: print("-----------------创建流管理StreamManager并初始化-----------------") pipline_path = 'pipeline/picin.pipeline' with open(pipline_path, 'rb') as f: print("-----------------正在读取读取pipeline-----------------") pipelineStr = f.read() print("-----------------成功读取pipeline-----------------") ret = streamManagerApi.CreateMultipleStreams(pipelineStr) if ret != 0: print("-----------------未能成功创建流-----------------") print("-----------------Failed to create Stream, ret=%s-----------------" % str(ret) ) else: print("-----------------成功创建流-----------------") print("-----------------Create Stream Successfully, ret=%s-----------------" % str(ret) ) STREAM_NAME = b'stream0' # 流的名称 dataInput = MxDataInput() picpath = 'horse.jpg' with open(picpath, 'rb') as f: print("-----------------开始读取图片-----------------") dataInput.data = f.read() print("-----------------读取图片成功-----------------") uniqueId = streamManagerApi.SendData(STREAM_NAME, 0, dataInput) # SendData接口将图片数据发送给appsrc元件 a = streamManagerApi.GetResult(STREAM_NAME, 0, 2000) print(a.data.decode()) streamManagerApi.DestroyAllStreams()
使用API推理的结果:
使用流程编排推理结果:
结果为空,因此来证明推理方式结果不一样
我要发帖子
使用同一模型,同一输入图片,同一后处理配置,流程编排与调用API结果不一样
以下是调用API推理的代码
以下是流程编排的pipeline
{ "stream0":{ "appsrc0":{ "factory":"appsrc", "next":"mxpi_imagedecoder0", "props":{ "blocksize":"409600", "name":"test_appsrc" } }, "mxpi_imagedecoder0":{ "factory":"mxpi_imagedecoder", "next":"mxpi_imageresize0" }, "mxpi_imageresize0":{ "factory":"mxpi_imageresize", "next":"mxpi_tensorinfer0", "props":{ "resizeWidth":"416", "resizeHeight":"416" } }, "mxpi_tensorinfer0":{ "factory":"mxpi_tensorinfer", "next":"mxpi_objectpostprocessor0", "props":{ "modelPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/yolov3_tf_bs1_fp16.om", "name":"test_mxpi_tensorinfer", "waitingTime":"5000", "dataSource":"auto" } }, "mxpi_objectpostprocessor0":{ "factory":"mxpi_objectpostprocessor", "next":"appsink1", "props":{ "postProcessLibPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/libyolov3postprocess.so", "funcLanguage":"c++", "labelPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/coco.names", "postProcessConfigPath":"/root/MindStudio-WorkSpace/MindX_RTSP_Multi_6103d0a9/model/yolov3_tf_bs1_fp16.cfg" } }, "appsink1":{ "factory":"appsink" }, "stream_config":{ "deviceId":"0" } } }以下是流程编排的主函数:
import time import numpy as np # 用于对多维数组进行计算 import cv2 # 图片处理三方库,用于对图片进行前后处理 import os # from quirt.sdk import Tensor # mxVision 中的 Tensor 数据结构 from mindx.sdk import base # mxVision 推理接口 from mindx.sdk.base import post # post.Resnet50PostProcess 为 resnet50 后处理接口 from StreamManagerApi import StreamManagerApi, MxDataInput, StringVector, StringVector base.mx_init() # 初始化 mxVision 资源 streamManagerApi = StreamManagerApi() ret = streamManagerApi.InitManager() if ret != 0: print("Failed to init Stream manager, ret=%s" % str(ret)) exit() else: print("-----------------创建流管理StreamManager并初始化-----------------") pipline_path = 'pipeline/picin.pipeline' with open(pipline_path, 'rb') as f: print("-----------------正在读取读取pipeline-----------------") pipelineStr = f.read() print("-----------------成功读取pipeline-----------------") ret = streamManagerApi.CreateMultipleStreams(pipelineStr) if ret != 0: print("-----------------未能成功创建流-----------------") print("-----------------Failed to create Stream, ret=%s-----------------" % str(ret) ) else: print("-----------------成功创建流-----------------") print("-----------------Create Stream Successfully, ret=%s-----------------" % str(ret) ) STREAM_NAME = b'stream0' # 流的名称 dataInput = MxDataInput() picpath = 'horse.jpg' with open(picpath, 'rb') as f: print("-----------------开始读取图片-----------------") dataInput.data = f.read() print("-----------------读取图片成功-----------------") uniqueId = streamManagerApi.SendData(STREAM_NAME, 0, dataInput) # SendData接口将图片数据发送给appsrc元件 a = streamManagerApi.GetResult(STREAM_NAME, 0, 2000) print(a.data.decode()) streamManagerApi.DestroyAllStreams()使用API推理的结果:
使用流程编排推理结果:
结果为空,因此来证明推理方式结果不一样