__init__.py 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. # copyright (c) 2020 PaddlePaddle Authors. All Rights Reserve.
  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 . import cls_transforms
  15. from . import det_transforms
  16. from . import seg_transforms
  17. def build_transforms(model_type, transforms_info, to_rgb=True):
  18. if model_type == "classifier":
  19. from . import cls_transforms as T
  20. elif model_type == "detector":
  21. from . import det_transforms as T
  22. elif model_type == "segmenter":
  23. from . import seg_transforms as T
  24. transforms = list()
  25. for op_info in transforms_info:
  26. op_name = list(op_info.keys())[0]
  27. op_attr = op_info[op_name]
  28. if not hasattr(T, op_name):
  29. raise Exception(
  30. "There's no operator named '{}' in transforms of {}".format(
  31. op_name, model_type))
  32. transforms.append(getattr(T, op_name)(**op_attr))
  33. eval_transforms = T.Compose(transforms)
  34. eval_transforms.to_rgb = to_rgb
  35. return eval_transforms
  36. def build_transforms_v1(model_type, transforms_info, batch_transforms_info):
  37. """ 老版本模型加载,仅支持PaddleX前端导出的模型
  38. """
  39. logging.debug("Use build_transforms_v1 to reconstruct transforms")
  40. if model_type == "classifier":
  41. from . import cls_transforms as T
  42. elif model_type == "detector":
  43. from . import det_transforms as T
  44. elif model_type == "segmenter":
  45. from . import seg_transforms as T
  46. transforms = list()
  47. for op_info in transforms_info:
  48. op_name = op_info[0]
  49. op_attr = op_info[1]
  50. if op_name == 'DecodeImage':
  51. continue
  52. if op_name == 'Permute':
  53. continue
  54. if op_name == 'ResizeByShort':
  55. op_attr_new = dict()
  56. if 'short_size' in op_attr:
  57. op_attr_new['short_size'] = op_attr['short_size']
  58. else:
  59. op_attr_new['short_size'] = op_attr['target_size']
  60. op_attr_new['max_size'] = op_attr.get('max_size', -1)
  61. op_attr = op_attr_new
  62. if op_name.startswith('Arrange'):
  63. continue
  64. if not hasattr(T, op_name):
  65. raise Exception(
  66. "There's no operator named '{}' in transforms of {}".format(
  67. op_name, model_type))
  68. transforms.append(getattr(T, op_name)(**op_attr))
  69. if model_type == "detector" and len(batch_transforms_info) > 0:
  70. op_name = batch_transforms_info[0][0]
  71. op_attr = batch_transforms_info[0][1]
  72. assert op_name == "PaddingMiniBatch", "Only PaddingMiniBatch transform is supported for batch transform"
  73. padding = T.Padding(coarsest_stride=op_attr['coarsest_stride'])
  74. transforms.append(padding)
  75. eval_transforms = T.Compose(transforms)
  76. return eval_transforms
  77. def arrange_transforms(model_type, class_name, transforms, mode='train'):
  78. # 给transforms添加arrange操作
  79. if model_type == 'classifier':
  80. arrange_transform = cls_transforms.ArrangeClassifier
  81. elif model_type == 'segmenter':
  82. arrange_transform = seg_transforms.ArrangeSegmenter
  83. elif model_type == 'detector':
  84. arrange_name = 'Arrange{}'.format(class_name)
  85. arrange_transform = getattr(det_transforms, arrange_name)
  86. else:
  87. raise Exception("Unrecognized model type: {}".format(self.model_type))
  88. if type(transforms.transforms[-1]).__name__.startswith('Arrange'):
  89. transforms.transforms[-1] = arrange_transform(mode=mode)
  90. else:
  91. transforms.transforms.append(arrange_transform(mode=mode))