ultralytics 8.3.116__tar.gz → 8.3.118__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.116/ultralytics.egg-info → ultralytics-8.3.118}/PKG-INFO +3 -4
- {ultralytics-8.3.116 → ultralytics-8.3.118}/pyproject.toml +4 -4
- ultralytics-8.3.118/tests/__init__.py +22 -0
- ultralytics-8.3.118/tests/conftest.py +83 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/__init__.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/augment.py +3 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/base.py +11 -3
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/dataset.py +3 -4
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/loaders.py +2 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/exporter.py +18 -11
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/trainer.py +2 -2
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/session.py +3 -2
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/utils.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/predict.py +2 -2
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/val.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/model.py +2 -3
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/train.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/predict.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/train.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/val.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/train.py +3 -3
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/val.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/autobackend.py +10 -9
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/text_model.py +97 -15
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/__init__.py +1 -1
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/benchmarks.py +4 -5
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/checks.py +4 -2
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/downloads.py +1 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/torch_utils.py +4 -3
- {ultralytics-8.3.116 → ultralytics-8.3.118/ultralytics.egg-info}/PKG-INFO +3 -4
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/SOURCES.txt +9 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/requires.txt +4 -3
- {ultralytics-8.3.116 → ultralytics-8.3.118}/LICENSE +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/README.md +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/setup.cfg +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_cli.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_engine.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_exports.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_python.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/export.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.116 → ultralytics-8.3.118}/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.118
|
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 = [
|
@@ -134,7 +133,8 @@ ultralytics = "ultralytics.cfg:entrypoint"
|
|
134
133
|
# Tools settings -------------------------------------------------------------------------------------------------------
|
135
134
|
[tool.setuptools] # configuration specific to the `setuptools` build backend.
|
136
135
|
packages = { find = { where = ["."], include = ["ultralytics", "ultralytics.*"] } }
|
137
|
-
|
136
|
+
# Tests included below for checking Conda builds in https://github.com/conda-forge/ultralytics-feedstock
|
137
|
+
package-data = { "ultralytics" = ["**/*.yaml", "**/*.sh", "../tests/*.py"], "ultralytics.assets" = ["*.jpg"] }
|
138
138
|
|
139
139
|
[tool.setuptools.dynamic]
|
140
140
|
version = { attr = "ultralytics.__version__" }
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks
|
4
|
+
|
5
|
+
# Constants used in tests
|
6
|
+
MODEL = WEIGHTS_DIR / "path with spaces" / "yolo11n.pt" # test spaces in path
|
7
|
+
CFG = "yolo11n.yaml"
|
8
|
+
SOURCE = ASSETS / "bus.jpg"
|
9
|
+
SOURCES_LIST = [ASSETS / "bus.jpg", ASSETS, ASSETS / "*", ASSETS / "**/*.jpg"]
|
10
|
+
TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
|
11
|
+
CUDA_IS_AVAILABLE = checks.cuda_is_available()
|
12
|
+
CUDA_DEVICE_COUNT = checks.cuda_device_count()
|
13
|
+
|
14
|
+
__all__ = (
|
15
|
+
"MODEL",
|
16
|
+
"CFG",
|
17
|
+
"SOURCE",
|
18
|
+
"SOURCES_LIST",
|
19
|
+
"TMP",
|
20
|
+
"CUDA_IS_AVAILABLE",
|
21
|
+
"CUDA_DEVICE_COUNT",
|
22
|
+
)
|
@@ -0,0 +1,83 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
import shutil
|
4
|
+
from pathlib import Path
|
5
|
+
|
6
|
+
from tests import TMP
|
7
|
+
|
8
|
+
|
9
|
+
def pytest_addoption(parser):
|
10
|
+
"""
|
11
|
+
Add custom command-line options to pytest.
|
12
|
+
|
13
|
+
Args:
|
14
|
+
parser (pytest.config.Parser): The pytest parser object for adding custom command-line options.
|
15
|
+
|
16
|
+
Returns:
|
17
|
+
(None)
|
18
|
+
"""
|
19
|
+
parser.addoption("--slow", action="store_true", default=False, help="Run slow tests")
|
20
|
+
|
21
|
+
|
22
|
+
def pytest_collection_modifyitems(config, items):
|
23
|
+
"""
|
24
|
+
Modify the list of test items to exclude tests marked as slow if the --slow option is not specified.
|
25
|
+
|
26
|
+
Args:
|
27
|
+
config (pytest.config.Config): The pytest configuration object that provides access to command-line options.
|
28
|
+
items (list): The list of collected pytest item objects to be modified based on the presence of --slow option.
|
29
|
+
|
30
|
+
Returns:
|
31
|
+
(None): The function modifies the 'items' list in place.
|
32
|
+
"""
|
33
|
+
if not config.getoption("--slow"):
|
34
|
+
# Remove the item entirely from the list of test items if it's marked as 'slow'
|
35
|
+
items[:] = [item for item in items if "slow" not in item.keywords]
|
36
|
+
|
37
|
+
|
38
|
+
def pytest_sessionstart(session):
|
39
|
+
"""
|
40
|
+
Initialize session configurations for pytest.
|
41
|
+
|
42
|
+
This function is automatically called by pytest after the 'Session' object has been created but before performing
|
43
|
+
test collection. It sets the initial seeds and prepares the temporary directory for the test session.
|
44
|
+
|
45
|
+
Args:
|
46
|
+
session (pytest.Session): The pytest session object.
|
47
|
+
|
48
|
+
Returns:
|
49
|
+
(None)
|
50
|
+
"""
|
51
|
+
from ultralytics.utils.torch_utils import init_seeds
|
52
|
+
|
53
|
+
init_seeds()
|
54
|
+
shutil.rmtree(TMP, ignore_errors=True) # delete any existing tests/tmp directory
|
55
|
+
TMP.mkdir(parents=True, exist_ok=True) # create a new empty directory
|
56
|
+
|
57
|
+
|
58
|
+
def pytest_terminal_summary(terminalreporter, exitstatus, config):
|
59
|
+
"""
|
60
|
+
Cleanup operations after pytest session.
|
61
|
+
|
62
|
+
This function is automatically called by pytest at the end of the entire test session. It removes certain files
|
63
|
+
and directories used during testing.
|
64
|
+
|
65
|
+
Args:
|
66
|
+
terminalreporter (pytest.terminal.TerminalReporter): The terminal reporter object used for terminal output.
|
67
|
+
exitstatus (int): The exit status of the test run.
|
68
|
+
config (pytest.config.Config): The pytest config object.
|
69
|
+
|
70
|
+
Returns:
|
71
|
+
(None)
|
72
|
+
"""
|
73
|
+
from ultralytics.utils import WEIGHTS_DIR
|
74
|
+
|
75
|
+
# Remove files
|
76
|
+
models = [path for x in ["*.onnx", "*.torchscript"] for path in WEIGHTS_DIR.rglob(x)]
|
77
|
+
for file in ["decelera_portrait_min.mov", "bus.jpg", "yolo11n.onnx", "yolo11n.torchscript"] + models:
|
78
|
+
Path(file).unlink(missing_ok=True)
|
79
|
+
|
80
|
+
# Remove directories
|
81
|
+
models = [path for x in ["*.mlpackage", "*_openvino_model"] for path in WEIGHTS_DIR.rglob(x)]
|
82
|
+
for directory in [WEIGHTS_DIR / "path with spaces", TMP.parents[1] / ".pytest_cache", TMP] + models:
|
83
|
+
shutil.rmtree(directory, ignore_errors=True)
|
@@ -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,
|
@@ -1586,6 +1586,9 @@ class LetterBox:
|
|
1586
1586
|
|
1587
1587
|
if shape[::-1] != new_unpad: # resize
|
1588
1588
|
img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR)
|
1589
|
+
if img.ndim == 2:
|
1590
|
+
img = img[..., None]
|
1591
|
+
|
1589
1592
|
top, bottom = int(round(dh - 0.1)) if self.center else 0, int(round(dh + 0.1))
|
1590
1593
|
left, right = int(round(dw - 0.1)) if self.center else 0, int(round(dw + 0.1))
|
1591
1594
|
h, w, c = img.shape
|
@@ -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):
|
@@ -32,6 +33,7 @@ class BaseDataset(Dataset):
|
|
32
33
|
single_cls (bool): Whether to treat all objects as a single class.
|
33
34
|
prefix (str): Prefix to print in log messages.
|
34
35
|
fraction (float): Fraction of dataset to utilize.
|
36
|
+
cv2_flag (int): OpenCV flag for reading images.
|
35
37
|
im_files (List[str]): List of image file paths.
|
36
38
|
labels (List[Dict]): List of label data dictionaries.
|
37
39
|
ni (int): Number of images in the dataset.
|
@@ -78,6 +80,7 @@ class BaseDataset(Dataset):
|
|
78
80
|
single_cls=False,
|
79
81
|
classes=None,
|
80
82
|
fraction=1.0,
|
83
|
+
channels=3,
|
81
84
|
):
|
82
85
|
"""
|
83
86
|
Initialize BaseDataset with given configuration and options.
|
@@ -96,6 +99,7 @@ class BaseDataset(Dataset):
|
|
96
99
|
single_cls (bool, optional): If True, single class training is used.
|
97
100
|
classes (list, optional): List of included classes.
|
98
101
|
fraction (float, optional): Fraction of dataset to utilize.
|
102
|
+
channels (int, optional): Number of channels in the images (1 for grayscale, 3 for RGB).
|
99
103
|
"""
|
100
104
|
super().__init__()
|
101
105
|
self.img_path = img_path
|
@@ -104,6 +108,8 @@ class BaseDataset(Dataset):
|
|
104
108
|
self.single_cls = single_cls
|
105
109
|
self.prefix = prefix
|
106
110
|
self.fraction = fraction
|
111
|
+
self.channels = channels
|
112
|
+
self.cv2_flag = cv2.IMREAD_GRAYSCALE if channels == 1 else cv2.IMREAD_COLOR
|
107
113
|
self.im_files = self.get_img_files(self.img_path)
|
108
114
|
self.labels = self.get_labels()
|
109
115
|
self.update_labels(include_class=classes) # single_cls and include_class
|
@@ -223,9 +229,9 @@ class BaseDataset(Dataset):
|
|
223
229
|
except Exception as e:
|
224
230
|
LOGGER.warning(f"{self.prefix}Removing corrupt *.npy image file {fn} due to: {e}")
|
225
231
|
Path(fn).unlink(missing_ok=True)
|
226
|
-
im = imread(f) # BGR
|
232
|
+
im = imread(f, flags=self.cv2_flag) # BGR
|
227
233
|
else: # read image
|
228
|
-
im = imread(f) # BGR
|
234
|
+
im = imread(f, flags=self.cv2_flag) # BGR
|
229
235
|
if im is None:
|
230
236
|
raise FileNotFoundError(f"Image Not Found {f}")
|
231
237
|
|
@@ -237,6 +243,8 @@ class BaseDataset(Dataset):
|
|
237
243
|
im = cv2.resize(im, (w, h), interpolation=cv2.INTER_LINEAR)
|
238
244
|
elif not (h0 == w0 == self.imgsz): # resize by stretching image to square imgsz
|
239
245
|
im = cv2.resize(im, (self.imgsz, self.imgsz), interpolation=cv2.INTER_LINEAR)
|
246
|
+
if im.ndim == 2:
|
247
|
+
im = im[..., None]
|
240
248
|
|
241
249
|
# Add to buffer if training with augmentations
|
242
250
|
if self.augment:
|
@@ -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,
|
@@ -85,7 +84,7 @@ class YOLODataset(BaseDataset):
|
|
85
84
|
self.use_obb = task == "obb"
|
86
85
|
self.data = data
|
87
86
|
assert not (self.use_segments and self.use_keypoints), "Can not use both segments and keypoints."
|
88
|
-
super().__init__(*args, **kwargs)
|
87
|
+
super().__init__(*args, channels=self.data["channels"], **kwargs)
|
89
88
|
|
90
89
|
def cache_labels(self, path=Path("./labels.cache")):
|
91
90
|
"""
|
@@ -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
|
@@ -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,
|
@@ -238,9 +238,6 @@ class Exporter:
|
|
238
238
|
_callbacks (dict, optional): Dictionary of callback functions.
|
239
239
|
"""
|
240
240
|
self.args = get_cfg(cfg, overrides)
|
241
|
-
if self.args.format.lower() in {"coreml", "mlmodel"}: # fix attempt for protobuf<3.20.x errors
|
242
|
-
os.environ["PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION"] = "python" # must run before TensorBoard callback
|
243
|
-
|
244
241
|
self.callbacks = _callbacks or callbacks.get_default_callbacks()
|
245
242
|
callbacks.add_integration_callbacks(self)
|
246
243
|
|
@@ -384,7 +381,7 @@ class Exporter:
|
|
384
381
|
m.export = True
|
385
382
|
m.format = self.args.format
|
386
383
|
m.max_det = self.args.max_det
|
387
|
-
m.xyxy = self.args.nms
|
384
|
+
m.xyxy = self.args.nms and not coreml
|
388
385
|
elif isinstance(m, C2f) and not is_tf_format:
|
389
386
|
# EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
|
390
387
|
m.forward = m.forward_split
|
@@ -703,7 +700,7 @@ class Exporter:
|
|
703
700
|
|
704
701
|
@try_export
|
705
702
|
def export_mnn(self, prefix=colorstr("MNN:")):
|
706
|
-
"""
|
703
|
+
"""YOLO MNN export using MNN https://github.com/alibaba/MNN."""
|
707
704
|
f_onnx, _ = self.export_onnx() # get onnx model first
|
708
705
|
|
709
706
|
check_requirements("MNN>=2.9.6")
|
@@ -925,10 +922,8 @@ class Exporter:
|
|
925
922
|
"onnx>=1.12.0",
|
926
923
|
"onnx2tf>=1.26.3",
|
927
924
|
"onnxslim>=0.1.31",
|
928
|
-
"tflite_support<=0.4.3" if IS_JETSON else "tflite_support", # fix ImportError 'GLIBCXX_3.4.29'
|
929
|
-
"flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
|
930
925
|
"onnxruntime-gpu" if cuda else "onnxruntime",
|
931
|
-
"protobuf>=5",
|
926
|
+
"protobuf>=5",
|
932
927
|
),
|
933
928
|
cmds="--extra-index-url https://pypi.ngc.nvidia.com", # onnx_graphsurgeon only on NVIDIA
|
934
929
|
)
|
@@ -1279,8 +1274,20 @@ class Exporter:
|
|
1279
1274
|
|
1280
1275
|
return f, None
|
1281
1276
|
|
1282
|
-
def _add_tflite_metadata(self, file):
|
1277
|
+
def _add_tflite_metadata(self, file, use_flatbuffers=False):
|
1283
1278
|
"""Add metadata to *.tflite models per https://ai.google.dev/edge/litert/models/metadata."""
|
1279
|
+
if not use_flatbuffers:
|
1280
|
+
import zipfile
|
1281
|
+
|
1282
|
+
with zipfile.ZipFile(file, "a", zipfile.ZIP_DEFLATED) as zf:
|
1283
|
+
zf.writestr("metadata.json", json.dumps(self.metadata, indent=2))
|
1284
|
+
return
|
1285
|
+
|
1286
|
+
if IS_PYTHON_MINIMUM_3_12:
|
1287
|
+
LOGGER.warning(f"TFLite Support package may not be compatible with Python>=3.12 environments for {file}")
|
1288
|
+
|
1289
|
+
# Update old 'flatbuffers' included inside tensorflow package
|
1290
|
+
check_requirements(("tflite_support", "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'"))
|
1284
1291
|
import flatbuffers
|
1285
1292
|
|
1286
1293
|
try:
|
@@ -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
|
)
|
@@ -47,7 +47,7 @@ class DetectionPredictor(BasePredictor):
|
|
47
47
|
(list): List of Results objects containing the post-processed predictions.
|
48
48
|
|
49
49
|
Examples:
|
50
|
-
>>> predictor = DetectionPredictor(overrides=dict(model="
|
50
|
+
>>> predictor = DetectionPredictor(overrides=dict(model="yolo11n.pt"))
|
51
51
|
>>> results = predictor.predict("path/to/image.jpg")
|
52
52
|
>>> processed_results = predictor.postprocess(preds, img, orig_imgs)
|
53
53
|
"""
|
@@ -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,
|
@@ -29,16 +29,15 @@ class YOLO(Model):
|
|
29
29
|
(YOLOWorld or YOLOE) based on the model filename.
|
30
30
|
|
31
31
|
Args:
|
32
|
-
model (str | Path): Model name or path to model file, i.e. 'yolo11n.pt', '
|
32
|
+
model (str | Path): Model name or path to model file, i.e. 'yolo11n.pt', 'yolo11n.yaml'.
|
33
33
|
task (str | None): YOLO task specification, i.e. 'detect', 'segment', 'classify', 'pose', 'obb'.
|
34
34
|
Defaults to auto-detection based on model.
|
35
35
|
verbose (bool): Display model info on load.
|
36
36
|
|
37
37
|
Examples:
|
38
38
|
>>> from ultralytics import YOLO
|
39
|
-
>>> model = YOLO("yolov8n.pt") # load a pretrained YOLOv8n detection model
|
40
|
-
>>> model = YOLO("yolov8n-seg.pt") # load a pretrained YOLOv8n segmentation model
|
41
39
|
>>> model = YOLO("yolo11n.pt") # load a pretrained YOLOv11n detection model
|
40
|
+
>>> model = YOLO("yolo11n-seg.pt") # load a pretrained YOLO11n segmentation model
|
42
41
|
"""
|
43
42
|
path = Path(model)
|
44
43
|
if "-world" in path.stem and path.suffix in {".pt", ".yaml", ".yml"}: # if YOLOWorld PyTorch model
|
@@ -65,7 +65,7 @@ class OBBTrainer(yolo.detect.DetectionTrainer):
|
|
65
65
|
|
66
66
|
Examples:
|
67
67
|
>>> trainer = OBBTrainer()
|
68
|
-
>>> model = trainer.get_model(cfg="
|
68
|
+
>>> model = trainer.get_model(cfg="yolo11n-obb.yaml", weights="yolo11n-obb.pt")
|
69
69
|
"""
|
70
70
|
model = OBBModel(cfg, nc=self.data["nc"], ch=self.data["channels"], verbose=verbose and RANK == -1)
|
71
71
|
if weights:
|
@@ -41,7 +41,7 @@ class PosePredictor(DetectionPredictor):
|
|
41
41
|
Examples:
|
42
42
|
>>> from ultralytics.utils import ASSETS
|
43
43
|
>>> from ultralytics.models.yolo.pose import PosePredictor
|
44
|
-
>>> args = dict(model="
|
44
|
+
>>> args = dict(model="yolo11n-pose.pt", source=ASSETS)
|
45
45
|
>>> predictor = PosePredictor(overrides=args)
|
46
46
|
>>> predictor.predict_cli()
|
47
47
|
"""
|
@@ -53,7 +53,7 @@ class PoseTrainer(yolo.detect.DetectionTrainer):
|
|
53
53
|
|
54
54
|
Examples:
|
55
55
|
>>> from ultralytics.models.yolo.pose import PoseTrainer
|
56
|
-
>>> args = dict(model="
|
56
|
+
>>> args = dict(model="yolo11n-pose.pt", data="coco8-pose.yaml", epochs=3)
|
57
57
|
>>> trainer = PoseTrainer(overrides=args)
|
58
58
|
>>> trainer.train()
|
59
59
|
"""
|
@@ -62,7 +62,7 @@ class PoseValidator(DetectionValidator):
|
|
62
62
|
|
63
63
|
Examples:
|
64
64
|
>>> from ultralytics.models.yolo.pose import PoseValidator
|
65
|
-
>>> args = dict(model="
|
65
|
+
>>> args = dict(model="yolo11n-pose.pt", data="coco8-pose.yaml")
|
66
66
|
>>> validator = PoseValidator(args=args)
|
67
67
|
>>> validator()
|
68
68
|
|
@@ -39,7 +39,7 @@ class SegmentationTrainer(yolo.detect.DetectionTrainer):
|
|
39
39
|
|
40
40
|
Examples:
|
41
41
|
>>> from ultralytics.models.yolo.segment import SegmentationTrainer
|
42
|
-
>>> args = dict(model="
|
42
|
+
>>> args = dict(model="yolo11n-seg.pt", data="coco8-seg.yaml", epochs=3)
|
43
43
|
>>> trainer = SegmentationTrainer(overrides=args)
|
44
44
|
>>> trainer.train()
|
45
45
|
"""
|
@@ -62,8 +62,8 @@ class SegmentationTrainer(yolo.detect.DetectionTrainer):
|
|
62
62
|
|
63
63
|
Examples:
|
64
64
|
>>> trainer = SegmentationTrainer()
|
65
|
-
>>> model = trainer.get_model(cfg="
|
66
|
-
>>> model = trainer.get_model(weights="
|
65
|
+
>>> model = trainer.get_model(cfg="yolo11n-seg.yaml")
|
66
|
+
>>> model = trainer.get_model(weights="yolo11n-seg.pt", verbose=False)
|
67
67
|
"""
|
68
68
|
model = SegmentationModel(cfg, nc=self.data["nc"], ch=self.data["channels"], verbose=verbose and RANK == -1)
|
69
69
|
if weights:
|
@@ -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
|
|
@@ -14,7 +14,7 @@ import torch
|
|
14
14
|
import torch.nn as nn
|
15
15
|
from PIL import Image
|
16
16
|
|
17
|
-
from ultralytics.utils import ARM64, IS_JETSON,
|
17
|
+
from ultralytics.utils import ARM64, IS_JETSON, LINUX, LOGGER, PYTHON_VERSION, ROOT, yaml_load
|
18
18
|
from ultralytics.utils.checks import check_requirements, check_suffix, check_version, check_yaml, is_rockchip
|
19
19
|
from ultralytics.utils.downloads import attempt_download_asset, is_url
|
20
20
|
|
@@ -90,7 +90,7 @@ class AutoBackend(nn.Module):
|
|
90
90
|
_model_type: Determine the model type from file path.
|
91
91
|
|
92
92
|
Examples:
|
93
|
-
>>> model = AutoBackend(weights="
|
93
|
+
>>> model = AutoBackend(weights="yolo11n.pt", device="cuda")
|
94
94
|
>>> results = model(img)
|
95
95
|
"""
|
96
96
|
|
@@ -207,9 +207,6 @@ class AutoBackend(nn.Module):
|
|
207
207
|
elif onnx or imx:
|
208
208
|
LOGGER.info(f"Loading {w} for ONNX Runtime inference...")
|
209
209
|
check_requirements(("onnx", "onnxruntime-gpu" if cuda else "onnxruntime"))
|
210
|
-
if IS_RASPBERRYPI or IS_JETSON:
|
211
|
-
# Fix 'numpy.linalg._umath_linalg' has no attribute '_ilp64' for TF SavedModel on RPi and Jetson
|
212
|
-
check_requirements("numpy==1.23.5")
|
213
210
|
import onnxruntime
|
214
211
|
|
215
212
|
providers = ["CPUExecutionProvider"]
|
@@ -432,10 +429,14 @@ class AutoBackend(nn.Module):
|
|
432
429
|
output_details = interpreter.get_output_details() # outputs
|
433
430
|
# Load metadata
|
434
431
|
try:
|
435
|
-
with zipfile.ZipFile(w, "r") as
|
436
|
-
|
437
|
-
|
438
|
-
|
432
|
+
with zipfile.ZipFile(w, "r") as zf:
|
433
|
+
name = zf.namelist()[0]
|
434
|
+
contents = zf.read(name).decode("utf-8")
|
435
|
+
if name == "metadata.json": # Custom Ultralytics metadata dict for Python>=3.12
|
436
|
+
metadata = json.loads(contents)
|
437
|
+
else:
|
438
|
+
metadata = ast.literal_eval(contents) # Default tflite-support metadata for Python<=3.11
|
439
|
+
except (zipfile.BadZipFile, SyntaxError, ValueError, json.JSONDecodeError):
|
439
440
|
pass
|
440
441
|
|
441
442
|
# TF.js
|