ultralytics 8.2.24__tar.gz → 8.2.26__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.24 → ultralytics-8.2.26}/PKG-INFO +7 -6
- {ultralytics-8.2.24 → ultralytics-8.2.26}/README.md +3 -3
- {ultralytics-8.2.24 → ultralytics-8.2.26}/pyproject.toml +3 -6
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_exports.py +26 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/__init__.py +1 -1
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/exporter.py +8 -10
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/val.py +9 -5
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/val.py +2 -1
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/val.py +2 -1
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/tasks.py +2 -2
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/analytics.py +51 -2
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/benchmarks.py +6 -6
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/checks.py +7 -1
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/PKG-INFO +7 -6
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/requires.txt +3 -4
- {ultralytics-8.2.24 → ultralytics-8.2.26}/LICENSE +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/setup.cfg +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/conftest.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_cli.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_cuda.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_engine.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_explorer.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_integrations.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_python.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/base.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/build.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/explorer.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/gui/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/gui/dash.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/utils.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/prompt.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.26
|
|
4
4
|
Summary: Ultralytics YOLOv8 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
|
|
@@ -61,8 +61,9 @@ Provides-Extra: export
|
|
|
61
61
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
|
62
62
|
Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
|
63
63
|
Requires-Dist: openvino>=2024.0.0; extra == "export"
|
|
64
|
-
Requires-Dist: tensorflow
|
|
65
|
-
Requires-Dist: tensorflowjs>=3.9.0;
|
|
64
|
+
Requires-Dist: tensorflow>=2.0.0; extra == "export"
|
|
65
|
+
Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
|
|
66
|
+
Requires-Dist: keras; extra == "export"
|
|
66
67
|
Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
|
|
67
68
|
Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
|
|
68
69
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
|
@@ -116,7 +117,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
|
|
|
116
117
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
117
118
|
<a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
|
|
118
119
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
119
|
-
<a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
|
|
120
|
+
<a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
|
|
120
121
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
121
122
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
|
|
122
123
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
@@ -184,7 +185,7 @@ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more exa
|
|
|
184
185
|
|
|
185
186
|
### Notebooks
|
|
186
187
|
|
|
187
|
-
Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics) tutorial, making it easy to learn and implement advanced YOLOv8 features.
|
|
188
|
+
Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics?sub_confirmation=1) tutorial, making it easy to learn and implement advanced YOLOv8 features.
|
|
188
189
|
|
|
189
190
|
| Docs | Notebook | YouTube |
|
|
190
191
|
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
|
@@ -369,7 +370,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
|
|
|
369
370
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
370
371
|
<a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
|
|
371
372
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
372
|
-
<a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
|
|
373
|
+
<a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
|
|
373
374
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
374
375
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
|
|
375
376
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
@@ -34,7 +34,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
|
|
|
34
34
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
35
35
|
<a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
|
|
36
36
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
37
|
-
<a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
|
|
37
|
+
<a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
|
|
38
38
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
39
39
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
|
|
40
40
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
@@ -102,7 +102,7 @@ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more exa
|
|
|
102
102
|
|
|
103
103
|
### Notebooks
|
|
104
104
|
|
|
105
|
-
Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics) tutorial, making it easy to learn and implement advanced YOLOv8 features.
|
|
105
|
+
Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics?sub_confirmation=1) tutorial, making it easy to learn and implement advanced YOLOv8 features.
|
|
106
106
|
|
|
107
107
|
| Docs | Notebook | YouTube |
|
|
108
108
|
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
|
@@ -287,7 +287,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
|
|
|
287
287
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
288
288
|
<a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
|
|
289
289
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
290
|
-
<a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
|
|
290
|
+
<a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
|
|
291
291
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
292
292
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
|
|
293
293
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
@@ -100,8 +100,9 @@ export = [
|
|
|
100
100
|
"onnx>=1.12.0", # ONNX export
|
|
101
101
|
"coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux
|
|
102
102
|
"openvino>=2024.0.0", # OpenVINO export
|
|
103
|
-
"tensorflow
|
|
104
|
-
"tensorflowjs>=3.9.0
|
|
103
|
+
"tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
|
|
104
|
+
"tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
|
|
105
|
+
"keras", # not installed automatically by tensorflow>=2.16
|
|
105
106
|
"flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'", # update old 'flatbuffers' included inside tensorflow package
|
|
106
107
|
"numpy==1.23.5; platform_machine == 'aarch64'", # fix error: `np.bool` was a deprecated alias for the builtin `bool` when using TensorRT models on NVIDIA Jetson
|
|
107
108
|
"h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
|
|
@@ -111,10 +112,6 @@ explorer = [
|
|
|
111
112
|
"duckdb<=0.9.2", # SQL queries, duckdb==0.10.0 bug https://github.com/ultralytics/ultralytics/pull/8181
|
|
112
113
|
"streamlit", # visualizing with GUI
|
|
113
114
|
]
|
|
114
|
-
# tensorflow>=2.4.1,<=2.13.1 # TF exports (-cpu, -aarch64, -macos)
|
|
115
|
-
# tflite-support # for TFLite model metadata
|
|
116
|
-
# nvidia-pyindex # TensorRT export
|
|
117
|
-
# nvidia-tensorrt # TensorRT export
|
|
118
115
|
logging = [
|
|
119
116
|
"comet", # https://docs.ultralytics.com/integrations/comet/
|
|
120
117
|
"tensorboard>=2.13.0",
|
|
@@ -129,6 +129,31 @@ def test_export_coreml_matrix(task, dynamic, int8, half, batch):
|
|
|
129
129
|
shutil.rmtree(file) # cleanup
|
|
130
130
|
|
|
131
131
|
|
|
132
|
+
@pytest.mark.slow
|
|
133
|
+
@pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10, reason="TFLite export requires Python>=3.10")
|
|
134
|
+
@pytest.mark.skipif(not LINUX, reason="Test disabled as TF suffers from install conflicts on Windows and macOS")
|
|
135
|
+
@pytest.mark.parametrize(
|
|
136
|
+
"task, dynamic, int8, half, batch",
|
|
137
|
+
[ # generate all combinations but exclude those where both int8 and half are True
|
|
138
|
+
(task, dynamic, int8, half, batch)
|
|
139
|
+
for task, dynamic, int8, half, batch in product(TASKS, [False], [True, False], [True, False], [1])
|
|
140
|
+
if not (int8 and half) # exclude cases where both int8 and half are True
|
|
141
|
+
],
|
|
142
|
+
)
|
|
143
|
+
def test_export_tflite_matrix(task, dynamic, int8, half, batch):
|
|
144
|
+
"""Test YOLO exports to TFLite format."""
|
|
145
|
+
file = YOLO(TASK2MODEL[task]).export(
|
|
146
|
+
format="tflite",
|
|
147
|
+
imgsz=32,
|
|
148
|
+
dynamic=dynamic,
|
|
149
|
+
int8=int8,
|
|
150
|
+
half=half,
|
|
151
|
+
batch=batch,
|
|
152
|
+
)
|
|
153
|
+
YOLO(file)([SOURCE] * batch, imgsz=32) # exported model inference at batch=3
|
|
154
|
+
Path(file).unlink() # cleanup
|
|
155
|
+
|
|
156
|
+
|
|
132
157
|
@pytest.mark.skipif(not TORCH_1_9, reason="CoreML>=7.2 not supported with PyTorch<=1.8")
|
|
133
158
|
@pytest.mark.skipif(WINDOWS, reason="CoreML not supported on Windows") # RuntimeError: BlobWriter not loaded
|
|
134
159
|
@pytest.mark.skipif(IS_RASPBERRYPI, reason="CoreML not supported on Raspberry Pi")
|
|
@@ -142,6 +167,7 @@ def test_export_coreml():
|
|
|
142
167
|
YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
|
|
143
168
|
|
|
144
169
|
|
|
170
|
+
@pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10, reason="TFLite export requires Python>=3.10")
|
|
145
171
|
@pytest.mark.skipif(not LINUX, reason="Test disabled as TF suffers from install conflicts on Windows and macOS")
|
|
146
172
|
def test_export_tflite():
|
|
147
173
|
"""
|
|
@@ -83,7 +83,6 @@ from ultralytics.utils import (
|
|
|
83
83
|
WINDOWS,
|
|
84
84
|
__version__,
|
|
85
85
|
callbacks,
|
|
86
|
-
checks,
|
|
87
86
|
colorstr,
|
|
88
87
|
get_default_args,
|
|
89
88
|
yaml_save,
|
|
@@ -385,9 +384,7 @@ class Exporter:
|
|
|
385
384
|
"""YOLOv8 ONNX export."""
|
|
386
385
|
requirements = ["onnx>=1.12.0"]
|
|
387
386
|
if self.args.simplify:
|
|
388
|
-
requirements += ["onnxsim>=0.4.33", "onnxruntime-gpu" if torch.cuda.is_available() else "
|
|
389
|
-
if ARM64:
|
|
390
|
-
check_requirements("cmake") # 'cmake' is needed to build onnxsim on aarch64
|
|
387
|
+
requirements += ["cmake", "onnxsim>=0.4.33", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
|
|
391
388
|
check_requirements(requirements)
|
|
392
389
|
import onnx # noqa
|
|
393
390
|
|
|
@@ -813,15 +810,16 @@ class Exporter:
|
|
|
813
810
|
import tensorflow as tf # noqa
|
|
814
811
|
except ImportError:
|
|
815
812
|
suffix = "-macos" if MACOS else "-aarch64" if ARM64 else "" if cuda else "-cpu"
|
|
816
|
-
version = "
|
|
817
|
-
check_requirements(
|
|
813
|
+
version = ">=2.0.0"
|
|
814
|
+
check_requirements(f"tensorflow{suffix}{version}")
|
|
818
815
|
import tensorflow as tf # noqa
|
|
819
|
-
if ARM64:
|
|
820
|
-
check_requirements("cmake") # 'cmake' is needed to build onnxsim on aarch64
|
|
821
816
|
check_requirements(
|
|
822
817
|
(
|
|
818
|
+
"cmake", # 'cmake' is needed to build onnxsim on aarch64 and Conda runners
|
|
819
|
+
"keras", # required by onnx2tf package
|
|
820
|
+
"tf_keras", # required by onnx2tf package
|
|
823
821
|
"onnx>=1.12.0",
|
|
824
|
-
"onnx2tf
|
|
822
|
+
"onnx2tf>1.17.5,<=1.22.3",
|
|
825
823
|
"sng4onnx>=1.0.1",
|
|
826
824
|
"onnxsim>=0.4.33",
|
|
827
825
|
"onnx_graphsurgeon>=0.3.26",
|
|
@@ -835,7 +833,7 @@ class Exporter:
|
|
|
835
833
|
LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...")
|
|
836
834
|
check_version(
|
|
837
835
|
tf.__version__,
|
|
838
|
-
"
|
|
836
|
+
">=2.0.0",
|
|
839
837
|
name="tensorflow",
|
|
840
838
|
verbose=True,
|
|
841
839
|
msg="https://github.com/ultralytics/ultralytics/issues/5161",
|
|
@@ -32,6 +32,7 @@ class DetectionValidator(BaseValidator):
|
|
|
32
32
|
"""Initialize detection model with necessary variables and settings."""
|
|
33
33
|
super().__init__(dataloader, save_dir, pbar, args, _callbacks)
|
|
34
34
|
self.nt_per_class = None
|
|
35
|
+
self.nt_per_image = None
|
|
35
36
|
self.is_coco = False
|
|
36
37
|
self.is_lvis = False
|
|
37
38
|
self.class_map = None
|
|
@@ -77,7 +78,7 @@ class DetectionValidator(BaseValidator):
|
|
|
77
78
|
self.confusion_matrix = ConfusionMatrix(nc=self.nc, conf=self.args.conf)
|
|
78
79
|
self.seen = 0
|
|
79
80
|
self.jdict = []
|
|
80
|
-
self.stats = dict(tp=[], conf=[], pred_cls=[], target_cls=[])
|
|
81
|
+
self.stats = dict(tp=[], conf=[], pred_cls=[], target_cls=[], target_img=[])
|
|
81
82
|
|
|
82
83
|
def get_desc(self):
|
|
83
84
|
"""Return a formatted string summarizing class metrics of YOLO model."""
|
|
@@ -130,6 +131,7 @@ class DetectionValidator(BaseValidator):
|
|
|
130
131
|
cls, bbox = pbatch.pop("cls"), pbatch.pop("bbox")
|
|
131
132
|
nl = len(cls)
|
|
132
133
|
stat["target_cls"] = cls
|
|
134
|
+
stat["target_img"] = cls.unique()
|
|
133
135
|
if npr == 0:
|
|
134
136
|
if nl:
|
|
135
137
|
for k in self.stats.keys():
|
|
@@ -168,11 +170,11 @@ class DetectionValidator(BaseValidator):
|
|
|
168
170
|
def get_stats(self):
|
|
169
171
|
"""Returns metrics statistics and results dictionary."""
|
|
170
172
|
stats = {k: torch.cat(v, 0).cpu().numpy() for k, v in self.stats.items()} # to numpy
|
|
173
|
+
self.nt_per_class = np.bincount(stats["target_cls"].astype(int), minlength=self.nc)
|
|
174
|
+
self.nt_per_image = np.bincount(stats["target_img"].astype(int), minlength=self.nc)
|
|
175
|
+
stats.pop("target_img", None)
|
|
171
176
|
if len(stats) and stats["tp"].any():
|
|
172
177
|
self.metrics.process(**stats)
|
|
173
|
-
self.nt_per_class = np.bincount(
|
|
174
|
-
stats["target_cls"].astype(int), minlength=self.nc
|
|
175
|
-
) # number of targets per class
|
|
176
178
|
return self.metrics.results_dict
|
|
177
179
|
|
|
178
180
|
def print_results(self):
|
|
@@ -185,7 +187,9 @@ class DetectionValidator(BaseValidator):
|
|
|
185
187
|
# Print results per class
|
|
186
188
|
if self.args.verbose and not self.training and self.nc > 1 and len(self.stats):
|
|
187
189
|
for i, c in enumerate(self.metrics.ap_class_index):
|
|
188
|
-
LOGGER.info(
|
|
190
|
+
LOGGER.info(
|
|
191
|
+
pf % (self.names[c], self.nt_per_image[c], self.nt_per_class[c], *self.metrics.class_result(i))
|
|
192
|
+
)
|
|
189
193
|
|
|
190
194
|
if self.args.plots:
|
|
191
195
|
for normalize in True, False:
|
|
@@ -81,7 +81,7 @@ class PoseValidator(DetectionValidator):
|
|
|
81
81
|
is_pose = self.kpt_shape == [17, 3]
|
|
82
82
|
nkpt = self.kpt_shape[0]
|
|
83
83
|
self.sigma = OKS_SIGMA if is_pose else np.ones(nkpt) / nkpt
|
|
84
|
-
self.stats = dict(tp_p=[], tp=[], conf=[], pred_cls=[], target_cls=[])
|
|
84
|
+
self.stats = dict(tp_p=[], tp=[], conf=[], pred_cls=[], target_cls=[], target_img=[])
|
|
85
85
|
|
|
86
86
|
def _prepare_batch(self, si, batch):
|
|
87
87
|
"""Prepares a batch for processing by converting keypoints to float and moving to device."""
|
|
@@ -118,6 +118,7 @@ class PoseValidator(DetectionValidator):
|
|
|
118
118
|
cls, bbox = pbatch.pop("cls"), pbatch.pop("bbox")
|
|
119
119
|
nl = len(cls)
|
|
120
120
|
stat["target_cls"] = cls
|
|
121
|
+
stat["target_img"] = cls.unique()
|
|
121
122
|
if npr == 0:
|
|
122
123
|
if nl:
|
|
123
124
|
for k in self.stats.keys():
|
|
@@ -51,7 +51,7 @@ class SegmentationValidator(DetectionValidator):
|
|
|
51
51
|
self.process = ops.process_mask_upsample # more accurate
|
|
52
52
|
else:
|
|
53
53
|
self.process = ops.process_mask # faster
|
|
54
|
-
self.stats = dict(tp_m=[], tp=[], conf=[], pred_cls=[], target_cls=[])
|
|
54
|
+
self.stats = dict(tp_m=[], tp=[], conf=[], pred_cls=[], target_cls=[], target_img=[])
|
|
55
55
|
|
|
56
56
|
def get_desc(self):
|
|
57
57
|
"""Return a formatted description of evaluation metrics."""
|
|
@@ -112,6 +112,7 @@ class SegmentationValidator(DetectionValidator):
|
|
|
112
112
|
cls, bbox = pbatch.pop("cls"), pbatch.pop("bbox")
|
|
113
113
|
nl = len(cls)
|
|
114
114
|
stat["target_cls"] = cls
|
|
115
|
+
stat["target_img"] = cls.unique()
|
|
115
116
|
if npr == 0:
|
|
116
117
|
if nl:
|
|
117
118
|
for k in self.stats.keys():
|
|
@@ -425,11 +425,11 @@ class ClassificationModel(BaseModel):
|
|
|
425
425
|
elif isinstance(m, nn.Sequential):
|
|
426
426
|
types = [type(x) for x in m]
|
|
427
427
|
if nn.Linear in types:
|
|
428
|
-
i = types.index(nn.Linear) # nn.Linear index
|
|
428
|
+
i = len(types) - 1 - types[::-1].index(nn.Linear) # last nn.Linear index
|
|
429
429
|
if m[i].out_features != nc:
|
|
430
430
|
m[i] = nn.Linear(m[i].in_features, nc)
|
|
431
431
|
elif nn.Conv2d in types:
|
|
432
|
-
i = types.index(nn.Conv2d) # nn.Conv2d index
|
|
432
|
+
i = len(types) - 1 - types[::-1].index(nn.Conv2d) # last nn.Conv2d index
|
|
433
433
|
if m[i].out_channels != nc:
|
|
434
434
|
m[i] = nn.Conv2d(m[i].in_channels, nc, m[i].kernel_size, m[i].stride, bias=m[i].bias is not None)
|
|
435
435
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
2
|
|
|
3
|
+
import warnings
|
|
3
4
|
from itertools import cycle
|
|
4
5
|
|
|
5
6
|
import cv2
|
|
@@ -27,6 +28,7 @@ class Analytics:
|
|
|
27
28
|
fontsize=13,
|
|
28
29
|
view_img=False,
|
|
29
30
|
save_img=True,
|
|
31
|
+
max_points=50,
|
|
30
32
|
):
|
|
31
33
|
"""
|
|
32
34
|
Initialize the Analytics class with various chart types.
|
|
@@ -45,6 +47,7 @@ class Analytics:
|
|
|
45
47
|
fontsize (int): Font size for chart text.
|
|
46
48
|
view_img (bool): Whether to display the image.
|
|
47
49
|
save_img (bool): Whether to save the image.
|
|
50
|
+
max_points (int): Specifies when to remove the oldest points in a graph for multiple lines.
|
|
48
51
|
"""
|
|
49
52
|
|
|
50
53
|
self.bg_color = bg_color
|
|
@@ -53,12 +56,14 @@ class Analytics:
|
|
|
53
56
|
self.save_img = save_img
|
|
54
57
|
self.title = title
|
|
55
58
|
self.writer = writer
|
|
59
|
+
self.max_points = max_points
|
|
56
60
|
|
|
57
61
|
# Set figure size based on image shape
|
|
58
62
|
figsize = (im0_shape[0] / 100, im0_shape[1] / 100)
|
|
59
63
|
|
|
60
64
|
if type == "line":
|
|
61
65
|
# Initialize line plot
|
|
66
|
+
self.lines = {}
|
|
62
67
|
fig = Figure(facecolor=self.bg_color, figsize=figsize)
|
|
63
68
|
self.canvas = FigureCanvas(fig)
|
|
64
69
|
self.ax = fig.add_subplot(111, facecolor=self.bg_color)
|
|
@@ -112,9 +117,53 @@ class Analytics:
|
|
|
112
117
|
self.ax.autoscale_view()
|
|
113
118
|
self.canvas.draw()
|
|
114
119
|
im0 = np.array(self.canvas.renderer.buffer_rgba())
|
|
115
|
-
|
|
120
|
+
self.write_and_display_line(im0)
|
|
116
121
|
|
|
117
|
-
|
|
122
|
+
def update_multiple_lines(self, counts_dict, labels_list, frame_number):
|
|
123
|
+
"""
|
|
124
|
+
Update the line graph with multiple classes.
|
|
125
|
+
|
|
126
|
+
Args:
|
|
127
|
+
counts_dict (int): Dictionary include each class counts.
|
|
128
|
+
labels_list (int): list include each classes names.
|
|
129
|
+
frame_number (int): The current frame number.
|
|
130
|
+
"""
|
|
131
|
+
warnings.warn("Display is not supported for multiple lines, output will be stored normally!")
|
|
132
|
+
for obj in labels_list:
|
|
133
|
+
if obj not in self.lines:
|
|
134
|
+
(line,) = self.ax.plot([], [], label=obj, marker="o", markersize=15)
|
|
135
|
+
self.lines[obj] = line
|
|
136
|
+
|
|
137
|
+
x_data = self.lines[obj].get_xdata()
|
|
138
|
+
y_data = self.lines[obj].get_ydata()
|
|
139
|
+
|
|
140
|
+
# Remove the initial point if the number of points exceeds max_points
|
|
141
|
+
if len(x_data) >= self.max_points:
|
|
142
|
+
x_data = np.delete(x_data, 0)
|
|
143
|
+
y_data = np.delete(y_data, 0)
|
|
144
|
+
|
|
145
|
+
x_data = np.append(x_data, float(frame_number)) # Ensure frame_number is converted to float
|
|
146
|
+
y_data = np.append(y_data, float(counts_dict.get(obj, 0))) # Ensure total_count is converted to float
|
|
147
|
+
self.lines[obj].set_data(x_data, y_data)
|
|
148
|
+
|
|
149
|
+
self.ax.relim()
|
|
150
|
+
self.ax.autoscale_view()
|
|
151
|
+
self.ax.legend()
|
|
152
|
+
self.canvas.draw()
|
|
153
|
+
|
|
154
|
+
im0 = np.array(self.canvas.renderer.buffer_rgba())
|
|
155
|
+
self.view_img = False # for multiple line view_img not supported yet, coming soon!
|
|
156
|
+
self.write_and_display_line(im0)
|
|
157
|
+
|
|
158
|
+
def write_and_display_line(self, im0):
|
|
159
|
+
"""
|
|
160
|
+
Write and display the line graph
|
|
161
|
+
Args:
|
|
162
|
+
im0 (ndarray): Image for processing
|
|
163
|
+
"""
|
|
164
|
+
|
|
165
|
+
# convert image to BGR format
|
|
166
|
+
im0 = cv2.cvtColor(im0[:, :, :3], cv2.COLOR_RGBA2BGR)
|
|
118
167
|
cv2.imshow(self.title, im0) if self.view_img else None
|
|
119
168
|
self.writer.write(im0) if self.save_img else None
|
|
120
169
|
|
|
@@ -88,14 +88,14 @@ def benchmark(
|
|
|
88
88
|
emoji, filename = "❌", None # export defaults
|
|
89
89
|
try:
|
|
90
90
|
# Checks
|
|
91
|
-
if i ==
|
|
92
|
-
assert not (IS_RASPBERRYPI or IS_JETSON), "CoreML export not supported on Raspberry Pi or NVIDIA Jetson"
|
|
93
|
-
if i == 9: # Edge TPU
|
|
94
|
-
assert LINUX and not ARM64, "Edge TPU export only supported on non-aarch64 Linux"
|
|
95
|
-
elif i == 7: # TF GraphDef
|
|
91
|
+
if i == 7: # TF GraphDef
|
|
96
92
|
assert model.task != "obb", "TensorFlow GraphDef not supported for OBB task"
|
|
93
|
+
elif i == 9: # Edge TPU
|
|
94
|
+
assert LINUX and not ARM64, "Edge TPU export only supported on non-aarch64 Linux"
|
|
97
95
|
elif i in {5, 10}: # CoreML and TF.js
|
|
98
|
-
assert MACOS or LINUX, "export only supported on macOS and Linux"
|
|
96
|
+
assert MACOS or LINUX, "CoreML and TF.js export only supported on macOS and Linux"
|
|
97
|
+
assert not IS_RASPBERRYPI, "CoreML and TF.js export not supported on Raspberry Pi"
|
|
98
|
+
assert not IS_JETSON, "CoreML and TF.js export not supported on NVIDIA Jetson"
|
|
99
99
|
if i in {3, 5}: # CoreML and OpenVINO
|
|
100
100
|
assert not IS_PYTHON_3_12, "CoreML and OpenVINO not supported on Python 3.12"
|
|
101
101
|
if i in {6, 7, 8, 9, 10}: # All TF formats
|
|
@@ -33,6 +33,7 @@ from ultralytics.utils import (
|
|
|
33
33
|
ROOT,
|
|
34
34
|
TORCHVISION_VERSION,
|
|
35
35
|
USER_CONFIG_DIR,
|
|
36
|
+
Retry,
|
|
36
37
|
SimpleNamespace,
|
|
37
38
|
ThreadingLocked,
|
|
38
39
|
TryExcept,
|
|
@@ -381,6 +382,11 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
|
|
|
381
382
|
except (AssertionError, metadata.PackageNotFoundError):
|
|
382
383
|
pkgs.append(r)
|
|
383
384
|
|
|
385
|
+
@Retry(times=2, delay=1)
|
|
386
|
+
def attempt_install(packages, commands):
|
|
387
|
+
"""Attempt pip install command with retries on failure."""
|
|
388
|
+
return subprocess.check_output(f"pip install --no-cache-dir {packages} {commands}", shell=True).decode()
|
|
389
|
+
|
|
384
390
|
s = " ".join(f'"{x}"' for x in pkgs) # console string
|
|
385
391
|
if s:
|
|
386
392
|
if install and AUTOINSTALL: # check environment variable
|
|
@@ -389,7 +395,7 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
|
|
|
389
395
|
try:
|
|
390
396
|
t = time.time()
|
|
391
397
|
assert ONLINE, "AutoUpdate skipped (offline)"
|
|
392
|
-
LOGGER.info(
|
|
398
|
+
LOGGER.info(attempt_install(s, cmds))
|
|
393
399
|
dt = time.time() - t
|
|
394
400
|
LOGGER.info(
|
|
395
401
|
f"{prefix} AutoUpdate success ✅ {dt:.1f}s, installed {n} package{'s' * (n > 1)}: {pkgs}\n"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.2.
|
|
3
|
+
Version: 8.2.26
|
|
4
4
|
Summary: Ultralytics YOLOv8 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
|
|
@@ -61,8 +61,9 @@ Provides-Extra: export
|
|
|
61
61
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
|
62
62
|
Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
|
63
63
|
Requires-Dist: openvino>=2024.0.0; extra == "export"
|
|
64
|
-
Requires-Dist: tensorflow
|
|
65
|
-
Requires-Dist: tensorflowjs>=3.9.0;
|
|
64
|
+
Requires-Dist: tensorflow>=2.0.0; extra == "export"
|
|
65
|
+
Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
|
|
66
|
+
Requires-Dist: keras; extra == "export"
|
|
66
67
|
Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
|
|
67
68
|
Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
|
|
68
69
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
|
@@ -116,7 +117,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
|
|
|
116
117
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
117
118
|
<a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
|
|
118
119
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
119
|
-
<a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
|
|
120
|
+
<a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
|
|
120
121
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
121
122
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
|
|
122
123
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
|
|
@@ -184,7 +185,7 @@ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more exa
|
|
|
184
185
|
|
|
185
186
|
### Notebooks
|
|
186
187
|
|
|
187
|
-
Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics) tutorial, making it easy to learn and implement advanced YOLOv8 features.
|
|
188
|
+
Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics?sub_confirmation=1) tutorial, making it easy to learn and implement advanced YOLOv8 features.
|
|
188
189
|
|
|
189
190
|
| Docs | Notebook | YouTube |
|
|
190
191
|
| --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
|
|
@@ -369,7 +370,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
|
|
|
369
370
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
370
371
|
<a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
|
|
371
372
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
372
|
-
<a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
|
|
373
|
+
<a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
|
|
373
374
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
374
375
|
<a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
|
|
375
376
|
<img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
|
|
@@ -35,6 +35,9 @@ streamlit
|
|
|
35
35
|
[export]
|
|
36
36
|
onnx>=1.12.0
|
|
37
37
|
openvino>=2024.0.0
|
|
38
|
+
tensorflow>=2.0.0
|
|
39
|
+
tensorflowjs>=3.9.0
|
|
40
|
+
keras
|
|
38
41
|
|
|
39
42
|
[export:platform_machine == "aarch64"]
|
|
40
43
|
flatbuffers<100,>=23.5.26
|
|
@@ -44,10 +47,6 @@ h5py!=3.11.0
|
|
|
44
47
|
[export:platform_system != "Windows" and python_version <= "3.11"]
|
|
45
48
|
coremltools>=7.0
|
|
46
49
|
|
|
47
|
-
[export:python_version <= "3.11"]
|
|
48
|
-
tensorflow<=2.13.1
|
|
49
|
-
tensorflowjs>=3.9.0
|
|
50
|
-
|
|
51
50
|
[extra]
|
|
52
51
|
hub-sdk>=0.0.5
|
|
53
52
|
ipython
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|