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.
- paddlex/.version +1 -1
- paddlex/__init__.py +1 -1
- paddlex/configs/modules/chart_parsing/PP-Chart2Table.yaml +13 -0
- paddlex/configs/modules/doc_vlm/PP-DocBee2-3B.yaml +14 -0
- paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-L.yaml +40 -0
- paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-M.yaml +40 -0
- paddlex/configs/modules/formula_recognition/PP-FormulaNet_plus-S.yaml +40 -0
- paddlex/configs/modules/layout_detection/PP-DocBlockLayout.yaml +40 -0
- paddlex/configs/modules/layout_detection/PP-DocLayout-L.yaml +2 -2
- paddlex/configs/modules/layout_detection/PP-DocLayout-M.yaml +2 -2
- paddlex/configs/modules/layout_detection/PP-DocLayout-S.yaml +2 -2
- paddlex/configs/modules/layout_detection/PP-DocLayout_plus-L.yaml +40 -0
- paddlex/configs/modules/text_detection/PP-OCRv5_mobile_det.yaml +40 -0
- paddlex/configs/modules/text_detection/PP-OCRv5_server_det.yaml +40 -0
- paddlex/configs/modules/text_recognition/PP-OCRv5_mobile_rec.yaml +39 -0
- paddlex/configs/modules/text_recognition/PP-OCRv5_server_rec.yaml +39 -0
- paddlex/configs/modules/textline_orientation/PP-LCNet_x1_0_textline_ori.yaml +41 -0
- paddlex/configs/pipelines/OCR.yaml +7 -6
- paddlex/configs/pipelines/PP-ChatOCRv3-doc.yaml +3 -1
- paddlex/configs/pipelines/PP-ChatOCRv4-doc.yaml +91 -34
- paddlex/configs/pipelines/PP-StructureV3.yaml +72 -72
- paddlex/configs/pipelines/doc_understanding.yaml +1 -1
- paddlex/configs/pipelines/formula_recognition.yaml +2 -2
- paddlex/configs/pipelines/layout_parsing.yaml +3 -2
- paddlex/configs/pipelines/seal_recognition.yaml +1 -0
- paddlex/configs/pipelines/table_recognition.yaml +2 -1
- paddlex/configs/pipelines/table_recognition_v2.yaml +7 -1
- paddlex/hpip_links.html +20 -20
- paddlex/inference/common/batch_sampler/doc_vlm_batch_sampler.py +33 -10
- paddlex/inference/common/batch_sampler/image_batch_sampler.py +34 -25
- paddlex/inference/common/result/mixin.py +19 -12
- paddlex/inference/models/base/predictor/base_predictor.py +2 -8
- paddlex/inference/models/common/static_infer.py +29 -73
- paddlex/inference/models/common/tokenizer/__init__.py +2 -0
- paddlex/inference/models/common/tokenizer/clip_tokenizer.py +1 -1
- paddlex/inference/models/common/tokenizer/gpt_tokenizer.py +2 -2
- paddlex/inference/models/common/tokenizer/qwen2_5_tokenizer.py +112 -0
- paddlex/inference/models/common/tokenizer/qwen2_tokenizer.py +7 -1
- paddlex/inference/models/common/tokenizer/qwen_tokenizer.py +288 -0
- paddlex/inference/models/common/tokenizer/tokenizer_utils.py +13 -13
- paddlex/inference/models/common/tokenizer/tokenizer_utils_base.py +3 -3
- paddlex/inference/models/common/tokenizer/vocab.py +7 -7
- paddlex/inference/models/common/ts/funcs.py +19 -8
- paddlex/inference/models/common/vlm/conversion_utils.py +99 -0
- paddlex/inference/models/common/vlm/fusion_ops.py +205 -0
- paddlex/inference/models/common/vlm/generation/configuration_utils.py +1 -1
- paddlex/inference/models/common/vlm/generation/logits_process.py +1 -1
- paddlex/inference/models/common/vlm/generation/utils.py +1 -1
- paddlex/inference/models/common/vlm/transformers/configuration_utils.py +3 -3
- paddlex/inference/models/common/vlm/transformers/conversion_utils.py +3 -3
- paddlex/inference/models/common/vlm/transformers/model_outputs.py +2 -2
- paddlex/inference/models/common/vlm/transformers/model_utils.py +7 -31
- paddlex/inference/models/doc_vlm/modeling/GOT_ocr_2_0.py +830 -0
- paddlex/inference/models/doc_vlm/modeling/__init__.py +2 -0
- paddlex/inference/models/doc_vlm/modeling/qwen2.py +1606 -0
- paddlex/inference/models/doc_vlm/modeling/qwen2_5_vl.py +3006 -0
- paddlex/inference/models/doc_vlm/modeling/qwen2_vl.py +0 -105
- paddlex/inference/models/doc_vlm/predictor.py +79 -24
- paddlex/inference/models/doc_vlm/processors/GOT_ocr_2_0.py +97 -0
- paddlex/inference/models/doc_vlm/processors/__init__.py +2 -0
- paddlex/inference/models/doc_vlm/processors/common.py +189 -0
- paddlex/inference/models/doc_vlm/processors/qwen2_5_vl.py +548 -0
- paddlex/inference/models/doc_vlm/processors/qwen2_vl.py +21 -176
- paddlex/inference/models/formula_recognition/predictor.py +8 -2
- paddlex/inference/models/formula_recognition/processors.py +90 -77
- paddlex/inference/models/formula_recognition/result.py +28 -27
- paddlex/inference/models/image_feature/processors.py +3 -4
- paddlex/inference/models/keypoint_detection/predictor.py +3 -0
- paddlex/inference/models/object_detection/predictor.py +2 -0
- paddlex/inference/models/object_detection/processors.py +28 -3
- paddlex/inference/models/object_detection/utils.py +2 -0
- paddlex/inference/models/table_structure_recognition/result.py +0 -10
- paddlex/inference/models/text_detection/predictor.py +8 -0
- paddlex/inference/models/text_detection/processors.py +44 -10
- paddlex/inference/models/text_detection/result.py +0 -10
- paddlex/inference/models/text_recognition/result.py +1 -1
- paddlex/inference/pipelines/__init__.py +9 -5
- paddlex/inference/pipelines/_parallel.py +172 -0
- paddlex/inference/pipelines/anomaly_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/attribute_recognition/pipeline.py +11 -1
- paddlex/inference/pipelines/base.py +14 -4
- paddlex/inference/pipelines/components/faisser.py +1 -1
- paddlex/inference/pipelines/doc_preprocessor/pipeline.py +53 -27
- paddlex/inference/pipelines/formula_recognition/pipeline.py +120 -82
- paddlex/inference/pipelines/formula_recognition/result.py +1 -11
- paddlex/inference/pipelines/image_classification/pipeline.py +16 -6
- paddlex/inference/pipelines/image_multilabel_classification/pipeline.py +16 -6
- paddlex/inference/pipelines/instance_segmentation/pipeline.py +16 -6
- paddlex/inference/pipelines/keypoint_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/layout_parsing/layout_objects.py +859 -0
- paddlex/inference/pipelines/layout_parsing/pipeline.py +34 -47
- paddlex/inference/pipelines/layout_parsing/pipeline_v2.py +832 -260
- paddlex/inference/pipelines/layout_parsing/result.py +4 -17
- paddlex/inference/pipelines/layout_parsing/result_v2.py +259 -245
- paddlex/inference/pipelines/layout_parsing/setting.py +88 -0
- paddlex/inference/pipelines/layout_parsing/utils.py +391 -2028
- paddlex/inference/pipelines/layout_parsing/xycut_enhanced/__init__.py +16 -0
- paddlex/inference/pipelines/layout_parsing/xycut_enhanced/utils.py +1199 -0
- paddlex/inference/pipelines/layout_parsing/xycut_enhanced/xycuts.py +615 -0
- paddlex/inference/pipelines/m_3d_bev_detection/pipeline.py +2 -2
- paddlex/inference/pipelines/multilingual_speech_recognition/pipeline.py +2 -2
- paddlex/inference/pipelines/object_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/ocr/pipeline.py +127 -70
- paddlex/inference/pipelines/ocr/result.py +21 -18
- paddlex/inference/pipelines/open_vocabulary_detection/pipeline.py +2 -2
- paddlex/inference/pipelines/open_vocabulary_segmentation/pipeline.py +2 -2
- paddlex/inference/pipelines/pp_chatocr/pipeline_base.py +2 -2
- paddlex/inference/pipelines/pp_chatocr/pipeline_v3.py +2 -5
- paddlex/inference/pipelines/pp_chatocr/pipeline_v4.py +6 -6
- paddlex/inference/pipelines/rotated_object_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/seal_recognition/pipeline.py +109 -53
- paddlex/inference/pipelines/semantic_segmentation/pipeline.py +16 -6
- paddlex/inference/pipelines/small_object_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/table_recognition/pipeline.py +26 -18
- paddlex/inference/pipelines/table_recognition/pipeline_v2.py +624 -53
- paddlex/inference/pipelines/table_recognition/result.py +1 -1
- paddlex/inference/pipelines/table_recognition/table_recognition_post_processing_v2.py +9 -5
- paddlex/inference/pipelines/ts_anomaly_detection/pipeline.py +2 -2
- paddlex/inference/pipelines/ts_classification/pipeline.py +2 -2
- paddlex/inference/pipelines/ts_forecasting/pipeline.py +2 -2
- paddlex/inference/pipelines/video_classification/pipeline.py +2 -2
- paddlex/inference/pipelines/video_detection/pipeline.py +2 -2
- paddlex/inference/serving/basic_serving/_app.py +46 -13
- paddlex/inference/serving/basic_serving/_pipeline_apps/_common/common.py +5 -1
- paddlex/inference/serving/basic_serving/_pipeline_apps/layout_parsing.py +0 -1
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv3_doc.py +0 -1
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv4_doc.py +1 -1
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_structurev3.py +6 -2
- paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition.py +1 -5
- paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition_v2.py +4 -5
- paddlex/inference/serving/infra/utils.py +20 -22
- paddlex/inference/serving/schemas/formula_recognition.py +1 -1
- paddlex/inference/serving/schemas/layout_parsing.py +1 -2
- paddlex/inference/serving/schemas/pp_chatocrv3_doc.py +1 -2
- paddlex/inference/serving/schemas/pp_chatocrv4_doc.py +2 -2
- paddlex/inference/serving/schemas/pp_structurev3.py +10 -6
- paddlex/inference/serving/schemas/seal_recognition.py +1 -1
- paddlex/inference/serving/schemas/table_recognition.py +2 -6
- paddlex/inference/serving/schemas/table_recognition_v2.py +5 -6
- paddlex/inference/utils/hpi.py +30 -16
- paddlex/inference/utils/hpi_model_info_collection.json +666 -162
- paddlex/inference/utils/io/readers.py +12 -12
- paddlex/inference/utils/misc.py +20 -0
- paddlex/inference/utils/mkldnn_blocklist.py +59 -0
- paddlex/inference/utils/official_models.py +140 -5
- paddlex/inference/utils/pp_option.py +74 -9
- paddlex/model.py +2 -2
- paddlex/modules/__init__.py +1 -1
- paddlex/modules/anomaly_detection/evaluator.py +2 -2
- paddlex/modules/base/__init__.py +1 -1
- paddlex/modules/base/evaluator.py +5 -5
- paddlex/modules/base/trainer.py +1 -1
- paddlex/modules/doc_vlm/dataset_checker.py +2 -2
- paddlex/modules/doc_vlm/evaluator.py +2 -2
- paddlex/modules/doc_vlm/exportor.py +2 -2
- paddlex/modules/doc_vlm/model_list.py +1 -1
- paddlex/modules/doc_vlm/trainer.py +2 -2
- paddlex/modules/face_recognition/evaluator.py +2 -2
- paddlex/modules/formula_recognition/evaluator.py +5 -2
- paddlex/modules/formula_recognition/model_list.py +3 -0
- paddlex/modules/formula_recognition/trainer.py +3 -0
- paddlex/modules/general_recognition/evaluator.py +1 -1
- paddlex/modules/image_classification/evaluator.py +2 -2
- paddlex/modules/image_classification/model_list.py +1 -0
- paddlex/modules/instance_segmentation/evaluator.py +1 -1
- paddlex/modules/keypoint_detection/evaluator.py +1 -1
- paddlex/modules/m_3d_bev_detection/evaluator.py +2 -2
- paddlex/modules/multilabel_classification/evaluator.py +2 -2
- paddlex/modules/object_detection/dataset_checker/dataset_src/convert_dataset.py +4 -4
- paddlex/modules/object_detection/evaluator.py +2 -2
- paddlex/modules/object_detection/model_list.py +2 -0
- paddlex/modules/semantic_segmentation/dataset_checker/__init__.py +12 -2
- paddlex/modules/semantic_segmentation/evaluator.py +2 -2
- paddlex/modules/table_recognition/evaluator.py +2 -2
- paddlex/modules/text_detection/evaluator.py +2 -2
- paddlex/modules/text_detection/model_list.py +2 -0
- paddlex/modules/text_recognition/evaluator.py +2 -2
- paddlex/modules/text_recognition/model_list.py +2 -0
- paddlex/modules/ts_anomaly_detection/evaluator.py +2 -2
- paddlex/modules/ts_classification/dataset_checker/dataset_src/split_dataset.py +1 -1
- paddlex/modules/ts_classification/evaluator.py +2 -2
- paddlex/modules/ts_forecast/evaluator.py +2 -2
- paddlex/modules/video_classification/evaluator.py +2 -2
- paddlex/modules/video_detection/evaluator.py +2 -2
- paddlex/ops/__init__.py +8 -5
- paddlex/paddlex_cli.py +19 -13
- paddlex/repo_apis/Paddle3D_api/bev_fusion/model.py +2 -2
- paddlex/repo_apis/PaddleClas_api/cls/config.py +1 -1
- paddlex/repo_apis/PaddleClas_api/cls/model.py +1 -1
- paddlex/repo_apis/PaddleClas_api/cls/register.py +10 -0
- paddlex/repo_apis/PaddleClas_api/cls/runner.py +1 -1
- paddlex/repo_apis/PaddleDetection_api/instance_seg/model.py +1 -1
- paddlex/repo_apis/PaddleDetection_api/instance_seg/runner.py +1 -1
- paddlex/repo_apis/PaddleDetection_api/object_det/config.py +1 -1
- paddlex/repo_apis/PaddleDetection_api/object_det/model.py +1 -1
- paddlex/repo_apis/PaddleDetection_api/object_det/official_categories.py +25 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/register.py +30 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/runner.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/formula_rec/config.py +3 -3
- paddlex/repo_apis/PaddleOCR_api/formula_rec/model.py +5 -9
- paddlex/repo_apis/PaddleOCR_api/formula_rec/register.py +27 -0
- paddlex/repo_apis/PaddleOCR_api/formula_rec/runner.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/table_rec/model.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/table_rec/runner.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/text_det/model.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/text_det/register.py +18 -0
- paddlex/repo_apis/PaddleOCR_api/text_det/runner.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/text_rec/config.py +3 -3
- paddlex/repo_apis/PaddleOCR_api/text_rec/model.py +5 -9
- paddlex/repo_apis/PaddleOCR_api/text_rec/register.py +18 -0
- paddlex/repo_apis/PaddleOCR_api/text_rec/runner.py +1 -1
- paddlex/repo_apis/PaddleSeg_api/seg/model.py +1 -1
- paddlex/repo_apis/PaddleSeg_api/seg/runner.py +1 -1
- paddlex/repo_apis/PaddleTS_api/ts_ad/config.py +3 -3
- paddlex/repo_apis/PaddleTS_api/ts_cls/config.py +2 -2
- paddlex/repo_apis/PaddleTS_api/ts_fc/config.py +4 -4
- paddlex/repo_apis/PaddleVideo_api/video_cls/config.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/video_cls/model.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/video_cls/runner.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/video_det/config.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/video_det/model.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/video_det/runner.py +1 -1
- paddlex/repo_apis/base/config.py +1 -1
- paddlex/repo_manager/core.py +3 -3
- paddlex/repo_manager/meta.py +6 -2
- paddlex/repo_manager/repo.py +17 -16
- paddlex/utils/custom_device_list.py +26 -2
- paddlex/utils/deps.py +3 -3
- paddlex/utils/device.py +5 -13
- paddlex/utils/env.py +4 -0
- paddlex/utils/flags.py +11 -4
- paddlex/utils/fonts/__init__.py +34 -4
- paddlex/utils/misc.py +1 -1
- paddlex/utils/subclass_register.py +2 -2
- {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/METADATA +349 -208
- {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/RECORD +240 -211
- {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/WHEEL +1 -1
- {paddlex-3.0.0rc1.dist-info → paddlex-3.0.2.dist-info}/entry_points.txt +1 -0
- {paddlex-3.0.0rc1.dist-info/licenses → paddlex-3.0.2.dist-info}/LICENSE +0 -0
- {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
|
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
|
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
|
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
|
72
|
+
"""get key-value arguments of model evaluation function
|
70
73
|
|
71
74
|
Returns:
|
72
75
|
dict: the arguments of evaluation function.
|
@@ -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
|
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
|
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
|
35
|
+
"""get key-value arguments of model evaluation function
|
36
36
|
|
37
37
|
Returns:
|
38
38
|
dict: the arguments of evaluation function.
|
@@ -23,7 +23,7 @@ class InstanceSegEvaluator(DetEvaluator):
|
|
23
23
|
entities = MODELS
|
24
24
|
|
25
25
|
def update_config(self):
|
26
|
-
"""update
|
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
|
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
|
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
|
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
|
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
|
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
|
271
|
-
anno_path (str): The
|
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
|
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
|
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
|
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
|
49
|
+
"""get key-value arguments of model evaluation function
|
50
50
|
|
51
51
|
Returns:
|
52
52
|
dict: the arguments of evaluation function.
|
@@ -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
|
-
|
42
|
-
|
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
|
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
|
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
|
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
|
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
|
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
|
33
|
+
"""get key-value arguments of model evaluation function
|
34
34
|
|
35
35
|
Returns:
|
36
36
|
dict: the arguments of evaluation function.
|
@@ -25,7 +25,7 @@ class TextRecEvaluator(BaseEvaluator):
|
|
25
25
|
entities = MODELS
|
26
26
|
|
27
27
|
def update_config(self):
|
28
|
-
"""update
|
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
|
56
|
+
"""get key-value arguments of model evaluation function
|
57
57
|
|
58
58
|
Returns:
|
59
59
|
dict: the arguments of evaluation function.
|
@@ -41,7 +41,7 @@ class TSADEvaluator(BaseEvaluator):
|
|
41
41
|
return config_path
|
42
42
|
|
43
43
|
def update_config(self):
|
44
|
-
"""update
|
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
|
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 = [] #
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
69
|
+
def find_spec(self, fullname: str, path, target=None):
|
70
70
|
if not fullname.startswith("paddlex.ops"):
|
71
71
|
return None
|
72
|
-
|
73
|
-
|
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("{}
|
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("{}
|
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
|
-
|
77
|
-
help="
|
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
|
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
|
-
|
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.
|
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
|
-
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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]
|