pipeline.py 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. # Copyright (c) 2024 PaddlePaddle Authors. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. from typing import Any, Dict, List, Literal, Optional, Tuple, Union
  15. import numpy as np
  16. from ....utils.deps import pipeline_requires_extra
  17. from ...models.semantic_segmentation.result import SegResult
  18. from ...utils.hpi import HPIConfig
  19. from ...utils.pp_option import PaddlePredictorOption
  20. from ..base import BasePipeline
  21. @pipeline_requires_extra("cv")
  22. class SemanticSegmentationPipeline(BasePipeline):
  23. """Semantic Segmentation Pipeline"""
  24. entities = "semantic_segmentation"
  25. def __init__(
  26. self,
  27. config: Dict,
  28. device: str = None,
  29. pp_option: PaddlePredictorOption = None,
  30. use_hpip: bool = False,
  31. hpi_config: Optional[Union[Dict[str, Any], HPIConfig]] = None,
  32. ) -> None:
  33. """
  34. Initializes the class with given configurations and options.
  35. Args:
  36. config (Dict): Configuration dictionary containing model and other parameters.
  37. device (str): The device to run the prediction on. Default is None.
  38. pp_option (PaddlePredictorOption): Options for PaddlePaddle predictor. Default is None.
  39. use_hpip (bool, optional): Whether to use the high-performance
  40. inference plugin (HPIP) by default. Defaults to False.
  41. hpi_config (Optional[Union[Dict[str, Any], HPIConfig]], optional):
  42. The default high-performance inference configuration dictionary.
  43. Defaults to None.
  44. """
  45. super().__init__(
  46. device=device, pp_option=pp_option, use_hpip=use_hpip, hpi_config=hpi_config
  47. )
  48. semantic_segmentation_model_config = config["SubModules"][
  49. "SemanticSegmentation"
  50. ]
  51. self.semantic_segmentation_model = self.create_model(
  52. semantic_segmentation_model_config
  53. )
  54. self.target_size = semantic_segmentation_model_config["target_size"]
  55. def predict(
  56. self,
  57. input: Union[str, List[str], np.ndarray, List[np.ndarray]],
  58. target_size: Union[Literal[-1], None, int, Tuple[int]] = None,
  59. **kwargs
  60. ) -> SegResult:
  61. """Predicts semantic segmentation results for the given input.
  62. Args:
  63. input (str | list[str] | np.ndarray | list[np.ndarray]): The input image(s) or path(s) to the images.
  64. target_size (Literal[-1] | None | int | tuple[int]): The Image size model used to do prediction. Default is None.
  65. If it's set to -1, the original image size will be used.
  66. If it's set to None, the previous level's setting will be used.
  67. If it's set to an integer value, the image will be rescaled to the size of (value, value).
  68. If it's set to a tuple of two integers, the image will be rescaled to the size of (height, width).
  69. **kwargs: Additional keyword arguments that can be passed to the function.
  70. Returns:
  71. SegResult: The predicted segmentation results.
  72. """
  73. yield from self.semantic_segmentation_model(input, target_size=target_size)