ultralytics-opencv-headless 8.4.9__tar.gz → 8.4.11__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.
Files changed (317) hide show
  1. {ultralytics_opencv_headless-8.4.9/ultralytics_opencv_headless.egg-info → ultralytics_opencv_headless-8.4.11}/PKG-INFO +1 -1
  2. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_cuda.py +2 -1
  3. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_exports.py +4 -1
  4. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_python.py +1 -2
  5. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/__init__.py +1 -1
  6. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/exporter.py +9 -4
  7. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/session.py +3 -5
  8. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/predict.py +3 -2
  9. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/model.py +1 -0
  10. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/autobackend.py +1 -1
  11. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/__init__.py +1 -1
  12. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/platform.py +50 -38
  13. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/checks.py +11 -0
  14. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/instance.py +14 -1
  15. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/loss.py +0 -4
  16. ultralytics_opencv_headless-8.4.11/ultralytics/utils/uploads.py +115 -0
  17. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11/ultralytics_opencv_headless.egg-info}/PKG-INFO +1 -1
  18. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/SOURCES.txt +1 -0
  19. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/LICENSE +0 -0
  20. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/README.md +0 -0
  21. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/pyproject.toml +0 -0
  22. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/setup.cfg +0 -0
  23. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/__init__.py +0 -0
  24. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/conftest.py +0 -0
  25. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_cli.py +0 -0
  26. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_engine.py +0 -0
  27. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_integrations.py +0 -0
  28. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/tests/test_solutions.py +0 -0
  29. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/assets/bus.jpg +0 -0
  30. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/assets/zidane.jpg +0 -0
  31. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/__init__.py +0 -0
  32. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  33. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  34. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  35. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  36. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  37. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  38. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  39. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  40. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/TT100K.yaml +0 -0
  41. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  42. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  43. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  44. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  45. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  46. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  47. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco.yaml +0 -0
  48. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco12-formats.yaml +0 -0
  49. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  50. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  51. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  52. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  53. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  54. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  55. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  56. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  57. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  58. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  59. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  60. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  61. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  62. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/kitti.yaml +0 -0
  63. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  64. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  65. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  66. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  67. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/signature.yaml +0 -0
  68. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  69. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/datasets/xView.yaml +0 -0
  70. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/default.yaml +0 -0
  71. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  72. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  73. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  74. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  75. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  76. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  77. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  78. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  79. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  80. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  81. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  82. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  83. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  84. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-cls.yaml +0 -0
  85. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-obb.yaml +0 -0
  86. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-p2.yaml +0 -0
  87. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-p6.yaml +0 -0
  88. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-pose.yaml +0 -0
  89. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26-seg.yaml +0 -0
  90. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yolo26.yaml +0 -0
  91. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yoloe-26-seg.yaml +0 -0
  92. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/26/yoloe-26.yaml +0 -0
  93. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  94. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  95. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  96. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  97. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  98. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  99. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  100. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  101. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  102. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  103. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  104. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  105. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  106. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  107. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  108. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  109. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  110. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  111. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  112. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  113. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  114. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  115. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  116. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  117. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  118. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  119. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  120. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  121. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  122. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  123. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  124. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  125. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  126. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  127. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  128. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  129. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  130. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  131. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  132. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  133. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  134. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  135. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  136. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  137. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/__init__.py +0 -0
  138. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/annotator.py +0 -0
  139. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/augment.py +0 -0
  140. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/base.py +0 -0
  141. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/build.py +0 -0
  142. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/converter.py +0 -0
  143. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/dataset.py +0 -0
  144. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/loaders.py +0 -0
  145. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/download_weights.sh +0 -0
  146. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/get_coco.sh +0 -0
  147. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/get_coco128.sh +0 -0
  148. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  149. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/split.py +0 -0
  150. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/split_dota.py +0 -0
  151. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/data/utils.py +0 -0
  152. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/__init__.py +0 -0
  153. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/model.py +0 -0
  154. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/predictor.py +0 -0
  155. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/results.py +0 -0
  156. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/trainer.py +0 -0
  157. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/tuner.py +0 -0
  158. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/engine/validator.py +0 -0
  159. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/__init__.py +0 -0
  160. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/auth.py +0 -0
  161. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/google/__init__.py +0 -0
  162. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/hub/utils.py +0 -0
  163. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/__init__.py +0 -0
  164. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/__init__.py +0 -0
  165. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/model.py +0 -0
  166. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/predict.py +0 -0
  167. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/utils.py +0 -0
  168. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/fastsam/val.py +0 -0
  169. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/__init__.py +0 -0
  170. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/model.py +0 -0
  171. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/predict.py +0 -0
  172. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/nas/val.py +0 -0
  173. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/__init__.py +0 -0
  174. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/model.py +0 -0
  175. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/predict.py +0 -0
  176. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/train.py +0 -0
  177. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/rtdetr/val.py +0 -0
  178. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/__init__.py +0 -0
  179. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/amg.py +0 -0
  180. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/build.py +0 -0
  181. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/build_sam3.py +0 -0
  182. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/model.py +0 -0
  183. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/__init__.py +0 -0
  184. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/blocks.py +0 -0
  185. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/decoders.py +0 -0
  186. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/encoders.py +0 -0
  187. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  188. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/sam.py +0 -0
  189. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  190. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/transformer.py +0 -0
  191. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/modules/utils.py +0 -0
  192. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/__init__.py +0 -0
  193. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/decoder.py +0 -0
  194. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/encoder.py +0 -0
  195. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/geometry_encoders.py +0 -0
  196. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/maskformer_segmentation.py +0 -0
  197. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/model_misc.py +0 -0
  198. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/necks.py +0 -0
  199. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/sam3_image.py +0 -0
  200. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/text_encoder_ve.py +0 -0
  201. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/vitdet.py +0 -0
  202. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/sam/sam3/vl_combiner.py +0 -0
  203. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/utils/__init__.py +0 -0
  204. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/utils/loss.py +0 -0
  205. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/utils/ops.py +0 -0
  206. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/__init__.py +0 -0
  207. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/__init__.py +0 -0
  208. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/predict.py +0 -0
  209. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/train.py +0 -0
  210. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/classify/val.py +0 -0
  211. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/__init__.py +0 -0
  212. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/predict.py +0 -0
  213. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/train.py +0 -0
  214. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/detect/val.py +0 -0
  215. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/__init__.py +0 -0
  216. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/predict.py +0 -0
  217. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/train.py +0 -0
  218. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/obb/val.py +0 -0
  219. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/__init__.py +0 -0
  220. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/predict.py +0 -0
  221. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/train.py +0 -0
  222. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/pose/val.py +0 -0
  223. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/__init__.py +0 -0
  224. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/predict.py +0 -0
  225. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/train.py +0 -0
  226. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/segment/val.py +0 -0
  227. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/world/__init__.py +0 -0
  228. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/world/train.py +0 -0
  229. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/world/train_world.py +0 -0
  230. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  231. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  232. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/train.py +0 -0
  233. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  234. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/models/yolo/yoloe/val.py +0 -0
  235. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/__init__.py +0 -0
  236. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/__init__.py +0 -0
  237. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/activation.py +0 -0
  238. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/block.py +0 -0
  239. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/conv.py +0 -0
  240. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/head.py +0 -0
  241. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/transformer.py +0 -0
  242. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/modules/utils.py +0 -0
  243. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/tasks.py +0 -0
  244. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/nn/text_model.py +0 -0
  245. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/optim/__init__.py +0 -0
  246. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/optim/muon.py +0 -0
  247. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/py.typed +0 -0
  248. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/__init__.py +0 -0
  249. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/ai_gym.py +0 -0
  250. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/analytics.py +0 -0
  251. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/config.py +0 -0
  252. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/distance_calculation.py +0 -0
  253. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/heatmap.py +0 -0
  254. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/instance_segmentation.py +0 -0
  255. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/object_blurrer.py +0 -0
  256. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/object_counter.py +0 -0
  257. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/object_cropper.py +0 -0
  258. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/parking_management.py +0 -0
  259. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/queue_management.py +0 -0
  260. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/region_counter.py +0 -0
  261. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/security_alarm.py +0 -0
  262. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/similarity_search.py +0 -0
  263. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/solutions.py +0 -0
  264. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/speed_estimation.py +0 -0
  265. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/streamlit_inference.py +0 -0
  266. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/templates/similarity-search.html +0 -0
  267. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/trackzone.py +0 -0
  268. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/solutions/vision_eye.py +0 -0
  269. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/__init__.py +0 -0
  270. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/basetrack.py +0 -0
  271. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/bot_sort.py +0 -0
  272. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/byte_tracker.py +0 -0
  273. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/track.py +0 -0
  274. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/__init__.py +0 -0
  275. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/gmc.py +0 -0
  276. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  277. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/trackers/utils/matching.py +0 -0
  278. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/autobatch.py +0 -0
  279. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/autodevice.py +0 -0
  280. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/benchmarks.py +0 -0
  281. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/__init__.py +0 -0
  282. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/base.py +0 -0
  283. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/clearml.py +0 -0
  284. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/comet.py +0 -0
  285. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/dvc.py +0 -0
  286. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/hub.py +0 -0
  287. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/mlflow.py +0 -0
  288. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/neptune.py +0 -0
  289. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/raytune.py +0 -0
  290. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  291. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/callbacks/wb.py +0 -0
  292. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/cpu.py +0 -0
  293. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/dist.py +0 -0
  294. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/downloads.py +0 -0
  295. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/errors.py +0 -0
  296. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/events.py +0 -0
  297. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/__init__.py +0 -0
  298. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/engine.py +0 -0
  299. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/imx.py +0 -0
  300. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/export/tensorflow.py +0 -0
  301. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/files.py +0 -0
  302. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/git.py +0 -0
  303. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/logger.py +0 -0
  304. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/metrics.py +0 -0
  305. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/nms.py +0 -0
  306. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/ops.py +0 -0
  307. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/patches.py +0 -0
  308. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/plotting.py +0 -0
  309. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/tal.py +0 -0
  310. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/torch_utils.py +0 -0
  311. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/tqdm.py +0 -0
  312. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/triton.py +0 -0
  313. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics/utils/tuner.py +0 -0
  314. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/dependency_links.txt +0 -0
  315. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/entry_points.txt +0 -0
  316. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/requires.txt +0 -0
  317. {ultralytics_opencv_headless-8.4.9 → ultralytics_opencv_headless-8.4.11}/ultralytics_opencv_headless.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics-opencv-headless
3
- Version: 8.4.9
3
+ Version: 8.4.11
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>
@@ -12,7 +12,7 @@ from ultralytics import YOLO
12
12
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
13
13
  from ultralytics.utils import ASSETS, IS_JETSON, WEIGHTS_DIR
14
14
  from ultralytics.utils.autodevice import GPUInfo
15
- from ultralytics.utils.checks import check_amp
15
+ from ultralytics.utils.checks import check_amp, check_tensorrt
16
16
  from ultralytics.utils.torch_utils import TORCH_1_13
17
17
 
18
18
  # Try to find idle devices if CUDA is available
@@ -91,6 +91,7 @@ def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
91
91
  )
92
92
  def test_export_engine_matrix(task, dynamic, int8, half, batch):
93
93
  """Test YOLO model export to TensorRT format for various configurations and run inference."""
94
+ check_tensorrt()
94
95
  import tensorrt as trt
95
96
 
96
97
  is_trt10 = int(trt.__version__.split(".", 1)[0]) >= 10
@@ -35,6 +35,10 @@ def test_export_onnx(end2end):
35
35
  def test_export_openvino(end2end):
36
36
  """Test YOLO export to OpenVINO format for model inference compatibility."""
37
37
  file = YOLO(MODEL).export(format="openvino", imgsz=32, end2end=end2end)
38
+ if WINDOWS:
39
+ # Ensure a unique export path per test to prevent OpenVINO file writes
40
+ file = Path(file)
41
+ file = file.rename(file.with_stem(f"{file.stem}-{uuid.uuid4()}"))
38
42
  YOLO(file)(SOURCE, imgsz=32) # exported model inference
39
43
 
40
44
 
@@ -66,7 +70,6 @@ def test_export_openvino_matrix(task, dynamic, int8, half, batch, nms, end2end):
66
70
  )
67
71
  if WINDOWS:
68
72
  # Use unique filenames due to Windows file permissions bug possibly due to latent threaded use
69
- # See https://github.com/ultralytics/ultralytics/actions/runs/8957949304/job/24601616830?pr=10423
70
73
  file = Path(file)
71
74
  file = file.rename(file.with_stem(f"{file.stem}-{uuid.uuid4()}"))
72
75
  YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32, batch=batch) # exported model inference
@@ -702,8 +702,7 @@ def test_yoloe(tmp_path):
702
702
  # Predict
703
703
  # text-prompts
704
704
  model = YOLO(WEIGHTS_DIR / "yoloe-11s-seg.pt")
705
- names = ["person", "bus"]
706
- model.set_classes(names, model.get_text_pe(names))
705
+ model.set_classes(["person", "bus"])
707
706
  model(SOURCE, conf=0.01)
708
707
 
709
708
  from ultralytics import YOLOE
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.4.9"
3
+ __version__ = "8.4.11"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -102,6 +102,7 @@ from ultralytics.utils import (
102
102
  callbacks,
103
103
  colorstr,
104
104
  get_default_args,
105
+ is_jetson,
105
106
  )
106
107
  from ultralytics.utils.checks import (
107
108
  IS_PYTHON_3_10,
@@ -110,6 +111,7 @@ from ultralytics.utils.checks import (
110
111
  check_executorch_requirements,
111
112
  check_imgsz,
112
113
  check_requirements,
114
+ check_tensorrt,
113
115
  check_version,
114
116
  is_intel,
115
117
  is_sudo_available,
@@ -1002,12 +1004,15 @@ class Exporter:
1002
1004
  assert self.im.device.type != "cpu", "export running on CPU but must be on GPU, i.e. use 'device=0'"
1003
1005
  f_onnx = self.export_onnx() # run before TRT import https://github.com/ultralytics/ultralytics/issues/7016
1004
1006
 
1007
+ # Force re-install TensorRT on CUDA 13 ARM devices to 10.15.x versions for RT-DETR exports
1008
+ # https://github.com/ultralytics/ultralytics/issues/22873
1009
+ if is_jetson(jetpack=7):
1010
+ check_tensorrt("10.15")
1011
+
1005
1012
  try:
1006
1013
  import tensorrt as trt
1007
1014
  except ImportError:
1008
- if LINUX:
1009
- cuda_version = torch.version.cuda.split(".")[0]
1010
- check_requirements(f"tensorrt-cu{cuda_version}>7.0.0,!=10.1.0")
1015
+ check_tensorrt()
1011
1016
  import tensorrt as trt
1012
1017
  check_version(trt.__version__, ">=7.0.0", hard=True)
1013
1018
  check_version(trt.__version__, "!=10.1.0", msg="https://github.com/ultralytics/ultralytics/pull/14239")
@@ -1395,7 +1400,7 @@ class Exporter:
1395
1400
  nms.confidenceThresholdInputFeatureName = "confidenceThreshold"
1396
1401
  nms.iouThreshold = self.args.iou
1397
1402
  nms.confidenceThreshold = self.args.conf
1398
- nms.pickTop.perClass = True
1403
+ nms.pickTop.perClass = not self.args.agnostic_nms
1399
1404
  nms.stringClassLabels.vector.extend(names.values())
1400
1405
  nms_model = ct.models.MLModel(nms_spec)
1401
1406
 
@@ -12,7 +12,7 @@ from urllib.parse import parse_qs, urlparse
12
12
 
13
13
  from ultralytics import __version__
14
14
  from ultralytics.hub.utils import HELP_MSG, HUB_WEB_ROOT, PREFIX
15
- from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, TQDM, checks, emojis
15
+ from ultralytics.utils import IS_COLAB, LOGGER, SETTINGS, TQDM, checks
16
16
  from ultralytics.utils.errors import HUBModelError
17
17
 
18
18
  AGENT_NAME = f"python-{__version__}-colab" if IS_COLAB else f"python-{__version__}-local"
@@ -121,7 +121,7 @@ class HUBTrainingSession:
121
121
  """
122
122
  self.model = self.client.model(model_id)
123
123
  if not self.model.data: # then model does not exist
124
- raise ValueError(emojis("❌ The specified HUB model does not exist")) # TODO: improve error handling
124
+ raise HUBModelError(f"❌ Model not found: '{model_id}'. Verify the model ID is correct.")
125
125
 
126
126
  self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
127
127
  if self.model.is_trained():
@@ -167,10 +167,8 @@ class HUBTrainingSession:
167
167
 
168
168
  self.model.create_model(payload)
169
169
 
170
- # Model could not be created
171
- # TODO: improve error handling
172
170
  if not self.model.id:
173
- return None
171
+ raise HUBModelError(f"❌ Failed to create model '{self.filename}' on Ultralytics HUB. Please try again.")
174
172
 
175
173
  self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
176
174
 
@@ -2619,7 +2619,7 @@ class SAM3VideoSemanticPredictor(SAM3SemanticPredictor):
2619
2619
  if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list
2620
2620
  orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
2621
2621
 
2622
- names = []
2622
+ names = self.model.names if self.model.names != "visual" else {}
2623
2623
  if len(curr_obj_ids) == 0:
2624
2624
  pred_masks, pred_boxes = None, torch.zeros((0, 7), device=self.device)
2625
2625
  else:
@@ -2638,6 +2638,8 @@ class SAM3VideoSemanticPredictor(SAM3SemanticPredictor):
2638
2638
  pred_boxes = torch.cat(
2639
2639
  [pred_boxes, pred_ids[keep][:, None], pred_scores[keep][..., None], pred_cls[keep][..., None]], dim=-1
2640
2640
  )
2641
+ if pred_boxes.shape[0]:
2642
+ names = names or dict(enumerate(str(i) for i in range(pred_boxes[:, 6].int().max() + 1)))
2641
2643
  if pred_masks.shape[0] > 1:
2642
2644
  tracker_scores = torch.tensor(
2643
2645
  [
@@ -2657,7 +2659,6 @@ class SAM3VideoSemanticPredictor(SAM3SemanticPredictor):
2657
2659
  background_value=0,
2658
2660
  ).squeeze(1)
2659
2661
  ) > 0
2660
- names = self.model.names or dict(enumerate(str(i) for i in range(pred_boxes[:, 6].int().max())))
2661
2662
 
2662
2663
  results = []
2663
2664
  for masks, boxes, orig_img, img_path in zip([pred_masks], [pred_boxes], orig_imgs, self.batch[0]):
@@ -426,5 +426,6 @@ class YOLOE(Model):
426
426
  self.predictor = None # reset predictor
427
427
  elif isinstance(self.predictor, yolo.yoloe.YOLOEVPDetectPredictor):
428
428
  self.predictor = None # reset predictor if no visual prompts
429
+ self.overrides["agnostic_nms"] = True # use agnostic nms for YOLOE default
429
430
 
430
431
  return super().predict(source, stream, **kwargs)
@@ -339,7 +339,7 @@ class AutoBackend(nn.Module):
339
339
  batch = metadata["batch"]
340
340
  dynamic = metadata.get("args", {}).get("dynamic", dynamic)
341
341
  # OpenVINO inference modes are 'LATENCY', 'THROUGHPUT' (not recommended), or 'CUMULATIVE_THROUGHPUT'
342
- inference_mode = "CUMULATIVE_THROUGHPUT" if batch > 1 and dynamic else "LATENCY"
342
+ inference_mode = "CUMULATIVE_THROUGHPUT" if dynamic and batch > 1 else "LATENCY"
343
343
  ov_compiled_model = core.compile_model(
344
344
  ov_model,
345
345
  device_name=device_name,
@@ -762,7 +762,7 @@ def is_jetson(jetpack=None) -> bool:
762
762
  if jetson and jetpack:
763
763
  try:
764
764
  content = open("/etc/nv_tegra_release").read()
765
- version_map = {4: "R32", 5: "R35", 6: "R36"} # JetPack to L4T major version mapping
765
+ version_map = {4: "R32", 5: "R35", 6: "R36", 7: "R38"} # JetPack to L4T major version mapping
766
766
  return jetpack in version_map and version_map[jetpack] in content
767
767
  except Exception:
768
768
  return False
@@ -9,7 +9,7 @@ from concurrent.futures import ThreadPoolExecutor
9
9
  from pathlib import Path
10
10
  from time import time
11
11
 
12
- from ultralytics.utils import ENVIRONMENT, GIT, LOGGER, PYTHON_VERSION, RANK, SETTINGS, TESTS_RUNNING, colorstr
12
+ from ultralytics.utils import ENVIRONMENT, GIT, LOGGER, PYTHON_VERSION, RANK, SETTINGS, TESTS_RUNNING, Retry, colorstr
13
13
 
14
14
  PREFIX = colorstr("Platform: ")
15
15
 
@@ -148,22 +148,30 @@ def _interp_plot(plot, n=101):
148
148
  return result
149
149
 
150
150
 
151
- def _send(event, data, project, name, model_id=None):
152
- """Send event to Platform endpoint. Returns response JSON on success."""
153
- try:
154
- payload = {"event": event, "project": project, "name": name, "data": data}
155
- if model_id:
156
- payload["modelId"] = model_id
151
+ def _send(event, data, project, name, model_id=None, retry=2):
152
+ """Send event to Platform endpoint with retry logic."""
153
+ payload = {"event": event, "project": project, "name": name, "data": data}
154
+ if model_id:
155
+ payload["modelId"] = model_id
156
+
157
+ @Retry(times=retry, delay=1)
158
+ def post():
157
159
  r = requests.post(
158
160
  f"{PLATFORM_API_URL}/training/metrics",
159
161
  json=payload,
160
162
  headers={"Authorization": f"Bearer {_api_key}"},
161
- timeout=10,
163
+ timeout=30,
162
164
  )
165
+ if 400 <= r.status_code < 500 and r.status_code not in {408, 429}:
166
+ LOGGER.warning(f"{PREFIX}Failed to send {event}: {r.status_code} {r.reason}")
167
+ return None # Don't retry client errors (except 408 timeout, 429 rate limit)
163
168
  r.raise_for_status()
164
169
  return r.json()
170
+
171
+ try:
172
+ return post()
165
173
  except Exception as e:
166
- LOGGER.debug(f"Platform: Failed to send {event}: {e}")
174
+ LOGGER.debug(f"{PREFIX}Failed to send {event}: {e}")
167
175
  return None
168
176
 
169
177
 
@@ -172,40 +180,38 @@ def _send_async(event, data, project, name, model_id=None):
172
180
  _executor.submit(_send, event, data, project, name, model_id)
173
181
 
174
182
 
175
- def _upload_model(model_path, project, name):
183
+ def _upload_model(model_path, project, name, progress=False, retry=1):
176
184
  """Upload model checkpoint to Platform via signed URL."""
177
- try:
178
- model_path = Path(model_path)
179
- if not model_path.exists():
180
- return None
185
+ from ultralytics.utils.uploads import safe_upload
186
+
187
+ model_path = Path(model_path)
188
+ if not model_path.exists():
189
+ LOGGER.warning(f"{PREFIX}Model file not found: {model_path}")
190
+ return None
181
191
 
182
- # Get signed upload URL
183
- response = requests.post(
192
+ # Get signed upload URL from Platform
193
+ @Retry(times=3, delay=2)
194
+ def get_signed_url():
195
+ r = requests.post(
184
196
  f"{PLATFORM_API_URL}/models/upload",
185
197
  json={"project": project, "name": name, "filename": model_path.name},
186
198
  headers={"Authorization": f"Bearer {_api_key}"},
187
- timeout=10,
199
+ timeout=30,
188
200
  )
189
- response.raise_for_status()
190
- data = response.json()
191
-
192
- # Upload to GCS
193
- with open(model_path, "rb") as f:
194
- requests.put(
195
- data["uploadUrl"],
196
- data=f,
197
- headers={"Content-Type": "application/octet-stream"},
198
- timeout=600, # 10 min timeout for large models
199
- ).raise_for_status()
200
-
201
- # url = f"{PLATFORM_URL}/{project}/{name}"
202
- # LOGGER.info(f"{PREFIX}Model uploaded to {url}")
203
- return data.get("gcsPath")
201
+ r.raise_for_status()
202
+ return r.json()
204
203
 
204
+ try:
205
+ data = get_signed_url()
205
206
  except Exception as e:
206
- LOGGER.debug(f"Platform: Failed to upload model: {e}")
207
+ LOGGER.warning(f"{PREFIX}Failed to get upload URL: {e}")
207
208
  return None
208
209
 
210
+ # Upload to GCS using safe_upload with retry logic and optional progress bar
211
+ if safe_upload(file=model_path, url=data["uploadUrl"], retry=retry, progress=progress):
212
+ return data.get("gcsPath")
213
+ return None
214
+
209
215
 
210
216
  def _upload_model_async(model_path, project, name):
211
217
  """Upload model asynchronously using bounded thread pool."""
@@ -306,7 +312,7 @@ def on_pretrain_routine_start(trainer):
306
312
  # Note: model_info is sent later in on_fit_epoch_end (epoch 0) when the model is actually loaded
307
313
  train_args = {k: str(v) for k, v in vars(trainer.args).items()}
308
314
 
309
- # Send synchronously to get modelId for subsequent webhooks
315
+ # Send synchronously to get modelId for subsequent webhooks (critical, more retries)
310
316
  response = _send(
311
317
  "training_started",
312
318
  {
@@ -317,9 +323,12 @@ def on_pretrain_routine_start(trainer):
317
323
  },
318
324
  project,
319
325
  name,
326
+ retry=4,
320
327
  )
321
328
  if response and response.get("modelId"):
322
329
  trainer._platform_model_id = response["modelId"]
330
+ else:
331
+ LOGGER.warning(f"{PREFIX}Failed to register training session - metrics may not sync to Platform")
323
332
 
324
333
 
325
334
  def on_fit_epoch_end(trainer):
@@ -404,12 +413,14 @@ def on_train_end(trainer):
404
413
  trainer._platform_console_logger.stop_capture()
405
414
  trainer._platform_console_logger = None
406
415
 
407
- # Upload best model (blocking to ensure it completes)
408
- model_path = None
416
+ # Upload best model (blocking with progress bar to ensure it completes)
417
+ gcs_path = None
409
418
  model_size = None
410
419
  if trainer.best and Path(trainer.best).exists():
411
420
  model_size = Path(trainer.best).stat().st_size
412
- model_path = _upload_model(trainer.best, project, name)
421
+ gcs_path = _upload_model(trainer.best, project, name, progress=True, retry=3)
422
+ if not gcs_path:
423
+ LOGGER.warning(f"{PREFIX}Model will not be available for download on Platform (upload failed)")
413
424
 
414
425
  # Collect plots from trainer and validator, deduplicating by type
415
426
  plots_by_type = {}
@@ -432,7 +443,7 @@ def on_train_end(trainer):
432
443
  "metrics": {**trainer.metrics, "fitness": trainer.fitness},
433
444
  "bestEpoch": getattr(trainer, "best_epoch", trainer.epoch),
434
445
  "bestFitness": trainer.best_fitness,
435
- "modelPath": model_path or (str(trainer.best) if trainer.best else None),
446
+ "modelPath": gcs_path, # Only send GCS path, not local path
436
447
  "modelSize": model_size,
437
448
  },
438
449
  "classNames": class_names,
@@ -441,6 +452,7 @@ def on_train_end(trainer):
441
452
  project,
442
453
  name,
443
454
  getattr(trainer, "_platform_model_id", None),
455
+ retry=4, # Critical, more retries
444
456
  )
445
457
  url = f"{PLATFORM_URL}/{project}/{name}"
446
458
  LOGGER.info(f"{PREFIX}View results at {url}")
@@ -507,6 +507,17 @@ def check_executorch_requirements():
507
507
  check_requirements("numpy<=2.3.5")
508
508
 
509
509
 
510
+ def check_tensorrt(min_version: str = "7.0.0"):
511
+ """Check and install TensorRT requirements including platform-specific dependencies.
512
+
513
+ Args:
514
+ min_version (str): Minimum supported TensorRT version (default: "7.0.0").
515
+ """
516
+ if LINUX:
517
+ cuda_version = torch.version.cuda.split(".")[0]
518
+ check_requirements(f"tensorrt-cu{cuda_version}>={min_version},!=10.1.0")
519
+
520
+
510
521
  def check_torchvision():
511
522
  """Check the installed versions of PyTorch and Torchvision to ensure they're compatible.
512
523
 
@@ -408,7 +408,7 @@ class Instances:
408
408
  good = self.bbox_areas > 0
409
409
  if not all(good):
410
410
  self._bboxes = self._bboxes[good]
411
- if len(self.segments):
411
+ if self.segments is not None and len(self.segments):
412
412
  self.segments = self.segments[good]
413
413
  if self.keypoints is not None:
414
414
  self.keypoints = self.keypoints[good]
@@ -482,3 +482,16 @@ class Instances:
482
482
  def bboxes(self) -> np.ndarray:
483
483
  """Return bounding boxes."""
484
484
  return self._bboxes.bboxes
485
+
486
+ def __repr__(self) -> str:
487
+ """Return a string representation of the Instances object."""
488
+ # Map private to public names and include direct attributes
489
+ attr_map = {"_bboxes": "bboxes"}
490
+ parts = []
491
+ for key, value in self.__dict__.items():
492
+ name = attr_map.get(key, key)
493
+ if name == "bboxes":
494
+ value = self.bboxes # Use the property
495
+ if value is not None:
496
+ parts.append(f"{name}={value!r}")
497
+ return "Instances({})".format("\n".join(parts))
@@ -1193,8 +1193,6 @@ class TVPDetectLoss:
1193
1193
 
1194
1194
  def loss(self, preds: dict[str, torch.Tensor], batch: dict[str, torch.Tensor]) -> tuple[torch.Tensor, torch.Tensor]:
1195
1195
  """Calculate the loss for text-visual prompt detection."""
1196
- assert self.ori_reg_max == self.vp_criterion.reg_max # TODO: remove it
1197
-
1198
1196
  if self.ori_nc == preds["scores"].shape[1]:
1199
1197
  loss = torch.zeros(3, device=self.vp_criterion.device, requires_grad=True)
1200
1198
  return loss, loss.detach()
@@ -1230,8 +1228,6 @@ class TVPSegmentLoss(TVPDetectLoss):
1230
1228
 
1231
1229
  def loss(self, preds: Any, batch: dict[str, torch.Tensor]) -> tuple[torch.Tensor, torch.Tensor]:
1232
1230
  """Calculate the loss for text-visual prompt detection."""
1233
- assert self.ori_reg_max == self.vp_criterion.reg_max # TODO: remove it
1234
-
1235
1231
  if self.ori_nc == preds["scores"].shape[1]:
1236
1232
  loss = torch.zeros(4, device=self.vp_criterion.device, requires_grad=True)
1237
1233
  return loss, loss.detach()
@@ -0,0 +1,115 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+ """Upload utilities for Ultralytics, mirroring downloads.py patterns."""
3
+
4
+ from __future__ import annotations
5
+
6
+ import os
7
+ from pathlib import Path
8
+ from time import sleep
9
+
10
+ from ultralytics.utils import LOGGER, TQDM
11
+
12
+
13
+ class _ProgressReader:
14
+ """File wrapper that reports read progress for upload monitoring."""
15
+
16
+ def __init__(self, file_path, pbar):
17
+ self.file = open(file_path, "rb")
18
+ self.pbar = pbar
19
+ self._size = os.path.getsize(file_path)
20
+
21
+ def read(self, size=-1):
22
+ """Read data and update progress bar."""
23
+ data = self.file.read(size)
24
+ if data and self.pbar:
25
+ self.pbar.update(len(data))
26
+ return data
27
+
28
+ def __len__(self):
29
+ """Return file size for Content-Length header."""
30
+ return self._size
31
+
32
+ def close(self):
33
+ """Close the file."""
34
+ self.file.close()
35
+
36
+
37
+ def safe_upload(
38
+ file: str | Path,
39
+ url: str,
40
+ headers: dict | None = None,
41
+ retry: int = 2,
42
+ timeout: int = 600,
43
+ progress: bool = False,
44
+ ) -> bool:
45
+ """Upload a file to a URL with retry logic and optional progress bar.
46
+
47
+ Args:
48
+ file (str | Path): Path to the file to upload.
49
+ url (str): The URL endpoint to upload the file to (e.g., signed GCS URL).
50
+ headers (dict, optional): Additional headers to include in the request.
51
+ retry (int, optional): Number of retry attempts on failure (default: 2 for 3 total attempts).
52
+ timeout (int, optional): Request timeout in seconds.
53
+ progress (bool, optional): Whether to display a progress bar during upload.
54
+
55
+ Returns:
56
+ (bool): True if upload succeeded, False otherwise.
57
+
58
+ Examples:
59
+ >>> from ultralytics.utils.uploads import safe_upload
60
+ >>> success = safe_upload("model.pt", "https://storage.googleapis.com/...", progress=True)
61
+ """
62
+ import requests
63
+
64
+ file = Path(file)
65
+ if not file.exists():
66
+ raise FileNotFoundError(f"File not found: {file}")
67
+
68
+ file_size = file.stat().st_size
69
+ desc = f"Uploading {file.name}"
70
+
71
+ # Prepare headers (Content-Length set automatically from file size)
72
+ upload_headers = {"Content-Type": "application/octet-stream"}
73
+ if headers:
74
+ upload_headers.update(headers)
75
+
76
+ last_error = None
77
+ for attempt in range(retry + 1):
78
+ pbar = None
79
+ reader = None
80
+ try:
81
+ if progress:
82
+ pbar = TQDM(total=file_size, desc=desc, unit="B", unit_scale=True, unit_divisor=1024)
83
+ reader = _ProgressReader(file, pbar)
84
+
85
+ r = requests.put(url, data=reader, headers=upload_headers, timeout=timeout)
86
+ r.raise_for_status()
87
+ reader.close()
88
+ reader = None # Prevent double-close in finally
89
+ if pbar:
90
+ pbar.close()
91
+ pbar = None
92
+ LOGGER.info(f"Uploaded {file.name} ✅")
93
+ return True
94
+
95
+ except requests.exceptions.HTTPError as e:
96
+ status = e.response.status_code if e.response is not None else 0
97
+ if 400 <= status < 500 and status not in {408, 429}:
98
+ LOGGER.warning(f"{desc} failed: {status} {getattr(e.response, 'reason', '')}")
99
+ return False
100
+ last_error = f"HTTP {status}"
101
+ except Exception as e:
102
+ last_error = str(e)
103
+ finally:
104
+ if reader:
105
+ reader.close()
106
+ if pbar:
107
+ pbar.close()
108
+
109
+ if attempt < retry:
110
+ wait_time = 2 ** (attempt + 1)
111
+ LOGGER.warning(f"{desc} failed ({last_error}), retrying {attempt + 1}/{retry} in {wait_time}s...")
112
+ sleep(wait_time)
113
+
114
+ LOGGER.warning(f"{desc} failed after {retry + 1} attempts: {last_error}")
115
+ return False
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics-opencv-headless
3
- Version: 8.4.9
3
+ Version: 8.4.11
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>
@@ -297,6 +297,7 @@ ultralytics/utils/torch_utils.py
297
297
  ultralytics/utils/tqdm.py
298
298
  ultralytics/utils/triton.py
299
299
  ultralytics/utils/tuner.py
300
+ ultralytics/utils/uploads.py
300
301
  ultralytics/utils/callbacks/__init__.py
301
302
  ultralytics/utils/callbacks/base.py
302
303
  ultralytics/utils/callbacks/clearml.py