dgenerate-ultralytics-headless 8.3.167__tar.gz → 8.3.169__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.
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_cli.py +1 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_python.py +4 -3
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/__init__.py +1 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/default.yaml +1 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/exporter.py +0 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/model.py +3 -2
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/predict.py +1 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/val.py +22 -38
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/val.py +1 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/val.py +28 -20
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/val.py +16 -31
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/val.py +11 -46
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/val.py +12 -40
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/region_counter.py +2 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/similarity_search.py +2 -1
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/solutions.py +30 -63
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/streamlit_inference.py +57 -14
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/metrics.py +103 -17
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/plotting.py +2 -2
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/LICENSE +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/README.md +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/pyproject.toml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/setup.cfg +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/conftest.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_cuda.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_engine.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_exports.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_integrations.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/assets/bus.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/assets/zidane.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/annotator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/augment.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/converter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/dataset.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/loaders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/download_weights.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/get_coco.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/split.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/split_dota.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/predictor.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/results.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/trainer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/tuner.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/validator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/auth.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/google/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/session.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/amg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/blocks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/decoders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/encoders.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/sam.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/world/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/world/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/world/train_world.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/autobackend.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/activation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/block.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/conv.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/head.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/tasks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/text_model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/ai_gym.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/analytics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/config.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/distance_calculation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/heatmap.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/instance_segmentation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/object_blurrer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/object_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/object_cropper.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/parking_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/queue_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/security_alarm.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/speed_estimation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/trackzone.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/vision_eye.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/basetrack.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/bot_sort.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/byte_tracker.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/track.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/gmc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/matching.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/autobatch.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/autodevice.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/benchmarks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/clearml.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/comet.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/dvc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/hub.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/neptune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/raytune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/wb.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/checks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/dist.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/downloads.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/errors.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/export.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/files.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/instance.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/patches.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/tal.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/torch_utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/triton.py +0 -0
- {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/tuner.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dgenerate-ultralytics-headless
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.169
|
4
4
|
Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: dgenerate-ultralytics-headless
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.169
|
4
4
|
Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
{dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_cli.py
RENAMED
@@ -39,7 +39,7 @@ def test_val(task: str, model: str, data: str) -> None:
|
|
39
39
|
@pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
|
40
40
|
def test_predict(task: str, model: str, data: str) -> None:
|
41
41
|
"""Test YOLO prediction on provided sample assets for specified task and model."""
|
42
|
-
run(f"yolo {task} predict model={model} source={ASSETS} imgsz=32 save save_crop save_txt")
|
42
|
+
run(f"yolo {task} predict model={model} source={ASSETS} imgsz=32 save save_crop save_txt visualize")
|
43
43
|
|
44
44
|
|
45
45
|
@pytest.mark.parametrize("model", MODELS)
|
@@ -201,11 +201,12 @@ def test_track_stream(model):
|
|
201
201
|
model.track(video_url, imgsz=160, tracker=custom_yaml)
|
202
202
|
|
203
203
|
|
204
|
-
@pytest.mark.parametrize("task,
|
205
|
-
def test_val(task: str,
|
204
|
+
@pytest.mark.parametrize("task,weight,data", TASK_MODEL_DATA)
|
205
|
+
def test_val(task: str, weight: str, data: str) -> None:
|
206
206
|
"""Test the validation mode of the YOLO model."""
|
207
|
+
model = YOLO(weight)
|
207
208
|
for plots in {True, False}: # Test both cases i.e. plots=True and plots=False
|
208
|
-
metrics =
|
209
|
+
metrics = model.val(data=data, imgsz=32, plots=plots)
|
209
210
|
metrics.to_df()
|
210
211
|
metrics.to_csv()
|
211
212
|
metrics.to_xml()
|
@@ -58,7 +58,7 @@ plots: True # (bool) save plots and images during train/val
|
|
58
58
|
source: # (str, optional) source directory for images or videos
|
59
59
|
vid_stride: 1 # (int) video frame-rate stride
|
60
60
|
stream_buffer: False # (bool) buffer all streaming frames (True) or return the most recent frame (False)
|
61
|
-
visualize: False # (bool) visualize model features
|
61
|
+
visualize: False # (bool) visualize model features (predict) or visualize TP, FP, FN (val)
|
62
62
|
augment: False # (bool) apply image augmentation to prediction sources
|
63
63
|
agnostic_nms: False # (bool) class-agnostic NMS
|
64
64
|
classes: # (int | list[int], optional) filter results by class, i.e. classes=0, or classes=[0,2,3]
|
@@ -1014,7 +1014,6 @@ class Exporter:
|
|
1014
1014
|
enable_batchmatmul_unfold=True, # fix lower no. of detected objects on GPU delegate
|
1015
1015
|
output_signaturedefs=True, # fix error with Attention block group convolution
|
1016
1016
|
disable_group_convolution=self.args.format in {"tfjs", "edgetpu"}, # fix error with group convolution
|
1017
|
-
optimization_for_gpu_delegate=True,
|
1018
1017
|
)
|
1019
1018
|
YAML.save(f / "metadata.yaml", self.metadata) # add metadata.yaml
|
1020
1019
|
|
@@ -907,8 +907,9 @@ class Model(torch.nn.Module):
|
|
907
907
|
if hasattr(self.model, "names"):
|
908
908
|
return check_class_names(self.model.names)
|
909
909
|
if not self.predictor: # export formats will not have predictor defined until predict() is called
|
910
|
-
|
911
|
-
|
910
|
+
predictor = self._smart_load("predictor")(overrides=self.overrides, _callbacks=self.callbacks)
|
911
|
+
predictor.setup_model(model=self.model, verbose=False) # do not mess with self.predictor.model args
|
912
|
+
return predictor.model.names
|
912
913
|
return self.predictor.model.names
|
913
914
|
|
914
915
|
@property
|
@@ -67,6 +67,7 @@ class RTDETRPredictor(BasePredictor):
|
|
67
67
|
if self.args.classes is not None:
|
68
68
|
idx = (cls == torch.tensor(self.args.classes, device=cls.device)).any(1) & idx
|
69
69
|
pred = torch.cat([bbox, max_score, cls], dim=-1)[idx] # filter
|
70
|
+
pred = pred[pred[:, 4].argsort(descending=True)][: self.args.max_det]
|
70
71
|
oh, ow = orig_img.shape[:2]
|
71
72
|
pred[..., [0, 2]] *= ow # scale x coordinates to original width
|
72
73
|
pred[..., [1, 3]] *= oh # scale y coordinates to original height
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
2
|
|
3
|
+
from pathlib import Path
|
3
4
|
from typing import Any, Dict, List, Tuple, Union
|
4
5
|
|
5
6
|
import torch
|
@@ -186,45 +187,28 @@ class RTDETRValidator(DetectionValidator):
|
|
186
187
|
|
187
188
|
return [{"bboxes": x[:, :4], "conf": x[:, 4], "cls": x[:, 5]} for x in outputs]
|
188
189
|
|
189
|
-
def
|
190
|
+
def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
|
190
191
|
"""
|
191
|
-
|
192
|
+
Serialize YOLO predictions to COCO json format.
|
192
193
|
|
193
194
|
Args:
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
Returns:
|
198
|
-
(Dict[str, Any]): Prepared batch with transformed annotations containing cls, bboxes,
|
199
|
-
ori_shape, imgsz, and ratio_pad.
|
200
|
-
"""
|
201
|
-
idx = batch["batch_idx"] == si
|
202
|
-
cls = batch["cls"][idx].squeeze(-1)
|
203
|
-
bbox = batch["bboxes"][idx]
|
204
|
-
ori_shape = batch["ori_shape"][si]
|
205
|
-
imgsz = batch["img"].shape[2:]
|
206
|
-
ratio_pad = batch["ratio_pad"][si]
|
207
|
-
if len(cls):
|
208
|
-
bbox = ops.xywh2xyxy(bbox) # target boxes
|
209
|
-
bbox[..., [0, 2]] *= ori_shape[1] # native-space pred
|
210
|
-
bbox[..., [1, 3]] *= ori_shape[0] # native-space pred
|
211
|
-
return {"cls": cls, "bboxes": bbox, "ori_shape": ori_shape, "imgsz": imgsz, "ratio_pad": ratio_pad}
|
212
|
-
|
213
|
-
def _prepare_pred(self, pred: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
|
195
|
+
predn (Dict[str, torch.Tensor]): Predictions dictionary containing 'bboxes', 'conf', and 'cls' keys
|
196
|
+
with bounding box coordinates, confidence scores, and class predictions.
|
197
|
+
pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
|
214
198
|
"""
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
199
|
+
stem = Path(pbatch["im_file"]).stem
|
200
|
+
image_id = int(stem) if stem.isnumeric() else stem
|
201
|
+
box = predn["bboxes"].clone()
|
202
|
+
box[..., [0, 2]] *= pbatch["ori_shape"][1] / self.args.imgsz # native-space pred
|
203
|
+
box[..., [1, 3]] *= pbatch["ori_shape"][0] / self.args.imgsz # native-space pred
|
204
|
+
box = ops.xyxy2xywh(box) # xywh
|
205
|
+
box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
|
206
|
+
for b, s, c in zip(box.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
|
207
|
+
self.jdict.append(
|
208
|
+
{
|
209
|
+
"image_id": image_id,
|
210
|
+
"category_id": self.class_map[int(c)],
|
211
|
+
"bbox": [round(x, 3) for x in b],
|
212
|
+
"score": round(s, 5),
|
213
|
+
}
|
214
|
+
)
|
@@ -83,7 +83,7 @@ class ClassificationValidator(BaseValidator):
|
|
83
83
|
self.nc = len(model.names)
|
84
84
|
self.pred = []
|
85
85
|
self.targets = []
|
86
|
-
self.confusion_matrix = ConfusionMatrix(names=
|
86
|
+
self.confusion_matrix = ConfusionMatrix(names=model.names)
|
87
87
|
|
88
88
|
def preprocess(self, batch: Dict[str, Any]) -> Dict[str, Any]:
|
89
89
|
"""Preprocess input batch by moving data to device and converting to appropriate dtype."""
|
@@ -97,8 +97,8 @@ class DetectionValidator(BaseValidator):
|
|
97
97
|
self.end2end = getattr(model, "end2end", False)
|
98
98
|
self.seen = 0
|
99
99
|
self.jdict = []
|
100
|
-
self.metrics.names =
|
101
|
-
self.confusion_matrix = ConfusionMatrix(names=
|
100
|
+
self.metrics.names = model.names
|
101
|
+
self.confusion_matrix = ConfusionMatrix(names=model.names, save_matches=self.args.plots and self.args.visualize)
|
102
102
|
|
103
103
|
def get_desc(self) -> str:
|
104
104
|
"""Return a formatted string summarizing class metrics of YOLO model."""
|
@@ -147,28 +147,28 @@ class DetectionValidator(BaseValidator):
|
|
147
147
|
ratio_pad = batch["ratio_pad"][si]
|
148
148
|
if len(cls):
|
149
149
|
bbox = ops.xywh2xyxy(bbox) * torch.tensor(imgsz, device=self.device)[[1, 0, 1, 0]] # target boxes
|
150
|
-
|
151
|
-
|
150
|
+
return {
|
151
|
+
"cls": cls,
|
152
|
+
"bboxes": bbox,
|
153
|
+
"ori_shape": ori_shape,
|
154
|
+
"imgsz": imgsz,
|
155
|
+
"ratio_pad": ratio_pad,
|
156
|
+
"im_file": batch["im_file"][si],
|
157
|
+
}
|
152
158
|
|
153
|
-
def _prepare_pred(self, pred: Dict[str, torch.Tensor]
|
159
|
+
def _prepare_pred(self, pred: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]:
|
154
160
|
"""
|
155
161
|
Prepare predictions for evaluation against ground truth.
|
156
162
|
|
157
163
|
Args:
|
158
164
|
pred (Dict[str, torch.Tensor]): Post-processed predictions from the model.
|
159
|
-
pbatch (Dict[str, Any]): Prepared batch information.
|
160
165
|
|
161
166
|
Returns:
|
162
167
|
(Dict[str, torch.Tensor]): Prepared predictions in native space.
|
163
168
|
"""
|
164
|
-
cls = pred["cls"]
|
165
169
|
if self.args.single_cls:
|
166
|
-
cls *= 0
|
167
|
-
|
168
|
-
bboxes = ops.scale_boxes(
|
169
|
-
pbatch["imgsz"], pred["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"]
|
170
|
-
) # native-space pred
|
171
|
-
return {"bboxes": bboxes, "conf": pred["conf"], "cls": cls}
|
170
|
+
pred["cls"] *= 0
|
171
|
+
return pred
|
172
172
|
|
173
173
|
def update_metrics(self, preds: List[Dict[str, torch.Tensor]], batch: Dict[str, Any]) -> None:
|
174
174
|
"""
|
@@ -181,7 +181,7 @@ class DetectionValidator(BaseValidator):
|
|
181
181
|
for si, pred in enumerate(preds):
|
182
182
|
self.seen += 1
|
183
183
|
pbatch = self._prepare_batch(si, batch)
|
184
|
-
predn = self._prepare_pred(pred
|
184
|
+
predn = self._prepare_pred(pred)
|
185
185
|
|
186
186
|
cls = pbatch["cls"].cpu().numpy()
|
187
187
|
no_pred = len(predn["cls"]) == 0
|
@@ -197,19 +197,21 @@ class DetectionValidator(BaseValidator):
|
|
197
197
|
# Evaluate
|
198
198
|
if self.args.plots:
|
199
199
|
self.confusion_matrix.process_batch(predn, pbatch, conf=self.args.conf)
|
200
|
+
if self.args.visualize:
|
201
|
+
self.confusion_matrix.plot_matches(batch["img"][si], pbatch["im_file"], self.save_dir)
|
200
202
|
|
201
203
|
if no_pred:
|
202
204
|
continue
|
203
205
|
|
204
206
|
# Save
|
205
207
|
if self.args.save_json:
|
206
|
-
self.pred_to_json(predn,
|
208
|
+
self.pred_to_json(predn, pbatch)
|
207
209
|
if self.args.save_txt:
|
208
210
|
self.save_one_txt(
|
209
211
|
predn,
|
210
212
|
self.args.save_conf,
|
211
213
|
pbatch["ori_shape"],
|
212
|
-
self.save_dir / "labels" / f"{Path(
|
214
|
+
self.save_dir / "labels" / f"{Path(pbatch['im_file']).stem}.txt",
|
213
215
|
)
|
214
216
|
|
215
217
|
def finalize_metrics(self) -> None:
|
@@ -360,18 +362,24 @@ class DetectionValidator(BaseValidator):
|
|
360
362
|
boxes=torch.cat([predn["bboxes"], predn["conf"].unsqueeze(-1), predn["cls"].unsqueeze(-1)], dim=1),
|
361
363
|
).save_txt(file, save_conf=save_conf)
|
362
364
|
|
363
|
-
def pred_to_json(self, predn: Dict[str, torch.Tensor],
|
365
|
+
def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
|
364
366
|
"""
|
365
367
|
Serialize YOLO predictions to COCO json format.
|
366
368
|
|
367
369
|
Args:
|
368
370
|
predn (Dict[str, torch.Tensor]): Predictions dictionary containing 'bboxes', 'conf', and 'cls' keys
|
369
371
|
with bounding box coordinates, confidence scores, and class predictions.
|
370
|
-
|
372
|
+
pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
|
371
373
|
"""
|
372
|
-
stem = Path(
|
374
|
+
stem = Path(pbatch["im_file"]).stem
|
373
375
|
image_id = int(stem) if stem.isnumeric() else stem
|
374
|
-
box = ops.
|
376
|
+
box = ops.scale_boxes(
|
377
|
+
pbatch["imgsz"],
|
378
|
+
predn["bboxes"].clone(),
|
379
|
+
pbatch["ori_shape"],
|
380
|
+
ratio_pad=pbatch["ratio_pad"],
|
381
|
+
)
|
382
|
+
box = ops.xyxy2xywh(box) # xywh
|
375
383
|
box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
|
376
384
|
for b, s, c in zip(box.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
|
377
385
|
self.jdict.append(
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
2
|
|
3
3
|
from pathlib import Path
|
4
|
-
from typing import Any, Dict, List, Tuple
|
4
|
+
from typing import Any, Dict, List, Tuple
|
5
5
|
|
6
6
|
import numpy as np
|
7
7
|
import torch
|
@@ -67,6 +67,7 @@ class OBBValidator(DetectionValidator):
|
|
67
67
|
super().init_metrics(model)
|
68
68
|
val = self.data.get(self.args.split, "") # validation path
|
69
69
|
self.is_dota = isinstance(val, str) and "DOTA" in val # check if dataset is DOTA format
|
70
|
+
self.confusion_matrix.task = "obb" # set confusion matrix task to 'obb'
|
70
71
|
|
71
72
|
def _process_batch(self, preds: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]) -> Dict[str, np.ndarray]:
|
72
73
|
"""
|
@@ -132,33 +133,14 @@ class OBBValidator(DetectionValidator):
|
|
132
133
|
ratio_pad = batch["ratio_pad"][si]
|
133
134
|
if len(cls):
|
134
135
|
bbox[..., :4].mul_(torch.tensor(imgsz, device=self.device)[[1, 0, 1, 0]]) # target boxes
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
input dimensions to the original image dimensions using the provided batch information.
|
144
|
-
|
145
|
-
Args:
|
146
|
-
pred (Dict[str, torch.Tensor]): Prediction dictionary containing bounding box coordinates and other information.
|
147
|
-
pbatch (Dict[str, Any]): Dictionary containing batch information with keys:
|
148
|
-
- imgsz (tuple): Model input image size.
|
149
|
-
- ori_shape (tuple): Original image shape.
|
150
|
-
- ratio_pad (tuple): Ratio and padding information for scaling.
|
151
|
-
|
152
|
-
Returns:
|
153
|
-
(Dict[str, torch.Tensor]): Scaled prediction dictionary with bounding boxes in original image dimensions.
|
154
|
-
"""
|
155
|
-
cls = pred["cls"]
|
156
|
-
if self.args.single_cls:
|
157
|
-
cls *= 0
|
158
|
-
bboxes = ops.scale_boxes(
|
159
|
-
pbatch["imgsz"], pred["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"], xywh=True
|
160
|
-
) # native-space pred
|
161
|
-
return {"bboxes": bboxes, "conf": pred["conf"], "cls": cls}
|
136
|
+
return {
|
137
|
+
"cls": cls,
|
138
|
+
"bboxes": bbox,
|
139
|
+
"ori_shape": ori_shape,
|
140
|
+
"imgsz": imgsz,
|
141
|
+
"ratio_pad": ratio_pad,
|
142
|
+
"im_file": batch["im_file"][si],
|
143
|
+
}
|
162
144
|
|
163
145
|
def plot_predictions(self, batch: Dict[str, Any], preds: List[torch.Tensor], ni: int) -> None:
|
164
146
|
"""
|
@@ -180,23 +162,26 @@ class OBBValidator(DetectionValidator):
|
|
180
162
|
p["bboxes"][:, :4] = ops.xywh2xyxy(p["bboxes"][:, :4]) # convert to xyxy format for plotting
|
181
163
|
super().plot_predictions(batch, preds, ni) # plot bboxes
|
182
164
|
|
183
|
-
def pred_to_json(self, predn: Dict[str, torch.Tensor],
|
165
|
+
def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
|
184
166
|
"""
|
185
167
|
Convert YOLO predictions to COCO JSON format with rotated bounding box information.
|
186
168
|
|
187
169
|
Args:
|
188
170
|
predn (Dict[str, torch.Tensor]): Prediction dictionary containing 'bboxes', 'conf', and 'cls' keys
|
189
171
|
with bounding box coordinates, confidence scores, and class predictions.
|
190
|
-
|
172
|
+
pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
|
191
173
|
|
192
174
|
Notes:
|
193
175
|
This method processes rotated bounding box predictions and converts them to both rbox format
|
194
176
|
(x, y, w, h, angle) and polygon format (x1, y1, x2, y2, x3, y3, x4, y4) before adding them
|
195
177
|
to the JSON dictionary.
|
196
178
|
"""
|
197
|
-
stem = Path(
|
179
|
+
stem = Path(pbatch["im_file"]).stem
|
198
180
|
image_id = int(stem) if stem.isnumeric() else stem
|
199
181
|
rbox = predn["bboxes"]
|
182
|
+
rbox = ops.scale_boxes(
|
183
|
+
pbatch["imgsz"], predn["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"], xywh=True
|
184
|
+
) # native-space pred
|
200
185
|
poly = ops.xywhr2xyxyxyxy(rbox).view(-1, 8)
|
201
186
|
for r, b, s, c in zip(rbox.tolist(), poly.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
|
202
187
|
self.jdict.append(
|
@@ -167,34 +167,9 @@ class PoseValidator(DetectionValidator):
|
|
167
167
|
kpts = kpts.clone()
|
168
168
|
kpts[..., 0] *= w
|
169
169
|
kpts[..., 1] *= h
|
170
|
-
kpts = ops.scale_coords(pbatch["imgsz"], kpts, pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"])
|
171
170
|
pbatch["keypoints"] = kpts
|
172
171
|
return pbatch
|
173
172
|
|
174
|
-
def _prepare_pred(self, pred: Dict[str, Any], pbatch: Dict[str, Any]) -> Dict[str, Any]:
|
175
|
-
"""
|
176
|
-
Prepare and scale keypoints in predictions for pose processing.
|
177
|
-
|
178
|
-
This method extends the parent class's _prepare_pred method to handle keypoint scaling. It first calls
|
179
|
-
the parent method to get the basic prediction boxes, then extracts and scales the keypoint coordinates
|
180
|
-
to match the original image dimensions.
|
181
|
-
|
182
|
-
Args:
|
183
|
-
pred (Dict[str, torch.Tensor]): Post-processed predictions from the model.
|
184
|
-
pbatch (Dict[str, Any]): Processed batch dictionary containing image information including:
|
185
|
-
- imgsz: Image size used for inference
|
186
|
-
- ori_shape: Original image shape
|
187
|
-
- ratio_pad: Ratio and padding information for coordinate scaling
|
188
|
-
|
189
|
-
Returns:
|
190
|
-
(Dict[str, Any]): Processed prediction dictionary with keypoints scaled to original image dimensions.
|
191
|
-
"""
|
192
|
-
predn = super()._prepare_pred(pred, pbatch)
|
193
|
-
predn["keypoints"] = ops.scale_coords(
|
194
|
-
pbatch["imgsz"], pred.get("keypoints").clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"]
|
195
|
-
)
|
196
|
-
return predn
|
197
|
-
|
198
173
|
def _process_batch(self, preds: Dict[str, torch.Tensor], batch: Dict[str, Any]) -> Dict[str, np.ndarray]:
|
199
174
|
"""
|
200
175
|
Return correct prediction matrix by computing Intersection over Union (IoU) between detections and ground truth.
|
@@ -249,7 +224,7 @@ class PoseValidator(DetectionValidator):
|
|
249
224
|
keypoints=predn["keypoints"],
|
250
225
|
).save_txt(file, save_conf=save_conf)
|
251
226
|
|
252
|
-
def pred_to_json(self, predn: Dict[str, torch.Tensor],
|
227
|
+
def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
|
253
228
|
"""
|
254
229
|
Convert YOLO predictions to COCO JSON format.
|
255
230
|
|
@@ -259,32 +234,22 @@ class PoseValidator(DetectionValidator):
|
|
259
234
|
Args:
|
260
235
|
predn (Dict[str, torch.Tensor]): Prediction dictionary containing 'bboxes', 'conf', 'cls',
|
261
236
|
and 'keypoints' tensors.
|
262
|
-
|
237
|
+
pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
|
263
238
|
|
264
239
|
Notes:
|
265
240
|
The method extracts the image ID from the filename stem (either as an integer if numeric, or as a string),
|
266
241
|
converts bounding boxes from xyxy to xywh format, and adjusts coordinates from center to top-left corner
|
267
242
|
before saving to the JSON dictionary.
|
268
243
|
"""
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
):
|
279
|
-
self.jdict.append(
|
280
|
-
{
|
281
|
-
"image_id": image_id,
|
282
|
-
"category_id": self.class_map[int(c)],
|
283
|
-
"bbox": [round(x, 3) for x in b],
|
284
|
-
"keypoints": k,
|
285
|
-
"score": round(s, 5),
|
286
|
-
}
|
287
|
-
)
|
244
|
+
super().pred_to_json(predn, pbatch)
|
245
|
+
kpts = ops.scale_coords(
|
246
|
+
pbatch["imgsz"],
|
247
|
+
predn["keypoints"].clone(),
|
248
|
+
pbatch["ori_shape"],
|
249
|
+
ratio_pad=pbatch["ratio_pad"],
|
250
|
+
)
|
251
|
+
for i, k in enumerate(kpts.flatten(1, 2).tolist()):
|
252
|
+
self.jdict[-len(kpts) + i]["keypoints"] = k # keypoints
|
288
253
|
|
289
254
|
def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
|
290
255
|
"""Evaluate object detection model using COCO JSON format."""
|
@@ -135,29 +135,6 @@ class SegmentationValidator(DetectionValidator):
|
|
135
135
|
prepared_batch["masks"] = batch["masks"][midx]
|
136
136
|
return prepared_batch
|
137
137
|
|
138
|
-
def _prepare_pred(self, pred: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
|
139
|
-
"""
|
140
|
-
Prepare predictions for evaluation by processing bounding boxes and masks.
|
141
|
-
|
142
|
-
Args:
|
143
|
-
pred (Dict[str, torch.Tensor]): Post-processed predictions from the model.
|
144
|
-
pbatch (Dict[str, Any]): Prepared batch information.
|
145
|
-
|
146
|
-
Returns:
|
147
|
-
Dict[str, torch.Tensor]: Processed bounding box predictions.
|
148
|
-
"""
|
149
|
-
predn = super()._prepare_pred(pred, pbatch)
|
150
|
-
predn["masks"] = pred["masks"]
|
151
|
-
if self.args.save_json and len(predn["masks"]):
|
152
|
-
coco_masks = torch.as_tensor(pred["masks"], dtype=torch.uint8)
|
153
|
-
coco_masks = ops.scale_image(
|
154
|
-
coco_masks.permute(1, 2, 0).contiguous().cpu().numpy(),
|
155
|
-
pbatch["ori_shape"],
|
156
|
-
ratio_pad=pbatch["ratio_pad"],
|
157
|
-
)
|
158
|
-
predn["coco_masks"] = coco_masks
|
159
|
-
return predn
|
160
|
-
|
161
138
|
def _process_batch(self, preds: Dict[str, torch.Tensor], batch: Dict[str, Any]) -> Dict[str, np.ndarray]:
|
162
139
|
"""
|
163
140
|
Compute correct prediction matrix for a batch based on bounding boxes and optional masks.
|
@@ -233,13 +210,13 @@ class SegmentationValidator(DetectionValidator):
|
|
233
210
|
masks=torch.as_tensor(predn["masks"], dtype=torch.uint8),
|
234
211
|
).save_txt(file, save_conf=save_conf)
|
235
212
|
|
236
|
-
def pred_to_json(self, predn: torch.Tensor,
|
213
|
+
def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
|
237
214
|
"""
|
238
215
|
Save one JSON result for COCO evaluation.
|
239
216
|
|
240
217
|
Args:
|
241
218
|
predn (Dict[str, torch.Tensor]): Predictions containing bboxes, masks, confidence scores, and classes.
|
242
|
-
|
219
|
+
pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
|
243
220
|
|
244
221
|
Examples:
|
245
222
|
>>> result = {"image_id": 42, "category_id": 18, "bbox": [258.15, 41.29, 348.26, 243.78], "score": 0.236}
|
@@ -252,23 +229,18 @@ class SegmentationValidator(DetectionValidator):
|
|
252
229
|
rle["counts"] = rle["counts"].decode("utf-8")
|
253
230
|
return rle
|
254
231
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
232
|
+
coco_masks = torch.as_tensor(predn["masks"], dtype=torch.uint8)
|
233
|
+
coco_masks = ops.scale_image(
|
234
|
+
coco_masks.permute(1, 2, 0).contiguous().cpu().numpy(),
|
235
|
+
pbatch["ori_shape"],
|
236
|
+
ratio_pad=pbatch["ratio_pad"],
|
237
|
+
)
|
238
|
+
pred_masks = np.transpose(coco_masks, (2, 0, 1))
|
260
239
|
with ThreadPool(NUM_THREADS) as pool:
|
261
240
|
rles = pool.map(single_encode, pred_masks)
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
"image_id": image_id,
|
266
|
-
"category_id": self.class_map[int(c)],
|
267
|
-
"bbox": [round(x, 3) for x in b],
|
268
|
-
"score": round(s, 5),
|
269
|
-
"segmentation": rles[i],
|
270
|
-
}
|
271
|
-
)
|
241
|
+
super().pred_to_json(predn, pbatch)
|
242
|
+
for i, r in enumerate(rles):
|
243
|
+
self.jdict[-len(rles) + i]["segmentation"] = r # segmentation
|
272
244
|
|
273
245
|
def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
|
274
246
|
"""Return COCO-style instance segmentation evaluation metrics."""
|
@@ -118,12 +118,13 @@ class RegionCounter(BaseSolution):
|
|
118
118
|
x1, y1, x2, y2 = map(int, region["polygon"].bounds)
|
119
119
|
pts = [(x1, y1), (x2, y1), (x2, y2), (x1, y2)]
|
120
120
|
annotator.draw_region(pts, region["region_color"], self.line_width * 2)
|
121
|
-
annotator.
|
121
|
+
annotator.adaptive_label(
|
122
122
|
[x1, y1, x2, y2],
|
123
123
|
label=str(region["counts"]),
|
124
124
|
color=region["region_color"],
|
125
125
|
txt_color=region["text_color"],
|
126
126
|
margin=self.line_width * 4,
|
127
|
+
shape="rect",
|
127
128
|
)
|
128
129
|
region["counts"] = 0 # Reset for next frame
|
129
130
|
plot_im = annotator.result()
|
@@ -8,7 +8,6 @@ import numpy as np
|
|
8
8
|
from PIL import Image
|
9
9
|
|
10
10
|
from ultralytics.data.utils import IMG_FORMATS
|
11
|
-
from ultralytics.nn.text_model import build_text_model
|
12
11
|
from ultralytics.utils import LOGGER
|
13
12
|
from ultralytics.utils.checks import check_requirements
|
14
13
|
from ultralytics.utils.torch_utils import select_device
|
@@ -48,6 +47,8 @@ class VisualAISearch:
|
|
48
47
|
|
49
48
|
def __init__(self, **kwargs: Any) -> None:
|
50
49
|
"""Initialize the VisualAISearch class with FAISS index and CLIP model."""
|
50
|
+
from ultralytics.nn.text_model import build_text_model
|
51
|
+
|
51
52
|
check_requirements("faiss-cpu")
|
52
53
|
|
53
54
|
self.faiss = __import__("faiss")
|