ultralytics 8.3.78__tar.gz → 8.3.80__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {ultralytics-8.3.78/ultralytics.egg-info → ultralytics-8.3.80}/PKG-INFO +2 -2
- {ultralytics-8.3.78 → ultralytics-8.3.80}/pyproject.toml +1 -1
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/__init__.py +1 -1
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/annotator.py +5 -7
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/augment.py +22 -13
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/converter.py +3 -3
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/exporter.py +3 -2
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/trainer.py +4 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/model.py +2 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/predict.py +2 -2
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/val.py +1 -1
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/val.py +1 -1
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/autobackend.py +2 -2
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/block.py +2 -2
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/comet.py +12 -4
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/metrics.py +1 -1
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/ops.py +5 -4
- {ultralytics-8.3.78 → ultralytics-8.3.80/ultralytics.egg-info}/PKG-INFO +2 -2
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/requires.txt +1 -1
- {ultralytics-8.3.78 → ultralytics-8.3.80}/LICENSE +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/README.md +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/setup.cfg +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/conftest.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_cli.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_cuda.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_engine.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_exports.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_integrations.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_python.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_solutions.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/signature.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/solutions/default.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/base.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/build.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/google/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/blocks.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/memory_attention.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/utils.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/activation.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/analytics.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/parking_management.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/region_counter.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/security_alarm.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/solutions.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/streamlit_inference.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/trackzone.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/plotting.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.80
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -63,7 +63,7 @@ Provides-Extra: export
|
|
63
63
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
64
64
|
Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
65
65
|
Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
66
|
-
Requires-Dist: openvino
|
66
|
+
Requires-Dist: openvino<2025.0.0,>=2024.0.0; extra == "export"
|
67
67
|
Requires-Dist: tensorflow>=2.0.0; extra == "export"
|
68
68
|
Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
|
69
69
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
@@ -97,7 +97,7 @@ export = [
|
|
97
97
|
"onnx>=1.12.0", # ONNX export
|
98
98
|
"coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux
|
99
99
|
"scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.11'", # CoreML k-means quantization
|
100
|
-
"openvino>=2024.0.0", # OpenVINO export
|
100
|
+
"openvino>=2024.0.0,<2025.0.0", # OpenVINO export
|
101
101
|
"tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
|
102
102
|
"tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
|
103
103
|
"tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports
|
@@ -58,15 +58,13 @@ def auto_annotate(
|
|
58
58
|
|
59
59
|
for result in det_results:
|
60
60
|
class_ids = result.boxes.cls.int().tolist() # noqa
|
61
|
-
if
|
61
|
+
if class_ids:
|
62
62
|
boxes = result.boxes.xyxy # Boxes object for bbox outputs
|
63
63
|
sam_results = sam_model(result.orig_img, bboxes=boxes, verbose=False, save=False, device=device)
|
64
64
|
segments = sam_results[0].masks.xyn # noqa
|
65
65
|
|
66
66
|
with open(f"{Path(output_dir) / Path(result.path).stem}.txt", "w") as f:
|
67
|
-
for i in
|
68
|
-
s
|
69
|
-
|
70
|
-
|
71
|
-
segment = map(str, segments[i].reshape(-1).tolist())
|
72
|
-
f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")
|
67
|
+
for i, s in enumerate(segments):
|
68
|
+
if s.any():
|
69
|
+
segment = map(str, s.reshape(-1).tolist())
|
70
|
+
f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")
|
@@ -1364,17 +1364,26 @@ class RandomHSV:
|
|
1364
1364
|
>>> hsv_augmenter(labels)
|
1365
1365
|
>>> augmented_img = labels["img"]
|
1366
1366
|
"""
|
1367
|
-
img = labels["img"]
|
1368
1367
|
if self.hgain or self.sgain or self.vgain:
|
1369
|
-
|
1370
|
-
hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
|
1368
|
+
img = labels["img"]
|
1371
1369
|
dtype = img.dtype # uint8
|
1372
1370
|
|
1371
|
+
# Original implementation (bug) from ultralytics<=8.3.78
|
1372
|
+
# r = np.random.uniform(-1, 1, 3) * [self.hgain, self.sgain, self.vgain] + 1 # random gains
|
1373
|
+
# x = np.arange(0, 256, dtype=r.dtype)
|
1374
|
+
# lut_hue = ((x * r[0]) % 180).astype(dtype)
|
1375
|
+
# lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
|
1376
|
+
# lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
|
1377
|
+
|
1378
|
+
# Fixed implementation in https://github.com/ultralytics/ultralytics/pull/19311
|
1379
|
+
r = np.random.uniform(-1, 1, 3) * (self.hgain, self.sgain, self.vgain) * (180, 255, 255) # random gains
|
1373
1380
|
x = np.arange(0, 256, dtype=r.dtype)
|
1374
|
-
lut_hue = ((x
|
1375
|
-
lut_sat = np.clip(x
|
1376
|
-
lut_val = np.clip(x
|
1381
|
+
lut_hue = ((x + r[0]) % 180).astype(dtype)
|
1382
|
+
lut_sat = np.clip(x + r[1], 0, 255).astype(dtype)
|
1383
|
+
lut_val = np.clip(x + r[2], 0, 255).astype(dtype)
|
1384
|
+
lut_sat[0] = 0 # prevent pure white changing color
|
1377
1385
|
|
1386
|
+
hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
|
1378
1387
|
im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val)))
|
1379
1388
|
cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed
|
1380
1389
|
return labels
|
@@ -1484,7 +1493,7 @@ class LetterBox:
|
|
1484
1493
|
Attributes:
|
1485
1494
|
new_shape (tuple): Target shape (height, width) for resizing.
|
1486
1495
|
auto (bool): Whether to use minimum rectangle.
|
1487
|
-
|
1496
|
+
scale_fill (bool): Whether to stretch the image to new_shape.
|
1488
1497
|
scaleup (bool): Whether to allow scaling up. If False, only scale down.
|
1489
1498
|
stride (int): Stride for rounding padding.
|
1490
1499
|
center (bool): Whether to center the image or align to top-left.
|
@@ -1499,7 +1508,7 @@ class LetterBox:
|
|
1499
1508
|
>>> updated_instances = result["instances"]
|
1500
1509
|
"""
|
1501
1510
|
|
1502
|
-
def __init__(self, new_shape=(640, 640), auto=False,
|
1511
|
+
def __init__(self, new_shape=(640, 640), auto=False, scale_fill=False, scaleup=True, center=True, stride=32):
|
1503
1512
|
"""
|
1504
1513
|
Initialize LetterBox object for resizing and padding images.
|
1505
1514
|
|
@@ -1509,7 +1518,7 @@ class LetterBox:
|
|
1509
1518
|
Args:
|
1510
1519
|
new_shape (Tuple[int, int]): Target size (height, width) for the resized image.
|
1511
1520
|
auto (bool): If True, use minimum rectangle to resize. If False, use new_shape directly.
|
1512
|
-
|
1521
|
+
scale_fill (bool): If True, stretch the image to new_shape without padding.
|
1513
1522
|
scaleup (bool): If True, allow scaling up. If False, only scale down.
|
1514
1523
|
center (bool): If True, center the placed image. If False, place image in top-left corner.
|
1515
1524
|
stride (int): Stride of the model (e.g., 32 for YOLOv5).
|
@@ -1517,17 +1526,17 @@ class LetterBox:
|
|
1517
1526
|
Attributes:
|
1518
1527
|
new_shape (Tuple[int, int]): Target size for the resized image.
|
1519
1528
|
auto (bool): Flag for using minimum rectangle resizing.
|
1520
|
-
|
1529
|
+
scale_fill (bool): Flag for stretching image without padding.
|
1521
1530
|
scaleup (bool): Flag for allowing upscaling.
|
1522
1531
|
stride (int): Stride value for ensuring image size is divisible by stride.
|
1523
1532
|
|
1524
1533
|
Examples:
|
1525
|
-
>>> letterbox = LetterBox(new_shape=(640, 640), auto=False,
|
1534
|
+
>>> letterbox = LetterBox(new_shape=(640, 640), auto=False, scale_fill=False, scaleup=True, stride=32)
|
1526
1535
|
>>> resized_img = letterbox(original_img)
|
1527
1536
|
"""
|
1528
1537
|
self.new_shape = new_shape
|
1529
1538
|
self.auto = auto
|
1530
|
-
self.
|
1539
|
+
self.scale_fill = scale_fill
|
1531
1540
|
self.scaleup = scaleup
|
1532
1541
|
self.stride = stride
|
1533
1542
|
self.center = center # Put the image in the middle or top-left
|
@@ -1573,7 +1582,7 @@ class LetterBox:
|
|
1573
1582
|
dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding
|
1574
1583
|
if self.auto: # minimum rectangle
|
1575
1584
|
dw, dh = np.mod(dw, self.stride), np.mod(dh, self.stride) # wh padding
|
1576
|
-
elif self.
|
1585
|
+
elif self.scale_fill: # stretch
|
1577
1586
|
dw, dh = 0.0, 0.0
|
1578
1587
|
new_unpad = (new_shape[1], new_shape[0])
|
1579
1588
|
ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios
|
@@ -274,13 +274,13 @@ def convert_coco(
|
|
274
274
|
# Create image dict
|
275
275
|
images = {f"{x['id']:d}": x for x in data["images"]}
|
276
276
|
# Create image-annotations dict
|
277
|
-
|
277
|
+
annotations = defaultdict(list)
|
278
278
|
for ann in data["annotations"]:
|
279
|
-
|
279
|
+
annotations[ann["image_id"]].append(ann)
|
280
280
|
|
281
281
|
image_txt = []
|
282
282
|
# Write labels file
|
283
|
-
for img_id, anns in TQDM(
|
283
|
+
for img_id, anns in TQDM(annotations.items(), desc=f"Annotations {json_file}"):
|
284
284
|
img = images[f"{img_id:d}"]
|
285
285
|
h, w = img["height"], img["width"]
|
286
286
|
f = str(Path(img["coco_url"]).relative_to("http://images.cocodataset.org")) if lvis else img["file_name"]
|
@@ -170,6 +170,7 @@ def try_export(inner_func):
|
|
170
170
|
def outer_func(*args, **kwargs):
|
171
171
|
"""Export a model."""
|
172
172
|
prefix = inner_args["prefix"]
|
173
|
+
dt = 0.0
|
173
174
|
try:
|
174
175
|
with Profile() as dt:
|
175
176
|
f, model = inner_func(*args, **kwargs)
|
@@ -569,7 +570,7 @@ class Exporter:
|
|
569
570
|
@try_export
|
570
571
|
def export_openvino(self, prefix=colorstr("OpenVINO:")):
|
571
572
|
"""YOLO OpenVINO export."""
|
572
|
-
check_requirements("openvino>=2024.
|
573
|
+
check_requirements("openvino>=2024.0.0,<2025.0.0")
|
573
574
|
import openvino as ov
|
574
575
|
|
575
576
|
LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")
|
@@ -591,7 +592,7 @@ class Exporter:
|
|
591
592
|
if self.model.task != "classify":
|
592
593
|
ov_model.set_rt_info("fit_to_window_letterbox", ["model_info", "resize_type"])
|
593
594
|
|
594
|
-
ov.
|
595
|
+
ov.save_model(ov_model, file, compress_to_fp16=self.args.half)
|
595
596
|
yaml_save(Path(file).parent / "metadata.yaml", self.metadata) # add metadata.yaml
|
596
597
|
|
597
598
|
if self.args.int8:
|
@@ -567,6 +567,10 @@ class BaseTrainer:
|
|
567
567
|
except Exception as e:
|
568
568
|
raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e
|
569
569
|
self.data = data
|
570
|
+
if self.args.single_cls:
|
571
|
+
LOGGER.info("Overriding class names with single class.")
|
572
|
+
self.data["names"] = {0: "item"}
|
573
|
+
self.data["nc"] = 1
|
570
574
|
return data["train"], data.get("val") or data.get("test")
|
571
575
|
|
572
576
|
def setup_model(self):
|
@@ -16,6 +16,7 @@ from pathlib import Path
|
|
16
16
|
import torch
|
17
17
|
|
18
18
|
from ultralytics.engine.model import Model
|
19
|
+
from ultralytics.utils import DEFAULT_CFG_DICT
|
19
20
|
from ultralytics.utils.downloads import attempt_download_asset
|
20
21
|
from ultralytics.utils.torch_utils import model_info
|
21
22
|
|
@@ -77,6 +78,7 @@ class NAS(Model):
|
|
77
78
|
self.model.yaml = {} # for info()
|
78
79
|
self.model.pt_path = weights # for export()
|
79
80
|
self.model.task = "detect" # for export()
|
81
|
+
self.model.args = {**DEFAULT_CFG_DICT, **self.overrides} # for export()
|
80
82
|
|
81
83
|
def info(self, detailed=False, verbose=True):
|
82
84
|
"""
|
@@ -72,7 +72,7 @@ class RTDETRPredictor(BasePredictor):
|
|
72
72
|
def pre_transform(self, im):
|
73
73
|
"""
|
74
74
|
Pre-transforms the input images before feeding them into the model for inference. The input images are
|
75
|
-
letterboxed to ensure a square aspect ratio and scale-filled. The size must be square(640) and
|
75
|
+
letterboxed to ensure a square aspect ratio and scale-filled. The size must be square(640) and scale_filled.
|
76
76
|
|
77
77
|
Args:
|
78
78
|
im (list[np.ndarray] |torch.Tensor): Input images of shape (N,3,h,w) for tensor, [(h,w,3) x N] for list.
|
@@ -80,5 +80,5 @@ class RTDETRPredictor(BasePredictor):
|
|
80
80
|
Returns:
|
81
81
|
(list): List of pre-transformed images ready for model inference.
|
82
82
|
"""
|
83
|
-
letterbox = LetterBox(self.imgsz, auto=False,
|
83
|
+
letterbox = LetterBox(self.imgsz, auto=False, scale_fill=True)
|
84
84
|
return [letterbox(image=x) for x in im]
|
@@ -34,7 +34,7 @@ class RTDETRDataset(YOLODataset):
|
|
34
34
|
hyp.mixup = hyp.mixup if self.augment and not self.rect else 0.0
|
35
35
|
transforms = v8_transforms(self, self.imgsz, hyp, stretch=True)
|
36
36
|
else:
|
37
|
-
# transforms = Compose([LetterBox(new_shape=(self.imgsz, self.imgsz), auto=False,
|
37
|
+
# transforms = Compose([LetterBox(new_shape=(self.imgsz, self.imgsz), auto=False, scale_fill=True)])
|
38
38
|
transforms = Compose([])
|
39
39
|
transforms.append(
|
40
40
|
Format(
|
@@ -186,7 +186,7 @@ class DetectionValidator(BaseValidator):
|
|
186
186
|
self.nt_per_class = np.bincount(stats["target_cls"].astype(int), minlength=self.nc)
|
187
187
|
self.nt_per_image = np.bincount(stats["target_img"].astype(int), minlength=self.nc)
|
188
188
|
stats.pop("target_img", None)
|
189
|
-
if len(stats)
|
189
|
+
if len(stats):
|
190
190
|
self.metrics.process(**stats)
|
191
191
|
return self.metrics.results_dict
|
192
192
|
|
@@ -244,7 +244,7 @@ class AutoBackend(nn.Module):
|
|
244
244
|
# OpenVINO
|
245
245
|
elif xml:
|
246
246
|
LOGGER.info(f"Loading {w} for OpenVINO inference...")
|
247
|
-
check_requirements("openvino>=2024.0.0")
|
247
|
+
check_requirements("openvino>=2024.0.0,<2025.0.0")
|
248
248
|
import openvino as ov
|
249
249
|
|
250
250
|
core = ov.Core()
|
@@ -600,7 +600,7 @@ class AutoBackend(nn.Module):
|
|
600
600
|
results[userdata] = request.results
|
601
601
|
|
602
602
|
# Create AsyncInferQueue, set the callback and start asynchronous inference for each input image
|
603
|
-
async_queue = self.ov.
|
603
|
+
async_queue = self.ov.AsyncInferQueue(self.ov_compiled_model)
|
604
604
|
async_queue.set_callback(callback)
|
605
605
|
for i in range(n):
|
606
606
|
# Start async inference with userdata=i to specify the position in results list
|
@@ -1227,8 +1227,8 @@ class AAttn(nn.Module):
|
|
1227
1227
|
v = v.reshape(B // self.area, N * self.area, C)
|
1228
1228
|
B, N, _ = x.shape
|
1229
1229
|
|
1230
|
-
x = x.reshape(B, H, W, C).permute(0, 3, 1, 2)
|
1231
|
-
v = v.reshape(B, H, W, C).permute(0, 3, 1, 2)
|
1230
|
+
x = x.reshape(B, H, W, C).permute(0, 3, 1, 2).contiguous()
|
1231
|
+
v = v.reshape(B, H, W, C).permute(0, 3, 1, 2).contiguous()
|
1232
1232
|
|
1233
1233
|
x = x + self.pe(v)
|
1234
1234
|
return self.proj(x)
|
@@ -177,7 +177,7 @@ def _format_ground_truth_annotations_for_detection(img_idx, image_path, batch, c
|
|
177
177
|
return {"name": "ground_truth", "data": data}
|
178
178
|
|
179
179
|
|
180
|
-
def _format_prediction_annotations_for_detection(image_path, metadata, class_label_map=None):
|
180
|
+
def _format_prediction_annotations_for_detection(image_path, metadata, class_label_map=None, class_map=None):
|
181
181
|
"""Format YOLO predictions for object detection visualization."""
|
182
182
|
stem = image_path.stem
|
183
183
|
image_id = int(stem) if stem.isnumeric() else stem
|
@@ -187,26 +187,32 @@ def _format_prediction_annotations_for_detection(image_path, metadata, class_lab
|
|
187
187
|
LOGGER.debug(f"COMET WARNING: Image: {image_path} has no bounding boxes predictions")
|
188
188
|
return None
|
189
189
|
|
190
|
+
label_index_offset = 0
|
191
|
+
if class_map is not None:
|
192
|
+
# offset to align indices of class labels (starting from zero)
|
193
|
+
# with prediction's category ID indices (can start from one)
|
194
|
+
label_index_offset = sorted(class_map)[0]
|
195
|
+
|
190
196
|
data = []
|
191
197
|
for prediction in predictions:
|
192
198
|
boxes = prediction["bbox"]
|
193
199
|
score = _scale_confidence_score(prediction["score"])
|
194
200
|
cls_label = prediction["category_id"]
|
195
201
|
if class_label_map:
|
196
|
-
cls_label = str(class_label_map[cls_label])
|
202
|
+
cls_label = str(class_label_map[cls_label - label_index_offset])
|
197
203
|
|
198
204
|
data.append({"boxes": [boxes], "label": cls_label, "score": score})
|
199
205
|
|
200
206
|
return {"name": "prediction", "data": data}
|
201
207
|
|
202
208
|
|
203
|
-
def _fetch_annotations(img_idx, image_path, batch, prediction_metadata_map, class_label_map):
|
209
|
+
def _fetch_annotations(img_idx, image_path, batch, prediction_metadata_map, class_label_map, class_map):
|
204
210
|
"""Join the ground truth and prediction annotations if they exist."""
|
205
211
|
ground_truth_annotations = _format_ground_truth_annotations_for_detection(
|
206
212
|
img_idx, image_path, batch, class_label_map
|
207
213
|
)
|
208
214
|
prediction_annotations = _format_prediction_annotations_for_detection(
|
209
|
-
image_path, prediction_metadata_map, class_label_map
|
215
|
+
image_path, prediction_metadata_map, class_label_map, class_map
|
210
216
|
)
|
211
217
|
|
212
218
|
annotations = [
|
@@ -260,6 +266,7 @@ def _log_image_predictions(experiment, validator, curr_step):
|
|
260
266
|
predictions_metadata_map = _create_prediction_metadata_map(jdict)
|
261
267
|
dataloader = validator.dataloader
|
262
268
|
class_label_map = validator.names
|
269
|
+
class_map = getattr(validator, "class_map", None)
|
263
270
|
|
264
271
|
batch_logging_interval = _get_eval_batch_logging_interval()
|
265
272
|
max_image_predictions = _get_max_image_predictions_to_log()
|
@@ -280,6 +287,7 @@ def _log_image_predictions(experiment, validator, curr_step):
|
|
280
287
|
batch,
|
281
288
|
predictions_metadata_map,
|
282
289
|
class_label_map,
|
290
|
+
class_map=class_map,
|
283
291
|
)
|
284
292
|
_log_images(
|
285
293
|
experiment,
|
@@ -604,7 +604,7 @@ def ap_per_class(
|
|
604
604
|
if j == 0:
|
605
605
|
prec_values.append(np.interp(x, mrec, mpre)) # precision at mAP@0.5
|
606
606
|
|
607
|
-
prec_values = np.array(prec_values) # (nc, 1000)
|
607
|
+
prec_values = np.array(prec_values) if prec_values else np.zeros((1, 1000)) # (nc, 1000)
|
608
608
|
|
609
609
|
# Compute F1 (harmonic mean of precision and recall)
|
610
610
|
f1_curve = 2 * p_curve * r_curve / (p_curve + r_curve + eps)
|
@@ -799,10 +799,11 @@ def regularize_rboxes(rboxes):
|
|
799
799
|
(torch.Tensor): The regularized boxes.
|
800
800
|
"""
|
801
801
|
x, y, w, h, t = rboxes.unbind(dim=-1)
|
802
|
-
# Swap edge
|
803
|
-
|
804
|
-
|
805
|
-
|
802
|
+
# Swap edge if t >= pi/2 while not being symmetrically opposite
|
803
|
+
swap = t % math.pi >= math.pi / 2
|
804
|
+
w_ = torch.where(swap, h, w)
|
805
|
+
h_ = torch.where(swap, w, h)
|
806
|
+
t = t % (math.pi / 2)
|
806
807
|
return torch.stack([x, y, w_, h_, t], dim=-1) # regularized boxes
|
807
808
|
|
808
809
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.80
|
4
4
|
Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
|
5
5
|
Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
|
6
6
|
Maintainer-email: Ultralytics <hello@ultralytics.com>
|
@@ -63,7 +63,7 @@ Provides-Extra: export
|
|
63
63
|
Requires-Dist: onnx>=1.12.0; extra == "export"
|
64
64
|
Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
65
65
|
Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
|
66
|
-
Requires-Dist: openvino
|
66
|
+
Requires-Dist: openvino<2025.0.0,>=2024.0.0; extra == "export"
|
67
67
|
Requires-Dist: tensorflow>=2.0.0; extra == "export"
|
68
68
|
Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
|
69
69
|
Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
|
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
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
{ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml
RENAMED
File without changes
|
{ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml
RENAMED
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|