ultralytics 8.3.117__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.117/ultralytics.egg-info → ultralytics-8.3.118}/PKG-INFO +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/pyproject.toml +2 -1
- ultralytics-8.3.118/tests/__init__.py +22 -0
- ultralytics-8.3.118/tests/conftest.py +83 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/augment.py +3 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/base.py +9 -2
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/dataset.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/exporter.py +1 -4
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/predict.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/model.py +2 -3
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/train.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/predict.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/train.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/val.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/train.py +3 -3
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/autobackend.py +2 -5
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/text_model.py +97 -13
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/benchmarks.py +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/downloads.py +1 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118/ultralytics.egg-info}/PKG-INFO +1 -1
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics.egg-info/SOURCES.txt +9 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/LICENSE +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/README.md +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/setup.cfg +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_cli.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_engine.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_exports.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_python.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/export.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.3.117 → 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>
|
@@ -133,7 +133,8 @@ ultralytics = "ultralytics.cfg:entrypoint"
|
|
133
133
|
# Tools settings -------------------------------------------------------------------------------------------------------
|
134
134
|
[tool.setuptools] # configuration specific to the `setuptools` build backend.
|
135
135
|
packages = { find = { where = ["."], include = ["ultralytics", "ultralytics.*"] } }
|
136
|
-
|
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"] }
|
137
138
|
|
138
139
|
[tool.setuptools.dynamic]
|
139
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)
|
@@ -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
|
@@ -33,6 +33,7 @@ class BaseDataset(Dataset):
|
|
33
33
|
single_cls (bool): Whether to treat all objects as a single class.
|
34
34
|
prefix (str): Prefix to print in log messages.
|
35
35
|
fraction (float): Fraction of dataset to utilize.
|
36
|
+
cv2_flag (int): OpenCV flag for reading images.
|
36
37
|
im_files (List[str]): List of image file paths.
|
37
38
|
labels (List[Dict]): List of label data dictionaries.
|
38
39
|
ni (int): Number of images in the dataset.
|
@@ -79,6 +80,7 @@ class BaseDataset(Dataset):
|
|
79
80
|
single_cls=False,
|
80
81
|
classes=None,
|
81
82
|
fraction=1.0,
|
83
|
+
channels=3,
|
82
84
|
):
|
83
85
|
"""
|
84
86
|
Initialize BaseDataset with given configuration and options.
|
@@ -97,6 +99,7 @@ class BaseDataset(Dataset):
|
|
97
99
|
single_cls (bool, optional): If True, single class training is used.
|
98
100
|
classes (list, optional): List of included classes.
|
99
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).
|
100
103
|
"""
|
101
104
|
super().__init__()
|
102
105
|
self.img_path = img_path
|
@@ -105,6 +108,8 @@ class BaseDataset(Dataset):
|
|
105
108
|
self.single_cls = single_cls
|
106
109
|
self.prefix = prefix
|
107
110
|
self.fraction = fraction
|
111
|
+
self.channels = channels
|
112
|
+
self.cv2_flag = cv2.IMREAD_GRAYSCALE if channels == 1 else cv2.IMREAD_COLOR
|
108
113
|
self.im_files = self.get_img_files(self.img_path)
|
109
114
|
self.labels = self.get_labels()
|
110
115
|
self.update_labels(include_class=classes) # single_cls and include_class
|
@@ -224,9 +229,9 @@ class BaseDataset(Dataset):
|
|
224
229
|
except Exception as e:
|
225
230
|
LOGGER.warning(f"{self.prefix}Removing corrupt *.npy image file {fn} due to: {e}")
|
226
231
|
Path(fn).unlink(missing_ok=True)
|
227
|
-
im = imread(f) # BGR
|
232
|
+
im = imread(f, flags=self.cv2_flag) # BGR
|
228
233
|
else: # read image
|
229
|
-
im = imread(f) # BGR
|
234
|
+
im = imread(f, flags=self.cv2_flag) # BGR
|
230
235
|
if im is None:
|
231
236
|
raise FileNotFoundError(f"Image Not Found {f}")
|
232
237
|
|
@@ -238,6 +243,8 @@ class BaseDataset(Dataset):
|
|
238
243
|
im = cv2.resize(im, (w, h), interpolation=cv2.INTER_LINEAR)
|
239
244
|
elif not (h0 == w0 == self.imgsz): # resize by stretching image to square imgsz
|
240
245
|
im = cv2.resize(im, (self.imgsz, self.imgsz), interpolation=cv2.INTER_LINEAR)
|
246
|
+
if im.ndim == 2:
|
247
|
+
im = im[..., None]
|
241
248
|
|
242
249
|
# Add to buffer if training with augmentations
|
243
250
|
if self.augment:
|
@@ -84,7 +84,7 @@ class YOLODataset(BaseDataset):
|
|
84
84
|
self.use_obb = task == "obb"
|
85
85
|
self.data = data
|
86
86
|
assert not (self.use_segments and self.use_keypoints), "Can not use both segments and keypoints."
|
87
|
-
super().__init__(*args, **kwargs)
|
87
|
+
super().__init__(*args, channels=self.data["channels"], **kwargs)
|
88
88
|
|
89
89
|
def cache_labels(self, path=Path("./labels.cache")):
|
90
90
|
"""
|
@@ -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
|
|
@@ -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")
|
@@ -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
|
"""
|
@@ -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:
|
@@ -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"]
|
@@ -15,18 +15,6 @@ except ImportError:
|
|
15
15
|
checks.check_requirements("git+https://github.com/ultralytics/CLIP.git")
|
16
16
|
import clip
|
17
17
|
|
18
|
-
try:
|
19
|
-
import warnings
|
20
|
-
|
21
|
-
# Suppress 'timm.models.layers is deprecated, please import via timm.layers' warning from mobileclip usage
|
22
|
-
with warnings.catch_warnings():
|
23
|
-
warnings.filterwarnings("ignore", category=FutureWarning)
|
24
|
-
import mobileclip
|
25
|
-
except ImportError:
|
26
|
-
# Ultralytics fork preferred since Apple MobileCLIP repo has incorrect version of torchvision
|
27
|
-
checks.check_requirements("git+https://github.com/ultralytics/mobileclip.git")
|
28
|
-
import mobileclip
|
29
|
-
|
30
18
|
|
31
19
|
class TextModel(nn.Module):
|
32
20
|
"""
|
@@ -190,6 +178,18 @@ class MobileCLIP(TextModel):
|
|
190
178
|
>>> tokens = model.tokenize(["a photo of a cat", "a photo of a dog"])
|
191
179
|
>>> features = model.encode_text(tokens)
|
192
180
|
"""
|
181
|
+
try:
|
182
|
+
import warnings
|
183
|
+
|
184
|
+
# Suppress 'timm.models.layers is deprecated, please import via timm.layers' warning from mobileclip usage
|
185
|
+
with warnings.catch_warnings():
|
186
|
+
warnings.filterwarnings("ignore", category=FutureWarning)
|
187
|
+
import mobileclip
|
188
|
+
except ImportError:
|
189
|
+
# Ultralytics fork preferred since Apple MobileCLIP repo has incorrect version of torchvision
|
190
|
+
checks.check_requirements("git+https://github.com/ultralytics/mobileclip.git")
|
191
|
+
import mobileclip
|
192
|
+
|
193
193
|
super().__init__()
|
194
194
|
config = self.config_size_map[size]
|
195
195
|
file = f"mobileclip_{size}.pt"
|
@@ -243,6 +243,90 @@ class MobileCLIP(TextModel):
|
|
243
243
|
return text_features
|
244
244
|
|
245
245
|
|
246
|
+
class MobileCLIPTS(TextModel):
|
247
|
+
"""
|
248
|
+
Load a TorchScript traced version of MobileCLIP.
|
249
|
+
|
250
|
+
This class implements the TextModel interface using Apple's MobileCLIP model, providing efficient text encoding
|
251
|
+
capabilities for vision-language tasks.
|
252
|
+
|
253
|
+
Attributes:
|
254
|
+
encoder (mobileclip.model.MobileCLIP): The loaded MobileCLIP text encoder.
|
255
|
+
tokenizer (callable): Tokenizer function for processing text inputs.
|
256
|
+
device (torch.device): Device where the model is loaded.
|
257
|
+
|
258
|
+
Methods:
|
259
|
+
tokenize: Convert input texts to MobileCLIP tokens.
|
260
|
+
encode_text: Encode tokenized texts into normalized feature vectors.
|
261
|
+
|
262
|
+
Examples:
|
263
|
+
>>> device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
264
|
+
>>> text_encoder = MobileCLIP(device=device)
|
265
|
+
>>> tokens = text_encoder.tokenize(["a photo of a cat", "a photo of a dog"])
|
266
|
+
>>> features = text_encoder.encode_text(tokens)
|
267
|
+
"""
|
268
|
+
|
269
|
+
def __init__(self, device):
|
270
|
+
"""
|
271
|
+
Initialize the MobileCLIP text encoder.
|
272
|
+
|
273
|
+
This class implements the TextModel interface using Apple's MobileCLIP model for efficient text encoding.
|
274
|
+
|
275
|
+
Args:
|
276
|
+
device (torch.device): Device to load the model on.
|
277
|
+
|
278
|
+
Examples:
|
279
|
+
>>> from ultralytics.nn.modules import MobileCLIP
|
280
|
+
>>> import torch
|
281
|
+
>>> model = MobileCLIP(device=torch.device("cpu"))
|
282
|
+
>>> tokens = model.tokenize(["a photo of a cat", "a photo of a dog"])
|
283
|
+
>>> features = model.encode_text(tokens)
|
284
|
+
"""
|
285
|
+
super().__init__()
|
286
|
+
from ultralytics.utils.downloads import attempt_download_asset
|
287
|
+
|
288
|
+
self.encoder = torch.jit.load(attempt_download_asset("mobileclip_blt.ts"), map_location=device)
|
289
|
+
self.tokenizer = clip.clip.tokenize
|
290
|
+
self.device = device
|
291
|
+
|
292
|
+
def tokenize(self, texts):
|
293
|
+
"""
|
294
|
+
Convert input texts to MobileCLIP tokens.
|
295
|
+
|
296
|
+
Args:
|
297
|
+
texts (list[str]): List of text strings to tokenize.
|
298
|
+
|
299
|
+
Returns:
|
300
|
+
(torch.Tensor): Tokenized text inputs with shape (batch_size, sequence_length).
|
301
|
+
|
302
|
+
Examples:
|
303
|
+
>>> model = MobileCLIP("cpu")
|
304
|
+
>>> tokens = model.tokenize(["a photo of a cat", "a photo of a dog"])
|
305
|
+
"""
|
306
|
+
return self.tokenizer(texts).to(self.device)
|
307
|
+
|
308
|
+
@smart_inference_mode()
|
309
|
+
def encode_text(self, texts, dtype=torch.float32):
|
310
|
+
"""
|
311
|
+
Encode tokenized texts into normalized feature vectors.
|
312
|
+
|
313
|
+
Args:
|
314
|
+
texts (torch.Tensor): Tokenized text inputs.
|
315
|
+
dtype (torch.dtype, optional): Data type for output features.
|
316
|
+
|
317
|
+
Returns:
|
318
|
+
(torch.Tensor): Normalized text feature vectors with L2 normalization applied.
|
319
|
+
|
320
|
+
Examples:
|
321
|
+
>>> model = MobileCLIP(device="cpu")
|
322
|
+
>>> tokens = model.tokenize(["a photo of a cat", "a photo of a dog"])
|
323
|
+
>>> features = model.encode_text(tokens)
|
324
|
+
>>> features.shape
|
325
|
+
torch.Size([2, 512]) # Actual dimension depends on model size
|
326
|
+
"""
|
327
|
+
return self.encoder(texts)
|
328
|
+
|
329
|
+
|
246
330
|
def build_text_model(variant, device=None):
|
247
331
|
"""
|
248
332
|
Build a text encoding model based on the specified variant.
|
@@ -262,6 +346,6 @@ def build_text_model(variant, device=None):
|
|
262
346
|
if base == "clip":
|
263
347
|
return CLIP(size, device)
|
264
348
|
elif base == "mobileclip":
|
265
|
-
return
|
349
|
+
return MobileCLIPTS(device)
|
266
350
|
else:
|
267
351
|
raise ValueError(f"Unrecognized base model: '{base}'. Supported base models: 'clip', 'mobileclip'.")
|
@@ -136,7 +136,7 @@ def benchmark(
|
|
136
136
|
assert not is_end2end
|
137
137
|
assert not isinstance(model, YOLOWorld), "YOLOWorldv2 IMX exports not supported"
|
138
138
|
assert model.task == "detect", "IMX only supported for detection task"
|
139
|
-
assert "C2f" in model.__str__(), "IMX only supported for YOLOv8"
|
139
|
+
assert "C2f" in model.__str__(), "IMX only supported for YOLOv8" # TODO: enable for YOLO11
|
140
140
|
if i == 15: # RKNN
|
141
141
|
assert not isinstance(model, YOLOWorld), "YOLOWorldv2 RKNN exports not supported yet"
|
142
142
|
assert not is_end2end, "End-to-end models not supported by RKNN yet"
|
@@ -34,6 +34,7 @@ GITHUB_ASSETS_NAMES = frozenset(
|
|
34
34
|
+ [f"FastSAM-{k}.pt" for k in "sx"]
|
35
35
|
+ [f"rtdetr-{k}.pt" for k in "lx"]
|
36
36
|
+ ["mobile_sam.pt"]
|
37
|
+
+ ["mobileclip_blt.ts"]
|
37
38
|
+ ["calibration_image_sample_data_20x128x128x3_float32.npy.zip"]
|
38
39
|
)
|
39
40
|
GITHUB_ASSETS_STEMS = frozenset(k.rsplit(".", 1)[0] for k in GITHUB_ASSETS_NAMES)
|
@@ -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>
|
@@ -15,6 +15,15 @@ ultralytics.egg-info/dependency_links.txt
|
|
15
15
|
ultralytics.egg-info/entry_points.txt
|
16
16
|
ultralytics.egg-info/requires.txt
|
17
17
|
ultralytics.egg-info/top_level.txt
|
18
|
+
ultralytics/../tests/__init__.py
|
19
|
+
ultralytics/../tests/conftest.py
|
20
|
+
ultralytics/../tests/test_cli.py
|
21
|
+
ultralytics/../tests/test_cuda.py
|
22
|
+
ultralytics/../tests/test_engine.py
|
23
|
+
ultralytics/../tests/test_exports.py
|
24
|
+
ultralytics/../tests/test_integrations.py
|
25
|
+
ultralytics/../tests/test_python.py
|
26
|
+
ultralytics/../tests/test_solutions.py
|
18
27
|
ultralytics/assets/bus.jpg
|
19
28
|
ultralytics/assets/zidane.jpg
|
20
29
|
ultralytics/cfg/__init__.py
|
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.117 → ultralytics-8.3.118}/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
|
{ultralytics-8.3.117 → ultralytics-8.3.118}/ultralytics/cfg/datasets/dota8-multispectral.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|