主要参考:
- 【maskrcnn版本】https://github.com/matterport/Mask_RCNN
- 【部署参考】https://github.com/bendangnuksung/mrcnn_serving_ready
- 【其他参考】https://github.com/huyhoang17/matterport-maskrcnn-with-tensorflow-serving
生成savedmodel
根据【部署参考】生成,自定义配置在附录中,
所用cooc模型地址: https://pan.baidu.com/s/14QeaR0shNdOaSvWNJnD7YQ 提取码: ibwg
启动tf_server的docker
docker pull tensorflow/serving:1.15.0-gpu
docker pull tensorflow/serving:1.14.0-gpu
启动例子
根据自己参数修改
docker run --runtime=nvidia \
-p 8500:8500 -p 8501:8501 \
--name mask \
-e MODEL_NAME=mask \
-v /home/xxx/models/serving_model:/models/mask \
tensorflow/serving:1.15.0-gpu \
--per_process_gpu_memory_fraction=0.3
参数解析:
-v 将 savedmodel 本地位置挂载到容器下 /models/
-e MODEL_NAME xx 要和挂载 /models/xx 名字相同
--name 表示容器的名字
--runtime=nvidia docker可调用gpu (安装 nvidia-docker2)
tensorflow/serving:1.15.0-gpu 启动镜像的TAG 顺序很重要
--per_process_gpu_memory_fraction=0.3 (显存使用使用限制在本机显存*0.3)
遇到问题1
AbortionError(code=StatusCode.NOT_FOUND, details="Servable not found for request: Latest(“’mask”)
这个问题是使用grpc与tfserver通信时,MODEL_NAME与request.model_spec.name不一致问题
我当时多打了一个 ‘ 找了很久
【参考】https://github.com/tensorflow/serving/issues/441
遇到问题2
grpc_message":"NodeDef mentions attr 'incompatible_shape_error'
Check whether your GraphDef-interpreting binary is up to date with your GraphDef-generating binary
[[roi_align_classifier/Equal_3]]","grpc_status":3}"
【解决方法】
附录
【配置】https://github.com/bendangnuksung/mrcnn_serving_ready/blob/master/user_config.py
所用mask模型地址: https://pan.baidu.com/s/14QeaR0shNdOaSvWNJnD7YQ 提取码: ibwg
import os
# User Define parameters
# Make it True if you want to use the provided coco weights
is_coco = False
# keras model file path
H5_WEIGHT_PATH = './models/mask_rcnn_coco.h5'
MODEL_DIR = os.path.dirname(H5_WEIGHT_PATH) # 去掉文件名,返回目录
# Path where the Frozen PB will be save
PATH_TO_SAVE_FROZEN_PB = './models/frozen_model/'
# Name for the Frozen PB name
FROZEN_NAME = 'mask_frozen_graph.pb'
# PATH where to save serving model
PATH_TO_SAVE_TENSORFLOW_SERVING_MODEL = './models/serving_model'
# Version of the serving model
VERSION_NUMBER = 1
# Number of classes that you have trained your model
NUMBER_OF_CLASSES = 80 # coco is 80