paddlex 2.1.0__py3-none-any.whl → 3.0.0b2__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 -0
- paddlex/__init__.py +51 -19
- paddlex/__main__.py +40 -0
- paddlex/configs/anomaly_detection/STFPM.yaml +41 -0
- paddlex/configs/doc_text_orientation/PP-LCNet_x1_0_doc_ori.yaml +41 -0
- paddlex/configs/face_detection/BlazeFace-FPN-SSH.yaml +40 -0
- paddlex/configs/face_detection/BlazeFace.yaml +40 -0
- paddlex/configs/face_detection/PP-YOLOE_plus-S_face.yaml +40 -0
- paddlex/configs/face_detection/PicoDet_LCNet_x2_5_face.yaml +40 -0
- paddlex/configs/face_recognition/MobileFaceNet.yaml +44 -0
- paddlex/configs/face_recognition/ResNet50_face.yaml +44 -0
- paddlex/configs/formula_recognition/LaTeX_OCR_rec.yaml +40 -0
- paddlex/configs/general_recognition/PP-ShiTuV2_rec.yaml +42 -0
- paddlex/configs/general_recognition/PP-ShiTuV2_rec_CLIP_vit_base.yaml +42 -0
- paddlex/configs/general_recognition/PP-ShiTuV2_rec_CLIP_vit_large.yaml +41 -0
- paddlex/configs/human_detection/PP-YOLOE-L_human.yaml +42 -0
- paddlex/configs/human_detection/PP-YOLOE-S_human.yaml +42 -0
- paddlex/configs/image_classification/CLIP_vit_base_patch16_224.yaml +41 -0
- paddlex/configs/image_classification/CLIP_vit_large_patch14_224.yaml +41 -0
- paddlex/configs/image_classification/ConvNeXt_base_224.yaml +41 -0
- paddlex/configs/image_classification/ConvNeXt_base_384.yaml +41 -0
- paddlex/configs/image_classification/ConvNeXt_large_224.yaml +41 -0
- paddlex/configs/image_classification/ConvNeXt_large_384.yaml +41 -0
- paddlex/configs/image_classification/ConvNeXt_small.yaml +41 -0
- paddlex/configs/image_classification/ConvNeXt_tiny.yaml +41 -0
- paddlex/configs/image_classification/FasterNet-L.yaml +40 -0
- paddlex/configs/image_classification/FasterNet-M.yaml +40 -0
- paddlex/configs/image_classification/FasterNet-S.yaml +40 -0
- paddlex/configs/image_classification/FasterNet-T0.yaml +40 -0
- paddlex/configs/image_classification/FasterNet-T1.yaml +40 -0
- paddlex/configs/image_classification/FasterNet-T2.yaml +40 -0
- paddlex/configs/image_classification/MobileNetV1_x0_25.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV1_x0_5.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV1_x0_75.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV1_x1_0.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV2_x0_25.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV2_x0_5.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV2_x1_0.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV2_x1_5.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV2_x2_0.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_large_x0_35.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_large_x0_5.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_large_x0_75.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_large_x1_0.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_large_x1_25.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_small_x0_35.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_small_x0_5.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_small_x0_75.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_small_x1_0.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV3_small_x1_25.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV4_conv_large.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV4_conv_medium.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV4_conv_small.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV4_hybrid_large.yaml +41 -0
- paddlex/configs/image_classification/MobileNetV4_hybrid_medium.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B0.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B1.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B2.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B3.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B4.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B5.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNetV2-B6.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNet_base.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNet_small.yaml +41 -0
- paddlex/configs/image_classification/PP-HGNet_tiny.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNetV2_base.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNetV2_large.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNetV2_small.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x0_25.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x0_35.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x0_5.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x0_75.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x1_0.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x1_5.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x2_0.yaml +41 -0
- paddlex/configs/image_classification/PP-LCNet_x2_5.yaml +41 -0
- paddlex/configs/image_classification/ResNet101.yaml +41 -0
- paddlex/configs/image_classification/ResNet101_vd.yaml +41 -0
- paddlex/configs/image_classification/ResNet152.yaml +41 -0
- paddlex/configs/image_classification/ResNet152_vd.yaml +41 -0
- paddlex/configs/image_classification/ResNet18.yaml +41 -0
- paddlex/configs/image_classification/ResNet18_vd.yaml +41 -0
- paddlex/configs/image_classification/ResNet200_vd.yaml +41 -0
- paddlex/configs/image_classification/ResNet34.yaml +41 -0
- paddlex/configs/image_classification/ResNet34_vd.yaml +41 -0
- paddlex/configs/image_classification/ResNet50.yaml +41 -0
- paddlex/configs/image_classification/ResNet50_vd.yaml +41 -0
- paddlex/configs/image_classification/StarNet-S1.yaml +41 -0
- paddlex/configs/image_classification/StarNet-S2.yaml +41 -0
- paddlex/configs/image_classification/StarNet-S3.yaml +41 -0
- paddlex/configs/image_classification/StarNet-S4.yaml +41 -0
- paddlex/configs/image_classification/SwinTransformer_base_patch4_window12_384.yaml +41 -0
- paddlex/configs/image_classification/SwinTransformer_base_patch4_window7_224.yaml +41 -0
- paddlex/configs/image_classification/SwinTransformer_large_patch4_window12_384.yaml +41 -0
- paddlex/configs/image_classification/SwinTransformer_large_patch4_window7_224.yaml +41 -0
- paddlex/configs/image_classification/SwinTransformer_small_patch4_window7_224.yaml +41 -0
- paddlex/configs/image_classification/SwinTransformer_tiny_patch4_window7_224.yaml +41 -0
- paddlex/configs/image_unwarping/UVDoc.yaml +12 -0
- paddlex/configs/instance_segmentation/Cascade-MaskRCNN-ResNet50-FPN.yaml +40 -0
- paddlex/configs/instance_segmentation/Cascade-MaskRCNN-ResNet50-vd-SSLDv2-FPN.yaml +40 -0
- paddlex/configs/instance_segmentation/Mask-RT-DETR-H.yaml +40 -0
- paddlex/configs/instance_segmentation/Mask-RT-DETR-L.yaml +40 -0
- paddlex/configs/instance_segmentation/Mask-RT-DETR-M.yaml +40 -0
- paddlex/configs/instance_segmentation/Mask-RT-DETR-S.yaml +40 -0
- paddlex/configs/instance_segmentation/Mask-RT-DETR-X.yaml +40 -0
- paddlex/configs/instance_segmentation/MaskRCNN-ResNeXt101-vd-FPN.yaml +39 -0
- paddlex/configs/instance_segmentation/MaskRCNN-ResNet101-FPN.yaml +40 -0
- paddlex/configs/instance_segmentation/MaskRCNN-ResNet101-vd-FPN.yaml +40 -0
- paddlex/configs/instance_segmentation/MaskRCNN-ResNet50-FPN.yaml +40 -0
- paddlex/configs/instance_segmentation/MaskRCNN-ResNet50-vd-FPN.yaml +40 -0
- paddlex/configs/instance_segmentation/MaskRCNN-ResNet50.yaml +40 -0
- paddlex/configs/instance_segmentation/PP-YOLOE_seg-S.yaml +40 -0
- paddlex/configs/instance_segmentation/SOLOv2.yaml +40 -0
- paddlex/configs/mainbody_detection/PP-ShiTuV2_det.yaml +41 -0
- paddlex/configs/multilabel_classification/CLIP_vit_base_patch16_448_ML.yaml +41 -0
- paddlex/configs/multilabel_classification/PP-HGNetV2-B0_ML.yaml +41 -0
- paddlex/configs/multilabel_classification/PP-HGNetV2-B4_ML.yaml +41 -0
- paddlex/configs/multilabel_classification/PP-HGNetV2-B6_ML.yaml +41 -0
- paddlex/configs/multilabel_classification/PP-LCNet_x1_0_ML.yaml +41 -0
- paddlex/configs/multilabel_classification/ResNet50_ML.yaml +41 -0
- paddlex/configs/object_detection/Cascade-FasterRCNN-ResNet50-FPN.yaml +41 -0
- paddlex/configs/object_detection/Cascade-FasterRCNN-ResNet50-vd-SSLDv2-FPN.yaml +42 -0
- paddlex/configs/object_detection/CenterNet-DLA-34.yaml +41 -0
- paddlex/configs/object_detection/CenterNet-ResNet50.yaml +41 -0
- paddlex/configs/object_detection/DETR-R50.yaml +42 -0
- paddlex/configs/object_detection/FCOS-ResNet50.yaml +41 -0
- paddlex/configs/object_detection/FasterRCNN-ResNeXt101-vd-FPN.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet101-FPN.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet101.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet34-FPN.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet50-FPN.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet50-vd-FPN.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet50-vd-SSLDv2-FPN.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-ResNet50.yaml +42 -0
- paddlex/configs/object_detection/FasterRCNN-Swin-Tiny-FPN.yaml +42 -0
- paddlex/configs/object_detection/PP-YOLOE_plus-L.yaml +40 -0
- paddlex/configs/object_detection/PP-YOLOE_plus-M.yaml +40 -0
- paddlex/configs/object_detection/PP-YOLOE_plus-S.yaml +40 -0
- paddlex/configs/object_detection/PP-YOLOE_plus-X.yaml +40 -0
- paddlex/configs/object_detection/PicoDet-L.yaml +40 -0
- paddlex/configs/object_detection/PicoDet-M.yaml +42 -0
- paddlex/configs/object_detection/PicoDet-S.yaml +40 -0
- paddlex/configs/object_detection/PicoDet-XS.yaml +42 -0
- paddlex/configs/object_detection/RT-DETR-H.yaml +40 -0
- paddlex/configs/object_detection/RT-DETR-L.yaml +40 -0
- paddlex/configs/object_detection/RT-DETR-R18.yaml +40 -0
- paddlex/configs/object_detection/RT-DETR-R50.yaml +40 -0
- paddlex/configs/object_detection/RT-DETR-X.yaml +40 -0
- paddlex/configs/object_detection/YOLOX-L.yaml +40 -0
- paddlex/configs/object_detection/YOLOX-M.yaml +40 -0
- paddlex/configs/object_detection/YOLOX-N.yaml +40 -0
- paddlex/configs/object_detection/YOLOX-S.yaml +40 -0
- paddlex/configs/object_detection/YOLOX-T.yaml +40 -0
- paddlex/configs/object_detection/YOLOX-X.yaml +40 -0
- paddlex/configs/object_detection/YOLOv3-DarkNet53.yaml +40 -0
- paddlex/configs/object_detection/YOLOv3-MobileNetV3.yaml +40 -0
- paddlex/configs/object_detection/YOLOv3-ResNet50_vd_DCN.yaml +40 -0
- paddlex/configs/pedestrian_attribute/PP-LCNet_x1_0_pedestrian_attribute.yaml +41 -0
- paddlex/configs/semantic_segmentation/Deeplabv3-R101.yaml +40 -0
- paddlex/configs/semantic_segmentation/Deeplabv3-R50.yaml +40 -0
- paddlex/configs/semantic_segmentation/Deeplabv3_Plus-R101.yaml +40 -0
- paddlex/configs/semantic_segmentation/Deeplabv3_Plus-R50.yaml +40 -0
- paddlex/configs/semantic_segmentation/OCRNet_HRNet-W18.yaml +40 -0
- paddlex/configs/semantic_segmentation/OCRNet_HRNet-W48.yaml +40 -0
- paddlex/configs/semantic_segmentation/PP-LiteSeg-B.yaml +41 -0
- paddlex/configs/semantic_segmentation/PP-LiteSeg-T.yaml +40 -0
- paddlex/configs/semantic_segmentation/SeaFormer_base.yaml +40 -0
- paddlex/configs/semantic_segmentation/SeaFormer_large.yaml +40 -0
- paddlex/configs/semantic_segmentation/SeaFormer_small.yaml +40 -0
- paddlex/configs/semantic_segmentation/SeaFormer_tiny.yaml +40 -0
- paddlex/configs/semantic_segmentation/SegFormer-B0.yaml +40 -0
- paddlex/configs/semantic_segmentation/SegFormer-B1.yaml +40 -0
- paddlex/configs/semantic_segmentation/SegFormer-B2.yaml +40 -0
- paddlex/configs/semantic_segmentation/SegFormer-B3.yaml +40 -0
- paddlex/configs/semantic_segmentation/SegFormer-B4.yaml +40 -0
- paddlex/configs/semantic_segmentation/SegFormer-B5.yaml +40 -0
- paddlex/configs/small_object_detection/PP-YOLOE_plus_SOD-L.yaml +42 -0
- paddlex/configs/small_object_detection/PP-YOLOE_plus_SOD-S.yaml +42 -0
- paddlex/configs/small_object_detection/PP-YOLOE_plus_SOD-largesize-L.yaml +42 -0
- paddlex/configs/structure_analysis/PicoDet-L_layout_17cls.yaml +40 -0
- paddlex/configs/structure_analysis/PicoDet-L_layout_3cls.yaml +40 -0
- paddlex/configs/structure_analysis/PicoDet-S_layout_17cls.yaml +40 -0
- paddlex/configs/structure_analysis/PicoDet-S_layout_3cls.yaml +40 -0
- paddlex/configs/structure_analysis/PicoDet_layout_1x.yaml +40 -0
- paddlex/configs/structure_analysis/PicoDet_layout_1x_table.yaml +40 -0
- paddlex/configs/structure_analysis/RT-DETR-H_layout_17cls.yaml +40 -0
- paddlex/configs/structure_analysis/RT-DETR-H_layout_3cls.yaml +40 -0
- paddlex/configs/table_recognition/SLANet.yaml +39 -0
- paddlex/configs/table_recognition/SLANet_plus.yaml +39 -0
- paddlex/configs/text_detection/PP-OCRv4_mobile_det.yaml +40 -0
- paddlex/configs/text_detection/PP-OCRv4_server_det.yaml +40 -0
- paddlex/configs/text_detection_seal/PP-OCRv4_mobile_seal_det.yaml +40 -0
- paddlex/configs/text_detection_seal/PP-OCRv4_server_seal_det.yaml +40 -0
- paddlex/configs/text_recognition/PP-OCRv4_mobile_rec.yaml +39 -0
- paddlex/configs/text_recognition/PP-OCRv4_server_rec.yaml +39 -0
- paddlex/configs/text_recognition/ch_RepSVTR_rec.yaml +39 -0
- paddlex/configs/text_recognition/ch_SVTRv2_rec.yaml +39 -0
- paddlex/configs/ts_anomaly_detection/AutoEncoder_ad.yaml +37 -0
- paddlex/configs/ts_anomaly_detection/DLinear_ad.yaml +37 -0
- paddlex/configs/ts_anomaly_detection/Nonstationary_ad.yaml +37 -0
- paddlex/configs/ts_anomaly_detection/PatchTST_ad.yaml +37 -0
- paddlex/configs/ts_anomaly_detection/TimesNet_ad.yaml +37 -0
- paddlex/configs/ts_classification/TimesNet_cls.yaml +37 -0
- paddlex/configs/ts_forecast/DLinear.yaml +38 -0
- paddlex/configs/ts_forecast/NLinear.yaml +38 -0
- paddlex/configs/ts_forecast/Nonstationary.yaml +38 -0
- paddlex/configs/ts_forecast/PatchTST.yaml +38 -0
- paddlex/configs/ts_forecast/RLinear.yaml +38 -0
- paddlex/configs/ts_forecast/TiDE.yaml +38 -0
- paddlex/configs/ts_forecast/TimesNet.yaml +38 -0
- paddlex/configs/vehicle_attribute/PP-LCNet_x1_0_vehicle_attribute.yaml +41 -0
- paddlex/configs/vehicle_detection/PP-YOLOE-L_vehicle.yaml +41 -0
- paddlex/configs/vehicle_detection/PP-YOLOE-S_vehicle.yaml +42 -0
- paddlex/engine.py +54 -0
- paddlex/inference/__init__.py +17 -0
- paddlex/inference/components/__init__.py +18 -0
- paddlex/inference/components/base.py +292 -0
- paddlex/inference/components/llm/__init__.py +25 -0
- paddlex/inference/components/llm/base.py +65 -0
- paddlex/inference/components/llm/erniebot.py +212 -0
- paddlex/inference/components/paddle_predictor/__init__.py +20 -0
- paddlex/inference/components/paddle_predictor/predictor.py +332 -0
- paddlex/inference/components/retrieval/__init__.py +15 -0
- paddlex/inference/components/retrieval/faiss.py +359 -0
- paddlex/inference/components/task_related/__init__.py +33 -0
- paddlex/inference/components/task_related/clas.py +124 -0
- paddlex/inference/components/task_related/det.py +284 -0
- paddlex/inference/components/task_related/instance_seg.py +89 -0
- paddlex/inference/components/task_related/seal_det_warp.py +940 -0
- paddlex/inference/components/task_related/seg.py +40 -0
- paddlex/inference/components/task_related/table_rec.py +191 -0
- paddlex/inference/components/task_related/text_det.py +895 -0
- paddlex/inference/components/task_related/text_rec.py +353 -0
- paddlex/inference/components/task_related/warp.py +43 -0
- paddlex/inference/components/transforms/__init__.py +16 -0
- paddlex/inference/components/transforms/image/__init__.py +15 -0
- paddlex/inference/components/transforms/image/common.py +598 -0
- paddlex/inference/components/transforms/image/funcs.py +58 -0
- paddlex/inference/components/transforms/read_data.py +67 -0
- paddlex/inference/components/transforms/ts/__init__.py +15 -0
- paddlex/inference/components/transforms/ts/common.py +393 -0
- paddlex/inference/components/transforms/ts/funcs.py +424 -0
- paddlex/inference/models/__init__.py +106 -0
- paddlex/inference/models/anomaly_detection.py +87 -0
- paddlex/inference/models/base/__init__.py +16 -0
- paddlex/inference/models/base/base_predictor.py +76 -0
- paddlex/inference/models/base/basic_predictor.py +122 -0
- paddlex/inference/models/face_recognition.py +21 -0
- paddlex/inference/models/formula_recognition.py +55 -0
- paddlex/inference/models/general_recognition.py +99 -0
- paddlex/inference/models/image_classification.py +101 -0
- paddlex/inference/models/image_unwarping.py +43 -0
- paddlex/inference/models/instance_segmentation.py +66 -0
- paddlex/inference/models/multilabel_classification.py +33 -0
- paddlex/inference/models/object_detection.py +129 -0
- paddlex/inference/models/semantic_segmentation.py +86 -0
- paddlex/inference/models/table_recognition.py +106 -0
- paddlex/inference/models/text_detection.py +105 -0
- paddlex/inference/models/text_recognition.py +78 -0
- paddlex/inference/models/ts_ad.py +68 -0
- paddlex/inference/models/ts_cls.py +57 -0
- paddlex/inference/models/ts_fc.py +73 -0
- paddlex/inference/pipelines/__init__.py +127 -0
- paddlex/inference/pipelines/attribute_recognition.py +92 -0
- paddlex/inference/pipelines/base.py +86 -0
- paddlex/inference/pipelines/face_recognition.py +49 -0
- paddlex/inference/pipelines/formula_recognition.py +102 -0
- paddlex/inference/pipelines/layout_parsing/__init__.py +15 -0
- paddlex/inference/pipelines/layout_parsing/layout_parsing.py +362 -0
- paddlex/inference/pipelines/ocr.py +80 -0
- paddlex/inference/pipelines/pp_shitu_v2.py +152 -0
- paddlex/inference/pipelines/ppchatocrv3/__init__.py +15 -0
- paddlex/inference/pipelines/ppchatocrv3/ch_prompt.yaml +14 -0
- paddlex/inference/pipelines/ppchatocrv3/ppchatocrv3.py +717 -0
- paddlex/inference/pipelines/ppchatocrv3/utils.py +168 -0
- paddlex/inference/pipelines/seal_recognition.py +152 -0
- paddlex/inference/pipelines/serving/__init__.py +17 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/__init__.py +205 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/anomaly_detection.py +80 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/face_recognition.py +317 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/formula_recognition.py +119 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/image_classification.py +101 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/instance_segmentation.py +112 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/layout_parsing.py +205 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/multi_label_image_classification.py +90 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/object_detection.py +90 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/ocr.py +98 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/pedestrian_attribute_recognition.py +102 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/pp_shitu_v2.py +319 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/ppchatocrv3.py +445 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/seal_recognition.py +110 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/semantic_segmentation.py +82 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/small_object_detection.py +92 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/table_recognition.py +110 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/ts_ad.py +68 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/ts_cls.py +68 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/ts_fc.py +68 -0
- paddlex/inference/pipelines/serving/_pipeline_apps/vehicle_attribute_recognition.py +102 -0
- paddlex/inference/pipelines/serving/app.py +164 -0
- paddlex/inference/pipelines/serving/models.py +30 -0
- paddlex/inference/pipelines/serving/server.py +25 -0
- paddlex/inference/pipelines/serving/storage.py +161 -0
- paddlex/inference/pipelines/serving/utils.py +190 -0
- paddlex/inference/pipelines/single_model_pipeline.py +76 -0
- paddlex/inference/pipelines/table_recognition/__init__.py +15 -0
- paddlex/inference/pipelines/table_recognition/table_recognition.py +193 -0
- paddlex/inference/pipelines/table_recognition/utils.py +457 -0
- paddlex/inference/results/__init__.py +31 -0
- paddlex/inference/results/attribute_rec.py +89 -0
- paddlex/inference/results/base.py +43 -0
- paddlex/inference/results/chat_ocr.py +158 -0
- paddlex/inference/results/clas.py +133 -0
- paddlex/inference/results/det.py +86 -0
- paddlex/inference/results/face_rec.py +34 -0
- paddlex/inference/results/formula_rec.py +363 -0
- paddlex/inference/results/instance_seg.py +152 -0
- paddlex/inference/results/ocr.py +157 -0
- paddlex/inference/results/seal_rec.py +50 -0
- paddlex/inference/results/seg.py +72 -0
- paddlex/inference/results/shitu.py +35 -0
- paddlex/inference/results/table_rec.py +109 -0
- paddlex/inference/results/text_det.py +33 -0
- paddlex/inference/results/text_rec.py +66 -0
- paddlex/inference/results/ts.py +37 -0
- paddlex/inference/results/utils/__init__.py +13 -0
- paddlex/inference/results/utils/mixin.py +204 -0
- paddlex/inference/results/warp.py +31 -0
- paddlex/inference/utils/__init__.py +13 -0
- paddlex/inference/utils/benchmark.py +214 -0
- paddlex/inference/utils/color_map.py +123 -0
- paddlex/inference/utils/get_pipeline_path.py +26 -0
- paddlex/inference/utils/io/__init__.py +33 -0
- paddlex/inference/utils/io/readers.py +353 -0
- paddlex/inference/utils/io/style.py +374 -0
- paddlex/inference/utils/io/tablepyxl.py +149 -0
- paddlex/inference/utils/io/writers.py +376 -0
- paddlex/inference/utils/new_ir_blacklist.py +22 -0
- paddlex/inference/utils/official_models.py +286 -0
- paddlex/inference/utils/pp_option.py +236 -0
- paddlex/inference/utils/process_hook.py +54 -0
- paddlex/model.py +106 -0
- paddlex/modules/__init__.py +105 -0
- paddlex/modules/anomaly_detection/__init__.py +18 -0
- paddlex/modules/anomaly_detection/dataset_checker/__init__.py +95 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/analyse_dataset.py +79 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/check_dataset.py +87 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/convert_dataset.py +230 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/split_dataset.py +87 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/anomaly_detection/dataset_checker/dataset_src/utils/visualizer.py +71 -0
- paddlex/modules/anomaly_detection/evaluator.py +58 -0
- paddlex/modules/anomaly_detection/exportor.py +22 -0
- paddlex/modules/anomaly_detection/model_list.py +16 -0
- paddlex/modules/anomaly_detection/trainer.py +71 -0
- paddlex/modules/base/__init__.py +18 -0
- paddlex/modules/base/build_model.py +34 -0
- paddlex/modules/base/dataset_checker/__init__.py +16 -0
- paddlex/modules/base/dataset_checker/dataset_checker.py +164 -0
- paddlex/modules/base/dataset_checker/utils.py +110 -0
- paddlex/modules/base/evaluator.py +154 -0
- paddlex/modules/base/exportor.py +121 -0
- paddlex/modules/base/trainer.py +111 -0
- paddlex/modules/face_recognition/__init__.py +18 -0
- paddlex/modules/face_recognition/dataset_checker/__init__.py +71 -0
- paddlex/modules/face_recognition/dataset_checker/dataset_src/__init__.py +16 -0
- paddlex/modules/face_recognition/dataset_checker/dataset_src/check_dataset.py +174 -0
- paddlex/modules/face_recognition/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/face_recognition/dataset_checker/dataset_src/utils/visualizer.py +156 -0
- paddlex/modules/face_recognition/evaluator.py +52 -0
- paddlex/modules/face_recognition/exportor.py +22 -0
- paddlex/modules/face_recognition/model_list.py +15 -0
- paddlex/modules/face_recognition/trainer.py +97 -0
- paddlex/modules/formula_recognition/__init__.py +13 -0
- paddlex/modules/formula_recognition/model_list.py +17 -0
- paddlex/modules/general_recognition/__init__.py +18 -0
- paddlex/modules/general_recognition/dataset_checker/__init__.py +107 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/analyse_dataset.py +98 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/check_dataset.py +100 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/convert_dataset.py +99 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/split_dataset.py +82 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/general_recognition/dataset_checker/dataset_src/utils/visualizer.py +150 -0
- paddlex/modules/general_recognition/evaluator.py +31 -0
- paddlex/modules/general_recognition/exportor.py +22 -0
- paddlex/modules/general_recognition/model_list.py +19 -0
- paddlex/modules/general_recognition/trainer.py +52 -0
- paddlex/modules/image_classification/__init__.py +18 -0
- paddlex/modules/image_classification/dataset_checker/__init__.py +104 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/analyse_dataset.py +93 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/check_dataset.py +131 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/convert_dataset.py +51 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/split_dataset.py +81 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/image_classification/dataset_checker/dataset_src/utils/visualizer.py +156 -0
- paddlex/modules/image_classification/evaluator.py +43 -0
- paddlex/modules/image_classification/exportor.py +22 -0
- paddlex/modules/image_classification/model_list.py +97 -0
- paddlex/modules/image_classification/trainer.py +82 -0
- paddlex/modules/image_unwarping/__init__.py +13 -0
- paddlex/modules/image_unwarping/model_list.py +17 -0
- paddlex/modules/instance_segmentation/__init__.py +18 -0
- paddlex/modules/instance_segmentation/dataset_checker/__init__.py +93 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/analyse_dataset.py +78 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/check_dataset.py +92 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/convert_dataset.py +241 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/split_dataset.py +119 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/instance_segmentation/dataset_checker/dataset_src/utils/visualizer.py +221 -0
- paddlex/modules/instance_segmentation/evaluator.py +32 -0
- paddlex/modules/instance_segmentation/exportor.py +22 -0
- paddlex/modules/instance_segmentation/model_list.py +33 -0
- paddlex/modules/instance_segmentation/trainer.py +31 -0
- paddlex/modules/multilabel_classification/__init__.py +18 -0
- paddlex/modules/multilabel_classification/dataset_checker/__init__.py +106 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/analyse_dataset.py +95 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/check_dataset.py +131 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/convert_dataset.py +117 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/split_dataset.py +81 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/multilabel_classification/dataset_checker/dataset_src/utils/visualizer.py +153 -0
- paddlex/modules/multilabel_classification/evaluator.py +43 -0
- paddlex/modules/multilabel_classification/exportor.py +22 -0
- paddlex/modules/multilabel_classification/model_list.py +24 -0
- paddlex/modules/multilabel_classification/trainer.py +85 -0
- paddlex/modules/object_detection/__init__.py +18 -0
- paddlex/modules/object_detection/dataset_checker/__init__.py +115 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/analyse_dataset.py +80 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/check_dataset.py +86 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/convert_dataset.py +433 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/split_dataset.py +119 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/object_detection/dataset_checker/dataset_src/utils/visualizer.py +192 -0
- paddlex/modules/object_detection/evaluator.py +41 -0
- paddlex/modules/object_detection/exportor.py +22 -0
- paddlex/modules/object_detection/model_list.py +74 -0
- paddlex/modules/object_detection/trainer.py +85 -0
- paddlex/modules/semantic_segmentation/__init__.py +18 -0
- paddlex/modules/semantic_segmentation/dataset_checker/__init__.py +95 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/analyse_dataset.py +73 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/check_dataset.py +80 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/convert_dataset.py +162 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/split_dataset.py +87 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/utils/__init__.py +13 -0
- paddlex/modules/semantic_segmentation/dataset_checker/dataset_src/utils/visualizer.py +71 -0
- paddlex/modules/semantic_segmentation/evaluator.py +58 -0
- paddlex/modules/semantic_segmentation/exportor.py +22 -0
- paddlex/modules/semantic_segmentation/model_list.py +35 -0
- paddlex/modules/semantic_segmentation/trainer.py +71 -0
- paddlex/modules/table_recognition/__init__.py +18 -0
- paddlex/modules/table_recognition/dataset_checker/__init__.py +83 -0
- paddlex/modules/table_recognition/dataset_checker/dataset_src/__init__.py +18 -0
- paddlex/modules/table_recognition/dataset_checker/dataset_src/analyse_dataset.py +58 -0
- paddlex/modules/table_recognition/dataset_checker/dataset_src/check_dataset.py +87 -0
- paddlex/modules/table_recognition/dataset_checker/dataset_src/split_dataset.py +79 -0
- paddlex/modules/table_recognition/evaluator.py +43 -0
- paddlex/modules/table_recognition/exportor.py +22 -0
- paddlex/modules/table_recognition/model_list.py +19 -0
- paddlex/modules/table_recognition/trainer.py +70 -0
- paddlex/modules/text_detection/__init__.py +18 -0
- paddlex/modules/text_detection/dataset_checker/__init__.py +94 -0
- paddlex/modules/text_detection/dataset_checker/dataset_src/__init__.py +18 -0
- paddlex/modules/text_detection/dataset_checker/dataset_src/analyse_dataset.py +217 -0
- paddlex/modules/text_detection/dataset_checker/dataset_src/check_dataset.py +96 -0
- paddlex/modules/text_detection/dataset_checker/dataset_src/split_dataset.py +140 -0
- paddlex/modules/text_detection/evaluator.py +41 -0
- paddlex/modules/text_detection/exportor.py +22 -0
- paddlex/modules/text_detection/model_list.py +22 -0
- paddlex/modules/text_detection/trainer.py +68 -0
- paddlex/modules/text_recognition/__init__.py +18 -0
- paddlex/modules/text_recognition/dataset_checker/__init__.py +114 -0
- paddlex/modules/text_recognition/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/text_recognition/dataset_checker/dataset_src/analyse_dataset.py +161 -0
- paddlex/modules/text_recognition/dataset_checker/dataset_src/check_dataset.py +97 -0
- paddlex/modules/text_recognition/dataset_checker/dataset_src/convert_dataset.py +94 -0
- paddlex/modules/text_recognition/dataset_checker/dataset_src/split_dataset.py +81 -0
- paddlex/modules/text_recognition/evaluator.py +63 -0
- paddlex/modules/text_recognition/exportor.py +25 -0
- paddlex/modules/text_recognition/model_list.py +20 -0
- paddlex/modules/text_recognition/trainer.py +105 -0
- paddlex/modules/ts_anomaly_detection/__init__.py +19 -0
- paddlex/modules/ts_anomaly_detection/dataset_checker/__init__.py +97 -0
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/analyse_dataset.py +27 -0
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/check_dataset.py +64 -0
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/convert_dataset.py +78 -0
- paddlex/modules/ts_anomaly_detection/dataset_checker/dataset_src/split_dataset.py +63 -0
- paddlex/modules/ts_anomaly_detection/evaluator.py +67 -0
- paddlex/modules/ts_anomaly_detection/exportor.py +45 -0
- paddlex/modules/ts_anomaly_detection/model_list.py +22 -0
- paddlex/modules/ts_anomaly_detection/trainer.py +97 -0
- paddlex/modules/ts_classification/__init__.py +19 -0
- paddlex/modules/ts_classification/dataset_checker/__init__.py +97 -0
- paddlex/modules/ts_classification/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/ts_classification/dataset_checker/dataset_src/analyse_dataset.py +74 -0
- paddlex/modules/ts_classification/dataset_checker/dataset_src/check_dataset.py +64 -0
- paddlex/modules/ts_classification/dataset_checker/dataset_src/convert_dataset.py +78 -0
- paddlex/modules/ts_classification/dataset_checker/dataset_src/split_dataset.py +88 -0
- paddlex/modules/ts_classification/evaluator.py +66 -0
- paddlex/modules/ts_classification/exportor.py +45 -0
- paddlex/modules/ts_classification/model_list.py +18 -0
- paddlex/modules/ts_classification/trainer.py +92 -0
- paddlex/modules/ts_forecast/__init__.py +19 -0
- paddlex/modules/ts_forecast/dataset_checker/__init__.py +97 -0
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/__init__.py +19 -0
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/analyse_dataset.py +27 -0
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/check_dataset.py +64 -0
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/convert_dataset.py +77 -0
- paddlex/modules/ts_forecast/dataset_checker/dataset_src/split_dataset.py +63 -0
- paddlex/modules/ts_forecast/evaluator.py +66 -0
- paddlex/modules/ts_forecast/exportor.py +45 -0
- paddlex/modules/ts_forecast/model_list.py +24 -0
- paddlex/modules/ts_forecast/trainer.py +92 -0
- paddlex/paddlex_cli.py +197 -0
- paddlex/pipelines/OCR.yaml +8 -0
- paddlex/pipelines/PP-ChatOCRv3-doc.yaml +27 -0
- paddlex/pipelines/PP-ShiTuV2.yaml +13 -0
- paddlex/pipelines/anomaly_detection.yaml +7 -0
- paddlex/pipelines/face_recognition.yaml +13 -0
- paddlex/pipelines/formula_recognition.yaml +8 -0
- paddlex/pipelines/image_classification.yaml +7 -0
- paddlex/pipelines/instance_segmentation.yaml +7 -0
- paddlex/pipelines/layout_parsing.yaml +14 -0
- paddlex/pipelines/multi_label_image_classification.yaml +7 -0
- paddlex/pipelines/object_detection.yaml +7 -0
- paddlex/pipelines/pedestrian_attribute_recognition.yaml +7 -0
- paddlex/pipelines/seal_recognition.yaml +10 -0
- paddlex/pipelines/semantic_segmentation.yaml +7 -0
- paddlex/pipelines/small_object_detection.yaml +7 -0
- paddlex/pipelines/table_recognition.yaml +12 -0
- paddlex/pipelines/ts_ad.yaml +7 -0
- paddlex/pipelines/ts_cls.yaml +7 -0
- paddlex/pipelines/ts_fc.yaml +7 -0
- paddlex/pipelines/vehicle_attribute_recognition.yaml +7 -0
- paddlex/repo_apis/PaddleClas_api/__init__.py +17 -0
- paddlex/repo_apis/PaddleClas_api/cls/__init__.py +19 -0
- paddlex/repo_apis/PaddleClas_api/cls/config.py +594 -0
- paddlex/repo_apis/PaddleClas_api/cls/model.py +349 -0
- paddlex/repo_apis/PaddleClas_api/cls/register.py +890 -0
- paddlex/repo_apis/PaddleClas_api/cls/runner.py +219 -0
- paddlex/repo_apis/PaddleClas_api/shitu_rec/__init__.py +18 -0
- paddlex/repo_apis/PaddleClas_api/shitu_rec/config.py +141 -0
- paddlex/repo_apis/PaddleClas_api/shitu_rec/model.py +23 -0
- paddlex/repo_apis/PaddleClas_api/shitu_rec/register.py +68 -0
- paddlex/repo_apis/PaddleClas_api/shitu_rec/runner.py +55 -0
- paddlex/repo_apis/PaddleDetection_api/__init__.py +17 -0
- paddlex/repo_apis/PaddleDetection_api/config_helper.py +280 -0
- paddlex/repo_apis/PaddleDetection_api/instance_seg/__init__.py +18 -0
- paddlex/repo_apis/PaddleDetection_api/instance_seg/config.py +454 -0
- paddlex/repo_apis/PaddleDetection_api/instance_seg/model.py +397 -0
- paddlex/repo_apis/PaddleDetection_api/instance_seg/register.py +263 -0
- paddlex/repo_apis/PaddleDetection_api/instance_seg/runner.py +226 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/__init__.py +19 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/config.py +517 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/model.py +424 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/official_categories.py +139 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/register.py +927 -0
- paddlex/repo_apis/PaddleDetection_api/object_det/runner.py +226 -0
- paddlex/repo_apis/PaddleNLP_api/__init__.py +13 -0
- paddlex/repo_apis/PaddleOCR_api/__init__.py +20 -0
- paddlex/repo_apis/PaddleOCR_api/config_utils.py +53 -0
- paddlex/repo_apis/PaddleOCR_api/table_rec/__init__.py +16 -0
- paddlex/repo_apis/PaddleOCR_api/table_rec/config.py +64 -0
- paddlex/repo_apis/PaddleOCR_api/table_rec/model.py +126 -0
- paddlex/repo_apis/PaddleOCR_api/table_rec/register.py +53 -0
- paddlex/repo_apis/PaddleOCR_api/table_rec/runner.py +51 -0
- paddlex/repo_apis/PaddleOCR_api/text_det/__init__.py +16 -0
- paddlex/repo_apis/PaddleOCR_api/text_det/config.py +62 -0
- paddlex/repo_apis/PaddleOCR_api/text_det/model.py +72 -0
- paddlex/repo_apis/PaddleOCR_api/text_det/register.py +72 -0
- paddlex/repo_apis/PaddleOCR_api/text_det/runner.py +53 -0
- paddlex/repo_apis/PaddleOCR_api/text_rec/__init__.py +16 -0
- paddlex/repo_apis/PaddleOCR_api/text_rec/config.py +542 -0
- paddlex/repo_apis/PaddleOCR_api/text_rec/model.py +396 -0
- paddlex/repo_apis/PaddleOCR_api/text_rec/register.py +80 -0
- paddlex/repo_apis/PaddleOCR_api/text_rec/runner.py +240 -0
- paddlex/repo_apis/PaddleSeg_api/__init__.py +16 -0
- paddlex/repo_apis/PaddleSeg_api/base_seg_config.py +134 -0
- paddlex/repo_apis/PaddleSeg_api/seg/__init__.py +16 -0
- paddlex/repo_apis/PaddleSeg_api/seg/config.py +177 -0
- paddlex/repo_apis/PaddleSeg_api/seg/model.py +481 -0
- paddlex/repo_apis/PaddleSeg_api/seg/register.py +253 -0
- paddlex/repo_apis/PaddleSeg_api/seg/runner.py +262 -0
- paddlex/repo_apis/PaddleTS_api/__init__.py +19 -0
- paddlex/repo_apis/PaddleTS_api/ts_ad/__init__.py +16 -0
- paddlex/repo_apis/PaddleTS_api/ts_ad/config.py +89 -0
- paddlex/repo_apis/PaddleTS_api/ts_ad/register.py +146 -0
- paddlex/repo_apis/PaddleTS_api/ts_ad/runner.py +158 -0
- paddlex/repo_apis/PaddleTS_api/ts_base/__init__.py +13 -0
- paddlex/repo_apis/PaddleTS_api/ts_base/config.py +222 -0
- paddlex/repo_apis/PaddleTS_api/ts_base/model.py +272 -0
- paddlex/repo_apis/PaddleTS_api/ts_base/runner.py +158 -0
- paddlex/repo_apis/PaddleTS_api/ts_cls/__init__.py +16 -0
- paddlex/repo_apis/PaddleTS_api/ts_cls/config.py +73 -0
- paddlex/repo_apis/PaddleTS_api/ts_cls/register.py +59 -0
- paddlex/repo_apis/PaddleTS_api/ts_cls/runner.py +158 -0
- paddlex/repo_apis/PaddleTS_api/ts_fc/__init__.py +16 -0
- paddlex/repo_apis/PaddleTS_api/ts_fc/config.py +137 -0
- paddlex/repo_apis/PaddleTS_api/ts_fc/register.py +186 -0
- paddlex/repo_apis/__init__.py +13 -0
- paddlex/repo_apis/base/__init__.py +23 -0
- paddlex/repo_apis/base/config.py +238 -0
- paddlex/repo_apis/base/model.py +571 -0
- paddlex/repo_apis/base/register.py +135 -0
- paddlex/repo_apis/base/runner.py +390 -0
- paddlex/repo_apis/base/utils/__init__.py +13 -0
- paddlex/repo_apis/base/utils/arg.py +64 -0
- paddlex/repo_apis/base/utils/subprocess.py +107 -0
- paddlex/repo_manager/__init__.py +24 -0
- paddlex/repo_manager/core.py +271 -0
- paddlex/repo_manager/meta.py +143 -0
- paddlex/repo_manager/repo.py +396 -0
- paddlex/repo_manager/requirements.txt +18 -0
- paddlex/repo_manager/utils.py +298 -0
- paddlex/utils/__init__.py +1 -12
- paddlex/utils/cache.py +148 -0
- paddlex/utils/config.py +214 -0
- paddlex/utils/device.py +103 -0
- paddlex/utils/download.py +168 -182
- paddlex/utils/errors/__init__.py +17 -0
- paddlex/utils/errors/dataset_checker.py +78 -0
- paddlex/utils/errors/others.py +152 -0
- paddlex/utils/file_interface.py +212 -0
- paddlex/utils/flags.py +61 -0
- paddlex/utils/fonts/PingFang-SC-Regular.ttf +0 -0
- paddlex/utils/fonts/__init__.py +24 -0
- paddlex/utils/func_register.py +41 -0
- paddlex/utils/interactive_get_pipeline.py +55 -0
- paddlex/utils/lazy_loader.py +66 -0
- paddlex/utils/logging.py +132 -33
- paddlex/utils/misc.py +201 -0
- paddlex/utils/result_saver.py +59 -0
- paddlex/utils/subclass_register.py +101 -0
- paddlex/version.py +54 -0
- paddlex-3.0.0b2.dist-info/LICENSE +169 -0
- paddlex-3.0.0b2.dist-info/METADATA +760 -0
- paddlex-3.0.0b2.dist-info/RECORD +646 -0
- paddlex-3.0.0b2.dist-info/WHEEL +5 -0
- paddlex-3.0.0b2.dist-info/entry_points.txt +2 -0
- paddlex-3.0.0b2.dist-info/top_level.txt +1 -0
- PaddleClas/__init__.py +0 -16
- PaddleClas/deploy/__init__.py +0 -1
- PaddleClas/deploy/paddleserving/__init__.py +0 -0
- PaddleClas/deploy/paddleserving/classification_web_service.py +0 -74
- PaddleClas/deploy/paddleserving/cpu_utilization.py +0 -4
- PaddleClas/deploy/paddleserving/pipeline_http_client.py +0 -20
- PaddleClas/deploy/paddleserving/pipeline_rpc_client.py +0 -33
- PaddleClas/deploy/paddleserving/recognition/__init__.py +0 -0
- PaddleClas/deploy/paddleserving/recognition/pipeline_http_client.py +0 -21
- PaddleClas/deploy/paddleserving/recognition/pipeline_rpc_client.py +0 -34
- PaddleClas/deploy/paddleserving/recognition/recognition_web_service.py +0 -209
- PaddleClas/deploy/python/__init__.py +0 -0
- PaddleClas/deploy/python/build_gallery.py +0 -214
- PaddleClas/deploy/python/det_preprocess.py +0 -205
- PaddleClas/deploy/python/postprocess.py +0 -161
- PaddleClas/deploy/python/predict_cls.py +0 -142
- PaddleClas/deploy/python/predict_det.py +0 -158
- PaddleClas/deploy/python/predict_rec.py +0 -138
- PaddleClas/deploy/python/predict_system.py +0 -144
- PaddleClas/deploy/python/preprocess.py +0 -337
- PaddleClas/deploy/utils/__init__.py +0 -5
- PaddleClas/deploy/utils/config.py +0 -197
- PaddleClas/deploy/utils/draw_bbox.py +0 -61
- PaddleClas/deploy/utils/encode_decode.py +0 -31
- PaddleClas/deploy/utils/get_image_list.py +0 -49
- PaddleClas/deploy/utils/logger.py +0 -120
- PaddleClas/deploy/utils/predictor.py +0 -71
- PaddleClas/deploy/vector_search/__init__.py +0 -1
- PaddleClas/deploy/vector_search/interface.py +0 -272
- PaddleClas/deploy/vector_search/test.py +0 -34
- PaddleClas/hubconf.py +0 -788
- PaddleClas/paddleclas.py +0 -552
- PaddleClas/ppcls/__init__.py +0 -20
- PaddleClas/ppcls/arch/__init__.py +0 -127
- PaddleClas/ppcls/arch/backbone/__init__.py +0 -80
- PaddleClas/ppcls/arch/backbone/base/__init__.py +0 -0
- PaddleClas/ppcls/arch/backbone/base/theseus_layer.py +0 -126
- PaddleClas/ppcls/arch/backbone/legendary_models/__init__.py +0 -6
- PaddleClas/ppcls/arch/backbone/legendary_models/esnet.py +0 -355
- PaddleClas/ppcls/arch/backbone/legendary_models/hrnet.py +0 -744
- PaddleClas/ppcls/arch/backbone/legendary_models/inception_v3.py +0 -539
- PaddleClas/ppcls/arch/backbone/legendary_models/mobilenet_v1.py +0 -234
- PaddleClas/ppcls/arch/backbone/legendary_models/mobilenet_v3.py +0 -561
- PaddleClas/ppcls/arch/backbone/legendary_models/pp_lcnet.py +0 -399
- PaddleClas/ppcls/arch/backbone/legendary_models/resnet.py +0 -534
- PaddleClas/ppcls/arch/backbone/legendary_models/vgg.py +0 -231
- PaddleClas/ppcls/arch/backbone/model_zoo/__init__.py +0 -0
- PaddleClas/ppcls/arch/backbone/model_zoo/alexnet.py +0 -168
- PaddleClas/ppcls/arch/backbone/model_zoo/cspnet.py +0 -376
- PaddleClas/ppcls/arch/backbone/model_zoo/darknet.py +0 -197
- PaddleClas/ppcls/arch/backbone/model_zoo/densenet.py +0 -344
- PaddleClas/ppcls/arch/backbone/model_zoo/distilled_vision_transformer.py +0 -272
- PaddleClas/ppcls/arch/backbone/model_zoo/dla.py +0 -528
- PaddleClas/ppcls/arch/backbone/model_zoo/dpn.py +0 -451
- PaddleClas/ppcls/arch/backbone/model_zoo/efficientnet.py +0 -976
- PaddleClas/ppcls/arch/backbone/model_zoo/ghostnet.py +0 -363
- PaddleClas/ppcls/arch/backbone/model_zoo/googlenet.py +0 -229
- PaddleClas/ppcls/arch/backbone/model_zoo/gvt.py +0 -693
- PaddleClas/ppcls/arch/backbone/model_zoo/hardnet.py +0 -293
- PaddleClas/ppcls/arch/backbone/model_zoo/inception_v4.py +0 -477
- PaddleClas/ppcls/arch/backbone/model_zoo/levit.py +0 -589
- PaddleClas/ppcls/arch/backbone/model_zoo/mixnet.py +0 -815
- PaddleClas/ppcls/arch/backbone/model_zoo/mobilenet_v2.py +0 -287
- PaddleClas/ppcls/arch/backbone/model_zoo/rednet.py +0 -203
- PaddleClas/ppcls/arch/backbone/model_zoo/regnet.py +0 -431
- PaddleClas/ppcls/arch/backbone/model_zoo/repvgg.py +0 -422
- PaddleClas/ppcls/arch/backbone/model_zoo/res2net.py +0 -264
- PaddleClas/ppcls/arch/backbone/model_zoo/res2net_vd.py +0 -305
- PaddleClas/ppcls/arch/backbone/model_zoo/resnest.py +0 -740
- PaddleClas/ppcls/arch/backbone/model_zoo/resnet_vc.py +0 -309
- PaddleClas/ppcls/arch/backbone/model_zoo/resnext.py +0 -298
- PaddleClas/ppcls/arch/backbone/model_zoo/resnext101_wsl.py +0 -490
- PaddleClas/ppcls/arch/backbone/model_zoo/resnext_vd.py +0 -317
- PaddleClas/ppcls/arch/backbone/model_zoo/rexnet.py +0 -281
- PaddleClas/ppcls/arch/backbone/model_zoo/se_resnet_vd.py +0 -390
- PaddleClas/ppcls/arch/backbone/model_zoo/se_resnext.py +0 -364
- PaddleClas/ppcls/arch/backbone/model_zoo/se_resnext_vd.py +0 -309
- PaddleClas/ppcls/arch/backbone/model_zoo/shufflenet_v2.py +0 -362
- PaddleClas/ppcls/arch/backbone/model_zoo/squeezenet.py +0 -194
- PaddleClas/ppcls/arch/backbone/model_zoo/swin_transformer.py +0 -857
- PaddleClas/ppcls/arch/backbone/model_zoo/tnt.py +0 -385
- PaddleClas/ppcls/arch/backbone/model_zoo/vision_transformer.py +0 -495
- PaddleClas/ppcls/arch/backbone/model_zoo/xception.py +0 -377
- PaddleClas/ppcls/arch/backbone/model_zoo/xception_deeplab.py +0 -421
- PaddleClas/ppcls/arch/backbone/variant_models/__init__.py +0 -3
- PaddleClas/ppcls/arch/backbone/variant_models/pp_lcnet_variant.py +0 -29
- PaddleClas/ppcls/arch/backbone/variant_models/resnet_variant.py +0 -23
- PaddleClas/ppcls/arch/backbone/variant_models/vgg_variant.py +0 -28
- PaddleClas/ppcls/arch/gears/__init__.py +0 -32
- PaddleClas/ppcls/arch/gears/arcmargin.py +0 -72
- PaddleClas/ppcls/arch/gears/circlemargin.py +0 -59
- PaddleClas/ppcls/arch/gears/cosmargin.py +0 -55
- PaddleClas/ppcls/arch/gears/fc.py +0 -35
- PaddleClas/ppcls/arch/gears/identity_head.py +0 -9
- PaddleClas/ppcls/arch/gears/vehicle_neck.py +0 -52
- PaddleClas/ppcls/arch/utils.py +0 -53
- PaddleClas/ppcls/data/__init__.py +0 -144
- PaddleClas/ppcls/data/dataloader/DistributedRandomIdentitySampler.py +0 -90
- PaddleClas/ppcls/data/dataloader/__init__.py +0 -9
- PaddleClas/ppcls/data/dataloader/common_dataset.py +0 -84
- PaddleClas/ppcls/data/dataloader/dali.py +0 -319
- PaddleClas/ppcls/data/dataloader/icartoon_dataset.py +0 -36
- PaddleClas/ppcls/data/dataloader/imagenet_dataset.py +0 -38
- PaddleClas/ppcls/data/dataloader/logo_dataset.py +0 -46
- PaddleClas/ppcls/data/dataloader/mix_dataset.py +0 -49
- PaddleClas/ppcls/data/dataloader/mix_sampler.py +0 -79
- PaddleClas/ppcls/data/dataloader/multilabel_dataset.py +0 -59
- PaddleClas/ppcls/data/dataloader/pk_sampler.py +0 -105
- PaddleClas/ppcls/data/dataloader/vehicle_dataset.py +0 -138
- PaddleClas/ppcls/data/postprocess/__init__.py +0 -41
- PaddleClas/ppcls/data/postprocess/topk.py +0 -85
- PaddleClas/ppcls/data/preprocess/__init__.py +0 -100
- PaddleClas/ppcls/data/preprocess/batch_ops/__init__.py +0 -1
- PaddleClas/ppcls/data/preprocess/batch_ops/batch_operators.py +0 -231
- PaddleClas/ppcls/data/preprocess/ops/__init__.py +0 -1
- PaddleClas/ppcls/data/preprocess/ops/autoaugment.py +0 -264
- PaddleClas/ppcls/data/preprocess/ops/cutout.py +0 -41
- PaddleClas/ppcls/data/preprocess/ops/fmix.py +0 -217
- PaddleClas/ppcls/data/preprocess/ops/functional.py +0 -138
- PaddleClas/ppcls/data/preprocess/ops/grid.py +0 -89
- PaddleClas/ppcls/data/preprocess/ops/hide_and_seek.py +0 -44
- PaddleClas/ppcls/data/preprocess/ops/operators.py +0 -384
- PaddleClas/ppcls/data/preprocess/ops/randaugment.py +0 -106
- PaddleClas/ppcls/data/preprocess/ops/random_erasing.py +0 -90
- PaddleClas/ppcls/data/preprocess/ops/timm_autoaugment.py +0 -877
- PaddleClas/ppcls/data/utils/__init__.py +0 -13
- PaddleClas/ppcls/data/utils/get_image_list.py +0 -49
- PaddleClas/ppcls/engine/__init__.py +0 -0
- PaddleClas/ppcls/engine/engine.py +0 -436
- PaddleClas/ppcls/engine/evaluation/__init__.py +0 -16
- PaddleClas/ppcls/engine/evaluation/classification.py +0 -143
- PaddleClas/ppcls/engine/evaluation/retrieval.py +0 -169
- PaddleClas/ppcls/engine/slim/__init__.py +0 -16
- PaddleClas/ppcls/engine/slim/prune.py +0 -66
- PaddleClas/ppcls/engine/slim/quant.py +0 -55
- PaddleClas/ppcls/engine/train/__init__.py +0 -14
- PaddleClas/ppcls/engine/train/train.py +0 -79
- PaddleClas/ppcls/engine/train/utils.py +0 -72
- PaddleClas/ppcls/loss/__init__.py +0 -65
- PaddleClas/ppcls/loss/celoss.py +0 -67
- PaddleClas/ppcls/loss/centerloss.py +0 -54
- PaddleClas/ppcls/loss/comfunc.py +0 -45
- PaddleClas/ppcls/loss/deephashloss.py +0 -92
- PaddleClas/ppcls/loss/distanceloss.py +0 -43
- PaddleClas/ppcls/loss/distillationloss.py +0 -141
- PaddleClas/ppcls/loss/dmlloss.py +0 -46
- PaddleClas/ppcls/loss/emlloss.py +0 -97
- PaddleClas/ppcls/loss/googlenetloss.py +0 -41
- PaddleClas/ppcls/loss/msmloss.py +0 -78
- PaddleClas/ppcls/loss/multilabelloss.py +0 -43
- PaddleClas/ppcls/loss/npairsloss.py +0 -38
- PaddleClas/ppcls/loss/pairwisecosface.py +0 -55
- PaddleClas/ppcls/loss/supconloss.py +0 -108
- PaddleClas/ppcls/loss/trihardloss.py +0 -82
- PaddleClas/ppcls/loss/triplet.py +0 -137
- PaddleClas/ppcls/metric/__init__.py +0 -51
- PaddleClas/ppcls/metric/metrics.py +0 -308
- PaddleClas/ppcls/optimizer/__init__.py +0 -72
- PaddleClas/ppcls/optimizer/learning_rate.py +0 -326
- PaddleClas/ppcls/optimizer/optimizer.py +0 -207
- PaddleClas/ppcls/utils/__init__.py +0 -27
- PaddleClas/ppcls/utils/check.py +0 -151
- PaddleClas/ppcls/utils/config.py +0 -210
- PaddleClas/ppcls/utils/download.py +0 -319
- PaddleClas/ppcls/utils/ema.py +0 -63
- PaddleClas/ppcls/utils/logger.py +0 -137
- PaddleClas/ppcls/utils/metrics.py +0 -107
- PaddleClas/ppcls/utils/misc.py +0 -63
- PaddleClas/ppcls/utils/model_zoo.py +0 -213
- PaddleClas/ppcls/utils/profiler.py +0 -111
- PaddleClas/ppcls/utils/save_load.py +0 -136
- PaddleClas/setup.py +0 -58
- PaddleClas/tools/__init__.py +0 -15
- PaddleClas/tools/eval.py +0 -31
- PaddleClas/tools/export_model.py +0 -34
- PaddleClas/tools/infer.py +0 -31
- PaddleClas/tools/train.py +0 -32
- paddlex/cls.py +0 -82
- paddlex/command.py +0 -215
- paddlex/cv/__init__.py +0 -17
- paddlex/cv/datasets/__init__.py +0 -18
- paddlex/cv/datasets/coco.py +0 -208
- paddlex/cv/datasets/imagenet.py +0 -88
- paddlex/cv/datasets/seg_dataset.py +0 -91
- paddlex/cv/datasets/voc.py +0 -445
- paddlex/cv/models/__init__.py +0 -18
- paddlex/cv/models/base.py +0 -631
- paddlex/cv/models/classifier.py +0 -989
- paddlex/cv/models/detector.py +0 -2292
- paddlex/cv/models/load_model.py +0 -148
- paddlex/cv/models/segmenter.py +0 -768
- paddlex/cv/models/slim/__init__.py +0 -13
- paddlex/cv/models/slim/prune.py +0 -55
- paddlex/cv/models/utils/__init__.py +0 -13
- paddlex/cv/models/utils/det_metrics/__init__.py +0 -15
- paddlex/cv/models/utils/det_metrics/coco_utils.py +0 -476
- paddlex/cv/models/utils/det_metrics/metrics.py +0 -220
- paddlex/cv/models/utils/infer_nets.py +0 -45
- paddlex/cv/models/utils/seg_metrics.py +0 -62
- paddlex/cv/models/utils/visualize.py +0 -399
- paddlex/cv/transforms/__init__.py +0 -46
- paddlex/cv/transforms/batch_operators.py +0 -286
- paddlex/cv/transforms/box_utils.py +0 -41
- paddlex/cv/transforms/functions.py +0 -193
- paddlex/cv/transforms/operators.py +0 -1402
- paddlex/deploy.py +0 -268
- paddlex/det.py +0 -49
- paddlex/paddleseg/__init__.py +0 -17
- paddlex/paddleseg/core/__init__.py +0 -20
- paddlex/paddleseg/core/infer.py +0 -289
- paddlex/paddleseg/core/predict.py +0 -145
- paddlex/paddleseg/core/train.py +0 -258
- paddlex/paddleseg/core/val.py +0 -172
- paddlex/paddleseg/cvlibs/__init__.py +0 -17
- paddlex/paddleseg/cvlibs/callbacks.py +0 -279
- paddlex/paddleseg/cvlibs/config.py +0 -359
- paddlex/paddleseg/cvlibs/manager.py +0 -142
- paddlex/paddleseg/cvlibs/param_init.py +0 -91
- paddlex/paddleseg/datasets/__init__.py +0 -21
- paddlex/paddleseg/datasets/ade.py +0 -112
- paddlex/paddleseg/datasets/cityscapes.py +0 -86
- paddlex/paddleseg/datasets/cocostuff.py +0 -79
- paddlex/paddleseg/datasets/dataset.py +0 -164
- paddlex/paddleseg/datasets/mini_deep_globe_road_extraction.py +0 -95
- paddlex/paddleseg/datasets/optic_disc_seg.py +0 -97
- paddlex/paddleseg/datasets/pascal_context.py +0 -80
- paddlex/paddleseg/datasets/voc.py +0 -113
- paddlex/paddleseg/models/__init__.py +0 -39
- paddlex/paddleseg/models/ann.py +0 -436
- paddlex/paddleseg/models/attention_unet.py +0 -189
- paddlex/paddleseg/models/backbones/__init__.py +0 -18
- paddlex/paddleseg/models/backbones/hrnet.py +0 -815
- paddlex/paddleseg/models/backbones/mobilenetv3.py +0 -365
- paddlex/paddleseg/models/backbones/resnet_vd.py +0 -364
- paddlex/paddleseg/models/backbones/xception_deeplab.py +0 -415
- paddlex/paddleseg/models/bisenet.py +0 -311
- paddlex/paddleseg/models/danet.py +0 -220
- paddlex/paddleseg/models/decoupled_segnet.py +0 -233
- paddlex/paddleseg/models/deeplab.py +0 -258
- paddlex/paddleseg/models/dnlnet.py +0 -231
- paddlex/paddleseg/models/emanet.py +0 -219
- paddlex/paddleseg/models/fast_scnn.py +0 -318
- paddlex/paddleseg/models/fcn.py +0 -135
- paddlex/paddleseg/models/gcnet.py +0 -223
- paddlex/paddleseg/models/gscnn.py +0 -357
- paddlex/paddleseg/models/hardnet.py +0 -309
- paddlex/paddleseg/models/isanet.py +0 -202
- paddlex/paddleseg/models/layers/__init__.py +0 -19
- paddlex/paddleseg/models/layers/activation.py +0 -73
- paddlex/paddleseg/models/layers/attention.py +0 -146
- paddlex/paddleseg/models/layers/layer_libs.py +0 -168
- paddlex/paddleseg/models/layers/nonlocal2d.py +0 -155
- paddlex/paddleseg/models/layers/pyramid_pool.py +0 -182
- paddlex/paddleseg/models/losses/__init__.py +0 -27
- paddlex/paddleseg/models/losses/binary_cross_entropy_loss.py +0 -174
- paddlex/paddleseg/models/losses/bootstrapped_cross_entropy.py +0 -73
- paddlex/paddleseg/models/losses/cross_entropy_loss.py +0 -94
- paddlex/paddleseg/models/losses/decoupledsegnet_relax_boundary_loss.py +0 -129
- paddlex/paddleseg/models/losses/dice_loss.py +0 -61
- paddlex/paddleseg/models/losses/edge_attention_loss.py +0 -78
- paddlex/paddleseg/models/losses/gscnn_dual_task_loss.py +0 -141
- paddlex/paddleseg/models/losses/l1_loss.py +0 -76
- paddlex/paddleseg/models/losses/lovasz_loss.py +0 -222
- paddlex/paddleseg/models/losses/mean_square_error_loss.py +0 -65
- paddlex/paddleseg/models/losses/mixed_loss.py +0 -58
- paddlex/paddleseg/models/losses/ohem_cross_entropy_loss.py +0 -99
- paddlex/paddleseg/models/losses/ohem_edge_attention_loss.py +0 -114
- paddlex/paddleseg/models/ocrnet.py +0 -248
- paddlex/paddleseg/models/pspnet.py +0 -147
- paddlex/paddleseg/models/sfnet.py +0 -236
- paddlex/paddleseg/models/shufflenet_slim.py +0 -268
- paddlex/paddleseg/models/u2net.py +0 -574
- paddlex/paddleseg/models/unet.py +0 -155
- paddlex/paddleseg/models/unet_3plus.py +0 -316
- paddlex/paddleseg/models/unet_plusplus.py +0 -237
- paddlex/paddleseg/transforms/__init__.py +0 -16
- paddlex/paddleseg/transforms/functional.py +0 -161
- paddlex/paddleseg/transforms/transforms.py +0 -937
- paddlex/paddleseg/utils/__init__.py +0 -22
- paddlex/paddleseg/utils/config_check.py +0 -60
- paddlex/paddleseg/utils/download.py +0 -163
- paddlex/paddleseg/utils/env/__init__.py +0 -16
- paddlex/paddleseg/utils/env/seg_env.py +0 -56
- paddlex/paddleseg/utils/env/sys_env.py +0 -122
- paddlex/paddleseg/utils/logger.py +0 -48
- paddlex/paddleseg/utils/metrics.py +0 -146
- paddlex/paddleseg/utils/progbar.py +0 -212
- paddlex/paddleseg/utils/timer.py +0 -53
- paddlex/paddleseg/utils/utils.py +0 -120
- paddlex/paddleseg/utils/visualize.py +0 -90
- paddlex/ppcls/__init__.py +0 -20
- paddlex/ppcls/arch/__init__.py +0 -127
- paddlex/ppcls/arch/backbone/__init__.py +0 -80
- paddlex/ppcls/arch/backbone/base/__init__.py +0 -0
- paddlex/ppcls/arch/backbone/base/theseus_layer.py +0 -130
- paddlex/ppcls/arch/backbone/legendary_models/__init__.py +0 -6
- paddlex/ppcls/arch/backbone/legendary_models/esnet.py +0 -355
- paddlex/ppcls/arch/backbone/legendary_models/hrnet.py +0 -748
- paddlex/ppcls/arch/backbone/legendary_models/inception_v3.py +0 -539
- paddlex/ppcls/arch/backbone/legendary_models/mobilenet_v1.py +0 -234
- paddlex/ppcls/arch/backbone/legendary_models/mobilenet_v3.py +0 -561
- paddlex/ppcls/arch/backbone/legendary_models/pp_lcnet.py +0 -399
- paddlex/ppcls/arch/backbone/legendary_models/resnet.py +0 -534
- paddlex/ppcls/arch/backbone/legendary_models/vgg.py +0 -235
- paddlex/ppcls/arch/backbone/model_zoo/__init__.py +0 -0
- paddlex/ppcls/arch/backbone/model_zoo/alexnet.py +0 -168
- paddlex/ppcls/arch/backbone/model_zoo/cspnet.py +0 -376
- paddlex/ppcls/arch/backbone/model_zoo/darknet.py +0 -197
- paddlex/ppcls/arch/backbone/model_zoo/densenet.py +0 -344
- paddlex/ppcls/arch/backbone/model_zoo/distilled_vision_transformer.py +0 -272
- paddlex/ppcls/arch/backbone/model_zoo/dla.py +0 -528
- paddlex/ppcls/arch/backbone/model_zoo/dpn.py +0 -451
- paddlex/ppcls/arch/backbone/model_zoo/efficientnet.py +0 -976
- paddlex/ppcls/arch/backbone/model_zoo/ghostnet.py +0 -363
- paddlex/ppcls/arch/backbone/model_zoo/googlenet.py +0 -229
- paddlex/ppcls/arch/backbone/model_zoo/gvt.py +0 -693
- paddlex/ppcls/arch/backbone/model_zoo/hardnet.py +0 -293
- paddlex/ppcls/arch/backbone/model_zoo/inception_v4.py +0 -477
- paddlex/ppcls/arch/backbone/model_zoo/levit.py +0 -589
- paddlex/ppcls/arch/backbone/model_zoo/mixnet.py +0 -815
- paddlex/ppcls/arch/backbone/model_zoo/mobilenet_v2.py +0 -287
- paddlex/ppcls/arch/backbone/model_zoo/rednet.py +0 -203
- paddlex/ppcls/arch/backbone/model_zoo/regnet.py +0 -431
- paddlex/ppcls/arch/backbone/model_zoo/repvgg.py +0 -422
- paddlex/ppcls/arch/backbone/model_zoo/res2net.py +0 -264
- paddlex/ppcls/arch/backbone/model_zoo/res2net_vd.py +0 -305
- paddlex/ppcls/arch/backbone/model_zoo/resnest.py +0 -740
- paddlex/ppcls/arch/backbone/model_zoo/resnet_vc.py +0 -309
- paddlex/ppcls/arch/backbone/model_zoo/resnext.py +0 -298
- paddlex/ppcls/arch/backbone/model_zoo/resnext101_wsl.py +0 -490
- paddlex/ppcls/arch/backbone/model_zoo/resnext_vd.py +0 -317
- paddlex/ppcls/arch/backbone/model_zoo/rexnet.py +0 -281
- paddlex/ppcls/arch/backbone/model_zoo/se_resnet_vd.py +0 -390
- paddlex/ppcls/arch/backbone/model_zoo/se_resnext.py +0 -364
- paddlex/ppcls/arch/backbone/model_zoo/se_resnext_vd.py +0 -309
- paddlex/ppcls/arch/backbone/model_zoo/shufflenet_v2.py +0 -362
- paddlex/ppcls/arch/backbone/model_zoo/squeezenet.py +0 -194
- paddlex/ppcls/arch/backbone/model_zoo/swin_transformer.py +0 -857
- paddlex/ppcls/arch/backbone/model_zoo/tnt.py +0 -385
- paddlex/ppcls/arch/backbone/model_zoo/vision_transformer.py +0 -495
- paddlex/ppcls/arch/backbone/model_zoo/xception.py +0 -377
- paddlex/ppcls/arch/backbone/model_zoo/xception_deeplab.py +0 -421
- paddlex/ppcls/arch/backbone/variant_models/__init__.py +0 -3
- paddlex/ppcls/arch/backbone/variant_models/pp_lcnet_variant.py +0 -29
- paddlex/ppcls/arch/backbone/variant_models/resnet_variant.py +0 -23
- paddlex/ppcls/arch/backbone/variant_models/vgg_variant.py +0 -28
- paddlex/ppcls/arch/gears/__init__.py +0 -32
- paddlex/ppcls/arch/gears/arcmargin.py +0 -72
- paddlex/ppcls/arch/gears/circlemargin.py +0 -59
- paddlex/ppcls/arch/gears/cosmargin.py +0 -55
- paddlex/ppcls/arch/gears/fc.py +0 -35
- paddlex/ppcls/arch/gears/identity_head.py +0 -9
- paddlex/ppcls/arch/gears/vehicle_neck.py +0 -52
- paddlex/ppcls/arch/utils.py +0 -53
- paddlex/ppcls/data/__init__.py +0 -144
- paddlex/ppcls/data/dataloader/DistributedRandomIdentitySampler.py +0 -90
- paddlex/ppcls/data/dataloader/__init__.py +0 -9
- paddlex/ppcls/data/dataloader/common_dataset.py +0 -84
- paddlex/ppcls/data/dataloader/dali.py +0 -319
- paddlex/ppcls/data/dataloader/icartoon_dataset.py +0 -36
- paddlex/ppcls/data/dataloader/imagenet_dataset.py +0 -38
- paddlex/ppcls/data/dataloader/logo_dataset.py +0 -46
- paddlex/ppcls/data/dataloader/mix_dataset.py +0 -49
- paddlex/ppcls/data/dataloader/mix_sampler.py +0 -79
- paddlex/ppcls/data/dataloader/multilabel_dataset.py +0 -59
- paddlex/ppcls/data/dataloader/pk_sampler.py +0 -105
- paddlex/ppcls/data/dataloader/vehicle_dataset.py +0 -138
- paddlex/ppcls/data/postprocess/__init__.py +0 -41
- paddlex/ppcls/data/postprocess/topk.py +0 -85
- paddlex/ppcls/data/preprocess/__init__.py +0 -100
- paddlex/ppcls/data/preprocess/batch_ops/__init__.py +0 -0
- paddlex/ppcls/data/preprocess/batch_ops/batch_operators.py +0 -231
- paddlex/ppcls/data/preprocess/ops/__init__.py +0 -0
- paddlex/ppcls/data/preprocess/ops/autoaugment.py +0 -264
- paddlex/ppcls/data/preprocess/ops/cutout.py +0 -41
- paddlex/ppcls/data/preprocess/ops/fmix.py +0 -217
- paddlex/ppcls/data/preprocess/ops/functional.py +0 -141
- paddlex/ppcls/data/preprocess/ops/grid.py +0 -89
- paddlex/ppcls/data/preprocess/ops/hide_and_seek.py +0 -44
- paddlex/ppcls/data/preprocess/ops/operators.py +0 -384
- paddlex/ppcls/data/preprocess/ops/randaugment.py +0 -106
- paddlex/ppcls/data/preprocess/ops/random_erasing.py +0 -90
- paddlex/ppcls/data/preprocess/ops/timm_autoaugment.py +0 -877
- paddlex/ppcls/data/utils/__init__.py +0 -13
- paddlex/ppcls/data/utils/get_image_list.py +0 -49
- paddlex/ppcls/engine/__init__.py +0 -0
- paddlex/ppcls/engine/engine.py +0 -436
- paddlex/ppcls/engine/evaluation/__init__.py +0 -16
- paddlex/ppcls/engine/evaluation/classification.py +0 -143
- paddlex/ppcls/engine/evaluation/retrieval.py +0 -169
- paddlex/ppcls/engine/slim/__init__.py +0 -16
- paddlex/ppcls/engine/slim/prune.py +0 -66
- paddlex/ppcls/engine/slim/quant.py +0 -55
- paddlex/ppcls/engine/train/__init__.py +0 -14
- paddlex/ppcls/engine/train/train.py +0 -79
- paddlex/ppcls/engine/train/utils.py +0 -72
- paddlex/ppcls/loss/__init__.py +0 -65
- paddlex/ppcls/loss/celoss.py +0 -67
- paddlex/ppcls/loss/centerloss.py +0 -54
- paddlex/ppcls/loss/comfunc.py +0 -45
- paddlex/ppcls/loss/deephashloss.py +0 -96
- paddlex/ppcls/loss/distanceloss.py +0 -43
- paddlex/ppcls/loss/distillationloss.py +0 -141
- paddlex/ppcls/loss/dmlloss.py +0 -46
- paddlex/ppcls/loss/emlloss.py +0 -97
- paddlex/ppcls/loss/googlenetloss.py +0 -42
- paddlex/ppcls/loss/msmloss.py +0 -78
- paddlex/ppcls/loss/multilabelloss.py +0 -43
- paddlex/ppcls/loss/npairsloss.py +0 -38
- paddlex/ppcls/loss/pairwisecosface.py +0 -59
- paddlex/ppcls/loss/supconloss.py +0 -108
- paddlex/ppcls/loss/trihardloss.py +0 -82
- paddlex/ppcls/loss/triplet.py +0 -137
- paddlex/ppcls/metric/__init__.py +0 -51
- paddlex/ppcls/metric/metrics.py +0 -308
- paddlex/ppcls/optimizer/__init__.py +0 -72
- paddlex/ppcls/optimizer/learning_rate.py +0 -326
- paddlex/ppcls/optimizer/optimizer.py +0 -208
- paddlex/ppcls/utils/__init__.py +0 -27
- paddlex/ppcls/utils/check.py +0 -151
- paddlex/ppcls/utils/config.py +0 -210
- paddlex/ppcls/utils/download.py +0 -319
- paddlex/ppcls/utils/ema.py +0 -63
- paddlex/ppcls/utils/logger.py +0 -137
- paddlex/ppcls/utils/metrics.py +0 -112
- paddlex/ppcls/utils/misc.py +0 -63
- paddlex/ppcls/utils/model_zoo.py +0 -213
- paddlex/ppcls/utils/profiler.py +0 -111
- paddlex/ppcls/utils/save_load.py +0 -136
- paddlex/ppdet/__init__.py +0 -16
- paddlex/ppdet/core/__init__.py +0 -15
- paddlex/ppdet/core/config/__init__.py +0 -13
- paddlex/ppdet/core/config/schema.py +0 -248
- paddlex/ppdet/core/config/yaml_helpers.py +0 -118
- paddlex/ppdet/core/workspace.py +0 -278
- paddlex/ppdet/data/__init__.py +0 -21
- paddlex/ppdet/data/crop_utils/__init__.py +0 -13
- paddlex/ppdet/data/crop_utils/annotation_cropper.py +0 -585
- paddlex/ppdet/data/crop_utils/chip_box_utils.py +0 -170
- paddlex/ppdet/data/reader.py +0 -302
- paddlex/ppdet/data/shm_utils.py +0 -67
- paddlex/ppdet/data/source/__init__.py +0 -29
- paddlex/ppdet/data/source/category.py +0 -904
- paddlex/ppdet/data/source/coco.py +0 -251
- paddlex/ppdet/data/source/dataset.py +0 -197
- paddlex/ppdet/data/source/keypoint_coco.py +0 -669
- paddlex/ppdet/data/source/mot.py +0 -636
- paddlex/ppdet/data/source/sniper_coco.py +0 -191
- paddlex/ppdet/data/source/voc.py +0 -231
- paddlex/ppdet/data/source/widerface.py +0 -180
- paddlex/ppdet/data/transform/__init__.py +0 -28
- paddlex/ppdet/data/transform/atss_assigner.py +0 -270
- paddlex/ppdet/data/transform/autoaugment_utils.py +0 -1591
- paddlex/ppdet/data/transform/batch_operators.py +0 -1080
- paddlex/ppdet/data/transform/gridmask_utils.py +0 -86
- paddlex/ppdet/data/transform/keypoint_operators.py +0 -868
- paddlex/ppdet/data/transform/mot_operators.py +0 -628
- paddlex/ppdet/data/transform/op_helper.py +0 -498
- paddlex/ppdet/data/transform/operators.py +0 -3025
- paddlex/ppdet/engine/__init__.py +0 -30
- paddlex/ppdet/engine/callbacks.py +0 -340
- paddlex/ppdet/engine/env.py +0 -50
- paddlex/ppdet/engine/export_utils.py +0 -177
- paddlex/ppdet/engine/tracker.py +0 -538
- paddlex/ppdet/engine/trainer.py +0 -723
- paddlex/ppdet/metrics/__init__.py +0 -29
- paddlex/ppdet/metrics/coco_utils.py +0 -184
- paddlex/ppdet/metrics/json_results.py +0 -149
- paddlex/ppdet/metrics/keypoint_metrics.py +0 -401
- paddlex/ppdet/metrics/map_utils.py +0 -444
- paddlex/ppdet/metrics/mcmot_metrics.py +0 -470
- paddlex/ppdet/metrics/metrics.py +0 -434
- paddlex/ppdet/metrics/mot_metrics.py +0 -1236
- paddlex/ppdet/metrics/munkres.py +0 -428
- paddlex/ppdet/metrics/widerface_utils.py +0 -393
- paddlex/ppdet/model_zoo/__init__.py +0 -18
- paddlex/ppdet/model_zoo/model_zoo.py +0 -84
- paddlex/ppdet/modeling/__init__.py +0 -45
- paddlex/ppdet/modeling/architectures/__init__.py +0 -51
- paddlex/ppdet/modeling/architectures/blazeface.py +0 -91
- paddlex/ppdet/modeling/architectures/cascade_rcnn.py +0 -144
- paddlex/ppdet/modeling/architectures/centernet.py +0 -108
- paddlex/ppdet/modeling/architectures/deepsort.py +0 -69
- paddlex/ppdet/modeling/architectures/detr.py +0 -93
- paddlex/ppdet/modeling/architectures/fairmot.py +0 -100
- paddlex/ppdet/modeling/architectures/faster_rcnn.py +0 -106
- paddlex/ppdet/modeling/architectures/fcos.py +0 -105
- paddlex/ppdet/modeling/architectures/gfl.py +0 -87
- paddlex/ppdet/modeling/architectures/jde.py +0 -111
- paddlex/ppdet/modeling/architectures/keypoint_hrhrnet.py +0 -287
- paddlex/ppdet/modeling/architectures/keypoint_hrnet.py +0 -267
- paddlex/ppdet/modeling/architectures/mask_rcnn.py +0 -135
- paddlex/ppdet/modeling/architectures/meta_arch.py +0 -128
- paddlex/ppdet/modeling/architectures/picodet.py +0 -91
- paddlex/ppdet/modeling/architectures/s2anet.py +0 -102
- paddlex/ppdet/modeling/architectures/solov2.py +0 -110
- paddlex/ppdet/modeling/architectures/sparse_rcnn.py +0 -99
- paddlex/ppdet/modeling/architectures/ssd.py +0 -93
- paddlex/ppdet/modeling/architectures/tood.py +0 -78
- paddlex/ppdet/modeling/architectures/ttfnet.py +0 -98
- paddlex/ppdet/modeling/architectures/yolo.py +0 -124
- paddlex/ppdet/modeling/assigners/__init__.py +0 -23
- paddlex/ppdet/modeling/assigners/atss_assigner.py +0 -211
- paddlex/ppdet/modeling/assigners/simota_assigner.py +0 -262
- paddlex/ppdet/modeling/assigners/task_aligned_assigner.py +0 -158
- paddlex/ppdet/modeling/assigners/utils.py +0 -195
- paddlex/ppdet/modeling/backbones/__init__.py +0 -49
- paddlex/ppdet/modeling/backbones/blazenet.py +0 -323
- paddlex/ppdet/modeling/backbones/darknet.py +0 -340
- paddlex/ppdet/modeling/backbones/dla.py +0 -244
- paddlex/ppdet/modeling/backbones/esnet.py +0 -290
- paddlex/ppdet/modeling/backbones/ghostnet.py +0 -470
- paddlex/ppdet/modeling/backbones/hardnet.py +0 -224
- paddlex/ppdet/modeling/backbones/hrnet.py +0 -727
- paddlex/ppdet/modeling/backbones/lcnet.py +0 -259
- paddlex/ppdet/modeling/backbones/lite_hrnet.py +0 -886
- paddlex/ppdet/modeling/backbones/mobilenet_v1.py +0 -418
- paddlex/ppdet/modeling/backbones/mobilenet_v3.py +0 -483
- paddlex/ppdet/modeling/backbones/name_adapter.py +0 -69
- paddlex/ppdet/modeling/backbones/res2net.py +0 -358
- paddlex/ppdet/modeling/backbones/resnet.py +0 -613
- paddlex/ppdet/modeling/backbones/senet.py +0 -139
- paddlex/ppdet/modeling/backbones/shufflenet_v2.py +0 -246
- paddlex/ppdet/modeling/backbones/swin_transformer.py +0 -743
- paddlex/ppdet/modeling/backbones/vgg.py +0 -210
- paddlex/ppdet/modeling/bbox_utils.py +0 -778
- paddlex/ppdet/modeling/heads/__init__.py +0 -53
- paddlex/ppdet/modeling/heads/bbox_head.py +0 -377
- paddlex/ppdet/modeling/heads/cascade_head.py +0 -284
- paddlex/ppdet/modeling/heads/centernet_head.py +0 -292
- paddlex/ppdet/modeling/heads/detr_head.py +0 -368
- paddlex/ppdet/modeling/heads/face_head.py +0 -110
- paddlex/ppdet/modeling/heads/fcos_head.py +0 -259
- paddlex/ppdet/modeling/heads/gfl_head.py +0 -487
- paddlex/ppdet/modeling/heads/keypoint_hrhrnet_head.py +0 -108
- paddlex/ppdet/modeling/heads/mask_head.py +0 -250
- paddlex/ppdet/modeling/heads/pico_head.py +0 -278
- paddlex/ppdet/modeling/heads/roi_extractor.py +0 -111
- paddlex/ppdet/modeling/heads/s2anet_head.py +0 -1056
- paddlex/ppdet/modeling/heads/simota_head.py +0 -506
- paddlex/ppdet/modeling/heads/solov2_head.py +0 -560
- paddlex/ppdet/modeling/heads/sparsercnn_head.py +0 -375
- paddlex/ppdet/modeling/heads/ssd_head.py +0 -215
- paddlex/ppdet/modeling/heads/tood_head.py +0 -366
- paddlex/ppdet/modeling/heads/ttf_head.py +0 -316
- paddlex/ppdet/modeling/heads/yolo_head.py +0 -124
- paddlex/ppdet/modeling/initializer.py +0 -317
- paddlex/ppdet/modeling/keypoint_utils.py +0 -342
- paddlex/ppdet/modeling/layers.py +0 -1430
- paddlex/ppdet/modeling/losses/__init__.py +0 -43
- paddlex/ppdet/modeling/losses/ctfocal_loss.py +0 -68
- paddlex/ppdet/modeling/losses/detr_loss.py +0 -233
- paddlex/ppdet/modeling/losses/fairmot_loss.py +0 -41
- paddlex/ppdet/modeling/losses/fcos_loss.py +0 -225
- paddlex/ppdet/modeling/losses/gfocal_loss.py +0 -217
- paddlex/ppdet/modeling/losses/iou_aware_loss.py +0 -47
- paddlex/ppdet/modeling/losses/iou_loss.py +0 -210
- paddlex/ppdet/modeling/losses/jde_loss.py +0 -193
- paddlex/ppdet/modeling/losses/keypoint_loss.py +0 -229
- paddlex/ppdet/modeling/losses/solov2_loss.py +0 -101
- paddlex/ppdet/modeling/losses/sparsercnn_loss.py +0 -425
- paddlex/ppdet/modeling/losses/ssd_loss.py +0 -170
- paddlex/ppdet/modeling/losses/varifocal_loss.py +0 -152
- paddlex/ppdet/modeling/losses/yolo_loss.py +0 -212
- paddlex/ppdet/modeling/mot/__init__.py +0 -25
- paddlex/ppdet/modeling/mot/matching/__init__.py +0 -19
- paddlex/ppdet/modeling/mot/matching/deepsort_matching.py +0 -382
- paddlex/ppdet/modeling/mot/matching/jde_matching.py +0 -144
- paddlex/ppdet/modeling/mot/motion/__init__.py +0 -17
- paddlex/ppdet/modeling/mot/motion/kalman_filter.py +0 -270
- paddlex/ppdet/modeling/mot/tracker/__init__.py +0 -23
- paddlex/ppdet/modeling/mot/tracker/base_jde_tracker.py +0 -297
- paddlex/ppdet/modeling/mot/tracker/base_sde_tracker.py +0 -156
- paddlex/ppdet/modeling/mot/tracker/deepsort_tracker.py +0 -188
- paddlex/ppdet/modeling/mot/tracker/jde_tracker.py +0 -277
- paddlex/ppdet/modeling/mot/utils.py +0 -263
- paddlex/ppdet/modeling/mot/visualization.py +0 -150
- paddlex/ppdet/modeling/necks/__init__.py +0 -30
- paddlex/ppdet/modeling/necks/bifpn.py +0 -302
- paddlex/ppdet/modeling/necks/blazeface_fpn.py +0 -216
- paddlex/ppdet/modeling/necks/centernet_fpn.py +0 -426
- paddlex/ppdet/modeling/necks/csp_pan.py +0 -364
- paddlex/ppdet/modeling/necks/fpn.py +0 -231
- paddlex/ppdet/modeling/necks/hrfpn.py +0 -126
- paddlex/ppdet/modeling/necks/ttf_fpn.py +0 -242
- paddlex/ppdet/modeling/necks/yolo_fpn.py +0 -988
- paddlex/ppdet/modeling/ops.py +0 -1611
- paddlex/ppdet/modeling/post_process.py +0 -731
- paddlex/ppdet/modeling/proposal_generator/__init__.py +0 -2
- paddlex/ppdet/modeling/proposal_generator/anchor_generator.py +0 -135
- paddlex/ppdet/modeling/proposal_generator/proposal_generator.py +0 -77
- paddlex/ppdet/modeling/proposal_generator/rpn_head.py +0 -260
- paddlex/ppdet/modeling/proposal_generator/target.py +0 -681
- paddlex/ppdet/modeling/proposal_generator/target_layer.py +0 -491
- paddlex/ppdet/modeling/reid/__init__.py +0 -25
- paddlex/ppdet/modeling/reid/fairmot_embedding_head.py +0 -225
- paddlex/ppdet/modeling/reid/jde_embedding_head.py +0 -214
- paddlex/ppdet/modeling/reid/pplcnet_embedding.py +0 -282
- paddlex/ppdet/modeling/reid/pyramidal_embedding.py +0 -144
- paddlex/ppdet/modeling/reid/resnet.py +0 -310
- paddlex/ppdet/modeling/shape_spec.py +0 -25
- paddlex/ppdet/modeling/transformers/__init__.py +0 -25
- paddlex/ppdet/modeling/transformers/deformable_transformer.py +0 -517
- paddlex/ppdet/modeling/transformers/detr_transformer.py +0 -353
- paddlex/ppdet/modeling/transformers/matchers.py +0 -127
- paddlex/ppdet/modeling/transformers/position_encoding.py +0 -108
- paddlex/ppdet/modeling/transformers/utils.py +0 -110
- paddlex/ppdet/optimizer.py +0 -335
- paddlex/ppdet/slim/__init__.py +0 -82
- paddlex/ppdet/slim/distill.py +0 -110
- paddlex/ppdet/slim/prune.py +0 -85
- paddlex/ppdet/slim/quant.py +0 -84
- paddlex/ppdet/slim/unstructured_prune.py +0 -66
- paddlex/ppdet/utils/__init__.py +0 -13
- paddlex/ppdet/utils/check.py +0 -112
- paddlex/ppdet/utils/checkpoint.py +0 -226
- paddlex/ppdet/utils/cli.py +0 -151
- paddlex/ppdet/utils/colormap.py +0 -58
- paddlex/ppdet/utils/download.py +0 -558
- paddlex/ppdet/utils/logger.py +0 -70
- paddlex/ppdet/utils/profiler.py +0 -111
- paddlex/ppdet/utils/stats.py +0 -94
- paddlex/ppdet/utils/visualizer.py +0 -321
- paddlex/ppdet/utils/voc_utils.py +0 -86
- paddlex/seg.py +0 -41
- paddlex/tools/__init__.py +0 -17
- paddlex/tools/anchor_clustering/__init__.py +0 -15
- paddlex/tools/anchor_clustering/yolo_cluster.py +0 -178
- paddlex/tools/convert.py +0 -52
- paddlex/tools/dataset_conversion/__init__.py +0 -24
- paddlex/tools/dataset_conversion/x2coco.py +0 -379
- paddlex/tools/dataset_conversion/x2imagenet.py +0 -82
- paddlex/tools/dataset_conversion/x2seg.py +0 -343
- paddlex/tools/dataset_conversion/x2voc.py +0 -230
- paddlex/tools/dataset_split/__init__.py +0 -23
- paddlex/tools/dataset_split/coco_split.py +0 -69
- paddlex/tools/dataset_split/imagenet_split.py +0 -75
- paddlex/tools/dataset_split/seg_split.py +0 -96
- paddlex/tools/dataset_split/utils.py +0 -75
- paddlex/tools/dataset_split/voc_split.py +0 -91
- paddlex/tools/split.py +0 -41
- paddlex/utils/checkpoint.py +0 -492
- paddlex/utils/env.py +0 -67
- paddlex/utils/shm.py +0 -67
- paddlex/utils/stats.py +0 -68
- paddlex/utils/utils.py +0 -229
- paddlex-2.1.0.data/data/paddlex_restful/restful/templates/paddlex_restful_demo.html +0 -5205
- paddlex-2.1.0.dist-info/LICENSE +0 -201
- paddlex-2.1.0.dist-info/METADATA +0 -32
- paddlex-2.1.0.dist-info/RECORD +0 -698
- paddlex-2.1.0.dist-info/WHEEL +0 -5
- paddlex-2.1.0.dist-info/entry_points.txt +0 -4
- paddlex-2.1.0.dist-info/top_level.txt +0 -3
- paddlex_restful/__init__.py +0 -15
- paddlex_restful/command.py +0 -63
- paddlex_restful/restful/__init__.py +0 -15
- paddlex_restful/restful/app.py +0 -969
- paddlex_restful/restful/dataset/__init__.py +0 -13
- paddlex_restful/restful/dataset/cls_dataset.py +0 -159
- paddlex_restful/restful/dataset/dataset.py +0 -266
- paddlex_restful/restful/dataset/datasetbase.py +0 -86
- paddlex_restful/restful/dataset/det_dataset.py +0 -190
- paddlex_restful/restful/dataset/ins_seg_dataset.py +0 -312
- paddlex_restful/restful/dataset/operate.py +0 -155
- paddlex_restful/restful/dataset/seg_dataset.py +0 -222
- paddlex_restful/restful/dataset/utils.py +0 -267
- paddlex_restful/restful/demo.py +0 -202
- paddlex_restful/restful/dir.py +0 -45
- paddlex_restful/restful/model.py +0 -312
- paddlex_restful/restful/project/__init__.py +0 -13
- paddlex_restful/restful/project/evaluate/__init__.py +0 -13
- paddlex_restful/restful/project/evaluate/classification.py +0 -126
- paddlex_restful/restful/project/evaluate/detection.py +0 -789
- paddlex_restful/restful/project/evaluate/draw_pred_result.py +0 -181
- paddlex_restful/restful/project/evaluate/segmentation.py +0 -122
- paddlex_restful/restful/project/operate.py +0 -931
- paddlex_restful/restful/project/project.py +0 -143
- paddlex_restful/restful/project/prune/__init__.py +0 -13
- paddlex_restful/restful/project/prune/classification.py +0 -32
- paddlex_restful/restful/project/prune/detection.py +0 -48
- paddlex_restful/restful/project/prune/segmentation.py +0 -34
- paddlex_restful/restful/project/task.py +0 -884
- paddlex_restful/restful/project/train/__init__.py +0 -13
- paddlex_restful/restful/project/train/classification.py +0 -141
- paddlex_restful/restful/project/train/detection.py +0 -263
- paddlex_restful/restful/project/train/params.py +0 -432
- paddlex_restful/restful/project/train/params_v2.py +0 -326
- paddlex_restful/restful/project/train/segmentation.py +0 -191
- paddlex_restful/restful/project/visualize.py +0 -244
- paddlex_restful/restful/system.py +0 -102
- paddlex_restful/restful/templates/paddlex_restful_demo.html +0 -5205
- paddlex_restful/restful/utils.py +0 -841
- paddlex_restful/restful/workspace.py +0 -343
- paddlex_restful/restful/workspace_pb2.py +0 -1411
@@ -1,1236 +0,0 @@
|
|
1
|
-
# Copyright (c) 2021 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 __future__ import absolute_import
|
16
|
-
from __future__ import division
|
17
|
-
from __future__ import print_function
|
18
|
-
|
19
|
-
import os
|
20
|
-
import copy
|
21
|
-
import sys
|
22
|
-
import math
|
23
|
-
from collections import defaultdict
|
24
|
-
import numpy as np
|
25
|
-
import paddle
|
26
|
-
import paddle.nn.functional as F
|
27
|
-
from paddlex.ppdet.modeling.bbox_utils import bbox_iou_np_expand
|
28
|
-
from .map_utils import ap_per_class
|
29
|
-
from .metrics import Metric
|
30
|
-
from .munkres import Munkres
|
31
|
-
|
32
|
-
from paddlex.ppdet.utils.logger import setup_logger
|
33
|
-
logger = setup_logger(__name__)
|
34
|
-
|
35
|
-
__all__ = ['MOTEvaluator', 'MOTMetric', 'JDEDetMetric', 'KITTIMOTMetric']
|
36
|
-
|
37
|
-
|
38
|
-
def read_mot_results(filename, is_gt=False, is_ignore=False):
|
39
|
-
valid_labels = {1}
|
40
|
-
ignore_labels = {2, 7, 8, 12} # only in motchallenge datasets like 'MOT16'
|
41
|
-
results_dict = dict()
|
42
|
-
if os.path.isfile(filename):
|
43
|
-
with open(filename, 'r') as f:
|
44
|
-
for line in f.readlines():
|
45
|
-
linelist = line.split(',')
|
46
|
-
if len(linelist) < 7:
|
47
|
-
continue
|
48
|
-
fid = int(linelist[0])
|
49
|
-
if fid < 1:
|
50
|
-
continue
|
51
|
-
results_dict.setdefault(fid, list())
|
52
|
-
|
53
|
-
box_size = float(linelist[4]) * float(linelist[5])
|
54
|
-
|
55
|
-
if is_gt:
|
56
|
-
label = int(float(linelist[7]))
|
57
|
-
mark = int(float(linelist[6]))
|
58
|
-
if mark == 0 or label not in valid_labels:
|
59
|
-
continue
|
60
|
-
score = 1
|
61
|
-
elif is_ignore:
|
62
|
-
if 'MOT16-' in filename or 'MOT17-' in filename or 'MOT15-' in filename or 'MOT20-' in filename:
|
63
|
-
label = int(float(linelist[7]))
|
64
|
-
vis_ratio = float(linelist[8])
|
65
|
-
if label not in ignore_labels and vis_ratio >= 0:
|
66
|
-
continue
|
67
|
-
else:
|
68
|
-
continue
|
69
|
-
score = 1
|
70
|
-
else:
|
71
|
-
score = float(linelist[6])
|
72
|
-
|
73
|
-
tlwh = tuple(map(float, linelist[2:6]))
|
74
|
-
target_id = int(linelist[1])
|
75
|
-
|
76
|
-
results_dict[fid].append((tlwh, target_id, score))
|
77
|
-
return results_dict
|
78
|
-
|
79
|
-
|
80
|
-
"""
|
81
|
-
MOT dataset label list, see in https://motchallenge.net
|
82
|
-
labels={'ped', ... % 1
|
83
|
-
'person_on_vhcl', ... % 2
|
84
|
-
'car', ... % 3
|
85
|
-
'bicycle', ... % 4
|
86
|
-
'mbike', ... % 5
|
87
|
-
'non_mot_vhcl', ... % 6
|
88
|
-
'static_person', ... % 7
|
89
|
-
'distractor', ... % 8
|
90
|
-
'occluder', ... % 9
|
91
|
-
'occluder_on_grnd', ... % 10
|
92
|
-
'occluder_full', ... % 11
|
93
|
-
'reflection', ... % 12
|
94
|
-
'crowd' ... % 13
|
95
|
-
};
|
96
|
-
"""
|
97
|
-
|
98
|
-
|
99
|
-
def unzip_objs(objs):
|
100
|
-
if len(objs) > 0:
|
101
|
-
tlwhs, ids, scores = zip(*objs)
|
102
|
-
else:
|
103
|
-
tlwhs, ids, scores = [], [], []
|
104
|
-
tlwhs = np.asarray(tlwhs, dtype=float).reshape(-1, 4)
|
105
|
-
return tlwhs, ids, scores
|
106
|
-
|
107
|
-
|
108
|
-
class MOTEvaluator(object):
|
109
|
-
def __init__(self, data_root, seq_name, data_type):
|
110
|
-
self.data_root = data_root
|
111
|
-
self.seq_name = seq_name
|
112
|
-
self.data_type = data_type
|
113
|
-
|
114
|
-
self.load_annotations()
|
115
|
-
self.reset_accumulator()
|
116
|
-
|
117
|
-
def load_annotations(self):
|
118
|
-
assert self.data_type == 'mot'
|
119
|
-
gt_filename = os.path.join(self.data_root, self.seq_name, 'gt',
|
120
|
-
'gt.txt')
|
121
|
-
self.gt_frame_dict = read_mot_results(gt_filename, is_gt=True)
|
122
|
-
self.gt_ignore_frame_dict = read_mot_results(
|
123
|
-
gt_filename, is_ignore=True)
|
124
|
-
|
125
|
-
def reset_accumulator(self):
|
126
|
-
import motmetrics as mm
|
127
|
-
mm.lap.default_solver = 'lap'
|
128
|
-
self.acc = mm.MOTAccumulator(auto_id=True)
|
129
|
-
|
130
|
-
def eval_frame(self, frame_id, trk_tlwhs, trk_ids, rtn_events=False):
|
131
|
-
import motmetrics as mm
|
132
|
-
mm.lap.default_solver = 'lap'
|
133
|
-
# results
|
134
|
-
trk_tlwhs = np.copy(trk_tlwhs)
|
135
|
-
trk_ids = np.copy(trk_ids)
|
136
|
-
|
137
|
-
# gts
|
138
|
-
gt_objs = self.gt_frame_dict.get(frame_id, [])
|
139
|
-
gt_tlwhs, gt_ids = unzip_objs(gt_objs)[:2]
|
140
|
-
|
141
|
-
# ignore boxes
|
142
|
-
ignore_objs = self.gt_ignore_frame_dict.get(frame_id, [])
|
143
|
-
ignore_tlwhs = unzip_objs(ignore_objs)[0]
|
144
|
-
|
145
|
-
# remove ignored results
|
146
|
-
keep = np.ones(len(trk_tlwhs), dtype=bool)
|
147
|
-
iou_distance = mm.distances.iou_matrix(
|
148
|
-
ignore_tlwhs, trk_tlwhs, max_iou=0.5)
|
149
|
-
if len(iou_distance) > 0:
|
150
|
-
match_is, match_js = mm.lap.linear_sum_assignment(iou_distance)
|
151
|
-
match_is, match_js = map(lambda a: np.asarray(a, dtype=int), [match_is, match_js])
|
152
|
-
match_ious = iou_distance[match_is, match_js]
|
153
|
-
|
154
|
-
match_js = np.asarray(match_js, dtype=int)
|
155
|
-
match_js = match_js[np.logical_not(np.isnan(match_ious))]
|
156
|
-
keep[match_js] = False
|
157
|
-
trk_tlwhs = trk_tlwhs[keep]
|
158
|
-
trk_ids = trk_ids[keep]
|
159
|
-
|
160
|
-
# get distance matrix
|
161
|
-
iou_distance = mm.distances.iou_matrix(
|
162
|
-
gt_tlwhs, trk_tlwhs, max_iou=0.5)
|
163
|
-
|
164
|
-
# acc
|
165
|
-
self.acc.update(gt_ids, trk_ids, iou_distance)
|
166
|
-
|
167
|
-
if rtn_events and iou_distance.size > 0 and hasattr(self.acc,
|
168
|
-
'last_mot_events'):
|
169
|
-
events = self.acc.last_mot_events # only supported by https://github.com/longcw/py-motmetrics
|
170
|
-
else:
|
171
|
-
events = None
|
172
|
-
return events
|
173
|
-
|
174
|
-
def eval_file(self, filename):
|
175
|
-
self.reset_accumulator()
|
176
|
-
|
177
|
-
result_frame_dict = read_mot_results(filename, is_gt=False)
|
178
|
-
frames = sorted(list(set(result_frame_dict.keys())))
|
179
|
-
for frame_id in frames:
|
180
|
-
trk_objs = result_frame_dict.get(frame_id, [])
|
181
|
-
trk_tlwhs, trk_ids = unzip_objs(trk_objs)[:2]
|
182
|
-
self.eval_frame(frame_id, trk_tlwhs, trk_ids, rtn_events=False)
|
183
|
-
|
184
|
-
return self.acc
|
185
|
-
|
186
|
-
@staticmethod
|
187
|
-
def get_summary(accs,
|
188
|
-
names,
|
189
|
-
metrics=('mota', 'num_switches', 'idp', 'idr', 'idf1',
|
190
|
-
'precision', 'recall')):
|
191
|
-
import motmetrics as mm
|
192
|
-
mm.lap.default_solver = 'lap'
|
193
|
-
names = copy.deepcopy(names)
|
194
|
-
if metrics is None:
|
195
|
-
metrics = mm.metrics.motchallenge_metrics
|
196
|
-
metrics = copy.deepcopy(metrics)
|
197
|
-
|
198
|
-
mh = mm.metrics.create()
|
199
|
-
summary = mh.compute_many(
|
200
|
-
accs, metrics=metrics, names=names, generate_overall=True)
|
201
|
-
return summary
|
202
|
-
|
203
|
-
@staticmethod
|
204
|
-
def save_summary(summary, filename):
|
205
|
-
import pandas as pd
|
206
|
-
writer = pd.ExcelWriter(filename)
|
207
|
-
summary.to_excel(writer)
|
208
|
-
writer.save()
|
209
|
-
|
210
|
-
|
211
|
-
class MOTMetric(Metric):
|
212
|
-
def __init__(self, save_summary=False):
|
213
|
-
self.save_summary = save_summary
|
214
|
-
self.MOTEvaluator = MOTEvaluator
|
215
|
-
self.result_root = None
|
216
|
-
self.reset()
|
217
|
-
|
218
|
-
def reset(self):
|
219
|
-
self.accs = []
|
220
|
-
self.seqs = []
|
221
|
-
|
222
|
-
def update(self, data_root, seq, data_type, result_root, result_filename):
|
223
|
-
evaluator = self.MOTEvaluator(data_root, seq, data_type)
|
224
|
-
self.accs.append(evaluator.eval_file(result_filename))
|
225
|
-
self.seqs.append(seq)
|
226
|
-
self.result_root = result_root
|
227
|
-
|
228
|
-
def accumulate(self):
|
229
|
-
import motmetrics as mm
|
230
|
-
import openpyxl
|
231
|
-
metrics = mm.metrics.motchallenge_metrics
|
232
|
-
mh = mm.metrics.create()
|
233
|
-
summary = self.MOTEvaluator.get_summary(self.accs, self.seqs, metrics)
|
234
|
-
self.strsummary = mm.io.render_summary(
|
235
|
-
summary,
|
236
|
-
formatters=mh.formatters,
|
237
|
-
namemap=mm.io.motchallenge_metric_names)
|
238
|
-
if self.save_summary:
|
239
|
-
self.MOTEvaluator.save_summary(
|
240
|
-
summary, os.path.join(self.result_root, 'summary.xlsx'))
|
241
|
-
|
242
|
-
def log(self):
|
243
|
-
print(self.strsummary)
|
244
|
-
|
245
|
-
def get_results(self):
|
246
|
-
return self.strsummary
|
247
|
-
|
248
|
-
|
249
|
-
class JDEDetMetric(Metric):
|
250
|
-
# Note this detection AP metric is different from COCOMetric or VOCMetric,
|
251
|
-
# and the bboxes coordinates are not scaled to the original image
|
252
|
-
def __init__(self, overlap_thresh=0.5):
|
253
|
-
self.overlap_thresh = overlap_thresh
|
254
|
-
self.reset()
|
255
|
-
|
256
|
-
def reset(self):
|
257
|
-
self.AP_accum = np.zeros(1)
|
258
|
-
self.AP_accum_count = np.zeros(1)
|
259
|
-
|
260
|
-
def update(self, inputs, outputs):
|
261
|
-
bboxes = outputs['bbox'][:, 2:].numpy()
|
262
|
-
scores = outputs['bbox'][:, 1].numpy()
|
263
|
-
labels = outputs['bbox'][:, 0].numpy()
|
264
|
-
bbox_lengths = outputs['bbox_num'].numpy()
|
265
|
-
if bboxes.shape[0] == 1 and bboxes.sum() == 0.0:
|
266
|
-
return
|
267
|
-
|
268
|
-
gt_boxes = inputs['gt_bbox'].numpy()[0]
|
269
|
-
gt_labels = inputs['gt_class'].numpy()[0]
|
270
|
-
if gt_labels.shape[0] == 0:
|
271
|
-
return
|
272
|
-
|
273
|
-
correct = []
|
274
|
-
detected = []
|
275
|
-
for i in range(bboxes.shape[0]):
|
276
|
-
obj_pred = 0
|
277
|
-
pred_bbox = bboxes[i].reshape(1, 4)
|
278
|
-
# Compute iou with target boxes
|
279
|
-
iou = bbox_iou_np_expand(pred_bbox, gt_boxes, x1y1x2y2=True)[0]
|
280
|
-
# Extract index of largest overlap
|
281
|
-
best_i = np.argmax(iou)
|
282
|
-
# If overlap exceeds threshold and classification is correct mark as correct
|
283
|
-
if iou[best_i] > self.overlap_thresh and obj_pred == gt_labels[
|
284
|
-
best_i] and best_i not in detected:
|
285
|
-
correct.append(1)
|
286
|
-
detected.append(best_i)
|
287
|
-
else:
|
288
|
-
correct.append(0)
|
289
|
-
|
290
|
-
# Compute Average Precision (AP) per class
|
291
|
-
target_cls = list(gt_labels.T[0])
|
292
|
-
AP, AP_class, R, P = ap_per_class(
|
293
|
-
tp=correct,
|
294
|
-
conf=scores,
|
295
|
-
pred_cls=np.zeros_like(scores),
|
296
|
-
target_cls=target_cls)
|
297
|
-
self.AP_accum_count += np.bincount(AP_class, minlength=1)
|
298
|
-
self.AP_accum += np.bincount(AP_class, minlength=1, weights=AP)
|
299
|
-
|
300
|
-
def accumulate(self):
|
301
|
-
logger.info("Accumulating evaluatation results...")
|
302
|
-
self.map_stat = self.AP_accum[0] / (self.AP_accum_count[0] + 1E-16)
|
303
|
-
|
304
|
-
def log(self):
|
305
|
-
map_stat = 100. * self.map_stat
|
306
|
-
logger.info("mAP({:.2f}) = {:.2f}%".format(self.overlap_thresh,
|
307
|
-
map_stat))
|
308
|
-
|
309
|
-
def get_results(self):
|
310
|
-
return self.map_stat
|
311
|
-
|
312
|
-
|
313
|
-
"""
|
314
|
-
Following code is borrow from https://github.com/xingyizhou/CenterTrack/blob/master/src/tools/eval_kitti_track/evaluate_tracking.py
|
315
|
-
"""
|
316
|
-
|
317
|
-
|
318
|
-
class tData:
|
319
|
-
"""
|
320
|
-
Utility class to load data.
|
321
|
-
"""
|
322
|
-
def __init__(self,frame=-1,obj_type="unset",truncation=-1,occlusion=-1,\
|
323
|
-
obs_angle=-10,x1=-1,y1=-1,x2=-1,y2=-1,w=-1,h=-1,l=-1,\
|
324
|
-
X=-1000,Y=-1000,Z=-1000,yaw=-10,score=-1000,track_id=-1):
|
325
|
-
"""
|
326
|
-
Constructor, initializes the object given the parameters.
|
327
|
-
"""
|
328
|
-
self.frame = frame
|
329
|
-
self.track_id = track_id
|
330
|
-
self.obj_type = obj_type
|
331
|
-
self.truncation = truncation
|
332
|
-
self.occlusion = occlusion
|
333
|
-
self.obs_angle = obs_angle
|
334
|
-
self.x1 = x1
|
335
|
-
self.y1 = y1
|
336
|
-
self.x2 = x2
|
337
|
-
self.y2 = y2
|
338
|
-
self.w = w
|
339
|
-
self.h = h
|
340
|
-
self.l = l
|
341
|
-
self.X = X
|
342
|
-
self.Y = Y
|
343
|
-
self.Z = Z
|
344
|
-
self.yaw = yaw
|
345
|
-
self.score = score
|
346
|
-
self.ignored = False
|
347
|
-
self.valid = False
|
348
|
-
self.tracker = -1
|
349
|
-
|
350
|
-
def __str__(self):
|
351
|
-
attrs = vars(self)
|
352
|
-
return '\n'.join("%s: %s" % item for item in attrs.items())
|
353
|
-
|
354
|
-
|
355
|
-
class KITTIEvaluation(object):
|
356
|
-
""" KITTI tracking statistics (CLEAR MOT, id-switches, fragments, ML/PT/MT, precision/recall)
|
357
|
-
MOTA - Multi-object tracking accuracy in [0,100]
|
358
|
-
MOTP - Multi-object tracking precision in [0,100] (3D) / [td,100] (2D)
|
359
|
-
MOTAL - Multi-object tracking accuracy in [0,100] with log10(id-switches)
|
360
|
-
|
361
|
-
id-switches - number of id switches
|
362
|
-
fragments - number of fragmentations
|
363
|
-
|
364
|
-
MT, PT, ML - number of mostly tracked, partially tracked and mostly lost trajectories
|
365
|
-
|
366
|
-
recall - recall = percentage of detected targets
|
367
|
-
precision - precision = percentage of correctly detected targets
|
368
|
-
FAR - number of false alarms per frame
|
369
|
-
falsepositives - number of false positives (FP)
|
370
|
-
missed - number of missed targets (FN)
|
371
|
-
"""
|
372
|
-
def __init__(self, result_path, gt_path, min_overlap=0.5, max_truncation = 0,\
|
373
|
-
min_height = 25, max_occlusion = 2, cls="car",\
|
374
|
-
n_frames=[], seqs=[], n_sequences=0):
|
375
|
-
# get number of sequences and
|
376
|
-
# get number of frames per sequence from test mapping
|
377
|
-
# (created while extracting the benchmark)
|
378
|
-
self.gt_path = os.path.join(gt_path, "../labels")
|
379
|
-
self.n_frames = n_frames
|
380
|
-
self.sequence_name = seqs
|
381
|
-
self.n_sequences = n_sequences
|
382
|
-
|
383
|
-
self.cls = cls # class to evaluate, i.e. pedestrian or car
|
384
|
-
|
385
|
-
self.result_path = result_path
|
386
|
-
|
387
|
-
# statistics and numbers for evaluation
|
388
|
-
self.n_gt = 0 # number of ground truth detections minus ignored false negatives and true positives
|
389
|
-
self.n_igt = 0 # number of ignored ground truth detections
|
390
|
-
self.n_gts = [
|
391
|
-
] # number of ground truth detections minus ignored false negatives and true positives PER SEQUENCE
|
392
|
-
self.n_igts = [
|
393
|
-
] # number of ground ignored truth detections PER SEQUENCE
|
394
|
-
self.n_gt_trajectories = 0
|
395
|
-
self.n_gt_seq = []
|
396
|
-
self.n_tr = 0 # number of tracker detections minus ignored tracker detections
|
397
|
-
self.n_trs = [
|
398
|
-
] # number of tracker detections minus ignored tracker detections PER SEQUENCE
|
399
|
-
self.n_itr = 0 # number of ignored tracker detections
|
400
|
-
self.n_itrs = [] # number of ignored tracker detections PER SEQUENCE
|
401
|
-
self.n_igttr = 0 # number of ignored ground truth detections where the corresponding associated tracker detection is also ignored
|
402
|
-
self.n_tr_trajectories = 0
|
403
|
-
self.n_tr_seq = []
|
404
|
-
self.MOTA = 0
|
405
|
-
self.MOTP = 0
|
406
|
-
self.MOTAL = 0
|
407
|
-
self.MODA = 0
|
408
|
-
self.MODP = 0
|
409
|
-
self.MODP_t = []
|
410
|
-
self.recall = 0
|
411
|
-
self.precision = 0
|
412
|
-
self.F1 = 0
|
413
|
-
self.FAR = 0
|
414
|
-
self.total_cost = 0
|
415
|
-
self.itp = 0 # number of ignored true positives
|
416
|
-
self.itps = [] # number of ignored true positives PER SEQUENCE
|
417
|
-
self.tp = 0 # number of true positives including ignored true positives!
|
418
|
-
self.tps = [
|
419
|
-
] # number of true positives including ignored true positives PER SEQUENCE
|
420
|
-
self.fn = 0 # number of false negatives WITHOUT ignored false negatives
|
421
|
-
self.fns = [
|
422
|
-
] # number of false negatives WITHOUT ignored false negatives PER SEQUENCE
|
423
|
-
self.ifn = 0 # number of ignored false negatives
|
424
|
-
self.ifns = [] # number of ignored false negatives PER SEQUENCE
|
425
|
-
self.fp = 0 # number of false positives
|
426
|
-
# a bit tricky, the number of ignored false negatives and ignored true positives
|
427
|
-
# is subtracted, but if both tracker detection and ground truth detection
|
428
|
-
# are ignored this number is added again to avoid double counting
|
429
|
-
self.fps = [] # above PER SEQUENCE
|
430
|
-
self.mme = 0
|
431
|
-
self.fragments = 0
|
432
|
-
self.id_switches = 0
|
433
|
-
self.MT = 0
|
434
|
-
self.PT = 0
|
435
|
-
self.ML = 0
|
436
|
-
|
437
|
-
self.min_overlap = min_overlap # minimum bounding box overlap for 3rd party metrics
|
438
|
-
self.max_truncation = max_truncation # maximum truncation of an object for evaluation
|
439
|
-
self.max_occlusion = max_occlusion # maximum occlusion of an object for evaluation
|
440
|
-
self.min_height = min_height # minimum height of an object for evaluation
|
441
|
-
self.n_sample_points = 500
|
442
|
-
|
443
|
-
# this should be enough to hold all groundtruth trajectories
|
444
|
-
# is expanded if necessary and reduced in any case
|
445
|
-
self.gt_trajectories = [[] for x in range(self.n_sequences)]
|
446
|
-
self.ign_trajectories = [[] for x in range(self.n_sequences)]
|
447
|
-
|
448
|
-
def loadGroundtruth(self):
|
449
|
-
try:
|
450
|
-
self._loadData(
|
451
|
-
self.gt_path, cls=self.cls, loading_groundtruth=True)
|
452
|
-
except IOError:
|
453
|
-
return False
|
454
|
-
return True
|
455
|
-
|
456
|
-
def loadTracker(self):
|
457
|
-
try:
|
458
|
-
if not self._loadData(
|
459
|
-
self.result_path, cls=self.cls, loading_groundtruth=False):
|
460
|
-
return False
|
461
|
-
except IOError:
|
462
|
-
return False
|
463
|
-
return True
|
464
|
-
|
465
|
-
def _loadData(self,
|
466
|
-
root_dir,
|
467
|
-
cls,
|
468
|
-
min_score=-1000,
|
469
|
-
loading_groundtruth=False):
|
470
|
-
"""
|
471
|
-
Generic loader for ground truth and tracking data.
|
472
|
-
Use loadGroundtruth() or loadTracker() to load this data.
|
473
|
-
Loads detections in KITTI format from textfiles.
|
474
|
-
"""
|
475
|
-
# construct objectDetections object to hold detection data
|
476
|
-
t_data = tData()
|
477
|
-
data = []
|
478
|
-
eval_2d = True
|
479
|
-
eval_3d = True
|
480
|
-
|
481
|
-
seq_data = []
|
482
|
-
n_trajectories = 0
|
483
|
-
n_trajectories_seq = []
|
484
|
-
for seq, s_name in enumerate(self.sequence_name):
|
485
|
-
i = 0
|
486
|
-
filename = os.path.join(root_dir, "%s.txt" % s_name)
|
487
|
-
f = open(filename, "r")
|
488
|
-
|
489
|
-
f_data = [
|
490
|
-
[] for x in range(self.n_frames[seq])
|
491
|
-
] # current set has only 1059 entries, sufficient length is checked anyway
|
492
|
-
ids = []
|
493
|
-
n_in_seq = 0
|
494
|
-
id_frame_cache = []
|
495
|
-
for line in f:
|
496
|
-
# KITTI tracking benchmark data format:
|
497
|
-
# (frame,tracklet_id,objectType,truncation,occlusion,alpha,x1,y1,x2,y2,h,w,l,X,Y,Z,ry)
|
498
|
-
line = line.strip()
|
499
|
-
fields = line.split(" ")
|
500
|
-
# classes that should be loaded (ignored neighboring classes)
|
501
|
-
if "car" in cls.lower():
|
502
|
-
classes = ["car", "van"]
|
503
|
-
elif "pedestrian" in cls.lower():
|
504
|
-
classes = ["pedestrian", "person_sitting"]
|
505
|
-
else:
|
506
|
-
classes = [cls.lower()]
|
507
|
-
classes += ["dontcare"]
|
508
|
-
if not any([s for s in classes if s in fields[2].lower()]):
|
509
|
-
continue
|
510
|
-
# get fields from table
|
511
|
-
t_data.frame = int(float(fields[0])) # frame
|
512
|
-
t_data.track_id = int(float(fields[1])) # id
|
513
|
-
t_data.obj_type = fields[
|
514
|
-
2].lower() # object type [car, pedestrian, cyclist, ...]
|
515
|
-
t_data.truncation = int(
|
516
|
-
float(fields[3])) # truncation [-1,0,1,2]
|
517
|
-
t_data.occlusion = int(
|
518
|
-
float(fields[4])) # occlusion [-1,0,1,2]
|
519
|
-
t_data.obs_angle = float(fields[5]) # observation angle [rad]
|
520
|
-
t_data.x1 = float(fields[6]) # left [px]
|
521
|
-
t_data.y1 = float(fields[7]) # top [px]
|
522
|
-
t_data.x2 = float(fields[8]) # right [px]
|
523
|
-
t_data.y2 = float(fields[9]) # bottom [px]
|
524
|
-
t_data.h = float(fields[10]) # height [m]
|
525
|
-
t_data.w = float(fields[11]) # width [m]
|
526
|
-
t_data.l = float(fields[12]) # length [m]
|
527
|
-
t_data.X = float(fields[13]) # X [m]
|
528
|
-
t_data.Y = float(fields[14]) # Y [m]
|
529
|
-
t_data.Z = float(fields[15]) # Z [m]
|
530
|
-
t_data.yaw = float(fields[16]) # yaw angle [rad]
|
531
|
-
if not loading_groundtruth:
|
532
|
-
if len(fields) == 17:
|
533
|
-
t_data.score = -1
|
534
|
-
elif len(fields) == 18:
|
535
|
-
t_data.score = float(fields[17]) # detection score
|
536
|
-
else:
|
537
|
-
logger.info("file is not in KITTI format")
|
538
|
-
return
|
539
|
-
|
540
|
-
# do not consider objects marked as invalid
|
541
|
-
if t_data.track_id is -1 and t_data.obj_type != "dontcare":
|
542
|
-
continue
|
543
|
-
|
544
|
-
idx = t_data.frame
|
545
|
-
# check if length for frame data is sufficient
|
546
|
-
if idx >= len(f_data):
|
547
|
-
print("extend f_data", idx, len(f_data))
|
548
|
-
f_data += [[] for x in range(max(500, idx - len(f_data)))]
|
549
|
-
try:
|
550
|
-
id_frame = (t_data.frame, t_data.track_id)
|
551
|
-
if id_frame in id_frame_cache and not loading_groundtruth:
|
552
|
-
logger.info(
|
553
|
-
"track ids are not unique for sequence %d: frame %d"
|
554
|
-
% (seq, t_data.frame))
|
555
|
-
logger.info(
|
556
|
-
"track id %d occured at least twice for this frame"
|
557
|
-
% t_data.track_id)
|
558
|
-
logger.info("Exiting...")
|
559
|
-
#continue # this allows to evaluate non-unique result files
|
560
|
-
return False
|
561
|
-
id_frame_cache.append(id_frame)
|
562
|
-
f_data[t_data.frame].append(copy.copy(t_data))
|
563
|
-
except:
|
564
|
-
print(len(f_data), idx)
|
565
|
-
raise
|
566
|
-
|
567
|
-
if t_data.track_id not in ids and t_data.obj_type != "dontcare":
|
568
|
-
ids.append(t_data.track_id)
|
569
|
-
n_trajectories += 1
|
570
|
-
n_in_seq += 1
|
571
|
-
|
572
|
-
# check if uploaded data provides information for 2D and 3D evaluation
|
573
|
-
if not loading_groundtruth and eval_2d is True and (
|
574
|
-
t_data.x1 == -1 or t_data.x2 == -1 or
|
575
|
-
t_data.y1 == -1 or t_data.y2 == -1):
|
576
|
-
eval_2d = False
|
577
|
-
if not loading_groundtruth and eval_3d is True and (
|
578
|
-
t_data.X == -1000 or t_data.Y == -1000 or
|
579
|
-
t_data.Z == -1000):
|
580
|
-
eval_3d = False
|
581
|
-
|
582
|
-
# only add existing frames
|
583
|
-
n_trajectories_seq.append(n_in_seq)
|
584
|
-
seq_data.append(f_data)
|
585
|
-
f.close()
|
586
|
-
|
587
|
-
if not loading_groundtruth:
|
588
|
-
self.tracker = seq_data
|
589
|
-
self.n_tr_trajectories = n_trajectories
|
590
|
-
self.eval_2d = eval_2d
|
591
|
-
self.eval_3d = eval_3d
|
592
|
-
self.n_tr_seq = n_trajectories_seq
|
593
|
-
if self.n_tr_trajectories == 0:
|
594
|
-
return False
|
595
|
-
else:
|
596
|
-
# split ground truth and DontCare areas
|
597
|
-
self.dcareas = []
|
598
|
-
self.groundtruth = []
|
599
|
-
for seq_idx in range(len(seq_data)):
|
600
|
-
seq_gt = seq_data[seq_idx]
|
601
|
-
s_g, s_dc = [], []
|
602
|
-
for f in range(len(seq_gt)):
|
603
|
-
all_gt = seq_gt[f]
|
604
|
-
g, dc = [], []
|
605
|
-
for gg in all_gt:
|
606
|
-
if gg.obj_type == "dontcare":
|
607
|
-
dc.append(gg)
|
608
|
-
else:
|
609
|
-
g.append(gg)
|
610
|
-
s_g.append(g)
|
611
|
-
s_dc.append(dc)
|
612
|
-
self.dcareas.append(s_dc)
|
613
|
-
self.groundtruth.append(s_g)
|
614
|
-
self.n_gt_seq = n_trajectories_seq
|
615
|
-
self.n_gt_trajectories = n_trajectories
|
616
|
-
return True
|
617
|
-
|
618
|
-
def boxoverlap(self, a, b, criterion="union"):
|
619
|
-
"""
|
620
|
-
boxoverlap computes intersection over union for bbox a and b in KITTI format.
|
621
|
-
If the criterion is 'union', overlap = (a inter b) / a union b).
|
622
|
-
If the criterion is 'a', overlap = (a inter b) / a, where b should be a dontcare area.
|
623
|
-
"""
|
624
|
-
x1 = max(a.x1, b.x1)
|
625
|
-
y1 = max(a.y1, b.y1)
|
626
|
-
x2 = min(a.x2, b.x2)
|
627
|
-
y2 = min(a.y2, b.y2)
|
628
|
-
|
629
|
-
w = x2 - x1
|
630
|
-
h = y2 - y1
|
631
|
-
|
632
|
-
if w <= 0. or h <= 0.:
|
633
|
-
return 0.
|
634
|
-
inter = w * h
|
635
|
-
aarea = (a.x2 - a.x1) * (a.y2 - a.y1)
|
636
|
-
barea = (b.x2 - b.x1) * (b.y2 - b.y1)
|
637
|
-
# intersection over union overlap
|
638
|
-
if criterion.lower() == "union":
|
639
|
-
o = inter / float(aarea + barea - inter)
|
640
|
-
elif criterion.lower() == "a":
|
641
|
-
o = float(inter) / float(aarea)
|
642
|
-
else:
|
643
|
-
raise TypeError("Unkown type for criterion")
|
644
|
-
return o
|
645
|
-
|
646
|
-
def compute3rdPartyMetrics(self):
|
647
|
-
"""
|
648
|
-
Computes the metrics defined in
|
649
|
-
- Stiefelhagen 2008: Evaluating Multiple Object Tracking Performance: The CLEAR MOT Metrics
|
650
|
-
MOTA, MOTAL, MOTP
|
651
|
-
- Nevatia 2008: Global Data Association for Multi-Object Tracking Using Network Flows
|
652
|
-
MT/PT/ML
|
653
|
-
"""
|
654
|
-
# construct Munkres object for Hungarian Method association
|
655
|
-
hm = Munkres()
|
656
|
-
max_cost = 1e9
|
657
|
-
|
658
|
-
# go through all frames and associate ground truth and tracker results
|
659
|
-
# groundtruth and tracker contain lists for every single frame containing lists of KITTI format detections
|
660
|
-
fr, ids = 0, 0
|
661
|
-
for seq_idx in range(len(self.groundtruth)):
|
662
|
-
seq_gt = self.groundtruth[seq_idx]
|
663
|
-
seq_dc = self.dcareas[seq_idx] # don't care areas
|
664
|
-
seq_tracker = self.tracker[seq_idx]
|
665
|
-
seq_trajectories = defaultdict(list)
|
666
|
-
seq_ignored = defaultdict(list)
|
667
|
-
|
668
|
-
# statistics over the current sequence, check the corresponding
|
669
|
-
# variable comments in __init__ to get their meaning
|
670
|
-
seqtp = 0
|
671
|
-
seqitp = 0
|
672
|
-
seqfn = 0
|
673
|
-
seqifn = 0
|
674
|
-
seqfp = 0
|
675
|
-
seqigt = 0
|
676
|
-
seqitr = 0
|
677
|
-
|
678
|
-
last_ids = [[], []]
|
679
|
-
n_gts = 0
|
680
|
-
n_trs = 0
|
681
|
-
|
682
|
-
for f in range(len(seq_gt)):
|
683
|
-
g = seq_gt[f]
|
684
|
-
dc = seq_dc[f]
|
685
|
-
|
686
|
-
t = seq_tracker[f]
|
687
|
-
# counting total number of ground truth and tracker objects
|
688
|
-
self.n_gt += len(g)
|
689
|
-
self.n_tr += len(t)
|
690
|
-
|
691
|
-
n_gts += len(g)
|
692
|
-
n_trs += len(t)
|
693
|
-
|
694
|
-
# use hungarian method to associate, using boxoverlap 0..1 as cost
|
695
|
-
# build cost matrix
|
696
|
-
cost_matrix = []
|
697
|
-
this_ids = [[], []]
|
698
|
-
for gg in g:
|
699
|
-
# save current ids
|
700
|
-
this_ids[0].append(gg.track_id)
|
701
|
-
this_ids[1].append(-1)
|
702
|
-
gg.tracker = -1
|
703
|
-
gg.id_switch = 0
|
704
|
-
gg.fragmentation = 0
|
705
|
-
cost_row = []
|
706
|
-
for tt in t:
|
707
|
-
# overlap == 1 is cost ==0
|
708
|
-
c = 1 - self.boxoverlap(gg, tt)
|
709
|
-
# gating for boxoverlap
|
710
|
-
if c <= self.min_overlap:
|
711
|
-
cost_row.append(c)
|
712
|
-
else:
|
713
|
-
cost_row.append(max_cost) # = 1e9
|
714
|
-
cost_matrix.append(cost_row)
|
715
|
-
# all ground truth trajectories are initially not associated
|
716
|
-
# extend groundtruth trajectories lists (merge lists)
|
717
|
-
seq_trajectories[gg.track_id].append(-1)
|
718
|
-
seq_ignored[gg.track_id].append(False)
|
719
|
-
|
720
|
-
if len(g) is 0:
|
721
|
-
cost_matrix = [[]]
|
722
|
-
# associate
|
723
|
-
association_matrix = hm.compute(cost_matrix)
|
724
|
-
|
725
|
-
# tmp variables for sanity checks and MODP computation
|
726
|
-
tmptp = 0
|
727
|
-
tmpfp = 0
|
728
|
-
tmpfn = 0
|
729
|
-
tmpc = 0 # this will sum up the overlaps for all true positives
|
730
|
-
tmpcs = [0] * len(
|
731
|
-
g) # this will save the overlaps for all true positives
|
732
|
-
# the reason is that some true positives might be ignored
|
733
|
-
# later such that the corrsponding overlaps can
|
734
|
-
# be subtracted from tmpc for MODP computation
|
735
|
-
|
736
|
-
# mapping for tracker ids and ground truth ids
|
737
|
-
for row, col in association_matrix:
|
738
|
-
# apply gating on boxoverlap
|
739
|
-
c = cost_matrix[row][col]
|
740
|
-
if c < max_cost:
|
741
|
-
g[row].tracker = t[col].track_id
|
742
|
-
this_ids[1][row] = t[col].track_id
|
743
|
-
t[col].valid = True
|
744
|
-
g[row].distance = c
|
745
|
-
self.total_cost += 1 - c
|
746
|
-
tmpc += 1 - c
|
747
|
-
tmpcs[row] = 1 - c
|
748
|
-
seq_trajectories[g[row].track_id][-1] = t[col].track_id
|
749
|
-
|
750
|
-
# true positives are only valid associations
|
751
|
-
self.tp += 1
|
752
|
-
tmptp += 1
|
753
|
-
else:
|
754
|
-
g[row].tracker = -1
|
755
|
-
self.fn += 1
|
756
|
-
tmpfn += 1
|
757
|
-
|
758
|
-
# associate tracker and DontCare areas
|
759
|
-
# ignore tracker in neighboring classes
|
760
|
-
nignoredtracker = 0 # number of ignored tracker detections
|
761
|
-
ignoredtrackers = dict() # will associate the track_id with -1
|
762
|
-
# if it is not ignored and 1 if it is
|
763
|
-
# ignored;
|
764
|
-
# this is used to avoid double counting ignored
|
765
|
-
# cases, see the next loop
|
766
|
-
|
767
|
-
for tt in t:
|
768
|
-
ignoredtrackers[tt.track_id] = -1
|
769
|
-
# ignore detection if it belongs to a neighboring class or is
|
770
|
-
# smaller or equal to the minimum height
|
771
|
-
|
772
|
-
tt_height = abs(tt.y1 - tt.y2)
|
773
|
-
if ((self.cls == "car" and tt.obj_type == "van") or
|
774
|
-
(self.cls == "pedestrian" and
|
775
|
-
tt.obj_type == "person_sitting") or
|
776
|
-
tt_height <= self.min_height) and not tt.valid:
|
777
|
-
nignoredtracker += 1
|
778
|
-
tt.ignored = True
|
779
|
-
ignoredtrackers[tt.track_id] = 1
|
780
|
-
continue
|
781
|
-
for d in dc:
|
782
|
-
overlap = self.boxoverlap(tt, d, "a")
|
783
|
-
if overlap > 0.5 and not tt.valid:
|
784
|
-
tt.ignored = True
|
785
|
-
nignoredtracker += 1
|
786
|
-
ignoredtrackers[tt.track_id] = 1
|
787
|
-
break
|
788
|
-
|
789
|
-
# check for ignored FN/TP (truncation or neighboring object class)
|
790
|
-
ignoredfn = 0 # the number of ignored false negatives
|
791
|
-
nignoredtp = 0 # the number of ignored true positives
|
792
|
-
nignoredpairs = 0 # the number of ignored pairs, i.e. a true positive
|
793
|
-
# which is ignored but where the associated tracker
|
794
|
-
# detection has already been ignored
|
795
|
-
|
796
|
-
gi = 0
|
797
|
-
for gg in g:
|
798
|
-
if gg.tracker < 0:
|
799
|
-
if gg.occlusion>self.max_occlusion or gg.truncation>self.max_truncation\
|
800
|
-
or (self.cls=="car" and gg.obj_type=="van") or (self.cls=="pedestrian" and gg.obj_type=="person_sitting"):
|
801
|
-
seq_ignored[gg.track_id][-1] = True
|
802
|
-
gg.ignored = True
|
803
|
-
ignoredfn += 1
|
804
|
-
|
805
|
-
elif gg.tracker >= 0:
|
806
|
-
if gg.occlusion>self.max_occlusion or gg.truncation>self.max_truncation\
|
807
|
-
or (self.cls=="car" and gg.obj_type=="van") or (self.cls=="pedestrian" and gg.obj_type=="person_sitting"):
|
808
|
-
|
809
|
-
seq_ignored[gg.track_id][-1] = True
|
810
|
-
gg.ignored = True
|
811
|
-
nignoredtp += 1
|
812
|
-
|
813
|
-
# if the associated tracker detection is already ignored,
|
814
|
-
# we want to avoid double counting ignored detections
|
815
|
-
if ignoredtrackers[gg.tracker] > 0:
|
816
|
-
nignoredpairs += 1
|
817
|
-
|
818
|
-
# for computing MODP, the overlaps from ignored detections
|
819
|
-
# are subtracted
|
820
|
-
tmpc -= tmpcs[gi]
|
821
|
-
gi += 1
|
822
|
-
|
823
|
-
# the below might be confusion, check the comments in __init__
|
824
|
-
# to see what the individual statistics represent
|
825
|
-
|
826
|
-
# correct TP by number of ignored TP due to truncation
|
827
|
-
# ignored TP are shown as tracked in visualization
|
828
|
-
tmptp -= nignoredtp
|
829
|
-
|
830
|
-
# count the number of ignored true positives
|
831
|
-
self.itp += nignoredtp
|
832
|
-
|
833
|
-
# adjust the number of ground truth objects considered
|
834
|
-
self.n_gt -= (ignoredfn + nignoredtp)
|
835
|
-
|
836
|
-
# count the number of ignored ground truth objects
|
837
|
-
self.n_igt += ignoredfn + nignoredtp
|
838
|
-
|
839
|
-
# count the number of ignored tracker objects
|
840
|
-
self.n_itr += nignoredtracker
|
841
|
-
|
842
|
-
# count the number of ignored pairs, i.e. associated tracker and
|
843
|
-
# ground truth objects that are both ignored
|
844
|
-
self.n_igttr += nignoredpairs
|
845
|
-
|
846
|
-
# false negatives = associated gt bboxes exceding association threshold + non-associated gt bboxes
|
847
|
-
tmpfn += len(g) - len(association_matrix) - ignoredfn
|
848
|
-
self.fn += len(g) - len(association_matrix) - ignoredfn
|
849
|
-
self.ifn += ignoredfn
|
850
|
-
|
851
|
-
# false positives = tracker bboxes - associated tracker bboxes
|
852
|
-
# mismatches (mme_t)
|
853
|
-
tmpfp += len(
|
854
|
-
t) - tmptp - nignoredtracker - nignoredtp + nignoredpairs
|
855
|
-
self.fp += len(
|
856
|
-
t) - tmptp - nignoredtracker - nignoredtp + nignoredpairs
|
857
|
-
|
858
|
-
# update sequence data
|
859
|
-
seqtp += tmptp
|
860
|
-
seqitp += nignoredtp
|
861
|
-
seqfp += tmpfp
|
862
|
-
seqfn += tmpfn
|
863
|
-
seqifn += ignoredfn
|
864
|
-
seqigt += ignoredfn + nignoredtp
|
865
|
-
seqitr += nignoredtracker
|
866
|
-
|
867
|
-
# sanity checks
|
868
|
-
# - the number of true positives minues ignored true positives
|
869
|
-
# should be greater or equal to 0
|
870
|
-
# - the number of false negatives should be greater or equal to 0
|
871
|
-
# - the number of false positives needs to be greater or equal to 0
|
872
|
-
# otherwise ignored detections might be counted double
|
873
|
-
# - the number of counted true positives (plus ignored ones)
|
874
|
-
# and the number of counted false negatives (plus ignored ones)
|
875
|
-
# should match the total number of ground truth objects
|
876
|
-
# - the number of counted true positives (plus ignored ones)
|
877
|
-
# and the number of counted false positives
|
878
|
-
# plus the number of ignored tracker detections should
|
879
|
-
# match the total number of tracker detections; note that
|
880
|
-
# nignoredpairs is subtracted here to avoid double counting
|
881
|
-
# of ignored detection sin nignoredtp and nignoredtracker
|
882
|
-
if tmptp < 0:
|
883
|
-
print(tmptp, nignoredtp)
|
884
|
-
raise NameError("Something went wrong! TP is negative")
|
885
|
-
if tmpfn < 0:
|
886
|
-
print(tmpfn,
|
887
|
-
len(g),
|
888
|
-
len(association_matrix), ignoredfn, nignoredpairs)
|
889
|
-
raise NameError("Something went wrong! FN is negative")
|
890
|
-
if tmpfp < 0:
|
891
|
-
print(tmpfp,
|
892
|
-
len(t), tmptp, nignoredtracker, nignoredtp,
|
893
|
-
nignoredpairs)
|
894
|
-
raise NameError("Something went wrong! FP is negative")
|
895
|
-
if tmptp + tmpfn is not len(g) - ignoredfn - nignoredtp:
|
896
|
-
print("seqidx", seq_idx)
|
897
|
-
print("frame ", f)
|
898
|
-
print("TP ", tmptp)
|
899
|
-
print("FN ", tmpfn)
|
900
|
-
print("FP ", tmpfp)
|
901
|
-
print("nGT ", len(g))
|
902
|
-
print("nAss ", len(association_matrix))
|
903
|
-
print("ign GT", ignoredfn)
|
904
|
-
print("ign TP", nignoredtp)
|
905
|
-
raise NameError(
|
906
|
-
"Something went wrong! nGroundtruth is not TP+FN")
|
907
|
-
if tmptp + tmpfp + nignoredtp + nignoredtracker - nignoredpairs is not len(
|
908
|
-
t):
|
909
|
-
print(seq_idx, f, len(t), tmptp, tmpfp)
|
910
|
-
print(len(association_matrix), association_matrix)
|
911
|
-
raise NameError(
|
912
|
-
"Something went wrong! nTracker is not TP+FP")
|
913
|
-
|
914
|
-
# check for id switches or fragmentations
|
915
|
-
for i, tt in enumerate(this_ids[0]):
|
916
|
-
if tt in last_ids[0]:
|
917
|
-
idx = last_ids[0].index(tt)
|
918
|
-
tid = this_ids[1][i]
|
919
|
-
lid = last_ids[1][idx]
|
920
|
-
if tid != lid and lid != -1 and tid != -1:
|
921
|
-
if g[i].truncation < self.max_truncation:
|
922
|
-
g[i].id_switch = 1
|
923
|
-
ids += 1
|
924
|
-
if tid != lid and lid != -1:
|
925
|
-
if g[i].truncation < self.max_truncation:
|
926
|
-
g[i].fragmentation = 1
|
927
|
-
fr += 1
|
928
|
-
|
929
|
-
# save current index
|
930
|
-
last_ids = this_ids
|
931
|
-
# compute MOTP_t
|
932
|
-
MODP_t = 1
|
933
|
-
if tmptp != 0:
|
934
|
-
MODP_t = tmpc / float(tmptp)
|
935
|
-
self.MODP_t.append(MODP_t)
|
936
|
-
|
937
|
-
# remove empty lists for current gt trajectories
|
938
|
-
self.gt_trajectories[seq_idx] = seq_trajectories
|
939
|
-
self.ign_trajectories[seq_idx] = seq_ignored
|
940
|
-
|
941
|
-
# gather statistics for "per sequence" statistics.
|
942
|
-
self.n_gts.append(n_gts)
|
943
|
-
self.n_trs.append(n_trs)
|
944
|
-
self.tps.append(seqtp)
|
945
|
-
self.itps.append(seqitp)
|
946
|
-
self.fps.append(seqfp)
|
947
|
-
self.fns.append(seqfn)
|
948
|
-
self.ifns.append(seqifn)
|
949
|
-
self.n_igts.append(seqigt)
|
950
|
-
self.n_itrs.append(seqitr)
|
951
|
-
|
952
|
-
# compute MT/PT/ML, fragments, idswitches for all groundtruth trajectories
|
953
|
-
n_ignored_tr_total = 0
|
954
|
-
for seq_idx, (
|
955
|
-
seq_trajectories, seq_ignored
|
956
|
-
) in enumerate(zip(self.gt_trajectories, self.ign_trajectories)):
|
957
|
-
if len(seq_trajectories) == 0:
|
958
|
-
continue
|
959
|
-
tmpMT, tmpML, tmpPT, tmpId_switches, tmpFragments = [0] * 5
|
960
|
-
n_ignored_tr = 0
|
961
|
-
for g, ign_g in zip(seq_trajectories.values(),
|
962
|
-
seq_ignored.values()):
|
963
|
-
# all frames of this gt trajectory are ignored
|
964
|
-
if all(ign_g):
|
965
|
-
n_ignored_tr += 1
|
966
|
-
n_ignored_tr_total += 1
|
967
|
-
continue
|
968
|
-
# all frames of this gt trajectory are not assigned to any detections
|
969
|
-
if all([this == -1 for this in g]):
|
970
|
-
tmpML += 1
|
971
|
-
self.ML += 1
|
972
|
-
continue
|
973
|
-
# compute tracked frames in trajectory
|
974
|
-
last_id = g[0]
|
975
|
-
# first detection (necessary to be in gt_trajectories) is always tracked
|
976
|
-
tracked = 1 if g[0] >= 0 else 0
|
977
|
-
lgt = 0 if ign_g[0] else 1
|
978
|
-
for f in range(1, len(g)):
|
979
|
-
if ign_g[f]:
|
980
|
-
last_id = -1
|
981
|
-
continue
|
982
|
-
lgt += 1
|
983
|
-
if last_id != g[f] and last_id != -1 and g[f] != -1 and g[
|
984
|
-
f - 1] != -1:
|
985
|
-
tmpId_switches += 1
|
986
|
-
self.id_switches += 1
|
987
|
-
if f < len(g) - 1 and g[f - 1] != g[
|
988
|
-
f] and last_id != -1 and g[f] != -1 and g[f +
|
989
|
-
1] != -1:
|
990
|
-
tmpFragments += 1
|
991
|
-
self.fragments += 1
|
992
|
-
if g[f] != -1:
|
993
|
-
tracked += 1
|
994
|
-
last_id = g[f]
|
995
|
-
# handle last frame; tracked state is handled in for loop (g[f]!=-1)
|
996
|
-
if len(g) > 1 and g[f - 1] != g[f] and last_id != -1 and g[
|
997
|
-
f] != -1 and not ign_g[f]:
|
998
|
-
tmpFragments += 1
|
999
|
-
self.fragments += 1
|
1000
|
-
|
1001
|
-
# compute MT/PT/ML
|
1002
|
-
tracking_ratio = tracked / float(len(g) - sum(ign_g))
|
1003
|
-
if tracking_ratio > 0.8:
|
1004
|
-
tmpMT += 1
|
1005
|
-
self.MT += 1
|
1006
|
-
elif tracking_ratio < 0.2:
|
1007
|
-
tmpML += 1
|
1008
|
-
self.ML += 1
|
1009
|
-
else: # 0.2 <= tracking_ratio <= 0.8
|
1010
|
-
tmpPT += 1
|
1011
|
-
self.PT += 1
|
1012
|
-
|
1013
|
-
if (self.n_gt_trajectories - n_ignored_tr_total) == 0:
|
1014
|
-
self.MT = 0.
|
1015
|
-
self.PT = 0.
|
1016
|
-
self.ML = 0.
|
1017
|
-
else:
|
1018
|
-
self.MT /= float(self.n_gt_trajectories - n_ignored_tr_total)
|
1019
|
-
self.PT /= float(self.n_gt_trajectories - n_ignored_tr_total)
|
1020
|
-
self.ML /= float(self.n_gt_trajectories - n_ignored_tr_total)
|
1021
|
-
|
1022
|
-
# precision/recall etc.
|
1023
|
-
if (self.fp + self.tp) == 0 or (self.tp + self.fn) == 0:
|
1024
|
-
self.recall = 0.
|
1025
|
-
self.precision = 0.
|
1026
|
-
else:
|
1027
|
-
self.recall = self.tp / float(self.tp + self.fn)
|
1028
|
-
self.precision = self.tp / float(self.fp + self.tp)
|
1029
|
-
if (self.recall + self.precision) == 0:
|
1030
|
-
self.F1 = 0.
|
1031
|
-
else:
|
1032
|
-
self.F1 = 2. * (self.precision * self.recall) / (
|
1033
|
-
self.precision + self.recall)
|
1034
|
-
if sum(self.n_frames) == 0:
|
1035
|
-
self.FAR = "n/a"
|
1036
|
-
else:
|
1037
|
-
self.FAR = self.fp / float(sum(self.n_frames))
|
1038
|
-
|
1039
|
-
# compute CLEARMOT
|
1040
|
-
if self.n_gt == 0:
|
1041
|
-
self.MOTA = -float("inf")
|
1042
|
-
self.MODA = -float("inf")
|
1043
|
-
else:
|
1044
|
-
self.MOTA = 1 - (self.fn + self.fp + self.id_switches
|
1045
|
-
) / float(self.n_gt)
|
1046
|
-
self.MODA = 1 - (self.fn + self.fp) / float(self.n_gt)
|
1047
|
-
if self.tp == 0:
|
1048
|
-
self.MOTP = float("inf")
|
1049
|
-
else:
|
1050
|
-
self.MOTP = self.total_cost / float(self.tp)
|
1051
|
-
if self.n_gt != 0:
|
1052
|
-
if self.id_switches == 0:
|
1053
|
-
self.MOTAL = 1 - (self.fn + self.fp + self.id_switches
|
1054
|
-
) / float(self.n_gt)
|
1055
|
-
else:
|
1056
|
-
self.MOTAL = 1 - (self.fn + self.fp +
|
1057
|
-
math.log10(self.id_switches)
|
1058
|
-
) / float(self.n_gt)
|
1059
|
-
else:
|
1060
|
-
self.MOTAL = -float("inf")
|
1061
|
-
if sum(self.n_frames) == 0:
|
1062
|
-
self.MODP = "n/a"
|
1063
|
-
else:
|
1064
|
-
self.MODP = sum(self.MODP_t) / float(sum(self.n_frames))
|
1065
|
-
return True
|
1066
|
-
|
1067
|
-
def createSummary(self):
|
1068
|
-
summary = ""
|
1069
|
-
summary += "tracking evaluation summary".center(80, "=") + "\n"
|
1070
|
-
summary += self.printEntry("Multiple Object Tracking Accuracy (MOTA)",
|
1071
|
-
self.MOTA) + "\n"
|
1072
|
-
summary += self.printEntry("Multiple Object Tracking Precision (MOTP)",
|
1073
|
-
self.MOTP) + "\n"
|
1074
|
-
summary += self.printEntry("Multiple Object Tracking Accuracy (MOTAL)",
|
1075
|
-
self.MOTAL) + "\n"
|
1076
|
-
summary += self.printEntry("Multiple Object Detection Accuracy (MODA)",
|
1077
|
-
self.MODA) + "\n"
|
1078
|
-
summary += self.printEntry(
|
1079
|
-
"Multiple Object Detection Precision (MODP)", self.MODP) + "\n"
|
1080
|
-
summary += "\n"
|
1081
|
-
summary += self.printEntry("Recall", self.recall) + "\n"
|
1082
|
-
summary += self.printEntry("Precision", self.precision) + "\n"
|
1083
|
-
summary += self.printEntry("F1", self.F1) + "\n"
|
1084
|
-
summary += self.printEntry("False Alarm Rate", self.FAR) + "\n"
|
1085
|
-
summary += "\n"
|
1086
|
-
summary += self.printEntry("Mostly Tracked", self.MT) + "\n"
|
1087
|
-
summary += self.printEntry("Partly Tracked", self.PT) + "\n"
|
1088
|
-
summary += self.printEntry("Mostly Lost", self.ML) + "\n"
|
1089
|
-
summary += "\n"
|
1090
|
-
summary += self.printEntry("True Positives", self.tp) + "\n"
|
1091
|
-
#summary += self.printEntry("True Positives per Sequence", self.tps) + "\n"
|
1092
|
-
summary += self.printEntry("Ignored True Positives", self.itp) + "\n"
|
1093
|
-
#summary += self.printEntry("Ignored True Positives per Sequence", self.itps) + "\n"
|
1094
|
-
|
1095
|
-
summary += self.printEntry("False Positives", self.fp) + "\n"
|
1096
|
-
#summary += self.printEntry("False Positives per Sequence", self.fps) + "\n"
|
1097
|
-
summary += self.printEntry("False Negatives", self.fn) + "\n"
|
1098
|
-
#summary += self.printEntry("False Negatives per Sequence", self.fns) + "\n"
|
1099
|
-
summary += self.printEntry("ID-switches", self.id_switches) + "\n"
|
1100
|
-
self.fp = self.fp / self.n_gt
|
1101
|
-
self.fn = self.fn / self.n_gt
|
1102
|
-
self.id_switches = self.id_switches / self.n_gt
|
1103
|
-
summary += self.printEntry("False Positives Ratio", self.fp) + "\n"
|
1104
|
-
#summary += self.printEntry("False Positives per Sequence", self.fps) + "\n"
|
1105
|
-
summary += self.printEntry("False Negatives Ratio", self.fn) + "\n"
|
1106
|
-
#summary += self.printEntry("False Negatives per Sequence", self.fns) + "\n"
|
1107
|
-
summary += self.printEntry("Ignored False Negatives Ratio",
|
1108
|
-
self.ifn) + "\n"
|
1109
|
-
|
1110
|
-
#summary += self.printEntry("Ignored False Negatives per Sequence", self.ifns) + "\n"
|
1111
|
-
summary += self.printEntry("Missed Targets", self.fn) + "\n"
|
1112
|
-
summary += self.printEntry("ID-switches", self.id_switches) + "\n"
|
1113
|
-
summary += self.printEntry("Fragmentations", self.fragments) + "\n"
|
1114
|
-
summary += "\n"
|
1115
|
-
summary += self.printEntry("Ground Truth Objects (Total)", self.n_gt +
|
1116
|
-
self.n_igt) + "\n"
|
1117
|
-
#summary += self.printEntry("Ground Truth Objects (Total) per Sequence", self.n_gts) + "\n"
|
1118
|
-
summary += self.printEntry("Ignored Ground Truth Objects",
|
1119
|
-
self.n_igt) + "\n"
|
1120
|
-
#summary += self.printEntry("Ignored Ground Truth Objects per Sequence", self.n_igts) + "\n"
|
1121
|
-
summary += self.printEntry("Ground Truth Trajectories",
|
1122
|
-
self.n_gt_trajectories) + "\n"
|
1123
|
-
summary += "\n"
|
1124
|
-
summary += self.printEntry("Tracker Objects (Total)", self.n_tr) + "\n"
|
1125
|
-
#summary += self.printEntry("Tracker Objects (Total) per Sequence", self.n_trs) + "\n"
|
1126
|
-
summary += self.printEntry("Ignored Tracker Objects",
|
1127
|
-
self.n_itr) + "\n"
|
1128
|
-
#summary += self.printEntry("Ignored Tracker Objects per Sequence", self.n_itrs) + "\n"
|
1129
|
-
summary += self.printEntry("Tracker Trajectories",
|
1130
|
-
self.n_tr_trajectories) + "\n"
|
1131
|
-
#summary += "\n"
|
1132
|
-
#summary += self.printEntry("Ignored Tracker Objects with Associated Ignored Ground Truth Objects", self.n_igttr) + "\n"
|
1133
|
-
summary += "=" * 80
|
1134
|
-
return summary
|
1135
|
-
|
1136
|
-
def printEntry(self, key, val, width=(70, 10)):
|
1137
|
-
"""
|
1138
|
-
Pretty print an entry in a table fashion.
|
1139
|
-
"""
|
1140
|
-
s_out = key.ljust(width[0])
|
1141
|
-
if type(val) == int:
|
1142
|
-
s = "%%%dd" % width[1]
|
1143
|
-
s_out += s % val
|
1144
|
-
elif type(val) == float:
|
1145
|
-
s = "%%%df" % (width[1])
|
1146
|
-
s_out += s % val
|
1147
|
-
else:
|
1148
|
-
s_out += ("%s" % val).rjust(width[1])
|
1149
|
-
return s_out
|
1150
|
-
|
1151
|
-
def saveToStats(self, save_summary):
|
1152
|
-
"""
|
1153
|
-
Save the statistics in a whitespace separate file.
|
1154
|
-
"""
|
1155
|
-
summary = self.createSummary()
|
1156
|
-
if save_summary:
|
1157
|
-
filename = os.path.join(self.result_path,
|
1158
|
-
"summary_%s.txt" % self.cls)
|
1159
|
-
dump = open(filename, "w+")
|
1160
|
-
dump.write(summary)
|
1161
|
-
dump.close()
|
1162
|
-
return summary
|
1163
|
-
|
1164
|
-
|
1165
|
-
class KITTIMOTMetric(Metric):
|
1166
|
-
def __init__(self, save_summary=True):
|
1167
|
-
self.save_summary = save_summary
|
1168
|
-
self.MOTEvaluator = KITTIEvaluation
|
1169
|
-
self.result_root = None
|
1170
|
-
self.reset()
|
1171
|
-
|
1172
|
-
def reset(self):
|
1173
|
-
self.seqs = []
|
1174
|
-
self.n_sequences = 0
|
1175
|
-
self.n_frames = []
|
1176
|
-
self.strsummary = ''
|
1177
|
-
|
1178
|
-
def update(self, data_root, seq, data_type, result_root, result_filename):
|
1179
|
-
assert data_type == 'kitti', "data_type should 'kitti'"
|
1180
|
-
self.result_root = result_root
|
1181
|
-
self.gt_path = data_root
|
1182
|
-
gt_path = '{}/../labels/{}.txt'.format(data_root, seq)
|
1183
|
-
gt = open(gt_path, "r")
|
1184
|
-
max_frame = 0
|
1185
|
-
for line in gt:
|
1186
|
-
line = line.strip()
|
1187
|
-
line_list = line.split(" ")
|
1188
|
-
if int(line_list[0]) > max_frame:
|
1189
|
-
max_frame = int(line_list[0])
|
1190
|
-
rs = open(result_filename, "r")
|
1191
|
-
for line in rs:
|
1192
|
-
line = line.strip()
|
1193
|
-
line_list = line.split(" ")
|
1194
|
-
if int(line_list[0]) > max_frame:
|
1195
|
-
max_frame = int(line_list[0])
|
1196
|
-
gt.close()
|
1197
|
-
rs.close()
|
1198
|
-
self.n_frames.append(max_frame + 1)
|
1199
|
-
self.seqs.append(seq)
|
1200
|
-
self.n_sequences += 1
|
1201
|
-
|
1202
|
-
def accumulate(self):
|
1203
|
-
logger.info("Processing Result for KITTI Tracking Benchmark")
|
1204
|
-
e = self.MOTEvaluator(result_path=self.result_root, gt_path=self.gt_path,\
|
1205
|
-
n_frames=self.n_frames, seqs=self.seqs, n_sequences=self.n_sequences)
|
1206
|
-
try:
|
1207
|
-
if not e.loadTracker():
|
1208
|
-
return
|
1209
|
-
logger.info("Loading Results - Success")
|
1210
|
-
logger.info("Evaluate Object Class: %s" % c.upper())
|
1211
|
-
except:
|
1212
|
-
logger.info("Caught exception while loading result data.")
|
1213
|
-
if not e.loadGroundtruth():
|
1214
|
-
raise ValueError("Ground truth not found.")
|
1215
|
-
logger.info("Loading Groundtruth - Success")
|
1216
|
-
# sanity checks
|
1217
|
-
if len(e.groundtruth) is not len(e.tracker):
|
1218
|
-
logger.info(
|
1219
|
-
"The uploaded data does not provide results for every sequence."
|
1220
|
-
)
|
1221
|
-
return False
|
1222
|
-
logger.info("Loaded %d Sequences." % len(e.groundtruth))
|
1223
|
-
logger.info("Start Evaluation...")
|
1224
|
-
|
1225
|
-
if e.compute3rdPartyMetrics():
|
1226
|
-
self.strsummary = e.saveToStats(self.save_summary)
|
1227
|
-
else:
|
1228
|
-
logger.info(
|
1229
|
-
"There seem to be no true positives or false positives at all in the submitted data."
|
1230
|
-
)
|
1231
|
-
|
1232
|
-
def log(self):
|
1233
|
-
print(self.strsummary)
|
1234
|
-
|
1235
|
-
def get_results(self):
|
1236
|
-
return self.strsummary
|