ultralytics 8.3.120__tar.gz → 8.3.122__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.120/ultralytics.egg-info → ultralytics-8.3.122}/PKG-INFO +3 -3
- {ultralytics-8.3.120 → ultralytics-8.3.122}/pyproject.toml +2 -2
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/__init__.py +1 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/trackers/botsort.yaml +1 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/augment.py +3 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/split_dota.py +1 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/exporter.py +5 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/utils/loss.py +1 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/solutions.py +1 -1
- ultralytics-8.3.122/ultralytics/solutions/speed_estimation.py +110 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/bot_sort.py +2 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/downloads.py +2 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/export.py +1 -1
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/loss.py +4 -3
- {ultralytics-8.3.120 → ultralytics-8.3.122/ultralytics.egg-info}/PKG-INFO +3 -3
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/requires.txt +2 -2
- ultralytics-8.3.120/ultralytics/solutions/speed_estimation.py +0 -114
- {ultralytics-8.3.120 → ultralytics-8.3.122}/LICENSE +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/README.md +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/setup.cfg +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/conftest.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_cli.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_engine.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_exports.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_python.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/download_weights.sh +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/get_coco.sh +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/get_coco128.sh +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/scripts/get_imagenet.sh +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/split.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/predict.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/train.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/models/yolo/yoloe/val.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/nn/text_model.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/instance_segmentation.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/object_blurrer.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/object_cropper.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/solutions/vision_eye.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.120 → ultralytics-8.3.122}/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.122
|
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>
|
@@ -68,8 +68,8 @@ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
|
|
68
68
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
69
69
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
70
70
|
Provides-Extra: solutions
|
71
|
-
Requires-Dist: shapely
|
72
|
-
Requires-Dist: streamlit
|
71
|
+
Requires-Dist: shapely>=2.0.0; extra == "solutions"
|
72
|
+
Requires-Dist: streamlit>=1.29.0; extra == "solutions"
|
73
73
|
Provides-Extra: logging
|
74
74
|
Requires-Dist: wandb; extra == "logging"
|
75
75
|
Requires-Dist: tensorboard; extra == "logging"
|
@@ -103,8 +103,8 @@ export = [
|
|
103
103
|
"h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
|
104
104
|
]
|
105
105
|
solutions = [
|
106
|
-
"shapely>=2.0.0
|
107
|
-
"streamlit>=1.29.0
|
106
|
+
"shapely>=2.0.0", # shapely for point and polygon data matching
|
107
|
+
"streamlit>=1.29.0", # for live inference on web browser, i.e `yolo streamlit-predict`
|
108
108
|
]
|
109
109
|
logging = [
|
110
110
|
"wandb", # https://docs.ultralytics.com/integrations/weights-biases/
|
@@ -701,7 +701,7 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
701
701
|
solution_name = "count" # Default for invalid solution
|
702
702
|
|
703
703
|
if solution_name == "inference":
|
704
|
-
checks.check_requirements("streamlit>=1.29.0
|
704
|
+
checks.check_requirements("streamlit>=1.29.0")
|
705
705
|
LOGGER.info("💡 Loading Ultralytics live inference app...")
|
706
706
|
subprocess.run(
|
707
707
|
[ # Run subprocess with Streamlit custom argument
|
@@ -17,6 +17,6 @@ fuse_score: True # Whether to fuse confidence scores with the iou distances befo
|
|
17
17
|
gmc_method: sparseOptFlow # method of global motion compensation
|
18
18
|
# ReID model related thresh
|
19
19
|
proximity_thresh: 0.5 # minimum IoU for valid match with ReID
|
20
|
-
appearance_thresh: 0.
|
20
|
+
appearance_thresh: 0.8 # minimum appearance similarity for ReID
|
21
21
|
with_reid: False
|
22
22
|
model: auto # uses native features if detector is YOLO else yolo11n-cls.pt
|
@@ -1026,7 +1026,9 @@ class CutMix(BaseMixTransform):
|
|
1026
1026
|
labels2 = labels.pop("mix_labels")[0]
|
1027
1027
|
area = cut_areas[np.random.choice(idx)] # randomle select one
|
1028
1028
|
ioa2 = bbox_ioa(area[None], labels2["instances"].bboxes).squeeze(0)
|
1029
|
-
indexes2 = np.nonzero(ioa2 >= 0.01 if len(labels["instances"].segments) else 0.1)[0]
|
1029
|
+
indexes2 = np.nonzero(ioa2 >= (0.01 if len(labels["instances"].segments) else 0.1))[0]
|
1030
|
+
if len(indexes2) == 0:
|
1031
|
+
return labels
|
1030
1032
|
|
1031
1033
|
instances2 = labels2["instances"][indexes2]
|
1032
1034
|
instances2.convert_bbox("xyxy")
|
@@ -30,7 +30,7 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
|
|
30
30
|
Polygon format: [x1, y1, x2, y2, x3, y3, x4, y4].
|
31
31
|
Bounding box format: [x_min, y_min, x_max, y_max].
|
32
32
|
"""
|
33
|
-
check_requirements("shapely")
|
33
|
+
check_requirements("shapely>=2.0.0")
|
34
34
|
from shapely.geometry import Polygon
|
35
35
|
|
36
36
|
polygon1 = polygon1.reshape(-1, 4, 2)
|
@@ -636,6 +636,8 @@ class Exporter:
|
|
636
636
|
if self.args.int8:
|
637
637
|
fq = str(self.file).replace(self.file.suffix, f"_int8_openvino_model{os.sep}")
|
638
638
|
fq_ov = str(Path(fq) / self.file.with_suffix(".xml").name)
|
639
|
+
# INT8 requires nncf, nncf requires packaging>=23.2 https://github.com/openvinotoolkit/nncf/issues/3463
|
640
|
+
check_requirements("packaging>=23.2") # must be installed first to build nncf wheel
|
639
641
|
check_requirements("nncf>=2.14.0")
|
640
642
|
import nncf
|
641
643
|
|
@@ -849,6 +851,9 @@ class Exporter:
|
|
849
851
|
ct_model.license = m.pop("license")
|
850
852
|
ct_model.version = m.pop("version")
|
851
853
|
ct_model.user_defined_metadata.update({k: str(v) for k, v in m.items()})
|
854
|
+
if self.model.task == "classify":
|
855
|
+
ct_model.user_defined_metadata.update({"com.apple.coreml.model.preview.type": "imageClassifier"})
|
856
|
+
|
852
857
|
try:
|
853
858
|
ct_model.save(str(f)) # save *.mlpackage
|
854
859
|
except Exception as e:
|
@@ -58,7 +58,7 @@ class DETRLoss(nn.Module):
|
|
58
58
|
use_uni_match (bool): Whether to use fixed layer for auxiliary branch label assignment.
|
59
59
|
uni_match_ind (int): Index of fixed layer for uni_match.
|
60
60
|
gamma (float): The focusing parameter that controls how much the loss focuses on hard-to-classify examples.
|
61
|
-
alpha (float): The balancing factor used to address class imbalance.
|
61
|
+
alpha (float | list): The balancing factor used to address class imbalance.
|
62
62
|
"""
|
63
63
|
super().__init__()
|
64
64
|
|
@@ -53,7 +53,7 @@ class BaseSolution:
|
|
53
53
|
is_cli (bool): Enables CLI mode if set to True.
|
54
54
|
**kwargs (Any): Additional configuration parameters that override defaults.
|
55
55
|
"""
|
56
|
-
check_requirements("shapely>=2.0.0
|
56
|
+
check_requirements("shapely>=2.0.0")
|
57
57
|
from shapely.geometry import LineString, Point, Polygon
|
58
58
|
from shapely.prepared import prep
|
59
59
|
|
@@ -0,0 +1,110 @@
|
|
1
|
+
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
+
|
3
|
+
from collections import deque
|
4
|
+
from math import sqrt
|
5
|
+
|
6
|
+
from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
|
7
|
+
from ultralytics.utils.plotting import colors
|
8
|
+
|
9
|
+
|
10
|
+
class SpeedEstimator(BaseSolution):
|
11
|
+
"""
|
12
|
+
A class to estimate the speed of objects in a real-time video stream based on their tracks.
|
13
|
+
|
14
|
+
This class extends the BaseSolution class and provides functionality for estimating object speeds using
|
15
|
+
tracking data in video streams.
|
16
|
+
|
17
|
+
Attributes:
|
18
|
+
spd (Dict[int, float]): Dictionary storing speed data for tracked objects.
|
19
|
+
trk_hist (Dict[int, float]): Dictionary storing the object tracking data.
|
20
|
+
max_hist (int): maximum track history before computing speed
|
21
|
+
meters_per_pixel (float): Real-world meters represented by one pixel (e.g., 0.04 for 4m over 100px).
|
22
|
+
max_speed (int): Maximum allowed object speed; values above this will be capped at 120 km/h.
|
23
|
+
|
24
|
+
Methods:
|
25
|
+
initialize_region: Initializes the speed estimation region.
|
26
|
+
process: Processes input frames to estimate object speeds.
|
27
|
+
store_tracking_history: Stores the tracking history for an object.
|
28
|
+
extract_tracks: Extracts tracks from the current frame.
|
29
|
+
display_output: Displays the output with annotations.
|
30
|
+
|
31
|
+
Examples:
|
32
|
+
>>> estimator = SpeedEstimator()
|
33
|
+
>>> frame = cv2.imread("frame.jpg")
|
34
|
+
>>> results = estimator.process(frame)
|
35
|
+
>>> cv2.imshow("Speed Estimation", results.plot_im)
|
36
|
+
"""
|
37
|
+
|
38
|
+
def __init__(self, **kwargs):
|
39
|
+
"""
|
40
|
+
Initialize the SpeedEstimator object with speed estimation parameters and data structures.
|
41
|
+
|
42
|
+
Args:
|
43
|
+
**kwargs (Any): Additional keyword arguments passed to the parent class.
|
44
|
+
"""
|
45
|
+
super().__init__(**kwargs)
|
46
|
+
|
47
|
+
self.fps = kwargs.get("fps", 30) # assumed video FPS
|
48
|
+
self.frame_count = 0 # global frame count
|
49
|
+
self.trk_frame_ids = {} # Track ID → first frame index
|
50
|
+
self.spd = {} # Final speed per object (km/h), once locked
|
51
|
+
self.trk_hist = {} # Track ID → deque of (time, position)
|
52
|
+
self.locked_ids = set() # Track IDs whose speed has been finalized
|
53
|
+
self.max_hist = kwargs.get("max_hist", 5) # Required frame history before computing speed
|
54
|
+
self.meter_per_pixel = kwargs.get("meter_per_pixel", 0.05) # Scene scale, depends on camera details
|
55
|
+
self.max_speed = kwargs.get("max_speed", 120) # max_speed adjustment
|
56
|
+
|
57
|
+
def process(self, im0):
|
58
|
+
"""
|
59
|
+
Process an input frame to estimate object speeds based on tracking data.
|
60
|
+
|
61
|
+
Args:
|
62
|
+
im0 (np.ndarray): Input image for processing with shape (H, W, C) for RGB images.
|
63
|
+
|
64
|
+
Returns:
|
65
|
+
(SolutionResults): Contains processed image `plot_im` and `total_tracks` (number of tracked objects).
|
66
|
+
|
67
|
+
Examples:
|
68
|
+
>>> estimator = SpeedEstimator()
|
69
|
+
>>> image = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
|
70
|
+
>>> results = estimator.process(image)
|
71
|
+
"""
|
72
|
+
self.frame_count += 1
|
73
|
+
self.extract_tracks(im0)
|
74
|
+
annotator = SolutionAnnotator(im0, line_width=self.line_width)
|
75
|
+
|
76
|
+
for box, track_id, _, _ in zip(self.boxes, self.track_ids, self.clss, self.confs):
|
77
|
+
self.store_tracking_history(track_id, box)
|
78
|
+
|
79
|
+
if track_id not in self.trk_hist: # Initialize history if new track found
|
80
|
+
self.trk_hist[track_id] = deque(maxlen=self.max_hist)
|
81
|
+
self.trk_frame_ids[track_id] = self.frame_count
|
82
|
+
|
83
|
+
if track_id not in self.locked_ids: # Update history until speed is locked
|
84
|
+
trk_hist = self.trk_hist[track_id]
|
85
|
+
trk_hist.append(self.track_line[-1])
|
86
|
+
|
87
|
+
# Compute and lock speed once enough history is collected
|
88
|
+
if len(trk_hist) == self.max_hist:
|
89
|
+
p0, p1 = trk_hist[0], trk_hist[-1] # First and last points of track
|
90
|
+
dt = (self.frame_count - self.trk_frame_ids[track_id]) / self.fps # Time in seconds
|
91
|
+
if dt > 0:
|
92
|
+
dx, dy = p1[0] - p0[0], p1[1] - p0[1] # pixel displacement
|
93
|
+
pixel_distance = sqrt(dx * dx + dy * dy) # get pixel distance
|
94
|
+
meters = pixel_distance * self.meter_per_pixel # convert to meters
|
95
|
+
self.spd[track_id] = int(
|
96
|
+
min((meters / dt) * 3.6, self.max_speed)
|
97
|
+
) # convert to km/h and store final speed
|
98
|
+
self.locked_ids.add(track_id) # prevent further updates
|
99
|
+
self.trk_hist.pop(track_id, None) # free memory
|
100
|
+
self.trk_frame_ids.pop(track_id, None) # optional: remove frame start too
|
101
|
+
|
102
|
+
if track_id in self.spd:
|
103
|
+
speed_label = f"{self.spd[track_id]} km/h"
|
104
|
+
annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
|
105
|
+
|
106
|
+
plot_im = annotator.result()
|
107
|
+
self.display_output(plot_im) # Display output with base class function
|
108
|
+
|
109
|
+
# Return results with processed image and tracking summary
|
110
|
+
return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))
|
@@ -255,4 +255,6 @@ class ReID:
|
|
255
255
|
def __call__(self, img, dets):
|
256
256
|
"""Extract embeddings for detected objects."""
|
257
257
|
feats = self.model([save_one_box(det, img, save=False) for det in xywh2xyxy(torch.from_numpy(dets[:, :4]))])
|
258
|
+
if feats.shape[0] != dets.shape[0] and feats[0].shape[0] == dets.shape[0]:
|
259
|
+
feats = feats[0] # batched prediction with non-PyTorch backend
|
258
260
|
return [f.cpu().numpy() for f in feats]
|
@@ -320,9 +320,10 @@ def safe_download(
|
|
320
320
|
LOGGER.info(f"{desc}...")
|
321
321
|
f.parent.mkdir(parents=True, exist_ok=True) # make directory if missing
|
322
322
|
check_disk_space(url, path=f.parent)
|
323
|
+
curl_installed = shutil.which("curl")
|
323
324
|
for i in range(retry + 1):
|
324
325
|
try:
|
325
|
-
if curl or i > 0: # curl download with retry, continue
|
326
|
+
if (curl or i > 0) and curl_installed: # curl download with retry, continue
|
326
327
|
s = "sS" * (not progress) # silent
|
327
328
|
r = subprocess.run(["curl", "-#", f"-{s}L", url, "-o", f, "--retry", "3", "-C", "-"]).returncode
|
328
329
|
assert r == 0, f"Curl return value {r}"
|
@@ -167,7 +167,7 @@ def export_engine(
|
|
167
167
|
trt.IInt8Calibrator.__init__(self)
|
168
168
|
self.dataset = dataset
|
169
169
|
self.data_iter = iter(dataset)
|
170
|
-
self.algo = trt.CalibrationAlgoType.
|
170
|
+
self.algo = trt.CalibrationAlgoType.MINMAX_CALIBRATION
|
171
171
|
self.batch = dataset.batch_size
|
172
172
|
self.cache = Path(cache)
|
173
173
|
|
@@ -48,14 +48,14 @@ class FocalLoss(nn.Module):
|
|
48
48
|
|
49
49
|
Args:
|
50
50
|
gamma (float): The focusing parameter that controls how much the loss focuses on hard-to-classify examples.
|
51
|
-
alpha (float): The balancing factor used to address class imbalance.
|
51
|
+
alpha (float | list): The balancing factor used to address class imbalance.
|
52
52
|
"""
|
53
53
|
|
54
54
|
def __init__(self, gamma=1.5, alpha=0.25):
|
55
55
|
"""Initialize FocalLoss class with no parameters."""
|
56
56
|
super().__init__()
|
57
57
|
self.gamma = gamma
|
58
|
-
self.alpha = alpha
|
58
|
+
self.alpha = torch.tensor(alpha)
|
59
59
|
|
60
60
|
def forward(self, pred, label):
|
61
61
|
"""Calculate focal loss with modulating factors for class imbalance."""
|
@@ -68,7 +68,8 @@ class FocalLoss(nn.Module):
|
|
68
68
|
p_t = label * pred_prob + (1 - label) * (1 - pred_prob)
|
69
69
|
modulating_factor = (1.0 - p_t) ** self.gamma
|
70
70
|
loss *= modulating_factor
|
71
|
-
if self.alpha > 0:
|
71
|
+
if (self.alpha > 0).any():
|
72
|
+
self.alpha = self.alpha.to(device=pred.device, dtype=pred.dtype)
|
72
73
|
alpha_factor = label * self.alpha + (1 - label) * (1 - self.alpha)
|
73
74
|
loss *= alpha_factor
|
74
75
|
return loss.mean(1).sum()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.122
|
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>
|
@@ -68,8 +68,8 @@ Requires-Dist: tensorflowjs>=2.0.0; extra == "export"
|
|
68
68
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
69
69
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
70
70
|
Provides-Extra: solutions
|
71
|
-
Requires-Dist: shapely
|
72
|
-
Requires-Dist: streamlit
|
71
|
+
Requires-Dist: shapely>=2.0.0; extra == "solutions"
|
72
|
+
Requires-Dist: streamlit>=1.29.0; extra == "solutions"
|
73
73
|
Provides-Extra: logging
|
74
74
|
Requires-Dist: wandb; extra == "logging"
|
75
75
|
Requires-Dist: tensorboard; extra == "logging"
|
@@ -1,114 +0,0 @@
|
|
1
|
-
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
|
-
|
3
|
-
from time import time
|
4
|
-
|
5
|
-
from ultralytics.solutions.solutions import BaseSolution, SolutionAnnotator, SolutionResults
|
6
|
-
from ultralytics.utils.plotting import colors
|
7
|
-
|
8
|
-
|
9
|
-
class SpeedEstimator(BaseSolution):
|
10
|
-
"""
|
11
|
-
A class to estimate the speed of objects in a real-time video stream based on their tracks.
|
12
|
-
|
13
|
-
This class extends the BaseSolution class and provides functionality for estimating object speeds using
|
14
|
-
tracking data in video streams.
|
15
|
-
|
16
|
-
Attributes:
|
17
|
-
spd (Dict[int, float]): Dictionary storing speed data for tracked objects.
|
18
|
-
trkd_ids (List[int]): List of tracked object IDs that have already been speed-estimated.
|
19
|
-
trk_pt (Dict[int, float]): Dictionary storing previous timestamps for tracked objects.
|
20
|
-
trk_pp (Dict[int, Tuple[float, float]]): Dictionary storing previous positions for tracked objects.
|
21
|
-
region (List[Tuple[int, int]]): List of points defining the speed estimation region.
|
22
|
-
track_line (List[Tuple[float, float]]): List of points representing the object's track.
|
23
|
-
r_s (LineString): LineString object representing the speed estimation region.
|
24
|
-
|
25
|
-
Methods:
|
26
|
-
initialize_region: Initializes the speed estimation region.
|
27
|
-
process: Processes input frames to estimate object speeds.
|
28
|
-
store_tracking_history: Stores the tracking history for an object.
|
29
|
-
extract_tracks: Extracts tracks from the current frame.
|
30
|
-
display_output: Displays the output with annotations.
|
31
|
-
|
32
|
-
Examples:
|
33
|
-
>>> estimator = SpeedEstimator()
|
34
|
-
>>> frame = cv2.imread("frame.jpg")
|
35
|
-
>>> results = estimator.process(frame)
|
36
|
-
>>> cv2.imshow("Speed Estimation", results.plot_im)
|
37
|
-
"""
|
38
|
-
|
39
|
-
def __init__(self, **kwargs):
|
40
|
-
"""
|
41
|
-
Initialize the SpeedEstimator object with speed estimation parameters and data structures.
|
42
|
-
|
43
|
-
Args:
|
44
|
-
**kwargs (Any): Additional keyword arguments passed to the parent class.
|
45
|
-
"""
|
46
|
-
super().__init__(**kwargs)
|
47
|
-
|
48
|
-
self.initialize_region() # Initialize speed region
|
49
|
-
|
50
|
-
self.spd = {} # Dictionary for speed data
|
51
|
-
self.trkd_ids = [] # List for already speed-estimated and tracked IDs
|
52
|
-
self.trk_pt = {} # Dictionary for tracks' previous timestamps
|
53
|
-
self.trk_pp = {} # Dictionary for tracks' previous positions
|
54
|
-
|
55
|
-
def process(self, im0):
|
56
|
-
"""
|
57
|
-
Process an input frame to estimate object speeds based on tracking data.
|
58
|
-
|
59
|
-
Args:
|
60
|
-
im0 (np.ndarray): Input image for processing with shape (H, W, C) for RGB images.
|
61
|
-
|
62
|
-
Returns:
|
63
|
-
(SolutionResults): Contains processed image `plot_im` and `total_tracks` (number of tracked objects).
|
64
|
-
|
65
|
-
Examples:
|
66
|
-
>>> estimator = SpeedEstimator()
|
67
|
-
>>> image = np.random.randint(0, 255, (480, 640, 3), dtype=np.uint8)
|
68
|
-
>>> results = estimator.process(image)
|
69
|
-
"""
|
70
|
-
self.extract_tracks(im0) # Extract tracks
|
71
|
-
annotator = SolutionAnnotator(im0, line_width=self.line_width) # Initialize annotator
|
72
|
-
|
73
|
-
# Draw speed estimation region
|
74
|
-
annotator.draw_region(reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2)
|
75
|
-
|
76
|
-
for box, track_id, cls, conf in zip(self.boxes, self.track_ids, self.clss, self.confs):
|
77
|
-
self.store_tracking_history(track_id, box) # Store track history
|
78
|
-
|
79
|
-
# Initialize tracking data for new objects
|
80
|
-
if track_id not in self.trk_pt:
|
81
|
-
self.trk_pt[track_id] = 0
|
82
|
-
if track_id not in self.trk_pp:
|
83
|
-
self.trk_pp[track_id] = self.track_line[-1]
|
84
|
-
|
85
|
-
speed_label = (
|
86
|
-
f"{int(self.spd[track_id])} km/h"
|
87
|
-
if track_id in self.spd and self.show_labels
|
88
|
-
else self.adjust_box_label(cls, conf, track_id)
|
89
|
-
)
|
90
|
-
annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
|
91
|
-
|
92
|
-
# Determine if object is crossing the speed estimation region
|
93
|
-
if self.LineString([self.trk_pp[track_id], self.track_line[-1]]).intersects(self.r_s):
|
94
|
-
direction = "known"
|
95
|
-
else:
|
96
|
-
direction = "unknown"
|
97
|
-
|
98
|
-
# Calculate speed for objects crossing the region for the first time
|
99
|
-
if direction == "known" and track_id not in self.trkd_ids:
|
100
|
-
self.trkd_ids.append(track_id)
|
101
|
-
time_difference = time() - self.trk_pt[track_id]
|
102
|
-
if time_difference > 0:
|
103
|
-
# Calculate speed based on vertical displacement and time
|
104
|
-
self.spd[track_id] = abs(self.track_line[-1][1] - self.trk_pp[track_id][1]) / time_difference
|
105
|
-
|
106
|
-
# Update tracking data for next frame
|
107
|
-
self.trk_pt[track_id] = time()
|
108
|
-
self.trk_pp[track_id] = self.track_line[-1]
|
109
|
-
|
110
|
-
plot_im = annotator.result()
|
111
|
-
self.display_output(plot_im) # Display output with base class function
|
112
|
-
|
113
|
-
# Return results with processed image and tracking summary
|
114
|
-
return SolutionResults(plot_im=plot_im, total_tracks=len(self.track_ids))
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.120 → ultralytics-8.3.122}/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.120 → ultralytics-8.3.122}/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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml
RENAMED
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.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.120 → ultralytics-8.3.122}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml
RENAMED
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
|