From 654a4f9231753bddc0b77e42d6d53245be546a10 Mon Sep 17 00:00:00 2001 From: wangjiawei04 Date: Tue, 19 May 2020 13:32:20 +0800 Subject: [PATCH] add cascade rcnn --- python/examples/cascade_rcnn/README.md | 21 +++++++++++++ python/examples/cascade_rcnn/README_CN.md | 21 +++++++++++++ python/examples/cascade_rcnn/get_data.sh | 2 ++ .../paddle_serving_app/reader/image_reader.py | 31 +++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 python/examples/cascade_rcnn/README.md create mode 100644 python/examples/cascade_rcnn/README_CN.md create mode 100644 python/examples/cascade_rcnn/get_data.sh diff --git a/python/examples/cascade_rcnn/README.md b/python/examples/cascade_rcnn/README.md new file mode 100644 index 00000000..87617a84 --- /dev/null +++ b/python/examples/cascade_rcnn/README.md @@ -0,0 +1,21 @@ +# Cascade RCNN model on Paddle Serving + +([简体中文](./README_CN.md)|English) + +### Get The Cascade RCNN Model +``` +sh get_data.sh +``` +If you want to have more detection models, please refer to [Paddle Detection Model Zoo](https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.2/docs/MODEL_ZOO_cn.md) + +### Start the service +``` +python -m paddle_serving_server_gpu.serve --model serving_server --port 9292 --gpu_id 0 +``` + +### Perform prediction +``` +python test_client.py +``` + +Image with bounding boxes and json result would be saved in `output` folder. diff --git a/python/examples/cascade_rcnn/README_CN.md b/python/examples/cascade_rcnn/README_CN.md new file mode 100644 index 00000000..a37cb473 --- /dev/null +++ b/python/examples/cascade_rcnn/README_CN.md @@ -0,0 +1,21 @@ +# 使用Paddle Serving部署Cascade RCNN模型 + +(简体中文|[English](./README.md)) + +## 获得Cascade RCNN模型 +``` +sh get_data.sh +``` +如果你想要更多的检测模型,请参考[Paddle检测模型库](https://github.com/PaddlePaddle/PaddleDetection/blob/release/0.2/docs/MODEL_ZOO_cn.md) + +### 启动服务 +``` +python -m paddle_serving_server_gpu.serve --model serving_server --port 9292 --gpu_id 0 +``` + +### 执行预测 +``` +python test_client.py +``` + +客户端已经为图片做好了后处理,在`output`文件夹下存放各个框的json格式信息还有后处理结果图片。 diff --git a/python/examples/cascade_rcnn/get_data.sh b/python/examples/cascade_rcnn/get_data.sh new file mode 100644 index 00000000..0aa9c7dc --- /dev/null +++ b/python/examples/cascade_rcnn/get_data.sh @@ -0,0 +1,2 @@ +wget --no-check-certificate https://paddle-serving.bj.bcebos.com/pddet_demo/cascade_rcnn_r50_fpx_1x_serving.tar.gz +tar xf cascade_rcnn_r50_fpx_1x_serving.tar.gz diff --git a/python/paddle_serving_app/reader/image_reader.py b/python/paddle_serving_app/reader/image_reader.py index 8791e94b..0c29bce1 100644 --- a/python/paddle_serving_app/reader/image_reader.py +++ b/python/paddle_serving_app/reader/image_reader.py @@ -465,6 +465,37 @@ class Resize(object): _cv2_interpolation_to_str[self.interpolation]) +class PadStride(object): + """ padding image for model with FPN + Args: + stride (bool): model with FPN need image shape % stride == 0 + """ + + def __init__(self, stride): + self.coarsest_stride = stride + + def __call__(self, img): + """ + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + Returns: + im (np.ndarray): processed image (np.ndarray) + im_info (dict): info of processed image + """ + coarsest_stride = self.coarsest_stride + if coarsest_stride == 0: + return img + im_c, im_h, im_w = img.shape + pad_h = int(np.ceil(float(im_h) / coarsest_stride) * coarsest_stride) + pad_w = int(np.ceil(float(im_w) / coarsest_stride) * coarsest_stride) + padding_im = np.zeros((im_c, pad_h, pad_w), dtype=np.float32) + padding_im[:, :im_h, :im_w] = img + im_info = {} + im_info['resize_shape'] = padding_im.shape[1:] + return padding_im + + class Transpose(object): def __init__(self, transpose_target): self.transpose_target = transpose_target -- GitLab