dgenerate-ultralytics-headless 8.3.180__tar.gz → 8.3.181__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.180 → dgenerate_ultralytics_headless-8.3.181}/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -1
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/__init__.py +1 -1
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/loaders.py +4 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/utils.py +1 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/blocks.py +7 -4
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/decoders.py +1 -1
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/encoders.py +8 -8
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/sam.py +5 -8
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/utils.py +1 -1
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/predict.py +21 -16
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/detect/val.py +17 -9
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/model.py +5 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/obb/val.py +9 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/pose/val.py +13 -6
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/segment/val.py +12 -7
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/yoloe/predict.py +3 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/block.py +1 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/streamlit_inference.py +10 -3
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/LICENSE +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/README.md +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/pyproject.toml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/setup.cfg +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/conftest.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_cli.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_cuda.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_engine.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_exports.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_integrations.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_python.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/assets/bus.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/assets/zidane.jpg +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/default.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/annotator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/augment.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/converter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/dataset.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/scripts/download_weights.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/scripts/get_coco.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/split.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/data/split_dota.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/exporter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/predictor.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/results.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/trainer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/tuner.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/engine/validator.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/hub/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/hub/auth.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/hub/google/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/hub/session.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/hub/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/fastsam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/fastsam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/fastsam/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/fastsam/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/fastsam/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/nas/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/nas/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/nas/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/nas/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/rtdetr/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/rtdetr/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/rtdetr/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/rtdetr/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/rtdetr/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/amg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/build.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/sam/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/classify/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/classify/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/classify/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/detect/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/detect/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/obb/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/obb/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/pose/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/pose/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/segment/predict.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/segment/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/world/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/world/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/world/train_world.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/autobackend.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/activation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/conv.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/head.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/transformer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/modules/utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/tasks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/nn/text_model.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/ai_gym.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/analytics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/config.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/distance_calculation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/heatmap.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/instance_segmentation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/object_blurrer.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/object_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/object_cropper.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/parking_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/queue_management.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/region_counter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/security_alarm.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/similarity_search.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/solutions.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/speed_estimation.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/trackzone.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/solutions/vision_eye.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/basetrack.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/bot_sort.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/byte_tracker.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/track.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/utils/gmc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/trackers/utils/matching.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/autobatch.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/autodevice.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/benchmarks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/__init__.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/base.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/clearml.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/comet.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/dvc.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/hub.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/neptune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/raytune.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/callbacks/wb.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/checks.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/dist.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/downloads.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/errors.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/export.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/files.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/instance.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/loss.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/metrics.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/ops.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/patches.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/plotting.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/tal.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/torch_utils.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/ultralytics/utils/triton.py +0 -0
- {dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/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.181
|
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.181
|
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>
|
@@ -355,9 +355,10 @@ class LoadImagesAndVideos:
|
|
355
355
|
channels (int): Number of image channels (1 for grayscale, 3 for RGB).
|
356
356
|
"""
|
357
357
|
parent = None
|
358
|
-
if isinstance(path, str) and Path(path).suffix
|
359
|
-
parent = Path(path).parent
|
360
|
-
path = Path(path).
|
358
|
+
if isinstance(path, str) and Path(path).suffix in {".txt", ".csv"}: # txt/csv file with source paths
|
359
|
+
parent, content = Path(path).parent, Path(path).read_text()
|
360
|
+
path = content.splitlines() if Path(path).suffix == ".txt" else content.split(",") # list of sources
|
361
|
+
path = [p.strip() for p in path]
|
361
362
|
files = []
|
362
363
|
for p in sorted(path) if isinstance(path, (list, tuple)) else [path]:
|
363
364
|
a = str(Path(p).absolute()) # do not use .resolve() https://github.com/ultralytics/ultralytics/issues/2912
|
@@ -219,9 +219,7 @@ def verify_image_label(args: Tuple) -> List:
|
|
219
219
|
assert lb.min() >= -0.01, f"negative class labels {lb[lb < -0.01]}"
|
220
220
|
|
221
221
|
# All labels
|
222
|
-
if single_cls
|
223
|
-
lb[:, 0] = 0
|
224
|
-
max_cls = lb[:, 0].max() # max label count
|
222
|
+
max_cls = 0 if single_cls else lb[:, 0].max() # max label count
|
225
223
|
assert max_cls < num_cls, (
|
226
224
|
f"Label class {int(max_cls)} exceeds dataset class count {num_cls}. "
|
227
225
|
f"Possible class labels are 0-{num_cls - 1}"
|
@@ -3,7 +3,7 @@
|
|
3
3
|
import copy
|
4
4
|
import math
|
5
5
|
from functools import partial
|
6
|
-
from typing import
|
6
|
+
from typing import Optional, Tuple, Type, Union
|
7
7
|
|
8
8
|
import numpy as np
|
9
9
|
import torch
|
@@ -856,8 +856,11 @@ class PositionEmbeddingRandom(nn.Module):
|
|
856
856
|
def forward(self, size: Tuple[int, int]) -> torch.Tensor:
|
857
857
|
"""Generate positional encoding for a grid using random spatial frequencies."""
|
858
858
|
h, w = size
|
859
|
-
|
860
|
-
|
859
|
+
grid = torch.ones(
|
860
|
+
(h, w),
|
861
|
+
device=self.positional_encoding_gaussian_matrix.device,
|
862
|
+
dtype=self.positional_encoding_gaussian_matrix.dtype,
|
863
|
+
)
|
861
864
|
y_embed = grid.cumsum(dim=0) - 0.5
|
862
865
|
x_embed = grid.cumsum(dim=1) - 0.5
|
863
866
|
y_embed = y_embed / h
|
@@ -871,7 +874,7 @@ class PositionEmbeddingRandom(nn.Module):
|
|
871
874
|
coords = coords_input.clone()
|
872
875
|
coords[:, :, 0] = coords[:, :, 0] / image_size[1]
|
873
876
|
coords[:, :, 1] = coords[:, :, 1] / image_size[0]
|
874
|
-
return self._pe_encoding(coords
|
877
|
+
return self._pe_encoding(coords) # B x N x C
|
875
878
|
|
876
879
|
|
877
880
|
class Block(nn.Module):
|
@@ -423,7 +423,7 @@ class SAM2MaskDecoder(nn.Module):
|
|
423
423
|
|
424
424
|
# Upscale mask embeddings and predict masks using the mask tokens
|
425
425
|
src = src.transpose(1, 2).view(b, c, h, w)
|
426
|
-
if not self.use_high_res_features:
|
426
|
+
if not self.use_high_res_features or high_res_features is None:
|
427
427
|
upscaled_embedding = self.output_upscaling(src)
|
428
428
|
else:
|
429
429
|
dc1, ln1, act1, dc2, act2 = self.output_upscaling
|
@@ -258,8 +258,8 @@ class PromptEncoder(nn.Module):
|
|
258
258
|
"""Embed point prompts by applying positional encoding and label-specific embeddings."""
|
259
259
|
points = points + 0.5 # Shift to center of pixel
|
260
260
|
if pad:
|
261
|
-
padding_point = torch.zeros((points.shape[0], 1, 2), device=points.device)
|
262
|
-
padding_label = -torch.ones((labels.shape[0], 1), device=labels.device)
|
261
|
+
padding_point = torch.zeros((points.shape[0], 1, 2), dtype=points.dtype, device=points.device)
|
262
|
+
padding_label = -torch.ones((labels.shape[0], 1), dtype=labels.dtype, device=labels.device)
|
263
263
|
points = torch.cat([points, padding_point], dim=1)
|
264
264
|
labels = torch.cat([labels, padding_label], dim=1)
|
265
265
|
point_embedding = self.pe_layer.forward_with_coords(points, self.input_image_size)
|
@@ -300,10 +300,6 @@ class PromptEncoder(nn.Module):
|
|
300
300
|
else:
|
301
301
|
return 1
|
302
302
|
|
303
|
-
def _get_device(self) -> torch.device:
|
304
|
-
"""Return the device of the first point embedding's weight tensor."""
|
305
|
-
return self.point_embeddings[0].weight.device
|
306
|
-
|
307
303
|
def forward(
|
308
304
|
self,
|
309
305
|
points: Optional[Tuple[torch.Tensor, torch.Tensor]],
|
@@ -334,7 +330,11 @@ class PromptEncoder(nn.Module):
|
|
334
330
|
torch.Size([1, 7, 256]) torch.Size([1, 256, 64, 64])
|
335
331
|
"""
|
336
332
|
bs = self._get_batch_size(points, boxes, masks)
|
337
|
-
sparse_embeddings = torch.empty(
|
333
|
+
sparse_embeddings = torch.empty(
|
334
|
+
(bs, 0, self.embed_dim),
|
335
|
+
dtype=self.point_embeddings[0].weight.dtype,
|
336
|
+
device=self.point_embeddings[0].weight.device,
|
337
|
+
)
|
338
338
|
if points is not None:
|
339
339
|
coords, labels = points
|
340
340
|
point_embeddings = self._embed_points(coords, labels, pad=(boxes is None))
|
@@ -637,7 +637,7 @@ class FpnNeck(nn.Module):
|
|
637
637
|
lateral_features = self.convs[n - i](x)
|
638
638
|
if i in self.fpn_top_down_levels and prev_features is not None:
|
639
639
|
top_down_features = F.interpolate(
|
640
|
-
prev_features.to(dtype=
|
640
|
+
prev_features.to(dtype=x.dtype),
|
641
641
|
scale_factor=2.0,
|
642
642
|
mode=self.fpn_interp_model,
|
643
643
|
align_corners=(None if self.fpn_interp_model == "nearest" else False),
|
@@ -488,7 +488,7 @@ class SAM2Model(torch.nn.Module):
|
|
488
488
|
assert sam_point_coords.size(0) == B and sam_point_labels.size(0) == B
|
489
489
|
else:
|
490
490
|
# If no points are provide, pad with an empty point (with label -1)
|
491
|
-
sam_point_coords = torch.zeros(B, 1, 2, device=device)
|
491
|
+
sam_point_coords = torch.zeros(B, 1, 2, device=device, dtype=backbone_features.dtype)
|
492
492
|
sam_point_labels = -torch.ones(B, 1, dtype=torch.int32, device=device)
|
493
493
|
|
494
494
|
# b) Handle mask prompts
|
@@ -533,7 +533,6 @@ class SAM2Model(torch.nn.Module):
|
|
533
533
|
|
534
534
|
# convert masks from possibly bfloat16 (or float16) to float32
|
535
535
|
# (older PyTorch versions before 2.1 don't support `interpolate` on bf16)
|
536
|
-
low_res_multimasks = low_res_multimasks.float()
|
537
536
|
high_res_multimasks = F.interpolate(
|
538
537
|
low_res_multimasks,
|
539
538
|
size=(self.image_size, self.image_size),
|
@@ -560,12 +559,11 @@ class SAM2Model(torch.nn.Module):
|
|
560
559
|
if self.soft_no_obj_ptr:
|
561
560
|
lambda_is_obj_appearing = object_score_logits.sigmoid()
|
562
561
|
else:
|
563
|
-
lambda_is_obj_appearing = is_obj_appearing.
|
562
|
+
lambda_is_obj_appearing = is_obj_appearing.to(obj_ptr.dtype)
|
564
563
|
|
565
564
|
if self.fixed_no_obj_ptr:
|
566
565
|
obj_ptr = lambda_is_obj_appearing * obj_ptr
|
567
566
|
obj_ptr = obj_ptr + (1 - lambda_is_obj_appearing) * self.no_obj_ptr
|
568
|
-
|
569
567
|
return (
|
570
568
|
low_res_multimasks,
|
571
569
|
high_res_multimasks,
|
@@ -769,7 +767,7 @@ class SAM2Model(torch.nn.Module):
|
|
769
767
|
if self.add_tpos_enc_to_obj_ptrs:
|
770
768
|
t_diff_max = max_obj_ptrs_in_encoder - 1
|
771
769
|
tpos_dim = C if self.proj_tpos_enc_in_obj_ptrs else self.mem_dim
|
772
|
-
obj_pos = torch.tensor(pos_list, device=device)
|
770
|
+
obj_pos = torch.tensor(pos_list, device=device, dtype=current_vision_feats[-1].dtype)
|
773
771
|
obj_pos = get_1d_sine_pe(obj_pos / t_diff_max, dim=tpos_dim)
|
774
772
|
obj_pos = self.obj_ptr_tpos_proj(obj_pos)
|
775
773
|
obj_pos = obj_pos.unsqueeze(1).expand(-1, B, self.mem_dim)
|
@@ -834,7 +832,7 @@ class SAM2Model(torch.nn.Module):
|
|
834
832
|
# scale the raw mask logits with a temperature before applying sigmoid
|
835
833
|
binarize = self.binarize_mask_from_pts_for_mem_enc and is_mask_from_pts
|
836
834
|
if binarize and not self.training:
|
837
|
-
mask_for_mem = (pred_masks_high_res > 0).
|
835
|
+
mask_for_mem = (pred_masks_high_res > 0).to(pix_feat.dtype)
|
838
836
|
else:
|
839
837
|
# apply sigmoid on the raw mask logits to turn them into range (0, 1)
|
840
838
|
mask_for_mem = torch.sigmoid(pred_masks_high_res)
|
@@ -927,11 +925,10 @@ class SAM2Model(torch.nn.Module):
|
|
927
925
|
):
|
928
926
|
"""Run memory encoder on predicted mask to encode it into a new memory feature for future frames."""
|
929
927
|
if run_mem_encoder and self.num_maskmem > 0:
|
930
|
-
high_res_masks_for_mem_enc = high_res_masks
|
931
928
|
maskmem_features, maskmem_pos_enc = self._encode_new_memory(
|
932
929
|
current_vision_feats=current_vision_feats,
|
933
930
|
feat_sizes=feat_sizes,
|
934
|
-
pred_masks_high_res=
|
931
|
+
pred_masks_high_res=high_res_masks,
|
935
932
|
object_score_logits=object_score_logits,
|
936
933
|
is_mask_from_pts=(point_inputs is not None),
|
937
934
|
)
|
@@ -78,7 +78,7 @@ def get_1d_sine_pe(pos_inds: torch.Tensor, dim: int, temperature: float = 10000)
|
|
78
78
|
torch.Size([4, 128])
|
79
79
|
"""
|
80
80
|
pe_dim = dim // 2
|
81
|
-
dim_t = torch.arange(pe_dim, dtype=
|
81
|
+
dim_t = torch.arange(pe_dim, dtype=pos_inds.dtype, device=pos_inds.device)
|
82
82
|
dim_t = temperature ** (2 * (dim_t // 2) / pe_dim)
|
83
83
|
|
84
84
|
pos_embed = pos_inds.unsqueeze(-1) / dim_t
|
@@ -132,9 +132,9 @@ class Predictor(BasePredictor):
|
|
132
132
|
im = torch.from_numpy(im)
|
133
133
|
|
134
134
|
im = im.to(self.device)
|
135
|
-
im = im.half() if self.model.fp16 else im.float()
|
136
135
|
if not_tensor:
|
137
136
|
im = (im - self.mean) / self.std
|
137
|
+
im = im.half() if self.model.fp16 else im.float()
|
138
138
|
return im
|
139
139
|
|
140
140
|
def pre_transform(self, im):
|
@@ -251,7 +251,6 @@ class Predictor(BasePredictor):
|
|
251
251
|
labels (np.ndarray | List[int] | None): Point prompt labels with shape (N,). 1 = foreground, 0 = background.
|
252
252
|
masks (List[np.ndarray] | np.ndarray | None): Masks for the objects, where each mask is a 2D array.
|
253
253
|
multimask_output (bool): Flag to return multiple masks for ambiguous prompts.
|
254
|
-
img_idx (int): Index of the image in the batch to process.
|
255
254
|
|
256
255
|
Returns:
|
257
256
|
pred_masks (torch.Tensor): Output masks with shape (C, H, W), where C is the number of generated masks.
|
@@ -298,7 +297,7 @@ class Predictor(BasePredictor):
|
|
298
297
|
r = 1.0 if self.segment_all else min(dst_shape[0] / src_shape[0], dst_shape[1] / src_shape[1])
|
299
298
|
# Transform input prompts
|
300
299
|
if points is not None:
|
301
|
-
points = torch.as_tensor(points, dtype=
|
300
|
+
points = torch.as_tensor(points, dtype=self.torch_dtype, device=self.device)
|
302
301
|
points = points[None] if points.ndim == 1 else points
|
303
302
|
# Assuming labels are all positive if users don't pass labels.
|
304
303
|
if labels is None:
|
@@ -312,11 +311,11 @@ class Predictor(BasePredictor):
|
|
312
311
|
# (N, 2) --> (N, 1, 2), (N, ) --> (N, 1)
|
313
312
|
points, labels = points[:, None, :], labels[:, None]
|
314
313
|
if bboxes is not None:
|
315
|
-
bboxes = torch.as_tensor(bboxes, dtype=
|
314
|
+
bboxes = torch.as_tensor(bboxes, dtype=self.torch_dtype, device=self.device)
|
316
315
|
bboxes = bboxes[None] if bboxes.ndim == 1 else bboxes
|
317
316
|
bboxes *= r
|
318
317
|
if masks is not None:
|
319
|
-
masks = torch.as_tensor(masks, dtype=
|
318
|
+
masks = torch.as_tensor(masks, dtype=self.torch_dtype, device=self.device).unsqueeze(1)
|
320
319
|
return bboxes, points, labels, masks
|
321
320
|
|
322
321
|
def generate(
|
@@ -450,7 +449,8 @@ class Predictor(BasePredictor):
|
|
450
449
|
if model is None:
|
451
450
|
model = self.get_model()
|
452
451
|
model.eval()
|
453
|
-
|
452
|
+
model = model.to(device)
|
453
|
+
self.model = model.half() if self.args.half else model.float()
|
454
454
|
self.device = device
|
455
455
|
self.mean = torch.tensor([123.675, 116.28, 103.53]).view(-1, 1, 1).to(device)
|
456
456
|
self.std = torch.tensor([58.395, 57.12, 57.375]).view(-1, 1, 1).to(device)
|
@@ -459,8 +459,9 @@ class Predictor(BasePredictor):
|
|
459
459
|
self.model.pt = False
|
460
460
|
self.model.triton = False
|
461
461
|
self.model.stride = 32
|
462
|
-
self.model.fp16 =
|
462
|
+
self.model.fp16 = self.args.half
|
463
463
|
self.done_warmup = True
|
464
|
+
self.torch_dtype = torch.float16 if self.model.fp16 else torch.float32
|
464
465
|
|
465
466
|
def get_model(self):
|
466
467
|
"""Retrieve or build the Segment Anything Model (SAM) for image segmentation tasks."""
|
@@ -832,9 +833,10 @@ class SAM2Predictor(Predictor):
|
|
832
833
|
Perform inference on image features using the SAM2 model.
|
833
834
|
|
834
835
|
Args:
|
835
|
-
features (Dict[str, Any]): Extracted image
|
836
|
-
|
837
|
-
|
836
|
+
features (torch.Tensor | Dict[str, Any]): Extracted image features with shape (B, C, H, W) from the SAM2 model image encoder, it
|
837
|
+
could also be a dictionary including:
|
838
|
+
- image_embed (torch.Tensor): Image embedding with shape (B, C, H, W).
|
839
|
+
- high_res_feats (List[torch.Tensor]): List of high-resolution feature maps from the backbone, each with shape (B, C, H, W).
|
838
840
|
points (np.ndarray | List[List[float]] | None): Object location points with shape (N, 2), in pixels.
|
839
841
|
labels (np.ndarray | List[int] | None): Point prompt labels with shape (N,). 1 = foreground, 0 = background.
|
840
842
|
masks (List[np.ndarray] | np.ndarray | None): Masks for the objects, where each mask is a 2D array.
|
@@ -853,9 +855,12 @@ class SAM2Predictor(Predictor):
|
|
853
855
|
)
|
854
856
|
# Predict masks
|
855
857
|
batched_mode = points is not None and points[0].shape[0] > 1 # multi object prediction
|
856
|
-
high_res_features =
|
858
|
+
high_res_features = None
|
859
|
+
if isinstance(features, dict):
|
860
|
+
high_res_features = [feat_level[img_idx].unsqueeze(0) for feat_level in features["high_res_feats"]]
|
861
|
+
features = features["image_embed"][[img_idx]]
|
857
862
|
pred_masks, pred_scores, _, _ = self.model.sam_mask_decoder(
|
858
|
-
image_embeddings=features
|
863
|
+
image_embeddings=features,
|
859
864
|
image_pe=self.model.sam_prompt_encoder.get_dense_pe(),
|
860
865
|
sparse_prompt_embeddings=sparse_embeddings,
|
861
866
|
dense_prompt_embeddings=dense_embeddings,
|
@@ -1497,13 +1502,13 @@ class SAM2VideoPredictor(SAM2Predictor):
|
|
1497
1502
|
"pred_masks": torch.full(
|
1498
1503
|
size=(batch_size, 1, self.imgsz[0] // 4, self.imgsz[1] // 4),
|
1499
1504
|
fill_value=-1024.0,
|
1500
|
-
dtype=
|
1505
|
+
dtype=self.torch_dtype,
|
1501
1506
|
device=self.device,
|
1502
1507
|
),
|
1503
1508
|
"obj_ptr": torch.full(
|
1504
1509
|
size=(batch_size, self.model.hidden_dim),
|
1505
1510
|
fill_value=-1024.0,
|
1506
|
-
dtype=
|
1511
|
+
dtype=self.torch_dtype,
|
1507
1512
|
device=self.device,
|
1508
1513
|
),
|
1509
1514
|
"object_score_logits": torch.full(
|
@@ -1511,7 +1516,7 @@ class SAM2VideoPredictor(SAM2Predictor):
|
|
1511
1516
|
# default to 10.0 for object_score_logits, i.e. assuming the object is
|
1512
1517
|
# present as sigmoid(10)=1, same as in `predict_masks` of `MaskDecoder`
|
1513
1518
|
fill_value=10.0,
|
1514
|
-
dtype=
|
1519
|
+
dtype=self.torch_dtype,
|
1515
1520
|
device=self.device,
|
1516
1521
|
),
|
1517
1522
|
}
|
@@ -1583,7 +1588,7 @@ class SAM2VideoPredictor(SAM2Predictor):
|
|
1583
1588
|
feat_sizes=feat_sizes,
|
1584
1589
|
point_inputs=None,
|
1585
1590
|
# A dummy (empty) mask with a single object
|
1586
|
-
mask_inputs=torch.zeros((1, 1, *self.imgsz), dtype=
|
1591
|
+
mask_inputs=torch.zeros((1, 1, *self.imgsz), dtype=self.torch_dtype, device=self.device),
|
1587
1592
|
output_dict={},
|
1588
1593
|
num_frames=self.inference_state["num_frames"],
|
1589
1594
|
track_in_reverse=False,
|
@@ -204,11 +204,13 @@ class DetectionValidator(BaseValidator):
|
|
204
204
|
continue
|
205
205
|
|
206
206
|
# Save
|
207
|
+
if self.args.save_json or self.args.save_txt:
|
208
|
+
predn_scaled = self.scale_preds(predn, pbatch)
|
207
209
|
if self.args.save_json:
|
208
|
-
self.pred_to_json(
|
210
|
+
self.pred_to_json(predn_scaled, pbatch)
|
209
211
|
if self.args.save_txt:
|
210
212
|
self.save_one_txt(
|
211
|
-
|
213
|
+
predn_scaled,
|
212
214
|
self.args.save_conf,
|
213
215
|
pbatch["ori_shape"],
|
214
216
|
self.save_dir / "labels" / f"{Path(pbatch['im_file']).stem}.txt",
|
@@ -373,13 +375,7 @@ class DetectionValidator(BaseValidator):
|
|
373
375
|
"""
|
374
376
|
stem = Path(pbatch["im_file"]).stem
|
375
377
|
image_id = int(stem) if stem.isnumeric() else stem
|
376
|
-
box = ops.
|
377
|
-
pbatch["imgsz"],
|
378
|
-
predn["bboxes"].clone(),
|
379
|
-
pbatch["ori_shape"],
|
380
|
-
ratio_pad=pbatch["ratio_pad"],
|
381
|
-
)
|
382
|
-
box = ops.xyxy2xywh(box) # xywh
|
378
|
+
box = ops.xyxy2xywh(predn["bboxes"]) # xywh
|
383
379
|
box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
|
384
380
|
for b, s, c in zip(box.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
|
385
381
|
self.jdict.append(
|
@@ -391,6 +387,18 @@ class DetectionValidator(BaseValidator):
|
|
391
387
|
}
|
392
388
|
)
|
393
389
|
|
390
|
+
def scale_preds(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
|
391
|
+
"""Scales predictions to the original image size."""
|
392
|
+
return {
|
393
|
+
**predn,
|
394
|
+
"bboxes": ops.scale_boxes(
|
395
|
+
pbatch["imgsz"],
|
396
|
+
predn["bboxes"].clone(),
|
397
|
+
pbatch["ori_shape"],
|
398
|
+
ratio_pad=pbatch["ratio_pad"],
|
399
|
+
),
|
400
|
+
}
|
401
|
+
|
394
402
|
def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
|
395
403
|
"""
|
396
404
|
Evaluate YOLO output in JSON format and return performance statistics.
|
@@ -370,7 +370,7 @@ class YOLOE(Model):
|
|
370
370
|
stream: bool = False,
|
371
371
|
visual_prompts: Dict[str, List] = {},
|
372
372
|
refer_image=None,
|
373
|
-
predictor=
|
373
|
+
predictor=yolo.yoloe.YOLOEVPDetectPredictor,
|
374
374
|
**kwargs,
|
375
375
|
):
|
376
376
|
"""
|
@@ -406,14 +406,16 @@ class YOLOE(Model):
|
|
406
406
|
f"Expected equal number of bounding boxes and classes, but got {len(visual_prompts['bboxes'])} and "
|
407
407
|
f"{len(visual_prompts['cls'])} respectively"
|
408
408
|
)
|
409
|
-
if
|
410
|
-
self.predictor =
|
409
|
+
if type(self.predictor) is not predictor:
|
410
|
+
self.predictor = predictor(
|
411
411
|
overrides={
|
412
412
|
"task": self.model.task,
|
413
413
|
"mode": "predict",
|
414
414
|
"save": False,
|
415
415
|
"verbose": refer_image is None,
|
416
416
|
"batch": 1,
|
417
|
+
"device": kwargs.get("device", None),
|
418
|
+
"half": kwargs.get("half", False),
|
417
419
|
},
|
418
420
|
_callbacks=self.callbacks,
|
419
421
|
)
|
@@ -179,9 +179,6 @@ class OBBValidator(DetectionValidator):
|
|
179
179
|
stem = Path(pbatch["im_file"]).stem
|
180
180
|
image_id = int(stem) if stem.isnumeric() else stem
|
181
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
|
185
182
|
poly = ops.xywhr2xyxyxyxy(rbox).view(-1, 8)
|
186
183
|
for r, b, s, c in zip(rbox.tolist(), poly.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
|
187
184
|
self.jdict.append(
|
@@ -221,6 +218,15 @@ class OBBValidator(DetectionValidator):
|
|
221
218
|
obb=torch.cat([predn["bboxes"], predn["conf"].unsqueeze(-1), predn["cls"].unsqueeze(-1)], dim=1),
|
222
219
|
).save_txt(file, save_conf=save_conf)
|
223
220
|
|
221
|
+
def scale_preds(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
|
222
|
+
"""Scales predictions to the original image size."""
|
223
|
+
return {
|
224
|
+
**predn,
|
225
|
+
"bboxes": ops.scale_boxes(
|
226
|
+
pbatch["imgsz"], predn["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"], xywh=True
|
227
|
+
),
|
228
|
+
}
|
229
|
+
|
224
230
|
def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
|
225
231
|
"""
|
226
232
|
Evaluate YOLO output in JSON format and save predictions in DOTA format.
|
@@ -242,15 +242,22 @@ class PoseValidator(DetectionValidator):
|
|
242
242
|
before saving to the JSON dictionary.
|
243
243
|
"""
|
244
244
|
super().pred_to_json(predn, pbatch)
|
245
|
-
kpts =
|
246
|
-
pbatch["imgsz"],
|
247
|
-
predn["keypoints"].clone(),
|
248
|
-
pbatch["ori_shape"],
|
249
|
-
ratio_pad=pbatch["ratio_pad"],
|
250
|
-
)
|
245
|
+
kpts = predn["kpts"]
|
251
246
|
for i, k in enumerate(kpts.flatten(1, 2).tolist()):
|
252
247
|
self.jdict[-len(kpts) + i]["keypoints"] = k # keypoints
|
253
248
|
|
249
|
+
def scale_preds(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
|
250
|
+
"""Scales predictions to the original image size."""
|
251
|
+
return {
|
252
|
+
**super().scale_preds(predn, pbatch),
|
253
|
+
"kpts": ops.scale_coords(
|
254
|
+
pbatch["imgsz"],
|
255
|
+
predn["keypoints"].clone(),
|
256
|
+
pbatch["ori_shape"],
|
257
|
+
ratio_pad=pbatch["ratio_pad"],
|
258
|
+
),
|
259
|
+
}
|
260
|
+
|
254
261
|
def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
|
255
262
|
"""Evaluate object detection model using COCO JSON format."""
|
256
263
|
anno_json = self.data["path"] / "annotations/person_keypoints_val2017.json" # annotations
|
@@ -229,19 +229,24 @@ class SegmentationValidator(DetectionValidator):
|
|
229
229
|
rle["counts"] = rle["counts"].decode("utf-8")
|
230
230
|
return rle
|
231
231
|
|
232
|
-
|
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))
|
232
|
+
pred_masks = np.transpose(predn["masks"], (2, 0, 1))
|
239
233
|
with ThreadPool(NUM_THREADS) as pool:
|
240
234
|
rles = pool.map(single_encode, pred_masks)
|
241
235
|
super().pred_to_json(predn, pbatch)
|
242
236
|
for i, r in enumerate(rles):
|
243
237
|
self.jdict[-len(rles) + i]["segmentation"] = r # segmentation
|
244
238
|
|
239
|
+
def scale_preds(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
|
240
|
+
"""Scales predictions to the original image size."""
|
241
|
+
return {
|
242
|
+
**super().scale_preds(predn, pbatch),
|
243
|
+
"masks": ops.scale_image(
|
244
|
+
torch.as_tensor(predn["masks"], dtype=torch.uint8).permute(1, 2, 0).contiguous().cpu().numpy(),
|
245
|
+
pbatch["ori_shape"],
|
246
|
+
ratio_pad=pbatch["ratio_pad"],
|
247
|
+
),
|
248
|
+
}
|
249
|
+
|
245
250
|
def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
|
246
251
|
"""Return COCO-style instance segmentation evaluation metrics."""
|
247
252
|
pred_json = self.save_dir / "predictions.json" # predictions
|
@@ -71,7 +71,7 @@ class YOLOEVPDetectPredictor(DetectionPredictor):
|
|
71
71
|
category = self.prompts["cls"]
|
72
72
|
if len(img) == 1:
|
73
73
|
visuals = self._process_single_image(img[0].shape[:2], im[0].shape[:2], category, bboxes, masks)
|
74
|
-
|
74
|
+
prompts = visuals.unsqueeze(0).to(self.device) # (1, N, H, W)
|
75
75
|
else:
|
76
76
|
# NOTE: only supports bboxes as prompts for now
|
77
77
|
assert bboxes is not None, f"Expected bboxes, but got {bboxes}!"
|
@@ -89,8 +89,8 @@ class YOLOEVPDetectPredictor(DetectionPredictor):
|
|
89
89
|
self._process_single_image(img[i].shape[:2], im[i].shape[:2], category[i], bboxes[i])
|
90
90
|
for i in range(len(img))
|
91
91
|
]
|
92
|
-
|
93
|
-
|
92
|
+
prompts = torch.nn.utils.rnn.pad_sequence(visuals, batch_first=True).to(self.device) # (B, N, H, W)
|
93
|
+
self.prompts = prompts.half() if self.model.fp16 else prompts.float()
|
94
94
|
return img
|
95
95
|
|
96
96
|
def _process_single_image(self, dst_shape, src_shape, category, bboxes=None, masks=None):
|
@@ -2025,9 +2025,7 @@ class SAVPE(nn.Module):
|
|
2025
2025
|
vp = vp.reshape(B, Q, 1, -1)
|
2026
2026
|
|
2027
2027
|
score = y * vp + torch.logical_not(vp) * torch.finfo(y.dtype).min
|
2028
|
-
|
2029
|
-
score = F.softmax(score, dim=-1, dtype=torch.float).to(score.dtype)
|
2030
|
-
|
2028
|
+
score = F.softmax(score, dim=-1).to(y.dtype)
|
2031
2029
|
aggregated = score.transpose(-2, -3) @ x.reshape(B, self.c, C // self.c, -1).transpose(-1, -2)
|
2032
2030
|
|
2033
2031
|
return F.normalize(aggregated.transpose(-2, -3).reshape(B, Q, -1), dim=-1, p=2)
|
@@ -160,12 +160,19 @@ class Inference:
|
|
160
160
|
],
|
161
161
|
key=lambda x: (M_ORD.index(x[:7].lower()), T_ORD.index(x[7:].lower() or "")),
|
162
162
|
)
|
163
|
-
if self.model_path: #
|
164
|
-
available_models.insert(0, self.model_path
|
163
|
+
if self.model_path: # Insert user provided custom model in available_models
|
164
|
+
available_models.insert(0, self.model_path)
|
165
165
|
selected_model = self.st.sidebar.selectbox("Model", available_models)
|
166
166
|
|
167
167
|
with self.st.spinner("Model is downloading..."):
|
168
|
-
|
168
|
+
if (
|
169
|
+
selected_model.endswith((".pt", ".onnx", ".torchscript", ".mlpackage", ".engine"))
|
170
|
+
or "openvino_model" in selected_model
|
171
|
+
):
|
172
|
+
model_path = selected_model
|
173
|
+
else:
|
174
|
+
model_path = f"{selected_model.lower()}.pt" # Default to .pt if no model provided during function call.
|
175
|
+
self.model = YOLO(model_path) # Load the YOLO model
|
169
176
|
class_names = list(self.model.names.values()) # Convert dictionary to list of class names
|
170
177
|
self.st.success("Model loaded successfully!")
|
171
178
|
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/pyproject.toml
RENAMED
File without changes
|
File without changes
|
{dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/__init__.py
RENAMED
File without changes
|
{dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/conftest.py
RENAMED
File without changes
|
{dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_cli.py
RENAMED
File without changes
|
{dgenerate_ultralytics_headless-8.3.180 → dgenerate_ultralytics_headless-8.3.181}/tests/test_cuda.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
|