ultralytics-opencv-headless 8.4.9__tar.gz → 8.4.11__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.
- {ultralytics_opencv_headless-8.4.9/ultralytics_opencv_headless.egg-info → ultralytics_opencv_headless-8.4.11}/PKG-INFO +1 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_cuda.py +2 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_exports.py +4 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_python.py +1 -2
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/__init__.py +1 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/exporter.py +9 -4
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/session.py +3 -5
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/predict.py +3 -2
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/model.py +1 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/autobackend.py +1 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/__init__.py +1 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/platform.py +50 -38
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/checks.py +11 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/instance.py +14 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/loss.py +0 -4
- ultralytics_opencv_headless-8.4.11/ultralytics/utils/uploads.py +115 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11/ultralytics_opencv_headless.egg-info}/PKG-INFO +1 -1
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/SOURCES.txt +1 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/LICENSE +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/README.md +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/pyproject.toml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/setup.cfg +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/conftest.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_cli.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_engine.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_integrations.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_solutions.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/TT100K.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco12-formats.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/kitti.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-cls.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-obb.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-p2.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-p6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yoloe-26-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yoloe-26.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/annotator.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/augment.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/base.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/build.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/converter.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/dataset.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/loaders.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/split.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/split_dota.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/utils.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/model.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/predictor.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/results.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/trainer.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/tuner.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/validator.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/auth.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/utils.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/model.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/build.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/build_sam3.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/model.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/decoder.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/encoder.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/geometry_encoders.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/maskformer_segmentation.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/model_misc.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/necks.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/sam3_image.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/text_encoder_ve.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/vitdet.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/vl_combiner.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/tasks.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/text_model.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/optim/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/optim/muon.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/py.typed +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/config.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/similarity_search.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/track.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/autodevice.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/cpu.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/dist.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/downloads.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/errors.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/events.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/__init__.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/engine.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/imx.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/tensorflow.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/files.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/git.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/logger.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/metrics.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/nms.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/ops.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/patches.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/plotting.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/tal.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/tqdm.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/triton.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/tuner.py +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/dependency_links.txt +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/entry_points.txt +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/requires.txt +0 -0
- {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultralytics-opencv-headless
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.11
|
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
|
@@ -12,7 +12,7 @@ from ultralytics import YOLO
|
|
|
12
12
|
from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
|
|
13
13
|
from ultralytics.utils import ASSETS, IS_JETSON, WEIGHTS_DIR
|
|
14
14
|
from ultralytics.utils.autodevice import GPUInfo
|
|
15
|
-
from ultralytics.utils.checks import check_amp
|
|
15
|
+
from ultralytics.utils.checks import check_amp, check_tensorrt
|
|
16
16
|
from ultralytics.utils.torch_utils import TORCH_1_13
|
|
17
17
|
|
|
18
18
|
# Try to find idle devices if CUDA is available
|
|
@@ -91,6 +91,7 @@ def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
|
|
|
91
91
|
)
|
|
92
92
|
def test_export_engine_matrix(task, dynamic, int8, half, batch):
|
|
93
93
|
"""Test YOLO model export to TensorRT format for various configurations and run inference."""
|
|
94
|
+
check_tensorrt()
|
|
94
95
|
import tensorrt as trt
|
|
95
96
|
|
|
96
97
|
is_trt10 = int(trt.__version__.split(".", 1)[0]) >= 10
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_exports.py
RENAMED
|
@@ -35,6 +35,10 @@ def test_export_onnx(end2end):
|
|
|
35
35
|
def test_export_openvino(end2end):
|
|
36
36
|
"""Test YOLO export to OpenVINO format for model inference compatibility."""
|
|
37
37
|
file = YOLO(MODEL).export(format="openvino", imgsz=32, end2end=end2end)
|
|
38
|
+
if WINDOWS:
|
|
39
|
+
# Ensure a unique export path per test to prevent OpenVINO file writes
|
|
40
|
+
file = Path(file)
|
|
41
|
+
file = file.rename(file.with_stem(f"{file.stem}-{uuid.uuid4()}"))
|
|
38
42
|
YOLO(file)(SOURCE, imgsz=32) # exported model inference
|
|
39
43
|
|
|
40
44
|
|
|
@@ -66,7 +70,6 @@ def test_export_openvino_matrix(task, dynamic, int8, half, batch, nms, end2end):
|
|
|
66
70
|
)
|
|
67
71
|
if WINDOWS:
|
|
68
72
|
# Use unique filenames due to Windows file permissions bug possibly due to latent threaded use
|
|
69
|
-
# See https://github.com/ultralytics/ultralytics/actions/runs/8957949304/job/24601616830?pr=10423
|
|
70
73
|
file = Path(file)
|
|
71
74
|
file = file.rename(file.with_stem(f"{file.stem}-{uuid.uuid4()}"))
|
|
72
75
|
YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32, batch=batch) # exported model inference
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_python.py
RENAMED
|
@@ -702,8 +702,7 @@ def test_yoloe(tmp_path):
|
|
|
702
702
|
# Predict
|
|
703
703
|
# text-prompts
|
|
704
704
|
model = YOLO(WEIGHTS_DIR / "yoloe-11s-seg.pt")
|
|
705
|
-
|
|
706
|
-
model.set_classes(names, model.get_text_pe(names))
|
|
705
|
+
model.set_classes(["person", "bus"])
|
|
707
706
|
model(SOURCE, conf=0.01)
|
|
708
707
|
|
|
709
708
|
from ultralytics import YOLOE
|
|
@@ -102,6 +102,7 @@ from ultralytics.utils import (
|
|
|
102
102
|
callbacks,
|
|
103
103
|
colorstr,
|
|
104
104
|
get_default_args,
|
|
105
|
+
is_jetson,
|
|
105
106
|
)
|
|
106
107
|
from ultralytics.utils.checks import (
|
|
107
108
|
IS_PYTHON_3_10,
|
|
@@ -110,6 +111,7 @@ from ultralytics.utils.checks import (
|
|
|
110
111
|
check_executorch_requirements,
|
|
111
112
|
check_imgsz,
|
|
112
113
|
check_requirements,
|
|
114
|
+
check_tensorrt,
|
|
113
115
|
check_version,
|
|
114
116
|
is_intel,
|
|
115
117
|
is_sudo_available,
|
|
@@ -1002,12 +1004,15 @@ class Exporter:
|
|
|
1002
1004
|
assert self.im.device.type != "cpu", "export running on CPU but must be on GPU, i.e. use 'device=0'"
|
|
1003
1005
|
f_onnx = self.export_onnx() # run before TRT import https://github.com/ultralytics/ultralytics/issues/7016
|
|
1004
1006
|
|
|
1007
|
+
# Force re-install TensorRT on CUDA 13 ARM devices to 10.15.x versions for RT-DETR exports
|
|
1008
|
+
# https://github.com/ultralytics/ultralytics/issues/22873
|
|
1009
|
+
if is_jetson(jetpack=7):
|
|
1010
|
+
check_tensorrt("10.15")
|
|
1011
|
+
|
|
1005
1012
|
try:
|
|
1006
1013
|
import tensorrt as trt
|
|
1007
1014
|
except ImportError:
|
|
1008
|
-
|
|
1009
|
-
cuda_version = torch.version.cuda.split(".")[0]
|
|
1010
|
-
check_requirements(f"tensorrt-cu{cuda_version}>7.0.0,!=10.1.0")
|
|
1015
|
+
check_tensorrt()
|
|
1011
1016
|
import tensorrt as trt
|
|
1012
1017
|
check_version(trt.__version__, ">=7.0.0", hard=True)
|
|
1013
1018
|
check_version(trt.__version__, "!=10.1.0", msg="https://github.com/ultralytics/ultralytics/pull/14239")
|
|
@@ -1395,7 +1400,7 @@ class Exporter:
|
|
|
1395
1400
|
nms.confidenceThresholdInputFeatureName = "confidenceThreshold"
|
|
1396
1401
|
nms.iouThreshold = self.args.iou
|
|
1397
1402
|
nms.confidenceThreshold = self.args.conf
|
|
1398
|
-
nms.pickTop.perClass =
|
|
1403
|
+
nms.pickTop.perClass = not self.args.agnostic_nms
|
|
1399
1404
|
nms.stringClassLabels.vector.extend(names.values())
|
|
1400
1405
|
nms_model = ct.models.MLModel(nms_spec)
|
|
1401
1406
|
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/session.py
RENAMED
|
@@ -12,7 +12,7 @@ from urllib.parse import parse_qs, urlparse
|
|
|
12
12
|
|
|
13
13
|
from ultralytics import __version__
|
|
14
14
|
from ultralytics.hub.utils import HELP_MSG, HUB_WEB_ROOT, PREFIX
|
|
15
|
-
from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, TQDM, checks
|
|
15
|
+
from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, TQDM, checks
|
|
16
16
|
from ultralytics.utils.errors import HUBModelError
|
|
17
17
|
|
|
18
18
|
AGENT_NAME = f"python-{__version__}-colab" if IS_COLAB else f"python-{__version__}-local"
|
|
@@ -121,7 +121,7 @@ class HUBTrainingSession:
|
|
|
121
121
|
"""
|
|
122
122
|
self.model = self.client.model(model_id)
|
|
123
123
|
if not self.model.data: # then model does not exist
|
|
124
|
-
raise
|
|
124
|
+
raise HUBModelError(f"❌ Model not found: '{model_id}'. Verify the model ID is correct.")
|
|
125
125
|
|
|
126
126
|
self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
|
|
127
127
|
if self.model.is_trained():
|
|
@@ -167,10 +167,8 @@ class HUBTrainingSession:
|
|
|
167
167
|
|
|
168
168
|
self.model.create_model(payload)
|
|
169
169
|
|
|
170
|
-
# Model could not be created
|
|
171
|
-
# TODO: improve error handling
|
|
172
170
|
if not self.model.id:
|
|
173
|
-
|
|
171
|
+
raise HUBModelError(f"❌ Failed to create model '{self.filename}' on Ultralytics HUB. Please try again.")
|
|
174
172
|
|
|
175
173
|
self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
|
|
176
174
|
|
|
@@ -2619,7 +2619,7 @@ class SAM3VideoSemanticPredictor(SAM3SemanticPredictor):
|
|
|
2619
2619
|
if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list
|
|
2620
2620
|
orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
|
|
2621
2621
|
|
|
2622
|
-
names =
|
|
2622
|
+
names = self.model.names if self.model.names != "visual" else {}
|
|
2623
2623
|
if len(curr_obj_ids) == 0:
|
|
2624
2624
|
pred_masks, pred_boxes = None, torch.zeros((0, 7), device=self.device)
|
|
2625
2625
|
else:
|
|
@@ -2638,6 +2638,8 @@ class SAM3VideoSemanticPredictor(SAM3SemanticPredictor):
|
|
|
2638
2638
|
pred_boxes = torch.cat(
|
|
2639
2639
|
[pred_boxes, pred_ids[keep][:, None], pred_scores[keep][..., None], pred_cls[keep][..., None]], dim=-1
|
|
2640
2640
|
)
|
|
2641
|
+
if pred_boxes.shape[0]:
|
|
2642
|
+
names = names or dict(enumerate(str(i) for i in range(pred_boxes[:, 6].int().max() + 1)))
|
|
2641
2643
|
if pred_masks.shape[0] > 1:
|
|
2642
2644
|
tracker_scores = torch.tensor(
|
|
2643
2645
|
[
|
|
@@ -2657,7 +2659,6 @@ class SAM3VideoSemanticPredictor(SAM3SemanticPredictor):
|
|
|
2657
2659
|
background_value=0,
|
|
2658
2660
|
).squeeze(1)
|
|
2659
2661
|
) > 0
|
|
2660
|
-
names = self.model.names or dict(enumerate(str(i) for i in range(pred_boxes[:, 6].int().max())))
|
|
2661
2662
|
|
|
2662
2663
|
results = []
|
|
2663
2664
|
for masks, boxes, orig_img, img_path in zip([pred_masks], [pred_boxes], orig_imgs, self.batch[0]):
|
|
@@ -426,5 +426,6 @@ class YOLOE(Model):
|
|
|
426
426
|
self.predictor = None # reset predictor
|
|
427
427
|
elif isinstance(self.predictor, yolo.yoloe.YOLOEVPDetectPredictor):
|
|
428
428
|
self.predictor = None # reset predictor if no visual prompts
|
|
429
|
+
self.overrides["agnostic_nms"] = True # use agnostic nms for YOLOE default
|
|
429
430
|
|
|
430
431
|
return super().predict(source, stream, **kwargs)
|
|
@@ -339,7 +339,7 @@ class AutoBackend(nn.Module):
|
|
|
339
339
|
batch = metadata["batch"]
|
|
340
340
|
dynamic = metadata.get("args", {}).get("dynamic", dynamic)
|
|
341
341
|
# OpenVINO inference modes are 'LATENCY', 'THROUGHPUT' (not recommended), or 'CUMULATIVE_THROUGHPUT'
|
|
342
|
-
inference_mode = "CUMULATIVE_THROUGHPUT" if batch > 1
|
|
342
|
+
inference_mode = "CUMULATIVE_THROUGHPUT" if dynamic and batch > 1 else "LATENCY"
|
|
343
343
|
ov_compiled_model = core.compile_model(
|
|
344
344
|
ov_model,
|
|
345
345
|
device_name=device_name,
|
|
@@ -762,7 +762,7 @@ def is_jetson(jetpack=None) -> bool:
|
|
|
762
762
|
if jetson and jetpack:
|
|
763
763
|
try:
|
|
764
764
|
content = open("/etc/nv_tegra_release").read()
|
|
765
|
-
version_map = {4: "R32", 5: "R35", 6: "R36"} # JetPack to L4T major version mapping
|
|
765
|
+
version_map = {4: "R32", 5: "R35", 6: "R36", 7: "R38"} # JetPack to L4T major version mapping
|
|
766
766
|
return jetpack in version_map and version_map[jetpack] in content
|
|
767
767
|
except Exception:
|
|
768
768
|
return False
|
|
@@ -9,7 +9,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|
|
9
9
|
from pathlib import Path
|
|
10
10
|
from time import time
|
|
11
11
|
|
|
12
|
-
from ultralytics.utils import ENVIRONMENT, GIT, LOGGER, PYTHON_VERSION, RANK, SETTINGS, TESTS_RUNNING, colorstr
|
|
12
|
+
from ultralytics.utils import ENVIRONMENT, GIT, LOGGER, PYTHON_VERSION, RANK, SETTINGS, TESTS_RUNNING, Retry, colorstr
|
|
13
13
|
|
|
14
14
|
PREFIX = colorstr("Platform: ")
|
|
15
15
|
|
|
@@ -148,22 +148,30 @@ def _interp_plot(plot, n=101):
|
|
|
148
148
|
return result
|
|
149
149
|
|
|
150
150
|
|
|
151
|
-
def _send(event, data, project, name, model_id=None):
|
|
152
|
-
"""Send event to Platform endpoint
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
151
|
+
def _send(event, data, project, name, model_id=None, retry=2):
|
|
152
|
+
"""Send event to Platform endpoint with retry logic."""
|
|
153
|
+
payload = {"event": event, "project": project, "name": name, "data": data}
|
|
154
|
+
if model_id:
|
|
155
|
+
payload["modelId"] = model_id
|
|
156
|
+
|
|
157
|
+
@Retry(times=retry, delay=1)
|
|
158
|
+
def post():
|
|
157
159
|
r = requests.post(
|
|
158
160
|
f"{PLATFORM_API_URL}/training/metrics",
|
|
159
161
|
json=payload,
|
|
160
162
|
headers={"Authorization": f"Bearer {_api_key}"},
|
|
161
|
-
timeout=
|
|
163
|
+
timeout=30,
|
|
162
164
|
)
|
|
165
|
+
if 400 <= r.status_code < 500 and r.status_code not in {408, 429}:
|
|
166
|
+
LOGGER.warning(f"{PREFIX}Failed to send {event}: {r.status_code} {r.reason}")
|
|
167
|
+
return None # Don't retry client errors (except 408 timeout, 429 rate limit)
|
|
163
168
|
r.raise_for_status()
|
|
164
169
|
return r.json()
|
|
170
|
+
|
|
171
|
+
try:
|
|
172
|
+
return post()
|
|
165
173
|
except Exception as e:
|
|
166
|
-
LOGGER.debug(f"
|
|
174
|
+
LOGGER.debug(f"{PREFIX}Failed to send {event}: {e}")
|
|
167
175
|
return None
|
|
168
176
|
|
|
169
177
|
|
|
@@ -172,40 +180,38 @@ def _send_async(event, data, project, name, model_id=None):
|
|
|
172
180
|
_executor.submit(_send, event, data, project, name, model_id)
|
|
173
181
|
|
|
174
182
|
|
|
175
|
-
def _upload_model(model_path, project, name):
|
|
183
|
+
def _upload_model(model_path, project, name, progress=False, retry=1):
|
|
176
184
|
"""Upload model checkpoint to Platform via signed URL."""
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
185
|
+
from ultralytics.utils.uploads import safe_upload
|
|
186
|
+
|
|
187
|
+
model_path = Path(model_path)
|
|
188
|
+
if not model_path.exists():
|
|
189
|
+
LOGGER.warning(f"{PREFIX}Model file not found: {model_path}")
|
|
190
|
+
return None
|
|
181
191
|
|
|
182
|
-
|
|
183
|
-
|
|
192
|
+
# Get signed upload URL from Platform
|
|
193
|
+
@Retry(times=3, delay=2)
|
|
194
|
+
def get_signed_url():
|
|
195
|
+
r = requests.post(
|
|
184
196
|
f"{PLATFORM_API_URL}/models/upload",
|
|
185
197
|
json={"project": project, "name": name, "filename": model_path.name},
|
|
186
198
|
headers={"Authorization": f"Bearer {_api_key}"},
|
|
187
|
-
timeout=
|
|
199
|
+
timeout=30,
|
|
188
200
|
)
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
# Upload to GCS
|
|
193
|
-
with open(model_path, "rb") as f:
|
|
194
|
-
requests.put(
|
|
195
|
-
data["uploadUrl"],
|
|
196
|
-
data=f,
|
|
197
|
-
headers={"Content-Type": "application/octet-stream"},
|
|
198
|
-
timeout=600, # 10 min timeout for large models
|
|
199
|
-
).raise_for_status()
|
|
200
|
-
|
|
201
|
-
# url = f"{PLATFORM_URL}/{project}/{name}"
|
|
202
|
-
# LOGGER.info(f"{PREFIX}Model uploaded to {url}")
|
|
203
|
-
return data.get("gcsPath")
|
|
201
|
+
r.raise_for_status()
|
|
202
|
+
return r.json()
|
|
204
203
|
|
|
204
|
+
try:
|
|
205
|
+
data = get_signed_url()
|
|
205
206
|
except Exception as e:
|
|
206
|
-
LOGGER.
|
|
207
|
+
LOGGER.warning(f"{PREFIX}Failed to get upload URL: {e}")
|
|
207
208
|
return None
|
|
208
209
|
|
|
210
|
+
# Upload to GCS using safe_upload with retry logic and optional progress bar
|
|
211
|
+
if safe_upload(file=model_path, url=data["uploadUrl"], retry=retry, progress=progress):
|
|
212
|
+
return data.get("gcsPath")
|
|
213
|
+
return None
|
|
214
|
+
|
|
209
215
|
|
|
210
216
|
def _upload_model_async(model_path, project, name):
|
|
211
217
|
"""Upload model asynchronously using bounded thread pool."""
|
|
@@ -306,7 +312,7 @@ def on_pretrain_routine_start(trainer):
|
|
|
306
312
|
# Note: model_info is sent later in on_fit_epoch_end (epoch 0) when the model is actually loaded
|
|
307
313
|
train_args = {k: str(v) for k, v in vars(trainer.args).items()}
|
|
308
314
|
|
|
309
|
-
# Send synchronously to get modelId for subsequent webhooks
|
|
315
|
+
# Send synchronously to get modelId for subsequent webhooks (critical, more retries)
|
|
310
316
|
response = _send(
|
|
311
317
|
"training_started",
|
|
312
318
|
{
|
|
@@ -317,9 +323,12 @@ def on_pretrain_routine_start(trainer):
|
|
|
317
323
|
},
|
|
318
324
|
project,
|
|
319
325
|
name,
|
|
326
|
+
retry=4,
|
|
320
327
|
)
|
|
321
328
|
if response and response.get("modelId"):
|
|
322
329
|
trainer._platform_model_id = response["modelId"]
|
|
330
|
+
else:
|
|
331
|
+
LOGGER.warning(f"{PREFIX}Failed to register training session - metrics may not sync to Platform")
|
|
323
332
|
|
|
324
333
|
|
|
325
334
|
def on_fit_epoch_end(trainer):
|
|
@@ -404,12 +413,14 @@ def on_train_end(trainer):
|
|
|
404
413
|
trainer._platform_console_logger.stop_capture()
|
|
405
414
|
trainer._platform_console_logger = None
|
|
406
415
|
|
|
407
|
-
# Upload best model (blocking to ensure it completes)
|
|
408
|
-
|
|
416
|
+
# Upload best model (blocking with progress bar to ensure it completes)
|
|
417
|
+
gcs_path = None
|
|
409
418
|
model_size = None
|
|
410
419
|
if trainer.best and Path(trainer.best).exists():
|
|
411
420
|
model_size = Path(trainer.best).stat().st_size
|
|
412
|
-
|
|
421
|
+
gcs_path = _upload_model(trainer.best, project, name, progress=True, retry=3)
|
|
422
|
+
if not gcs_path:
|
|
423
|
+
LOGGER.warning(f"{PREFIX}Model will not be available for download on Platform (upload failed)")
|
|
413
424
|
|
|
414
425
|
# Collect plots from trainer and validator, deduplicating by type
|
|
415
426
|
plots_by_type = {}
|
|
@@ -432,7 +443,7 @@ def on_train_end(trainer):
|
|
|
432
443
|
"metrics": {**trainer.metrics, "fitness": trainer.fitness},
|
|
433
444
|
"bestEpoch": getattr(trainer, "best_epoch", trainer.epoch),
|
|
434
445
|
"bestFitness": trainer.best_fitness,
|
|
435
|
-
"modelPath":
|
|
446
|
+
"modelPath": gcs_path, # Only send GCS path, not local path
|
|
436
447
|
"modelSize": model_size,
|
|
437
448
|
},
|
|
438
449
|
"classNames": class_names,
|
|
@@ -441,6 +452,7 @@ def on_train_end(trainer):
|
|
|
441
452
|
project,
|
|
442
453
|
name,
|
|
443
454
|
getattr(trainer, "_platform_model_id", None),
|
|
455
|
+
retry=4, # Critical, more retries
|
|
444
456
|
)
|
|
445
457
|
url = f"{PLATFORM_URL}/{project}/{name}"
|
|
446
458
|
LOGGER.info(f"{PREFIX}View results at {url}")
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/checks.py
RENAMED
|
@@ -507,6 +507,17 @@ def check_executorch_requirements():
|
|
|
507
507
|
check_requirements("numpy<=2.3.5")
|
|
508
508
|
|
|
509
509
|
|
|
510
|
+
def check_tensorrt(min_version: str = "7.0.0"):
|
|
511
|
+
"""Check and install TensorRT requirements including platform-specific dependencies.
|
|
512
|
+
|
|
513
|
+
Args:
|
|
514
|
+
min_version (str): Minimum supported TensorRT version (default: "7.0.0").
|
|
515
|
+
"""
|
|
516
|
+
if LINUX:
|
|
517
|
+
cuda_version = torch.version.cuda.split(".")[0]
|
|
518
|
+
check_requirements(f"tensorrt-cu{cuda_version}>={min_version},!=10.1.0")
|
|
519
|
+
|
|
520
|
+
|
|
510
521
|
def check_torchvision():
|
|
511
522
|
"""Check the installed versions of PyTorch and Torchvision to ensure they're compatible.
|
|
512
523
|
|
|
@@ -408,7 +408,7 @@ class Instances:
|
|
|
408
408
|
good = self.bbox_areas > 0
|
|
409
409
|
if not all(good):
|
|
410
410
|
self._bboxes = self._bboxes[good]
|
|
411
|
-
if len(self.segments):
|
|
411
|
+
if self.segments is not None and len(self.segments):
|
|
412
412
|
self.segments = self.segments[good]
|
|
413
413
|
if self.keypoints is not None:
|
|
414
414
|
self.keypoints = self.keypoints[good]
|
|
@@ -482,3 +482,16 @@ class Instances:
|
|
|
482
482
|
def bboxes(self) -> np.ndarray:
|
|
483
483
|
"""Return bounding boxes."""
|
|
484
484
|
return self._bboxes.bboxes
|
|
485
|
+
|
|
486
|
+
def __repr__(self) -> str:
|
|
487
|
+
"""Return a string representation of the Instances object."""
|
|
488
|
+
# Map private to public names and include direct attributes
|
|
489
|
+
attr_map = {"_bboxes": "bboxes"}
|
|
490
|
+
parts = []
|
|
491
|
+
for key, value in self.__dict__.items():
|
|
492
|
+
name = attr_map.get(key, key)
|
|
493
|
+
if name == "bboxes":
|
|
494
|
+
value = self.bboxes # Use the property
|
|
495
|
+
if value is not None:
|
|
496
|
+
parts.append(f"{name}={value!r}")
|
|
497
|
+
return "Instances({})".format("\n".join(parts))
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/loss.py
RENAMED
|
@@ -1193,8 +1193,6 @@ class TVPDetectLoss:
|
|
|
1193
1193
|
|
|
1194
1194
|
def loss(self, preds: dict[str, torch.Tensor], batch: dict[str, torch.Tensor]) -> tuple[torch.Tensor, torch.Tensor]:
|
|
1195
1195
|
"""Calculate the loss for text-visual prompt detection."""
|
|
1196
|
-
assert self.ori_reg_max == self.vp_criterion.reg_max # TODO: remove it
|
|
1197
|
-
|
|
1198
1196
|
if self.ori_nc == preds["scores"].shape[1]:
|
|
1199
1197
|
loss = torch.zeros(3, device=self.vp_criterion.device, requires_grad=True)
|
|
1200
1198
|
return loss, loss.detach()
|
|
@@ -1230,8 +1228,6 @@ class TVPSegmentLoss(TVPDetectLoss):
|
|
|
1230
1228
|
|
|
1231
1229
|
def loss(self, preds: Any, batch: dict[str, torch.Tensor]) -> tuple[torch.Tensor, torch.Tensor]:
|
|
1232
1230
|
"""Calculate the loss for text-visual prompt detection."""
|
|
1233
|
-
assert self.ori_reg_max == self.vp_criterion.reg_max # TODO: remove it
|
|
1234
|
-
|
|
1235
1231
|
if self.ori_nc == preds["scores"].shape[1]:
|
|
1236
1232
|
loss = torch.zeros(4, device=self.vp_criterion.device, requires_grad=True)
|
|
1237
1233
|
return loss, loss.detach()
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
|
2
|
+
"""Upload utilities for Ultralytics, mirroring downloads.py patterns."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import os
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
from time import sleep
|
|
9
|
+
|
|
10
|
+
from ultralytics.utils import LOGGER, TQDM
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class _ProgressReader:
|
|
14
|
+
"""File wrapper that reports read progress for upload monitoring."""
|
|
15
|
+
|
|
16
|
+
def __init__(self, file_path, pbar):
|
|
17
|
+
self.file = open(file_path, "rb")
|
|
18
|
+
self.pbar = pbar
|
|
19
|
+
self._size = os.path.getsize(file_path)
|
|
20
|
+
|
|
21
|
+
def read(self, size=-1):
|
|
22
|
+
"""Read data and update progress bar."""
|
|
23
|
+
data = self.file.read(size)
|
|
24
|
+
if data and self.pbar:
|
|
25
|
+
self.pbar.update(len(data))
|
|
26
|
+
return data
|
|
27
|
+
|
|
28
|
+
def __len__(self):
|
|
29
|
+
"""Return file size for Content-Length header."""
|
|
30
|
+
return self._size
|
|
31
|
+
|
|
32
|
+
def close(self):
|
|
33
|
+
"""Close the file."""
|
|
34
|
+
self.file.close()
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def safe_upload(
|
|
38
|
+
file: str | Path,
|
|
39
|
+
url: str,
|
|
40
|
+
headers: dict | None = None,
|
|
41
|
+
retry: int = 2,
|
|
42
|
+
timeout: int = 600,
|
|
43
|
+
progress: bool = False,
|
|
44
|
+
) -> bool:
|
|
45
|
+
"""Upload a file to a URL with retry logic and optional progress bar.
|
|
46
|
+
|
|
47
|
+
Args:
|
|
48
|
+
file (str | Path): Path to the file to upload.
|
|
49
|
+
url (str): The URL endpoint to upload the file to (e.g., signed GCS URL).
|
|
50
|
+
headers (dict, optional): Additional headers to include in the request.
|
|
51
|
+
retry (int, optional): Number of retry attempts on failure (default: 2 for 3 total attempts).
|
|
52
|
+
timeout (int, optional): Request timeout in seconds.
|
|
53
|
+
progress (bool, optional): Whether to display a progress bar during upload.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
(bool): True if upload succeeded, False otherwise.
|
|
57
|
+
|
|
58
|
+
Examples:
|
|
59
|
+
>>> from ultralytics.utils.uploads import safe_upload
|
|
60
|
+
>>> success = safe_upload("model.pt", "https://storage.googleapis.com/...", progress=True)
|
|
61
|
+
"""
|
|
62
|
+
import requests
|
|
63
|
+
|
|
64
|
+
file = Path(file)
|
|
65
|
+
if not file.exists():
|
|
66
|
+
raise FileNotFoundError(f"File not found: {file}")
|
|
67
|
+
|
|
68
|
+
file_size = file.stat().st_size
|
|
69
|
+
desc = f"Uploading {file.name}"
|
|
70
|
+
|
|
71
|
+
# Prepare headers (Content-Length set automatically from file size)
|
|
72
|
+
upload_headers = {"Content-Type": "application/octet-stream"}
|
|
73
|
+
if headers:
|
|
74
|
+
upload_headers.update(headers)
|
|
75
|
+
|
|
76
|
+
last_error = None
|
|
77
|
+
for attempt in range(retry + 1):
|
|
78
|
+
pbar = None
|
|
79
|
+
reader = None
|
|
80
|
+
try:
|
|
81
|
+
if progress:
|
|
82
|
+
pbar = TQDM(total=file_size, desc=desc, unit="B", unit_scale=True, unit_divisor=1024)
|
|
83
|
+
reader = _ProgressReader(file, pbar)
|
|
84
|
+
|
|
85
|
+
r = requests.put(url, data=reader, headers=upload_headers, timeout=timeout)
|
|
86
|
+
r.raise_for_status()
|
|
87
|
+
reader.close()
|
|
88
|
+
reader = None # Prevent double-close in finally
|
|
89
|
+
if pbar:
|
|
90
|
+
pbar.close()
|
|
91
|
+
pbar = None
|
|
92
|
+
LOGGER.info(f"Uploaded {file.name} ✅")
|
|
93
|
+
return True
|
|
94
|
+
|
|
95
|
+
except requests.exceptions.HTTPError as e:
|
|
96
|
+
status = e.response.status_code if e.response is not None else 0
|
|
97
|
+
if 400 <= status < 500 and status not in {408, 429}:
|
|
98
|
+
LOGGER.warning(f"{desc} failed: {status} {getattr(e.response, 'reason', '')}")
|
|
99
|
+
return False
|
|
100
|
+
last_error = f"HTTP {status}"
|
|
101
|
+
except Exception as e:
|
|
102
|
+
last_error = str(e)
|
|
103
|
+
finally:
|
|
104
|
+
if reader:
|
|
105
|
+
reader.close()
|
|
106
|
+
if pbar:
|
|
107
|
+
pbar.close()
|
|
108
|
+
|
|
109
|
+
if attempt < retry:
|
|
110
|
+
wait_time = 2 ** (attempt + 1)
|
|
111
|
+
LOGGER.warning(f"{desc} failed ({last_error}), retrying {attempt + 1}/{retry} in {wait_time}s...")
|
|
112
|
+
sleep(wait_time)
|
|
113
|
+
|
|
114
|
+
LOGGER.warning(f"{desc} failed after {retry + 1} attempts: {last_error}")
|
|
115
|
+
return False
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: ultralytics-opencv-headless
|
|
3
|
-
Version: 8.4.
|
|
3
|
+
Version: 8.4.11
|
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
|
@@ -297,6 +297,7 @@ ultralytics/utils/torch_utils.py
|
|
|
297
297
|
ultralytics/utils/tqdm.py
|
|
298
298
|
ultralytics/utils/triton.py
|
|
299
299
|
ultralytics/utils/tuner.py
|
|
300
|
+
ultralytics/utils/uploads.py
|
|
300
301
|
ultralytics/utils/callbacks/__init__.py
|
|
301
302
|
ultralytics/utils/callbacks/base.py
|
|
302
303
|
ultralytics/utils/callbacks/clearml.py
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_engine.py
RENAMED
|
File without changes
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_integrations.py
RENAMED
|
File without changes
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_solutions.py
RENAMED
|
File without changes
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/assets/bus.jpg
RENAMED
|
File without changes
|
|
File without changes
|
{ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/__init__.py
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
|