fix conflicts for ascend

This commit is contained in:
yunyaoXYY
2022-12-19 09:14:04 +00:00
330 changed files with 12347 additions and 981 deletions

View File

@@ -245,6 +245,34 @@ class RuntimeOption:
return
return self._option.use_gpu(device_id)
def use_xpu(self,
device_id=0,
l3_workspace_size=16 * 1024 * 1024,
locked=False,
autotune=True,
autotune_file="",
precision="int16",
adaptive_seqlen=False,
enable_multi_stream=False):
"""Inference with XPU
:param device_id: (int)The index of XPU will be used for inference, default 0
:param l3_workspace_size: (int)The size of the video memory allocated by the l3 cache, the maximum is 16M, default 16M
:param locked: (bool)Whether the allocated L3 cache can be locked. If false, it means that the L3 cache is not locked,
and the allocated L3 cache can be shared by multiple models, and multiple models
:param autotune: (bool)Whether to autotune the conv operator in the model.
If true, when the conv operator of a certain dimension is executed for the first time,
it will automatically search for a better algorithm to improve the performance of subsequent conv operators of the same dimension.
:param autotune_file: (str)Specify the path of the autotune file. If autotune_file is specified,
the algorithm specified in the file will be used and autotune will not be performed again.
:param precision: (str)Calculation accuracy of multi_encoder
:param adaptive_seqlen: (bool)adaptive_seqlen Is the input of multi_encoder variable length
:param enable_multi_stream: (bool)Whether to enable the multi stream of xpu.
"""
return self._option.use_xpu(device_id, l3_workspace_size, locked,
autotune, autotune_file, precision,
adaptive_seqlen, enable_multi_stream)
def use_cpu(self):
"""Inference with CPU
"""

View File

@@ -86,7 +86,8 @@ class UIEModel(FastDeployModel):
for result in results:
uie_result = dict()
for key, uie_results in result.items():
uie_result[key] = list()
for uie_res in uie_results:
uie_result[key] = uie_res.get_dict()
uie_result[key].append(uie_res.get_dict())
new_results += [uie_result]
return new_results

View File

@@ -85,6 +85,19 @@ class PaddleClasModel(FastDeployModel):
model_format)
assert self.initialized, "PaddleClas model initialize failed."
def clone(self):
"""Clone PaddleClasModel object
:return: a new PaddleClasModel object
"""
class PaddleClasCloneModel(PaddleClasModel):
def __init__(self, model):
self._model = model
clone_model = PaddleClasCloneModel(self._model.clone())
return clone_model
def predict(self, im, topk=1):
"""Classify an input image

View File

@@ -24,3 +24,4 @@ from .contrib.yolov6 import YOLOv6
from .contrib.yolov7end2end_trt import YOLOv7End2EndTRT
from .contrib.yolov7end2end_ort import YOLOv7End2EndORT
from .ppdet import *
from .contrib.rkyolo import *

View File

@@ -0,0 +1,16 @@
# Copyright (c) 2022 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.
from __future__ import absolute_import
from .rkyolov5 import *

View File

@@ -0,0 +1,195 @@
# Copyright (c) 2022 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.
from __future__ import absolute_import
import logging
from ..... import FastDeployModel, ModelFormat
from ..... import c_lib_wrap as C
class RKYOLOPreprocessor:
def __init__(self):
"""Create a preprocessor for RKYOLOV5
"""
self._preprocessor = C.vision.detection.RKYOLOPreprocessor()
def run(self, input_ims):
"""Preprocess input images for RKYOLOV5
:param: input_ims: (list of numpy.ndarray)The input image
:return: list of FDTensor
"""
return self._preprocessor.run(input_ims)
@property
def size(self):
"""
Argument for image preprocessing step, the preprocess image size, tuple of (width, height), default size = [640, 640]
"""
return self._preprocessor.size
@property
def padding_value(self):
"""
padding value for preprocessing, default [114.0, 114.0, 114.0]
"""
# padding value, size should be the same as channels
return self._preprocessor.padding_value
@property
def is_scale_up(self):
"""
is_scale_up for preprocessing, the input image only can be zoom out, the maximum resize scale cannot exceed 1.0, default true
"""
return self._preprocessor.is_scale_up
@size.setter
def size(self, wh):
assert isinstance(wh, (list, tuple)), \
"The value to set `size` must be type of tuple or list."
assert len(wh) == 2, \
"The value to set `size` must contatins 2 elements means [width, height], but now it contains {} elements.".format(
len(wh))
self._preprocessor.size = wh
@padding_value.setter
def padding_value(self, value):
assert isinstance(
value,
list), "The value to set `padding_value` must be type of list."
self._preprocessor.padding_value = value
@is_scale_up.setter
def is_scale_up(self, value):
assert isinstance(
value,
bool), "The value to set `is_scale_up` must be type of bool."
self._preprocessor.is_scale_up = value
class RKYOLOPostprocessor:
def __init__(self):
"""Create a postprocessor for RKYOLOV5
"""
self._postprocessor = C.vision.detection.RKYOLOPostprocessor()
def run(self, runtime_results):
"""Postprocess the runtime results for RKYOLOV5
:param: runtime_results: (list of FDTensor)The output FDTensor results from runtime
:param: ims_info: (list of dict)Record input_shape and output_shape
:return: list of DetectionResult(If the runtime_results is predict by batched samples, the length of this list equals to the batch size)
"""
return self._postprocessor.run(runtime_results)
@property
def conf_threshold(self):
"""
confidence threshold for postprocessing, default is 0.25
"""
return self._postprocessor.conf_threshold
@property
def nms_threshold(self):
"""
nms threshold for postprocessing, default is 0.5
"""
return self._postprocessor.nms_threshold
@property
def multi_label(self):
"""
multi_label for postprocessing, set true for eval, default is True
"""
return self._postprocessor.multi_label
@conf_threshold.setter
def conf_threshold(self, conf_threshold):
assert isinstance(conf_threshold, float), \
"The value to set `conf_threshold` must be type of float."
self._postprocessor.conf_threshold = conf_threshold
@nms_threshold.setter
def nms_threshold(self, nms_threshold):
assert isinstance(nms_threshold, float), \
"The value to set `nms_threshold` must be type of float."
self._postprocessor.nms_threshold = nms_threshold
@multi_label.setter
def multi_label(self, value):
assert isinstance(
value,
bool), "The value to set `multi_label` must be type of bool."
self._postprocessor.multi_label = value
class RKYOLOV5(FastDeployModel):
def __init__(self,
model_file,
params_file="",
runtime_option=None,
model_format=ModelFormat.ONNX):
"""Load a RKYOLOV5 model exported by RKYOLOV5.
:param model_file: (str)Path of model file, e.g ./yolov5.onnx
:param params_file: (str)Path of parameters file, e.g yolox/model.pdiparams, if the model_fomat is ModelFormat.ONNX, this param will be ignored, can be set as empty string
:param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU
:param model_format: (fastdeploy.ModelForamt)Model format of the loaded model
"""
# 调用基函数进行backend_option的初始化
# 初始化后的option保存在self._runtime_option
super(RKYOLOV5, self).__init__(runtime_option)
self._model = C.vision.detection.RKYOLOV5(
model_file, self._runtime_option, model_format)
# 通过self.initialized判断整个模型的初始化是否成功
assert self.initialized, "RKYOLOV5 initialize failed."
def predict(self, input_image, conf_threshold=0.25, nms_iou_threshold=0.5):
"""Detect an input image
:param input_image: (numpy.ndarray)The input image data, 3-D array with layout HWC, BGR format
:param conf_threshold: confidence threshold for postprocessing, default is 0.25
:param nms_iou_threshold: iou threshold for NMS, default is 0.5
:return: DetectionResult
"""
self.postprocessor.conf_threshold = conf_threshold
self.postprocessor.nms_threshold = nms_iou_threshold
return self._model.predict(input_image)
def batch_predict(self, images):
"""Classify a batch of input image
:param im: (list of numpy.ndarray) The input image list, each element is a 3-D array with layout HWC, BGR format
:return list of DetectionResult
"""
return self._model.batch_predict(images)
@property
def preprocessor(self):
"""Get RKYOLOV5Preprocessor object of the loaded model
:return RKYOLOV5Preprocessor
"""
return self._model.preprocessor
@property
def postprocessor(self):
"""Get RKYOLOV5Postprocessor object of the loaded model
:return RKYOLOV5Postprocessor
"""
return self._model.postprocessor

View File

@@ -99,6 +99,19 @@ class PPYOLOE(FastDeployModel):
return self._model.batch_predict(images)
def clone(self):
"""Clone PPYOLOE object
:return: a new PPYOLOE object
"""
class PPYOLOEClone(PPYOLOE):
def __init__(self, model):
self._model = model
clone_model = PPYOLOEClone(self._model.clone())
return clone_model
@property
def preprocessor(self):
"""Get PaddleDetPreprocessor object of the loaded model
@@ -139,6 +152,19 @@ class PPYOLO(PPYOLOE):
model_format)
assert self.initialized, "PPYOLO model initialize failed."
def clone(self):
"""Clone PPYOLO object
:return: a new PPYOLO object
"""
class PPYOLOClone(PPYOLO):
def __init__(self, model):
self._model = model
clone_model = PPYOLOClone(self._model.clone())
return clone_model
class PaddleYOLOX(PPYOLOE):
def __init__(self,
@@ -164,6 +190,19 @@ class PaddleYOLOX(PPYOLOE):
model_format)
assert self.initialized, "PaddleYOLOX model initialize failed."
def clone(self):
"""Clone PaddleYOLOX object
:return: a new PaddleYOLOX object
"""
class PaddleYOLOXClone(PaddleYOLOX):
def __init__(self, model):
self._model = model
clone_model = PaddleYOLOXClone(self._model.clone())
return clone_model
class PicoDet(PPYOLOE):
def __init__(self,
@@ -188,6 +227,19 @@ class PicoDet(PPYOLOE):
model_format)
assert self.initialized, "PicoDet model initialize failed."
def clone(self):
"""Clone PicoDet object
:return: a new PicoDet object
"""
class PicoDetClone(PicoDet):
def __init__(self, model):
self._model = model
clone_model = PicoDetClone(self._model.clone())
return clone_model
class FasterRCNN(PPYOLOE):
def __init__(self,
@@ -213,6 +265,19 @@ class FasterRCNN(PPYOLOE):
model_format)
assert self.initialized, "FasterRCNN model initialize failed."
def clone(self):
"""Clone FasterRCNN object
:return: a new FasterRCNN object
"""
class FasterRCNNClone(FasterRCNN):
def __init__(self, model):
self._model = model
clone_model = FasterRCNNClone(self._model.clone())
return clone_model
class YOLOv3(PPYOLOE):
def __init__(self,
@@ -238,6 +303,19 @@ class YOLOv3(PPYOLOE):
model_format)
assert self.initialized, "YOLOv3 model initialize failed."
def clone(self):
"""Clone YOLOv3 object
:return: a new YOLOv3 object
"""
class YOLOv3Clone(YOLOv3):
def __init__(self, model):
self._model = model
clone_model = YOLOv3Clone(self._model.clone())
return clone_model
class MaskRCNN(PPYOLOE):
def __init__(self,
@@ -273,6 +351,19 @@ class MaskRCNN(PPYOLOE):
raise Exception(
"batch_predict is not supported for MaskRCNN model now.")
def clone(self):
"""Clone MaskRCNN object
:return: a new MaskRCNN object
"""
class MaskRCNNClone(MaskRCNN):
def __init__(self, model):
self._model = model
clone_model = MaskRCNNClone(self._model.clone())
return clone_model
class SSD(PPYOLOE):
def __init__(self,
@@ -293,7 +384,120 @@ class SSD(PPYOLOE):
super(PPYOLOE, self).__init__(runtime_option)
assert model_format == ModelFormat.PADDLE, "SSD model only support model format of ModelFormat.Paddle now."
self._model = C.vision.detection.SSD(
self._model = C.vision.detection.SSD(model_file, params_file,
config_file, self._runtime_option,
model_format)
assert self.initialized, "SSD model initialize failed."
def clone(self):
"""Clone SSD object
:return: a new SSD object
"""
class SSDClone(SSD):
def __init__(self, model):
self._model = model
clone_model = SSDClone(self._model.clone())
return clone_model
class PaddleYOLOv5(PPYOLOE):
def __init__(self,
model_file,
params_file,
config_file,
runtime_option=None,
model_format=ModelFormat.PADDLE):
"""Load a YOLOv5 model exported by PaddleDetection.
:param model_file: (str)Path of model file, e.g yolov5/model.pdmodel
:param params_file: (str)Path of parameters file, e.g yolov5/model.pdiparams, if the model_fomat is ModelFormat.ONNX, this param will be ignored, can be set as empty string
:param config_file: (str)Path of configuration file for deployment, e.g ppyoloe/infer_cfg.yml
:param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU
:param model_format: (fastdeploy.ModelForamt)Model format of the loaded model
"""
super(PPYOLOE, self).__init__(runtime_option)
assert model_format == ModelFormat.PADDLE, "PaddleYOLOv5 model only support model format of ModelFormat.Paddle now."
self._model = C.vision.detection.PaddleYOLOv5(
model_file, params_file, config_file, self._runtime_option,
model_format)
assert self.initialized, "SSD model initialize failed."
assert self.initialized, "PaddleYOLOv5 model initialize failed."
class PaddleYOLOv6(PPYOLOE):
def __init__(self,
model_file,
params_file,
config_file,
runtime_option=None,
model_format=ModelFormat.PADDLE):
"""Load a YOLOv6 model exported by PaddleDetection.
:param model_file: (str)Path of model file, e.g yolov6/model.pdmodel
:param params_file: (str)Path of parameters file, e.g yolov6/model.pdiparams, if the model_fomat is ModelFormat.ONNX, this param will be ignored, can be set as empty string
:param config_file: (str)Path of configuration file for deployment, e.g ppyoloe/infer_cfg.yml
:param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU
:param model_format: (fastdeploy.ModelForamt)Model format of the loaded model
"""
super(PPYOLOE, self).__init__(runtime_option)
assert model_format == ModelFormat.PADDLE, "PaddleYOLOv6 model only support model format of ModelFormat.Paddle now."
self._model = C.vision.detection.PaddleYOLOv6(
model_file, params_file, config_file, self._runtime_option,
model_format)
assert self.initialized, "PaddleYOLOv6 model initialize failed."
class PaddleYOLOv7(PPYOLOE):
def __init__(self,
model_file,
params_file,
config_file,
runtime_option=None,
model_format=ModelFormat.PADDLE):
"""Load a YOLOv7 model exported by PaddleDetection.
:param model_file: (str)Path of model file, e.g yolov7/model.pdmodel
:param params_file: (str)Path of parameters file, e.g yolov7/model.pdiparams, if the model_fomat is ModelFormat.ONNX, this param will be ignored, can be set as empty string
:param config_file: (str)Path of configuration file for deployment, e.g ppyoloe/infer_cfg.yml
:param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU
:param model_format: (fastdeploy.ModelForamt)Model format of the loaded model
"""
super(PPYOLOE, self).__init__(runtime_option)
assert model_format == ModelFormat.PADDLE, "PaddleYOLOv7 model only support model format of ModelFormat.Paddle now."
self._model = C.vision.detection.PaddleYOLOv7(
model_file, params_file, config_file, self._runtime_option,
model_format)
assert self.initialized, "PaddleYOLOv7 model initialize failed."
class RTMDet(PPYOLOE):
def __init__(self,
model_file,
params_file,
config_file,
runtime_option=None,
model_format=ModelFormat.PADDLE):
"""Load a RTMDet model exported by PaddleDetection.
:param model_file: (str)Path of model file, e.g rtmdet/model.pdmodel
:param params_file: (str)Path of parameters file, e.g rtmdet/model.pdiparams, if the model_fomat is ModelFormat.ONNX, this param will be ignored, can be set as empty string
:param config_file: (str)Path of configuration file for deployment, e.g ppyoloe/infer_cfg.yml
:param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU
:param model_format: (fastdeploy.ModelForamt)Model format of the loaded model
"""
super(PPYOLOE, self).__init__(runtime_option)
assert model_format == ModelFormat.PADDLE, "RTMDet model only support model format of ModelFormat.Paddle now."
self._model = C.vision.detection.RTMDet(
model_file, params_file, config_file, self._runtime_option,
model_format)
assert self.initialized, "RTMDet model initialize failed."

View File

@@ -14,6 +14,7 @@
from __future__ import absolute_import
from .contrib.yolov5face import YOLOv5Face
from .contrib.yolov7face import *
from .contrib.retinaface import RetinaFace
from .contrib.scrfd import SCRFD
from .contrib.ultraface import UltraFace

View File

@@ -0,0 +1,166 @@
# Copyright (c) 2022 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.
from __future__ import absolute_import
import logging
from .... import FastDeployModel, ModelFormat
from .... import c_lib_wrap as C
class Yolov7FacePreprocessor:
def __init__(self):
"""Create a preprocessor for Yolov7Face
"""
self._preprocessor = C.vision.facedet.Yolov7Preprocessor()
def run(self, input_ims):
"""Preprocess input images for Yolov7Face
:param: input_ims: (list of numpy.ndarray)The input image
:return: list of FDTensor
"""
return self._preprocessor.run(input_ims)
@property
def size(self):
"""
Argument for image preprocessing step, the preprocess image size, tuple of (width, height), default size = [640, 640]
"""
return self._preprocessor.size
@property
def padding_color_value(self):
"""
padding value for preprocessing, default [114.0, 114.0, 114.0]
"""
# padding value, size should be the same as channels
return self._preprocessor.padding_color_value
@property
def is_scale_up(self):
"""
is_scale_up for preprocessing, the input image only can be zoom out, the maximum resize scale cannot exceed 1.0, default true
"""
return self._preprocessor.is_scale_up
@size.setter
def size(self, wh):
assert isinstance(wh, (list, tuple)),\
"The value to set `size` must be type of tuple or list."
assert len(wh) == 2,\
"The value to set `size` must contatins 2 elements means [width, height], but now it contains {} elements.".format(
len(wh))
self._preprocessor.size = wh
@padding_color_value.setter
def padding_color_value(self, value):
assert isinstance(
value, list
), "The value to set `padding_color_value` must be type of list."
self._preprocessor.padding_color_value = value
@is_scale_up.setter
def is_scale_up(self, value):
assert isinstance(
value,
bool), "The value to set `is_scale_up` must be type of bool."
self._preprocessor.is_scale_up = value
class Yolov7FacePostprocessor:
def __init__(self):
"""Create a postprocessor for Yolov7Face
"""
self._postprocessor = C.vision.facedet.Yolov7FacePostprocessor()
def run(self, runtime_results, ims_info):
"""Postprocess the runtime results for Yolov7Face
:param: runtime_results: (list of FDTensor)The output FDTensor results from runtime
:param: ims_info: (list of dict)Record input_shape and output_shape
:return: list of DetectionResult(If the runtime_results is predict by batched samples, the length of this list equals to the batch size)
"""
return self._postprocessor.run(runtime_results, ims_info)
@property
def conf_threshold(self):
"""
confidence threshold for postprocessing, default is 0.5
"""
return self._postprocessor.conf_threshold
@property
def nms_threshold(self):
"""
nms threshold for postprocessing, default is 0.45
"""
return self._postprocessor.nms_threshold
@conf_threshold.setter
def conf_threshold(self, conf_threshold):
assert isinstance(conf_threshold, float),\
"The value to set `conf_threshold` must be type of float."
self._postprocessor.conf_threshold = conf_threshold
@nms_threshold.setter
def nms_threshold(self, nms_threshold):
assert isinstance(nms_threshold, float),\
"The value to set `nms_threshold` must be type of float."
self._postprocessor.nms_threshold = nms_threshold
class YOLOv7Face(FastDeployModel):
def __init__(self,
model_file,
params_file="",
runtime_option=None,
model_format=ModelFormat.ONNX):
"""Load a YOLOv7Face model exported by YOLOv7Face.
:param model_file: (str)Path of model file, e.g ./yolov7face.onnx
:param params_file: (str)Path of parameters file, e.g yolox/model.pdiparams, if the model_fomat is ModelFormat.ONNX, this param will be ignored, can be set as empty string
:param runtime_option: (fastdeploy.RuntimeOption)RuntimeOption for inference this model, if it's None, will use the default backend on CPU
:param model_format: (fastdeploy.ModelForamt)Model format of the loaded model
"""
super(YOLOv7Face, self).__init__(runtime_option)
self._model = C.vision.facedet.YOLOv7Face(
model_file, params_file, self._runtime_option, model_format)
assert self.initialized, "YOLOv7Face initialize failed."
def batch_predict(self, images):
"""Classify a batch of input image
:param im: (list of numpy.ndarray) The input image list, each element is a 3-D array with layout HWC, BGR format
:return list of DetectionResult
"""
return self._model.batch_predict(images)
@property
def preprocessor(self):
"""Get YOLOv7Preprocessor object of the loaded model
:return YOLOv7Preprocessor
"""
return self._model.preprocessor
@property
def postprocessor(self):
"""Get YOLOv7Postprocessor object of the loaded model
:return YOLOv7Postprocessor
"""
return self._model.postprocessor

View File

@@ -41,14 +41,18 @@ class PPTinyPose(FastDeployModel):
model_format)
assert self.initialized, "PPTinyPose model initialize failed."
def predict(self, input_image):
def predict(self, input_image, detection_result=None):
"""Detect keypoints in an input image
:param im: (numpy.ndarray)The input image data, 3-D array with layout HWC, BGR format
:param detection_result: (DetectionResult)Pre-detected boxes result, default is None
:return: KeyPointDetectionResult
"""
assert input_image is not None, "The input image data is None."
return self._model.predict(input_image)
if detection_result:
return self._model.predict(input_image, detection_result)
else:
return self._model.predict(input_image)
@property
def use_dark(self):

View File

@@ -57,6 +57,19 @@ class PaddleSegModel(FastDeployModel):
"""
return self._model.batch_predict(image_list)
def clone(self):
"""Clone PaddleSegModel object
:return: a new PaddleSegModel object
"""
class PaddleSegCloneModel(PaddleSegModel):
def __init__(self, model):
self._model = model
clone_model = PaddleSegCloneModel(self._model.clone())
return clone_model
@property
def preprocessor(self):
"""Get PaddleSegPreprocessor object of the loaded model