ultralytics 8.1.45__tar.gz → 8.1.47__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.1.45/ultralytics.egg-info → ultralytics-8.1.47}/PKG-INFO +2 -1
- {ultralytics-8.1.45 → ultralytics-8.1.47}/pyproject.toml +2 -1
- {ultralytics-8.1.45 → ultralytics-8.1.47}/tests/test_cuda.py +7 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/__init__.py +1 -1
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/augment.py +7 -2
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/exporter.py +23 -16
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/autobackend.py +53 -21
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/__init__.py +30 -6
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/plotting.py +6 -6
- {ultralytics-8.1.45 → ultralytics-8.1.47/ultralytics.egg-info}/PKG-INFO +2 -1
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics.egg-info/requires.txt +1 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/LICENSE +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/README.md +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/setup.cfg +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/tests/test_cli.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/tests/test_engine.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/tests/test_explorer.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/tests/test_integrations.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/tests/test_python.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/assets/bus.jpg +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/assets/zidane.jpg +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/VOC.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco128.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/coco8.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/dota8.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/lvis.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/datasets/xView.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/default.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/trackers/botsort.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/annotator.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/base.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/build.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/converter.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/dataset.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/explorer/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/explorer/explorer.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/explorer/gui/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/explorer/gui/dash.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/explorer/utils.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/loaders.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/split_dota.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/data/utils.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/model.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/predictor.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/results.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/trainer.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/tuner.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/engine/validator.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/hub/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/hub/auth.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/hub/session.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/hub/utils.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/fastsam/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/fastsam/model.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/fastsam/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/fastsam/prompt.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/fastsam/utils.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/fastsam/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/nas/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/nas/model.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/nas/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/nas/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/rtdetr/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/rtdetr/model.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/rtdetr/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/rtdetr/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/rtdetr/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/amg.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/build.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/model.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/modules/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/modules/decoders.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/modules/encoders.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/modules/sam.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/modules/transformer.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/sam/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/utils/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/utils/loss.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/utils/ops.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/classify/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/classify/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/classify/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/classify/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/detect/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/detect/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/detect/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/detect/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/model.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/obb/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/obb/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/obb/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/obb/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/pose/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/pose/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/pose/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/pose/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/segment/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/segment/predict.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/segment/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/segment/val.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/world/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/world/train.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/models/yolo/world/train_world.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/modules/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/modules/block.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/modules/conv.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/modules/head.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/modules/transformer.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/modules/utils.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/nn/tasks.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/ai_gym.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/distance_calculation.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/heatmap.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/object_counter.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/queue_management.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/solutions/speed_estimation.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/basetrack.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/bot_sort.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/byte_tracker.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/track.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/utils/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/utils/gmc.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/utils/kalman_filter.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/trackers/utils/matching.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/autobatch.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/benchmarks.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/__init__.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/base.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/clearml.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/comet.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/dvc.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/hub.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/mlflow.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/neptune.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/raytune.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/tensorboard.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/callbacks/wb.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/checks.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/dist.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/downloads.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/errors.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/files.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/instance.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/loss.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/metrics.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/ops.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/patches.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/tal.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/torch_utils.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/triton.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/utils/tuner.py +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics.egg-info/SOURCES.txt +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics.egg-info/dependency_links.txt +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics.egg-info/entry_points.txt +0 -0
- {ultralytics-8.1.45 → ultralytics-8.1.47}/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.1.
|
|
3
|
+
Version: 8.1.47
|
|
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
|
|
@@ -63,6 +63,7 @@ Requires-Dist: openvino>=2024.0.0; extra == "export"
|
|
|
63
63
|
Requires-Dist: tensorflow<=2.13.1; python_version <= "3.11" and extra == "export"
|
|
64
64
|
Requires-Dist: tensorflowjs>=3.9.0; python_version <= "3.11" and extra == "export"
|
|
65
65
|
Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
|
|
66
|
+
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
|
66
67
|
Provides-Extra: explorer
|
|
67
68
|
Requires-Dist: lancedb; extra == "explorer"
|
|
68
69
|
Requires-Dist: duckdb<=0.9.2; extra == "explorer"
|
|
@@ -101,7 +101,8 @@ export = [
|
|
|
101
101
|
"openvino>=2024.0.0", # OpenVINO export
|
|
102
102
|
"tensorflow<=2.13.1; python_version <= '3.11'", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
|
|
103
103
|
"tensorflowjs>=3.9.0; python_version <= '3.11'", # TF.js export, automatically installs tensorflow
|
|
104
|
-
"numpy==1.23.5; platform_machine == 'aarch64'", #
|
|
104
|
+
"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
|
|
105
|
+
"h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
|
|
105
106
|
]
|
|
106
107
|
explorer = [
|
|
107
108
|
"lancedb", # vector search
|
|
@@ -19,6 +19,13 @@ def test_checks():
|
|
|
19
19
|
assert torch.cuda.is_available() == CUDA_IS_AVAILABLE
|
|
20
20
|
assert torch.cuda.device_count() == CUDA_DEVICE_COUNT
|
|
21
21
|
|
|
22
|
+
@pytest.mark.slow
|
|
23
|
+
@pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason="CUDA is not available")
|
|
24
|
+
def test_export_engine():
|
|
25
|
+
"""Test exporting the YOLO model to NVIDIA TensorRT format."""
|
|
26
|
+
f = YOLO(MODEL).export(format="engine", device=0)
|
|
27
|
+
YOLO(f)(BUS, device=0)
|
|
28
|
+
|
|
22
29
|
|
|
23
30
|
@pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason="CUDA is not available")
|
|
24
31
|
def test_train():
|
|
@@ -975,17 +975,22 @@ class Format:
|
|
|
975
975
|
1 if self.mask_overlap else nl, img.shape[0] // self.mask_ratio, img.shape[1] // self.mask_ratio
|
|
976
976
|
)
|
|
977
977
|
labels["masks"] = masks
|
|
978
|
-
if self.normalize:
|
|
979
|
-
instances.normalize(w, h)
|
|
980
978
|
labels["img"] = self._format_img(img)
|
|
981
979
|
labels["cls"] = torch.from_numpy(cls) if nl else torch.zeros(nl)
|
|
982
980
|
labels["bboxes"] = torch.from_numpy(instances.bboxes) if nl else torch.zeros((nl, 4))
|
|
983
981
|
if self.return_keypoint:
|
|
984
982
|
labels["keypoints"] = torch.from_numpy(instances.keypoints)
|
|
983
|
+
if self.normalize:
|
|
984
|
+
labels["keypoints"][..., 0] /= w
|
|
985
|
+
labels["keypoints"][..., 1] /= h
|
|
985
986
|
if self.return_obb:
|
|
986
987
|
labels["bboxes"] = (
|
|
987
988
|
xyxyxyxy2xywhr(torch.from_numpy(instances.segments)) if len(instances.segments) else torch.zeros((0, 5))
|
|
988
989
|
)
|
|
990
|
+
# NOTE: need to normalize obb in xywhr format for width-height consistency
|
|
991
|
+
if self.normalize:
|
|
992
|
+
labels["bboxes"][:, [0, 2]] /= w
|
|
993
|
+
labels["bboxes"][:, [1, 3]] /= h
|
|
989
994
|
# Then we can use collate_fn
|
|
990
995
|
if self.batch_idx:
|
|
991
996
|
labels["batch_idx"] = torch.zeros(nl)
|
|
@@ -529,12 +529,12 @@ class Exporter:
|
|
|
529
529
|
f"or in {ROOT}. See PNNX repo for full installation instructions."
|
|
530
530
|
)
|
|
531
531
|
system = "macos" if MACOS else "windows" if WINDOWS else "linux-aarch64" if ARM64 else "linux"
|
|
532
|
-
|
|
533
|
-
|
|
532
|
+
try:
|
|
533
|
+
_, assets = get_github_assets(repo="pnnx/pnnx", retry=True)
|
|
534
534
|
url = [x for x in assets if f"{system}.zip" in x][0]
|
|
535
|
-
|
|
536
|
-
url = f"https://github.com/pnnx/pnnx/releases/download/
|
|
537
|
-
LOGGER.warning(f"{prefix} WARNING ⚠️ PNNX GitHub assets not found, using default {url}")
|
|
535
|
+
except Exception as e:
|
|
536
|
+
url = f"https://github.com/pnnx/pnnx/releases/download/20240410/pnnx-20240410-{system}.zip"
|
|
537
|
+
LOGGER.warning(f"{prefix} WARNING ⚠️ PNNX GitHub assets not found: {e}, using default {url}")
|
|
538
538
|
asset = attempt_download_asset(url, repo="pnnx/pnnx", release="latest")
|
|
539
539
|
if check_is_path_safe(Path.cwd(), asset): # avoid path traversal security vulnerability
|
|
540
540
|
unzip_dir = Path(asset).with_suffix("")
|
|
@@ -654,6 +654,7 @@ class Exporter:
|
|
|
654
654
|
def export_engine(self, prefix=colorstr("TensorRT:")):
|
|
655
655
|
"""YOLOv8 TensorRT export https://developer.nvidia.com/tensorrt."""
|
|
656
656
|
assert self.im.device.type != "cpu", "export running on CPU but must be on GPU, i.e. use 'device=0'"
|
|
657
|
+
self.args.simplify = True
|
|
657
658
|
f_onnx, _ = self.export_onnx() # run before trt import https://github.com/ultralytics/ultralytics/issues/7016
|
|
658
659
|
|
|
659
660
|
try:
|
|
@@ -662,12 +663,10 @@ class Exporter:
|
|
|
662
663
|
if LINUX:
|
|
663
664
|
check_requirements("nvidia-tensorrt", cmds="-U --index-url https://pypi.ngc.nvidia.com")
|
|
664
665
|
import tensorrt as trt # noqa
|
|
665
|
-
|
|
666
666
|
check_version(trt.__version__, "7.0.0", hard=True) # require tensorrt>=7.0.0
|
|
667
667
|
|
|
668
|
-
self.args.simplify = True
|
|
669
|
-
|
|
670
668
|
LOGGER.info(f"\n{prefix} starting export with TensorRT {trt.__version__}...")
|
|
669
|
+
is_trt10 = int(trt.__version__.split(".")[0]) >= 10 # is TensorRT >= 10
|
|
671
670
|
assert Path(f_onnx).exists(), f"failed to export ONNX file: {f_onnx}"
|
|
672
671
|
f = self.file.with_suffix(".engine") # TensorRT engine file
|
|
673
672
|
logger = trt.Logger(trt.Logger.INFO)
|
|
@@ -676,7 +675,11 @@ class Exporter:
|
|
|
676
675
|
|
|
677
676
|
builder = trt.Builder(logger)
|
|
678
677
|
config = builder.create_builder_config()
|
|
679
|
-
|
|
678
|
+
workspace = int(self.args.workspace * (1 << 30))
|
|
679
|
+
if is_trt10:
|
|
680
|
+
config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace)
|
|
681
|
+
else: # TensorRT versions 7, 8
|
|
682
|
+
config.max_workspace_size = workspace
|
|
680
683
|
flag = 1 << int(trt.NetworkDefinitionCreationFlag.EXPLICIT_BATCH)
|
|
681
684
|
network = builder.create_network(flag)
|
|
682
685
|
parser = trt.OnnxParser(network, logger)
|
|
@@ -695,27 +698,31 @@ class Exporter:
|
|
|
695
698
|
if shape[0] <= 1:
|
|
696
699
|
LOGGER.warning(f"{prefix} WARNING ⚠️ 'dynamic=True' model requires max batch size, i.e. 'batch=16'")
|
|
697
700
|
profile = builder.create_optimization_profile()
|
|
701
|
+
min_shape = (1, shape[1], 32, 32) # minimum input shape
|
|
702
|
+
opt_shape = (max(1, shape[0] // 2), *shape[1:]) # optimal input shape
|
|
703
|
+
max_shape = (*shape[:2], *(max(1, self.args.workspace) * d for d in shape[2:])) # max input shape
|
|
698
704
|
for inp in inputs:
|
|
699
|
-
profile.set_shape(inp.name,
|
|
705
|
+
profile.set_shape(inp.name, min_shape, opt_shape, max_shape)
|
|
700
706
|
config.add_optimization_profile(profile)
|
|
701
707
|
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
if builder.platform_has_fast_fp16 and self.args.half:
|
|
708
|
+
half = builder.platform_has_fast_fp16 and self.args.half
|
|
709
|
+
LOGGER.info(f"{prefix} building FP{16 if half else 32} engine as {f}")
|
|
710
|
+
if half:
|
|
706
711
|
config.set_flag(trt.BuilderFlag.FP16)
|
|
707
712
|
|
|
713
|
+
# Free CUDA memory
|
|
708
714
|
del self.model
|
|
709
715
|
torch.cuda.empty_cache()
|
|
710
716
|
|
|
711
717
|
# Write file
|
|
712
|
-
|
|
718
|
+
build = builder.build_serialized_network if is_trt10 else builder.build_engine
|
|
719
|
+
with build(network, config) as engine, open(f, "wb") as t:
|
|
713
720
|
# Metadata
|
|
714
721
|
meta = json.dumps(self.metadata)
|
|
715
722
|
t.write(len(meta).to_bytes(4, byteorder="little", signed=True))
|
|
716
723
|
t.write(meta.encode())
|
|
717
724
|
# Model
|
|
718
|
-
t.write(engine.serialize())
|
|
725
|
+
t.write(engine if is_trt10 else engine.serialize())
|
|
719
726
|
|
|
720
727
|
return f, None
|
|
721
728
|
|
|
@@ -234,23 +234,47 @@ class AutoBackend(nn.Module):
|
|
|
234
234
|
meta_len = int.from_bytes(f.read(4), byteorder="little") # read metadata length
|
|
235
235
|
metadata = json.loads(f.read(meta_len).decode("utf-8")) # read metadata
|
|
236
236
|
model = runtime.deserialize_cuda_engine(f.read()) # read engine
|
|
237
|
-
|
|
237
|
+
|
|
238
|
+
# Model context
|
|
239
|
+
try:
|
|
240
|
+
context = model.create_execution_context()
|
|
241
|
+
except Exception as e: # model is None
|
|
242
|
+
LOGGER.error(f"ERROR: TensorRT model exported with a different version than {trt.__version__}\n")
|
|
243
|
+
raise e
|
|
244
|
+
|
|
238
245
|
bindings = OrderedDict()
|
|
239
246
|
output_names = []
|
|
240
247
|
fp16 = False # default updated below
|
|
241
248
|
dynamic = False
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
if
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
249
|
+
is_trt10 = not hasattr(model, "num_bindings")
|
|
250
|
+
num = range(model.num_io_tensors) if is_trt10 else range(model.num_bindings)
|
|
251
|
+
for i in num:
|
|
252
|
+
if is_trt10:
|
|
253
|
+
name = model.get_tensor_name(i)
|
|
254
|
+
dtype = trt.nptype(model.get_tensor_dtype(name))
|
|
255
|
+
is_input = model.get_tensor_mode(name) == trt.TensorIOMode.INPUT
|
|
256
|
+
if is_input:
|
|
257
|
+
if -1 in tuple(model.get_tensor_shape(name)):
|
|
258
|
+
dynamic = True
|
|
259
|
+
context.set_input_shape(name, tuple(model.get_tensor_profile_shape(name, 0)[1]))
|
|
260
|
+
if dtype == np.float16:
|
|
261
|
+
fp16 = True
|
|
262
|
+
else:
|
|
263
|
+
output_names.append(name)
|
|
264
|
+
shape = tuple(context.get_tensor_shape(name))
|
|
265
|
+
else: # TensorRT < 10.0
|
|
266
|
+
name = model.get_binding_name(i)
|
|
267
|
+
dtype = trt.nptype(model.get_binding_dtype(i))
|
|
268
|
+
is_input = model.binding_is_input(i)
|
|
269
|
+
if model.binding_is_input(i):
|
|
270
|
+
if -1 in tuple(model.get_binding_shape(i)): # dynamic
|
|
271
|
+
dynamic = True
|
|
272
|
+
context.set_binding_shape(i, tuple(model.get_profile_shape(0, i)[1]))
|
|
273
|
+
if dtype == np.float16:
|
|
274
|
+
fp16 = True
|
|
275
|
+
else:
|
|
276
|
+
output_names.append(name)
|
|
277
|
+
shape = tuple(context.get_binding_shape(i))
|
|
254
278
|
im = torch.from_numpy(np.empty(shape, dtype=dtype)).to(device)
|
|
255
279
|
bindings[name] = Binding(name, dtype, shape, im, int(im.data_ptr()))
|
|
256
280
|
binding_addrs = OrderedDict((n, d.ptr) for n, d in bindings.items())
|
|
@@ -463,13 +487,20 @@ class AutoBackend(nn.Module):
|
|
|
463
487
|
|
|
464
488
|
# TensorRT
|
|
465
489
|
elif self.engine:
|
|
466
|
-
if self.dynamic
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
490
|
+
if self.dynamic or im.shape != self.bindings["images"].shape:
|
|
491
|
+
if self.is_trt10:
|
|
492
|
+
self.context.set_input_shape("images", im.shape)
|
|
493
|
+
self.bindings["images"] = self.bindings["images"]._replace(shape=im.shape)
|
|
494
|
+
for name in self.output_names:
|
|
495
|
+
self.bindings[name].data.resize_(tuple(self.context.get_tensor_shape(name)))
|
|
496
|
+
else:
|
|
497
|
+
i = self.model.get_binding_index("images")
|
|
498
|
+
self.context.set_binding_shape(i, im.shape)
|
|
499
|
+
self.bindings["images"] = self.bindings["images"]._replace(shape=im.shape)
|
|
500
|
+
for name in self.output_names:
|
|
501
|
+
i = self.model.get_binding_index(name)
|
|
502
|
+
self.bindings[name].data.resize_(tuple(self.context.get_binding_shape(i)))
|
|
503
|
+
|
|
473
504
|
s = self.bindings["images"].shape
|
|
474
505
|
assert im.shape == s, f"input size {im.shape} {'>' if self.dynamic else 'not equal to'} max model size {s}"
|
|
475
506
|
self.binding_addrs["images"] = int(im.data_ptr())
|
|
@@ -509,7 +540,8 @@ class AutoBackend(nn.Module):
|
|
|
509
540
|
mat_in = self.pyncnn.Mat(im[0].cpu().numpy())
|
|
510
541
|
with self.net.create_extractor() as ex:
|
|
511
542
|
ex.input(self.net.input_names()[0], mat_in)
|
|
512
|
-
|
|
543
|
+
# WARNING: 'output_names' sorted as a temporary fix for https://github.com/pnnx/pnnx/issues/130
|
|
544
|
+
y = [np.array(ex.extract(x)[1])[None] for x in sorted(self.net.output_names())]
|
|
513
545
|
|
|
514
546
|
# NVIDIA Triton Inference Server
|
|
515
547
|
elif self.triton:
|
|
@@ -406,6 +406,20 @@ DEFAULT_CFG_KEYS = DEFAULT_CFG_DICT.keys()
|
|
|
406
406
|
DEFAULT_CFG = IterableSimpleNamespace(**DEFAULT_CFG_DICT)
|
|
407
407
|
|
|
408
408
|
|
|
409
|
+
def read_device_model() -> str:
|
|
410
|
+
"""
|
|
411
|
+
Reads the device model information from the system and caches it for quick access. Used by is_jetson() and
|
|
412
|
+
is_raspberrypi().
|
|
413
|
+
|
|
414
|
+
Returns:
|
|
415
|
+
(str): Model file contents if read successfully or empty string otherwise.
|
|
416
|
+
"""
|
|
417
|
+
with contextlib.suppress(Exception):
|
|
418
|
+
with open("/proc/device-tree/model") as f:
|
|
419
|
+
return f.read()
|
|
420
|
+
return ""
|
|
421
|
+
|
|
422
|
+
|
|
409
423
|
def is_ubuntu() -> bool:
|
|
410
424
|
"""
|
|
411
425
|
Check if the OS is Ubuntu.
|
|
@@ -473,10 +487,18 @@ def is_raspberrypi() -> bool:
|
|
|
473
487
|
Returns:
|
|
474
488
|
(bool): True if running on a Raspberry Pi, False otherwise.
|
|
475
489
|
"""
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
490
|
+
return "Raspberry Pi" in PROC_DEVICE_MODEL
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
def is_jetson() -> bool:
|
|
494
|
+
"""
|
|
495
|
+
Determines if the Python environment is running on a Jetson Nano or Jetson Orin device by checking the device model
|
|
496
|
+
information.
|
|
497
|
+
|
|
498
|
+
Returns:
|
|
499
|
+
(bool): True if running on a Jetson Nano or Jetson Orin, False otherwise.
|
|
500
|
+
"""
|
|
501
|
+
return "NVIDIA" in PROC_DEVICE_MODEL # i.e. "NVIDIA Jetson Nano" or "NVIDIA Orin NX"
|
|
480
502
|
|
|
481
503
|
|
|
482
504
|
def is_online() -> bool:
|
|
@@ -658,9 +680,11 @@ def get_user_config_dir(sub_dir="Ultralytics"):
|
|
|
658
680
|
|
|
659
681
|
|
|
660
682
|
# Define constants (required below)
|
|
683
|
+
PROC_DEVICE_MODEL = read_device_model() # is_jetson() and is_raspberrypi() depend on this constant
|
|
661
684
|
ONLINE = is_online()
|
|
662
685
|
IS_COLAB = is_colab()
|
|
663
686
|
IS_DOCKER = is_docker()
|
|
687
|
+
IS_JETSON = is_jetson()
|
|
664
688
|
IS_JUPYTER = is_jupyter()
|
|
665
689
|
IS_KAGGLE = is_kaggle()
|
|
666
690
|
IS_PIP_PACKAGE = is_pip_package()
|
|
@@ -696,8 +720,8 @@ def colorstr(*input):
|
|
|
696
720
|
(str): The input string wrapped with ANSI escape codes for the specified color and style.
|
|
697
721
|
|
|
698
722
|
Examples:
|
|
699
|
-
>>> colorstr(
|
|
700
|
-
>>>
|
|
723
|
+
>>> colorstr("blue", "bold", "hello world")
|
|
724
|
+
>>> "\033[34m\033[1mhello world\033[0m"
|
|
701
725
|
"""
|
|
702
726
|
*args, string = input if len(input) > 1 else ("blue", "bold", input[0]) # color arguments, string
|
|
703
727
|
colors = {
|
|
@@ -838,16 +838,16 @@ def plot_images(
|
|
|
838
838
|
if len(bboxes):
|
|
839
839
|
boxes = bboxes[idx]
|
|
840
840
|
conf = confs[idx] if confs is not None else None # check for confidence presence (label vs pred)
|
|
841
|
-
is_obb = boxes.shape[-1] == 5 # xywhr
|
|
842
|
-
boxes = ops.xywhr2xyxyxyxy(boxes) if is_obb else ops.xywh2xyxy(boxes)
|
|
843
841
|
if len(boxes):
|
|
844
842
|
if boxes[:, :4].max() <= 1.1: # if normalized with tolerance 0.1
|
|
845
|
-
boxes[..., 0
|
|
846
|
-
boxes[..., 1
|
|
843
|
+
boxes[..., [0, 2]] *= w # scale to pixels
|
|
844
|
+
boxes[..., [1, 3]] *= h
|
|
847
845
|
elif scale < 1: # absolute coords need scale if image scales
|
|
848
846
|
boxes[..., :4] *= scale
|
|
849
|
-
boxes[..., 0
|
|
850
|
-
boxes[..., 1
|
|
847
|
+
boxes[..., 0] += x
|
|
848
|
+
boxes[..., 1] += y
|
|
849
|
+
is_obb = boxes.shape[-1] == 5 # xywhr
|
|
850
|
+
boxes = ops.xywhr2xyxyxyxy(boxes) if is_obb else ops.xywh2xyxy(boxes)
|
|
851
851
|
for j, box in enumerate(boxes.astype(np.int64).tolist()):
|
|
852
852
|
c = classes[j]
|
|
853
853
|
color = colors(c)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.1.
|
|
3
|
+
Version: 8.1.47
|
|
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
|
|
@@ -63,6 +63,7 @@ Requires-Dist: openvino>=2024.0.0; extra == "export"
|
|
|
63
63
|
Requires-Dist: tensorflow<=2.13.1; python_version <= "3.11" and extra == "export"
|
|
64
64
|
Requires-Dist: tensorflowjs>=3.9.0; python_version <= "3.11" and extra == "export"
|
|
65
65
|
Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
|
|
66
|
+
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
|
66
67
|
Provides-Extra: explorer
|
|
67
68
|
Requires-Dist: lancedb; extra == "explorer"
|
|
68
69
|
Requires-Dist: duckdb<=0.9.2; extra == "explorer"
|
|
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.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml
RENAMED
|
File without changes
|
{ultralytics-8.1.45 → ultralytics-8.1.47}/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
|
{ultralytics-8.1.45 → ultralytics-8.1.47}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml
RENAMED
|
File without changes
|
{ultralytics-8.1.45 → ultralytics-8.1.47}/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
|
|
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
|