paddlex 3.0.0rc1__py3-none-any.whl → 3.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. paddlex/.version +1 -1
  2. paddlex/__init__.py +1 -1
  3. paddlex/configs/modules/chart_parsing/PP-Chart2Table.yaml +13 -0
  4. paddlex/configs/modules/doc_vlm/PP-DocBee2-3B.yaml +14 -0
  5. paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-L.yaml +40 -0
  6. paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-M.yaml +40 -0
  7. paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-S.yaml +40 -0
  8. paddlex/configs/modules/layout_detection/PP-DocBlockLayout.yaml +40 -0
  9. paddlex/configs/modules/layout_detection/PP-DocLayout-L.yaml +2 -2
  10. paddlex/configs/modules/layout_detection/PP-DocLayout-M.yaml +2 -2
  11. paddlex/configs/modules/layout_detection/PP-DocLayout-S.yaml +2 -2
  12. paddlex/configs/modules/layout_detection/PP-DocLayout_plus-L.yaml +40 -0
  13. paddlex/configs/modules/text_detection/PP-OCRv5_mobile_det.yaml +40 -0
  14. paddlex/configs/modules/text_detection/PP-OCRv5_server_det.yaml +40 -0
  15. paddlex/configs/modules/text_recognition/PP-OCRv5_mobile_rec.yaml +39 -0
  16. paddlex/configs/modules/text_recognition/PP-OCRv5_server_rec.yaml +39 -0
  17. paddlex/configs/modules/textline_orientation/PP-LCNet_x1_0_textline_ori.yaml +41 -0
  18. paddlex/configs/pipelines/OCR.yaml +7 -6
  19. paddlex/configs/pipelines/PP-ChatOCRv3-doc.yaml +3 -1
  20. paddlex/configs/pipelines/PP-ChatOCRv4-doc.yaml +91 -34
  21. paddlex/configs/pipelines/PP-StructureV3.yaml +72 -72
  22. paddlex/configs/pipelines/doc_understanding.yaml +1 -1
  23. paddlex/configs/pipelines/formula_recognition.yaml +2 -2
  24. paddlex/configs/pipelines/layout_parsing.yaml +3 -2
  25. paddlex/configs/pipelines/seal_recognition.yaml +1 -0
  26. paddlex/configs/pipelines/table_recognition.yaml +2 -1
  27. paddlex/configs/pipelines/table_recognition_v2.yaml +7 -1
  28. paddlex/hpip_links.html +20 -20
  29. paddlex/inference/common/batch_sampler/doc_vlm_batch_sampler.py +33 -10
  30. paddlex/inference/common/batch_sampler/image_batch_sampler.py +34 -25
  31. paddlex/inference/common/result/mixin.py +19 -12
  32. paddlex/inference/models/base/predictor/base_predictor.py +2 -8
  33. paddlex/inference/models/common/static_infer.py +29 -73
  34. paddlex/inference/models/common/tokenizer/__init__.py +2 -0
  35. paddlex/inference/models/common/tokenizer/clip_tokenizer.py +1 -1
  36. paddlex/inference/models/common/tokenizer/gpt_tokenizer.py +2 -2
  37. paddlex/inference/models/common/tokenizer/qwen2_5_tokenizer.py +112 -0
  38. paddlex/inference/models/common/tokenizer/qwen2_tokenizer.py +7 -1
  39. paddlex/inference/models/common/tokenizer/qwen_tokenizer.py +288 -0
  40. paddlex/inference/models/common/tokenizer/tokenizer_utils.py +13 -13
  41. paddlex/inference/models/common/tokenizer/tokenizer_utils_base.py +3 -3
  42. paddlex/inference/models/common/tokenizer/vocab.py +7 -7
  43. paddlex/inference/models/common/ts/funcs.py +19 -8
  44. paddlex/inference/models/common/vlm/conversion_utils.py +99 -0
  45. paddlex/inference/models/common/vlm/fusion_ops.py +205 -0
  46. paddlex/inference/models/common/vlm/generation/configuration_utils.py +1 -1
  47. paddlex/inference/models/common/vlm/generation/logits_process.py +1 -1
  48. paddlex/inference/models/common/vlm/generation/utils.py +1 -1
  49. paddlex/inference/models/common/vlm/transformers/configuration_utils.py +3 -3
  50. paddlex/inference/models/common/vlm/transformers/conversion_utils.py +3 -3
  51. paddlex/inference/models/common/vlm/transformers/model_outputs.py +2 -2
  52. paddlex/inference/models/common/vlm/transformers/model_utils.py +7 -31
  53. paddlex/inference/models/doc_vlm/modeling/GOT_ocr_2_0.py +830 -0
  54. paddlex/inference/models/doc_vlm/modeling/__init__.py +2 -0
  55. paddlex/inference/models/doc_vlm/modeling/qwen2.py +1606 -0
  56. paddlex/inference/models/doc_vlm/modeling/qwen2_5_vl.py +3006 -0
  57. paddlex/inference/models/doc_vlm/modeling/qwen2_vl.py +0 -105
  58. paddlex/inference/models/doc_vlm/predictor.py +79 -24
  59. paddlex/inference/models/doc_vlm/processors/GOT_ocr_2_0.py +97 -0
  60. paddlex/inference/models/doc_vlm/processors/__init__.py +2 -0
  61. paddlex/inference/models/doc_vlm/processors/common.py +189 -0
  62. paddlex/inference/models/doc_vlm/processors/qwen2_5_vl.py +548 -0
  63. paddlex/inference/models/doc_vlm/processors/qwen2_vl.py +21 -176
  64. paddlex/inference/models/formula_recognition/predictor.py +8 -2
  65. paddlex/inference/models/formula_recognition/processors.py +90 -77
  66. paddlex/inference/models/formula_recognition/result.py +28 -27
  67. paddlex/inference/models/image_feature/processors.py +3 -4
  68. paddlex/inference/models/keypoint_detection/predictor.py +3 -0
  69. paddlex/inference/models/object_detection/predictor.py +2 -0
  70. paddlex/inference/models/object_detection/processors.py +28 -3
  71. paddlex/inference/models/object_detection/utils.py +2 -0
  72. paddlex/inference/models/table_structure_recognition/result.py +0 -10
  73. paddlex/inference/models/text_detection/predictor.py +8 -0
  74. paddlex/inference/models/text_detection/processors.py +44 -10
  75. paddlex/inference/models/text_detection/result.py +0 -10
  76. paddlex/inference/models/text_recognition/result.py +1 -1
  77. paddlex/inference/pipelines/__init__.py +9 -5
  78. paddlex/inference/pipelines/_parallel.py +172 -0
  79. paddlex/inference/pipelines/anomaly_detection/pipeline.py +16 -6
  80. paddlex/inference/pipelines/attribute_recognition/pipeline.py +11 -1
  81. paddlex/inference/pipelines/base.py +14 -4
  82. paddlex/inference/pipelines/components/faisser.py +1 -1
  83. paddlex/inference/pipelines/doc_preprocessor/pipeline.py +53 -27
  84. paddlex/inference/pipelines/formula_recognition/pipeline.py +120 -82
  85. paddlex/inference/pipelines/formula_recognition/result.py +1 -11
  86. paddlex/inference/pipelines/image_classification/pipeline.py +16 -6
  87. paddlex/inference/pipelines/image_multilabel_classification/pipeline.py +16 -6
  88. paddlex/inference/pipelines/instance_segmentation/pipeline.py +16 -6
  89. paddlex/inference/pipelines/keypoint_detection/pipeline.py +16 -6
  90. paddlex/inference/pipelines/layout_parsing/layout_objects.py +859 -0
  91. paddlex/inference/pipelines/layout_parsing/pipeline.py +34 -47
  92. paddlex/inference/pipelines/layout_parsing/pipeline_v2.py +832 -260
  93. paddlex/inference/pipelines/layout_parsing/result.py +4 -17
  94. paddlex/inference/pipelines/layout_parsing/result_v2.py +259 -245
  95. paddlex/inference/pipelines/layout_parsing/setting.py +88 -0
  96. paddlex/inference/pipelines/layout_parsing/utils.py +391 -2028
  97. paddlex/inference/pipelines/layout_parsing/xycut_enhanced/__init__.py +16 -0
  98. paddlex/inference/pipelines/layout_parsing/xycut_enhanced/utils.py +1199 -0
  99. paddlex/inference/pipelines/layout_parsing/xycut_enhanced/xycuts.py +615 -0
  100. paddlex/inference/pipelines/m_3d_bev_detection/pipeline.py +2 -2
  101. paddlex/inference/pipelines/multilingual_speech_recognition/pipeline.py +2 -2
  102. paddlex/inference/pipelines/object_detection/pipeline.py +16 -6
  103. paddlex/inference/pipelines/ocr/pipeline.py +127 -70
  104. paddlex/inference/pipelines/ocr/result.py +21 -18
  105. paddlex/inference/pipelines/open_vocabulary_detection/pipeline.py +2 -2
  106. paddlex/inference/pipelines/open_vocabulary_segmentation/pipeline.py +2 -2
  107. paddlex/inference/pipelines/pp_chatocr/pipeline_base.py +2 -2
  108. paddlex/inference/pipelines/pp_chatocr/pipeline_v3.py +2 -5
  109. paddlex/inference/pipelines/pp_chatocr/pipeline_v4.py +6 -6
  110. paddlex/inference/pipelines/rotated_object_detection/pipeline.py +16 -6
  111. paddlex/inference/pipelines/seal_recognition/pipeline.py +109 -53
  112. paddlex/inference/pipelines/semantic_segmentation/pipeline.py +16 -6
  113. paddlex/inference/pipelines/small_object_detection/pipeline.py +16 -6
  114. paddlex/inference/pipelines/table_recognition/pipeline.py +26 -18
  115. paddlex/inference/pipelines/table_recognition/pipeline_v2.py +624 -53
  116. paddlex/inference/pipelines/table_recognition/result.py +1 -1
  117. paddlex/inference/pipelines/table_recognition/table_recognition_post_processing_v2.py +9 -5
  118. paddlex/inference/pipelines/ts_anomaly_detection/pipeline.py +2 -2
  119. paddlex/inference/pipelines/ts_classification/pipeline.py +2 -2
  120. paddlex/inference/pipelines/ts_forecasting/pipeline.py +2 -2
  121. paddlex/inference/pipelines/video_classification/pipeline.py +2 -2
  122. paddlex/inference/pipelines/video_detection/pipeline.py +2 -2
  123. paddlex/inference/serving/basic_serving/_app.py +46 -13
  124. paddlex/inference/serving/basic_serving/_pipeline_apps/_common/common.py +5 -1
  125. paddlex/inference/serving/basic_serving/_pipeline_apps/layout_parsing.py +0 -1
  126. paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv3_doc.py +0 -1
  127. paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv4_doc.py +1 -1
  128. paddlex/inference/serving/basic_serving/_pipeline_apps/pp_structurev3.py +6 -2
  129. paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition.py +1 -5
  130. paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition_v2.py +4 -5
  131. paddlex/inference/serving/infra/utils.py +20 -22
  132. paddlex/inference/serving/schemas/formula_recognition.py +1 -1
  133. paddlex/inference/serving/schemas/layout_parsing.py +1 -2
  134. paddlex/inference/serving/schemas/pp_chatocrv3_doc.py +1 -2
  135. paddlex/inference/serving/schemas/pp_chatocrv4_doc.py +2 -2
  136. paddlex/inference/serving/schemas/pp_structurev3.py +10 -6
  137. paddlex/inference/serving/schemas/seal_recognition.py +1 -1
  138. paddlex/inference/serving/schemas/table_recognition.py +2 -6
  139. paddlex/inference/serving/schemas/table_recognition_v2.py +5 -6
  140. paddlex/inference/utils/hpi.py +30 -16
  141. paddlex/inference/utils/hpi_model_info_collection.json +666 -162
  142. paddlex/inference/utils/io/readers.py +12 -12
  143. paddlex/inference/utils/misc.py +20 -0
  144. paddlex/inference/utils/mkldnn_blocklist.py +59 -0
  145. paddlex/inference/utils/official_models.py +140 -5
  146. paddlex/inference/utils/pp_option.py +74 -9
  147. paddlex/model.py +2 -2
  148. paddlex/modules/__init__.py +1 -1
  149. paddlex/modules/anomaly_detection/evaluator.py +2 -2
  150. paddlex/modules/base/__init__.py +1 -1
  151. paddlex/modules/base/evaluator.py +5 -5
  152. paddlex/modules/base/trainer.py +1 -1
  153. paddlex/modules/doc_vlm/dataset_checker.py +2 -2
  154. paddlex/modules/doc_vlm/evaluator.py +2 -2
  155. paddlex/modules/doc_vlm/exportor.py +2 -2
  156. paddlex/modules/doc_vlm/model_list.py +1 -1
  157. paddlex/modules/doc_vlm/trainer.py +2 -2
  158. paddlex/modules/face_recognition/evaluator.py +2 -2
  159. paddlex/modules/formula_recognition/evaluator.py +5 -2
  160. paddlex/modules/formula_recognition/model_list.py +3 -0
  161. paddlex/modules/formula_recognition/trainer.py +3 -0
  162. paddlex/modules/general_recognition/evaluator.py +1 -1
  163. paddlex/modules/image_classification/evaluator.py +2 -2
  164. paddlex/modules/image_classification/model_list.py +1 -0
  165. paddlex/modules/instance_segmentation/evaluator.py +1 -1
  166. paddlex/modules/keypoint_detection/evaluator.py +1 -1
  167. paddlex/modules/m_3d_bev_detection/evaluator.py +2 -2
  168. paddlex/modules/multilabel_classification/evaluator.py +2 -2
  169. paddlex/modules/object_detection/dataset_checker/dataset_src/convert_dataset.py +4 -4
  170. paddlex/modules/object_detection/evaluator.py +2 -2
  171. paddlex/modules/object_detection/model_list.py +2 -0
  172. paddlex/modules/semantic_segmentation/dataset_checker/__init__.py +12 -2
  173. paddlex/modules/semantic_segmentation/evaluator.py +2 -2
  174. paddlex/modules/table_recognition/evaluator.py +2 -2
  175. paddlex/modules/text_detection/evaluator.py +2 -2
  176. paddlex/modules/text_detection/model_list.py +2 -0
  177. paddlex/modules/text_recognition/evaluator.py +2 -2
  178. paddlex/modules/text_recognition/model_list.py +2 -0
  179. paddlex/modules/ts_anomaly_detection/evaluator.py +2 -2
  180. paddlex/modules/ts_classification/dataset_checker/dataset_src/split_dataset.py +1 -1
  181. paddlex/modules/ts_classification/evaluator.py +2 -2
  182. paddlex/modules/ts_forecast/evaluator.py +2 -2
  183. paddlex/modules/video_classification/evaluator.py +2 -2
  184. paddlex/modules/video_detection/evaluator.py +2 -2
  185. paddlex/ops/__init__.py +8 -5
  186. paddlex/paddlex_cli.py +19 -13
  187. paddlex/repo_apis/Paddle3D_api/bev_fusion/model.py +2 -2
  188. paddlex/repo_apis/PaddleClas_api/cls/config.py +1 -1
  189. paddlex/repo_apis/PaddleClas_api/cls/model.py +1 -1
  190. paddlex/repo_apis/PaddleClas_api/cls/register.py +10 -0
  191. paddlex/repo_apis/PaddleClas_api/cls/runner.py +1 -1
  192. paddlex/repo_apis/PaddleDetection_api/instance_seg/model.py +1 -1
  193. paddlex/repo_apis/PaddleDetection_api/instance_seg/runner.py +1 -1
  194. paddlex/repo_apis/PaddleDetection_api/object_det/config.py +1 -1
  195. paddlex/repo_apis/PaddleDetection_api/object_det/model.py +1 -1
  196. paddlex/repo_apis/PaddleDetection_api/object_det/official_categories.py +25 -0
  197. paddlex/repo_apis/PaddleDetection_api/object_det/register.py +30 -0
  198. paddlex/repo_apis/PaddleDetection_api/object_det/runner.py +1 -1
  199. paddlex/repo_apis/PaddleOCR_api/formula_rec/config.py +3 -3
  200. paddlex/repo_apis/PaddleOCR_api/formula_rec/model.py +5 -9
  201. paddlex/repo_apis/PaddleOCR_api/formula_rec/register.py +27 -0
  202. paddlex/repo_apis/PaddleOCR_api/formula_rec/runner.py +1 -1
  203. paddlex/repo_apis/PaddleOCR_api/table_rec/model.py +1 -1
  204. paddlex/repo_apis/PaddleOCR_api/table_rec/runner.py +1 -1
  205. paddlex/repo_apis/PaddleOCR_api/text_det/model.py +1 -1
  206. paddlex/repo_apis/PaddleOCR_api/text_det/register.py +18 -0
  207. paddlex/repo_apis/PaddleOCR_api/text_det/runner.py +1 -1
  208. paddlex/repo_apis/PaddleOCR_api/text_rec/config.py +3 -3
  209. paddlex/repo_apis/PaddleOCR_api/text_rec/model.py +5 -9
  210. paddlex/repo_apis/PaddleOCR_api/text_rec/register.py +18 -0
  211. paddlex/repo_apis/PaddleOCR_api/text_rec/runner.py +1 -1
  212. paddlex/repo_apis/PaddleSeg_api/seg/model.py +1 -1
  213. paddlex/repo_apis/PaddleSeg_api/seg/runner.py +1 -1
  214. paddlex/repo_apis/PaddleTS_api/ts_ad/config.py +3 -3
  215. paddlex/repo_apis/PaddleTS_api/ts_cls/config.py +2 -2
  216. paddlex/repo_apis/PaddleTS_api/ts_fc/config.py +4 -4
  217. paddlex/repo_apis/PaddleVideo_api/video_cls/config.py +1 -1
  218. paddlex/repo_apis/PaddleVideo_api/video_cls/model.py +1 -1
  219. paddlex/repo_apis/PaddleVideo_api/video_cls/runner.py +1 -1
  220. paddlex/repo_apis/PaddleVideo_api/video_det/config.py +1 -1
  221. paddlex/repo_apis/PaddleVideo_api/video_det/model.py +1 -1
  222. paddlex/repo_apis/PaddleVideo_api/video_det/runner.py +1 -1
  223. paddlex/repo_apis/base/config.py +1 -1
  224. paddlex/repo_manager/core.py +3 -3
  225. paddlex/repo_manager/meta.py +6 -2
  226. paddlex/repo_manager/repo.py +17 -16
  227. paddlex/utils/custom_device_list.py +26 -2
  228. paddlex/utils/deps.py +3 -3
  229. paddlex/utils/device.py +5 -13
  230. paddlex/utils/env.py +4 -0
  231. paddlex/utils/flags.py +11 -4
  232. paddlex/utils/fonts/__init__.py +34 -4
  233. paddlex/utils/misc.py +1 -1
  234. paddlex/utils/subclass_register.py +2 -2
  235. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/METADATA +349 -208
  236. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/RECORD +240 -211
  237. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/WHEEL +1 -1
  238. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/entry_points.txt +1 -0
  239. {paddlex-3.0.0rc1.dist-info/licenses → paddlex-3.0.2.dist-info}/LICENSE +0 -0
  240. {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/top_level.txt +0 -0
@@ -24,7 +24,7 @@ class FaceRecEvaluator(BaseEvaluator):
24
24
  entities = MODELS
25
25
 
26
26
  def update_config(self):
27
- """update evalution config"""
27
+ """update evaluation config"""
28
28
  if self.eval_config.log_interval:
29
29
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
30
30
  self.update_dataset_cfg()
@@ -41,7 +41,7 @@ class FaceRecEvaluator(BaseEvaluator):
41
41
  self.pdx_config.update(ds_cfg)
42
42
 
43
43
  def get_eval_kwargs(self) -> dict:
44
- """get key-value arguments of model evalution function
44
+ """get key-value arguments of model evaluation function
45
45
 
46
46
  Returns:
47
47
  dict: the arguments of evaluation function.
@@ -25,7 +25,7 @@ class FormulaRecEvaluator(BaseEvaluator):
25
25
  entities = MODELS
26
26
 
27
27
  def update_config(self):
28
- """update evalution config"""
28
+ """update evaluation config"""
29
29
  if self.eval_config.log_interval:
30
30
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
31
31
  if self.global_config["model"] == "LaTeX_OCR_rec":
@@ -36,6 +36,9 @@ class FormulaRecEvaluator(BaseEvaluator):
36
36
  "UniMERNet",
37
37
  "PP-FormulaNet-L",
38
38
  "PP-FormulaNet-S",
39
+ "PP-FormulaNet_plus-L",
40
+ "PP-FormulaNet_plus-M",
41
+ "PP-FormulaNet_plus-S",
39
42
  ):
40
43
  self.pdx_config.update_dataset(
41
44
  self.global_config.dataset_dir, "SimpleDataSet"
@@ -66,7 +69,7 @@ class FormulaRecEvaluator(BaseEvaluator):
66
69
  self.pdx_config.update_delimiter(self.eval_config.delimiter, mode="eval")
67
70
 
68
71
  def get_eval_kwargs(self) -> dict:
69
- """get key-value arguments of model evalution function
72
+ """get key-value arguments of model evaluation function
70
73
 
71
74
  Returns:
72
75
  dict: the arguments of evaluation function.
@@ -17,4 +17,7 @@ MODELS = [
17
17
  "UniMERNet",
18
18
  "PP-FormulaNet-S",
19
19
  "PP-FormulaNet-L",
20
+ "PP-FormulaNet_plus-S",
21
+ "PP-FormulaNet_plus-M",
22
+ "PP-FormulaNet_plus-L",
20
23
  ]
@@ -53,6 +53,9 @@ class FormulaRecTrainer(BaseTrainer):
53
53
  "UniMERNet",
54
54
  "PP-FormulaNet-L",
55
55
  "PP-FormulaNet-S",
56
+ "PP-FormulaNet_plus-L",
57
+ "PP-FormulaNet_plus-M",
58
+ "PP-FormulaNet_plus-S",
56
59
  ):
57
60
  self.pdx_config.update_dataset(
58
61
  self.global_config.dataset_dir, "SimpleDataSet"
@@ -22,7 +22,7 @@ class ShiTuRecEvaluator(ClsEvaluator):
22
22
  entities = MODELS
23
23
 
24
24
  def update_config(self):
25
- """update evalution config"""
25
+ """update evaluation config"""
26
26
  if self.eval_config.log_interval:
27
27
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
28
28
  self.pdx_config.update_dataset(
@@ -22,7 +22,7 @@ class ClsEvaluator(BaseEvaluator):
22
22
  entities = MODELS
23
23
 
24
24
  def update_config(self):
25
- """update evalution config"""
25
+ """update evaluation config"""
26
26
  if self.eval_config.log_interval:
27
27
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
28
28
  if self.pdx_config["Arch"]["name"] == "DistillationModel":
@@ -32,7 +32,7 @@ class ClsEvaluator(BaseEvaluator):
32
32
  self.pdx_config.update_pretrained_weights(self.eval_config.weight_path)
33
33
 
34
34
  def get_eval_kwargs(self) -> dict:
35
- """get key-value arguments of model evalution function
35
+ """get key-value arguments of model evaluation function
36
36
 
37
37
  Returns:
38
38
  dict: the arguments of evaluation function.
@@ -62,6 +62,7 @@ MODELS = [
62
62
  "PP-LCNet_x0_75",
63
63
  "PP-LCNet_x1_0",
64
64
  "PP-LCNet_x1_0_doc_ori",
65
+ "PP-LCNet_x1_0_textline_ori",
65
66
  "PP-LCNet_x1_5",
66
67
  "PP-LCNet_x2_0",
67
68
  "PP-LCNet_x2_5",
@@ -23,7 +23,7 @@ class InstanceSegEvaluator(DetEvaluator):
23
23
  entities = MODELS
24
24
 
25
25
  def update_config(self):
26
- """update evalution config"""
26
+ """update evaluation config"""
27
27
  if self.eval_config.log_interval:
28
28
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
29
29
  self.pdx_config.update_dataset(
@@ -23,7 +23,7 @@ class KeypointEvaluator(DetEvaluator):
23
23
  entities = MODELS
24
24
 
25
25
  def update_config(self):
26
- """update evalution config"""
26
+ """update evaluation config"""
27
27
  if self.eval_config.log_interval:
28
28
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
29
29
  metric = self.pdx_config.metric
@@ -23,7 +23,7 @@ class BEVFusionEvaluator(BaseEvaluator):
23
23
  entities = MODELS
24
24
 
25
25
  def update_config(self):
26
- """update evalution config"""
26
+ """update evaluation config"""
27
27
  if self.eval_config.batch_size is not None:
28
28
  self.pdx_config.update_batch_size(self.eval_config.batch_size)
29
29
  self.pdx_config.update_dataset(
@@ -35,7 +35,7 @@ class BEVFusionEvaluator(BaseEvaluator):
35
35
  self.pdx_config.update_weights(self.eval_config.weight_path)
36
36
 
37
37
  def get_eval_kwargs(self) -> dict:
38
- """get key-value arguments of model evalution function
38
+ """get key-value arguments of model evaluation function
39
39
 
40
40
  Returns:
41
41
  dict: the arguments of evaluation function.
@@ -22,7 +22,7 @@ class MLClsEvaluator(BaseEvaluator):
22
22
  entities = MODELS
23
23
 
24
24
  def update_config(self):
25
- """update evalution config"""
25
+ """update evaluation config"""
26
26
  if self.eval_config.log_interval:
27
27
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
28
28
  if self.pdx_config["Arch"]["name"] == "DistillationModel":
@@ -32,7 +32,7 @@ class MLClsEvaluator(BaseEvaluator):
32
32
  self.pdx_config.update_pretrained_weights(self.eval_config.weight_path)
33
33
 
34
34
  def get_eval_kwargs(self) -> dict:
35
- """get key-value arguments of model evalution function
35
+ """get key-value arguments of model evaluation function
36
36
 
37
37
  Returns:
38
38
  dict: the arguments of evaluation function.
@@ -267,8 +267,8 @@ def voc_get_label_anno(root_dir, anno_path):
267
267
  Read VOC format annotation file.
268
268
 
269
269
  Args:
270
- root_dir (str): The directoty of VOC annotation file.
271
- anno_path (str): The annoation file path.
270
+ root_dir (str): The directory of VOC annotation file.
271
+ anno_path (str): The annotation file path.
272
272
 
273
273
  Returns:
274
274
  tuple: A tuple of two elements, the first of which is of type dict, representing the mapping between tag names
@@ -295,7 +295,7 @@ def voc_get_label_anno(root_dir, anno_path):
295
295
 
296
296
  def voc_get_image_info(annotation_root, img_indexer):
297
297
  """
298
- Get the iamge info from VOC annotation file.
298
+ Get the image info from VOC annotation file.
299
299
 
300
300
  Args:
301
301
  annotation_root: The annotation root.
@@ -425,7 +425,7 @@ def voc_xmls_to_cocojson(
425
425
  output_json_dict["images"].append(img_info)
426
426
 
427
427
  for obj in ann_root.findall("object"):
428
- if obj.find("bndbox") is None: # Skip the ojbect wihtout bndbox
428
+ if obj.find("bndbox") is None: # Skip the object without bndbox
429
429
  continue
430
430
  ann = voc_get_coco_annotation(obj=obj, label_indexer=label_indexer)
431
431
  ann.update({"image_id": img_info["id"], "id": bnd_id})
@@ -39,14 +39,14 @@ class DetEvaluator(BaseEvaluator):
39
39
  )
40
40
 
41
41
  def update_config(self):
42
- """update evalution config"""
42
+ """update evaluation config"""
43
43
  if self.eval_config.log_interval:
44
44
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
45
45
  self._update_dataset()
46
46
  self.pdx_config.update_weights(self.eval_config.weight_path)
47
47
 
48
48
  def get_eval_kwargs(self) -> dict:
49
- """get key-value arguments of model evalution function
49
+ """get key-value arguments of model evaluation function
50
50
 
51
51
  Returns:
52
52
  dict: the arguments of evaluation function.
@@ -81,4 +81,6 @@ MODELS = [
81
81
  "PP-DocLayout-L",
82
82
  "PP-DocLayout-M",
83
83
  "PP-DocLayout-S",
84
+ "PP-DocLayout_plus-L",
85
+ "PP-DocBlockLayout",
84
86
  ]
@@ -38,8 +38,18 @@ class SegDatasetChecker(BaseDatasetChecker):
38
38
  str: the root directory of dataset.
39
39
  """
40
40
  anno_dirs = list(Path(dataset_dir).glob("**/images"))
41
- assert len(anno_dirs) == 1
42
- dataset_dir = anno_dirs[0].parent.as_posix()
41
+ if len(anno_dirs) == 1:
42
+ dataset_dir = anno_dirs[0].parent.as_posix()
43
+ elif len(anno_dirs) == 0:
44
+ dataset_dir = Path(dataset_dir)
45
+ else:
46
+ raise ValueError(
47
+ f"Segmentation Dataset Format Error: We currently only support `PaddleX` and `Labelme` formats. "
48
+ f"For `PaddleX` format, your dataset root must contain exactly one `images` directory. "
49
+ f"For `Labelme` format, your dataset root must contain no `images` directories. "
50
+ f"However, your dataset root contains {len(anno_dirs)} `images` directories. "
51
+ f"Please adjust your dataset structure to comply with the supported formats."
52
+ )
43
53
  return dataset_dir
44
54
 
45
55
  def convert_dataset(self, src_dataset_dir: str) -> str:
@@ -26,7 +26,7 @@ class SegEvaluator(BaseEvaluator):
26
26
  entities = MODELS
27
27
 
28
28
  def update_config(self):
29
- """update evalution config"""
29
+ """update evaluation config"""
30
30
  self.pdx_config.update_dataset(self.global_config.dataset_dir, "SegDataset")
31
31
  self.pdx_config.update_pretrained_weights(None, is_backbone=True)
32
32
 
@@ -47,7 +47,7 @@ class SegEvaluator(BaseEvaluator):
47
47
  return config_path
48
48
 
49
49
  def get_eval_kwargs(self) -> dict:
50
- """get key-value arguments of model evalution function
50
+ """get key-value arguments of model evaluation function
51
51
 
52
52
  Returns:
53
53
  dict: the arguments of evaluation function.
@@ -23,7 +23,7 @@ class TableRecEvaluator(BaseEvaluator):
23
23
  entities = MODELS
24
24
 
25
25
  def update_config(self):
26
- """update evalution config"""
26
+ """update evaluation config"""
27
27
  if self.eval_config.log_interval:
28
28
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
29
29
 
@@ -32,7 +32,7 @@ class TableRecEvaluator(BaseEvaluator):
32
32
  )
33
33
 
34
34
  def get_eval_kwargs(self) -> dict:
35
- """get key-value arguments of model evalution function
35
+ """get key-value arguments of model evaluation function
36
36
 
37
37
  Returns:
38
38
  dict: the arguments of evaluation function.
@@ -23,14 +23,14 @@ class TextDetEvaluator(BaseEvaluator):
23
23
  entities = MODELS
24
24
 
25
25
  def update_config(self):
26
- """update evalution config"""
26
+ """update evaluation config"""
27
27
  if self.eval_config.log_interval:
28
28
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
29
29
 
30
30
  self.pdx_config.update_dataset(self.global_config.dataset_dir, "TextDetDataset")
31
31
 
32
32
  def get_eval_kwargs(self) -> dict:
33
- """get key-value arguments of model evalution function
33
+ """get key-value arguments of model evaluation function
34
34
 
35
35
  Returns:
36
36
  dict: the arguments of evaluation function.
@@ -13,6 +13,8 @@
13
13
  # limitations under the License.
14
14
 
15
15
  MODELS = [
16
+ "PP-OCRv5_mobile_det",
17
+ "PP-OCRv5_server_det",
16
18
  "PP-OCRv4_mobile_det",
17
19
  "PP-OCRv4_server_det",
18
20
  "PP-OCRv4_mobile_seal_det",
@@ -25,7 +25,7 @@ class TextRecEvaluator(BaseEvaluator):
25
25
  entities = MODELS
26
26
 
27
27
  def update_config(self):
28
- """update evalution config"""
28
+ """update evaluation config"""
29
29
  if self.eval_config.log_interval:
30
30
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
31
31
  if self.global_config["model"] == "LaTeX_OCR_rec":
@@ -53,7 +53,7 @@ class TextRecEvaluator(BaseEvaluator):
53
53
  self.pdx_config.update_label_dict_path(label_dict_path)
54
54
 
55
55
  def get_eval_kwargs(self) -> dict:
56
- """get key-value arguments of model evalution function
56
+ """get key-value arguments of model evaluation function
57
57
 
58
58
  Returns:
59
59
  dict: the arguments of evaluation function.
@@ -31,4 +31,6 @@ MODELS = [
31
31
  "PP-OCRv4_server_rec_doc",
32
32
  "ch_SVTRv2_rec",
33
33
  "ch_RepSVTR_rec",
34
+ "PP-OCRv5_server_rec",
35
+ "PP-OCRv5_mobile_rec",
34
36
  ]
@@ -41,7 +41,7 @@ class TSADEvaluator(BaseEvaluator):
41
41
  return config_path
42
42
 
43
43
  def update_config(self):
44
- """update evalution config"""
44
+ """update evaluation config"""
45
45
  self.pdx_config.update_dataset(self.global_config.dataset_dir, "TSADDataset")
46
46
  self.pdx_config.update_weights(self.eval_config.weight_path)
47
47
 
@@ -56,7 +56,7 @@ class TSADEvaluator(BaseEvaluator):
56
56
  )
57
57
 
58
58
  def get_eval_kwargs(self) -> dict:
59
- """get key-value arguments of model evalution function
59
+ """get key-value arguments of model evaluation function
60
60
 
61
61
  Returns:
62
62
  dict: the arguments of evaluation function.
@@ -55,7 +55,7 @@ def split_dataset(root_dir, train_rate, val_rate, group_id="group_id"):
55
55
  df = df.drop_duplicates(keep="first")
56
56
 
57
57
  group_unique = df[group_id].unique()
58
- dfs = [] # seperate multiple group
58
+ dfs = [] # separate multiple group
59
59
  for column in group_unique:
60
60
  df_one = df[df[group_id].isin([column])]
61
61
  df_one = df_one.drop_duplicates(subset=["time"], keep="first")
@@ -41,11 +41,11 @@ class TSCLSEvaluator(BaseEvaluator):
41
41
  return config_path
42
42
 
43
43
  def update_config(self):
44
- """update evalution config"""
44
+ """update evaluation config"""
45
45
  self.pdx_config.update_dataset(self.global_config.dataset_dir, "TSCLSDataset")
46
46
 
47
47
  def get_eval_kwargs(self) -> dict:
48
- """get key-value arguments of model evalution function
48
+ """get key-value arguments of model evaluation function
49
49
 
50
50
  Returns:
51
51
  dict: the arguments of evaluation function.
@@ -41,11 +41,11 @@ class TSFCEvaluator(BaseEvaluator):
41
41
  return config_path
42
42
 
43
43
  def update_config(self):
44
- """update evalution config"""
44
+ """update evaluation config"""
45
45
  self.pdx_config.update_dataset(self.global_config.dataset_dir, "TSDataset")
46
46
 
47
47
  def get_eval_kwargs(self) -> dict:
48
- """get key-value arguments of model evalution function
48
+ """get key-value arguments of model evaluation function
49
49
 
50
50
  Returns:
51
51
  dict: the arguments of evaluation function.
@@ -22,7 +22,7 @@ class VideoClsEvaluator(BaseEvaluator):
22
22
  entities = MODELS
23
23
 
24
24
  def update_config(self):
25
- """update evalution config"""
25
+ """update evaluation config"""
26
26
  if self.eval_config.log_interval:
27
27
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
28
28
  self.pdx_config.update_dataset(
@@ -33,7 +33,7 @@ class VideoClsEvaluator(BaseEvaluator):
33
33
  self.pdx_config.update_pretrained_weights(self.eval_config.weight_path)
34
34
 
35
35
  def get_eval_kwargs(self) -> dict:
36
- """get key-value arguments of model evalution function
36
+ """get key-value arguments of model evaluation function
37
37
 
38
38
  Returns:
39
39
  dict: the arguments of evaluation function.
@@ -22,7 +22,7 @@ class VideoDetEvaluator(BaseEvaluator):
22
22
  entities = MODELS
23
23
 
24
24
  def update_config(self):
25
- """update evalution config"""
25
+ """update evaluation config"""
26
26
  if self.eval_config.log_interval:
27
27
  self.pdx_config.update_log_interval(self.eval_config.log_interval)
28
28
  self.pdx_config.update_dataset(
@@ -31,7 +31,7 @@ class VideoDetEvaluator(BaseEvaluator):
31
31
  self.pdx_config.update_pretrained_weights(self.eval_config.weight_path)
32
32
 
33
33
  def get_eval_kwargs(self) -> dict:
34
- """get key-value arguments of model evalution function
34
+ """get key-value arguments of model evaluation function
35
35
 
36
36
  Returns:
37
37
  dict: the arguments of evaluation function.
paddlex/ops/__init__.py CHANGED
@@ -66,11 +66,14 @@ class CustomOpNotFoundException(Exception):
66
66
 
67
67
 
68
68
  class CustomOperatorPathFinder:
69
- def find_module(self, fullname: str, path: str = None):
69
+ def find_spec(self, fullname: str, path, target=None):
70
70
  if not fullname.startswith("paddlex.ops"):
71
71
  return None
72
-
73
- return CustomOperatorPathLoader()
72
+ return importlib.machinery.ModuleSpec(
73
+ name=fullname,
74
+ loader=CustomOperatorPathLoader(),
75
+ is_package=False,
76
+ )
74
77
 
75
78
 
76
79
  class CustomOperatorPathLoader:
@@ -114,7 +117,7 @@ class PaddleXCustomOperatorModule(ModuleType):
114
117
  with filelock.FileLock(lockfile):
115
118
  return paddle_jit_load(name=self.modulename, sources=sources, **args)
116
119
  except:
117
- logging.error("{} builded fail!".format(self.modulename))
120
+ logging.error("{} built fail!".format(self.modulename))
118
121
  raise
119
122
 
120
123
  def _load_module(self):
@@ -126,7 +129,7 @@ class PaddleXCustomOperatorModule(ModuleType):
126
129
  "No custom op {} found, try JIT build".format(self.modulename)
127
130
  )
128
131
  self.module = self.jit_build()
129
- logging.info("{} builded success!".format(self.modulename))
132
+ logging.info("{} built success!".format(self.modulename))
130
133
 
131
134
  # refresh
132
135
  sys.modules[self.fullname] = self.module
paddlex/paddlex_cli.py CHANGED
@@ -66,15 +66,9 @@ def args_cfg():
66
66
  ################# install pdx #################
67
67
  install_group.add_argument(
68
68
  "--install",
69
- action="store_true",
70
- default=False,
71
- help="Install specified PaddleX plugins.",
72
- )
73
- install_group.add_argument(
74
- "plugins",
75
69
  nargs="*",
76
- default=[],
77
- help="Names of custom development plugins to install (space-separated).",
70
+ metavar="PLUGIN",
71
+ help="Install specified PaddleX plugins.",
78
72
  )
79
73
  install_group.add_argument(
80
74
  "--no_deps",
@@ -193,7 +187,10 @@ def args_cfg():
193
187
  pipeline = args.pipeline
194
188
  pipeline_args = []
195
189
 
196
- if not (args.install or args.serve or args.paddle2onnx) and pipeline is not None:
190
+ if (
191
+ not (args.install is not None or args.serve or args.paddle2onnx)
192
+ and pipeline is not None
193
+ ):
197
194
  if os.path.isfile(pipeline):
198
195
  pipeline_name = load_pipeline_config(pipeline)["pipeline_name"]
199
196
  else:
@@ -247,7 +244,12 @@ def install(args):
247
244
  if device_type == "cpu":
248
245
  package = "ultra-infer-python"
249
246
  elif device_type == "gpu":
250
- if get_paddle_cuda_version()[0] != 11:
247
+ cuda_version = get_paddle_cuda_version()
248
+ if not cuda_version:
249
+ sys.exit(
250
+ "No CUDA version found. Please make sure you have installed PaddlePaddle with CUDA enabled."
251
+ )
252
+ if cuda_version[0] != 11:
251
253
  sys.exit(
252
254
  "You are not using PaddlePaddle compiled with CUDA 11. Currently, CUDA versions other than 11.x are not supported by the high-performance inference plugin."
253
255
  )
@@ -263,7 +265,7 @@ def install(args):
263
265
  # Disable eager initialization
264
266
  os.environ["PADDLE_PDX_EAGER_INIT"] = "False"
265
267
 
266
- plugins = args.plugins[:]
268
+ plugins = args.install[:]
267
269
 
268
270
  if "serving" in plugins:
269
271
  plugins.remove("serving")
@@ -435,8 +437,9 @@ def main():
435
437
  parser.print_help()
436
438
  sys.exit(2)
437
439
 
438
- if args.install:
440
+ if args.install is not None:
439
441
  install(args)
442
+ return
440
443
  elif args.serve:
441
444
  serve(
442
445
  args.pipeline,
@@ -446,12 +449,14 @@ def main():
446
449
  host=args.host,
447
450
  port=args.port,
448
451
  )
452
+ return
449
453
  elif args.paddle2onnx:
450
454
  paddle_to_onnx(
451
455
  args.paddle_model_dir,
452
456
  args.onnx_model_dir,
453
457
  opset_version=args.opset_version,
454
458
  )
459
+ return
455
460
  else:
456
461
  if args.get_pipeline_config is not None:
457
462
  interactive_get_pipeline(args.get_pipeline_config, args.save_path)
@@ -464,7 +469,7 @@ def main():
464
469
  pipeline_args_dict[arg_name] = getattr(args, arg_name)
465
470
  else:
466
471
  logging.warning(f"Argument {arg_name} is missing in args")
467
- return pipeline_predict(
472
+ pipeline_predict(
468
473
  args.pipeline,
469
474
  args.input,
470
475
  args.device,
@@ -473,3 +478,4 @@ def main():
473
478
  hpi_config=args.hpi_config,
474
479
  **pipeline_args_dict,
475
480
  )
481
+ return
@@ -54,7 +54,7 @@ class BEVFusionModel(BaseModel):
54
54
  raise ValueError(f"`dy2st`={dy2st} is not supported.")
55
55
  if device in ("cpu", "gpu"):
56
56
  logging.warning(
57
- f"The device type to use will be automatically determined, which may differ from the sepcified type: {repr(device)}."
57
+ f"The device type to use will be automatically determined, which may differ from the specified type: {repr(device)}."
58
58
  )
59
59
 
60
60
  # Update YAML config file
@@ -134,7 +134,7 @@ class BEVFusionModel(BaseModel):
134
134
 
135
135
  if device in ("cpu", "gpu"):
136
136
  logging.warning(
137
- f"The device type to use will be automatically determined, which may differ from the sepcified type: {repr(device)}."
137
+ f"The device type to use will be automatically determined, which may differ from the specified type: {repr(device)}."
138
138
  )
139
139
 
140
140
  # Update YAML config file
@@ -464,7 +464,7 @@ indicating that no pretrained model to be used."
464
464
  """update directory that save predicting output
465
465
 
466
466
  Args:
467
- save_dir (str): the dicrectory path that save predicting output.
467
+ save_dir (str): the directory path that save predicting output.
468
468
  """
469
469
  self.update([f"Infer.save_dir={save_dir}"])
470
470
 
@@ -265,7 +265,7 @@ class ClsModel(BaseModel):
265
265
  dict_path (str, optional): the label dict file path. Defaults to None.
266
266
 
267
267
  Returns:
268
- CompletedProcess: the result of infering subprocess execution.
268
+ CompletedProcess: the result of inferring subprocess execution.
269
269
  """
270
270
  model_dir = abspath(model_dir)
271
271
  input_path = abspath(input_path)
@@ -896,6 +896,16 @@ register_model_info(
896
896
  }
897
897
  )
898
898
 
899
+ register_model_info(
900
+ {
901
+ "model_name": "PP-LCNet_x1_0_textline_ori",
902
+ "suite": "Cls",
903
+ "config_path": osp.join(PDX_CONFIG_DIR, "PP-LCNet_x1_0_textline_ori.yaml"),
904
+ "supported_apis": ["train", "evaluate", "predict", "export", "infer"],
905
+ "infer_config": "deploy/configs/inference_cls.yaml",
906
+ }
907
+ )
908
+
899
909
  register_model_info(
900
910
  {
901
911
  "model_name": "PP-LCNet_x1_0_table_cls",
@@ -135,7 +135,7 @@ class ClsRunner(BaseRunner):
135
135
  device (str): unused.
136
136
 
137
137
  Returns:
138
- CompletedProcess: the result of infering subprocess execution.
138
+ CompletedProcess: the result of inferring subprocess execution.
139
139
  """
140
140
  # `device` unused
141
141
  cmd = [self.python, "python/predict_cls.py", "-c", config_path, *cli_args]
@@ -310,7 +310,7 @@ class InstanceSegModel(BaseModel):
310
310
  save_dir (str, optional): the directory path to save output. Defaults to None.
311
311
 
312
312
  Returns:
313
- CompletedProcess: the result of infering subprocess execution.
313
+ CompletedProcess: the result of inferring subprocess execution.
314
314
  """
315
315
  model_dir = abspath(model_dir)
316
316
  input_path = abspath(input_path)
@@ -138,7 +138,7 @@ class InstanceSegRunner(BaseRunner):
138
138
  device (str): unused.
139
139
 
140
140
  Returns:
141
- CompletedProcess: the result of infering subprocess execution.
141
+ CompletedProcess: the result of inferring subprocess execution.
142
142
  """
143
143
  # `device` unused
144
144
  cmd = [self.python, "deploy/python/infer.py", "--use_fd_format", *cli_args]