首页 > 解决方案 > 使用带有 gRPC api 的 tensorflow-serving 时出现不可接受的网络负载

问题描述

我正在使用 docker 设置 tensorflow 服务并提供 resnet50 模型。然后我启动一个客户端从摄像头捕捉图片并使用grpc进行推理。图像大小为480 * 480,帧率为30fps,我想知道为什么它占用70MB / s的网络速度。

import numpy as np
import cv2
import grpc
import requests
import tensorflow as tf
from tensorflow_serving.apis import prediction_service_pb2_grpc
from tensorflow_serving.apis import predict_pb2
from PIL import Image, ImageDraw, ImageFont
from dataset import *
import configparser
cf = configparser.ConfigParser()
cf.read("$HOME/.Wingo/config.yml") 
secs = cf.sections()
IMG_SIZE1=480
IMG_SIZE2=480
grpc_host=cf.get("Client", "grpc_host")
tf.app.flags.DEFINE_string('server', grpc_host,
                           'PredictionService host:port')
FLAGS = tf.app.flags.FLAGS
def test_show(send=None):
    video = cv2.VideoCapture(0)
    success, show_img = video.read()
    channel = grpc.insecure_channel(FLAGS.server)
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)
    request = predict_pb2.PredictRequest()
    request.model_spec.name = '1'
    request.model_spec.signature_name = 'predict'
    while(True):
        success, frame = video.read()
        show_img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        show_img = Image.fromarray(show_img)
        if success:
            data = get_sigle_data(frame, False)
            X=np.array(data)
            print((tf.make_tensor_proto(X, shape=[1,IMG_SIZE1,IMG_SIZE2,3])))
            request.inputs['inputs'].CopyFrom(
                tf.make_tensor_proto(X, shape=[1,IMG_SIZE1,IMG_SIZE2,3]))
            result = stub.Predict(request, 10.0)
            y=result.outputs['output'].float_val
            show_img = cv2.cvtColor(np.array(show_img), cv2.COLOR_RGB2BGR)
            cv2.imshow('test', show_img)
            cv2.waitKey(1)
        else:
            print("camera is not open!!!")
test_show()

标签: tensorflow-serving

解决方案


如果视频流未压缩,则可以。假设您为图像使用灰度:

480*480*30/1024/1024 = 6.59 MB/s = 52.73 Mbps

此外,网络带宽单位通常Mbps不是MB/s.


推荐阅读