From 0f28f9432fad23af09517d8794c7405b0443d47c Mon Sep 17 00:00:00 2001 From: WJJ1995 Date: Thu, 22 Dec 2022 19:15:32 +0800 Subject: [PATCH] [Model] Add is_mini_pad and stride for YOLOv5 python (#949) * add onnx_ort_runtime demo * rm in requirements * support batch eval * fixed MattingResults bug * move assignment for DetectionResult * integrated x2paddle * add model convert readme * update readme * re-lint * add processor api * Add MattingResult Free * change valid_cpu_backends order * add ppocr benchmark * mv bs from 64 to 32 * fixed quantize.md * fixed quantize bugs * Add Monitor for benchmark * update mem monitor * Set trt_max_batch_size default 1 * fixed ocr benchmark bug * support yolov5 in serving * Fixed yolov5 serving * Fixed postprocess * update yolov5 to 7.0 * add poros runtime demos * update readme * Support poros abi=1 * rm useless note * deal with comments * support pp_trt for ppseg * fixed symlink problem * Add is_mini_pad and stride for yolov5 Co-authored-by: Jason --- .../detection/contrib/yolov5/preprocessor.h | 17 ++++++++++++ .../detection/contrib/yolov5/yolov5_pybind.cc | 4 ++- .../vision/detection/contrib/yolov5.py | 27 +++++++++++++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) mode change 100644 => 100755 python/fastdeploy/vision/detection/contrib/yolov5.py diff --git a/fastdeploy/vision/detection/contrib/yolov5/preprocessor.h b/fastdeploy/vision/detection/contrib/yolov5/preprocessor.h index f0cf438df..9af0f4f3c 100755 --- a/fastdeploy/vision/detection/contrib/yolov5/preprocessor.h +++ b/fastdeploy/vision/detection/contrib/yolov5/preprocessor.h @@ -61,6 +61,23 @@ class FASTDEPLOY_DECL YOLOv5Preprocessor { /// Get is_scale_up, default true bool GetScaleUp() const { return is_scale_up_; } + /// Set is_mini_pad, pad to the minimum rectange + /// which height and width is times of stride + void SetMiniPad(bool is_mini_pad) { + is_mini_pad_ = is_mini_pad; + } + + /// Get is_mini_pad, default false + bool GetMiniPad() const { return is_mini_pad_; } + + /// Set padding stride, only for mini_pad mode + void SetStride(int stride) { + stride_ = stride; + } + + /// Get padding stride, default 32 + bool GetStride() const { return stride_; } + protected: bool Preprocess(FDMat* mat, FDTensor* output, std::map>* im_info); diff --git a/fastdeploy/vision/detection/contrib/yolov5/yolov5_pybind.cc b/fastdeploy/vision/detection/contrib/yolov5/yolov5_pybind.cc index df2021a59..c88270c04 100755 --- a/fastdeploy/vision/detection/contrib/yolov5/yolov5_pybind.cc +++ b/fastdeploy/vision/detection/contrib/yolov5/yolov5_pybind.cc @@ -36,7 +36,9 @@ void BindYOLOv5(pybind11::module& m) { }) .def_property("size", &vision::detection::YOLOv5Preprocessor::GetSize, &vision::detection::YOLOv5Preprocessor::SetSize) .def_property("padding_value", &vision::detection::YOLOv5Preprocessor::GetPaddingValue, &vision::detection::YOLOv5Preprocessor::SetPaddingValue) - .def_property("is_scale_up", &vision::detection::YOLOv5Preprocessor::GetScaleUp, &vision::detection::YOLOv5Preprocessor::SetScaleUp); + .def_property("is_scale_up", &vision::detection::YOLOv5Preprocessor::GetScaleUp, &vision::detection::YOLOv5Preprocessor::SetScaleUp) + .def_property("is_mini_pad", &vision::detection::YOLOv5Preprocessor::GetMiniPad, &vision::detection::YOLOv5Preprocessor::SetMiniPad) + .def_property("stride", &vision::detection::YOLOv5Preprocessor::GetStride, &vision::detection::YOLOv5Preprocessor::SetStride); pybind11::class_( m, "YOLOv5Postprocessor") diff --git a/python/fastdeploy/vision/detection/contrib/yolov5.py b/python/fastdeploy/vision/detection/contrib/yolov5.py old mode 100644 new mode 100755 index 7d87d6e42..436cbd556 --- a/python/fastdeploy/vision/detection/contrib/yolov5.py +++ b/python/fastdeploy/vision/detection/contrib/yolov5.py @@ -54,6 +54,20 @@ class YOLOv5Preprocessor: """ return self._preprocessor.is_scale_up + @property + def is_mini_pad(self): + """ + is_mini_pad for preprocessing, pad to the minimum rectange which height and width is times of stride, default false + """ + return self._preprocessor.is_mini_pad + + @property + def stride(self): + """ + stride for preprocessing, only for mini_pad mode, default 32 + """ + return self._preprocessor.stride + @size.setter def size(self, wh): assert isinstance(wh, (list, tuple)),\ @@ -77,6 +91,19 @@ class YOLOv5Preprocessor: bool), "The value to set `is_scale_up` must be type of bool." self._preprocessor.is_scale_up = value + @is_mini_pad.setter + def is_mini_pad(self, value): + assert isinstance( + value, + bool), "The value to set `is_mini_pad` must be type of bool." + self._preprocessor.is_mini_pad = value + + @stride.setter + def stride(self, value): + assert isinstance( + stride, int), "The value to set `stride` must be type of int." + self._preprocessor.stride = value + class YOLOv5Postprocessor: def __init__(self):