ultralytics 8.2.17__tar.gz → 8.2.19__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.17 → ultralytics-8.2.19}/PKG-INFO +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_cli.py +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_cuda.py +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_engine.py +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_exports.py +1 -2
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_integrations.py +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_python.py +4 -4
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/__init__.py +1 -1
- ultralytics-8.2.19/ultralytics/cfg/datasets/signature.yaml +20 -0
- ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9c-seg.yaml +38 -0
- ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9c.yaml +38 -0
- ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9e-seg.yaml +61 -0
- ultralytics-8.2.19/ultralytics/cfg/models/v9/yolov9e.yaml +61 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/build.py +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/exporter.py +3 -0
- ultralytics-8.2.19/ultralytics/solutions/__init__.py +19 -0
- ultralytics-8.2.19/ultralytics/solutions/ai_gym.py +124 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/distance_calculation.py +66 -71
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/heatmap.py +95 -133
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/object_counter.py +62 -82
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/parking_management.py +22 -9
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/queue_management.py +63 -82
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/solutions/speed_estimation.py +50 -68
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/plotting.py +40 -42
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/PKG-INFO +1 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/SOURCES.txt +1 -0
- ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -38
- ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9c.yaml +0 -38
- ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -61
- ultralytics-8.2.17/ultralytics/cfg/models/v9/yolov9e.yaml +0 -61
- ultralytics-8.2.17/ultralytics/solutions/ai_gym.py +0 -150
- ultralytics-8.2.17/ultralytics/trackers/utils/__init__.py +0 -1
- {ultralytics-8.2.17 → ultralytics-8.2.19}/LICENSE +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/README.md +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/pyproject.toml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/setup.cfg +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/tests/test_explorer.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/augment.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/base.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/explorer.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/gui/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/gui/dash.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/explorer/utils.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/prompt.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/autobackend.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.2.17/ultralytics/solutions → ultralytics-8.2.19/ultralytics/trackers/utils}/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/ultralytics.egg-info/requires.txt +0 -0
- {ultralytics-8.2.17 → ultralytics-8.2.19}/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.19
|
|
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
|
|
@@ -7,7 +7,7 @@ import pytest
|
|
|
7
7
|
from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
|
|
8
8
|
from ultralytics.utils import ASSETS, WEIGHTS_DIR, checks
|
|
9
9
|
|
|
10
|
-
from
|
|
10
|
+
from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE
|
|
11
11
|
|
|
12
12
|
# Constants
|
|
13
13
|
TASK_MODEL_DATA = [(task, WEIGHTS_DIR / TASK2MODEL[task], TASK2DATA[task]) for task in TASKS]
|
|
@@ -10,7 +10,7 @@ from ultralytics import YOLO
|
|
|
10
10
|
from ultralytics.utils import ASSETS, WEIGHTS_DIR
|
|
11
11
|
from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
|
|
12
12
|
|
|
13
|
-
from
|
|
13
|
+
from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
def test_checks():
|
|
@@ -9,7 +9,7 @@ from ultralytics.engine.exporter import Exporter
|
|
|
9
9
|
from ultralytics.models.yolo import classify, detect, segment
|
|
10
10
|
from ultralytics.utils import ASSETS, DEFAULT_CFG, WEIGHTS_DIR
|
|
11
11
|
|
|
12
|
-
from
|
|
12
|
+
from tests import MODEL
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
def test_func(*args): # noqa
|
|
@@ -12,7 +12,7 @@ from ultralytics import YOLO, download
|
|
|
12
12
|
from ultralytics.utils import DATASETS_DIR, SETTINGS
|
|
13
13
|
from ultralytics.utils.checks import check_requirements
|
|
14
14
|
|
|
15
|
-
from
|
|
15
|
+
from tests import MODEL, SOURCE, TMP
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
@pytest.mark.skipif(not check_requirements("ray", install=False), reason="ray[tune] not installed")
|
|
@@ -25,10 +25,9 @@ from ultralytics.utils import (
|
|
|
25
25
|
Retry,
|
|
26
26
|
checks,
|
|
27
27
|
)
|
|
28
|
-
from ultralytics.utils.downloads import download
|
|
28
|
+
from ultralytics.utils.downloads import download, is_url
|
|
29
29
|
from ultralytics.utils.torch_utils import TORCH_1_9
|
|
30
|
-
|
|
31
|
-
from . import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP
|
|
30
|
+
from tests import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP
|
|
32
31
|
|
|
33
32
|
|
|
34
33
|
def test_model_forward():
|
|
@@ -102,7 +101,7 @@ def test_predict_img(model_name):
|
|
|
102
101
|
def test_predict_visualize(model):
|
|
103
102
|
"""Test model predict methods with 'visualize=True' arguments."""
|
|
104
103
|
YOLO(WEIGHTS_DIR / model)(SOURCE, imgsz=32, visualize=True)
|
|
105
|
-
|
|
104
|
+
|
|
106
105
|
|
|
107
106
|
def test_predict_grey_and_4ch():
|
|
108
107
|
"""Test YOLO prediction on SOURCE converted to greyscale and 4-channel images."""
|
|
@@ -131,6 +130,7 @@ def test_predict_grey_and_4ch():
|
|
|
131
130
|
|
|
132
131
|
@pytest.mark.slow
|
|
133
132
|
@pytest.mark.skipif(not ONLINE, reason="environment is offline")
|
|
133
|
+
@pytest.mark.skipif(not is_url("https://youtu.be/G17sBkb38XQ"), reason="YouTube URL issue")
|
|
134
134
|
@Retry(times=3, delay=10)
|
|
135
135
|
def test_youtube():
|
|
136
136
|
"""
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
# Signature dataset by Ultralytics
|
|
3
|
+
# Documentation: https://docs.ultralytics.com/datasets/detect/signature/
|
|
4
|
+
# Example usage: yolo train data=signature.yaml
|
|
5
|
+
# parent
|
|
6
|
+
# ├── ultralytics
|
|
7
|
+
# └── datasets
|
|
8
|
+
# └── signature ← downloads here (11.2 MB)
|
|
9
|
+
|
|
10
|
+
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
|
11
|
+
path: ../datasets/signature # dataset root dir
|
|
12
|
+
train: train/images # train images (relative to 'path') 143 images
|
|
13
|
+
val: valid/images # val images (relative to 'path') 35 images
|
|
14
|
+
|
|
15
|
+
# Classes
|
|
16
|
+
names:
|
|
17
|
+
0: signature
|
|
18
|
+
|
|
19
|
+
# Download script/URL (optional)
|
|
20
|
+
download: https://ultralytics.com/assets/signature.zip
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
# YOLOv9c-seg
|
|
3
|
+
# 654 layers, 27897120 parameters, 159.4 GFLOPs
|
|
4
|
+
|
|
5
|
+
# parameters
|
|
6
|
+
nc: 80 # number of classes
|
|
7
|
+
|
|
8
|
+
# gelan backbone
|
|
9
|
+
backbone:
|
|
10
|
+
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
|
|
11
|
+
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
|
|
12
|
+
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]] # 2
|
|
13
|
+
- [-1, 1, ADown, [256]] # 3-P3/8
|
|
14
|
+
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]] # 4
|
|
15
|
+
- [-1, 1, ADown, [512]] # 5-P4/16
|
|
16
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 6
|
|
17
|
+
- [-1, 1, ADown, [512]] # 7-P5/32
|
|
18
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 8
|
|
19
|
+
- [-1, 1, SPPELAN, [512, 256]] # 9
|
|
20
|
+
|
|
21
|
+
head:
|
|
22
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
23
|
+
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
|
|
24
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 12
|
|
25
|
+
|
|
26
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
27
|
+
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
|
|
28
|
+
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]] # 15 (P3/8-small)
|
|
29
|
+
|
|
30
|
+
- [-1, 1, ADown, [256]]
|
|
31
|
+
- [[-1, 12], 1, Concat, [1]] # cat head P4
|
|
32
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 18 (P4/16-medium)
|
|
33
|
+
|
|
34
|
+
- [-1, 1, ADown, [512]]
|
|
35
|
+
- [[-1, 9], 1, Concat, [1]] # cat head P5
|
|
36
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 21 (P5/32-large)
|
|
37
|
+
|
|
38
|
+
- [[15, 18, 21], 1, Segment, [nc, 32, 256]] # Segment(P3, P4, P5)
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
# YOLOv9c
|
|
3
|
+
# 618 layers, 25590912 parameters, 104.0 GFLOPs
|
|
4
|
+
|
|
5
|
+
# parameters
|
|
6
|
+
nc: 80 # number of classes
|
|
7
|
+
|
|
8
|
+
# gelan backbone
|
|
9
|
+
backbone:
|
|
10
|
+
- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
|
|
11
|
+
- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
|
|
12
|
+
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 1]] # 2
|
|
13
|
+
- [-1, 1, ADown, [256]] # 3-P3/8
|
|
14
|
+
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 1]] # 4
|
|
15
|
+
- [-1, 1, ADown, [512]] # 5-P4/16
|
|
16
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 6
|
|
17
|
+
- [-1, 1, ADown, [512]] # 7-P5/32
|
|
18
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 8
|
|
19
|
+
- [-1, 1, SPPELAN, [512, 256]] # 9
|
|
20
|
+
|
|
21
|
+
head:
|
|
22
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
23
|
+
- [[-1, 6], 1, Concat, [1]] # cat backbone P4
|
|
24
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 12
|
|
25
|
+
|
|
26
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
27
|
+
- [[-1, 4], 1, Concat, [1]] # cat backbone P3
|
|
28
|
+
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 1]] # 15 (P3/8-small)
|
|
29
|
+
|
|
30
|
+
- [-1, 1, ADown, [256]]
|
|
31
|
+
- [[-1, 12], 1, Concat, [1]] # cat head P4
|
|
32
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 18 (P4/16-medium)
|
|
33
|
+
|
|
34
|
+
- [-1, 1, ADown, [512]]
|
|
35
|
+
- [[-1, 9], 1, Concat, [1]] # cat head P5
|
|
36
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 1]] # 21 (P5/32-large)
|
|
37
|
+
|
|
38
|
+
- [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
# YOLOv9c-seg
|
|
3
|
+
# 1261 layers, 60512800 parameters, 248.4 GFLOPs
|
|
4
|
+
|
|
5
|
+
# parameters
|
|
6
|
+
nc: 80 # number of classes
|
|
7
|
+
|
|
8
|
+
# gelan backbone
|
|
9
|
+
backbone:
|
|
10
|
+
- [-1, 1, Silence, []]
|
|
11
|
+
- [-1, 1, Conv, [64, 3, 2]] # 1-P1/2
|
|
12
|
+
- [-1, 1, Conv, [128, 3, 2]] # 2-P2/4
|
|
13
|
+
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 3
|
|
14
|
+
- [-1, 1, ADown, [256]] # 4-P3/8
|
|
15
|
+
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 5
|
|
16
|
+
- [-1, 1, ADown, [512]] # 6-P4/16
|
|
17
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 7
|
|
18
|
+
- [-1, 1, ADown, [1024]] # 8-P5/32
|
|
19
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 9
|
|
20
|
+
|
|
21
|
+
- [1, 1, CBLinear, [[64]]] # 10
|
|
22
|
+
- [3, 1, CBLinear, [[64, 128]]] # 11
|
|
23
|
+
- [5, 1, CBLinear, [[64, 128, 256]]] # 12
|
|
24
|
+
- [7, 1, CBLinear, [[64, 128, 256, 512]]] # 13
|
|
25
|
+
- [9, 1, CBLinear, [[64, 128, 256, 512, 1024]]] # 14
|
|
26
|
+
|
|
27
|
+
- [0, 1, Conv, [64, 3, 2]] # 15-P1/2
|
|
28
|
+
- [[10, 11, 12, 13, 14, -1], 1, CBFuse, [[0, 0, 0, 0, 0]]] # 16
|
|
29
|
+
- [-1, 1, Conv, [128, 3, 2]] # 17-P2/4
|
|
30
|
+
- [[11, 12, 13, 14, -1], 1, CBFuse, [[1, 1, 1, 1]]] # 18
|
|
31
|
+
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 19
|
|
32
|
+
- [-1, 1, ADown, [256]] # 20-P3/8
|
|
33
|
+
- [[12, 13, 14, -1], 1, CBFuse, [[2, 2, 2]]] # 21
|
|
34
|
+
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 22
|
|
35
|
+
- [-1, 1, ADown, [512]] # 23-P4/16
|
|
36
|
+
- [[13, 14, -1], 1, CBFuse, [[3, 3]]] # 24
|
|
37
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 25
|
|
38
|
+
- [-1, 1, ADown, [1024]] # 26-P5/32
|
|
39
|
+
- [[14, -1], 1, CBFuse, [[4]]] # 27
|
|
40
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 28
|
|
41
|
+
- [-1, 1, SPPELAN, [512, 256]] # 29
|
|
42
|
+
|
|
43
|
+
# gelan head
|
|
44
|
+
head:
|
|
45
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
46
|
+
- [[-1, 25], 1, Concat, [1]] # cat backbone P4
|
|
47
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 32
|
|
48
|
+
|
|
49
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
50
|
+
- [[-1, 22], 1, Concat, [1]] # cat backbone P3
|
|
51
|
+
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 2]] # 35 (P3/8-small)
|
|
52
|
+
|
|
53
|
+
- [-1, 1, ADown, [256]]
|
|
54
|
+
- [[-1, 32], 1, Concat, [1]] # cat head P4
|
|
55
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 38 (P4/16-medium)
|
|
56
|
+
|
|
57
|
+
- [-1, 1, ADown, [512]]
|
|
58
|
+
- [[-1, 29], 1, Concat, [1]] # cat head P5
|
|
59
|
+
- [-1, 1, RepNCSPELAN4, [512, 1024, 512, 2]] # 41 (P5/32-large)
|
|
60
|
+
|
|
61
|
+
- [[35, 38, 41], 1, Segment, [nc, 32, 256]] # Segment (P3, P4, P5)
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
# YOLOv9e
|
|
3
|
+
# 1225 layers, 58206592 parameters, 193.0 GFLOPs
|
|
4
|
+
|
|
5
|
+
# parameters
|
|
6
|
+
nc: 80 # number of classes
|
|
7
|
+
|
|
8
|
+
# gelan backbone
|
|
9
|
+
backbone:
|
|
10
|
+
- [-1, 1, Silence, []]
|
|
11
|
+
- [-1, 1, Conv, [64, 3, 2]] # 1-P1/2
|
|
12
|
+
- [-1, 1, Conv, [128, 3, 2]] # 2-P2/4
|
|
13
|
+
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 3
|
|
14
|
+
- [-1, 1, ADown, [256]] # 4-P3/8
|
|
15
|
+
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 5
|
|
16
|
+
- [-1, 1, ADown, [512]] # 6-P4/16
|
|
17
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 7
|
|
18
|
+
- [-1, 1, ADown, [1024]] # 8-P5/32
|
|
19
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 9
|
|
20
|
+
|
|
21
|
+
- [1, 1, CBLinear, [[64]]] # 10
|
|
22
|
+
- [3, 1, CBLinear, [[64, 128]]] # 11
|
|
23
|
+
- [5, 1, CBLinear, [[64, 128, 256]]] # 12
|
|
24
|
+
- [7, 1, CBLinear, [[64, 128, 256, 512]]] # 13
|
|
25
|
+
- [9, 1, CBLinear, [[64, 128, 256, 512, 1024]]] # 14
|
|
26
|
+
|
|
27
|
+
- [0, 1, Conv, [64, 3, 2]] # 15-P1/2
|
|
28
|
+
- [[10, 11, 12, 13, 14, -1], 1, CBFuse, [[0, 0, 0, 0, 0]]] # 16
|
|
29
|
+
- [-1, 1, Conv, [128, 3, 2]] # 17-P2/4
|
|
30
|
+
- [[11, 12, 13, 14, -1], 1, CBFuse, [[1, 1, 1, 1]]] # 18
|
|
31
|
+
- [-1, 1, RepNCSPELAN4, [256, 128, 64, 2]] # 19
|
|
32
|
+
- [-1, 1, ADown, [256]] # 20-P3/8
|
|
33
|
+
- [[12, 13, 14, -1], 1, CBFuse, [[2, 2, 2]]] # 21
|
|
34
|
+
- [-1, 1, RepNCSPELAN4, [512, 256, 128, 2]] # 22
|
|
35
|
+
- [-1, 1, ADown, [512]] # 23-P4/16
|
|
36
|
+
- [[13, 14, -1], 1, CBFuse, [[3, 3]]] # 24
|
|
37
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 25
|
|
38
|
+
- [-1, 1, ADown, [1024]] # 26-P5/32
|
|
39
|
+
- [[14, -1], 1, CBFuse, [[4]]] # 27
|
|
40
|
+
- [-1, 1, RepNCSPELAN4, [1024, 512, 256, 2]] # 28
|
|
41
|
+
- [-1, 1, SPPELAN, [512, 256]] # 29
|
|
42
|
+
|
|
43
|
+
# gelan head
|
|
44
|
+
head:
|
|
45
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
46
|
+
- [[-1, 25], 1, Concat, [1]] # cat backbone P4
|
|
47
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 32
|
|
48
|
+
|
|
49
|
+
- [-1, 1, nn.Upsample, [None, 2, "nearest"]]
|
|
50
|
+
- [[-1, 22], 1, Concat, [1]] # cat backbone P3
|
|
51
|
+
- [-1, 1, RepNCSPELAN4, [256, 256, 128, 2]] # 35 (P3/8-small)
|
|
52
|
+
|
|
53
|
+
- [-1, 1, ADown, [256]]
|
|
54
|
+
- [[-1, 32], 1, Concat, [1]] # cat head P4
|
|
55
|
+
- [-1, 1, RepNCSPELAN4, [512, 512, 256, 2]] # 38 (P4/16-medium)
|
|
56
|
+
|
|
57
|
+
- [-1, 1, ADown, [512]]
|
|
58
|
+
- [[-1, 29], 1, Concat, [1]] # cat head P5
|
|
59
|
+
- [-1, 1, RepNCSPELAN4, [512, 1024, 512, 2]] # 41 (P5/32-large)
|
|
60
|
+
|
|
61
|
+
- [[35, 38, 41], 1, Detect, [nc]] # Detect(P3, P4, P5)
|
|
@@ -128,7 +128,7 @@ def build_dataloader(dataset, batch, workers, shuffle=True, rank=-1):
|
|
|
128
128
|
"""Return an InfiniteDataLoader or DataLoader for training or validation set."""
|
|
129
129
|
batch = min(batch, len(dataset))
|
|
130
130
|
nd = torch.cuda.device_count() # number of CUDA devices
|
|
131
|
-
nw = min(
|
|
131
|
+
nw = min(os.cpu_count() // max(nd, 1), workers) # number of workers
|
|
132
132
|
sampler = None if rank == -1 else distributed.DistributedSampler(dataset, shuffle=shuffle)
|
|
133
133
|
generator = torch.Generator()
|
|
134
134
|
generator.manual_seed(6148914691236517205 + RANK)
|
|
@@ -195,6 +195,9 @@ class Exporter:
|
|
|
195
195
|
if not hasattr(model, "names"):
|
|
196
196
|
model.names = default_class_names()
|
|
197
197
|
model.names = check_class_names(model.names)
|
|
198
|
+
if self.args.half and self.args.int8:
|
|
199
|
+
LOGGER.warning("WARNING ⚠️ half=True and int8=True are mutually exclusive, setting half=False.")
|
|
200
|
+
self.args.half = False
|
|
198
201
|
if self.args.half and onnx and self.device.type == "cpu":
|
|
199
202
|
LOGGER.warning("WARNING ⚠️ half=True only compatible with GPU export, i.e. use device=0")
|
|
200
203
|
self.args.half = False
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
|
|
3
|
+
from .ai_gym import AIGym
|
|
4
|
+
from .distance_calculation import DistanceCalculation
|
|
5
|
+
from .heatmap import Heatmap
|
|
6
|
+
from .object_counter import ObjectCounter
|
|
7
|
+
from .parking_management import ParkingManagement
|
|
8
|
+
from .queue_management import QueueManager
|
|
9
|
+
from .speed_estimation import SpeedEstimator
|
|
10
|
+
|
|
11
|
+
__all__ = (
|
|
12
|
+
"AIGym",
|
|
13
|
+
"DistanceCalculation",
|
|
14
|
+
"Heatmap",
|
|
15
|
+
"ObjectCounter",
|
|
16
|
+
"ParkingManagement",
|
|
17
|
+
"QueueManager",
|
|
18
|
+
"SpeedEstimator",
|
|
19
|
+
)
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
|
+
|
|
3
|
+
import cv2
|
|
4
|
+
|
|
5
|
+
from ultralytics.utils.checks import check_imshow
|
|
6
|
+
from ultralytics.utils.plotting import Annotator
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class AIGym:
|
|
10
|
+
"""A class to manage the gym steps of people in a real-time video stream based on their poses."""
|
|
11
|
+
|
|
12
|
+
def __init__(
|
|
13
|
+
self,
|
|
14
|
+
kpts_to_check,
|
|
15
|
+
line_thickness=2,
|
|
16
|
+
view_img=False,
|
|
17
|
+
pose_up_angle=145.0,
|
|
18
|
+
pose_down_angle=90.0,
|
|
19
|
+
pose_type="pullup",
|
|
20
|
+
):
|
|
21
|
+
"""
|
|
22
|
+
Initializes the AIGym class with the specified parameters.
|
|
23
|
+
|
|
24
|
+
Args:
|
|
25
|
+
kpts_to_check (list): Indices of keypoints to check.
|
|
26
|
+
line_thickness (int, optional): Thickness of the lines drawn. Defaults to 2.
|
|
27
|
+
view_img (bool, optional): Flag to display the image. Defaults to False.
|
|
28
|
+
pose_up_angle (float, optional): Angle threshold for the 'up' pose. Defaults to 145.0.
|
|
29
|
+
pose_down_angle (float, optional): Angle threshold for the 'down' pose. Defaults to 90.0.
|
|
30
|
+
pose_type (str, optional): Type of pose to detect ('pullup', 'pushup', 'abworkout'). Defaults to "pullup".
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
# Image and line thickness
|
|
34
|
+
self.im0 = None
|
|
35
|
+
self.tf = line_thickness
|
|
36
|
+
|
|
37
|
+
# Keypoints and count information
|
|
38
|
+
self.keypoints = None
|
|
39
|
+
self.poseup_angle = pose_up_angle
|
|
40
|
+
self.posedown_angle = pose_down_angle
|
|
41
|
+
self.threshold = 0.001
|
|
42
|
+
|
|
43
|
+
# Store stage, count and angle information
|
|
44
|
+
self.angle = None
|
|
45
|
+
self.count = None
|
|
46
|
+
self.stage = None
|
|
47
|
+
self.pose_type = pose_type
|
|
48
|
+
self.kpts_to_check = kpts_to_check
|
|
49
|
+
|
|
50
|
+
# Visual Information
|
|
51
|
+
self.view_img = view_img
|
|
52
|
+
self.annotator = None
|
|
53
|
+
|
|
54
|
+
# Check if environment supports imshow
|
|
55
|
+
self.env_check = check_imshow(warn=True)
|
|
56
|
+
|
|
57
|
+
def start_counting(self, im0, results, frame_count):
|
|
58
|
+
"""
|
|
59
|
+
Function used to count the gym steps.
|
|
60
|
+
|
|
61
|
+
Args:
|
|
62
|
+
im0 (ndarray): Current frame from the video stream.
|
|
63
|
+
results (list): Pose estimation data.
|
|
64
|
+
frame_count (int): Current frame count.
|
|
65
|
+
"""
|
|
66
|
+
|
|
67
|
+
self.im0 = im0
|
|
68
|
+
|
|
69
|
+
# Initialize count, angle, and stage lists on the first frame
|
|
70
|
+
if frame_count == 1:
|
|
71
|
+
self.count = [0] * len(results[0])
|
|
72
|
+
self.angle = [0] * len(results[0])
|
|
73
|
+
self.stage = ["-" for _ in results[0]]
|
|
74
|
+
|
|
75
|
+
self.keypoints = results[0].keypoints.data
|
|
76
|
+
self.annotator = Annotator(im0, line_width=2)
|
|
77
|
+
|
|
78
|
+
for ind, k in enumerate(reversed(self.keypoints)):
|
|
79
|
+
# Estimate angle and draw specific points based on pose type
|
|
80
|
+
if self.pose_type in {"pushup", "pullup", "abworkout"}:
|
|
81
|
+
self.angle[ind] = self.annotator.estimate_pose_angle(
|
|
82
|
+
k[int(self.kpts_to_check[0])].cpu(),
|
|
83
|
+
k[int(self.kpts_to_check[1])].cpu(),
|
|
84
|
+
k[int(self.kpts_to_check[2])].cpu(),
|
|
85
|
+
)
|
|
86
|
+
self.im0 = self.annotator.draw_specific_points(k, self.kpts_to_check, shape=(640, 640), radius=10)
|
|
87
|
+
|
|
88
|
+
# Check and update pose stages and counts based on angle
|
|
89
|
+
if self.pose_type in {"abworkout", "pullup"}:
|
|
90
|
+
if self.angle[ind] > self.poseup_angle:
|
|
91
|
+
self.stage[ind] = "down"
|
|
92
|
+
if self.angle[ind] < self.posedown_angle and self.stage[ind] == "down":
|
|
93
|
+
self.stage[ind] = "up"
|
|
94
|
+
self.count[ind] += 1
|
|
95
|
+
|
|
96
|
+
elif self.pose_type == "pushup":
|
|
97
|
+
if self.angle[ind] > self.poseup_angle:
|
|
98
|
+
self.stage[ind] = "up"
|
|
99
|
+
if self.angle[ind] < self.posedown_angle and self.stage[ind] == "up":
|
|
100
|
+
self.stage[ind] = "down"
|
|
101
|
+
self.count[ind] += 1
|
|
102
|
+
|
|
103
|
+
self.annotator.plot_angle_and_count_and_stage(
|
|
104
|
+
angle_text=self.angle[ind],
|
|
105
|
+
count_text=self.count[ind],
|
|
106
|
+
stage_text=self.stage[ind],
|
|
107
|
+
center_kpt=k[int(self.kpts_to_check[1])],
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
# Draw keypoints
|
|
111
|
+
self.annotator.kpts(k, shape=(640, 640), radius=1, kpt_line=True)
|
|
112
|
+
|
|
113
|
+
# Display the image if environment supports it and view_img is True
|
|
114
|
+
if self.env_check and self.view_img:
|
|
115
|
+
cv2.imshow("Ultralytics YOLOv8 AI GYM", self.im0)
|
|
116
|
+
if cv2.waitKey(1) & 0xFF == ord("q"):
|
|
117
|
+
return
|
|
118
|
+
|
|
119
|
+
return self.im0
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
if __name__ == "__main__":
|
|
123
|
+
kpts_to_check = [0, 1, 2] # example keypoints
|
|
124
|
+
aigym = AIGym(kpts_to_check)
|