ultralytics 8.3.69__tar.gz → 8.3.71__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.69/ultralytics.egg-info → ultralytics-8.3.71}/PKG-INFO +4 -4
- {ultralytics-8.3.69 → ultralytics-8.3.71}/pyproject.toml +3 -3
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v6/yolov6.yaml +1 -1
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/model.py +12 -10
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/results.py +25 -20
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/sam.py +1 -2
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/pose/val.py +1 -1
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/autobackend.py +7 -1
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/tasks.py +30 -32
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/benchmarks.py +11 -1
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/checks.py +2 -2
- {ultralytics-8.3.69 → ultralytics-8.3.71/ultralytics.egg-info}/PKG-INFO +4 -4
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics.egg-info/requires.txt +3 -5
- {ultralytics-8.3.69 → ultralytics-8.3.71}/LICENSE +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/README.md +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/setup.cfg +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/conftest.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_cli.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_engine.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_exports.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_python.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/exporter.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.69 → ultralytics-8.3.71}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.71
|
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>
|
@@ -32,8 +32,7 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
32
32
|
Requires-Python: >=3.8
|
33
33
|
Description-Content-Type: text/markdown
|
34
34
|
License-File: LICENSE
|
35
|
-
Requires-Dist: numpy
|
36
|
-
Requires-Dist: numpy<2.0.0; sys_platform == "darwin"
|
35
|
+
Requires-Dist: numpy<=2.1.1,>=1.23.0
|
37
36
|
Requires-Dist: matplotlib>=3.3.0
|
38
37
|
Requires-Dist: opencv-python>=4.6.0
|
39
38
|
Requires-Dist: pillow>=7.1.2
|
@@ -55,10 +54,11 @@ Requires-Dist: pytest; extra == "dev"
|
|
55
54
|
Requires-Dist: pytest-cov; extra == "dev"
|
56
55
|
Requires-Dist: coverage[toml]; extra == "dev"
|
57
56
|
Requires-Dist: mkdocs>=1.6.0; extra == "dev"
|
57
|
+
Requires-Dist: beautifulsoup4<=4.12.3; extra == "dev"
|
58
58
|
Requires-Dist: mkdocs-material>=9.5.9; extra == "dev"
|
59
59
|
Requires-Dist: mkdocstrings[python]; extra == "dev"
|
60
60
|
Requires-Dist: mkdocs-redirects; extra == "dev"
|
61
|
-
Requires-Dist: mkdocs-ultralytics-plugin>=0.1.
|
61
|
+
Requires-Dist: mkdocs-ultralytics-plugin>=0.1.16; extra == "dev"
|
62
62
|
Requires-Dist: mkdocs-macros-plugin>=1.0.5; extra == "dev"
|
63
63
|
Provides-Extra: export
|
64
64
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
@@ -61,8 +61,7 @@ classifiers = [
|
|
61
61
|
|
62
62
|
# Required dependencies ------------------------------------------------------------------------------------------------
|
63
63
|
dependencies = [
|
64
|
-
"numpy>=1.23.0",
|
65
|
-
"numpy<2.0.0; sys_platform == 'darwin'", # macOS OpenVINO errors https://github.com/ultralytics/ultralytics/pull/17221
|
64
|
+
"numpy>=1.23.0,<=2.1.1", # OpenVINO and TFLite errors on '--slow' CI Tests https://github.com/ultralytics/ultralytics/pull/18943
|
66
65
|
"matplotlib>=3.3.0",
|
67
66
|
"opencv-python>=4.6.0",
|
68
67
|
"pillow>=7.1.2",
|
@@ -88,10 +87,11 @@ dev = [
|
|
88
87
|
"pytest-cov",
|
89
88
|
"coverage[toml]",
|
90
89
|
"mkdocs>=1.6.0",
|
90
|
+
"beautifulsoup4<=4.12.3", # For docs https://github.com/ultralytics/ultralytics/pull/19067
|
91
91
|
"mkdocs-material>=9.5.9",
|
92
92
|
"mkdocstrings[python]",
|
93
93
|
"mkdocs-redirects", # 301 redirects
|
94
|
-
"mkdocs-ultralytics-plugin>=0.1.
|
94
|
+
"mkdocs-ultralytics-plugin>=0.1.16", # for meta descriptions and images, dates and authors
|
95
95
|
"mkdocs-macros-plugin>=1.0.5" # duplicating content (i.e. export tables) in multiple places
|
96
96
|
]
|
97
97
|
export = [
|
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
# Parameters
|
8
8
|
nc: 80 # number of classes
|
9
|
-
activation: nn.ReLU() # (optional) model default activation function
|
9
|
+
activation: torch.nn.ReLU() # (optional) model default activation function
|
10
10
|
scales: # model compound scaling constants, i.e. 'model=yolov6n.yaml' will call yolov8.yaml with scale 'n'
|
11
11
|
# [depth, width, max_channels]
|
12
12
|
n: [0.33, 0.25, 1024]
|
@@ -11,7 +11,7 @@ from PIL import Image
|
|
11
11
|
from ultralytics.cfg import TASK2DATA, get_cfg, get_save_dir
|
12
12
|
from ultralytics.engine.results import Results
|
13
13
|
from ultralytics.hub import HUB_WEB_ROOT, HUBTrainingSession
|
14
|
-
from ultralytics.nn.tasks import attempt_load_one_weight, guess_model_task,
|
14
|
+
from ultralytics.nn.tasks import attempt_load_one_weight, guess_model_task, yaml_model_load
|
15
15
|
from ultralytics.utils import (
|
16
16
|
ARGV,
|
17
17
|
ASSETS,
|
@@ -26,7 +26,7 @@ from ultralytics.utils import (
|
|
26
26
|
)
|
27
27
|
|
28
28
|
|
29
|
-
class Model(nn.Module):
|
29
|
+
class Model(torch.nn.Module):
|
30
30
|
"""
|
31
31
|
A base class for implementing YOLO models, unifying APIs across different model types.
|
32
32
|
|
@@ -37,7 +37,7 @@ class Model(nn.Module):
|
|
37
37
|
Attributes:
|
38
38
|
callbacks (Dict): A dictionary of callback functions for various events during model operations.
|
39
39
|
predictor (BasePredictor): The predictor object used for making predictions.
|
40
|
-
model (nn.Module): The underlying PyTorch model.
|
40
|
+
model (torch.nn.Module): The underlying PyTorch model.
|
41
41
|
trainer (BaseTrainer): The trainer object used for training the model.
|
42
42
|
ckpt (Dict): The checkpoint data if the model is loaded from a *.pt file.
|
43
43
|
cfg (str): The configuration of the model if loaded from a *.yaml file.
|
@@ -317,7 +317,7 @@ class Model(nn.Module):
|
|
317
317
|
>>> model._check_is_pytorch_model() # Raises TypeError
|
318
318
|
"""
|
319
319
|
pt_str = isinstance(self.model, (str, Path)) and Path(self.model).suffix == ".pt"
|
320
|
-
pt_module = isinstance(self.model, nn.Module)
|
320
|
+
pt_module = isinstance(self.model, torch.nn.Module)
|
321
321
|
if not (pt_module or pt_str):
|
322
322
|
raise TypeError(
|
323
323
|
f"model='{self.model}' should be a *.pt PyTorch model to run this method, but is a different format. "
|
@@ -405,7 +405,7 @@ class Model(nn.Module):
|
|
405
405
|
from ultralytics import __version__
|
406
406
|
|
407
407
|
updates = {
|
408
|
-
"model": deepcopy(self.model).half() if isinstance(self.model, nn.Module) else self.model,
|
408
|
+
"model": deepcopy(self.model).half() if isinstance(self.model, torch.nn.Module) else self.model,
|
409
409
|
"date": datetime.now().isoformat(),
|
410
410
|
"version": __version__,
|
411
411
|
"license": "AGPL-3.0 License (https://ultralytics.com/license)",
|
@@ -452,7 +452,7 @@ class Model(nn.Module):
|
|
452
452
|
performs both convolution and normalization in one step.
|
453
453
|
|
454
454
|
Raises:
|
455
|
-
TypeError: If the model is not a PyTorch nn.Module.
|
455
|
+
TypeError: If the model is not a PyTorch torch.nn.Module.
|
456
456
|
|
457
457
|
Examples:
|
458
458
|
>>> model = Model("yolo11n.pt")
|
@@ -661,6 +661,7 @@ class Model(nn.Module):
|
|
661
661
|
- int8 (bool): Whether to use int8 precision mode.
|
662
662
|
- device (str): Device to run the benchmark on (e.g., 'cpu', 'cuda').
|
663
663
|
- verbose (bool): Whether to print detailed benchmark information.
|
664
|
+
- format (str): Export format name for specific benchmarking
|
664
665
|
|
665
666
|
Returns:
|
666
667
|
(Dict): A dictionary containing the results of the benchmarking process, including metrics for
|
@@ -686,7 +687,8 @@ class Model(nn.Module):
|
|
686
687
|
half=args["half"],
|
687
688
|
int8=args["int8"],
|
688
689
|
device=args["device"],
|
689
|
-
verbose=kwargs.get("verbose"),
|
690
|
+
verbose=kwargs.get("verbose", False),
|
691
|
+
format=kwargs.get("format", ""),
|
690
692
|
)
|
691
693
|
|
692
694
|
def export(
|
@@ -919,13 +921,13 @@ class Model(nn.Module):
|
|
919
921
|
Retrieves the device on which the model's parameters are allocated.
|
920
922
|
|
921
923
|
This property determines the device (CPU or GPU) where the model's parameters are currently stored. It is
|
922
|
-
applicable only to models that are instances of nn.Module.
|
924
|
+
applicable only to models that are instances of torch.nn.Module.
|
923
925
|
|
924
926
|
Returns:
|
925
927
|
(torch.device): The device (CPU/GPU) of the model.
|
926
928
|
|
927
929
|
Raises:
|
928
|
-
AttributeError: If the model is not a
|
930
|
+
AttributeError: If the model is not a torch.nn.Module instance.
|
929
931
|
|
930
932
|
Examples:
|
931
933
|
>>> model = YOLO("yolo11n.pt")
|
@@ -935,7 +937,7 @@ class Model(nn.Module):
|
|
935
937
|
>>> print(model.device)
|
936
938
|
device(type='cpu')
|
937
939
|
"""
|
938
|
-
return next(self.model.parameters()).device if isinstance(self.model, nn.Module) else None
|
940
|
+
return next(self.model.parameters()).device if isinstance(self.model, torch.nn.Module) else None
|
939
941
|
|
940
942
|
@property
|
941
943
|
def transforms(self):
|
@@ -494,8 +494,8 @@ class Results(SimpleClass):
|
|
494
494
|
Examples:
|
495
495
|
>>> results = model("image.jpg")
|
496
496
|
>>> for result in results:
|
497
|
-
|
498
|
-
|
497
|
+
>>> im = result.plot()
|
498
|
+
>>> im.show()
|
499
499
|
"""
|
500
500
|
assert color_mode in {"instance", "class"}, f"Expected color_mode='instance' or 'class', not {color_mode}."
|
501
501
|
if img is None and isinstance(self.orig_img, torch.Tensor):
|
@@ -600,7 +600,7 @@ class Results(SimpleClass):
|
|
600
600
|
>>> results = model("path/to/image.jpg")
|
601
601
|
>>> results[0].show() # Display the first result
|
602
602
|
>>> for result in results:
|
603
|
-
|
603
|
+
>>> result.show() # Display all results
|
604
604
|
"""
|
605
605
|
self.plot(show=True, *args, **kwargs)
|
606
606
|
|
@@ -620,10 +620,10 @@ class Results(SimpleClass):
|
|
620
620
|
Examples:
|
621
621
|
>>> results = model("path/to/image.jpg")
|
622
622
|
>>> for result in results:
|
623
|
-
|
623
|
+
>>> result.save("annotated_image.jpg")
|
624
624
|
>>> # Or with custom plot arguments
|
625
625
|
>>> for result in results:
|
626
|
-
|
626
|
+
>>> result.save("annotated_image.jpg", conf=False, line_width=2)
|
627
627
|
"""
|
628
628
|
if not filename:
|
629
629
|
filename = f"results_{Path(self.path).name}"
|
@@ -644,7 +644,7 @@ class Results(SimpleClass):
|
|
644
644
|
Examples:
|
645
645
|
>>> results = model("path/to/image.jpg")
|
646
646
|
>>> for result in results:
|
647
|
-
|
647
|
+
>>> print(result.verbose())
|
648
648
|
2 persons, 1 car, 3 traffic lights,
|
649
649
|
dog 0.92, cat 0.78, horse 0.64,
|
650
650
|
|
@@ -681,7 +681,7 @@ class Results(SimpleClass):
|
|
681
681
|
>>> model = YOLO("yolo11n.pt")
|
682
682
|
>>> results = model("path/to/image.jpg")
|
683
683
|
>>> for result in results:
|
684
|
-
|
684
|
+
>>> result.save_txt("output.txt")
|
685
685
|
|
686
686
|
Notes:
|
687
687
|
- The file will contain one line per detection or classification with the following structure:
|
@@ -740,7 +740,7 @@ class Results(SimpleClass):
|
|
740
740
|
Examples:
|
741
741
|
>>> results = model("path/to/image.jpg")
|
742
742
|
>>> for result in results:
|
743
|
-
|
743
|
+
>>> result.save_crop(save_dir="path/to/crops", file_name="detection")
|
744
744
|
"""
|
745
745
|
if self.probs is not None:
|
746
746
|
LOGGER.warning("WARNING ⚠️ Classify task do not support `save_crop`.")
|
@@ -776,8 +776,9 @@ class Results(SimpleClass):
|
|
776
776
|
|
777
777
|
Examples:
|
778
778
|
>>> results = model("image.jpg")
|
779
|
-
>>>
|
780
|
-
>>>
|
779
|
+
>>> for result in results:
|
780
|
+
>>> summary = result.summary()
|
781
|
+
>>> print(summary)
|
781
782
|
"""
|
782
783
|
# Create list of detection dictionaries
|
783
784
|
results = []
|
@@ -839,8 +840,9 @@ class Results(SimpleClass):
|
|
839
840
|
|
840
841
|
Examples:
|
841
842
|
>>> results = model("path/to/image.jpg")
|
842
|
-
>>>
|
843
|
-
>>>
|
843
|
+
>>> for result in results:
|
844
|
+
>>> df_result = result.to_df()
|
845
|
+
>>> print(df_result)
|
844
846
|
"""
|
845
847
|
import pandas as pd # scope for faster 'import ultralytics'
|
846
848
|
|
@@ -867,8 +869,9 @@ class Results(SimpleClass):
|
|
867
869
|
|
868
870
|
Examples:
|
869
871
|
>>> results = model("path/to/image.jpg")
|
870
|
-
>>>
|
871
|
-
>>>
|
872
|
+
>>> for result in results:
|
873
|
+
>>> csv_result = result.to_csv()
|
874
|
+
>>> print(csv_result)
|
872
875
|
"""
|
873
876
|
return self.to_df(normalize=normalize, decimals=decimals).to_csv(*args, **kwargs)
|
874
877
|
|
@@ -892,8 +895,9 @@ class Results(SimpleClass):
|
|
892
895
|
|
893
896
|
Examples:
|
894
897
|
>>> results = model("path/to/image.jpg")
|
895
|
-
>>>
|
896
|
-
>>>
|
898
|
+
>>> for result in results:
|
899
|
+
>>> xml_result = result.to_xml()
|
900
|
+
>>> print(xml_result)
|
897
901
|
"""
|
898
902
|
check_requirements("lxml")
|
899
903
|
df = self.to_df(normalize=normalize, decimals=decimals)
|
@@ -922,8 +926,9 @@ class Results(SimpleClass):
|
|
922
926
|
|
923
927
|
Examples:
|
924
928
|
>>> results = model("path/to/image.jpg")
|
925
|
-
>>>
|
926
|
-
>>>
|
929
|
+
>>> for result in results:
|
930
|
+
>>> json_result = result.to_json()
|
931
|
+
>>> print(json_result)
|
927
932
|
|
928
933
|
Notes:
|
929
934
|
- For classification tasks, the JSON will contain class probabilities instead of bounding boxes.
|
@@ -954,8 +959,8 @@ class Results(SimpleClass):
|
|
954
959
|
|
955
960
|
Examples:
|
956
961
|
>>> results = model("path/to/image.jpg")
|
957
|
-
>>> results
|
958
|
-
>>>
|
962
|
+
>>> for result in results:
|
963
|
+
>>> result.to_sql()
|
959
964
|
"""
|
960
965
|
import json
|
961
966
|
import sqlite3
|
@@ -426,8 +426,7 @@ class SAM2Model(torch.nn.Module):
|
|
426
426
|
high_res_masks: Tensor of shape (B, 1, H*16, W*16) with the best high-resolution mask.
|
427
427
|
obj_ptr: Tensor of shape (B, C) with object pointer vector for the output mask.
|
428
428
|
object_score_logits: Tensor of shape (B) with object score logits.
|
429
|
-
|
430
|
-
Where M is 3 if multimask_output=True, and 1 if multimask_output=False.
|
429
|
+
Where M is 3 if multimask_output=True, and 1 if multimask_output=False.
|
431
430
|
|
432
431
|
Examples:
|
433
432
|
>>> backbone_features = torch.rand(1, 256, 32, 32)
|
@@ -158,7 +158,7 @@ class PoseValidator(DetectionValidator):
|
|
158
158
|
gt_kpts (torch.Tensor | None): Optional tensor with shape (N, 51) representing ground truth keypoints.
|
159
159
|
|
160
160
|
Returns:
|
161
|
-
torch.Tensor: A tensor with shape (N, 10) representing the correct prediction matrix for 10 IoU levels,
|
161
|
+
(torch.Tensor): A tensor with shape (N, 10) representing the correct prediction matrix for 10 IoU levels,
|
162
162
|
where N is the number of detections.
|
163
163
|
|
164
164
|
Example:
|
@@ -293,6 +293,12 @@ class AutoBackend(nn.Module):
|
|
293
293
|
except UnicodeDecodeError:
|
294
294
|
f.seek(0) # engine file may lack embedded Ultralytics metadata
|
295
295
|
model = runtime.deserialize_cuda_engine(f.read()) # read engine
|
296
|
+
if "dla" in str(device.type):
|
297
|
+
dla_core = int(device.type.split(":")[1])
|
298
|
+
assert dla_core in {0, 1}, (
|
299
|
+
"Expected device type for inference in DLA is 'dla:0' or 'dla:1', but received '{device.type}'"
|
300
|
+
)
|
301
|
+
runtime.DLA_core = dla_core
|
296
302
|
|
297
303
|
# Model context
|
298
304
|
try:
|
@@ -774,7 +780,7 @@ class AutoBackend(nn.Module):
|
|
774
780
|
saved_model, pb, tflite, edgetpu, tfjs, ncnn or paddle.
|
775
781
|
|
776
782
|
Args:
|
777
|
-
p: path to the model file. Defaults to path/to/model.pt
|
783
|
+
p (str): path to the model file. Defaults to path/to/model.pt
|
778
784
|
|
779
785
|
Examples:
|
780
786
|
>>> model = AutoBackend(weights="path/to/model.onnx")
|
@@ -9,7 +9,6 @@ from pathlib import Path
|
|
9
9
|
|
10
10
|
import thop
|
11
11
|
import torch
|
12
|
-
import torch.nn as nn
|
13
12
|
|
14
13
|
from ultralytics.nn.modules import (
|
15
14
|
AIFI,
|
@@ -88,7 +87,7 @@ from ultralytics.utils.torch_utils import (
|
|
88
87
|
)
|
89
88
|
|
90
89
|
|
91
|
-
class BaseModel(nn.Module):
|
90
|
+
class BaseModel(torch.nn.Module):
|
92
91
|
"""The BaseModel class serves as a base class for all the models in the Ultralytics YOLO family."""
|
93
92
|
|
94
93
|
def forward(self, x, *args, **kwargs):
|
@@ -151,7 +150,7 @@ class BaseModel(nn.Module):
|
|
151
150
|
if visualize:
|
152
151
|
feature_visualization(x, m.type, m.i, save_dir=visualize)
|
153
152
|
if embed and m.i in embed:
|
154
|
-
embeddings.append(nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
|
153
|
+
embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
|
155
154
|
if m.i == max(embed):
|
156
155
|
return torch.unbind(torch.cat(embeddings, 1), dim=0)
|
157
156
|
return x
|
@@ -170,12 +169,9 @@ class BaseModel(nn.Module):
|
|
170
169
|
the provided list.
|
171
170
|
|
172
171
|
Args:
|
173
|
-
m (nn.Module): The layer to be profiled.
|
172
|
+
m (torch.nn.Module): The layer to be profiled.
|
174
173
|
x (torch.Tensor): The input data to the layer.
|
175
174
|
dt (list): A list to store the computation time of the layer.
|
176
|
-
|
177
|
-
Returns:
|
178
|
-
None
|
179
175
|
"""
|
180
176
|
c = m == self.model[-1] and isinstance(x, list) # is final layer list, copy input as inplace fix
|
181
177
|
flops = thop.profile(m, inputs=[x.copy() if c else x], verbose=False)[0] / 1e9 * 2 if thop else 0 # GFLOPs
|
@@ -195,7 +191,7 @@ class BaseModel(nn.Module):
|
|
195
191
|
computation efficiency.
|
196
192
|
|
197
193
|
Returns:
|
198
|
-
(nn.Module): The fused model is returned.
|
194
|
+
(torch.nn.Module): The fused model is returned.
|
199
195
|
"""
|
200
196
|
if not self.is_fused():
|
201
197
|
for m in self.model.modules():
|
@@ -229,7 +225,7 @@ class BaseModel(nn.Module):
|
|
229
225
|
Returns:
|
230
226
|
(bool): True if the number of BatchNorm layers in the model is less than the threshold, False otherwise.
|
231
227
|
"""
|
232
|
-
bn = tuple(v for k, v in nn.__dict__.items() if "Norm" in k) # normalization layers, i.e. BatchNorm2d()
|
228
|
+
bn = tuple(v for k, v in torch.nn.__dict__.items() if "Norm" in k) # normalization layers, i.e. BatchNorm2d()
|
233
229
|
return sum(isinstance(v, bn) for v in self.modules()) < thresh # True if < 'thresh' BatchNorm layers in model
|
234
230
|
|
235
231
|
def info(self, detailed=False, verbose=True, imgsz=640):
|
@@ -304,7 +300,7 @@ class DetectionModel(BaseModel):
|
|
304
300
|
self.yaml = cfg if isinstance(cfg, dict) else yaml_model_load(cfg) # cfg dict
|
305
301
|
if self.yaml["backbone"][0][2] == "Silence":
|
306
302
|
LOGGER.warning(
|
307
|
-
"WARNING ⚠️ YOLOv9 `Silence` module is deprecated in favor of nn.Identity. "
|
303
|
+
"WARNING ⚠️ YOLOv9 `Silence` module is deprecated in favor of torch.nn.Identity. "
|
308
304
|
"Please delete local *.pt file and re-download the latest model checkpoint."
|
309
305
|
)
|
310
306
|
self.yaml["backbone"][0][2] = "nn.Identity"
|
@@ -458,20 +454,22 @@ class ClassificationModel(BaseModel):
|
|
458
454
|
name, m = list((model.model if hasattr(model, "model") else model).named_children())[-1] # last module
|
459
455
|
if isinstance(m, Classify): # YOLO Classify() head
|
460
456
|
if m.linear.out_features != nc:
|
461
|
-
m.linear = nn.Linear(m.linear.in_features, nc)
|
462
|
-
elif isinstance(m, nn.Linear): # ResNet, EfficientNet
|
457
|
+
m.linear = torch.nn.Linear(m.linear.in_features, nc)
|
458
|
+
elif isinstance(m, torch.nn.Linear): # ResNet, EfficientNet
|
463
459
|
if m.out_features != nc:
|
464
|
-
setattr(model, name, nn.Linear(m.in_features, nc))
|
465
|
-
elif isinstance(m, nn.Sequential):
|
460
|
+
setattr(model, name, torch.nn.Linear(m.in_features, nc))
|
461
|
+
elif isinstance(m, torch.nn.Sequential):
|
466
462
|
types = [type(x) for x in m]
|
467
|
-
if nn.Linear in types:
|
468
|
-
i = len(types) - 1 - types[::-1].index(nn.Linear) # last nn.Linear index
|
463
|
+
if torch.nn.Linear in types:
|
464
|
+
i = len(types) - 1 - types[::-1].index(torch.nn.Linear) # last torch.nn.Linear index
|
469
465
|
if m[i].out_features != nc:
|
470
|
-
m[i] = nn.Linear(m[i].in_features, nc)
|
471
|
-
elif nn.Conv2d in types:
|
472
|
-
i = len(types) - 1 - types[::-1].index(nn.Conv2d) # last nn.Conv2d index
|
466
|
+
m[i] = torch.nn.Linear(m[i].in_features, nc)
|
467
|
+
elif torch.nn.Conv2d in types:
|
468
|
+
i = len(types) - 1 - types[::-1].index(torch.nn.Conv2d) # last torch.nn.Conv2d index
|
473
469
|
if m[i].out_channels != nc:
|
474
|
-
m[i] = nn.Conv2d(
|
470
|
+
m[i] = torch.nn.Conv2d(
|
471
|
+
m[i].in_channels, nc, m[i].kernel_size, m[i].stride, bias=m[i].bias is not None
|
472
|
+
)
|
475
473
|
|
476
474
|
def init_criterion(self):
|
477
475
|
"""Initialize the loss criterion for the ClassificationModel."""
|
@@ -587,7 +585,7 @@ class RTDETRDetectionModel(DetectionModel):
|
|
587
585
|
if visualize:
|
588
586
|
feature_visualization(x, m.type, m.i, save_dir=visualize)
|
589
587
|
if embed and m.i in embed:
|
590
|
-
embeddings.append(nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
|
588
|
+
embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
|
591
589
|
if m.i == max(embed):
|
592
590
|
return torch.unbind(torch.cat(embeddings, 1), dim=0)
|
593
591
|
head = self.model[-1]
|
@@ -663,7 +661,7 @@ class WorldModel(DetectionModel):
|
|
663
661
|
if visualize:
|
664
662
|
feature_visualization(x, m.type, m.i, save_dir=visualize)
|
665
663
|
if embed and m.i in embed:
|
666
|
-
embeddings.append(nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
|
664
|
+
embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
|
667
665
|
if m.i == max(embed):
|
668
666
|
return torch.unbind(torch.cat(embeddings, 1), dim=0)
|
669
667
|
return x
|
@@ -684,7 +682,7 @@ class WorldModel(DetectionModel):
|
|
684
682
|
return self.criterion(preds, batch)
|
685
683
|
|
686
684
|
|
687
|
-
class Ensemble(nn.ModuleList):
|
685
|
+
class Ensemble(torch.nn.ModuleList):
|
688
686
|
"""Ensemble of models."""
|
689
687
|
|
690
688
|
def __init__(self):
|
@@ -887,7 +885,7 @@ def attempt_load_weights(weights, device=None, inplace=True, fuse=False):
|
|
887
885
|
for m in ensemble.modules():
|
888
886
|
if hasattr(m, "inplace"):
|
889
887
|
m.inplace = inplace
|
890
|
-
elif isinstance(m, nn.Upsample) and not hasattr(m, "recompute_scale_factor"):
|
888
|
+
elif isinstance(m, torch.nn.Upsample) and not hasattr(m, "recompute_scale_factor"):
|
891
889
|
m.recompute_scale_factor = None # torch 1.11.0 compatibility
|
892
890
|
|
893
891
|
# Return model
|
@@ -922,7 +920,7 @@ def attempt_load_one_weight(weight, device=None, inplace=True, fuse=False):
|
|
922
920
|
for m in model.modules():
|
923
921
|
if hasattr(m, "inplace"):
|
924
922
|
m.inplace = inplace
|
925
|
-
elif isinstance(m, nn.Upsample) and not hasattr(m, "recompute_scale_factor"):
|
923
|
+
elif isinstance(m, torch.nn.Upsample) and not hasattr(m, "recompute_scale_factor"):
|
926
924
|
m.recompute_scale_factor = None # torch 1.11.0 compatibility
|
927
925
|
|
928
926
|
# Return model and ckpt
|
@@ -946,7 +944,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|
946
944
|
depth, width, max_channels = scales[scale]
|
947
945
|
|
948
946
|
if act:
|
949
|
-
Conv.default_act = eval(act) # redefine default activation, i.e. Conv.default_act = nn.SiLU()
|
947
|
+
Conv.default_act = eval(act) # redefine default activation, i.e. Conv.default_act = torch.nn.SiLU()
|
950
948
|
if verbose:
|
951
949
|
LOGGER.info(f"{colorstr('activation:')} {act}") # print
|
952
950
|
|
@@ -982,7 +980,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|
982
980
|
C3,
|
983
981
|
C3TR,
|
984
982
|
C3Ghost,
|
985
|
-
nn.ConvTranspose2d,
|
983
|
+
torch.nn.ConvTranspose2d,
|
986
984
|
DWConvTranspose2d,
|
987
985
|
C3x,
|
988
986
|
RepC3,
|
@@ -1048,7 +1046,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|
1048
1046
|
n = 1
|
1049
1047
|
elif m is ResNetLayer:
|
1050
1048
|
c2 = args[1] if args[3] else args[1] * 4
|
1051
|
-
elif m is nn.BatchNorm2d:
|
1049
|
+
elif m is torch.nn.BatchNorm2d:
|
1052
1050
|
args = [ch[f]]
|
1053
1051
|
elif m is Concat:
|
1054
1052
|
c2 = sum(ch[x] for x in f)
|
@@ -1073,7 +1071,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|
1073
1071
|
else:
|
1074
1072
|
c2 = ch[f]
|
1075
1073
|
|
1076
|
-
m_ = nn.Sequential(*(m(*args) for _ in range(n))) if n > 1 else m(*args) # module
|
1074
|
+
m_ = torch.nn.Sequential(*(m(*args) for _ in range(n))) if n > 1 else m(*args) # module
|
1077
1075
|
t = str(m)[8:-2].replace("__main__.", "") # module type
|
1078
1076
|
m_.np = sum(x.numel() for x in m_.parameters()) # number params
|
1079
1077
|
m_.i, m_.f, m_.type = i, f, t # attach index, 'from' index, type
|
@@ -1084,7 +1082,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|
1084
1082
|
if i == 0:
|
1085
1083
|
ch = []
|
1086
1084
|
ch.append(c2)
|
1087
|
-
return nn.Sequential(*layers), sorted(save)
|
1085
|
+
return torch.nn.Sequential(*layers), sorted(save)
|
1088
1086
|
|
1089
1087
|
|
1090
1088
|
def yaml_model_load(path):
|
@@ -1126,7 +1124,7 @@ def guess_model_task(model):
|
|
1126
1124
|
Guess the task of a PyTorch model from its architecture or configuration.
|
1127
1125
|
|
1128
1126
|
Args:
|
1129
|
-
model (nn.Module | dict): PyTorch model or model configuration in YAML format.
|
1127
|
+
model (torch.nn.Module | dict): PyTorch model or model configuration in YAML format.
|
1130
1128
|
|
1131
1129
|
Returns:
|
1132
1130
|
(str): Task of the model ('detect', 'segment', 'classify', 'pose').
|
@@ -1154,7 +1152,7 @@ def guess_model_task(model):
|
|
1154
1152
|
with contextlib.suppress(Exception):
|
1155
1153
|
return cfg2task(model)
|
1156
1154
|
# Guess from PyTorch model
|
1157
|
-
if isinstance(model, nn.Module): # PyTorch model
|
1155
|
+
if isinstance(model, torch.nn.Module): # PyTorch model
|
1158
1156
|
for x in "model.args", "model.model.args", "model.model.model.args":
|
1159
1157
|
with contextlib.suppress(Exception):
|
1160
1158
|
return eval(x)["task"]
|
@@ -57,6 +57,7 @@ def benchmark(
|
|
57
57
|
device="cpu",
|
58
58
|
verbose=False,
|
59
59
|
eps=1e-3,
|
60
|
+
format="",
|
60
61
|
):
|
61
62
|
"""
|
62
63
|
Benchmark a YOLO model across different formats for speed and accuracy.
|
@@ -70,6 +71,7 @@ def benchmark(
|
|
70
71
|
device (str): Device to run the benchmark on, either 'cpu' or 'cuda'.
|
71
72
|
verbose (bool | float): If True or a float, assert benchmarks pass with given metric.
|
72
73
|
eps (float): Epsilon value for divide by zero prevention.
|
74
|
+
format (str): Export format for benchmarking. If not supplied all formats are benchmarked.
|
73
75
|
|
74
76
|
Returns:
|
75
77
|
(pandas.DataFrame): A pandas DataFrame with benchmark results for each format, including file size, metric,
|
@@ -94,9 +96,17 @@ def benchmark(
|
|
94
96
|
|
95
97
|
y = []
|
96
98
|
t0 = time.time()
|
99
|
+
|
100
|
+
format_arg = format.lower()
|
101
|
+
if format_arg:
|
102
|
+
formats = frozenset(export_formats()["Argument"])
|
103
|
+
assert format in formats, f"Expected format to be one of {formats}, but got '{format_arg}'."
|
97
104
|
for i, (name, format, suffix, cpu, gpu, _) in enumerate(zip(*export_formats().values())):
|
98
105
|
emoji, filename = "❌", None # export defaults
|
99
106
|
try:
|
107
|
+
if format_arg and format_arg != format:
|
108
|
+
continue
|
109
|
+
|
100
110
|
# Checks
|
101
111
|
if i == 7: # TF GraphDef
|
102
112
|
assert model.task != "obb", "TensorFlow GraphDef not supported for OBB task"
|
@@ -155,10 +165,10 @@ def benchmark(
|
|
155
165
|
|
156
166
|
# Validate
|
157
167
|
data = data or TASK2DATA[model.task] # task to dataset, i.e. coco8.yaml for task=detect
|
158
|
-
key = TASK2METRIC[model.task] # task to metric, i.e. metrics/mAP50-95(B) for task=detect
|
159
168
|
results = exported_model.val(
|
160
169
|
data=data, batch=1, imgsz=imgsz, plots=False, device=device, half=half, int8=int8, verbose=False
|
161
170
|
)
|
171
|
+
key = TASK2METRIC[model.task] # task to metric, i.e. metrics/mAP50-95(B) for task=detect
|
162
172
|
metric, speed = results.results_dict[key], results.speed["inference"]
|
163
173
|
fps = round(1000 / (speed + eps), 2) # frames per second
|
164
174
|
y.append([name, "✅", round(file_size(filename), 1), round(metric, 4), round(speed, 2), fps])
|
@@ -433,8 +433,8 @@ def check_torchvision():
|
|
433
433
|
The compatibility table is a dictionary where the keys are PyTorch versions and the values are lists of compatible
|
434
434
|
Torchvision versions.
|
435
435
|
"""
|
436
|
-
# Compatibility table
|
437
436
|
compatibility_table = {
|
437
|
+
"2.6": ["0.21"],
|
438
438
|
"2.5": ["0.20"],
|
439
439
|
"2.4": ["0.19"],
|
440
440
|
"2.3": ["0.18"],
|
@@ -445,7 +445,7 @@ def check_torchvision():
|
|
445
445
|
"1.12": ["0.13"],
|
446
446
|
}
|
447
447
|
|
448
|
-
#
|
448
|
+
# Check major and minor versions
|
449
449
|
v_torch = ".".join(torch.__version__.split("+")[0].split(".")[:2])
|
450
450
|
if v_torch in compatibility_table:
|
451
451
|
compatible_versions = compatibility_table[v_torch]
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.71
|
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>
|
@@ -32,8 +32,7 @@ Classifier: Operating System :: Microsoft :: Windows
|
|
32
32
|
Requires-Python: >=3.8
|
33
33
|
Description-Content-Type: text/markdown
|
34
34
|
License-File: LICENSE
|
35
|
-
Requires-Dist: numpy
|
36
|
-
Requires-Dist: numpy<2.0.0; sys_platform == "darwin"
|
35
|
+
Requires-Dist: numpy<=2.1.1,>=1.23.0
|
37
36
|
Requires-Dist: matplotlib>=3.3.0
|
38
37
|
Requires-Dist: opencv-python>=4.6.0
|
39
38
|
Requires-Dist: pillow>=7.1.2
|
@@ -55,10 +54,11 @@ Requires-Dist: pytest; extra == "dev"
|
|
55
54
|
Requires-Dist: pytest-cov; extra == "dev"
|
56
55
|
Requires-Dist: coverage[toml]; extra == "dev"
|
57
56
|
Requires-Dist: mkdocs>=1.6.0; extra == "dev"
|
57
|
+
Requires-Dist: beautifulsoup4<=4.12.3; extra == "dev"
|
58
58
|
Requires-Dist: mkdocs-material>=9.5.9; extra == "dev"
|
59
59
|
Requires-Dist: mkdocstrings[python]; extra == "dev"
|
60
60
|
Requires-Dist: mkdocs-redirects; extra == "dev"
|
61
|
-
Requires-Dist: mkdocs-ultralytics-plugin>=0.1.
|
61
|
+
Requires-Dist: mkdocs-ultralytics-plugin>=0.1.16; extra == "dev"
|
62
62
|
Requires-Dist: mkdocs-macros-plugin>=1.0.5; extra == "dev"
|
63
63
|
Provides-Extra: export
|
64
64
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|