From 71a954610e0f42b7fa697096dd888bd67c536de5 Mon Sep 17 00:00:00 2001 From: cnn Date: Fri, 19 Mar 2021 22:11:35 +0800 Subject: [PATCH] [deploy] support dynamic_shape and add tensorrt tutorial (#2367) * TensorRT support dynamic shape * add TensorRT doc * update model visual tool, test=fix_document * python support trt6 * cpp support trt6 * fix code error * clean code * python trt dynamic shape and fix code style * disable log and update doc style * update opencv lib url * solov2 trt support dynamic shape * support tensorrt_int8 * add TensorRT int8 calib data for ppyolo * set workspace_size=1 << 30 as default * remove content * remove some content, and fix code style * remove images * update doc style --- dygraph/deploy/cpp/include/object_detector.h | 15 +- dygraph/deploy/cpp/include/preprocess_op.h | 8 +- dygraph/deploy/cpp/scripts/build.sh | 6 +- dygraph/deploy/cpp/src/main.cc | 17 +- dygraph/deploy/cpp/src/object_detector.cc | 52 +++- dygraph/deploy/cpp/src/preprocess_op.cc | 10 +- dygraph/deploy/python/infer.py | 95 +++++- dygraph/deploy/python/trt_int8_calib.py | 300 +++++++++++++++++++ dygraph/deploy/tensorrt/README.md | 76 +++++ dygraph/deploy/tensorrt/imgs/input_shape.png | Bin 0 -> 107025 bytes 10 files changed, 534 insertions(+), 45 deletions(-) create mode 100644 dygraph/deploy/python/trt_int8_calib.py create mode 100644 dygraph/deploy/tensorrt/README.md create mode 100644 dygraph/deploy/tensorrt/imgs/input_shape.png diff --git a/dygraph/deploy/cpp/include/object_detector.h b/dygraph/deploy/cpp/include/object_detector.h index a92be7ffc..4c1846a24 100644 --- a/dygraph/deploy/cpp/include/object_detector.h +++ b/dygraph/deploy/cpp/include/object_detector.h @@ -59,12 +59,17 @@ class ObjectDetector { explicit ObjectDetector(const std::string& model_dir, bool use_gpu=false, const std::string& run_mode="fluid", - const int gpu_id=0) { + const int gpu_id=0, + bool use_dynamic_shape=false, + const int trt_min_shape=1, + const int trt_max_shape=1280, + const int trt_opt_shape=640) { config_.load_config(model_dir); threshold_ = config_.draw_threshold_; image_shape_ = config_.image_shape_; preprocessor_.Init(config_.preprocess_info_, image_shape_); - LoadModel(model_dir, use_gpu, config_.min_subgraph_size_, 1, run_mode, gpu_id); + LoadModel(model_dir, use_gpu, config_.min_subgraph_size_, 1, run_mode, gpu_id, + use_dynamic_shape, trt_min_shape, trt_max_shape, trt_opt_shape); } // Load Paddle inference model @@ -74,7 +79,11 @@ class ObjectDetector { const int min_subgraph_size, const int batch_size = 1, const std::string& run_mode = "fluid", - const int gpu_id=0); + const int gpu_id=0, + bool use_dynamic_shape=false, + const int trt_min_shape=1, + const int trt_max_shape=1280, + const int trt_opt_shape=640); // Run predictor void Predict(const cv::Mat& im, diff --git a/dygraph/deploy/cpp/include/preprocess_op.h b/dygraph/deploy/cpp/include/preprocess_op.h index fb840c868..e48639b55 100644 --- a/dygraph/deploy/cpp/include/preprocess_op.h +++ b/dygraph/deploy/cpp/include/preprocess_op.h @@ -37,8 +37,8 @@ class ImageBlob { std::vector im_shape_; // Buffer for image data after preprocessing std::vector im_data_; - // input image width, height - std::vector input_shape_; + // in net data shape(after pad) + std::vector in_net_shape_; // Evaluation image width and height //std::vector eval_im_size_f_; // Scale factor for image size to origin image size @@ -90,7 +90,7 @@ class Resize : public PreprocessOp { keep_ratio_ = item["keep_ratio"].as(); target_size_ = item["target_size"].as>(); if (item["keep_ratio"]) { - input_shape_ = image_shape; + in_net_shape_ = image_shape; } } @@ -103,7 +103,7 @@ class Resize : public PreprocessOp { int interp_; bool keep_ratio_; std::vector target_size_; - std::vector input_shape_; + std::vector in_net_shape_; }; // Models with FPN need input shape % stride == 0 diff --git a/dygraph/deploy/cpp/scripts/build.sh b/dygraph/deploy/cpp/scripts/build.sh index be1136288..a32b1d383 100644 --- a/dygraph/deploy/cpp/scripts/build.sh +++ b/dygraph/deploy/cpp/scripts/build.sh @@ -35,11 +35,11 @@ then echo "set OPENCV_DIR for x86_64" # linux系统通过以下命令下载预编译的opencv mkdir -p $(pwd)/deps && cd $(pwd)/deps - wget -c https://bj.bcebos.com/paddleseg/deploy/opencv3.4.6gcc4.8ffmpeg.tar.gz2 - tar xvfj opencv3.4.6gcc4.8ffmpeg.tar.gz2 && cd .. + wget -c https://paddledet.bj.bcebos.com/data/opencv3.4.6gcc8.2ffmpeg.zip + unzip opencv3.4.6gcc8.2ffmpeg.zip && cd .. # set OPENCV_DIR - OPENCV_DIR=$(pwd)/deps/opencv3.4.6gcc4.8ffmpeg/ + OPENCV_DIR=$(pwd)/deps/opencv3.4.6gcc8.2ffmpeg elif [ "$MACHINE_TYPE" = "aarch64" ] then diff --git a/dygraph/deploy/cpp/src/main.cc b/dygraph/deploy/cpp/src/main.cc index 92ecb3206..6fb497692 100644 --- a/dygraph/deploy/cpp/src/main.cc +++ b/dygraph/deploy/cpp/src/main.cc @@ -42,6 +42,10 @@ DEFINE_int32(camera_id, -1, "Device id of camera to predict"); DEFINE_bool(run_benchmark, false, "Whether to predict a image_file repeatedly for benchmark"); DEFINE_double(threshold, 0.5, "Threshold of score."); DEFINE_string(output_dir, "output", "Directory of output visualization files."); +DEFINE_bool(use_dynamic_shape, false, "Trt use dynamic shape or not"); +DEFINE_int32(trt_min_shape, 1, "Min shape of TRT DynamicShapeI"); +DEFINE_int32(trt_max_shape, 1280, "Max shape of TRT DynamicShapeI"); +DEFINE_int32(trt_opt_shape, 640, "Opt shape of TRT DynamicShapeI"); static std::string DirName(const std::string &filepath) { auto pos = filepath.rfind(OS_PATH_SEP); @@ -198,14 +202,17 @@ int main(int argc, char** argv) { return -1; } if (!(FLAGS_run_mode == "fluid" || FLAGS_run_mode == "trt_fp32" - || FLAGS_run_mode == "trt_fp16")) { - std::cout << "run_mode should be 'fluid', 'trt_fp32' or 'trt_fp16'."; + || FLAGS_run_mode == "trt_fp16" || FLAGS_run_mode == "trt_int8")) { + std::cout << "run_mode should be 'fluid', 'trt_fp32', 'trt_fp16' or 'trt_int8'."; return -1; } // Load model and create a object detector - - PaddleDetection::ObjectDetector det(FLAGS_model_dir, FLAGS_use_gpu, - FLAGS_run_mode, FLAGS_gpu_id); + const std::vector trt_min_shape = {1, FLAGS_trt_min_shape, FLAGS_trt_min_shape}; + const std::vector trt_max_shape = {1, FLAGS_trt_max_shape, FLAGS_trt_max_shape}; + const std::vector trt_opt_shape = {1, FLAGS_trt_opt_shape, FLAGS_trt_opt_shape}; + PaddleDetection::ObjectDetector det(FLAGS_model_dir, FLAGS_use_gpu, FLAGS_run_mode, + FLAGS_gpu_id, FLAGS_use_dynamic_shape, FLAGS_trt_min_shape, + FLAGS_trt_max_shape, FLAGS_trt_opt_shape); // Do inference on input video or image if (!FLAGS_video_path.empty() || FLAGS_use_camera) { PredictVideo(FLAGS_video_path, &det); diff --git a/dygraph/deploy/cpp/src/object_detector.cc b/dygraph/deploy/cpp/src/object_detector.cc index 5faa83a2e..f629acd8c 100644 --- a/dygraph/deploy/cpp/src/object_detector.cc +++ b/dygraph/deploy/cpp/src/object_detector.cc @@ -27,7 +27,11 @@ void ObjectDetector::LoadModel(const std::string& model_dir, const int min_subgraph_size, const int batch_size, const std::string& run_mode, - const int gpu_id) { + const int gpu_id, + bool use_dynamic_shape, + const int trt_min_shape, + const int trt_max_shape, + const int trt_opt_shape) { paddle_infer::Config config; std::string prog_file = model_dir + OS_PATH_SEP + "model.pdmodel"; std::string params_file = model_dir + OS_PATH_SEP + "model.pdiparams"; @@ -35,26 +39,48 @@ void ObjectDetector::LoadModel(const std::string& model_dir, if (use_gpu) { config.EnableUseGpu(200, gpu_id); config.SwitchIrOptim(true); + // use tensorrt + bool use_calib_mode = false; if (run_mode != "fluid") { auto precision = paddle_infer::Config::Precision::kFloat32; - if (run_mode == "trt_fp16") { + if (run_mode == "trt_fp32") { + precision = paddle_infer::Config::Precision::kFloat32; + } + else if (run_mode == "trt_fp16") { precision = paddle_infer::Config::Precision::kHalf; - } else if (run_mode == "trt_int8") { - printf("TensorRT int8 mode is not supported now, " - "please use 'trt_fp32' or 'trt_fp16' instead"); + } + else if (run_mode == "trt_int8") { + precision = paddle_infer::Config::Precision::kInt8; + use_calib_mode = true; } else { - if (run_mode != "trt_fp32") { - printf("run_mode should be 'fluid', 'trt_fp32' or 'trt_fp16'"); - } + printf("run_mode should be 'fluid', 'trt_fp32', 'trt_fp16' or 'trt_int8'"); } + // set tensorrt config.EnableTensorRtEngine( - 1 << 10, + 1 << 30, batch_size, min_subgraph_size, precision, false, - false); - } + use_calib_mode); + + // set use dynamic shape + if (use_dynamic_shape) { + // set DynamicShsape for image tensor + const std::vector min_input_shape = {1, trt_min_shape, trt_min_shape}; + const std::vector max_input_shape = {1, trt_max_shape, trt_max_shape}; + const std::vector opt_input_shape = {1, trt_opt_shape, trt_opt_shape}; + const std::map> map_min_input_shape = {{"image", min_input_shape}}; + const std::map> map_max_input_shape = {{"image", max_input_shape}}; + const std::map> map_opt_input_shape = {{"image", opt_input_shape}}; + + config.SetTRTDynamicShapeInfo(map_min_input_shape, + map_max_input_shape, + map_opt_input_shape); + std::cout << "TensorRT dynamic shape enabled" << std::endl; + } + } + } else { config.DisableGpu(); } @@ -171,8 +197,8 @@ void ObjectDetector::Predict(const cv::Mat& im, for (const auto& tensor_name : input_names) { auto in_tensor = predictor_->GetInputHandle(tensor_name); if (tensor_name == "image") { - int rh = inputs_.input_shape_[0]; - int rw = inputs_.input_shape_[1]; + int rh = inputs_.in_net_shape_[0]; + int rw = inputs_.in_net_shape_[1]; in_tensor->Reshape({1, 3, rh, rw}); in_tensor->CopyFromCpu(inputs_.im_data_.data()); } else if (tensor_name == "im_shape") { diff --git a/dygraph/deploy/cpp/src/preprocess_op.cc b/dygraph/deploy/cpp/src/preprocess_op.cc index 462958174..8edd3eb1f 100644 --- a/dygraph/deploy/cpp/src/preprocess_op.cc +++ b/dygraph/deploy/cpp/src/preprocess_op.cc @@ -25,7 +25,7 @@ void InitInfo::Run(cv::Mat* im, ImageBlob* data) { static_cast(im->cols) }; data->scale_factor_ = {1., 1.}; - data->input_shape_ = { + data->in_net_shape_ = { static_cast(im->rows), static_cast(im->cols) }; @@ -62,7 +62,11 @@ void Permute::Run(cv::Mat* im, ImageBlob* data) { void Resize::Run(cv::Mat* im, ImageBlob* data) { auto resize_scale = GenerateScale(*im); - data->input_shape_ = { + data->im_shape_ = { + static_cast(im->cols * resize_scale.first), + static_cast(im->rows * resize_scale.second) + }; + data->in_net_shape_ = { static_cast(im->cols * resize_scale.first), static_cast(im->rows * resize_scale.second) }; @@ -121,7 +125,7 @@ void PadStride::Run(cv::Mat* im, ImageBlob* data) { nw - rw, cv::BORDER_CONSTANT, cv::Scalar(0)); - data->input_shape_ = { + data->in_net_shape_ = { static_cast(im->rows), static_cast(im->cols), }; diff --git a/dygraph/deploy/python/infer.py b/dygraph/deploy/python/infer.py index 4d9feb214..b10576132 100644 --- a/dygraph/deploy/python/infer.py +++ b/dygraph/deploy/python/infer.py @@ -46,6 +46,11 @@ class Detector(object): model_dir (str): root path of model.pdiparams, model.pdmodel and infer_cfg.yml use_gpu (bool): whether use gpu run_mode (str): mode of running(fluid/trt_fp32/trt_fp16) + use_dynamic_shape (bool): use dynamic shape or not + trt_min_shape (int): min shape for dynamic shape in trt + trt_max_shape (int): max shape for dynamic shape in trt + trt_opt_shape (int): opt shape for dynamic shape in trt + run_mode (str): mode of running(fluid/trt_fp32/trt_fp16) threshold (float): threshold to reserve the result for output. """ @@ -54,13 +59,21 @@ class Detector(object): model_dir, use_gpu=False, run_mode='fluid', + use_dynamic_shape=False, + trt_min_shape=1, + trt_max_shape=1280, + trt_opt_shape=640, threshold=0.5): self.pred_config = pred_config self.predictor = load_predictor( model_dir, run_mode=run_mode, min_subgraph_size=self.pred_config.min_subgraph_size, - use_gpu=use_gpu) + use_gpu=use_gpu, + use_dynamic_shape=use_dynamic_shape, + trt_min_shape=trt_min_shape, + trt_max_shape=trt_max_shape, + trt_opt_shape=trt_opt_shape) def preprocess(self, im): preprocess_ops = [] @@ -154,6 +167,10 @@ class DetectorSOLOv2(Detector): model_dir (str): root path of model.pdiparams, model.pdmodel and infer_cfg.yml use_gpu (bool): whether use gpu run_mode (str): mode of running(fluid/trt_fp32/trt_fp16) + use_dynamic_shape (bool): use dynamic shape or not + trt_min_shape (int): min shape for dynamic shape in trt + trt_max_shape (int): max shape for dynamic shape in trt + trt_opt_shape (int): opt shape for dynamic shape in trt threshold (float): threshold to reserve the result for output. """ @@ -162,13 +179,21 @@ class DetectorSOLOv2(Detector): model_dir, use_gpu=False, run_mode='fluid', + use_dynamic_shape=False, + trt_min_shape=1, + trt_max_shape=1280, + trt_opt_shape=640, threshold=0.5): self.pred_config = pred_config self.predictor = load_predictor( model_dir, run_mode=run_mode, min_subgraph_size=self.pred_config.min_subgraph_size, - use_gpu=use_gpu) + use_gpu=use_gpu, + use_dynamic_shape=use_dynamic_shape, + trt_min_shape=trt_min_shape, + trt_max_shape=trt_max_shape, + trt_opt_shape=trt_opt_shape) def predict(self, image, @@ -287,11 +312,20 @@ def load_predictor(model_dir, run_mode='fluid', batch_size=1, use_gpu=False, - min_subgraph_size=3): + min_subgraph_size=3, + use_dynamic_shape=False, + trt_min_shape=1, + trt_max_shape=1280, + trt_opt_shape=640): """set AnalysisConfig, generate AnalysisPredictor Args: model_dir (str): root path of __model__ and __params__ use_gpu (bool): whether use gpu + run_mode (str): mode of running(fluid/trt_fp32/trt_fp16) + use_dynamic_shape (bool): use dynamic shape or not + trt_min_shape (int): min shape for dynamic shape in trt + trt_max_shape (int): max shape for dynamic shape in trt + trt_opt_shape (int): opt shape for dynamic shape in trt Returns: predictor (PaddlePredictor): AnalysisPredictor Raises: @@ -301,9 +335,12 @@ def load_predictor(model_dir, raise ValueError( "Predict by TensorRT mode: {}, expect use_gpu==True, but use_gpu == {}" .format(run_mode, use_gpu)) - if run_mode == 'trt_int8': - raise ValueError("TensorRT int8 mode is not supported now, " - "please use trt_fp32 or trt_fp16 instead.") + if run_mode == 'trt_int8' and not os.path.exists( + os.path.join(model_dir, '_opt_cache')): + raise ValueError( + "TensorRT int8 must calibration first, and model_dir must has _opt_cache dir" + ) + use_calib_mode = True if run_mode == 'trt_int8' else False config = Config( os.path.join(model_dir, 'model.pdmodel'), os.path.join(model_dir, 'model.pdiparams')) @@ -316,11 +353,7 @@ def load_predictor(model_dir, # initial GPU memory(M), device ID config.enable_use_gpu(200, 0) # optimize graph and fuse op - # FIXME(dkp): ir optimize may prune variable inside graph - # and incur error in Paddle 2.0, e.g. in SSDLite - # FCOS model, set as False currently and should - # be set as True after switch_ir_optim fixed - config.switch_ir_optim(False) + config.switch_ir_optim(True) else: config.disable_gpu() @@ -331,7 +364,16 @@ def load_predictor(model_dir, min_subgraph_size=min_subgraph_size, precision_mode=precision_map[run_mode], use_static=False, - use_calib_mode=False) + use_calib_mode=use_calib_mode) + + if use_dynamic_shape: + print('use_dynamic_shape') + min_input_shape = {'image': [1, 3, trt_min_shape, trt_min_shape]} + max_input_shape = {'image': [1, 3, trt_max_shape, trt_max_shape]} + opt_input_shape = {'image': [1, 3, trt_opt_shape, trt_opt_shape]} + config.set_trt_dynamic_shape_info(min_input_shape, max_input_shape, + opt_input_shape) + print('trt set dynamic shape done!') # disable print log when predict config.disable_glog_info() @@ -424,13 +466,21 @@ def main(): pred_config, FLAGS.model_dir, use_gpu=FLAGS.use_gpu, - run_mode=FLAGS.run_mode) + run_mode=FLAGS.run_mode, + use_dynamic_shape=FLAGS.use_dynamic_shape, + trt_min_shape=FLAGS.trt_min_shape, + trt_max_shape=FLAGS.trt_max_shape, + trt_opt_shape=FLAGS.trt_opt_shape) if pred_config.arch == 'SOLOv2': detector = DetectorSOLOv2( pred_config, FLAGS.model_dir, use_gpu=FLAGS.use_gpu, - run_mode=FLAGS.run_mode) + run_mode=FLAGS.run_mode, + use_dynamic_shape=FLAGS.use_dynamic_shape, + trt_min_shape=FLAGS.trt_min_shape, + trt_max_shape=FLAGS.trt_max_shape, + trt_opt_shape=FLAGS.trt_opt_shape) # predict from image if FLAGS.image_file != '': predict_image(detector) @@ -480,6 +530,23 @@ if __name__ == '__main__': type=str, default="output", help="Directory of output visualization files.") + parser.add_argument( + "--use_dynamic_shape", + type=ast.literal_eval, + default=False, + help="Dynamic_shape for TensorRT.") + parser.add_argument( + "--trt_min_shape", type=int, default=1, help="min_shape for TensorRT.") + parser.add_argument( + "--trt_max_shape", + type=int, + default=1280, + help="max_shape for TensorRT.") + parser.add_argument( + "--trt_opt_shape", + type=int, + default=640, + help="opt_shape for TensorRT.") FLAGS = parser.parse_args() print_arguments(FLAGS) diff --git a/dygraph/deploy/python/trt_int8_calib.py b/dygraph/deploy/python/trt_int8_calib.py new file mode 100644 index 000000000..32f0e0dde --- /dev/null +++ b/dygraph/deploy/python/trt_int8_calib.py @@ -0,0 +1,300 @@ +# Copyright (c) 2020 PaddlePaddle Authors. All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os +import argparse +import time +import yaml +import ast +from functools import reduce + +from PIL import Image +import cv2 +import numpy as np +import glob +import paddle +from preprocess import preprocess, Resize, NormalizeImage, Permute, PadStride +from visualize import visualize_box_mask +from paddle.inference import Config +from paddle.inference import create_predictor + +# Global dictionary +SUPPORT_MODELS = { + 'YOLO', + 'RCNN', + 'SSD', + 'FCOS', + 'SOLOv2', + 'TTFNet', +} + + +class Detector(object): + """ + Args: + config (object): config of model, defined by `Config(model_dir)` + model_dir (str): root path of model.pdiparams, model.pdmodel and infer_cfg.yml + use_gpu (bool): whether use gpu + """ + + def __init__(self, pred_config, model_dir, use_gpu=False): + self.pred_config = pred_config + self.predictor = load_predictor( + model_dir, + min_subgraph_size=self.pred_config.min_subgraph_size, + use_gpu=use_gpu) + + def preprocess(self, im): + preprocess_ops = [] + for op_info in self.pred_config.preprocess_infos: + new_op_info = op_info.copy() + op_type = new_op_info.pop('type') + preprocess_ops.append(eval(op_type)(**new_op_info)) + im, im_info = preprocess(im, preprocess_ops, + self.pred_config.input_shape) + inputs = create_inputs(im, im_info) + return inputs + + def postprocess(self, np_boxes, np_masks, inputs, threshold=0.5): + # postprocess output of predictor + results = {} + if self.pred_config.arch in ['Face']: + h, w = inputs['im_shape'] + scale_y, scale_x = inputs['scale_factor'] + w, h = float(h) / scale_y, float(w) / scale_x + np_boxes[:, 2] *= h + np_boxes[:, 3] *= w + np_boxes[:, 4] *= h + np_boxes[:, 5] *= w + results['boxes'] = np_boxes + if np_masks is not None: + results['masks'] = np_masks + return results + + def predict(self, + image, + threshold=0.5, + warmup=0, + repeats=1, + run_benchmark=False): + ''' + Args: + image (str/np.ndarray): path of image/ np.ndarray read by cv2 + threshold (float): threshold of predicted box' score + Returns: + results (dict): include 'boxes': np.ndarray: shape:[N,6], N: number of box, + matix element:[class, score, x_min, y_min, x_max, y_max] + MaskRCNN's results include 'masks': np.ndarray: + shape: [N, im_h, im_w] + ''' + inputs = self.preprocess(image) + np_boxes, np_masks = None, None + input_names = self.predictor.get_input_names() + for i in range(len(input_names)): + input_tensor = self.predictor.get_input_handle(input_names[i]) + input_tensor.copy_from_cpu(inputs[input_names[i]]) + + for i in range(warmup): + self.predictor.run() + output_names = self.predictor.get_output_names() + boxes_tensor = self.predictor.get_output_handle(output_names[0]) + np_boxes = boxes_tensor.copy_to_cpu() + if self.pred_config.mask: + masks_tensor = self.predictor.get_output_handle(output_names[2]) + np_masks = masks_tensor.copy_to_cpu() + + t1 = time.time() + for i in range(repeats): + self.predictor.run() + output_names = self.predictor.get_output_names() + boxes_tensor = self.predictor.get_output_handle(output_names[0]) + np_boxes = boxes_tensor.copy_to_cpu() + if self.pred_config.mask: + masks_tensor = self.predictor.get_output_handle(output_names[2]) + np_masks = masks_tensor.copy_to_cpu() + t2 = time.time() + ms = (t2 - t1) * 1000.0 / repeats + print("Inference: {} ms per batch image".format(ms)) + + # do not perform postprocess in benchmark mode + results = [] + if not run_benchmark: + if reduce(lambda x, y: x * y, np_boxes.shape) < 6: + print('[WARNNING] No object detected.') + results = {'boxes': np.array([])} + else: + results = self.postprocess( + np_boxes, np_masks, inputs, threshold=threshold) + + return results + + +def create_inputs(im, im_info): + """generate input for different model type + Args: + im (np.ndarray): image (np.ndarray) + im_info (dict): info of image + model_arch (str): model type + Returns: + inputs (dict): input of model + """ + inputs = {} + inputs['image'] = np.array((im, )).astype('float32') + inputs['im_shape'] = np.array((im_info['im_shape'], )).astype('float32') + inputs['scale_factor'] = np.array( + (im_info['scale_factor'], )).astype('float32') + + return inputs + + +class PredictConfig(): + """set config of preprocess, postprocess and visualize + Args: + model_dir (str): root path of model.yml + """ + + def __init__(self, model_dir): + # parsing Yaml config for Preprocess + deploy_file = os.path.join(model_dir, 'infer_cfg.yml') + with open(deploy_file) as f: + yml_conf = yaml.safe_load(f) + self.check_model(yml_conf) + self.arch = yml_conf['arch'] + self.preprocess_infos = yml_conf['Preprocess'] + self.min_subgraph_size = yml_conf['min_subgraph_size'] + self.labels = yml_conf['label_list'] + self.mask = False + if 'mask' in yml_conf: + self.mask = yml_conf['mask'] + self.input_shape = yml_conf['image_shape'] + self.print_config() + + def check_model(self, yml_conf): + """ + Raises: + ValueError: loaded model not in supported model type + """ + for support_model in SUPPORT_MODELS: + if support_model in yml_conf['arch']: + return True + raise ValueError("Unsupported arch: {}, expect {}".format(yml_conf[ + 'arch'], SUPPORT_MODELS)) + + def print_config(self): + print('----------- Model Configuration -----------') + print('%s: %s' % ('Model Arch', self.arch)) + print('%s: ' % ('Transform Order')) + for op_info in self.preprocess_infos: + print('--%s: %s' % ('transform op', op_info['type'])) + print('--------------------------------------------') + + +def load_predictor(model_dir, batch_size=1, use_gpu=False, min_subgraph_size=3): + """set AnalysisConfig, generate AnalysisPredictor + Args: + model_dir (str): root path of __model__ and __params__ + use_gpu (bool): whether use gpu + Returns: + predictor (PaddlePredictor): AnalysisPredictor + Raises: + ValueError: predict by TensorRT need use_gpu == True. + """ + run_mode = 'trt_int8' + if not use_gpu and not run_mode == 'fluid': + raise ValueError( + "Predict by TensorRT mode: {}, expect use_gpu==True, but use_gpu == {}" + .format(run_mode, use_gpu)) + config = Config( + os.path.join(model_dir, 'model.pdmodel'), + os.path.join(model_dir, 'model.pdiparams')) + precision_map = { + 'trt_int8': Config.Precision.Int8, + 'trt_fp32': Config.Precision.Float32, + 'trt_fp16': Config.Precision.Half + } + if use_gpu: + # initial GPU memory(M), device ID + config.enable_use_gpu(200, 0) + # optimize graph and fuse op + config.switch_ir_optim(True) + else: + config.disable_gpu() + + if run_mode in precision_map.keys(): + config.enable_tensorrt_engine( + workspace_size=1 << 10, + max_batch_size=batch_size, + min_subgraph_size=min_subgraph_size, + precision_mode=precision_map[run_mode], + use_static=False, + use_calib_mode=True) + + # disable print log when predict + config.disable_glog_info() + # enable shared memory + config.enable_memory_optim() + # disable feed, fetch OP, needed by zero_copy_run + config.switch_use_feed_fetch_ops(False) + predictor = create_predictor(config) + return predictor + + +def print_arguments(args): + print('----------- Running Arguments -----------') + for arg, value in sorted(vars(args).items()): + print('%s: %s' % (arg, value)) + print('------------------------------------------') + + +def predict_image_dir(detector): + for image_file in glob.glob(FLAGS.image_dir + '/*.jpg'): + print('image_file is', image_file) + results = detector.predict(image_file, threshold=0.5) + + +def main(): + pred_config = PredictConfig(FLAGS.model_dir) + detector = Detector(pred_config, FLAGS.model_dir, use_gpu=FLAGS.use_gpu) + # predict from image + if FLAGS.image_dir != '': + predict_image_dir(detector) + + +if __name__ == '__main__': + paddle.enable_static() + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument( + "--model_dir", + type=str, + default=None, + help=("Directory include:'model.pdiparams', 'model.pdmodel', " + "'infer_cfg.yml', created by tools/export_model.py."), + required=True) + parser.add_argument( + "--image_dir", type=str, default='', help="Directory of image file.") + parser.add_argument( + "--use_gpu", + type=ast.literal_eval, + default=False, + help="Whether to predict with GPU.") + print('err?') + parser.add_argument( + "--output_dir", + type=str, + default="output", + help="Directory of output visualization files.") + FLAGS = parser.parse_args() + print_arguments(FLAGS) + + main() diff --git a/dygraph/deploy/tensorrt/README.md b/dygraph/deploy/tensorrt/README.md new file mode 100644 index 000000000..ccf46603f --- /dev/null +++ b/dygraph/deploy/tensorrt/README.md @@ -0,0 +1,76 @@ +# TensorRT预测部署教程 +TensorRT是NVIDIA提出的用于统一模型部署的加速库,可以应用于V100、JETSON Xavier等硬件,它可以极大提高预测速度。Paddle TensorRT教程请参考文档[使用Paddle-TensorRT库预测](https://paddle-inference.readthedocs.io/en/latest/optimize/paddle_trt.html#) + +## 1. 安装PaddleInference预测库 +- Python安装包,请从[这里](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/Tables.html#whl-release) 下载带有tensorrt的安装包进行安装 + +- CPP预测库,请从[这里](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/build_and_install_lib_cn.html) 下载带有TensorRT编译的预测库 + +- 如果Python和CPP官网没有提供已编译好的安装包或预测库,请参考[源码安装](https://www.paddlepaddle.org.cn/documentation/docs/zh/install/compile/linux-compile.html) 自行编译 + +注意,您的机器上TensorRT的版本需要跟您使用的预测库中TensorRT版本保持一致。 + +## 2. 导出模型 +模型导出具体请参考文档[PaddleDetection模型导出教程](../EXPORT_MODEL.md)。 + +## 3. 开启TensorRT加速 +### 3.1 配置TensorRT +在使用Paddle预测库构建预测器配置config时,打开TensorRT引擎就可以了: + +``` +config->EnableUseGpu(100, 0); // 初始化100M显存,使用GPU ID为0 +config->GpuDeviceId(); // 返回正在使用的GPU ID +// 开启TensorRT预测,可提升GPU预测性能,需要使用带TensorRT的预测库 +config->EnableTensorRtEngine(1 << 20 /*workspace_size*/, + batch_size /*max_batch_size*/, + 3 /*min_subgraph_size*/, + AnalysisConfig::Precision::kFloat32 /*precision*/, + false /*use_static*/, + false /*use_calib_mode*/); + +``` + +### 3.2 TensorRT固定尺寸预测 +TensorRT版本<=5时,使用TensorRT预测时,只支持固定尺寸输入。 + +在导出模型时指定模型输入尺寸,设置`TestReader.inputs_def.image_shape=[3,640,640]`,具体请参考[PaddleDetection模型导出教程](../EXPORT_MODEL.md) 。 + +`TestReader.inputs_def.image_shape`设置的是输入TensorRT引擎的数据尺寸(在像FasterRCNN中,`TestReader.inputs_def.image_shape`指定的是在`Pad`操作之前的图像数据尺寸)。 + +可以通过[visualdl](https://www.paddlepaddle.org.cn/paddle/visualdl/demo/graph) 打开`model.pdmodel`文件,查看输入的第一个Tensor尺寸是否是固定的,如果不指定,尺寸会用`?`表示,如下图所示: +![img](imgs/input_shape.png) + +### 3.3 TensorRT动态尺寸预测 + +TensorRT版本>=6时,使用TensorRT预测时,可以支持动态尺寸输入。 +Paddle预测库关于动态尺寸输入请查看[Paddle CPP预测](https://www.paddlepaddle.org.cn/documentation/docs/zh/guides/05_inference_deployment/inference/native_infer.html) 的`SetTRTDynamicShapeInfo`函数说明。 + +`python/infer.py`设置动态尺寸输入参数说明: + +- use_dynamic_shape 用于设定TensorRT的输入尺寸是否是动态尺寸,默认值:False + +- trt_min_shape 用于设定TensorRT的输入图像height、width中的最小尺寸,默认值:1 + +- trt_max_shape 用于设定TensorRT的输入图像height、width中的最大尺寸,默认值:1280 + +- trt_opt_shape 用于设定TensorRT的输入图像height、width中的最优尺寸,默认值:640 + +**注意:`TensorRT`中动态尺寸设置是4维的,这里只设置输入图像的尺寸。** + +## 4、常见问题QA +**Q:** 提示没有`tensorrt_op`
+**A:** 请检查是否使用带有TensorRT的Paddle Python包或预测库。 + +**Q:** 提示`op out of memory`
+**A:** 检查GPU是否是别人也在使用,请尝试使用空闲GPU + +**Q:** 提示`some trt inputs dynamic shape info not set`
+**A:** 这是由于`TensorRT`会把网络结果划分成多个子图,我们只设置了输入数据的动态尺寸,划分的其他子图的输入并未设置动态尺寸。有两个解决方法: + +- 方法一:通过增大`min_subgraph_size`,跳过对这些子图的优化。根据提示,设置min_subgraph_size大于并未设置动态尺寸输入的子图中OP个数即可。 +`min_subgraph_size`的意思是,在加载TensorRT引擎的时候,大于`min_subgraph_size`的OP才会被优化,并且这些OP是连续的且是TensorRT可以优化的。 + +- 方法二:找到子图的这些输入,按照上面方式也设置子图的输入动态尺寸。 + +**Q:** 如何打开日志
+**A:** 预测库默认是打开日志的,只要注释掉`config.disable_glog_info()`就可以打开日志 diff --git a/dygraph/deploy/tensorrt/imgs/input_shape.png b/dygraph/deploy/tensorrt/imgs/input_shape.png new file mode 100644 index 0000000000000000000000000000000000000000..1148116f81ec78ae625f342fa51dcf778d1fb4ca GIT binary patch literal 107025 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

  • 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 literal 0 HcmV?d00001 -- GitLab