quadra 2.3.3__tar.gz → 2.4.0__tar.gz
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.
- {quadra-2.3.3 → quadra-2.4.0}/PKG-INFO +3 -3
- {quadra-2.3.3 → quadra-2.4.0}/pyproject.toml +5 -5
- {quadra-2.3.3 → quadra-2.4.0}/quadra/__init__.py +1 -1
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/classification.py +12 -1
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/export.py +81 -5
- {quadra-2.3.3 → quadra-2.4.0}/LICENSE +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/README.md +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/callbacks/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/callbacks/anomalib.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/callbacks/lightning.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/callbacks/mlflow.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/callbacks/scheduler.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/caformer_m36.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/caformer_s36.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/convnextv2_base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/convnextv2_femto.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/convnextv2_tiny.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/dino_vitb8.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/dino_vits8.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/dinov2_vitb14.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/dinov2_vits14.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/efficientnet_b0.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/efficientnet_b1.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/efficientnet_b2.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/efficientnet_b3.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/efficientnetv2_s.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/levit_128s.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/mnasnet0_5.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/resnet101.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/resnet18.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/resnet18_ssl.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/resnet50.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/smp.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/tiny_vit_21m_224.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/unetr.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/vit16_base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/vit16_small.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/vit16_tiny.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/backbone/xcit_tiny_24_p8_224.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/callbacks/all.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/callbacks/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/callbacks/default_anomalib.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/config.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/core/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/anomaly.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/multilabel_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/segmentation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/segmentation_multiclass.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/sklearn_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/sklearn_classification_patch.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/ssl.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/imagenette/classification/base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/imagenette/ssl/base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/mnist/anomaly/base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/mvtec/anomaly/base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/oxford_pet/segmentation/base.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/cfa.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/cflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/csflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/draem.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/efficient_ad.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/fastflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/inference.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/padim.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/anomaly/patchcore.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/classification_evaluation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/multilabel_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/sklearn_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/sklearn_classification_patch.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/sklearn_classification_patch_test.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/sklearn_classification_test.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/segmentation/smp.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/segmentation/smp_evaluation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/segmentation/smp_multiclass.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/segmentation/smp_multiclass_evaluation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/ssl/barlow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/ssl/byol.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/ssl/dino.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/ssl/linear_eval.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/ssl/simclr.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/ssl/simsiam.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/custom/cls.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/imagenette/classification/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/imagenette/ssl/barlow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/imagenette/ssl/byol.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/imagenette/ssl/dino.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/imagenette/ssl/simclr.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/imagenette/ssl/simsiam.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/cfa.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/cflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/csflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/draem.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/fastflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/inference.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/padim.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/patchcore.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/cfa.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/cflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/csflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/draem.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/efficient_ad.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/fastflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/inference.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/padim.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/patchcore.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/oxford_pet/segmentation/smp.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/export/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/hydra/anomaly_custom.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/hydra/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/inference/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/logger/comet.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/logger/csv.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/logger/mlflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/logger/tensorboard.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/asl.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/barlow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/bce.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/byol.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/cross_entropy.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/dino.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/simclr.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/simsiam.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/smp_ce.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/smp_dice.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/smp_dice_multiclass.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/smp_mcc.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/loss/vicreg.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/cfa.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/cflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/csflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/dfm.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/draem.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/efficient_ad.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/fastflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/padim.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/anomalib/patchcore.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/barlow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/byol.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/dino.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/logistic_regression.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/multilabel_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/simclr.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/simsiam.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/smp.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/smp_multiclass.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/model/vicreg.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/optimizer/adam.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/optimizer/adamw.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/optimizer/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/optimizer/lars.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/optimizer/sgd.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/scheduler/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/scheduler/rop.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/scheduler/step.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/scheduler/warmrestart.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/scheduler/warmup.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/cfa.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/cflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/csflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/draem.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/efficient_ad.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/fastflow.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/inference.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/padim.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/anomalib/patchcore.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/classification_evaluation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/segmentation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/segmentation_evaluation.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/sklearn_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/sklearn_classification_patch.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/sklearn_classification_patch_test.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/sklearn_classification_test.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/task/ssl.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/trainer/lightning_cpu.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/trainer/lightning_gpu.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/trainer/lightning_gpu_bf16.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/trainer/lightning_gpu_fp16.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/trainer/lightning_multigpu.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/trainer/sklearn_classification.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/byol.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/byol_no_random_resize.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/default.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/default_numpy.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/default_resize.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/dino.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/configs/transforms/linear_eval.yaml +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/anomaly.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/classification.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/generic/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/generic/imagenette.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/generic/mnist.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/generic/mvtec.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/generic/oxford_pet.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/patch.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datamodules/ssl.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datasets/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datasets/anomaly.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datasets/classification.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datasets/patch.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datasets/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/datasets/ssl.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/classification/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/classification/asl.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/classification/focal.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/classification/prototypical.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/barlowtwins.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/byol.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/dino.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/hyperspherical.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/idmm.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/simclr.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/simsiam.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/losses/ssl/vicreg.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/main.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/metrics/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/metrics/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/models/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/models/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/models/classification/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/models/classification/backbones.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/models/classification/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/models/evaluation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/backbone.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/classification/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/classification/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/barlowtwins.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/byol.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/common.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/dino.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/hyperspherical.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/idmm.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/simclr.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/simsiam.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/modules/ssl/vicreg.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/optimizers/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/optimizers/lars.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/optimizers/sam.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/schedulers/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/schedulers/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/schedulers/warmup.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/anomaly.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/base.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/patch.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/tasks/ssl.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/trainers/README.md +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/trainers/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/trainers/classification.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/anomaly.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/classification.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/deprecation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/evaluation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/imaging.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/logger.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/mlflow.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/model_manager.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/models.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/patch/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/patch/dataset.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/patch/metrics.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/patch/model.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/patch/visualization.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/resolver.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/dataset/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/dataset/anomaly.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/dataset/classification.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/dataset/imagenette.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/dataset/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/models/__init__.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/models/anomaly.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/models/classification.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/fixtures/models/segmentation.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/helpers.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/tests/models.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/utils.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/validator.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/visualization.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra/utils/vit_explainability.py +0 -0
- {quadra-2.3.3 → quadra-2.4.0}/quadra_hydra_plugin/hydra_plugins/quadra_searchpath_plugin.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: quadra
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.4.0
|
|
4
4
|
Summary: Deep Learning experiment orchestration library
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Keywords: deep learning,experiment,lightning,hydra-core
|
|
@@ -49,11 +49,11 @@ Requires-Dist: seaborn (>=0.12,<0.13)
|
|
|
49
49
|
Requires-Dist: segmentation_models_pytorch-orobix (==0.3.3.dev1)
|
|
50
50
|
Requires-Dist: tensorboard (>=2.11,<2.12)
|
|
51
51
|
Requires-Dist: timm (==0.9.12)
|
|
52
|
-
Requires-Dist: torch (==2.
|
|
52
|
+
Requires-Dist: torch (==2.6.0)
|
|
53
53
|
Requires-Dist: torchinfo (>=1.8,<1.9)
|
|
54
54
|
Requires-Dist: torchmetrics (>=0.10,<0.11)
|
|
55
55
|
Requires-Dist: torchsummary (>=1.5,<1.6)
|
|
56
|
-
Requires-Dist: torchvision (>=0.
|
|
56
|
+
Requires-Dist: torchvision (>=0.21,<0.22)
|
|
57
57
|
Requires-Dist: tripy (>=1.0,<1.1)
|
|
58
58
|
Requires-Dist: typing_extensions (==4.11.0) ; python_version < "3.10"
|
|
59
59
|
Requires-Dist: xxhash (>=3.2,<3.3)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "quadra"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.4.0"
|
|
4
4
|
description = "Deep Learning experiment orchestration library"
|
|
5
5
|
authors = [
|
|
6
6
|
"Federico Belotti <federico.belotti@orobix.com>",
|
|
@@ -40,8 +40,8 @@ quadra = "quadra.main:main"
|
|
|
40
40
|
[tool.poetry.dependencies]
|
|
41
41
|
python = ">=3.10,<3.11"
|
|
42
42
|
|
|
43
|
-
torch = { version = "2.
|
|
44
|
-
torchvision = { version = "~0.
|
|
43
|
+
torch = { version = "2.6.0", source = "torch_cu126" }
|
|
44
|
+
torchvision = { version = "~0.21", source = "torch_cu126" }
|
|
45
45
|
|
|
46
46
|
pytorch_lightning = "~2.4"
|
|
47
47
|
numpy = "<2"
|
|
@@ -85,8 +85,8 @@ onnxruntime_gpu = { version = "1.20.0", optional = true }
|
|
|
85
85
|
onnxconverter-common = { version = "^1.14.0", optional = true }
|
|
86
86
|
|
|
87
87
|
[[tool.poetry.source]]
|
|
88
|
-
name = "
|
|
89
|
-
url = "https://download.pytorch.org/whl/
|
|
88
|
+
name = "torch_cu126"
|
|
89
|
+
url = "https://download.pytorch.org/whl/cu126"
|
|
90
90
|
priority = "explicit"
|
|
91
91
|
|
|
92
92
|
|
|
@@ -307,6 +307,14 @@ class Classification(Generic[ClassificationDataModuleT], LightningTask[Classific
|
|
|
307
307
|
# TODO: What happens if we have 64 precision?
|
|
308
308
|
half_precision = "16" in self.trainer.precision
|
|
309
309
|
|
|
310
|
+
example_input: torch.Tensor | None = None
|
|
311
|
+
|
|
312
|
+
if hasattr(self.trainer, "datamodule") and hasattr(self.trainer.datamodule, "val_dataset"):
|
|
313
|
+
# Retrieve a better input to evaluate fp16 performance or efficientnetb0 does not sometimes export properly
|
|
314
|
+
example_input = self.trainer.datamodule.val_dataset[0][0]
|
|
315
|
+
|
|
316
|
+
# Selected rtol and atol are quite high, this is mostly done for efficientnetb0 that seems to be
|
|
317
|
+
# quite unstable in fp16
|
|
310
318
|
self.model_json, export_paths = export_model(
|
|
311
319
|
config=self.config,
|
|
312
320
|
model=module.model,
|
|
@@ -314,6 +322,9 @@ class Classification(Generic[ClassificationDataModuleT], LightningTask[Classific
|
|
|
314
322
|
half_precision=half_precision,
|
|
315
323
|
input_shapes=input_shapes,
|
|
316
324
|
idx_to_class=idx_to_class,
|
|
325
|
+
example_inputs=example_input,
|
|
326
|
+
rtol=0.05,
|
|
327
|
+
atol=0.01,
|
|
317
328
|
)
|
|
318
329
|
|
|
319
330
|
if len(export_paths) == 0:
|
|
@@ -1136,7 +1147,7 @@ class ClassificationEvaluation(Evaluation[ClassificationDataModuleT]):
|
|
|
1136
1147
|
return
|
|
1137
1148
|
|
|
1138
1149
|
if isinstance(self.deployment_model.model.features_extractor, timm.models.resnet.ResNet):
|
|
1139
|
-
target_layers = [cast(BaseNetworkBuilder, self.deployment_model.model).features_extractor.layer4[-1]]
|
|
1150
|
+
target_layers = [cast(BaseNetworkBuilder, self.deployment_model.model).features_extractor.layer4[-1]] # type: ignore[index]
|
|
1140
1151
|
self.cam = GradCAM(
|
|
1141
1152
|
model=self.deployment_model.model,
|
|
1142
1153
|
target_layers=target_layers,
|
|
@@ -119,6 +119,7 @@ def export_torchscript_model(
|
|
|
119
119
|
input_shapes: list[Any] | None = None,
|
|
120
120
|
half_precision: bool = False,
|
|
121
121
|
model_name: str = "model.pt",
|
|
122
|
+
example_inputs: list[torch.Tensor] | tuple[torch.Tensor, ...] | torch.Tensor | None = None,
|
|
122
123
|
) -> tuple[str, Any] | None:
|
|
123
124
|
"""Export a PyTorch model with TorchScript.
|
|
124
125
|
|
|
@@ -128,6 +129,8 @@ def export_torchscript_model(
|
|
|
128
129
|
output_path: Path to save the model
|
|
129
130
|
half_precision: If True, the model will be exported with half precision
|
|
130
131
|
model_name: Name of the exported model
|
|
132
|
+
example_inputs: If provided use this to evaluate the model instead of generating random inputs, it's expected to
|
|
133
|
+
be a list of tensors or a single tensor without batch dimension
|
|
131
134
|
|
|
132
135
|
Returns:
|
|
133
136
|
If the model is exported successfully, the path to the model and the input shape are returned.
|
|
@@ -144,7 +147,32 @@ def export_torchscript_model(
|
|
|
144
147
|
else:
|
|
145
148
|
model.cpu()
|
|
146
149
|
|
|
147
|
-
|
|
150
|
+
batch_size = 1
|
|
151
|
+
model_inputs: tuple[list[Any] | tuple[Any, ...] | torch.Tensor, list[Any]] | None
|
|
152
|
+
if example_inputs is not None:
|
|
153
|
+
if isinstance(example_inputs, Sequence):
|
|
154
|
+
model_input_tensors = []
|
|
155
|
+
model_input_shapes = []
|
|
156
|
+
|
|
157
|
+
for example_input in example_inputs:
|
|
158
|
+
new_inp = example_input.to(
|
|
159
|
+
device="cuda:0" if half_precision else "cpu",
|
|
160
|
+
dtype=torch.float16 if half_precision else torch.float32,
|
|
161
|
+
)
|
|
162
|
+
new_inp = new_inp.unsqueeze(0).repeat(batch_size, *(1 for x in new_inp.shape))
|
|
163
|
+
model_input_tensors.append(new_inp)
|
|
164
|
+
model_input_shapes.append(new_inp[0].shape)
|
|
165
|
+
|
|
166
|
+
model_inputs = (model_input_tensors, [model_input_shapes])
|
|
167
|
+
else:
|
|
168
|
+
new_inp = example_inputs.to(
|
|
169
|
+
device="cuda:0" if half_precision else "cpu",
|
|
170
|
+
dtype=torch.float16 if half_precision else torch.float32,
|
|
171
|
+
)
|
|
172
|
+
new_inp = new_inp.unsqueeze(0).repeat(batch_size, *(1 for x in new_inp.shape))
|
|
173
|
+
model_inputs = (new_inp, [new_inp[0].shape])
|
|
174
|
+
else:
|
|
175
|
+
model_inputs = extract_torch_model_inputs(model, input_shapes, half_precision)
|
|
148
176
|
|
|
149
177
|
if model_inputs is None:
|
|
150
178
|
return None
|
|
@@ -182,6 +210,9 @@ def export_onnx_model(
|
|
|
182
210
|
input_shapes: list[Any] | None = None,
|
|
183
211
|
half_precision: bool = False,
|
|
184
212
|
model_name: str = "model.onnx",
|
|
213
|
+
example_inputs: list[torch.Tensor] | tuple[torch.Tensor, ...] | torch.Tensor | None = None,
|
|
214
|
+
rtol: float = 0.01,
|
|
215
|
+
atol: float = 5e-3,
|
|
185
216
|
) -> tuple[str, Any] | None:
|
|
186
217
|
"""Export a PyTorch model with ONNX.
|
|
187
218
|
|
|
@@ -192,6 +223,10 @@ def export_onnx_model(
|
|
|
192
223
|
onnx_config: ONNX export configuration
|
|
193
224
|
half_precision: If True, the model will be exported with half precision
|
|
194
225
|
model_name: Name of the exported model
|
|
226
|
+
example_inputs: If provided use this to evaluate the model instead of generating random inputs, it's expected to
|
|
227
|
+
be a list of tensors or a single tensor without batch dimension
|
|
228
|
+
rtol: Relative tolerance for the ONNX safe export in fp16
|
|
229
|
+
atol: Absolute tolerance for the ONNX safe export in fp16
|
|
195
230
|
"""
|
|
196
231
|
if not ONNX_AVAILABLE:
|
|
197
232
|
log.warning("ONNX is not installed, can not export model in this format.")
|
|
@@ -210,9 +245,32 @@ def export_onnx_model(
|
|
|
210
245
|
else:
|
|
211
246
|
batch_size = 1
|
|
212
247
|
|
|
213
|
-
model_inputs
|
|
214
|
-
|
|
215
|
-
|
|
248
|
+
model_inputs: tuple[list[Any] | tuple[Any, ...] | torch.Tensor, list[Any]] | None
|
|
249
|
+
if example_inputs is not None:
|
|
250
|
+
if isinstance(example_inputs, Sequence):
|
|
251
|
+
model_input_tensors = []
|
|
252
|
+
model_input_shapes = []
|
|
253
|
+
|
|
254
|
+
for example_input in example_inputs:
|
|
255
|
+
new_inp = example_input.to(
|
|
256
|
+
device="cuda:0" if half_precision else "cpu",
|
|
257
|
+
dtype=torch.float16 if half_precision else torch.float32,
|
|
258
|
+
)
|
|
259
|
+
new_inp = new_inp.unsqueeze(0).repeat(batch_size, *(1 for x in new_inp.shape))
|
|
260
|
+
model_input_tensors.append(new_inp)
|
|
261
|
+
model_input_shapes.append(new_inp[0].shape)
|
|
262
|
+
|
|
263
|
+
model_inputs = (model_input_tensors, [model_input_shapes])
|
|
264
|
+
else:
|
|
265
|
+
new_inp = example_inputs.to(
|
|
266
|
+
device="cuda:0" if half_precision else "cpu",
|
|
267
|
+
dtype=torch.float16 if half_precision else torch.float32,
|
|
268
|
+
)
|
|
269
|
+
new_inp = new_inp.unsqueeze(0).repeat(batch_size, *(1 for x in new_inp.shape))
|
|
270
|
+
model_inputs = ([new_inp], [new_inp[0].shape])
|
|
271
|
+
else:
|
|
272
|
+
model_inputs = extract_torch_model_inputs(model, input_shapes, half_precision)
|
|
273
|
+
|
|
216
274
|
if model_inputs is None:
|
|
217
275
|
return None
|
|
218
276
|
|
|
@@ -266,6 +324,8 @@ def export_onnx_model(
|
|
|
266
324
|
|
|
267
325
|
if isinstance(inp, list):
|
|
268
326
|
inp = tuple(inp) # onnx doesn't like lists representing tuples of inputs
|
|
327
|
+
elif isinstance(inp, torch.Tensor):
|
|
328
|
+
inp = (inp,)
|
|
269
329
|
|
|
270
330
|
if isinstance(inp, dict):
|
|
271
331
|
raise ValueError("ONNX export does not support model with dict inputs")
|
|
@@ -290,6 +350,8 @@ def export_onnx_model(
|
|
|
290
350
|
onnx_config=onnx_config,
|
|
291
351
|
input_shapes=input_shapes,
|
|
292
352
|
input_names=input_names,
|
|
353
|
+
rtol=rtol,
|
|
354
|
+
atol=atol,
|
|
293
355
|
)
|
|
294
356
|
|
|
295
357
|
if not is_export_ok:
|
|
@@ -324,6 +386,8 @@ def _safe_export_half_precision_onnx(
|
|
|
324
386
|
onnx_config: DictConfig,
|
|
325
387
|
input_shapes: list[Any],
|
|
326
388
|
input_names: list[str],
|
|
389
|
+
rtol: float = 0.01,
|
|
390
|
+
atol: float = 5e-3,
|
|
327
391
|
) -> bool:
|
|
328
392
|
"""Check that the exported half precision ONNX model does not contain NaN values. If it does, attempt to export
|
|
329
393
|
the model with a more stable export and overwrite the original model.
|
|
@@ -335,6 +399,8 @@ def _safe_export_half_precision_onnx(
|
|
|
335
399
|
onnx_config: ONNX export configuration
|
|
336
400
|
input_shapes: Input shapes for the model
|
|
337
401
|
input_names: Input names for the model
|
|
402
|
+
rtol: Relative tolerance to evaluate the model
|
|
403
|
+
atol: Absolute tolerance to evaluate the model
|
|
338
404
|
|
|
339
405
|
Returns:
|
|
340
406
|
True if the model is stable or it was possible to export a more stable model, False otherwise.
|
|
@@ -381,7 +447,7 @@ def _safe_export_half_precision_onnx(
|
|
|
381
447
|
with open(os.devnull, "w") as f, contextlib.redirect_stdout(f):
|
|
382
448
|
# This function prints a lot of information that is not useful for the user
|
|
383
449
|
model_fp16 = auto_convert_mixed_precision(
|
|
384
|
-
model_fp32, test_data, rtol=
|
|
450
|
+
model_fp32, test_data, rtol=rtol, atol=atol, keep_io_types=False
|
|
385
451
|
)
|
|
386
452
|
onnx.save(model_fp16, export_model_path)
|
|
387
453
|
|
|
@@ -431,6 +497,9 @@ def export_model(
|
|
|
431
497
|
input_shapes: list[Any] | None = None,
|
|
432
498
|
idx_to_class: dict[int, str] | None = None,
|
|
433
499
|
pytorch_model_type: Literal["backbone", "model"] = "model",
|
|
500
|
+
example_inputs: list[Any] | tuple[Any, ...] | torch.Tensor | None = None,
|
|
501
|
+
rtol: float = 0.01,
|
|
502
|
+
atol: float = 5e-3,
|
|
434
503
|
) -> tuple[dict[str, Any], dict[str, str]]:
|
|
435
504
|
"""Generate deployment models for the task.
|
|
436
505
|
|
|
@@ -443,6 +512,9 @@ def export_model(
|
|
|
443
512
|
idx_to_class: Mapping from class index to class name
|
|
444
513
|
pytorch_model_type: Type of the pytorch model config to be exported, if it's backbone on disk we will save the
|
|
445
514
|
config.backbone config, otherwise we will save the config.model
|
|
515
|
+
example_inputs: If provided use this to evaluate the model instead of generating random inputs
|
|
516
|
+
rtol: Relative tolerance for the ONNX safe export in fp16
|
|
517
|
+
atol: Absolute tolerance for the ONNX safe export in fp16
|
|
446
518
|
|
|
447
519
|
Returns:
|
|
448
520
|
If the model is exported successfully, return a dictionary containing information about the exported model and
|
|
@@ -468,6 +540,7 @@ def export_model(
|
|
|
468
540
|
input_shapes=input_shapes,
|
|
469
541
|
output_path=export_folder,
|
|
470
542
|
half_precision=half_precision,
|
|
543
|
+
example_inputs=example_inputs,
|
|
471
544
|
)
|
|
472
545
|
|
|
473
546
|
if out is None:
|
|
@@ -495,6 +568,9 @@ def export_model(
|
|
|
495
568
|
onnx_config=config.export.onnx,
|
|
496
569
|
input_shapes=input_shapes,
|
|
497
570
|
half_precision=half_precision,
|
|
571
|
+
example_inputs=example_inputs,
|
|
572
|
+
rtol=rtol,
|
|
573
|
+
atol=atol,
|
|
498
574
|
)
|
|
499
575
|
|
|
500
576
|
if out is None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/base/sklearn_classification_patch.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/imagenette/classification/base.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/datamodule/generic/oxford_pet/segmentation/base.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/classification/classification.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/segmentation/smp_evaluation.yaml
RENAMED
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/base/segmentation/smp_multiclass.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/inference.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mnist/anomaly/patchcore.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/efficient_ad.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/inference.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/mvtec/anomaly/patchcore.yaml
RENAMED
|
File without changes
|
{quadra-2.3.3 → quadra-2.4.0}/quadra/configs/experiment/generic/oxford_pet/segmentation/smp.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|