ultralytics 8.3.115__tar.gz → 8.3.117__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ultralytics-8.3.115/ultralytics.egg-info → ultralytics-8.3.117}/PKG-INFO +3 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/pyproject.toml +2 -3
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_python.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/__init__.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/augment.py +5 -7
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/base.py +5 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/build.py +6 -7
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/dataset.py +3 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/loaders.py +2 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/utils.py +1 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/exporter.py +19 -13
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/results.py +5 -5
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/trainer.py +2 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/session.py +3 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/utils.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/utils.py +4 -6
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/utils/loss.py +14 -3
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/predict.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/val.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/model.py +4 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/predict.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/val.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/autobackend.py +8 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/conv.py +4 -6
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/head.py +6 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/text_model.py +2 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/ai_gym.py +7 -6
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/distance_calculation.py +2 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/object_blurrer.py +4 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/object_counter.py +2 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/queue_management.py +2 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/region_counter.py +2 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/solutions.py +24 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/speed_estimation.py +6 -3
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/trackzone.py +4 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/vision_eye.py +2 -2
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/__init__.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/benchmarks.py +3 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/checks.py +5 -3
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/loss.py +23 -11
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/ops.py +1 -1
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/torch_utils.py +4 -3
- {ultralytics-8.3.115 → ultralytics-8.3.117/ultralytics.egg-info}/PKG-INFO +3 -4
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/requires.txt +4 -3
- {ultralytics-8.3.115 → ultralytics-8.3.117}/LICENSE +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/README.md +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/setup.cfg +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_cli.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_engine.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_exports.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/export.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.115 → ultralytics-8.3.117}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.117
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -60,14 +60,13 @@ Requires-Dist: mkdocs-ultralytics-plugin>=0.1.17; extra == "dev"
|
|
60
60
|
Requires-Dist: mkdocs-macros-plugin>=1.0.5; extra == "dev"
|
61
61
|
Provides-Extra: export
|
62
62
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
63
|
-
Requires-Dist: coremltools>=8.0; (platform_system != "Windows" and python_version <= "3.
|
63
|
+
Requires-Dist: coremltools>=8.0; (platform_system != "Windows" and python_version <= "3.13") and extra == "export"
|
64
64
|
Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.12") and extra == "export"
|
65
65
|
Requires-Dist: openvino>=2024.0.0; extra == "export"
|
66
66
|
Requires-Dist: tensorflow>=2.0.0; extra == "export"
|
67
|
-
Requires-Dist: tensorflowjs>=
|
67
|
+
Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
|
68
68
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
69
69
|
Requires-Dist: keras; extra == "export"
|
70
|
-
Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
|
71
70
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
72
71
|
Provides-Extra: solutions
|
73
72
|
Requires-Dist: shapely<2.1.0,>=2.0.0; extra == "solutions"
|
@@ -94,14 +94,13 @@ dev = [
|
|
94
94
|
]
|
95
95
|
export = [
|
96
96
|
"onnx>=1.12.0", # ONNX export
|
97
|
-
"coremltools>=8.0; platform_system != 'Windows' and python_version <= '3.
|
97
|
+
"coremltools>=8.0; platform_system != 'Windows' and python_version <= '3.13'", # CoreML supported on macOS and Linux
|
98
98
|
"scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.12'", # CoreML k-means quantization
|
99
99
|
"openvino>=2024.0.0", # OpenVINO export
|
100
100
|
"tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
|
101
|
-
"tensorflowjs>=
|
101
|
+
"tensorflowjs>=2.0.0", # TF.js export, automatically installs tensorflow
|
102
102
|
"tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports
|
103
103
|
"keras", # not installed automatically by tensorflow>=2.16
|
104
|
-
"flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'", # update old 'flatbuffers' included inside tensorflow package
|
105
104
|
"h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
|
106
105
|
]
|
107
106
|
solutions = [
|
@@ -128,7 +128,7 @@ def test_predict_img(model_name):
|
|
128
128
|
Image.open(SOURCE), # PIL
|
129
129
|
np.zeros((320, 640, 3), dtype=np.uint8), # numpy
|
130
130
|
]
|
131
|
-
assert len(model(batch, imgsz=32)) == len(batch) # multiple sources in a batch
|
131
|
+
assert len(model(batch, imgsz=32, classes=0)) == len(batch) # multiple sources in a batch
|
132
132
|
|
133
133
|
|
134
134
|
@pytest.mark.parametrize("model", MODELS)
|
@@ -9,6 +9,7 @@ from typing import Any, Dict, List, Union
|
|
9
9
|
|
10
10
|
import cv2
|
11
11
|
|
12
|
+
from ultralytics import __version__
|
12
13
|
from ultralytics.utils import (
|
13
14
|
ASSETS,
|
14
15
|
DEFAULT_CFG,
|
@@ -24,7 +25,6 @@ from ultralytics.utils import (
|
|
24
25
|
SETTINGS_FILE,
|
25
26
|
TESTS_RUNNING,
|
26
27
|
IterableSimpleNamespace,
|
27
|
-
__version__,
|
28
28
|
checks,
|
29
29
|
colorstr,
|
30
30
|
deprecation_warn,
|
@@ -1027,10 +1027,9 @@ class RandomPerspective:
|
|
1027
1027
|
border (Tuple[int, int]): Border dimensions for the transformed image.
|
1028
1028
|
|
1029
1029
|
Returns:
|
1030
|
-
(
|
1031
|
-
|
1032
|
-
|
1033
|
-
- float: Scale factor applied during the transformation.
|
1030
|
+
img (np.ndarray): Transformed image.
|
1031
|
+
M (np.ndarray): 3x3 transformation matrix.
|
1032
|
+
s (float): Scale factor applied during the transformation.
|
1034
1033
|
|
1035
1034
|
Examples:
|
1036
1035
|
>>> import numpy as np
|
@@ -1124,9 +1123,8 @@ class RandomPerspective:
|
|
1124
1123
|
M (np.ndarray): Affine transformation matrix with shape (3, 3).
|
1125
1124
|
|
1126
1125
|
Returns:
|
1127
|
-
(
|
1128
|
-
|
1129
|
-
- Transformed and clipped segments with shape (N, M, 2).
|
1126
|
+
bboxes (np.ndarray): New bounding boxes with shape (N, 4) in xyxy format.
|
1127
|
+
segments (np.ndarray): Transformed and clipped segments with shape (N, M, 2).
|
1130
1128
|
|
1131
1129
|
Examples:
|
1132
1130
|
>>> segments = np.random.rand(10, 500, 2) # 10 segments with 500 points each
|
@@ -15,7 +15,8 @@ import psutil
|
|
15
15
|
from torch.utils.data import Dataset
|
16
16
|
|
17
17
|
from ultralytics.data.utils import FORMATS_HELP_MSG, HELP_URL, IMG_FORMATS, check_file_speeds
|
18
|
-
from ultralytics.utils import DEFAULT_CFG, LOCAL_RANK, LOGGER, NUM_THREADS, TQDM
|
18
|
+
from ultralytics.utils import DEFAULT_CFG, LOCAL_RANK, LOGGER, NUM_THREADS, TQDM
|
19
|
+
from ultralytics.utils.patches import imread
|
19
20
|
|
20
21
|
|
21
22
|
class BaseDataset(Dataset):
|
@@ -208,9 +209,9 @@ class BaseDataset(Dataset):
|
|
208
209
|
rect_mode (bool, optional): Whether to use rectangular resizing.
|
209
210
|
|
210
211
|
Returns:
|
211
|
-
(np.ndarray): Loaded image.
|
212
|
-
(
|
213
|
-
(
|
212
|
+
(np.ndarray): Loaded image as a NumPy array.
|
213
|
+
(Tuple[int, int]): Original image dimensions in (height, width) format.
|
214
|
+
(Tuple[int, int]): Resized image dimensions in (height, width) format.
|
214
215
|
|
215
216
|
Raises:
|
216
217
|
FileNotFoundError: If the image file is not found.
|
@@ -187,13 +187,12 @@ def check_source(source):
|
|
187
187
|
source (str | int | Path | List | Tuple | np.ndarray | PIL.Image | torch.Tensor): The input source to check.
|
188
188
|
|
189
189
|
Returns:
|
190
|
-
(
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
- tensor (bool): Whether the source is a torch.Tensor.
|
190
|
+
source (str | int | Path | List | Tuple | np.ndarray | PIL.Image | torch.Tensor): The processed source.
|
191
|
+
webcam (bool): Whether the source is a webcam.
|
192
|
+
screenshot (bool): Whether the source is a screenshot.
|
193
|
+
from_img (bool): Whether the source is an image or list of images.
|
194
|
+
in_memory (bool): Whether the source is an in-memory object.
|
195
|
+
tensor (bool): Whether the source is a torch.Tensor.
|
197
196
|
|
198
197
|
Raises:
|
199
198
|
TypeError: If the source type is unsupported.
|
@@ -12,14 +12,14 @@ import torch
|
|
12
12
|
from PIL import Image
|
13
13
|
from torch.utils.data import ConcatDataset
|
14
14
|
|
15
|
-
from ultralytics.utils import LOCAL_RANK, NUM_THREADS, TQDM, colorstr
|
15
|
+
from ultralytics.utils import LOCAL_RANK, LOGGER, NUM_THREADS, TQDM, colorstr
|
16
|
+
from ultralytics.utils.instance import Instances
|
16
17
|
from ultralytics.utils.ops import resample_segments, segments2boxes
|
17
18
|
from ultralytics.utils.torch_utils import TORCHVISION_0_18
|
18
19
|
|
19
20
|
from .augment import (
|
20
21
|
Compose,
|
21
22
|
Format,
|
22
|
-
Instances,
|
23
23
|
LetterBox,
|
24
24
|
RandomLoadText,
|
25
25
|
classify_augmentations,
|
@@ -30,7 +30,6 @@ from .base import BaseDataset
|
|
30
30
|
from .converter import merge_multi_segment
|
31
31
|
from .utils import (
|
32
32
|
HELP_URL,
|
33
|
-
LOGGER,
|
34
33
|
check_file_speeds,
|
35
34
|
get_hash,
|
36
35
|
img2label_paths,
|
@@ -386,7 +385,7 @@ class YOLOMultiModalDataset(YOLODataset):
|
|
386
385
|
Return category names for the dataset.
|
387
386
|
|
388
387
|
Returns:
|
389
|
-
(
|
388
|
+
(Set[str]): List of class names.
|
390
389
|
"""
|
391
390
|
names = self.data["names"].values()
|
392
391
|
return {n.strip() for name in names for n in name.split("/")} # category names
|
@@ -16,8 +16,9 @@ import torch
|
|
16
16
|
from PIL import Image
|
17
17
|
|
18
18
|
from ultralytics.data.utils import FORMATS_HELP_MSG, IMG_FORMATS, VID_FORMATS
|
19
|
-
from ultralytics.utils import IS_COLAB, IS_KAGGLE, LOGGER,
|
19
|
+
from ultralytics.utils import IS_COLAB, IS_KAGGLE, LOGGER, ops
|
20
20
|
from ultralytics.utils.checks import check_requirements
|
21
|
+
from ultralytics.utils.patches import imread
|
21
22
|
|
22
23
|
|
23
24
|
@dataclass
|
@@ -483,6 +483,7 @@ def check_cls_dataset(dataset, split=""):
|
|
483
483
|
|
484
484
|
Returns:
|
485
485
|
(dict): A dictionary containing the following keys:
|
486
|
+
|
486
487
|
- 'train' (Path): The directory path containing the training set of the dataset.
|
487
488
|
- 'val' (Path): The directory path containing the validation set of the dataset.
|
488
489
|
- 'test' (Path): The directory path containing the test set of the dataset.
|
@@ -70,6 +70,7 @@ from pathlib import Path
|
|
70
70
|
import numpy as np
|
71
71
|
import torch
|
72
72
|
|
73
|
+
from ultralytics import __version__
|
73
74
|
from ultralytics.cfg import TASK2DATA, get_cfg
|
74
75
|
from ultralytics.data import build_dataloader
|
75
76
|
from ultralytics.data.dataset import YOLODataset
|
@@ -81,7 +82,6 @@ from ultralytics.utils import (
|
|
81
82
|
ARM64,
|
82
83
|
DEFAULT_CFG,
|
83
84
|
IS_COLAB,
|
84
|
-
IS_JETSON,
|
85
85
|
LINUX,
|
86
86
|
LOGGER,
|
87
87
|
MACOS,
|
@@ -89,13 +89,13 @@ from ultralytics.utils import (
|
|
89
89
|
RKNN_CHIPS,
|
90
90
|
ROOT,
|
91
91
|
WINDOWS,
|
92
|
-
__version__,
|
93
92
|
callbacks,
|
94
93
|
colorstr,
|
95
94
|
get_default_args,
|
96
95
|
yaml_save,
|
97
96
|
)
|
98
97
|
from ultralytics.utils.checks import (
|
98
|
+
IS_PYTHON_MINIMUM_3_12,
|
99
99
|
check_imgsz,
|
100
100
|
check_is_path_safe,
|
101
101
|
check_requirements,
|
@@ -105,7 +105,7 @@ from ultralytics.utils.checks import (
|
|
105
105
|
from ultralytics.utils.downloads import attempt_download_asset, get_github_assets, safe_download
|
106
106
|
from ultralytics.utils.export import export_engine, export_onnx
|
107
107
|
from ultralytics.utils.files import file_size, spaces_in_path
|
108
|
-
from ultralytics.utils.ops import Profile, nms_rotated
|
108
|
+
from ultralytics.utils.ops import Profile, nms_rotated
|
109
109
|
from ultralytics.utils.torch_utils import TORCH_1_13, get_latest_opset, select_device
|
110
110
|
|
111
111
|
|
@@ -113,7 +113,7 @@ def export_formats():
|
|
113
113
|
"""Return a dictionary of Ultralytics YOLO export formats."""
|
114
114
|
x = [
|
115
115
|
["PyTorch", "-", ".pt", True, True, []],
|
116
|
-
["TorchScript", "torchscript", ".torchscript", True, True, ["batch", "optimize", "nms"]],
|
116
|
+
["TorchScript", "torchscript", ".torchscript", True, True, ["batch", "optimize", "half", "nms"]],
|
117
117
|
["ONNX", "onnx", ".onnx", True, True, ["batch", "dynamic", "half", "opset", "simplify", "nms"]],
|
118
118
|
[
|
119
119
|
"OpenVINO",
|
@@ -384,6 +384,7 @@ class Exporter:
|
|
384
384
|
m.export = True
|
385
385
|
m.format = self.args.format
|
386
386
|
m.max_det = self.args.max_det
|
387
|
+
m.xyxy = self.args.nms and not coreml
|
387
388
|
elif isinstance(m, C2f) and not is_tf_format:
|
388
389
|
# EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
|
389
390
|
m.forward = m.forward_split
|
@@ -924,10 +925,8 @@ class Exporter:
|
|
924
925
|
"onnx>=1.12.0",
|
925
926
|
"onnx2tf>=1.26.3",
|
926
927
|
"onnxslim>=0.1.31",
|
927
|
-
"tflite_support<=0.4.3" if IS_JETSON else "tflite_support", # fix ImportError 'GLIBCXX_3.4.29'
|
928
|
-
"flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
|
929
928
|
"onnxruntime-gpu" if cuda else "onnxruntime",
|
930
|
-
"protobuf>=5",
|
929
|
+
"protobuf>=5",
|
931
930
|
),
|
932
931
|
cmds="--extra-index-url https://pypi.ngc.nvidia.com", # onnx_graphsurgeon only on NVIDIA
|
933
932
|
)
|
@@ -1278,8 +1277,20 @@ class Exporter:
|
|
1278
1277
|
|
1279
1278
|
return f, None
|
1280
1279
|
|
1281
|
-
def _add_tflite_metadata(self, file):
|
1280
|
+
def _add_tflite_metadata(self, file, use_flatbuffers=False):
|
1282
1281
|
"""Add metadata to *.tflite models per https://ai.google.dev/edge/litert/models/metadata."""
|
1282
|
+
if not use_flatbuffers:
|
1283
|
+
import zipfile
|
1284
|
+
|
1285
|
+
with zipfile.ZipFile(file, "a", zipfile.ZIP_DEFLATED) as zf:
|
1286
|
+
zf.writestr("metadata.json", json.dumps(self.metadata, indent=2))
|
1287
|
+
return
|
1288
|
+
|
1289
|
+
if IS_PYTHON_MINIMUM_3_12:
|
1290
|
+
LOGGER.warning(f"TFLite Support package may not be compatible with Python>=3.12 environments for {file}")
|
1291
|
+
|
1292
|
+
# Update old 'flatbuffers' included inside tensorflow package
|
1293
|
+
check_requirements(("tflite_support", "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'"))
|
1283
1294
|
import flatbuffers
|
1284
1295
|
|
1285
1296
|
try:
|
@@ -1532,11 +1543,6 @@ class NMSModel(torch.nn.Module):
|
|
1532
1543
|
# Explicit length otherwise reshape error, hardcoded to `self.args.max_det * 5`
|
1533
1544
|
mask = score.topk(min(self.args.max_det * 5, score.shape[0])).indices
|
1534
1545
|
box, score, cls, extra = box[mask], score[mask], cls[mask], extra[mask]
|
1535
|
-
if not self.obb:
|
1536
|
-
box = xywh2xyxy(box)
|
1537
|
-
if self.is_tf:
|
1538
|
-
# TFlite bug returns less boxes
|
1539
|
-
box = torch.nn.functional.pad(box, (0, 0, 0, mask.shape[0] - box.shape[0]))
|
1540
1546
|
nmsbox = box.clone()
|
1541
1547
|
# `8` is the minimum value experimented to get correct NMS results for obb
|
1542
1548
|
multiplier = 8 if self.obb else 1
|
@@ -299,8 +299,8 @@ class Results(SimpleClass):
|
|
299
299
|
Return the number of detections in the Results object.
|
300
300
|
|
301
301
|
Returns:
|
302
|
-
(int): The number of detections, determined by the length of the first non-empty
|
303
|
-
(
|
302
|
+
(int): The number of detections, determined by the length of the first non-empty
|
303
|
+
attribute in (masks, probs, keypoints, or obb).
|
304
304
|
|
305
305
|
Examples:
|
306
306
|
>>> results = Results(orig_img, path, names, boxes=torch.rand(5, 4))
|
@@ -779,9 +779,9 @@ class Results(SimpleClass):
|
|
779
779
|
decimals (int): Number of decimal places to round the output values to.
|
780
780
|
|
781
781
|
Returns:
|
782
|
-
(List[Dict]): A list of dictionaries, each containing summarized information for a single
|
783
|
-
|
784
|
-
|
782
|
+
(List[Dict]): A list of dictionaries, each containing summarized information for a single detection
|
783
|
+
or classification result. The structure of each dictionary varies based on the task type
|
784
|
+
(classification or detection) and available information (boxes, masks, keypoints).
|
785
785
|
|
786
786
|
Examples:
|
787
787
|
>>> results = model("image.jpg")
|
@@ -21,6 +21,7 @@ import torch
|
|
21
21
|
from torch import distributed as dist
|
22
22
|
from torch import nn, optim
|
23
23
|
|
24
|
+
from ultralytics import __version__
|
24
25
|
from ultralytics.cfg import get_cfg, get_save_dir
|
25
26
|
from ultralytics.data.utils import check_cls_dataset, check_det_dataset
|
26
27
|
from ultralytics.nn.tasks import attempt_load_one_weight, attempt_load_weights
|
@@ -30,7 +31,6 @@ from ultralytics.utils import (
|
|
30
31
|
LOGGER,
|
31
32
|
RANK,
|
32
33
|
TQDM,
|
33
|
-
__version__,
|
34
34
|
callbacks,
|
35
35
|
clean_url,
|
36
36
|
colorstr,
|
@@ -268,7 +268,7 @@ class BaseTrainer:
|
|
268
268
|
self.amp = torch.tensor(check_amp(self.model), device=self.device)
|
269
269
|
callbacks.default_callbacks = callbacks_backup # restore callbacks
|
270
270
|
if RANK > -1 and world_size > 1: # DDP
|
271
|
-
dist.broadcast(self.amp, src=0) # broadcast
|
271
|
+
dist.broadcast(self.amp.int(), src=0) # broadcast from rank 0 to all other ranks; gloo errors with boolean
|
272
272
|
self.amp = bool(self.amp) # as boolean
|
273
273
|
self.scaler = (
|
274
274
|
torch.amp.GradScaler("cuda", enabled=self.amp) if TORCH_2_4 else torch.cuda.amp.GradScaler(enabled=self.amp)
|
@@ -9,8 +9,9 @@ from urllib.parse import parse_qs, urlparse
|
|
9
9
|
|
10
10
|
import requests
|
11
11
|
|
12
|
-
from ultralytics
|
13
|
-
from ultralytics.utils import
|
12
|
+
from ultralytics import __version__
|
13
|
+
from ultralytics.hub.utils import HELP_MSG, HUB_WEB_ROOT, PREFIX
|
14
|
+
from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, TQDM, checks, emojis
|
14
15
|
from ultralytics.utils.errors import HUBModelError
|
15
16
|
|
16
17
|
AGENT_NAME = f"python-{__version__}-colab" if IS_COLAB else f"python-{__version__}-local"
|
@@ -9,6 +9,7 @@ from pathlib import Path
|
|
9
9
|
|
10
10
|
import requests
|
11
11
|
|
12
|
+
from ultralytics import __version__
|
12
13
|
from ultralytics.utils import (
|
13
14
|
ARGV,
|
14
15
|
ENVIRONMENT,
|
@@ -22,7 +23,6 @@ from ultralytics.utils import (
|
|
22
23
|
TESTS_RUNNING,
|
23
24
|
TQDM,
|
24
25
|
TryExcept,
|
25
|
-
__version__,
|
26
26
|
colorstr,
|
27
27
|
get_git_origin_url,
|
28
28
|
)
|
@@ -16,9 +16,8 @@ def select_closest_cond_frames(frame_idx, cond_frame_outputs, max_cond_frame_num
|
|
16
16
|
max_cond_frame_num (int): Maximum number of conditioning frames to select.
|
17
17
|
|
18
18
|
Returns:
|
19
|
-
(
|
20
|
-
|
21
|
-
- unselected_outputs: Items not selected from cond_frame_outputs.
|
19
|
+
selected_outputs (Dict[int, Any]): Selected items from cond_frame_outputs.
|
20
|
+
unselected_outputs (Dict[int, Any]): Items not selected from cond_frame_outputs.
|
22
21
|
|
23
22
|
Examples:
|
24
23
|
>>> frame_idx = 5
|
@@ -235,9 +234,8 @@ def window_partition(x, window_size):
|
|
235
234
|
window_size (int): Size of each window.
|
236
235
|
|
237
236
|
Returns:
|
238
|
-
(
|
239
|
-
|
240
|
-
- (Hp, Wp) (Tuple[int, int]): Padded height and width before partition.
|
237
|
+
windows (torch.Tensor): Partitioned windows with shape (B * num_windows, window_size, window_size, C).
|
238
|
+
padded_h_w (Tuple[int, int]): Padded height and width before partition.
|
241
239
|
|
242
240
|
Examples:
|
243
241
|
>>> x = torch.randn(1, 16, 16, 3)
|
@@ -32,7 +32,16 @@ class DETRLoss(nn.Module):
|
|
32
32
|
"""
|
33
33
|
|
34
34
|
def __init__(
|
35
|
-
self,
|
35
|
+
self,
|
36
|
+
nc=80,
|
37
|
+
loss_gain=None,
|
38
|
+
aux_loss=True,
|
39
|
+
use_fl=True,
|
40
|
+
use_vfl=False,
|
41
|
+
use_uni_match=False,
|
42
|
+
uni_match_ind=0,
|
43
|
+
gamma=1.5,
|
44
|
+
alpha=0.25,
|
36
45
|
):
|
37
46
|
"""
|
38
47
|
Initialize DETR loss function with customizable components and gains.
|
@@ -48,6 +57,8 @@ class DETRLoss(nn.Module):
|
|
48
57
|
use_vfl (bool): Whether to use VarifocalLoss.
|
49
58
|
use_uni_match (bool): Whether to use fixed layer for auxiliary branch label assignment.
|
50
59
|
uni_match_ind (int): Index of fixed layer for uni_match.
|
60
|
+
gamma (float): The focusing parameter that controls how much the loss focuses on hard-to-classify examples.
|
61
|
+
alpha (float): The balancing factor used to address class imbalance.
|
51
62
|
"""
|
52
63
|
super().__init__()
|
53
64
|
|
@@ -57,8 +68,8 @@ class DETRLoss(nn.Module):
|
|
57
68
|
self.matcher = HungarianMatcher(cost_gain={"class": 2, "bbox": 5, "giou": 2})
|
58
69
|
self.loss_gain = loss_gain
|
59
70
|
self.aux_loss = aux_loss
|
60
|
-
self.fl = FocalLoss() if use_fl else None
|
61
|
-
self.vfl = VarifocalLoss() if use_vfl else None
|
71
|
+
self.fl = FocalLoss(gamma, alpha) if use_fl else None
|
72
|
+
self.vfl = VarifocalLoss(gamma, alpha) if use_vfl else None
|
62
73
|
|
63
74
|
self.use_uni_match = use_uni_match
|
64
75
|
self.uni_match_ind = uni_match_ind
|
@@ -59,7 +59,7 @@ class DetectionPredictor(BasePredictor):
|
|
59
59
|
self.args.classes,
|
60
60
|
self.args.agnostic_nms,
|
61
61
|
max_det=self.args.max_det,
|
62
|
-
nc=len(self.model.names),
|
62
|
+
nc=0 if self.args.task == "detect" else len(self.model.names),
|
63
63
|
end2end=getattr(self.model, "end2end", False),
|
64
64
|
rotated=self.args.task == "obb",
|
65
65
|
return_idxs=save_feats,
|
@@ -124,7 +124,7 @@ class DetectionValidator(BaseValidator):
|
|
124
124
|
preds,
|
125
125
|
self.args.conf,
|
126
126
|
self.args.iou,
|
127
|
-
nc=self.nc,
|
127
|
+
nc=0 if self.args.task == "detect" else self.nc,
|
128
128
|
multi_label=True,
|
129
129
|
agnostic=self.args.single_cls or self.args.agnostic_nms,
|
130
130
|
max_det=self.args.max_det,
|
@@ -144,7 +144,7 @@ class YOLOWorld(Model):
|
|
144
144
|
class YOLOE(Model):
|
145
145
|
"""YOLOE object detection and segmentation model."""
|
146
146
|
|
147
|
-
def __init__(self, model="yoloe-
|
147
|
+
def __init__(self, model="yoloe-11s-seg.pt", task=None, verbose=False) -> None:
|
148
148
|
"""
|
149
149
|
Initialize YOLOE model with a pre-trained model file.
|
150
150
|
|
@@ -197,7 +197,7 @@ class YOLOE(Model):
|
|
197
197
|
(torch.Tensor): Visual positional embeddings.
|
198
198
|
|
199
199
|
Examples:
|
200
|
-
>>> model = YOLOE("yoloe-
|
200
|
+
>>> model = YOLOE("yoloe-11s-seg.pt")
|
201
201
|
>>> img = torch.rand(1, 3, 640, 640)
|
202
202
|
>>> visual_features = model.model.backbone(img)
|
203
203
|
>>> pe = model.get_visual_pe(img, visual_features)
|
@@ -220,7 +220,7 @@ class YOLOE(Model):
|
|
220
220
|
AssertionError: If the model is not an instance of YOLOEModel.
|
221
221
|
|
222
222
|
Examples:
|
223
|
-
>>> model = YOLOE("yoloe-
|
223
|
+
>>> model = YOLOE("yoloe-11s-seg.pt")
|
224
224
|
>>> model.set_vocab(["person", "car", "dog"], ["person", "car", "dog"])
|
225
225
|
"""
|
226
226
|
assert isinstance(self.model, YOLOEModel)
|
@@ -304,7 +304,7 @@ class YOLOE(Model):
|
|
304
304
|
(List | generator): List of Results objects or generator of Results objects if stream=True.
|
305
305
|
|
306
306
|
Examples:
|
307
|
-
>>> model = YOLOE("yoloe-
|
307
|
+
>>> model = YOLOE("yoloe-11s-seg.pt")
|
308
308
|
>>> results = model.predict("path/to/image.jpg")
|
309
309
|
>>> # With visual prompts
|
310
310
|
>>> prompts = {"bboxes": [[10, 20, 100, 200]], "cls": ["person"]}
|
@@ -59,7 +59,7 @@ class SegmentationPredictor(DetectionPredictor):
|
|
59
59
|
Each Results object includes both bounding boxes and segmentation masks.
|
60
60
|
|
61
61
|
Examples:
|
62
|
-
>>> predictor = SegmentationPredictor(overrides=dict(model="
|
62
|
+
>>> predictor = SegmentationPredictor(overrides=dict(model="yolo11n-seg.pt"))
|
63
63
|
>>> results = predictor.postprocess(preds, img, orig_img)
|
64
64
|
"""
|
65
65
|
# Extract protos - tuple if PyTorch model or array if exported
|
@@ -9,9 +9,9 @@ from ultralytics.data import YOLOConcatDataset, build_dataloader, build_yolo_dat
|
|
9
9
|
from ultralytics.data.augment import LoadVisualPrompt
|
10
10
|
from ultralytics.data.utils import check_det_dataset
|
11
11
|
from ultralytics.models.yolo.detect import DetectionValidator
|
12
|
-
from ultralytics.models.yolo.model import YOLOEModel
|
13
12
|
from ultralytics.models.yolo.segment import SegmentationValidator
|
14
13
|
from ultralytics.nn.modules.head import YOLOEDetect
|
14
|
+
from ultralytics.nn.tasks import YOLOEModel
|
15
15
|
from ultralytics.utils import LOGGER, TQDM
|
16
16
|
from ultralytics.utils.torch_utils import select_device, smart_inference_mode
|
17
17
|
|
@@ -432,10 +432,14 @@ class AutoBackend(nn.Module):
|
|
432
432
|
output_details = interpreter.get_output_details() # outputs
|
433
433
|
# Load metadata
|
434
434
|
try:
|
435
|
-
with zipfile.ZipFile(w, "r") as
|
436
|
-
|
437
|
-
|
438
|
-
|
435
|
+
with zipfile.ZipFile(w, "r") as zf:
|
436
|
+
name = zf.namelist()[0]
|
437
|
+
contents = zf.read(name).decode("utf-8")
|
438
|
+
if name == "metadata.json": # Custom Ultralytics metadata dict for Python>=3.12
|
439
|
+
metadata = json.loads(contents)
|
440
|
+
else:
|
441
|
+
metadata = ast.literal_eval(contents) # Default tflite-support metadata for Python<=3.11
|
442
|
+
except (zipfile.BadZipFile, SyntaxError, ValueError, json.JSONDecodeError):
|
439
443
|
pass
|
440
444
|
|
441
445
|
# TF.js
|
@@ -447,9 +447,8 @@ class RepConv(nn.Module):
|
|
447
447
|
Calculate equivalent kernel and bias by fusing convolutions.
|
448
448
|
|
449
449
|
Returns:
|
450
|
-
(
|
451
|
-
|
452
|
-
- Equivalent bias (torch.Tensor)
|
450
|
+
(torch.Tensor): Equivalent kernel
|
451
|
+
(torch.Tensor): Equivalent bias
|
453
452
|
"""
|
454
453
|
kernel3x3, bias3x3 = self._fuse_bn_tensor(self.conv1)
|
455
454
|
kernel1x1, bias1x1 = self._fuse_bn_tensor(self.conv2)
|
@@ -480,9 +479,8 @@ class RepConv(nn.Module):
|
|
480
479
|
branch (Conv | nn.BatchNorm2d | None): Branch to fuse.
|
481
480
|
|
482
481
|
Returns:
|
483
|
-
(
|
484
|
-
|
485
|
-
- Fused bias (torch.Tensor)
|
482
|
+
(torch.Tensor): Fused kernel
|
483
|
+
(torch.Tensor): Fused bias
|
486
484
|
"""
|
487
485
|
if branch is None:
|
488
486
|
return 0, 0
|
@@ -32,6 +32,7 @@ class Detect(nn.Module):
|
|
32
32
|
anchors = torch.empty(0) # init
|
33
33
|
strides = torch.empty(0) # init
|
34
34
|
legacy = False # backward compatibility for v3/v5/v8/v9 models
|
35
|
+
xyxy = False # xyxy or xywh output
|
35
36
|
|
36
37
|
def __init__(self, nc=80, ch=()):
|
37
38
|
"""Initialize the YOLO detection layer with specified number of classes and channels."""
|
@@ -83,9 +84,10 @@ class Detect(nn.Module):
|
|
83
84
|
x (List[torch.Tensor]): Input feature maps from different levels.
|
84
85
|
|
85
86
|
Returns:
|
86
|
-
(dict | tuple):
|
87
|
-
|
88
|
-
|
87
|
+
(dict | tuple):
|
88
|
+
|
89
|
+
- If in training mode, returns a dictionary containing outputs of both one2many and one2one detections.
|
90
|
+
- If not in training mode, returns processed detections or a tuple with processed detections and raw outputs.
|
89
91
|
"""
|
90
92
|
x_detach = [xi.detach() for xi in x]
|
91
93
|
one2one = [
|
@@ -156,7 +158,7 @@ class Detect(nn.Module):
|
|
156
158
|
|
157
159
|
def decode_bboxes(self, bboxes, anchors, xywh=True):
|
158
160
|
"""Decode bounding boxes."""
|
159
|
-
return dist2bbox(bboxes, anchors, xywh=xywh and
|
161
|
+
return dist2bbox(bboxes, anchors, xywh=xywh and not (self.end2end or self.xyxy), dim=1)
|
160
162
|
|
161
163
|
@staticmethod
|
162
164
|
def postprocess(preds: torch.Tensor, max_det: int, nc: int = 80):
|
@@ -23,10 +23,8 @@ try:
|
|
23
23
|
warnings.filterwarnings("ignore", category=FutureWarning)
|
24
24
|
import mobileclip
|
25
25
|
except ImportError:
|
26
|
-
# MobileCLIP repo has
|
27
|
-
|
28
|
-
checks.check_requirements(["open-clip-torch>=2.20.0", "timm>=0.9.5"])
|
29
|
-
checks.check_requirements("git+https://github.com/apple/ml-mobileclip.git", cmds="--no-deps")
|
26
|
+
# Ultralytics fork preferred since Apple MobileCLIP repo has incorrect version of torchvision
|
27
|
+
checks.check_requirements("git+https://github.com/ultralytics/mobileclip.git")
|
30
28
|
import mobileclip
|
31
29
|
|
32
30
|
|
@@ -103,12 +103,13 @@ class AIGym(BaseSolution):
|
|
103
103
|
self.stage[ind] = "up"
|
104
104
|
|
105
105
|
# Display angle, count, and stage text
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
106
|
+
if self.show_labels:
|
107
|
+
annotator.plot_angle_and_count_and_stage(
|
108
|
+
angle_text=self.angle[ind], # angle text for display
|
109
|
+
count_text=self.count[ind], # count text for workouts
|
110
|
+
stage_text=self.stage[ind], # stage position text
|
111
|
+
center_kpt=k[int(self.kpts[1])], # center keypoint for display
|
112
|
+
)
|
112
113
|
plot_im = annotator.result()
|
113
114
|
self.display_output(plot_im) # Display output image, if environment support display
|
114
115
|
|