paddlex 3.0.0rc0__py3-none-any.whl → 3.0.0rc1__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 +17 -34
- paddlex/__main__.py +1 -1
- paddlex/configs/modules/doc_vlm/PP-DocBee-2B.yaml +14 -0
- paddlex/configs/modules/doc_vlm/PP-DocBee-7B.yaml +14 -0
- paddlex/configs/modules/open_vocabulary_detection/YOLO-Worldv2-L.yaml +13 -0
- paddlex/configs/pipelines/anomaly_detection.yaml +1 -1
- paddlex/configs/pipelines/doc_understanding.yaml +9 -0
- paddlex/configs/pipelines/ts_anomaly_detection.yaml +1 -1
- paddlex/configs/pipelines/ts_classification.yaml +1 -1
- paddlex/configs/pipelines/ts_forecast.yaml +1 -1
- paddlex/constants.py +17 -0
- paddlex/engine.py +7 -5
- paddlex/hpip_links.html +23 -11
- paddlex/inference/__init__.py +3 -3
- paddlex/inference/common/__init__.py +1 -1
- paddlex/inference/common/batch_sampler/__init__.py +5 -4
- paddlex/inference/common/batch_sampler/audio_batch_sampler.py +5 -6
- paddlex/inference/common/batch_sampler/base_batch_sampler.py +20 -16
- paddlex/inference/common/batch_sampler/det_3d_batch_sampler.py +4 -7
- paddlex/inference/common/batch_sampler/doc_vlm_batch_sampler.py +64 -0
- paddlex/inference/common/batch_sampler/image_batch_sampler.py +12 -36
- paddlex/inference/common/batch_sampler/ts_batch_sampler.py +9 -10
- paddlex/inference/common/batch_sampler/video_batch_sampler.py +2 -22
- paddlex/inference/common/reader/__init__.py +4 -4
- paddlex/inference/common/reader/audio_reader.py +3 -3
- paddlex/inference/common/reader/det_3d_reader.py +7 -5
- paddlex/inference/common/reader/image_reader.py +16 -12
- paddlex/inference/common/reader/ts_reader.py +3 -2
- paddlex/inference/common/reader/video_reader.py +3 -3
- paddlex/inference/common/result/__init__.py +7 -7
- paddlex/inference/common/result/base_cv_result.py +12 -2
- paddlex/inference/common/result/base_result.py +7 -5
- paddlex/inference/common/result/base_ts_result.py +1 -2
- paddlex/inference/common/result/base_video_result.py +2 -2
- paddlex/inference/common/result/mixin.py +12 -13
- paddlex/inference/models/__init__.py +41 -85
- paddlex/inference/models/anomaly_detection/__init__.py +1 -1
- paddlex/inference/models/anomaly_detection/predictor.py +9 -19
- paddlex/inference/models/anomaly_detection/processors.py +9 -2
- paddlex/inference/models/anomaly_detection/result.py +3 -2
- paddlex/inference/models/base/__init__.py +2 -2
- paddlex/inference/models/base/predictor/__init__.py +1 -2
- paddlex/inference/models/base/predictor/base_predictor.py +284 -39
- paddlex/inference/models/common/__init__.py +6 -15
- paddlex/inference/models/common/static_infer.py +764 -243
- paddlex/inference/models/common/tokenizer/__init__.py +5 -3
- paddlex/inference/models/common/tokenizer/bert_tokenizer.py +1 -1
- paddlex/inference/models/common/tokenizer/clip_tokenizer.py +609 -0
- paddlex/inference/models/common/tokenizer/gpt_tokenizer.py +7 -5
- paddlex/inference/models/common/tokenizer/qwen2_tokenizer.py +432 -0
- paddlex/inference/models/common/tokenizer/tokenizer_utils.py +72 -64
- paddlex/inference/models/common/tokenizer/tokenizer_utils_base.py +337 -121
- paddlex/inference/models/common/tokenizer/utils.py +1 -1
- paddlex/inference/models/common/tokenizer/vocab.py +1 -1
- paddlex/inference/models/common/ts/__init__.py +1 -1
- paddlex/inference/models/common/ts/funcs.py +13 -6
- paddlex/inference/models/common/ts/processors.py +14 -5
- paddlex/inference/models/common/vision/__init__.py +3 -3
- paddlex/inference/models/common/vision/funcs.py +17 -12
- paddlex/inference/models/common/vision/processors.py +61 -46
- paddlex/inference/models/common/vlm/__init__.py +13 -0
- paddlex/inference/models/common/vlm/activations.py +189 -0
- paddlex/inference/models/common/vlm/bert_padding.py +127 -0
- paddlex/inference/models/common/vlm/distributed.py +229 -0
- paddlex/inference/models/common/vlm/flash_attn_utils.py +119 -0
- paddlex/inference/models/common/vlm/generation/__init__.py +34 -0
- paddlex/inference/models/common/vlm/generation/configuration_utils.py +533 -0
- paddlex/inference/models/common/vlm/generation/logits_process.py +730 -0
- paddlex/inference/models/common/vlm/generation/stopping_criteria.py +106 -0
- paddlex/inference/models/common/vlm/generation/utils.py +2162 -0
- paddlex/inference/models/common/vlm/transformers/__init__.py +16 -0
- paddlex/inference/models/common/vlm/transformers/configuration_utils.py +1037 -0
- paddlex/inference/models/common/vlm/transformers/conversion_utils.py +408 -0
- paddlex/inference/models/common/vlm/transformers/model_outputs.py +1612 -0
- paddlex/inference/models/common/vlm/transformers/model_utils.py +2038 -0
- paddlex/inference/models/common/vlm/transformers/utils.py +178 -0
- paddlex/inference/models/common/vlm/utils.py +109 -0
- paddlex/inference/models/doc_vlm/__init__.py +15 -0
- paddlex/inference/models/doc_vlm/modeling/__init__.py +15 -0
- paddlex/inference/models/doc_vlm/modeling/qwen2_vl.py +2600 -0
- paddlex/inference/models/doc_vlm/predictor.py +198 -0
- paddlex/inference/models/doc_vlm/processors/__init__.py +15 -0
- paddlex/inference/models/doc_vlm/processors/common.py +372 -0
- paddlex/inference/models/doc_vlm/processors/qwen2_vl.py +698 -0
- paddlex/inference/models/doc_vlm/result.py +21 -0
- paddlex/inference/models/face_feature/__init__.py +1 -1
- paddlex/inference/models/face_feature/predictor.py +2 -1
- paddlex/inference/models/formula_recognition/__init__.py +1 -1
- paddlex/inference/models/formula_recognition/predictor.py +11 -27
- paddlex/inference/models/formula_recognition/processors.py +35 -19
- paddlex/inference/models/formula_recognition/result.py +19 -12
- paddlex/inference/models/image_classification/__init__.py +1 -1
- paddlex/inference/models/image_classification/predictor.py +9 -19
- paddlex/inference/models/image_classification/processors.py +4 -2
- paddlex/inference/models/image_classification/result.py +4 -3
- paddlex/inference/models/image_feature/__init__.py +1 -1
- paddlex/inference/models/image_feature/predictor.py +9 -19
- paddlex/inference/models/image_feature/processors.py +4 -1
- paddlex/inference/models/image_feature/result.py +2 -3
- paddlex/inference/models/image_multilabel_classification/__init__.py +1 -1
- paddlex/inference/models/image_multilabel_classification/predictor.py +7 -6
- paddlex/inference/models/image_multilabel_classification/processors.py +6 -2
- paddlex/inference/models/image_multilabel_classification/result.py +4 -3
- paddlex/inference/models/image_unwarping/__init__.py +1 -1
- paddlex/inference/models/image_unwarping/predictor.py +8 -16
- paddlex/inference/models/image_unwarping/processors.py +6 -2
- paddlex/inference/models/image_unwarping/result.py +4 -2
- paddlex/inference/models/instance_segmentation/__init__.py +1 -1
- paddlex/inference/models/instance_segmentation/predictor.py +7 -15
- paddlex/inference/models/instance_segmentation/processors.py +4 -7
- paddlex/inference/models/instance_segmentation/result.py +11 -10
- paddlex/inference/models/keypoint_detection/__init__.py +1 -1
- paddlex/inference/models/keypoint_detection/predictor.py +2 -3
- paddlex/inference/models/keypoint_detection/processors.py +11 -3
- paddlex/inference/models/keypoint_detection/result.py +9 -4
- paddlex/inference/models/{3d_bev_detection → m_3d_bev_detection}/__init__.py +1 -1
- paddlex/inference/models/{3d_bev_detection → m_3d_bev_detection}/predictor.py +15 -26
- paddlex/inference/models/{3d_bev_detection → m_3d_bev_detection}/processors.py +26 -14
- paddlex/inference/models/{3d_bev_detection → m_3d_bev_detection}/result.py +15 -12
- paddlex/inference/models/{3d_bev_detection → m_3d_bev_detection}/visualizer_3d.py +77 -39
- paddlex/inference/models/multilingual_speech_recognition/__init__.py +1 -1
- paddlex/inference/models/multilingual_speech_recognition/predictor.py +11 -15
- paddlex/inference/models/multilingual_speech_recognition/processors.py +45 -53
- paddlex/inference/models/multilingual_speech_recognition/result.py +1 -1
- paddlex/inference/models/object_detection/__init__.py +1 -1
- paddlex/inference/models/object_detection/predictor.py +6 -12
- paddlex/inference/models/object_detection/processors.py +36 -31
- paddlex/inference/models/object_detection/result.py +5 -4
- paddlex/inference/models/object_detection/utils.py +1 -1
- paddlex/inference/models/open_vocabulary_detection/__init__.py +1 -1
- paddlex/inference/models/open_vocabulary_detection/predictor.py +31 -14
- paddlex/inference/models/open_vocabulary_detection/processors/__init__.py +3 -2
- paddlex/inference/models/open_vocabulary_detection/processors/common.py +114 -0
- paddlex/inference/models/open_vocabulary_detection/processors/groundingdino_processors.py +19 -8
- paddlex/inference/models/open_vocabulary_detection/processors/yoloworld_processors.py +209 -0
- paddlex/inference/models/open_vocabulary_segmentation/__init__.py +1 -1
- paddlex/inference/models/open_vocabulary_segmentation/predictor.py +6 -13
- paddlex/inference/models/open_vocabulary_segmentation/processors/__init__.py +1 -1
- paddlex/inference/models/open_vocabulary_segmentation/processors/sam_processer.py +12 -12
- paddlex/inference/models/open_vocabulary_segmentation/results/__init__.py +1 -1
- paddlex/inference/models/open_vocabulary_segmentation/results/sam_result.py +11 -9
- paddlex/inference/models/semantic_segmentation/__init__.py +1 -1
- paddlex/inference/models/semantic_segmentation/predictor.py +9 -18
- paddlex/inference/models/semantic_segmentation/processors.py +11 -8
- paddlex/inference/models/semantic_segmentation/result.py +4 -3
- paddlex/inference/models/table_structure_recognition/__init__.py +1 -1
- paddlex/inference/models/table_structure_recognition/predictor.py +8 -18
- paddlex/inference/models/table_structure_recognition/processors.py +23 -29
- paddlex/inference/models/table_structure_recognition/result.py +9 -6
- paddlex/inference/models/text_detection/__init__.py +1 -1
- paddlex/inference/models/text_detection/predictor.py +16 -24
- paddlex/inference/models/text_detection/processors.py +74 -36
- paddlex/inference/models/text_detection/result.py +9 -4
- paddlex/inference/models/text_recognition/__init__.py +1 -1
- paddlex/inference/models/text_recognition/predictor.py +11 -19
- paddlex/inference/models/text_recognition/processors.py +27 -13
- paddlex/inference/models/text_recognition/result.py +3 -2
- paddlex/inference/models/ts_anomaly_detection/__init__.py +1 -1
- paddlex/inference/models/ts_anomaly_detection/predictor.py +12 -17
- paddlex/inference/models/ts_anomaly_detection/processors.py +6 -2
- paddlex/inference/models/ts_anomaly_detection/result.py +21 -10
- paddlex/inference/models/ts_classification/__init__.py +1 -1
- paddlex/inference/models/ts_classification/predictor.py +14 -27
- paddlex/inference/models/ts_classification/processors.py +7 -2
- paddlex/inference/models/ts_classification/result.py +21 -12
- paddlex/inference/models/ts_forecasting/__init__.py +1 -1
- paddlex/inference/models/ts_forecasting/predictor.py +13 -18
- paddlex/inference/models/ts_forecasting/processors.py +12 -3
- paddlex/inference/models/ts_forecasting/result.py +24 -11
- paddlex/inference/models/video_classification/__init__.py +1 -1
- paddlex/inference/models/video_classification/predictor.py +9 -15
- paddlex/inference/models/video_classification/processors.py +24 -24
- paddlex/inference/models/video_classification/result.py +7 -3
- paddlex/inference/models/video_detection/__init__.py +1 -1
- paddlex/inference/models/video_detection/predictor.py +8 -15
- paddlex/inference/models/video_detection/processors.py +24 -11
- paddlex/inference/models/video_detection/result.py +10 -5
- paddlex/inference/pipelines/__init__.py +44 -37
- paddlex/inference/pipelines/anomaly_detection/__init__.py +1 -1
- paddlex/inference/pipelines/anomaly_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/attribute_recognition/__init__.py +1 -1
- paddlex/inference/pipelines/attribute_recognition/pipeline.py +13 -8
- paddlex/inference/pipelines/attribute_recognition/result.py +10 -8
- paddlex/inference/pipelines/base.py +31 -11
- paddlex/inference/pipelines/components/__init__.py +14 -8
- paddlex/inference/pipelines/components/chat_server/__init__.py +1 -1
- paddlex/inference/pipelines/components/chat_server/base.py +2 -2
- paddlex/inference/pipelines/components/chat_server/openai_bot_chat.py +8 -8
- paddlex/inference/pipelines/components/common/__init__.py +5 -4
- paddlex/inference/pipelines/components/common/base_operator.py +2 -1
- paddlex/inference/pipelines/components/common/base_result.py +3 -2
- paddlex/inference/pipelines/components/common/convert_points_and_boxes.py +1 -2
- paddlex/inference/pipelines/components/common/crop_image_regions.py +11 -5
- paddlex/inference/pipelines/components/common/seal_det_warp.py +44 -13
- paddlex/inference/pipelines/components/common/sort_boxes.py +4 -2
- paddlex/inference/pipelines/components/common/warp_image.py +50 -0
- paddlex/inference/pipelines/components/faisser.py +9 -4
- paddlex/inference/pipelines/components/prompt_engineering/__init__.py +2 -2
- paddlex/inference/pipelines/components/prompt_engineering/base.py +2 -2
- paddlex/inference/pipelines/components/prompt_engineering/generate_ensemble_prompt.py +2 -1
- paddlex/inference/pipelines/components/prompt_engineering/generate_kie_prompt.py +2 -2
- paddlex/inference/pipelines/components/retriever/__init__.py +2 -2
- paddlex/inference/pipelines/components/retriever/base.py +18 -16
- paddlex/inference/pipelines/components/retriever/openai_bot_retriever.py +2 -2
- paddlex/inference/pipelines/components/retriever/qianfan_bot_retriever.py +87 -84
- paddlex/inference/pipelines/components/utils/__init__.py +1 -1
- paddlex/inference/pipelines/components/utils/mixin.py +7 -7
- paddlex/inference/pipelines/doc_preprocessor/__init__.py +1 -1
- paddlex/inference/pipelines/doc_preprocessor/pipeline.py +21 -28
- paddlex/inference/pipelines/doc_preprocessor/result.py +5 -10
- paddlex/inference/pipelines/doc_understanding/__init__.py +15 -0
- paddlex/inference/pipelines/doc_understanding/pipeline.py +71 -0
- paddlex/inference/pipelines/face_recognition/__init__.py +1 -1
- paddlex/inference/pipelines/face_recognition/pipeline.py +3 -1
- paddlex/inference/pipelines/face_recognition/result.py +3 -2
- paddlex/inference/pipelines/formula_recognition/__init__.py +1 -1
- paddlex/inference/pipelines/formula_recognition/pipeline.py +22 -16
- paddlex/inference/pipelines/formula_recognition/result.py +20 -19
- paddlex/inference/pipelines/image_classification/__init__.py +1 -1
- paddlex/inference/pipelines/image_classification/pipeline.py +17 -8
- paddlex/inference/pipelines/image_multilabel_classification/__init__.py +1 -1
- paddlex/inference/pipelines/image_multilabel_classification/pipeline.py +18 -9
- paddlex/inference/pipelines/instance_segmentation/__init__.py +1 -1
- paddlex/inference/pipelines/instance_segmentation/pipeline.py +17 -6
- paddlex/inference/pipelines/keypoint_detection/__init__.py +1 -1
- paddlex/inference/pipelines/keypoint_detection/pipeline.py +17 -6
- paddlex/inference/pipelines/layout_parsing/__init__.py +1 -1
- paddlex/inference/pipelines/layout_parsing/pipeline.py +23 -12
- paddlex/inference/pipelines/layout_parsing/pipeline_v2.py +16 -6
- paddlex/inference/pipelines/layout_parsing/result.py +5 -4
- paddlex/inference/pipelines/layout_parsing/result_v2.py +5 -8
- paddlex/inference/pipelines/layout_parsing/utils.py +7 -8
- paddlex/inference/pipelines/{3d_bev_detection → m_3d_bev_detection}/__init__.py +1 -1
- paddlex/inference/pipelines/{3d_bev_detection → m_3d_bev_detection}/pipeline.py +17 -10
- paddlex/inference/pipelines/multilingual_speech_recognition/__init__.py +1 -1
- paddlex/inference/pipelines/multilingual_speech_recognition/pipeline.py +17 -6
- paddlex/inference/pipelines/object_detection/__init__.py +1 -1
- paddlex/inference/pipelines/object_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/ocr/__init__.py +1 -1
- paddlex/inference/pipelines/ocr/pipeline.py +28 -11
- paddlex/inference/pipelines/ocr/result.py +13 -9
- paddlex/inference/pipelines/open_vocabulary_detection/__init__.py +1 -1
- paddlex/inference/pipelines/open_vocabulary_detection/pipeline.py +17 -6
- paddlex/inference/pipelines/open_vocabulary_segmentation/__init__.py +1 -1
- paddlex/inference/pipelines/open_vocabulary_segmentation/pipeline.py +17 -6
- paddlex/inference/pipelines/pp_chatocr/__init__.py +1 -1
- paddlex/inference/pipelines/pp_chatocr/pipeline_base.py +14 -5
- paddlex/inference/pipelines/pp_chatocr/pipeline_v3.py +22 -11
- paddlex/inference/pipelines/pp_chatocr/pipeline_v4.py +31 -13
- paddlex/inference/pipelines/pp_shitu_v2/__init__.py +1 -1
- paddlex/inference/pipelines/pp_shitu_v2/pipeline.py +12 -8
- paddlex/inference/pipelines/pp_shitu_v2/result.py +4 -4
- paddlex/inference/pipelines/rotated_object_detection/__init__.py +1 -1
- paddlex/inference/pipelines/rotated_object_detection/pipeline.py +17 -6
- paddlex/inference/pipelines/seal_recognition/__init__.py +1 -1
- paddlex/inference/pipelines/seal_recognition/pipeline.py +21 -13
- paddlex/inference/pipelines/seal_recognition/result.py +4 -2
- paddlex/inference/pipelines/semantic_segmentation/__init__.py +1 -1
- paddlex/inference/pipelines/semantic_segmentation/pipeline.py +17 -6
- paddlex/inference/pipelines/small_object_detection/__init__.py +1 -1
- paddlex/inference/pipelines/small_object_detection/pipeline.py +17 -6
- paddlex/inference/pipelines/table_recognition/__init__.py +1 -1
- paddlex/inference/pipelines/table_recognition/pipeline.py +41 -25
- paddlex/inference/pipelines/table_recognition/pipeline_v2.py +65 -33
- paddlex/inference/pipelines/table_recognition/result.py +11 -9
- paddlex/inference/pipelines/table_recognition/table_recognition_post_processing.py +12 -8
- paddlex/inference/pipelines/table_recognition/table_recognition_post_processing_v2.py +46 -32
- paddlex/inference/pipelines/table_recognition/utils.py +1 -1
- paddlex/inference/pipelines/ts_anomaly_detection/__init__.py +1 -1
- paddlex/inference/pipelines/ts_anomaly_detection/pipeline.py +16 -6
- paddlex/inference/pipelines/ts_classification/__init__.py +1 -1
- paddlex/inference/pipelines/ts_classification/pipeline.py +16 -6
- paddlex/inference/pipelines/ts_forecasting/__init__.py +1 -1
- paddlex/inference/pipelines/ts_forecasting/pipeline.py +16 -6
- paddlex/inference/pipelines/video_classification/__init__.py +1 -1
- paddlex/inference/pipelines/video_classification/pipeline.py +17 -6
- paddlex/inference/pipelines/video_detection/__init__.py +1 -1
- paddlex/inference/pipelines/video_detection/pipeline.py +20 -7
- paddlex/inference/serving/__init__.py +5 -1
- paddlex/inference/serving/basic_serving/__init__.py +1 -1
- paddlex/inference/serving/basic_serving/_app.py +31 -19
- paddlex/inference/serving/basic_serving/_pipeline_apps/__init__.py +7 -4
- paddlex/inference/serving/basic_serving/_pipeline_apps/_common/__init__.py +1 -1
- paddlex/inference/serving/basic_serving/_pipeline_apps/_common/common.py +7 -3
- paddlex/inference/serving/basic_serving/_pipeline_apps/_common/image_recognition.py +1 -1
- paddlex/inference/serving/basic_serving/_pipeline_apps/_common/ocr.py +7 -2
- paddlex/inference/serving/basic_serving/_pipeline_apps/anomaly_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/doc_preprocessor.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/doc_understanding.py +153 -0
- paddlex/inference/serving/basic_serving/_pipeline_apps/face_recognition.py +16 -13
- paddlex/inference/serving/basic_serving/_pipeline_apps/formula_recognition.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/human_keypoint_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/image_classification.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/image_multilabel_classification.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/instance_segmentation.py +13 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/layout_parsing.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/m_3d_bev_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/multilingual_speech_recognition.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/object_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/ocr.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/open_vocabulary_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/open_vocabulary_segmentation.py +13 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/pedestrian_attribute_recognition.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv3_doc.py +14 -11
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_chatocrv4_doc.py +16 -13
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_shituv2.py +16 -13
- paddlex/inference/serving/basic_serving/_pipeline_apps/pp_structurev3.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/rotated_object_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/seal_recognition.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/semantic_segmentation.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/small_object_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/table_recognition_v2.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/ts_anomaly_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/ts_classification.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/ts_forecast.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/vehicle_attribute_recognition.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/video_classification.py +10 -7
- paddlex/inference/serving/basic_serving/_pipeline_apps/video_detection.py +10 -7
- paddlex/inference/serving/basic_serving/_server.py +9 -4
- paddlex/inference/serving/infra/__init__.py +1 -1
- paddlex/inference/serving/infra/config.py +1 -1
- paddlex/inference/serving/infra/models.py +13 -6
- paddlex/inference/serving/infra/storage.py +9 -4
- paddlex/inference/serving/infra/utils.py +37 -9
- paddlex/inference/serving/schemas/__init__.py +1 -1
- paddlex/inference/serving/schemas/anomaly_detection.py +1 -1
- paddlex/inference/serving/schemas/doc_preprocessor.py +1 -1
- paddlex/inference/serving/schemas/doc_understanding.py +78 -0
- paddlex/inference/serving/schemas/face_recognition.py +1 -1
- paddlex/inference/serving/schemas/formula_recognition.py +1 -1
- paddlex/inference/serving/schemas/human_keypoint_detection.py +1 -1
- paddlex/inference/serving/schemas/image_classification.py +1 -1
- paddlex/inference/serving/schemas/image_multilabel_classification.py +1 -1
- paddlex/inference/serving/schemas/instance_segmentation.py +1 -1
- paddlex/inference/serving/schemas/layout_parsing.py +1 -1
- paddlex/inference/serving/schemas/m_3d_bev_detection.py +1 -1
- paddlex/inference/serving/schemas/multilingual_speech_recognition.py +1 -1
- paddlex/inference/serving/schemas/object_detection.py +1 -1
- paddlex/inference/serving/schemas/ocr.py +1 -1
- paddlex/inference/serving/schemas/open_vocabulary_detection.py +1 -1
- paddlex/inference/serving/schemas/open_vocabulary_segmentation.py +1 -1
- paddlex/inference/serving/schemas/pedestrian_attribute_recognition.py +1 -1
- paddlex/inference/serving/schemas/pp_chatocrv3_doc.py +1 -1
- paddlex/inference/serving/schemas/pp_chatocrv4_doc.py +1 -1
- paddlex/inference/serving/schemas/pp_shituv2.py +1 -1
- paddlex/inference/serving/schemas/pp_structurev3.py +1 -1
- paddlex/inference/serving/schemas/rotated_object_detection.py +1 -1
- paddlex/inference/serving/schemas/seal_recognition.py +1 -1
- paddlex/inference/serving/schemas/semantic_segmentation.py +1 -1
- paddlex/inference/serving/schemas/shared/__init__.py +1 -1
- paddlex/inference/serving/schemas/shared/classification.py +1 -1
- paddlex/inference/serving/schemas/shared/image_segmentation.py +1 -1
- paddlex/inference/serving/schemas/shared/object_detection.py +1 -1
- paddlex/inference/serving/schemas/shared/ocr.py +1 -1
- paddlex/inference/serving/schemas/small_object_detection.py +1 -1
- paddlex/inference/serving/schemas/table_recognition.py +1 -1
- paddlex/inference/serving/schemas/table_recognition_v2.py +1 -1
- paddlex/inference/serving/schemas/ts_anomaly_detection.py +1 -1
- paddlex/inference/serving/schemas/ts_classification.py +1 -1
- paddlex/inference/serving/schemas/ts_forecast.py +1 -1
- paddlex/inference/serving/schemas/vehicle_attribute_recognition.py +1 -1
- paddlex/inference/serving/schemas/video_classification.py +1 -1
- paddlex/inference/serving/schemas/video_detection.py +1 -1
- paddlex/inference/utils/__init__.py +1 -1
- paddlex/inference/utils/benchmark.py +332 -179
- paddlex/inference/utils/color_map.py +1 -1
- paddlex/inference/utils/get_pipeline_path.py +1 -1
- paddlex/inference/utils/hpi.py +251 -0
- paddlex/inference/utils/hpi_model_info_collection.json +2252 -0
- paddlex/inference/utils/io/__init__.py +11 -11
- paddlex/inference/utils/io/readers.py +22 -18
- paddlex/inference/utils/io/style.py +21 -14
- paddlex/inference/utils/io/tablepyxl.py +13 -5
- paddlex/inference/utils/io/writers.py +9 -10
- paddlex/inference/utils/model_paths.py +48 -0
- paddlex/inference/utils/{new_ir_blacklist.py → new_ir_blocklist.py} +1 -2
- paddlex/inference/utils/official_models.py +264 -262
- paddlex/inference/utils/pp_option.py +164 -93
- paddlex/inference/utils/trt_blocklist.py +43 -0
- paddlex/inference/utils/trt_config.py +420 -0
- paddlex/model.py +28 -10
- paddlex/modules/__init__.py +57 -80
- paddlex/modules/anomaly_detection/__init__.py +2 -2
- paddlex/modules/anomaly_detection/dataset_checker/__init__.py +2 -3
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/analyse_dataset.py +6 -3
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/check_dataset.py +8 -4
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/convert_dataset.py +7 -4
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/split_dataset.py +2 -2
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/utils/visualizer.py +7 -2
- paddlex/modules/anomaly_detection/evaluator.py +1 -1
- paddlex/modules/anomaly_detection/exportor.py +1 -1
- paddlex/modules/anomaly_detection/model_list.py +1 -1
- paddlex/modules/anomaly_detection/trainer.py +3 -4
- paddlex/modules/base/__init__.py +5 -5
- paddlex/modules/base/build_model.py +1 -2
- paddlex/modules/base/dataset_checker/__init__.py +2 -2
- paddlex/modules/base/dataset_checker/dataset_checker.py +4 -4
- paddlex/modules/base/dataset_checker/utils.py +1 -3
- paddlex/modules/base/evaluator.py +8 -8
- paddlex/modules/base/exportor.py +12 -13
- paddlex/modules/base/trainer.py +21 -11
- paddlex/modules/base/utils/__init__.py +13 -0
- paddlex/modules/base/utils/cinn_setting.py +89 -0
- paddlex/modules/base/utils/coco_eval.py +94 -0
- paddlex/modules/base/utils/topk_eval.py +118 -0
- paddlex/modules/doc_vlm/__init__.py +18 -0
- paddlex/modules/doc_vlm/dataset_checker.py +29 -0
- paddlex/modules/doc_vlm/evaluator.py +29 -0
- paddlex/modules/doc_vlm/exportor.py +29 -0
- paddlex/modules/doc_vlm/model_list.py +16 -0
- paddlex/modules/doc_vlm/trainer.py +41 -0
- paddlex/modules/face_recognition/__init__.py +2 -2
- paddlex/modules/face_recognition/dataset_checker/__init__.py +2 -2
- paddlex/modules/face_recognition/dataset_checker/dataset_src/__init__.py +1 -1
- paddlex/modules/face_recognition/dataset_checker/dataset_src/check_dataset.py +3 -5
- paddlex/modules/face_recognition/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/face_recognition/dataset_checker/dataset_src/utils/visualizer.py +2 -5
- paddlex/modules/face_recognition/evaluator.py +1 -1
- paddlex/modules/face_recognition/exportor.py +1 -1
- paddlex/modules/face_recognition/model_list.py +1 -1
- paddlex/modules/face_recognition/trainer.py +1 -1
- paddlex/modules/formula_recognition/__init__.py +2 -2
- paddlex/modules/formula_recognition/dataset_checker/__init__.py +3 -3
- paddlex/modules/formula_recognition/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/formula_recognition/dataset_checker/dataset_src/analyse_dataset.py +13 -12
- paddlex/modules/formula_recognition/dataset_checker/dataset_src/check_dataset.py +2 -6
- paddlex/modules/formula_recognition/dataset_checker/dataset_src/convert_dataset.py +11 -10
- paddlex/modules/formula_recognition/dataset_checker/dataset_src/split_dataset.py +1 -2
- paddlex/modules/formula_recognition/evaluator.py +1 -1
- paddlex/modules/formula_recognition/exportor.py +1 -1
- paddlex/modules/formula_recognition/model_list.py +1 -1
- paddlex/modules/formula_recognition/trainer.py +2 -3
- paddlex/modules/general_recognition/__init__.py +2 -2
- paddlex/modules/general_recognition/dataset_checker/__init__.py +2 -2
- paddlex/modules/general_recognition/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/general_recognition/dataset_checker/dataset_src/analyse_dataset.py +7 -9
- paddlex/modules/general_recognition/dataset_checker/dataset_src/check_dataset.py +4 -5
- paddlex/modules/general_recognition/dataset_checker/dataset_src/convert_dataset.py +6 -5
- paddlex/modules/general_recognition/dataset_checker/dataset_src/split_dataset.py +1 -1
- paddlex/modules/general_recognition/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/general_recognition/dataset_checker/dataset_src/utils/visualizer.py +2 -5
- paddlex/modules/general_recognition/evaluator.py +1 -1
- paddlex/modules/general_recognition/exportor.py +1 -1
- paddlex/modules/general_recognition/model_list.py +1 -1
- paddlex/modules/general_recognition/trainer.py +1 -1
- paddlex/modules/image_classification/__init__.py +2 -2
- paddlex/modules/image_classification/dataset_checker/__init__.py +2 -2
- paddlex/modules/image_classification/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/image_classification/dataset_checker/dataset_src/analyse_dataset.py +8 -9
- paddlex/modules/image_classification/dataset_checker/dataset_src/check_dataset.py +4 -3
- paddlex/modules/image_classification/dataset_checker/dataset_src/convert_dataset.py +4 -4
- paddlex/modules/image_classification/dataset_checker/dataset_src/split_dataset.py +1 -1
- paddlex/modules/image_classification/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/image_classification/dataset_checker/dataset_src/utils/visualizer.py +2 -5
- paddlex/modules/image_classification/evaluator.py +1 -1
- paddlex/modules/image_classification/exportor.py +1 -1
- paddlex/modules/image_classification/model_list.py +1 -1
- paddlex/modules/image_classification/trainer.py +3 -3
- paddlex/modules/image_unwarping/__init__.py +1 -1
- paddlex/modules/image_unwarping/model_list.py +1 -1
- paddlex/modules/instance_segmentation/__init__.py +2 -2
- paddlex/modules/instance_segmentation/dataset_checker/__init__.py +2 -3
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/analyse_dataset.py +9 -5
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/check_dataset.py +8 -5
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/convert_dataset.py +8 -8
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/split_dataset.py +7 -4
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/utils/visualizer.py +10 -8
- paddlex/modules/instance_segmentation/evaluator.py +1 -1
- paddlex/modules/instance_segmentation/exportor.py +1 -1
- paddlex/modules/instance_segmentation/model_list.py +1 -1
- paddlex/modules/instance_segmentation/trainer.py +1 -1
- paddlex/modules/keypoint_detection/__init__.py +2 -2
- paddlex/modules/keypoint_detection/dataset_checker/__init__.py +2 -2
- paddlex/modules/keypoint_detection/dataset_checker/dataset_src/__init__.py +1 -1
- paddlex/modules/keypoint_detection/dataset_checker/dataset_src/check_dataset.py +10 -5
- paddlex/modules/keypoint_detection/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/keypoint_detection/dataset_checker/dataset_src/utils/visualizer.py +8 -3
- paddlex/modules/keypoint_detection/evaluator.py +1 -1
- paddlex/modules/keypoint_detection/exportor.py +1 -1
- paddlex/modules/keypoint_detection/model_list.py +1 -1
- paddlex/modules/keypoint_detection/trainer.py +2 -2
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/__init__.py +2 -2
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/dataset_checker/__init__.py +3 -3
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/dataset_checker/dataset_src/analyse_dataset.py +8 -8
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/dataset_checker/dataset_src/check_dataset.py +1 -2
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/evaluator.py +1 -1
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/exportor.py +1 -1
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/model_list.py +1 -1
- paddlex/modules/{3d_bev_detection → m_3d_bev_detection}/trainer.py +5 -7
- paddlex/modules/multilabel_classification/__init__.py +2 -2
- paddlex/modules/multilabel_classification/dataset_checker/__init__.py +2 -2
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/analyse_dataset.py +8 -9
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/check_dataset.py +4 -3
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/convert_dataset.py +10 -7
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/split_dataset.py +1 -1
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/utils/visualizer.py +1 -5
- paddlex/modules/multilabel_classification/evaluator.py +1 -1
- paddlex/modules/multilabel_classification/exportor.py +1 -1
- paddlex/modules/multilabel_classification/model_list.py +1 -1
- paddlex/modules/multilabel_classification/trainer.py +3 -3
- paddlex/modules/multilingual_speech_recognition/__init__.py +2 -2
- paddlex/modules/multilingual_speech_recognition/dataset_checker.py +3 -3
- paddlex/modules/multilingual_speech_recognition/evaluator.py +3 -3
- paddlex/modules/multilingual_speech_recognition/exportor.py +3 -3
- paddlex/modules/multilingual_speech_recognition/model_list.py +1 -1
- paddlex/modules/multilingual_speech_recognition/trainer.py +7 -5
- paddlex/modules/object_detection/__init__.py +2 -2
- paddlex/modules/object_detection/dataset_checker/__init__.py +2 -11
- paddlex/modules/object_detection/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/object_detection/dataset_checker/dataset_src/analyse_dataset.py +10 -8
- paddlex/modules/object_detection/dataset_checker/dataset_src/check_dataset.py +10 -5
- paddlex/modules/object_detection/dataset_checker/dataset_src/convert_dataset.py +13 -8
- paddlex/modules/object_detection/dataset_checker/dataset_src/split_dataset.py +8 -4
- paddlex/modules/object_detection/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/object_detection/dataset_checker/dataset_src/utils/visualizer.py +9 -8
- paddlex/modules/object_detection/evaluator.py +9 -4
- paddlex/modules/object_detection/exportor.py +1 -1
- paddlex/modules/object_detection/model_list.py +1 -1
- paddlex/modules/object_detection/trainer.py +4 -5
- paddlex/modules/open_vocabulary_detection/__init__.py +2 -2
- paddlex/modules/open_vocabulary_detection/dataset_checker.py +3 -3
- paddlex/modules/open_vocabulary_detection/evaluator.py +3 -3
- paddlex/modules/open_vocabulary_detection/exportor.py +3 -3
- paddlex/modules/open_vocabulary_detection/model_list.py +2 -4
- paddlex/modules/open_vocabulary_detection/trainer.py +7 -5
- paddlex/modules/open_vocabulary_segmentation/__init__.py +2 -2
- paddlex/modules/open_vocabulary_segmentation/dataset_checker.py +3 -3
- paddlex/modules/open_vocabulary_segmentation/evaluator.py +3 -3
- paddlex/modules/open_vocabulary_segmentation/exportor.py +3 -3
- paddlex/modules/open_vocabulary_segmentation/model_list.py +1 -1
- paddlex/modules/open_vocabulary_segmentation/trainer.py +7 -5
- paddlex/modules/semantic_segmentation/__init__.py +2 -2
- paddlex/modules/semantic_segmentation/dataset_checker/__init__.py +2 -3
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/analyse_dataset.py +6 -3
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/check_dataset.py +2 -2
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/convert_dataset.py +7 -4
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/split_dataset.py +2 -2
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/utils/__init__.py +1 -1
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/utils/visualizer.py +6 -2
- paddlex/modules/semantic_segmentation/evaluator.py +1 -1
- paddlex/modules/semantic_segmentation/exportor.py +1 -1
- paddlex/modules/semantic_segmentation/model_list.py +1 -1
- paddlex/modules/semantic_segmentation/trainer.py +3 -4
- paddlex/modules/table_recognition/__init__.py +2 -2
- paddlex/modules/table_recognition/dataset_checker/__init__.py +5 -5
- paddlex/modules/table_recognition/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/table_recognition/dataset_checker/dataset_src/analyse_dataset.py +3 -2
- paddlex/modules/table_recognition/dataset_checker/dataset_src/check_dataset.py +8 -7
- paddlex/modules/table_recognition/dataset_checker/dataset_src/split_dataset.py +2 -1
- paddlex/modules/table_recognition/evaluator.py +1 -1
- paddlex/modules/table_recognition/exportor.py +1 -1
- paddlex/modules/table_recognition/model_list.py +1 -1
- paddlex/modules/table_recognition/trainer.py +2 -5
- paddlex/modules/text_detection/__init__.py +2 -2
- paddlex/modules/text_detection/dataset_checker/__init__.py +4 -6
- paddlex/modules/text_detection/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/text_detection/dataset_checker/dataset_src/analyse_dataset.py +12 -9
- paddlex/modules/text_detection/dataset_checker/dataset_src/check_dataset.py +3 -3
- paddlex/modules/text_detection/dataset_checker/dataset_src/split_dataset.py +3 -3
- paddlex/modules/text_detection/evaluator.py +1 -1
- paddlex/modules/text_detection/exportor.py +1 -1
- paddlex/modules/text_detection/model_list.py +1 -1
- paddlex/modules/text_detection/trainer.py +2 -5
- paddlex/modules/text_recognition/__init__.py +2 -2
- paddlex/modules/text_recognition/dataset_checker/__init__.py +4 -5
- paddlex/modules/text_recognition/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/text_recognition/dataset_checker/dataset_src/analyse_dataset.py +13 -12
- paddlex/modules/text_recognition/dataset_checker/dataset_src/check_dataset.py +2 -5
- paddlex/modules/text_recognition/dataset_checker/dataset_src/convert_dataset.py +11 -10
- paddlex/modules/text_recognition/dataset_checker/dataset_src/split_dataset.py +1 -2
- paddlex/modules/text_recognition/evaluator.py +1 -1
- paddlex/modules/text_recognition/exportor.py +1 -1
- paddlex/modules/text_recognition/model_list.py +1 -1
- paddlex/modules/text_recognition/trainer.py +2 -3
- paddlex/modules/ts_anomaly_detection/__init__.py +2 -2
- paddlex/modules/ts_anomaly_detection/dataset_checker/__init__.py +4 -5
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/analyse_dataset.py +1 -9
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/check_dataset.py +2 -2
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/convert_dataset.py +2 -6
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/split_dataset.py +4 -4
- paddlex/modules/ts_anomaly_detection/evaluator.py +1 -1
- paddlex/modules/ts_anomaly_detection/exportor.py +2 -3
- paddlex/modules/ts_anomaly_detection/model_list.py +1 -1
- paddlex/modules/ts_anomaly_detection/trainer.py +8 -8
- paddlex/modules/ts_classification/__init__.py +2 -2
- paddlex/modules/ts_classification/dataset_checker/__init__.py +4 -5
- paddlex/modules/ts_classification/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/ts_classification/dataset_checker/dataset_src/analyse_dataset.py +8 -5
- paddlex/modules/ts_classification/dataset_checker/dataset_src/check_dataset.py +2 -2
- paddlex/modules/ts_classification/dataset_checker/dataset_src/convert_dataset.py +2 -6
- paddlex/modules/ts_classification/dataset_checker/dataset_src/split_dataset.py +4 -4
- paddlex/modules/ts_classification/evaluator.py +1 -1
- paddlex/modules/ts_classification/exportor.py +2 -3
- paddlex/modules/ts_classification/model_list.py +1 -1
- paddlex/modules/ts_classification/trainer.py +7 -7
- paddlex/modules/ts_forecast/__init__.py +2 -2
- paddlex/modules/ts_forecast/dataset_checker/__init__.py +4 -5
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/analyse_dataset.py +1 -9
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/check_dataset.py +2 -2
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/convert_dataset.py +2 -6
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/split_dataset.py +4 -4
- paddlex/modules/ts_forecast/evaluator.py +1 -1
- paddlex/modules/ts_forecast/exportor.py +2 -3
- paddlex/modules/ts_forecast/model_list.py +1 -1
- paddlex/modules/ts_forecast/trainer.py +7 -7
- paddlex/modules/video_classification/__init__.py +2 -2
- paddlex/modules/video_classification/dataset_checker/__init__.py +2 -2
- paddlex/modules/video_classification/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/video_classification/dataset_checker/dataset_src/analyse_dataset.py +9 -9
- paddlex/modules/video_classification/dataset_checker/dataset_src/check_dataset.py +2 -3
- paddlex/modules/video_classification/dataset_checker/dataset_src/split_dataset.py +1 -1
- paddlex/modules/video_classification/evaluator.py +1 -1
- paddlex/modules/video_classification/exportor.py +1 -1
- paddlex/modules/video_classification/model_list.py +1 -1
- paddlex/modules/video_classification/trainer.py +3 -3
- paddlex/modules/video_detection/__init__.py +2 -2
- paddlex/modules/video_detection/dataset_checker/__init__.py +2 -2
- paddlex/modules/video_detection/dataset_checker/dataset_src/__init__.py +2 -2
- paddlex/modules/video_detection/dataset_checker/dataset_src/analyse_dataset.py +8 -9
- paddlex/modules/video_detection/dataset_checker/dataset_src/check_dataset.py +3 -5
- paddlex/modules/video_detection/evaluator.py +1 -1
- paddlex/modules/video_detection/exportor.py +1 -1
- paddlex/modules/video_detection/model_list.py +1 -1
- paddlex/modules/video_detection/trainer.py +3 -3
- paddlex/ops/__init__.py +5 -2
- paddlex/ops/iou3d_nms/iou3d_cpu.cpp +8 -6
- paddlex/ops/iou3d_nms/iou3d_cpu.h +3 -2
- paddlex/ops/iou3d_nms/iou3d_nms.cpp +8 -6
- paddlex/ops/iou3d_nms/iou3d_nms.h +6 -4
- paddlex/ops/iou3d_nms/iou3d_nms_api.cpp +24 -18
- paddlex/ops/iou3d_nms/iou3d_nms_kernel.cu +9 -7
- paddlex/ops/setup.py +3 -3
- paddlex/ops/voxel/voxelize_op.cc +22 -19
- paddlex/ops/voxel/voxelize_op.cu +25 -25
- paddlex/paddlex_cli.py +86 -75
- paddlex/repo_apis/Paddle3D_api/__init__.py +1 -1
- paddlex/repo_apis/Paddle3D_api/bev_fusion/__init__.py +1 -1
- paddlex/repo_apis/Paddle3D_api/bev_fusion/config.py +1 -1
- paddlex/repo_apis/Paddle3D_api/bev_fusion/model.py +4 -4
- paddlex/repo_apis/Paddle3D_api/bev_fusion/register.py +2 -2
- paddlex/repo_apis/Paddle3D_api/bev_fusion/runner.py +1 -1
- paddlex/repo_apis/Paddle3D_api/pp3d_config.py +3 -2
- paddlex/repo_apis/PaddleClas_api/__init__.py +1 -1
- paddlex/repo_apis/PaddleClas_api/cls/__init__.py +3 -3
- paddlex/repo_apis/PaddleClas_api/cls/config.py +4 -3
- paddlex/repo_apis/PaddleClas_api/cls/model.py +3 -3
- paddlex/repo_apis/PaddleClas_api/cls/register.py +2 -3
- paddlex/repo_apis/PaddleClas_api/cls/runner.py +1 -2
- paddlex/repo_apis/PaddleClas_api/shitu_rec/__init__.py +2 -2
- paddlex/repo_apis/PaddleClas_api/shitu_rec/config.py +2 -2
- paddlex/repo_apis/PaddleClas_api/shitu_rec/model.py +1 -4
- paddlex/repo_apis/PaddleClas_api/shitu_rec/register.py +2 -2
- paddlex/repo_apis/PaddleClas_api/shitu_rec/runner.py +1 -6
- paddlex/repo_apis/PaddleDetection_api/__init__.py +2 -2
- paddlex/repo_apis/PaddleDetection_api/config_helper.py +3 -3
- paddlex/repo_apis/PaddleDetection_api/instance_seg/__init__.py +2 -2
- paddlex/repo_apis/PaddleDetection_api/instance_seg/config.py +2 -3
- paddlex/repo_apis/PaddleDetection_api/instance_seg/model.py +3 -3
- paddlex/repo_apis/PaddleDetection_api/instance_seg/register.py +2 -3
- paddlex/repo_apis/PaddleDetection_api/instance_seg/runner.py +1 -2
- paddlex/repo_apis/PaddleDetection_api/object_det/__init__.py +3 -3
- paddlex/repo_apis/PaddleDetection_api/object_det/config.py +4 -3
- paddlex/repo_apis/PaddleDetection_api/object_det/model.py +5 -6
- paddlex/repo_apis/PaddleDetection_api/object_det/official_categories.py +1 -1
- paddlex/repo_apis/PaddleDetection_api/object_det/register.py +2 -3
- paddlex/repo_apis/PaddleDetection_api/object_det/runner.py +1 -2
- paddlex/repo_apis/PaddleNLP_api/__init__.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/__init__.py +4 -3
- paddlex/repo_apis/PaddleOCR_api/config_utils.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/formula_rec/__init__.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/formula_rec/config.py +4 -3
- paddlex/repo_apis/PaddleOCR_api/formula_rec/model.py +4 -4
- paddlex/repo_apis/PaddleOCR_api/formula_rec/register.py +2 -3
- paddlex/repo_apis/PaddleOCR_api/formula_rec/runner.py +1 -2
- paddlex/repo_apis/PaddleOCR_api/table_rec/__init__.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/table_rec/config.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/table_rec/model.py +3 -3
- paddlex/repo_apis/PaddleOCR_api/table_rec/register.py +2 -3
- paddlex/repo_apis/PaddleOCR_api/table_rec/runner.py +2 -2
- paddlex/repo_apis/PaddleOCR_api/text_det/__init__.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/text_det/config.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/text_det/model.py +3 -3
- paddlex/repo_apis/PaddleOCR_api/text_det/register.py +2 -3
- paddlex/repo_apis/PaddleOCR_api/text_det/runner.py +2 -2
- paddlex/repo_apis/PaddleOCR_api/text_rec/__init__.py +1 -1
- paddlex/repo_apis/PaddleOCR_api/text_rec/config.py +4 -3
- paddlex/repo_apis/PaddleOCR_api/text_rec/model.py +4 -4
- paddlex/repo_apis/PaddleOCR_api/text_rec/register.py +2 -3
- paddlex/repo_apis/PaddleOCR_api/text_rec/runner.py +1 -2
- paddlex/repo_apis/PaddleSeg_api/__init__.py +1 -1
- paddlex/repo_apis/PaddleSeg_api/base_seg_config.py +2 -2
- paddlex/repo_apis/PaddleSeg_api/seg/__init__.py +1 -1
- paddlex/repo_apis/PaddleSeg_api/seg/config.py +3 -6
- paddlex/repo_apis/PaddleSeg_api/seg/model.py +5 -5
- paddlex/repo_apis/PaddleSeg_api/seg/register.py +2 -3
- paddlex/repo_apis/PaddleSeg_api/seg/runner.py +1 -2
- paddlex/repo_apis/PaddleTS_api/__init__.py +4 -3
- paddlex/repo_apis/PaddleTS_api/ts_ad/__init__.py +1 -1
- paddlex/repo_apis/PaddleTS_api/ts_ad/config.py +2 -3
- paddlex/repo_apis/PaddleTS_api/ts_ad/register.py +2 -2
- paddlex/repo_apis/PaddleTS_api/ts_ad/runner.py +2 -2
- paddlex/repo_apis/PaddleTS_api/ts_base/__init__.py +1 -1
- paddlex/repo_apis/PaddleTS_api/ts_base/config.py +2 -4
- paddlex/repo_apis/PaddleTS_api/ts_base/model.py +4 -4
- paddlex/repo_apis/PaddleTS_api/ts_base/runner.py +2 -2
- paddlex/repo_apis/PaddleTS_api/ts_cls/__init__.py +1 -1
- paddlex/repo_apis/PaddleTS_api/ts_cls/config.py +2 -3
- paddlex/repo_apis/PaddleTS_api/ts_cls/register.py +2 -2
- paddlex/repo_apis/PaddleTS_api/ts_cls/runner.py +2 -2
- paddlex/repo_apis/PaddleTS_api/ts_fc/__init__.py +1 -1
- paddlex/repo_apis/PaddleTS_api/ts_fc/config.py +2 -3
- paddlex/repo_apis/PaddleTS_api/ts_fc/register.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/__init__.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/config_utils.py +1 -1
- paddlex/repo_apis/PaddleVideo_api/video_cls/__init__.py +3 -3
- paddlex/repo_apis/PaddleVideo_api/video_cls/config.py +4 -3
- paddlex/repo_apis/PaddleVideo_api/video_cls/model.py +3 -3
- paddlex/repo_apis/PaddleVideo_api/video_cls/register.py +2 -3
- paddlex/repo_apis/PaddleVideo_api/video_cls/runner.py +1 -2
- paddlex/repo_apis/PaddleVideo_api/video_det/__init__.py +3 -3
- paddlex/repo_apis/PaddleVideo_api/video_det/config.py +4 -3
- paddlex/repo_apis/PaddleVideo_api/video_det/model.py +4 -4
- paddlex/repo_apis/PaddleVideo_api/video_det/register.py +2 -3
- paddlex/repo_apis/PaddleVideo_api/video_det/runner.py +1 -2
- paddlex/repo_apis/__init__.py +1 -1
- paddlex/repo_apis/base/__init__.py +4 -5
- paddlex/repo_apis/base/config.py +2 -3
- paddlex/repo_apis/base/model.py +11 -19
- paddlex/repo_apis/base/register.py +1 -1
- paddlex/repo_apis/base/runner.py +11 -12
- paddlex/repo_apis/base/utils/__init__.py +1 -1
- paddlex/repo_apis/base/utils/arg.py +1 -1
- paddlex/repo_apis/base/utils/subprocess.py +1 -1
- paddlex/repo_manager/__init__.py +2 -9
- paddlex/repo_manager/core.py +9 -27
- paddlex/repo_manager/meta.py +37 -31
- paddlex/repo_manager/repo.py +169 -160
- paddlex/repo_manager/utils.py +13 -224
- paddlex/utils/__init__.py +1 -1
- paddlex/utils/cache.py +8 -10
- paddlex/utils/config.py +6 -5
- paddlex/utils/{custom_device_whitelist.py → custom_device_list.py} +29 -199
- paddlex/utils/deps.py +249 -0
- paddlex/utils/device.py +73 -29
- paddlex/utils/download.py +4 -4
- paddlex/utils/env.py +33 -7
- paddlex/utils/errors/__init__.py +1 -1
- paddlex/utils/errors/dataset_checker.py +1 -1
- paddlex/utils/errors/others.py +2 -16
- paddlex/utils/file_interface.py +4 -5
- paddlex/utils/flags.py +19 -12
- paddlex/utils/fonts/__init__.py +2 -1
- paddlex/utils/func_register.py +1 -1
- paddlex/utils/install.py +87 -0
- paddlex/utils/interactive_get_pipeline.py +3 -3
- paddlex/utils/lazy_loader.py +3 -3
- paddlex/utils/logging.py +10 -1
- paddlex/utils/misc.py +5 -5
- paddlex/utils/pipeline_arguments.py +15 -7
- paddlex/utils/result_saver.py +4 -5
- paddlex/utils/subclass_register.py +2 -4
- paddlex/version.py +2 -1
- {paddlex-3.0.0rc0.dist-info → paddlex-3.0.0rc1.dist-info}/METADATA +212 -73
- paddlex-3.0.0rc1.dist-info/RECORD +1068 -0
- {paddlex-3.0.0rc0.dist-info → paddlex-3.0.0rc1.dist-info}/WHEEL +1 -1
- paddlex/inference/models/base/predictor/basic_predictor.py +0 -139
- paddlex/paddle2onnx_requirements.txt +0 -1
- paddlex/repo_manager/requirements.txt +0 -21
- paddlex/serving_requirements.txt +0 -9
- paddlex-3.0.0rc0.dist-info/RECORD +0 -1015
- {paddlex-3.0.0rc0.dist-info → paddlex-3.0.0rc1.dist-info}/entry_points.txt +0 -0
- {paddlex-3.0.0rc0.dist-info → paddlex-3.0.0rc1.dist-info/licenses}/LICENSE +0 -0
- {paddlex-3.0.0rc0.dist-info → paddlex-3.0.0rc1.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,198 @@
|
|
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
|
+
|
15
|
+
import copy
|
16
|
+
import os
|
17
|
+
from typing import List
|
18
|
+
|
19
|
+
from ....modules.doc_vlm.model_list import MODELS
|
20
|
+
from ....utils.device import TemporaryDeviceChanger
|
21
|
+
from ....utils.env import get_device_type
|
22
|
+
from ...common.batch_sampler import DocVLMBatchSampler
|
23
|
+
from ..base import BasePredictor
|
24
|
+
from .result import DocVLMResult
|
25
|
+
|
26
|
+
|
27
|
+
class DocVLMPredictor(BasePredictor):
|
28
|
+
|
29
|
+
entities = MODELS
|
30
|
+
|
31
|
+
def __init__(self, *args, **kwargs):
|
32
|
+
"""Initializes DocVLMPredictor.
|
33
|
+
Args:
|
34
|
+
*args: Arbitrary positional arguments passed to the superclass.
|
35
|
+
**kwargs: Arbitrary keyword arguments passed to the superclass.
|
36
|
+
"""
|
37
|
+
super().__init__(*args, **kwargs)
|
38
|
+
self.device = kwargs.get("device", None)
|
39
|
+
self.infer, self.processor = self._build(**kwargs)
|
40
|
+
|
41
|
+
def _build_batch_sampler(self):
|
42
|
+
"""Builds and returns an DocVLMBatchSampler instance.
|
43
|
+
|
44
|
+
Returns:
|
45
|
+
DocVLMBatchSampler: An instance of DocVLMBatchSampler.
|
46
|
+
"""
|
47
|
+
return DocVLMBatchSampler()
|
48
|
+
|
49
|
+
def _get_result_class(self):
|
50
|
+
"""Returns the result class, DocVLMResult.
|
51
|
+
|
52
|
+
Returns:
|
53
|
+
type: The DocVLMResult class.
|
54
|
+
"""
|
55
|
+
return DocVLMResult
|
56
|
+
|
57
|
+
def _build(self, **kwargs):
|
58
|
+
"""Build the model, and correspounding processor on the configuration.
|
59
|
+
|
60
|
+
Returns:
|
61
|
+
model: An instance of Paddle model, could be either a dynamic model or a static model.
|
62
|
+
processor: The correspounding processor for the model.
|
63
|
+
"""
|
64
|
+
import paddle
|
65
|
+
|
66
|
+
from .modeling import PPDocBeeInference
|
67
|
+
|
68
|
+
# build model
|
69
|
+
if "PP-DocBee" in self.model_name:
|
70
|
+
if kwargs.get("use_hpip", False):
|
71
|
+
raise ValueError(
|
72
|
+
f"PP-DocBee series do not support `use_hpip=True` for now."
|
73
|
+
)
|
74
|
+
dtype = (
|
75
|
+
"bfloat16"
|
76
|
+
if ("npu" in get_device_type() or paddle.amp.is_bfloat16_supported())
|
77
|
+
else "float32"
|
78
|
+
)
|
79
|
+
with TemporaryDeviceChanger(self.device):
|
80
|
+
model = PPDocBeeInference.from_pretrained(self.model_dir, dtype=dtype)
|
81
|
+
else:
|
82
|
+
raise NotImplementedError(f"Model {self.model_name} is not supported.")
|
83
|
+
|
84
|
+
# build processor
|
85
|
+
processor = self.build_processor()
|
86
|
+
return model, processor
|
87
|
+
|
88
|
+
def process(self, data: List[dict], **kwargs):
|
89
|
+
"""
|
90
|
+
Process a batch of data through the preprocessing, inference, and postprocessing.
|
91
|
+
|
92
|
+
Args:
|
93
|
+
data (List[dict]): A batch of input data, must be a dict (e.g. {"image": /path/to/image, "query": some question}).
|
94
|
+
kwargs (Optional[dict]): Arbitrary keyword arguments passed to model.generate.
|
95
|
+
|
96
|
+
Returns:
|
97
|
+
dict: A dictionary containing the raw sample information and prediction results for every instance of the batch.
|
98
|
+
"""
|
99
|
+
assert (
|
100
|
+
isinstance(data, List) and len(data) == 1
|
101
|
+
), "data must be a list of length 1"
|
102
|
+
assert isinstance(data[0], dict)
|
103
|
+
|
104
|
+
data = data[0]
|
105
|
+
src_data = copy.copy(data)
|
106
|
+
# preprocess
|
107
|
+
data = self.processor.preprocess(**data)
|
108
|
+
data = self._switch_inputs_to_device(data)
|
109
|
+
|
110
|
+
# do infer
|
111
|
+
with TemporaryDeviceChanger(self.device):
|
112
|
+
preds = self.infer.generate(data, **kwargs)
|
113
|
+
|
114
|
+
# postprocess
|
115
|
+
preds = self.processor.postprocess(preds)
|
116
|
+
|
117
|
+
result_dict = self._format_result_dict(preds, src_data)
|
118
|
+
return result_dict
|
119
|
+
|
120
|
+
def build_processor(self, **kwargs):
|
121
|
+
from ..common.tokenizer import MIXQwen2Tokenizer
|
122
|
+
from .processors import PPDocBeeProcessor, Qwen2VLImageProcessor
|
123
|
+
|
124
|
+
if "PP-DocBee" in self.model_name:
|
125
|
+
image_processor = Qwen2VLImageProcessor()
|
126
|
+
tokenizer = MIXQwen2Tokenizer.from_pretrained(self.model_dir)
|
127
|
+
return PPDocBeeProcessor(
|
128
|
+
image_processor=image_processor, tokenizer=tokenizer
|
129
|
+
)
|
130
|
+
else:
|
131
|
+
raise NotImplementedError
|
132
|
+
|
133
|
+
def _format_result_dict(self, model_preds, src_data):
|
134
|
+
if not isinstance(model_preds, list):
|
135
|
+
model_preds = [model_preds]
|
136
|
+
if not isinstance(src_data, list):
|
137
|
+
src_data = [src_data]
|
138
|
+
if len(model_preds) != len(src_data):
|
139
|
+
raise ValueError(
|
140
|
+
f"Model predicts {len(model_preds)} results while src data has {len(src_data)} samples."
|
141
|
+
)
|
142
|
+
|
143
|
+
rst_format_dict = {k: [] for k in src_data[0].keys()}
|
144
|
+
rst_format_dict["result"] = []
|
145
|
+
|
146
|
+
for data_sample, model_pred in zip(src_data, model_preds):
|
147
|
+
for k in data_sample.keys():
|
148
|
+
rst_format_dict[k].append(data_sample[k])
|
149
|
+
rst_format_dict["result"].append(model_pred)
|
150
|
+
|
151
|
+
return rst_format_dict
|
152
|
+
|
153
|
+
def _infer_dynamic_forward_device(self, device):
|
154
|
+
"""infer the forward device for dynamic graph model"""
|
155
|
+
import GPUtil
|
156
|
+
|
157
|
+
from ....utils.device import parse_device
|
158
|
+
|
159
|
+
if device is None:
|
160
|
+
return None
|
161
|
+
if "cpu" in device.lower():
|
162
|
+
return "cpu"
|
163
|
+
device_type, device_ids = parse_device(device)
|
164
|
+
|
165
|
+
cuda_visible_devices = os.environ.get("CUDA_VISIBLE_DEVICES", None)
|
166
|
+
if cuda_visible_devices is None:
|
167
|
+
env_gpu_num = len(GPUtil.getGPUs())
|
168
|
+
cuda_visible_devices = ",".join([str(i) for i in range(env_gpu_num)])
|
169
|
+
env_device_ids = cuda_visible_devices.split(",")
|
170
|
+
for env_device_id in env_device_ids:
|
171
|
+
if not env_device_id.isdigit():
|
172
|
+
raise ValueError(
|
173
|
+
f"CUDA_VISIBLE_DEVICES ID must be an integer. Invalid device ID: {env_device_id}"
|
174
|
+
)
|
175
|
+
|
176
|
+
if max(device_ids) >= len(env_device_ids):
|
177
|
+
raise ValueError(
|
178
|
+
f"Required gpu ids {device_ids} even larger than the number of visible devices {cuda_visible_devices}."
|
179
|
+
)
|
180
|
+
|
181
|
+
rst_global_gpu_ids = [env_device_ids[idx] for idx in device_ids]
|
182
|
+
return device_type + ":" + ",".join(rst_global_gpu_ids)
|
183
|
+
|
184
|
+
def _switch_inputs_to_device(self, input_dict):
|
185
|
+
"""Switch the input to the specified device"""
|
186
|
+
import paddle
|
187
|
+
|
188
|
+
if self.device is None:
|
189
|
+
return input_dict
|
190
|
+
rst_dict = {
|
191
|
+
k: (
|
192
|
+
paddle.to_tensor(input_dict[k], place=self.device)
|
193
|
+
if isinstance(input_dict[k], paddle.Tensor)
|
194
|
+
else input_dict[k]
|
195
|
+
)
|
196
|
+
for k in input_dict
|
197
|
+
}
|
198
|
+
return rst_dict
|
@@ -0,0 +1,15 @@
|
|
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
|
+
|
15
|
+
from .qwen2_vl import PPDocBeeProcessor, Qwen2VLImageProcessor
|
@@ -0,0 +1,372 @@
|
|
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
|
+
|
15
|
+
from collections import UserDict
|
16
|
+
from typing import Any, Dict, List, Optional, Tuple, Union
|
17
|
+
|
18
|
+
import numpy as np
|
19
|
+
import paddle
|
20
|
+
import PIL.Image
|
21
|
+
from packaging import version
|
22
|
+
|
23
|
+
from ...common.tokenizer.tokenizer_utils_base import ExplicitEnum
|
24
|
+
|
25
|
+
|
26
|
+
def is_paddle_tensor(tensor):
|
27
|
+
return paddle.is_tensor(tensor)
|
28
|
+
|
29
|
+
|
30
|
+
def to_numpy(obj):
|
31
|
+
"""
|
32
|
+
Convert a TensorFlow tensor, PyTorch tensor, Numpy array or python list to a Numpy array.
|
33
|
+
"""
|
34
|
+
if isinstance(obj, (dict, UserDict)):
|
35
|
+
return {k: to_numpy(v) for k, v in obj.items()}
|
36
|
+
elif isinstance(obj, (list, tuple)):
|
37
|
+
return np.array(obj)
|
38
|
+
elif is_paddle_tensor(obj):
|
39
|
+
return obj.detach().cpu().numpy()
|
40
|
+
else:
|
41
|
+
return obj
|
42
|
+
|
43
|
+
|
44
|
+
if version.parse(version.parse(PIL.__version__).base_version) >= version.parse("9.1.0"):
|
45
|
+
PILImageResampling = PIL.Image.Resampling
|
46
|
+
else:
|
47
|
+
PILImageResampling = PIL.Image
|
48
|
+
|
49
|
+
|
50
|
+
ImageInput = Union[
|
51
|
+
"PIL.Image.Image",
|
52
|
+
np.ndarray,
|
53
|
+
"paddle.Tensor",
|
54
|
+
List["PIL.Image.Image"],
|
55
|
+
List[np.ndarray],
|
56
|
+
List["paddle.Tensor"],
|
57
|
+
] # noqa
|
58
|
+
|
59
|
+
TextInput = str
|
60
|
+
|
61
|
+
|
62
|
+
class ChannelDimension(ExplicitEnum):
|
63
|
+
FIRST = "channels_first"
|
64
|
+
LAST = "channels_last"
|
65
|
+
|
66
|
+
|
67
|
+
class TensorType(ExplicitEnum):
|
68
|
+
"""
|
69
|
+
Possible values for the `return_tensors` argument in [`PretrainedTokenizerBase.__call__`]. Useful for
|
70
|
+
tab-completion in an IDE.
|
71
|
+
"""
|
72
|
+
|
73
|
+
PADDLE = "pd"
|
74
|
+
NUMPY = "np"
|
75
|
+
|
76
|
+
|
77
|
+
def is_valid_image(img):
|
78
|
+
return (
|
79
|
+
isinstance(img, PIL.Image.Image)
|
80
|
+
or isinstance(img, np.ndarray)
|
81
|
+
or is_paddle_tensor(img)
|
82
|
+
)
|
83
|
+
|
84
|
+
|
85
|
+
def valid_images(imgs):
|
86
|
+
# If we have an list of images, make sure every image is valid
|
87
|
+
if isinstance(imgs, (list, tuple)):
|
88
|
+
for img in imgs:
|
89
|
+
if not valid_images(img):
|
90
|
+
return False
|
91
|
+
# If not a list of tuple, we have been given a single image or batched tensor of images
|
92
|
+
elif not is_valid_image(imgs):
|
93
|
+
return False
|
94
|
+
return True
|
95
|
+
|
96
|
+
|
97
|
+
def is_batched(img):
|
98
|
+
if isinstance(img, (list, tuple)):
|
99
|
+
return is_valid_image(img[0])
|
100
|
+
return False
|
101
|
+
|
102
|
+
|
103
|
+
def make_list_of_images(images, expected_ndims: int = 3) -> List[ImageInput]:
|
104
|
+
"""
|
105
|
+
Ensure that the input is a list of images. If the input is a single image, it is converted to a list of length 1.
|
106
|
+
If the input is a batch of images, it is converted to a list of images.
|
107
|
+
Args:
|
108
|
+
images (`ImageInput`):
|
109
|
+
Image of images to turn into a list of images.
|
110
|
+
expected_ndims (`int`, *optional*, defaults to 3):
|
111
|
+
Expected number of dimensions for a single input image. If the input image has a different number of
|
112
|
+
dimensions, an error is raised.
|
113
|
+
"""
|
114
|
+
if is_batched(images):
|
115
|
+
return images
|
116
|
+
|
117
|
+
# Either the input is a single image, in which case we create a list of length 1
|
118
|
+
if isinstance(images, PIL.Image.Image):
|
119
|
+
# PIL images are never batched
|
120
|
+
return [images]
|
121
|
+
|
122
|
+
if is_valid_image(images):
|
123
|
+
if images.ndim == expected_ndims + 1:
|
124
|
+
# Batch of images
|
125
|
+
images = list(images)
|
126
|
+
elif images.ndim == expected_ndims:
|
127
|
+
# Single image
|
128
|
+
images = [images]
|
129
|
+
else:
|
130
|
+
raise ValueError(
|
131
|
+
f"Invalid image shape. Expected either {expected_ndims + 1} or {expected_ndims} dimensions, but got"
|
132
|
+
f" {images.ndim} dimensions."
|
133
|
+
)
|
134
|
+
return images
|
135
|
+
raise ValueError(
|
136
|
+
"Invalid image type. Expected either PIL.Image.Image, numpy.ndarray, paddle.Tensor "
|
137
|
+
f"but got {type(images)}."
|
138
|
+
)
|
139
|
+
|
140
|
+
|
141
|
+
def to_numpy_array(img) -> np.ndarray:
|
142
|
+
if not is_valid_image(img):
|
143
|
+
raise ValueError(f"Invalid image type: {type(img)}")
|
144
|
+
|
145
|
+
if isinstance(img, PIL.Image.Image):
|
146
|
+
return np.array(img)
|
147
|
+
return to_numpy(img)
|
148
|
+
|
149
|
+
|
150
|
+
def infer_channel_dimension_format(image: np.ndarray) -> ChannelDimension:
|
151
|
+
"""
|
152
|
+
Infers the channel dimension format of `image`.
|
153
|
+
|
154
|
+
Args:
|
155
|
+
image (`np.ndarray`):
|
156
|
+
The image to infer the channel dimension of.
|
157
|
+
|
158
|
+
Returns:
|
159
|
+
The channel dimension of the image.
|
160
|
+
"""
|
161
|
+
if image.ndim == 3:
|
162
|
+
first_dim, last_dim = 0, 2
|
163
|
+
elif image.ndim == 4:
|
164
|
+
first_dim, last_dim = 1, 3
|
165
|
+
else:
|
166
|
+
raise ValueError(f"Unsupported number of image dimensions: {image.ndim}")
|
167
|
+
|
168
|
+
if image.shape[first_dim] in (1, 3):
|
169
|
+
return ChannelDimension.FIRST
|
170
|
+
elif image.shape[last_dim] in (1, 3):
|
171
|
+
return ChannelDimension.LAST
|
172
|
+
raise ValueError("Unable to infer channel dimension format")
|
173
|
+
|
174
|
+
|
175
|
+
def get_channel_dimension_axis(image: np.ndarray) -> int:
|
176
|
+
"""
|
177
|
+
Returns the channel dimension axis of the image.
|
178
|
+
|
179
|
+
Args:
|
180
|
+
image (`np.ndarray`):
|
181
|
+
The image to get the channel dimension axis of.
|
182
|
+
|
183
|
+
Returns:
|
184
|
+
The channel dimension axis of the image.
|
185
|
+
"""
|
186
|
+
channel_dim = infer_channel_dimension_format(image)
|
187
|
+
if channel_dim == ChannelDimension.FIRST:
|
188
|
+
return image.ndim - 3
|
189
|
+
elif channel_dim == ChannelDimension.LAST:
|
190
|
+
return image.ndim - 1
|
191
|
+
raise ValueError(f"Unsupported data format: {channel_dim}")
|
192
|
+
|
193
|
+
|
194
|
+
def get_image_size(
|
195
|
+
image: np.ndarray, channel_dim: ChannelDimension = None
|
196
|
+
) -> Tuple[int, int]:
|
197
|
+
"""
|
198
|
+
Returns the (height, width) dimensions of the image.
|
199
|
+
|
200
|
+
Args:
|
201
|
+
image (`np.ndarray`):
|
202
|
+
The image to get the dimensions of.
|
203
|
+
channel_dim (`ChannelDimension`, *optional*):
|
204
|
+
Which dimension the channel dimension is in. If `None`, will infer the channel dimension from the image.
|
205
|
+
|
206
|
+
Returns:
|
207
|
+
A tuple of the image's height and width.
|
208
|
+
"""
|
209
|
+
if channel_dim is None:
|
210
|
+
channel_dim = infer_channel_dimension_format(image)
|
211
|
+
|
212
|
+
if channel_dim == ChannelDimension.FIRST:
|
213
|
+
return image.shape[-2], image.shape[-1]
|
214
|
+
elif channel_dim == ChannelDimension.LAST:
|
215
|
+
return image.shape[-3], image.shape[-2]
|
216
|
+
else:
|
217
|
+
raise ValueError(f"Unsupported data format: {channel_dim}")
|
218
|
+
|
219
|
+
|
220
|
+
def convert_to_rgb(image: ImageInput) -> ImageInput:
|
221
|
+
"""
|
222
|
+
Converts an image to RGB format. Only converts if the image is of type PIL.Image.Image, otherwise returns the image
|
223
|
+
as is.
|
224
|
+
|
225
|
+
Args:
|
226
|
+
image (Image):
|
227
|
+
The image to convert.
|
228
|
+
"""
|
229
|
+
|
230
|
+
if not isinstance(image, PIL.Image.Image):
|
231
|
+
return image
|
232
|
+
|
233
|
+
image = image.convert("RGB")
|
234
|
+
return image
|
235
|
+
|
236
|
+
|
237
|
+
def to_channel_dimension_format(
|
238
|
+
image: np.ndarray,
|
239
|
+
channel_dim: Union[ChannelDimension, str],
|
240
|
+
input_channel_dim: Optional[Union[ChannelDimension, str]] = None,
|
241
|
+
) -> np.ndarray:
|
242
|
+
"""
|
243
|
+
Converts `image` to the channel dimension format specified by `channel_dim`.
|
244
|
+
|
245
|
+
Args:
|
246
|
+
image (`numpy.ndarray`):
|
247
|
+
The image to have its channel dimension set.
|
248
|
+
channel_dim (`ChannelDimension`):
|
249
|
+
The channel dimension format to use.
|
250
|
+
|
251
|
+
Returns:
|
252
|
+
`np.ndarray`: The image with the channel dimension set to `channel_dim`.
|
253
|
+
"""
|
254
|
+
if not isinstance(image, np.ndarray):
|
255
|
+
raise ValueError(f"Input image must be of type np.ndarray, got {type(image)}")
|
256
|
+
|
257
|
+
if input_channel_dim is None:
|
258
|
+
input_channel_dim = infer_channel_dimension_format(image)
|
259
|
+
|
260
|
+
target_channel_dim = ChannelDimension(channel_dim)
|
261
|
+
if input_channel_dim == target_channel_dim:
|
262
|
+
return image
|
263
|
+
|
264
|
+
if target_channel_dim == ChannelDimension.FIRST:
|
265
|
+
image = image.transpose((2, 0, 1))
|
266
|
+
elif target_channel_dim == ChannelDimension.LAST:
|
267
|
+
image = image.transpose((1, 2, 0))
|
268
|
+
else:
|
269
|
+
raise ValueError("Unsupported channel dimension format: {}".format(channel_dim))
|
270
|
+
|
271
|
+
return image
|
272
|
+
|
273
|
+
|
274
|
+
class BatchFeature(UserDict):
|
275
|
+
r"""
|
276
|
+
Holds the feature extractor specific `__call__` methods.
|
277
|
+
This class is derived from a python dictionary and can be used as a dictionary.
|
278
|
+
Args:
|
279
|
+
data (`dict`):
|
280
|
+
Dictionary of lists/arrays/tensors returned by the __call__/pad methods ('input_values', 'attention_mask',
|
281
|
+
etc.).
|
282
|
+
tensor_type (`Union[None, str, TensorType]`, *optional*):
|
283
|
+
You can give a tensor_type here to convert the lists of integers in Paddle/Numpy Tensors at
|
284
|
+
initialization.
|
285
|
+
"""
|
286
|
+
|
287
|
+
def __init__(
|
288
|
+
self,
|
289
|
+
data: Optional[Dict[str, Any]] = None,
|
290
|
+
tensor_type: Union[None, str, TensorType] = None,
|
291
|
+
):
|
292
|
+
super().__init__(data)
|
293
|
+
self.convert_to_tensors(tensor_type=tensor_type)
|
294
|
+
|
295
|
+
def __getitem__(self, item: str):
|
296
|
+
"""
|
297
|
+
If the key is a string, returns the value of the dict associated to `key` ('input_values', 'attention_mask',
|
298
|
+
etc.).
|
299
|
+
"""
|
300
|
+
if isinstance(item, str):
|
301
|
+
return self.data[item]
|
302
|
+
else:
|
303
|
+
raise KeyError(
|
304
|
+
"Indexing with integers is not available when using Python based feature extractors"
|
305
|
+
)
|
306
|
+
|
307
|
+
def __getattr__(self, item: str):
|
308
|
+
try:
|
309
|
+
return self.data[item]
|
310
|
+
except KeyError:
|
311
|
+
raise AttributeError
|
312
|
+
|
313
|
+
def __getstate__(self):
|
314
|
+
return {"data": self.data}
|
315
|
+
|
316
|
+
def __setstate__(self, state):
|
317
|
+
if "data" in state:
|
318
|
+
self.data = state["data"]
|
319
|
+
|
320
|
+
def keys(self):
|
321
|
+
return self.data.keys()
|
322
|
+
|
323
|
+
def values(self):
|
324
|
+
return self.data.values()
|
325
|
+
|
326
|
+
def items(self):
|
327
|
+
return self.data.items()
|
328
|
+
|
329
|
+
def convert_to_tensors(self, tensor_type: Optional[Union[str, TensorType]] = None):
|
330
|
+
"""
|
331
|
+
Convert the inner content to tensors.
|
332
|
+
Args:
|
333
|
+
tensor_type (`str` or [`TensorType`], *optional*):
|
334
|
+
The type of tensors to use. If `str`, should be one of the values of the enum [`TensorType`]. If
|
335
|
+
`None`, no modification is done.
|
336
|
+
"""
|
337
|
+
if tensor_type is None:
|
338
|
+
return self
|
339
|
+
|
340
|
+
# Convert to TensorType
|
341
|
+
if not isinstance(tensor_type, TensorType):
|
342
|
+
tensor_type = TensorType(tensor_type)
|
343
|
+
|
344
|
+
# Get a function reference for the correct framework
|
345
|
+
if tensor_type == TensorType.PADDLE:
|
346
|
+
as_tensor = paddle.to_tensor
|
347
|
+
is_tensor = paddle.is_tensor
|
348
|
+
else:
|
349
|
+
as_tensor = np.asarray
|
350
|
+
|
351
|
+
def is_tensor(x):
|
352
|
+
return isinstance(x, np.ndarray)
|
353
|
+
|
354
|
+
# Do the tensor conversion in batch
|
355
|
+
for key, value in self.items():
|
356
|
+
try:
|
357
|
+
if not is_tensor(value):
|
358
|
+
tensor = as_tensor(value)
|
359
|
+
|
360
|
+
self[key] = tensor
|
361
|
+
except: # noqa E722
|
362
|
+
if key == "overflowing_tokens":
|
363
|
+
raise ValueError(
|
364
|
+
"Unable to create tensor returning overflowing tokens of different lengths. "
|
365
|
+
"Please see if a fast version of this tokenizer is available to have this feature available."
|
366
|
+
)
|
367
|
+
raise ValueError(
|
368
|
+
"Unable to create tensor, you should probably activate truncation and/or padding "
|
369
|
+
"with 'padding=True' 'truncation=True' to have batched tensors with the same length."
|
370
|
+
)
|
371
|
+
|
372
|
+
return self
|