ultralytics 8.2.92__tar.gz → 8.2.94__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.
Potentially problematic release.
This version of ultralytics might be problematic. Click here for more details.
- {ultralytics-8.2.92/ultralytics.egg-info → ultralytics-8.2.94}/PKG-INFO +10 -10
- {ultralytics-8.2.92 → ultralytics-8.2.94}/README.md +7 -7
- {ultralytics-8.2.92 → ultralytics-8.2.94}/pyproject.toml +2 -2
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_cli.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/__init__.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/exporter.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/trainer.py +28 -14
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/val.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/predict.py +7 -5
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/val.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/val.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/val.py +1 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/tasks.py +51 -4
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/queue_management.py +14 -52
- ultralytics-8.2.94/ultralytics/solutions/speed_estimation.py +116 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/plotting.py +55 -1
- {ultralytics-8.2.92 → ultralytics-8.2.94/ultralytics.egg-info}/PKG-INFO +10 -10
- ultralytics-8.2.92/ultralytics/solutions/speed_estimation.py +0 -180
- {ultralytics-8.2.92 → ultralytics-8.2.94}/LICENSE +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/setup.cfg +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/conftest.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_cuda.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_engine.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_explorer.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_exports.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_integrations.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_python.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/tests/test_solutions.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/base.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/build.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/explorer.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/gui/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/gui/dash.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/explorer/utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.2.92 → ultralytics-8.2.94}/ultralytics.egg-info/top_level.txt +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
4
|
-
Summary: Ultralytics
|
|
3
|
+
Version: 8.2.94
|
|
4
|
+
Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
|
5
5
|
Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
6
6
|
Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
|
|
7
7
|
License: AGPL-3.0
|
|
8
8
|
Project-URL: Bug Reports, https://github.com/ultralytics/ultralytics/issues
|
|
9
9
|
Project-URL: Funding, https://ultralytics.com
|
|
10
10
|
Project-URL: Source, https://github.com/ultralytics/ultralytics/
|
|
11
|
-
Keywords: machine-learning,deep-learning,computer-vision,ML,DL,AI,YOLO,YOLOv3,YOLOv5,YOLOv8,HUB,Ultralytics
|
|
11
|
+
Keywords: machine-learning,deep-learning,computer-vision,ML,DL,AI,YOLO,YOLOv3,YOLOv5,YOLOv8,YOLOv9,YOLOv10,HUB,Ultralytics
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
13
|
Classifier: Intended Audience :: Developers
|
|
14
14
|
Classifier: Intended Audience :: Education
|
|
@@ -132,7 +132,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
|
|
|
132
132
|
|
|
133
133
|
## <div align="center">Documentation</div>
|
|
134
134
|
|
|
135
|
-
See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com) for full documentation on training, validation, prediction and deployment.
|
|
135
|
+
See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com/) for full documentation on training, validation, prediction and deployment.
|
|
136
136
|
|
|
137
137
|
<details open>
|
|
138
138
|
<summary>Install</summary>
|
|
@@ -145,7 +145,7 @@ Pip install the ultralytics package including all [requirements](https://github.
|
|
|
145
145
|
pip install ultralytics
|
|
146
146
|
```
|
|
147
147
|
|
|
148
|
-
For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart).
|
|
148
|
+
For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
|
|
149
149
|
|
|
150
150
|
[](https://anaconda.org/conda-forge/ultralytics) [](https://hub.docker.com/r/ultralytics/ultralytics)
|
|
151
151
|
|
|
@@ -162,7 +162,7 @@ YOLOv8 may be used directly in the Command Line Interface (CLI) with a `yolo` co
|
|
|
162
162
|
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
|
|
163
163
|
```
|
|
164
164
|
|
|
165
|
-
`yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli) for examples.
|
|
165
|
+
`yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli/) for examples.
|
|
166
166
|
|
|
167
167
|
### Python
|
|
168
168
|
|
|
@@ -182,7 +182,7 @@ results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
|
|
|
182
182
|
path = model.export(format="onnx") # export the model to ONNX format
|
|
183
183
|
```
|
|
184
184
|
|
|
185
|
-
See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more examples.
|
|
185
|
+
See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples.
|
|
186
186
|
|
|
187
187
|
</details>
|
|
188
188
|
|
|
@@ -201,7 +201,7 @@ Ultralytics provides interactive notebooks for YOLOv8, covering training, valida
|
|
|
201
201
|
|
|
202
202
|
## <div align="center">Models</div>
|
|
203
203
|
|
|
204
|
-
YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect), [Segment](https://docs.ultralytics.com/tasks/segment) and [Pose](https://docs.ultralytics.com/tasks/pose) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet) dataset. [Track](https://docs.ultralytics.com/modes/track) mode is available for all Detect, Segment and Pose models.
|
|
204
|
+
YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect/), [Segment](https://docs.ultralytics.com/tasks/segment/) and [Pose](https://docs.ultralytics.com/tasks/pose/) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify/) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/) dataset. [Track](https://docs.ultralytics.com/modes/track/) mode is available for all Detect, Segment and Pose models.
|
|
205
205
|
|
|
206
206
|
<img width="1024" src="https://raw.githubusercontent.com/ultralytics/assets/main/im/banner-tasks.png" alt="Ultralytics YOLO supported tasks">
|
|
207
207
|
|
|
@@ -312,7 +312,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
|
|
|
312
312
|
|
|
313
313
|
## <div align="center">Integrations</div>
|
|
314
314
|
|
|
315
|
-
Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
|
|
315
|
+
Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow.
|
|
316
316
|
|
|
317
317
|
<br>
|
|
318
318
|
<a href="https://ultralytics.com/hub" target="_blank">
|
|
@@ -347,7 +347,7 @@ Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub)
|
|
|
347
347
|
|
|
348
348
|
## <div align="center">Contribute</div>
|
|
349
349
|
|
|
350
|
-
We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
|
|
350
|
+
We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
|
|
351
351
|
|
|
352
352
|
<!-- SVG image from https://opencollective.com/ultralytics/contributors.svg?width=990 -->
|
|
353
353
|
|
|
@@ -47,7 +47,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
|
|
|
47
47
|
|
|
48
48
|
## <div align="center">Documentation</div>
|
|
49
49
|
|
|
50
|
-
See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com) for full documentation on training, validation, prediction and deployment.
|
|
50
|
+
See below for a quickstart installation and usage example, and see the [YOLOv8 Docs](https://docs.ultralytics.com/) for full documentation on training, validation, prediction and deployment.
|
|
51
51
|
|
|
52
52
|
<details open>
|
|
53
53
|
<summary>Install</summary>
|
|
@@ -60,7 +60,7 @@ Pip install the ultralytics package including all [requirements](https://github.
|
|
|
60
60
|
pip install ultralytics
|
|
61
61
|
```
|
|
62
62
|
|
|
63
|
-
For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart).
|
|
63
|
+
For alternative installation methods including [Conda](https://anaconda.org/conda-forge/ultralytics), [Docker](https://hub.docker.com/r/ultralytics/ultralytics), and Git, please refer to the [Quickstart Guide](https://docs.ultralytics.com/quickstart/).
|
|
64
64
|
|
|
65
65
|
[](https://anaconda.org/conda-forge/ultralytics) [](https://hub.docker.com/r/ultralytics/ultralytics)
|
|
66
66
|
|
|
@@ -77,7 +77,7 @@ YOLOv8 may be used directly in the Command Line Interface (CLI) with a `yolo` co
|
|
|
77
77
|
yolo predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'
|
|
78
78
|
```
|
|
79
79
|
|
|
80
|
-
`yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli) for examples.
|
|
80
|
+
`yolo` can be used for a variety of tasks and modes and accepts additional arguments, i.e. `imgsz=640`. See the YOLOv8 [CLI Docs](https://docs.ultralytics.com/usage/cli/) for examples.
|
|
81
81
|
|
|
82
82
|
### Python
|
|
83
83
|
|
|
@@ -97,7 +97,7 @@ results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
|
|
|
97
97
|
path = model.export(format="onnx") # export the model to ONNX format
|
|
98
98
|
```
|
|
99
99
|
|
|
100
|
-
See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more examples.
|
|
100
|
+
See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples.
|
|
101
101
|
|
|
102
102
|
</details>
|
|
103
103
|
|
|
@@ -116,7 +116,7 @@ Ultralytics provides interactive notebooks for YOLOv8, covering training, valida
|
|
|
116
116
|
|
|
117
117
|
## <div align="center">Models</div>
|
|
118
118
|
|
|
119
|
-
YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect), [Segment](https://docs.ultralytics.com/tasks/segment) and [Pose](https://docs.ultralytics.com/tasks/pose) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet) dataset. [Track](https://docs.ultralytics.com/modes/track) mode is available for all Detect, Segment and Pose models.
|
|
119
|
+
YOLOv8 [Detect](https://docs.ultralytics.com/tasks/detect/), [Segment](https://docs.ultralytics.com/tasks/segment/) and [Pose](https://docs.ultralytics.com/tasks/pose/) models pretrained on the [COCO](https://docs.ultralytics.com/datasets/detect/coco/) dataset are available here, as well as YOLOv8 [Classify](https://docs.ultralytics.com/tasks/classify/) models pretrained on the [ImageNet](https://docs.ultralytics.com/datasets/classify/imagenet/) dataset. [Track](https://docs.ultralytics.com/modes/track/) mode is available for all Detect, Segment and Pose models.
|
|
120
120
|
|
|
121
121
|
<img width="1024" src="https://raw.githubusercontent.com/ultralytics/assets/main/im/banner-tasks.png" alt="Ultralytics YOLO supported tasks">
|
|
122
122
|
|
|
@@ -227,7 +227,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
|
|
|
227
227
|
|
|
228
228
|
## <div align="center">Integrations</div>
|
|
229
229
|
|
|
230
|
-
Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
|
|
230
|
+
Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino/), can optimize your AI workflow.
|
|
231
231
|
|
|
232
232
|
<br>
|
|
233
233
|
<a href="https://ultralytics.com/hub" target="_blank">
|
|
@@ -262,7 +262,7 @@ Experience seamless AI with [Ultralytics HUB](https://www.ultralytics.com/hub)
|
|
|
262
262
|
|
|
263
263
|
## <div align="center">Contribute</div>
|
|
264
264
|
|
|
265
|
-
We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
|
|
265
|
+
We love your input! YOLOv5 and YOLOv8 would not be possible without help from our community. Please see our [Contributing Guide](https://docs.ultralytics.com/help/contributing/) to get started, and fill out our [Survey](https://www.ultralytics.com/survey?utm_source=github&utm_medium=social&utm_campaign=Survey) to send us feedback on your experience. Thank you 🙏 to all our contributors!
|
|
266
266
|
|
|
267
267
|
<!-- SVG image from https://opencollective.com/ultralytics/contributors.svg?width=990 -->
|
|
268
268
|
|
|
@@ -26,11 +26,11 @@ build-backend = "setuptools.build_meta"
|
|
|
26
26
|
[project]
|
|
27
27
|
name = "ultralytics"
|
|
28
28
|
dynamic = ["version"]
|
|
29
|
-
description = "Ultralytics
|
|
29
|
+
description = "Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification."
|
|
30
30
|
readme = "README.md"
|
|
31
31
|
requires-python = ">=3.8"
|
|
32
32
|
license = { "text" = "AGPL-3.0" }
|
|
33
|
-
keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "HUB", "Ultralytics"]
|
|
33
|
+
keywords = ["machine-learning", "deep-learning", "computer-vision", "ML", "DL", "AI", "YOLO", "YOLOv3", "YOLOv5", "YOLOv8", "YOLOv9", "YOLOv10", "HUB", "Ultralytics"]
|
|
34
34
|
authors = [
|
|
35
35
|
{ name = "Glenn Jocher" },
|
|
36
36
|
{ name = "Ayush Chaurasia" },
|
|
@@ -101,7 +101,7 @@ def test_mobilesam():
|
|
|
101
101
|
model.predict(source, points=[900, 370], labels=[1])
|
|
102
102
|
|
|
103
103
|
# Predict a segment based on a box prompt
|
|
104
|
-
model.predict(source, bboxes=[439, 437, 524, 709])
|
|
104
|
+
model.predict(source, bboxes=[439, 437, 524, 709], save=True)
|
|
105
105
|
|
|
106
106
|
# Predict all
|
|
107
107
|
# model(source)
|
|
@@ -391,7 +391,7 @@ class Exporter:
|
|
|
391
391
|
"""YOLOv8 ONNX export."""
|
|
392
392
|
requirements = ["onnx>=1.12.0"]
|
|
393
393
|
if self.args.simplify:
|
|
394
|
-
requirements += ["onnxslim==0.1.
|
|
394
|
+
requirements += ["onnxslim==0.1.34", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
|
|
395
395
|
check_requirements(requirements)
|
|
396
396
|
import onnx # noqa
|
|
397
397
|
|
|
@@ -28,7 +28,6 @@ from ultralytics.utils import (
|
|
|
28
28
|
DEFAULT_CFG,
|
|
29
29
|
LOCAL_RANK,
|
|
30
30
|
LOGGER,
|
|
31
|
-
MACOS,
|
|
32
31
|
RANK,
|
|
33
32
|
TQDM,
|
|
34
33
|
__version__,
|
|
@@ -409,13 +408,17 @@ class BaseTrainer:
|
|
|
409
408
|
break
|
|
410
409
|
|
|
411
410
|
# Log
|
|
412
|
-
mem = f"{torch.cuda.memory_reserved() / 1E9 if torch.cuda.is_available() else 0:.3g}G" # (GB)
|
|
413
|
-
loss_len = self.tloss.shape[0] if len(self.tloss.shape) else 1
|
|
414
|
-
losses = self.tloss if loss_len > 1 else torch.unsqueeze(self.tloss, 0)
|
|
415
411
|
if RANK in {-1, 0}:
|
|
412
|
+
loss_length = self.tloss.shape[0] if len(self.tloss.shape) else 1
|
|
416
413
|
pbar.set_description(
|
|
417
|
-
("%11s" * 2 + "%11.4g" * (2 +
|
|
418
|
-
% (
|
|
414
|
+
("%11s" * 2 + "%11.4g" * (2 + loss_length))
|
|
415
|
+
% (
|
|
416
|
+
f"{epoch + 1}/{self.epochs}",
|
|
417
|
+
f"{self._get_memory():.3g}G", # (GB) GPU memory util
|
|
418
|
+
*(self.tloss if loss_length > 1 else torch.unsqueeze(self.tloss, 0)), # losses
|
|
419
|
+
batch["cls"].shape[0], # batch size, i.e. 8
|
|
420
|
+
batch["img"].shape[-1], # imgsz, i.e 640
|
|
421
|
+
)
|
|
419
422
|
)
|
|
420
423
|
self.run_callbacks("on_batch_end")
|
|
421
424
|
if self.args.plots and ni in self.plot_idx:
|
|
@@ -453,11 +456,7 @@ class BaseTrainer:
|
|
|
453
456
|
self.scheduler.last_epoch = self.epoch # do not move
|
|
454
457
|
self.stop |= epoch >= self.epochs # stop if exceeded epochs
|
|
455
458
|
self.run_callbacks("on_fit_epoch_end")
|
|
456
|
-
|
|
457
|
-
if MACOS:
|
|
458
|
-
torch.mps.empty_cache() # clear unified memory at end of epoch, may help MPS' management of 'unlimited' virtual memoy
|
|
459
|
-
else:
|
|
460
|
-
torch.cuda.empty_cache() # clear GPU memory at end of epoch, may help reduce CUDA out of memory errors
|
|
459
|
+
self._clear_memory()
|
|
461
460
|
|
|
462
461
|
# Early Stopping
|
|
463
462
|
if RANK != -1: # if DDP training
|
|
@@ -478,14 +477,29 @@ class BaseTrainer:
|
|
|
478
477
|
if self.args.plots:
|
|
479
478
|
self.plot_metrics()
|
|
480
479
|
self.run_callbacks("on_train_end")
|
|
480
|
+
self._clear_memory()
|
|
481
|
+
self.run_callbacks("teardown")
|
|
482
|
+
|
|
483
|
+
def _get_memory(self):
|
|
484
|
+
"""Get accelerator memory utilization in GB."""
|
|
485
|
+
if self.device.type == "mps":
|
|
486
|
+
memory = torch.mps.driver_allocated_memory()
|
|
487
|
+
elif self.device.type == "cpu":
|
|
488
|
+
memory = 0
|
|
489
|
+
else:
|
|
490
|
+
memory = torch.cuda.memory_reserved()
|
|
491
|
+
return memory / 1e9
|
|
492
|
+
|
|
493
|
+
def _clear_memory(self):
|
|
494
|
+
"""Clear accelerator memory on different platforms."""
|
|
481
495
|
gc.collect()
|
|
482
|
-
if
|
|
496
|
+
if self.device.type == "mps":
|
|
483
497
|
torch.mps.empty_cache()
|
|
498
|
+
elif self.device.type == "cpu":
|
|
499
|
+
return
|
|
484
500
|
else:
|
|
485
501
|
torch.cuda.empty_cache()
|
|
486
502
|
|
|
487
|
-
self.run_callbacks("teardown")
|
|
488
|
-
|
|
489
503
|
def read_results_csv(self):
|
|
490
504
|
"""Read results.csv into a dict using pandas."""
|
|
491
505
|
import pandas as pd # scope for faster 'import ultralytics'
|
|
@@ -450,16 +450,18 @@ class Predictor(BasePredictor):
|
|
|
450
450
|
|
|
451
451
|
results = []
|
|
452
452
|
for masks, orig_img, img_path in zip([pred_masks], orig_imgs, self.batch[0]):
|
|
453
|
-
if pred_bboxes is not None:
|
|
454
|
-
pred_bboxes = ops.scale_boxes(img.shape[2:], pred_bboxes.float(), orig_img.shape, padding=False)
|
|
455
|
-
cls = torch.arange(len(pred_masks), dtype=torch.int32, device=pred_masks.device)
|
|
456
|
-
pred_bboxes = torch.cat([pred_bboxes, pred_scores[:, None], cls[:, None]], dim=-1)
|
|
457
|
-
|
|
458
453
|
if len(masks) == 0:
|
|
459
454
|
masks = None
|
|
460
455
|
else:
|
|
461
456
|
masks = ops.scale_masks(masks[None].float(), orig_img.shape[:2], padding=False)[0]
|
|
462
457
|
masks = masks > self.model.mask_threshold # to bool
|
|
458
|
+
if pred_bboxes is not None:
|
|
459
|
+
pred_bboxes = ops.scale_boxes(img.shape[2:], pred_bboxes.float(), orig_img.shape, padding=False)
|
|
460
|
+
else:
|
|
461
|
+
pred_bboxes = batched_mask_to_box(masks)
|
|
462
|
+
# NOTE: SAM models do not return cls info. This `cls` here is just a placeholder for consistency.
|
|
463
|
+
cls = torch.arange(len(pred_masks), dtype=torch.int32, device=pred_masks.device)
|
|
464
|
+
pred_bboxes = torch.cat([pred_bboxes, pred_scores[:, None], cls[:, None]], dim=-1)
|
|
463
465
|
results.append(Results(orig_img, path=img_path, names=names, masks=masks, boxes=pred_bboxes))
|
|
464
466
|
# Reset segment-all mode.
|
|
465
467
|
self.segment_all = False
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
2
|
|
|
3
3
|
import contextlib
|
|
4
|
+
import pickle
|
|
5
|
+
import types
|
|
4
6
|
from copy import deepcopy
|
|
5
7
|
from pathlib import Path
|
|
6
8
|
|
|
@@ -750,7 +752,35 @@ def temporary_modules(modules=None, attributes=None):
|
|
|
750
752
|
del sys.modules[old]
|
|
751
753
|
|
|
752
754
|
|
|
753
|
-
|
|
755
|
+
class SafeClass:
|
|
756
|
+
"""A placeholder class to replace unknown classes during unpickling."""
|
|
757
|
+
|
|
758
|
+
def __init__(self, *args, **kwargs):
|
|
759
|
+
"""Initialize SafeClass instance, ignoring all arguments."""
|
|
760
|
+
pass
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
class SafeUnpickler(pickle.Unpickler):
|
|
764
|
+
"""Custom Unpickler that replaces unknown classes with SafeClass."""
|
|
765
|
+
|
|
766
|
+
def find_class(self, module, name):
|
|
767
|
+
"""Attempt to find a class, returning SafeClass if not among safe modules."""
|
|
768
|
+
safe_modules = (
|
|
769
|
+
"torch",
|
|
770
|
+
"collections",
|
|
771
|
+
"collections.abc",
|
|
772
|
+
"builtins",
|
|
773
|
+
"math",
|
|
774
|
+
"numpy",
|
|
775
|
+
# Add other modules considered safe
|
|
776
|
+
)
|
|
777
|
+
if module in safe_modules:
|
|
778
|
+
return super().find_class(module, name)
|
|
779
|
+
else:
|
|
780
|
+
return SafeClass
|
|
781
|
+
|
|
782
|
+
|
|
783
|
+
def torch_safe_load(weight, safe_only=False):
|
|
754
784
|
"""
|
|
755
785
|
Attempts to load a PyTorch model with the torch.load() function. If a ModuleNotFoundError is raised, it catches the
|
|
756
786
|
error, logs a warning message, and attempts to install the missing module via the check_requirements() function.
|
|
@@ -758,9 +788,18 @@ def torch_safe_load(weight):
|
|
|
758
788
|
|
|
759
789
|
Args:
|
|
760
790
|
weight (str): The file path of the PyTorch model.
|
|
791
|
+
safe_only (bool): If True, replace unknown classes with SafeClass during loading.
|
|
792
|
+
|
|
793
|
+
Example:
|
|
794
|
+
```python
|
|
795
|
+
from ultralytics.nn.tasks import torch_safe_load
|
|
796
|
+
|
|
797
|
+
ckpt, file = torch_safe_load("path/to/best.pt", safe_only=True)
|
|
798
|
+
```
|
|
761
799
|
|
|
762
800
|
Returns:
|
|
763
|
-
(dict): The loaded
|
|
801
|
+
ckpt (dict): The loaded model checkpoint.
|
|
802
|
+
file (str): The loaded filename
|
|
764
803
|
"""
|
|
765
804
|
from ultralytics.utils.downloads import attempt_download_asset
|
|
766
805
|
|
|
@@ -779,7 +818,15 @@ def torch_safe_load(weight):
|
|
|
779
818
|
"ultralytics.utils.loss.v10DetectLoss": "ultralytics.utils.loss.E2EDetectLoss", # YOLOv10
|
|
780
819
|
},
|
|
781
820
|
):
|
|
782
|
-
|
|
821
|
+
if safe_only:
|
|
822
|
+
# Load via custom pickle module
|
|
823
|
+
safe_pickle = types.ModuleType("safe_pickle")
|
|
824
|
+
safe_pickle.Unpickler = SafeUnpickler
|
|
825
|
+
safe_pickle.load = lambda file_obj: SafeUnpickler(file_obj).load()
|
|
826
|
+
with open(file, "rb") as f:
|
|
827
|
+
ckpt = torch.load(f, pickle_module=safe_pickle)
|
|
828
|
+
else:
|
|
829
|
+
ckpt = torch.load(file, map_location="cpu")
|
|
783
830
|
|
|
784
831
|
except ModuleNotFoundError as e: # e.name is missing module name
|
|
785
832
|
if e.name == "models":
|
|
@@ -809,7 +856,7 @@ def torch_safe_load(weight):
|
|
|
809
856
|
)
|
|
810
857
|
ckpt = {"model": ckpt.model}
|
|
811
858
|
|
|
812
|
-
return ckpt, file
|
|
859
|
+
return ckpt, file
|
|
813
860
|
|
|
814
861
|
|
|
815
862
|
def attempt_load_weights(weights, device=None, inplace=True, fuse=False):
|
|
@@ -20,15 +20,8 @@ class QueueManager:
|
|
|
20
20
|
names,
|
|
21
21
|
reg_pts=None,
|
|
22
22
|
line_thickness=2,
|
|
23
|
-
track_thickness=2,
|
|
24
23
|
view_img=False,
|
|
25
|
-
region_color=(255, 0, 255),
|
|
26
|
-
view_queue_counts=True,
|
|
27
24
|
draw_tracks=False,
|
|
28
|
-
count_txt_color=(255, 255, 255),
|
|
29
|
-
track_color=None,
|
|
30
|
-
region_thickness=5,
|
|
31
|
-
fontsize=0.7,
|
|
32
25
|
):
|
|
33
26
|
"""
|
|
34
27
|
Initializes the QueueManager with specified parameters for tracking and counting objects.
|
|
@@ -38,57 +31,35 @@ class QueueManager:
|
|
|
38
31
|
reg_pts (list of tuples, optional): Points defining the counting region polygon. Defaults to a predefined
|
|
39
32
|
rectangle.
|
|
40
33
|
line_thickness (int, optional): Thickness of the annotation lines. Defaults to 2.
|
|
41
|
-
track_thickness (int, optional): Thickness of the track lines. Defaults to 2.
|
|
42
34
|
view_img (bool, optional): Whether to display the image frames. Defaults to False.
|
|
43
|
-
region_color (tuple, optional): Color of the counting region lines (BGR). Defaults to (255, 0, 255).
|
|
44
|
-
view_queue_counts (bool, optional): Whether to display the queue counts. Defaults to True.
|
|
45
35
|
draw_tracks (bool, optional): Whether to draw tracks of the objects. Defaults to False.
|
|
46
|
-
count_txt_color (tuple, optional): Color of the count text (BGR). Defaults to (255, 255, 255).
|
|
47
|
-
track_color (tuple, optional): Color of the tracks. If None, different colors will be used for different
|
|
48
|
-
tracks. Defaults to None.
|
|
49
|
-
region_thickness (int, optional): Thickness of the counting region lines. Defaults to 5.
|
|
50
|
-
fontsize (float, optional): Font size for the text annotations. Defaults to 0.7.
|
|
51
36
|
"""
|
|
52
|
-
# Mouse events state
|
|
53
|
-
self.is_drawing = False
|
|
54
|
-
self.selected_point = None
|
|
55
|
-
|
|
56
37
|
# Region & Line Information
|
|
57
38
|
self.reg_pts = reg_pts if reg_pts is not None else [(20, 60), (20, 680), (1120, 680), (1120, 60)]
|
|
58
39
|
self.counting_region = (
|
|
59
40
|
Polygon(self.reg_pts) if len(self.reg_pts) >= 3 else Polygon([(20, 60), (20, 680), (1120, 680), (1120, 60)])
|
|
60
41
|
)
|
|
61
|
-
self.region_color = region_color
|
|
62
|
-
self.region_thickness = region_thickness
|
|
63
42
|
|
|
64
|
-
#
|
|
65
|
-
self.im0 = None
|
|
43
|
+
# annotation Information
|
|
66
44
|
self.tf = line_thickness
|
|
67
45
|
self.view_img = view_img
|
|
68
|
-
self.view_queue_counts = view_queue_counts
|
|
69
|
-
self.fontsize = fontsize
|
|
70
46
|
|
|
71
47
|
self.names = names # Class names
|
|
72
|
-
self.annotator = None # Annotator
|
|
73
|
-
self.window_name = "Ultralytics YOLOv8 Queue Manager"
|
|
74
48
|
|
|
75
49
|
# Object counting Information
|
|
76
50
|
self.counts = 0
|
|
77
|
-
self.count_txt_color = count_txt_color
|
|
78
51
|
|
|
79
52
|
# Tracks info
|
|
80
53
|
self.track_history = defaultdict(list)
|
|
81
|
-
self.track_thickness = track_thickness
|
|
82
54
|
self.draw_tracks = draw_tracks
|
|
83
|
-
self.track_color = track_color
|
|
84
55
|
|
|
85
56
|
# Check if environment supports imshow
|
|
86
57
|
self.env_check = check_imshow(warn=True)
|
|
87
58
|
|
|
88
|
-
def extract_and_process_tracks(self, tracks):
|
|
59
|
+
def extract_and_process_tracks(self, tracks, im0):
|
|
89
60
|
"""Extracts and processes tracks for queue management in a video stream."""
|
|
90
61
|
# Initialize annotator and draw the queue region
|
|
91
|
-
|
|
62
|
+
annotator = Annotator(im0, self.tf, self.names)
|
|
92
63
|
self.counts = 0 # Reset counts every frame
|
|
93
64
|
if tracks[0].boxes.id is not None:
|
|
94
65
|
boxes = tracks[0].boxes.xyxy.cpu()
|
|
@@ -98,7 +69,7 @@ class QueueManager:
|
|
|
98
69
|
# Extract tracks
|
|
99
70
|
for box, track_id, cls in zip(boxes, track_ids, clss):
|
|
100
71
|
# Draw bounding box
|
|
101
|
-
|
|
72
|
+
annotator.box_label(box, label=self.names[cls], color=colors(int(track_id), True))
|
|
102
73
|
|
|
103
74
|
# Update track history
|
|
104
75
|
track_line = self.track_history[track_id]
|
|
@@ -108,10 +79,10 @@ class QueueManager:
|
|
|
108
79
|
|
|
109
80
|
# Draw track trails if enabled
|
|
110
81
|
if self.draw_tracks:
|
|
111
|
-
|
|
82
|
+
annotator.draw_centroid_and_tracks(
|
|
112
83
|
track_line,
|
|
113
|
-
color=
|
|
114
|
-
track_thickness=self.
|
|
84
|
+
color=colors(int(track_id), True),
|
|
85
|
+
track_thickness=self.line_thickness,
|
|
115
86
|
)
|
|
116
87
|
|
|
117
88
|
prev_position = self.track_history[track_id][-2] if len(self.track_history[track_id]) > 1 else None
|
|
@@ -125,21 +96,16 @@ class QueueManager:
|
|
|
125
96
|
# Display queue counts
|
|
126
97
|
label = f"Queue Counts : {str(self.counts)}"
|
|
127
98
|
if label is not None:
|
|
128
|
-
|
|
99
|
+
annotator.queue_counts_display(
|
|
129
100
|
label,
|
|
130
101
|
points=self.reg_pts,
|
|
131
|
-
region_color=
|
|
132
|
-
txt_color=
|
|
102
|
+
region_color=(255, 0, 255),
|
|
103
|
+
txt_color=(104, 31, 17),
|
|
133
104
|
)
|
|
134
105
|
|
|
135
|
-
self.display_frames()
|
|
136
|
-
|
|
137
|
-
def display_frames(self):
|
|
138
|
-
"""Displays the current frame with annotations."""
|
|
139
106
|
if self.env_check and self.view_img:
|
|
140
|
-
|
|
141
|
-
cv2.
|
|
142
|
-
cv2.imshow(self.window_name, self.im0)
|
|
107
|
+
annotator.draw_region(reg_pts=self.reg_pts, thickness=self.tf * 2, color=(255, 0, 255))
|
|
108
|
+
cv2.imshow("Ultralytics YOLOv8 Queue Manager", im0)
|
|
143
109
|
# Close window on 'q' key press
|
|
144
110
|
if cv2.waitKey(1) & 0xFF == ord("q"):
|
|
145
111
|
return
|
|
@@ -152,12 +118,8 @@ class QueueManager:
|
|
|
152
118
|
im0 (ndarray): Current frame from the video stream.
|
|
153
119
|
tracks (list): List of tracks obtained from the object tracking process.
|
|
154
120
|
"""
|
|
155
|
-
self.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
if self.view_img:
|
|
159
|
-
self.display_frames() # Display the frame if enabled
|
|
160
|
-
return self.im0
|
|
121
|
+
self.extract_and_process_tracks(tracks, im0) # Extract and process tracks
|
|
122
|
+
return im0
|
|
161
123
|
|
|
162
124
|
|
|
163
125
|
if __name__ == "__main__":
|