ultralytics 8.3.202__tar.gz → 8.3.203__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.202 → ultralytics-8.3.203}/PKG-INFO +1 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/pyproject.toml +3 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_cli.py +6 -8
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_exports.py +5 -5
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_python.py +8 -9
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/build.py +4 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/exporter.py +37 -6
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/trainer.py +10 -4
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/tuner.py +1 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/fastsam/predict.py +2 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/rtdetr/model.py +2 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/world/train.py +1 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/yoloe/train.py +1 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/head.py +3 -3
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/transformer.py +3 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/checks.py +27 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/tal.py +3 -5
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/torch_utils.py +3 -15
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics.egg-info/PKG-INFO +1 -1
- {ultralytics-8.3.202 → ultralytics-8.3.203}/LICENSE +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/README.md +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/setup.cfg +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/conftest.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_engine.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/nn/text_model.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/py.typed +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/config.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/similarity_search.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/templates/similarity-search.html +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/autodevice.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/platform.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/cpu.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/events.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/export/__init__.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/export/imx.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/git.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/logger.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/nms.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/tqdm.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.3.202 → ultralytics-8.3.203}/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.203
|
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>
|
@@ -1,13 +1,14 @@
|
|
1
1
|
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
2
|
|
3
3
|
import subprocess
|
4
|
+
from pathlib import Path
|
4
5
|
|
5
6
|
import pytest
|
6
7
|
from PIL import Image
|
7
8
|
|
8
9
|
from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODELS, TASK_MODEL_DATA
|
9
10
|
from ultralytics.utils import ARM64, ASSETS, LINUX, WEIGHTS_DIR, checks
|
10
|
-
from ultralytics.utils.torch_utils import
|
11
|
+
from ultralytics.utils.torch_utils import TORCH_1_11
|
11
12
|
|
12
13
|
|
13
14
|
def run(cmd: str) -> None:
|
@@ -48,15 +49,12 @@ def test_export(model: str) -> None:
|
|
48
49
|
run(f"yolo export model={model} format=torchscript imgsz=32")
|
49
50
|
|
50
51
|
|
51
|
-
|
52
|
+
@pytest.mark.skipif(not TORCH_1_11, reason="RTDETR requires torch>=1.11")
|
53
|
+
def test_rtdetr(task: str = "detect", model: Path = WEIGHTS_DIR / "rtdetr-l.pt", data: str = "coco8.yaml") -> None:
|
52
54
|
"""Test the RTDETR functionality within Ultralytics for detection tasks using specified model and data."""
|
53
|
-
#
|
54
|
-
run(f"yolo train {task} model={model} data={data} --imgsz= 160 epochs =1, cache = disk fraction=0.25") # spaces
|
55
|
+
# Add comma, spaces, fraction=0.25 args to test single-image training
|
55
56
|
run(f"yolo predict {task} model={model} source={ASSETS / 'bus.jpg'} imgsz=160 save save_crop save_txt")
|
56
|
-
|
57
|
-
weights = WEIGHTS_DIR / "rtdetr-l.pt"
|
58
|
-
run(f"yolo predict {task} model={weights} source={ASSETS / 'bus.jpg'} imgsz=160 save save_crop save_txt")
|
59
|
-
run(f"yolo train {task} model={weights} epochs=1 imgsz=160 cache=disk data=coco8.yaml")
|
57
|
+
run(f"yolo train {task} model={model} data={data} --imgsz= 160 epochs =1, cache = disk fraction=0.25")
|
60
58
|
|
61
59
|
|
62
60
|
@pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="MobileSAM with CLIP is not supported in Python 3.12")
|
@@ -20,7 +20,7 @@ from ultralytics.utils import (
|
|
20
20
|
WINDOWS,
|
21
21
|
checks,
|
22
22
|
)
|
23
|
-
from ultralytics.utils.torch_utils import
|
23
|
+
from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13, TORCH_2_1
|
24
24
|
|
25
25
|
|
26
26
|
def test_export_torchscript():
|
@@ -35,7 +35,7 @@ def test_export_onnx():
|
|
35
35
|
YOLO(file)(SOURCE, imgsz=32) # exported model inference
|
36
36
|
|
37
37
|
|
38
|
-
@pytest.mark.skipif(not
|
38
|
+
@pytest.mark.skipif(not TORCH_2_1, reason="OpenVINO requires torch>=2.1")
|
39
39
|
def test_export_openvino():
|
40
40
|
"""Test YOLO export to OpenVINO format for model inference compatibility."""
|
41
41
|
file = YOLO(MODEL).export(format="openvino", imgsz=32)
|
@@ -43,7 +43,7 @@ def test_export_openvino():
|
|
43
43
|
|
44
44
|
|
45
45
|
@pytest.mark.slow
|
46
|
-
@pytest.mark.skipif(not
|
46
|
+
@pytest.mark.skipif(not TORCH_2_1, reason="OpenVINO requires torch>=2.1")
|
47
47
|
@pytest.mark.parametrize(
|
48
48
|
"task, dynamic, int8, half, batch, nms",
|
49
49
|
[ # generate all combinations except for exclusion cases
|
@@ -117,7 +117,7 @@ def test_export_torchscript_matrix(task, dynamic, int8, half, batch, nms):
|
|
117
117
|
|
118
118
|
@pytest.mark.slow
|
119
119
|
@pytest.mark.skipif(not MACOS, reason="CoreML inference only supported on macOS")
|
120
|
-
@pytest.mark.skipif(not
|
120
|
+
@pytest.mark.skipif(not TORCH_1_11, reason="CoreML export requires torch>=1.11")
|
121
121
|
@pytest.mark.skipif(checks.IS_PYTHON_3_13, reason="CoreML not supported in Python 3.13")
|
122
122
|
@pytest.mark.parametrize(
|
123
123
|
"task, dynamic, int8, half, nms, batch",
|
@@ -169,7 +169,7 @@ def test_export_tflite_matrix(task, dynamic, int8, half, batch, nms):
|
|
169
169
|
Path(file).unlink() # cleanup
|
170
170
|
|
171
171
|
|
172
|
-
@pytest.mark.skipif(not
|
172
|
+
@pytest.mark.skipif(not TORCH_1_11, reason="CoreML export requires torch>=1.11")
|
173
173
|
@pytest.mark.skipif(WINDOWS, reason="CoreML not supported on Windows") # RuntimeError: BlobWriter not loaded
|
174
174
|
@pytest.mark.skipif(LINUX and ARM64, reason="CoreML not supported on aarch64 Linux")
|
175
175
|
@pytest.mark.skipif(checks.IS_PYTHON_3_13, reason="CoreML not supported in Python 3.13")
|
@@ -34,7 +34,7 @@ from ultralytics.utils import (
|
|
34
34
|
is_github_action_running,
|
35
35
|
)
|
36
36
|
from ultralytics.utils.downloads import download
|
37
|
-
from ultralytics.utils.torch_utils import
|
37
|
+
from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13
|
38
38
|
|
39
39
|
IS_TMP_WRITEABLE = is_dir_writeable(TMP) # WARNING: must be run once tests start as TMP does not exist on tests/init
|
40
40
|
|
@@ -125,7 +125,9 @@ def test_predict_img(model_name):
|
|
125
125
|
batch = [
|
126
126
|
str(SOURCE), # filename
|
127
127
|
Path(SOURCE), # Path
|
128
|
-
"https://github.com/ultralytics/assets/releases/download/v0.0.0/zidane.jpg"
|
128
|
+
"https://github.com/ultralytics/assets/releases/download/v0.0.0/zidane.jpg?token=123"
|
129
|
+
if ONLINE
|
130
|
+
else SOURCE, # URI
|
129
131
|
im, # OpenCV
|
130
132
|
Image.open(SOURCE), # PIL
|
131
133
|
np.zeros((320, 640, channels), dtype=np.uint8), # numpy
|
@@ -246,7 +248,7 @@ def test_all_model_yamls():
|
|
246
248
|
"""Test YOLO model creation for all available YAML configurations in the `cfg/models` directory."""
|
247
249
|
for m in (ROOT / "cfg" / "models").rglob("*.yaml"):
|
248
250
|
if "rtdetr" in m.name:
|
249
|
-
if
|
251
|
+
if TORCH_1_11:
|
250
252
|
_ = RTDETR(m.name)(SOURCE, imgsz=640) # must be 640
|
251
253
|
else:
|
252
254
|
YOLO(m.name)
|
@@ -634,7 +636,8 @@ def test_yolo_world():
|
|
634
636
|
)
|
635
637
|
|
636
638
|
|
637
|
-
@pytest.mark.skipif(
|
639
|
+
@pytest.mark.skipif(not TORCH_1_13, reason="YOLOE with CLIP requires torch>=1.13")
|
640
|
+
@pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="YOLOE with CLIP is not supported in Python 3.12")
|
638
641
|
@pytest.mark.skipif(
|
639
642
|
checks.IS_PYTHON_3_8 and LINUX and ARM64,
|
640
643
|
reason="YOLOE with CLIP is not supported in Python 3.8 and aarch64 Linux",
|
@@ -648,16 +651,12 @@ def test_yoloe():
|
|
648
651
|
model.set_classes(names, model.get_text_pe(names))
|
649
652
|
model(SOURCE, conf=0.01)
|
650
653
|
|
651
|
-
import numpy as np
|
652
|
-
|
653
654
|
from ultralytics import YOLOE
|
654
655
|
from ultralytics.models.yolo.yoloe import YOLOEVPSegPredictor
|
655
656
|
|
656
657
|
# visual-prompts
|
657
658
|
visuals = dict(
|
658
|
-
bboxes=np.array(
|
659
|
-
[[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]],
|
660
|
-
),
|
659
|
+
bboxes=np.array([[221.52, 405.8, 344.98, 857.54], [120, 425, 160, 445]]),
|
661
660
|
cls=np.array([0, 1]),
|
662
661
|
)
|
663
662
|
model.predict(
|
@@ -7,6 +7,7 @@ import random
|
|
7
7
|
from collections.abc import Iterator
|
8
8
|
from pathlib import Path
|
9
9
|
from typing import Any
|
10
|
+
from urllib.parse import urlsplit
|
10
11
|
|
11
12
|
import numpy as np
|
12
13
|
import torch
|
@@ -247,8 +248,10 @@ def check_source(source):
|
|
247
248
|
if isinstance(source, (str, int, Path)): # int for local usb camera
|
248
249
|
source = str(source)
|
249
250
|
source_lower = source.lower()
|
250
|
-
is_file = source_lower.rpartition(".")[-1] in (IMG_FORMATS | VID_FORMATS)
|
251
251
|
is_url = source_lower.startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://"))
|
252
|
+
is_file = (urlsplit(source_lower).path if is_url else source_lower).rpartition(".")[-1] in (
|
253
|
+
IMG_FORMATS | VID_FORMATS
|
254
|
+
)
|
252
255
|
webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file)
|
253
256
|
screenshot = source_lower == "screen"
|
254
257
|
if is_url and is_file:
|
@@ -112,7 +112,7 @@ from ultralytics.utils.metrics import batch_probiou
|
|
112
112
|
from ultralytics.utils.nms import TorchNMS
|
113
113
|
from ultralytics.utils.ops import Profile
|
114
114
|
from ultralytics.utils.patches import arange_patch
|
115
|
-
from ultralytics.utils.torch_utils import TORCH_1_13,
|
115
|
+
from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13, TORCH_2_1, select_device
|
116
116
|
|
117
117
|
|
118
118
|
def export_formats():
|
@@ -152,6 +152,31 @@ def export_formats():
|
|
152
152
|
return dict(zip(["Format", "Argument", "Suffix", "CPU", "GPU", "Arguments"], zip(*x)))
|
153
153
|
|
154
154
|
|
155
|
+
def best_onnx_opset(onnx) -> int:
|
156
|
+
"""Return max ONNX opset for this torch version with ONNX fallback."""
|
157
|
+
if TORCH_1_13: # not supported by torch<1.13
|
158
|
+
opset = torch.onnx.utils._constants.ONNX_MAX_OPSET - 1 # use second-latest version for safety
|
159
|
+
else:
|
160
|
+
opset = {
|
161
|
+
"1.8": 12,
|
162
|
+
"1.9": 12,
|
163
|
+
"1.10": 13,
|
164
|
+
"1.11": 14,
|
165
|
+
"1.12": 15,
|
166
|
+
"1.13": 17,
|
167
|
+
"2.0": 18,
|
168
|
+
"2.1": 19,
|
169
|
+
"2.2": 19,
|
170
|
+
"2.3": 19,
|
171
|
+
"2.4": 20,
|
172
|
+
"2.5": 20,
|
173
|
+
"2.6": 20,
|
174
|
+
"2.7": 20,
|
175
|
+
"2.8": 23,
|
176
|
+
}.get(".".join(TORCH_VERSION.split(".")[:2]), 12)
|
177
|
+
return min(opset, onnx.defs.onnx_opset_version())
|
178
|
+
|
179
|
+
|
155
180
|
def validate_args(format, passed_args, valid_args):
|
156
181
|
"""
|
157
182
|
Validate arguments based on the export format.
|
@@ -586,8 +611,8 @@ class Exporter:
|
|
586
611
|
check_requirements(requirements)
|
587
612
|
import onnx # noqa
|
588
613
|
|
589
|
-
|
590
|
-
LOGGER.info(f"\n{prefix} starting export with onnx {onnx.__version__} opset {
|
614
|
+
opset = self.args.opset or best_onnx_opset(onnx)
|
615
|
+
LOGGER.info(f"\n{prefix} starting export with onnx {onnx.__version__} opset {opset}...")
|
591
616
|
f = str(self.file.with_suffix(".onnx"))
|
592
617
|
output_names = ["output0", "output1"] if isinstance(self.model, SegmentationModel) else ["output0"]
|
593
618
|
dynamic = self.args.dynamic
|
@@ -601,14 +626,14 @@ class Exporter:
|
|
601
626
|
if self.args.nms: # only batch size is dynamic with NMS
|
602
627
|
dynamic["output0"].pop(2)
|
603
628
|
if self.args.nms and self.model.task == "obb":
|
604
|
-
self.args.opset =
|
629
|
+
self.args.opset = opset # for NMSModel
|
605
630
|
|
606
631
|
with arange_patch(self.args):
|
607
632
|
torch2onnx(
|
608
633
|
NMSModel(self.model, self.args) if self.args.nms else self.model,
|
609
634
|
self.im,
|
610
635
|
f,
|
611
|
-
opset=
|
636
|
+
opset=opset,
|
612
637
|
input_names=["images"],
|
613
638
|
output_names=output_names,
|
614
639
|
dynamic=dynamic or None,
|
@@ -633,6 +658,11 @@ class Exporter:
|
|
633
658
|
meta = model_onnx.metadata_props.add()
|
634
659
|
meta.key, meta.value = k, str(v)
|
635
660
|
|
661
|
+
# IR version
|
662
|
+
if getattr(model_onnx, "ir_version", 0) > 10:
|
663
|
+
LOGGER.info(f"{prefix} limiting IR version {model_onnx.ir_version} to 10 for ONNXRuntime compatibility...")
|
664
|
+
model_onnx.ir_version = 10
|
665
|
+
|
636
666
|
onnx.save(model_onnx, f)
|
637
667
|
return f
|
638
668
|
|
@@ -644,7 +674,7 @@ class Exporter:
|
|
644
674
|
import openvino as ov
|
645
675
|
|
646
676
|
LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")
|
647
|
-
assert
|
677
|
+
assert TORCH_2_1, f"OpenVINO export requires torch>=2.1 but torch=={TORCH_VERSION} is installed"
|
648
678
|
ov_model = ov.convert_model(
|
649
679
|
NMSModel(self.model, self.args) if self.args.nms else self.model,
|
650
680
|
input=None if self.args.dynamic else [self.im.shape],
|
@@ -837,6 +867,7 @@ class Exporter:
|
|
837
867
|
|
838
868
|
LOGGER.info(f"\n{prefix} starting export with coremltools {ct.__version__}...")
|
839
869
|
assert not WINDOWS, "CoreML export is not supported on Windows, please run on macOS or Linux."
|
870
|
+
assert TORCH_1_11, "CoreML export requires torch>=1.11"
|
840
871
|
assert self.args.batch == 1, "CoreML batch sizes > 1 are not supported. Please retry at 'batch=1'."
|
841
872
|
f = self.file.with_suffix(".mlmodel" if mlmodel else ".mlpackage")
|
842
873
|
if f.is_dir():
|
@@ -415,9 +415,12 @@ class BaseTrainer:
|
|
415
415
|
# Forward
|
416
416
|
with autocast(self.amp):
|
417
417
|
batch = self.preprocess_batch(batch)
|
418
|
-
|
419
|
-
|
420
|
-
|
418
|
+
if self.args.compile:
|
419
|
+
# Decouple inference and loss calculations for improved compile performance
|
420
|
+
preds = self.model(batch["img"])
|
421
|
+
loss, self.loss_items = unwrap_model(self.model).loss(batch, preds)
|
422
|
+
else:
|
423
|
+
loss, self.loss_items = self.model(batch)
|
421
424
|
self.loss = loss.sum()
|
422
425
|
if RANK != -1:
|
423
426
|
self.loss *= self.world_size
|
@@ -581,6 +584,7 @@ class BaseTrainer:
|
|
581
584
|
"ema": deepcopy(unwrap_model(self.ema.ema)).half(),
|
582
585
|
"updates": self.ema.updates,
|
583
586
|
"optimizer": convert_optimizer_state_dict_to_fp16(deepcopy(self.optimizer.state_dict())),
|
587
|
+
"scaler": self.scaler.state_dict(),
|
584
588
|
"train_args": vars(self.args), # save as dict
|
585
589
|
"train_metrics": {**self.metrics, **{"fitness": self.fitness}},
|
586
590
|
"train_results": self.read_results_csv(),
|
@@ -809,9 +813,11 @@ class BaseTrainer:
|
|
809
813
|
return
|
810
814
|
best_fitness = 0.0
|
811
815
|
start_epoch = ckpt.get("epoch", -1) + 1
|
812
|
-
if ckpt.get("optimizer"
|
816
|
+
if ckpt.get("optimizer") is not None:
|
813
817
|
self.optimizer.load_state_dict(ckpt["optimizer"]) # optimizer
|
814
818
|
best_fitness = ckpt["best_fitness"]
|
819
|
+
if ckpt.get("scaler") is not None:
|
820
|
+
self.scaler.load_state_dict(ckpt["scaler"])
|
815
821
|
if self.ema and ckpt.get("ema"):
|
816
822
|
self.ema.ema.load_state_dict(ckpt["ema"].float().state_dict()) # EMA
|
817
823
|
self.ema.updates = ckpt["updates"]
|
@@ -435,7 +435,7 @@ class Tuner:
|
|
435
435
|
best_metrics = {k: round(v, 5) for k, v in metrics.items()}
|
436
436
|
for ckpt in weights_dir.glob("*.pt"):
|
437
437
|
shutil.copy2(ckpt, self.tune_dir / "weights")
|
438
|
-
elif cleanup:
|
438
|
+
elif cleanup and best_save_dir:
|
439
439
|
shutil.rmtree(best_save_dir, ignore_errors=True) # remove iteration dirs to reduce storage space
|
440
440
|
|
441
441
|
# Plot tune results
|
@@ -7,6 +7,7 @@ from ultralytics.models.yolo.segment import SegmentationPredictor
|
|
7
7
|
from ultralytics.utils import DEFAULT_CFG, checks
|
8
8
|
from ultralytics.utils.metrics import box_iou
|
9
9
|
from ultralytics.utils.ops import scale_masks
|
10
|
+
from ultralytics.utils.torch_utils import TORCH_1_10
|
10
11
|
|
11
12
|
from .utils import adjust_bboxes_to_image_border
|
12
13
|
|
@@ -135,7 +136,7 @@ class FastSAMPredictor(SegmentationPredictor):
|
|
135
136
|
crop_ims, filter_idx = [], []
|
136
137
|
for i, b in enumerate(result.boxes.xyxy.tolist()):
|
137
138
|
x1, y1, x2, y2 = (int(x) for x in b)
|
138
|
-
if masks[i].sum() <= 100:
|
139
|
+
if (masks[i].sum() if TORCH_1_10 else masks[i].sum(0).sum()) <= 100: # torch 1.9 bug workaround
|
139
140
|
filter_idx.append(i)
|
140
141
|
continue
|
141
142
|
crop_ims.append(Image.fromarray(result.orig_img[y1:y2, x1:x2, ::-1]))
|
@@ -11,6 +11,7 @@ References:
|
|
11
11
|
|
12
12
|
from ultralytics.engine.model import Model
|
13
13
|
from ultralytics.nn.tasks import RTDETRDetectionModel
|
14
|
+
from ultralytics.utils.torch_utils import TORCH_1_11
|
14
15
|
|
15
16
|
from .predict import RTDETRPredictor
|
16
17
|
from .train import RTDETRTrainer
|
@@ -44,6 +45,7 @@ class RTDETR(Model):
|
|
44
45
|
Args:
|
45
46
|
model (str): Path to the pre-trained model. Supports .pt, .yaml, and .yml formats.
|
46
47
|
"""
|
48
|
+
assert TORCH_1_11, "RTDETR requires torch>=1.11"
|
47
49
|
super().__init__(model=model, task="detect")
|
48
50
|
|
49
51
|
@property
|
@@ -64,6 +64,7 @@ class WorldTrainer(DetectionTrainer):
|
|
64
64
|
"""
|
65
65
|
if overrides is None:
|
66
66
|
overrides = {}
|
67
|
+
assert not overrides.get("compile"), f"Training with 'model={overrides['model']}' requires 'compile=False'"
|
67
68
|
super().__init__(cfg, overrides, _callbacks)
|
68
69
|
self.text_embeddings = None
|
69
70
|
|
@@ -46,6 +46,7 @@ class YOLOETrainer(DetectionTrainer):
|
|
46
46
|
"""
|
47
47
|
if overrides is None:
|
48
48
|
overrides = {}
|
49
|
+
assert not overrides.get("compile"), f"Training with 'model={overrides['model']}' requires 'compile=False'"
|
49
50
|
overrides["overlap_mask"] = False
|
50
51
|
super().__init__(cfg, overrides, _callbacks)
|
51
52
|
|
@@ -12,8 +12,8 @@ import torch.nn.functional as F
|
|
12
12
|
from torch.nn.init import constant_, xavier_uniform_
|
13
13
|
|
14
14
|
from ultralytics.utils import NOT_MACOS14
|
15
|
-
from ultralytics.utils.tal import
|
16
|
-
from ultralytics.utils.torch_utils import fuse_conv_and_bn, smart_inference_mode
|
15
|
+
from ultralytics.utils.tal import dist2bbox, dist2rbox, make_anchors
|
16
|
+
from ultralytics.utils.torch_utils import TORCH_1_11, fuse_conv_and_bn, smart_inference_mode
|
17
17
|
|
18
18
|
from .block import DFL, SAVPE, BNContrastiveHead, ContrastiveHead, Proto, Residual, SwiGLUFFN
|
19
19
|
from .conv import Conv, DWConv
|
@@ -1052,7 +1052,7 @@ class RTDETRDecoder(nn.Module):
|
|
1052
1052
|
for i, (h, w) in enumerate(shapes):
|
1053
1053
|
sy = torch.arange(end=h, dtype=dtype, device=device)
|
1054
1054
|
sx = torch.arange(end=w, dtype=dtype, device=device)
|
1055
|
-
grid_y, grid_x = torch.meshgrid(sy, sx, indexing="ij") if
|
1055
|
+
grid_y, grid_x = torch.meshgrid(sy, sx, indexing="ij") if TORCH_1_11 else torch.meshgrid(sy, sx)
|
1056
1056
|
grid_xy = torch.stack([grid_x, grid_y], -1) # (h, w, 2)
|
1057
1057
|
|
1058
1058
|
valid_WH = torch.tensor([w, h], dtype=dtype, device=device)
|
@@ -10,6 +10,8 @@ import torch.nn as nn
|
|
10
10
|
import torch.nn.functional as F
|
11
11
|
from torch.nn.init import constant_, xavier_uniform_
|
12
12
|
|
13
|
+
from ultralytics.utils.torch_utils import TORCH_1_11
|
14
|
+
|
13
15
|
from .conv import Conv
|
14
16
|
from .utils import _get_clones, inverse_sigmoid, multi_scale_deformable_attn_pytorch
|
15
17
|
|
@@ -236,7 +238,7 @@ class AIFI(TransformerEncoderLayer):
|
|
236
238
|
assert embed_dim % 4 == 0, "Embed dimension must be divisible by 4 for 2D sin-cos position embedding"
|
237
239
|
grid_w = torch.arange(w, dtype=torch.float32)
|
238
240
|
grid_h = torch.arange(h, dtype=torch.float32)
|
239
|
-
grid_w, grid_h = torch.meshgrid(grid_w, grid_h, indexing="ij")
|
241
|
+
grid_w, grid_h = torch.meshgrid(grid_w, grid_h, indexing="ij") if TORCH_1_11 else torch.meshgrid(grid_w, grid_h)
|
240
242
|
pos_dim = embed_dim // 4
|
241
243
|
omega = torch.arange(pos_dim, dtype=torch.float32) / pos_dim
|
242
244
|
omega = 1.0 / (temperature**omega)
|
@@ -669,6 +669,9 @@ def check_yolo(verbose=True, device=""):
|
|
669
669
|
else:
|
670
670
|
s = ""
|
671
671
|
|
672
|
+
if GIT.is_repo:
|
673
|
+
check_multiple_install() # check conflicting installation if using local clone
|
674
|
+
|
672
675
|
select_device(device=device, newline=False)
|
673
676
|
LOGGER.info(f"Setup complete ✅ {s}")
|
674
677
|
|
@@ -807,6 +810,30 @@ def check_amp(model):
|
|
807
810
|
return True
|
808
811
|
|
809
812
|
|
813
|
+
def check_multiple_install():
|
814
|
+
"""Check if there are multiple Ultralytics installations."""
|
815
|
+
import sys
|
816
|
+
|
817
|
+
try:
|
818
|
+
result = subprocess.run([sys.executable, "-m", "pip", "show", "ultralytics"], capture_output=True, text=True)
|
819
|
+
install_msg = (
|
820
|
+
f"Install your local copy in editable mode with 'pip install -e {ROOT.parent}' to avoid "
|
821
|
+
"issues. See https://docs.ultralytics.com/quickstart/"
|
822
|
+
)
|
823
|
+
if result.returncode != 0:
|
824
|
+
if "not found" in result.stderr.lower(): # Package not pip-installed but locally imported
|
825
|
+
LOGGER.warning(f"Ultralytics not found via pip but importing from: {ROOT}. {install_msg}")
|
826
|
+
return
|
827
|
+
yolo_path = (Path(re.findall(r"location:\s+(.+)", result.stdout, flags=re.I)[-1]) / "ultralytics").resolve()
|
828
|
+
if not yolo_path.samefile(ROOT.resolve()):
|
829
|
+
LOGGER.warning(
|
830
|
+
f"Multiple Ultralytics installations detected. The `yolo` command uses: {yolo_path}, "
|
831
|
+
f"but current session imports from: {ROOT}. This may cause version conflicts. {install_msg}"
|
832
|
+
)
|
833
|
+
except Exception:
|
834
|
+
return
|
835
|
+
|
836
|
+
|
810
837
|
def print_args(args: dict | None = None, show_file=True, show_func=False):
|
811
838
|
"""
|
812
839
|
Print function arguments (optional args dict).
|
@@ -3,12 +3,10 @@
|
|
3
3
|
import torch
|
4
4
|
import torch.nn as nn
|
5
5
|
|
6
|
-
from . import LOGGER
|
7
|
-
from .checks import check_version
|
6
|
+
from . import LOGGER
|
8
7
|
from .metrics import bbox_iou, probiou
|
9
8
|
from .ops import xywhr2xyxyxyxy
|
10
|
-
|
11
|
-
TORCH_1_10 = check_version(TORCH_VERSION, "1.10.0")
|
9
|
+
from .torch_utils import TORCH_1_11
|
12
10
|
|
13
11
|
|
14
12
|
class TaskAlignedAssigner(nn.Module):
|
@@ -373,7 +371,7 @@ def make_anchors(feats, strides, grid_cell_offset=0.5):
|
|
373
371
|
h, w = feats[i].shape[2:] if isinstance(feats, list) else (int(feats[i][0]), int(feats[i][1]))
|
374
372
|
sx = torch.arange(end=w, device=device, dtype=dtype) + grid_cell_offset # shift x
|
375
373
|
sy = torch.arange(end=h, device=device, dtype=dtype) + grid_cell_offset # shift y
|
376
|
-
sy, sx = torch.meshgrid(sy, sx, indexing="ij") if
|
374
|
+
sy, sx = torch.meshgrid(sy, sx, indexing="ij") if TORCH_1_11 else torch.meshgrid(sy, sx)
|
377
375
|
anchor_points.append(torch.stack((sx, sy), -1).view(-1, 2))
|
378
376
|
stride_tensor.append(torch.full((h * w, 1), stride, dtype=dtype, device=device))
|
379
377
|
return torch.cat(anchor_points), torch.cat(stride_tensor)
|
@@ -38,8 +38,11 @@ from ultralytics.utils.patches import torch_load
|
|
38
38
|
|
39
39
|
# Version checks (all default to version>=min_version)
|
40
40
|
TORCH_1_9 = check_version(TORCH_VERSION, "1.9.0")
|
41
|
+
TORCH_1_10 = check_version(TORCH_VERSION, "1.10.0")
|
42
|
+
TORCH_1_11 = check_version(TORCH_VERSION, "1.11.0")
|
41
43
|
TORCH_1_13 = check_version(TORCH_VERSION, "1.13.0")
|
42
44
|
TORCH_2_0 = check_version(TORCH_VERSION, "2.0.0")
|
45
|
+
TORCH_2_1 = check_version(TORCH_VERSION, "2.1.0")
|
43
46
|
TORCH_2_4 = check_version(TORCH_VERSION, "2.4.0")
|
44
47
|
TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
|
45
48
|
TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
|
@@ -534,21 +537,6 @@ def copy_attr(a, b, include=(), exclude=()):
|
|
534
537
|
setattr(a, k, v)
|
535
538
|
|
536
539
|
|
537
|
-
def get_latest_opset():
|
538
|
-
"""
|
539
|
-
Return the second-most recent ONNX opset version supported by this version of PyTorch, adjusted for maturity.
|
540
|
-
|
541
|
-
Returns:
|
542
|
-
(int): The ONNX opset version.
|
543
|
-
"""
|
544
|
-
if TORCH_1_13:
|
545
|
-
# If the PyTorch>=1.13, dynamically compute the latest opset minus one using 'symbolic_opset'
|
546
|
-
return max(int(k[14:]) for k in vars(torch.onnx) if "symbolic_opset" in k) - 1
|
547
|
-
# Otherwise for PyTorch<=1.12 return the corresponding predefined opset
|
548
|
-
version = torch.onnx.producer_version.rsplit(".", 1)[0] # i.e. '2.3'
|
549
|
-
return {"1.12": 15, "1.11": 14, "1.10": 13, "1.9": 12, "1.8": 12}.get(version, 12)
|
550
|
-
|
551
|
-
|
552
540
|
def intersect_dicts(da, db, exclude=()):
|
553
541
|
"""
|
554
542
|
Return a dictionary of intersecting keys with matching shapes, excluding 'exclude' keys, using da values.
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.203
|
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>
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/coco8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.202 → ultralytics-8.3.203}/ultralytics/cfg/datasets/dota8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|