tensorflow-serving - 使用带有 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()
解决方案
如果视频流未压缩,则可以。假设您为图像使用灰度:
480*480*30/1024/1024 = 6.59 MB/s = 52.73 Mbps
此外,网络带宽单位通常Mbps
不是MB/s
.