dgenerate-ultralytics-headless 8.3.228__tar.gz → 8.3.230__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 (291) hide show
  1. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/PKG-INFO +4 -4
  2. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/README.md +1 -1
  3. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +4 -4
  4. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/dgenerate_ultralytics_headless.egg-info/requires.txt +2 -2
  5. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/pyproject.toml +2 -2
  6. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_cuda.py +5 -9
  7. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/__init__.py +1 -1
  8. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/hand-keypoints.yaml +1 -2
  9. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/build.py +2 -1
  10. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/exporter.py +3 -0
  11. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/results.py +1 -1
  12. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/tuner.py +1 -1
  13. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/rtdetr/predict.py +1 -1
  14. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/predict.py +1 -1
  15. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/classify/predict.py +1 -1
  16. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/detect/predict.py +1 -1
  17. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/model.py +2 -2
  18. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/segment/val.py +75 -17
  19. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/autobackend.py +1 -1
  20. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/templates/similarity-search.html +4 -17
  21. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/autodevice.py +6 -5
  22. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/ops.py +24 -56
  23. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/plotting.py +5 -4
  24. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/torch_utils.py +1 -1
  25. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/LICENSE +0 -0
  26. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  27. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  28. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  29. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  30. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/setup.cfg +0 -0
  31. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/__init__.py +0 -0
  32. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/conftest.py +0 -0
  33. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_cli.py +0 -0
  34. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_engine.py +0 -0
  35. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_exports.py +0 -0
  36. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_integrations.py +0 -0
  37. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_python.py +0 -0
  38. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/tests/test_solutions.py +0 -0
  39. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/assets/bus.jpg +0 -0
  40. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/assets/zidane.jpg +0 -0
  41. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/__init__.py +0 -0
  42. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  43. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  44. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  45. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  46. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  47. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  48. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  49. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  50. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  51. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  52. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  53. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  54. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  55. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/kitti.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/signature.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/datasets/xView.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/default.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  127. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  128. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  129. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  130. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  131. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  132. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  133. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  134. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  135. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/__init__.py +0 -0
  136. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/annotator.py +0 -0
  137. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/augment.py +0 -0
  138. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/base.py +0 -0
  139. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/converter.py +0 -0
  140. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/dataset.py +0 -0
  141. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/loaders.py +0 -0
  142. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/scripts/download_weights.sh +0 -0
  143. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/scripts/get_coco.sh +0 -0
  144. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/scripts/get_coco128.sh +0 -0
  145. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  146. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/split.py +0 -0
  147. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/split_dota.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/data/utils.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/__init__.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/model.py +0 -0
  151. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/predictor.py +0 -0
  152. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/trainer.py +0 -0
  153. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/engine/validator.py +0 -0
  154. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/hub/__init__.py +0 -0
  155. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/hub/auth.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/hub/google/__init__.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/hub/session.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/hub/utils.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/__init__.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/fastsam/__init__.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/fastsam/model.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/fastsam/predict.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/fastsam/utils.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/fastsam/val.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/nas/__init__.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/nas/model.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/nas/predict.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/nas/val.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/rtdetr/__init__.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/rtdetr/model.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/rtdetr/train.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/rtdetr/val.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/__init__.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/amg.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/build.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/model.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/__init__.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/blocks.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/decoders.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/encoders.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/sam.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/transformer.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/sam/modules/utils.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/utils/__init__.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/utils/loss.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/utils/ops.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/__init__.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/classify/__init__.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/classify/train.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/classify/val.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/detect/__init__.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/detect/train.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/detect/val.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/obb/__init__.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/obb/predict.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/obb/train.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/obb/val.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/pose/__init__.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/pose/predict.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/pose/train.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/pose/val.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/segment/__init__.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/segment/predict.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/segment/train.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/world/__init__.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/world/train.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/world/train_world.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/yoloe/train.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/models/yolo/yoloe/val.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/__init__.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/__init__.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/activation.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/block.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/conv.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/head.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/transformer.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/modules/utils.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/tasks.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/nn/text_model.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/py.typed +0 -0
  226. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/__init__.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/ai_gym.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/analytics.py +0 -0
  229. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/config.py +0 -0
  230. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/distance_calculation.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/heatmap.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/instance_segmentation.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/object_blurrer.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/object_counter.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/object_cropper.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/parking_management.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/queue_management.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/region_counter.py +0 -0
  239. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/security_alarm.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/similarity_search.py +0 -0
  241. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/solutions.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/speed_estimation.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/streamlit_inference.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/trackzone.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/solutions/vision_eye.py +0 -0
  246. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/__init__.py +0 -0
  247. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/basetrack.py +0 -0
  248. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/bot_sort.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/byte_tracker.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/track.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/utils/__init__.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/utils/gmc.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/trackers/utils/matching.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/__init__.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/autobatch.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/benchmarks.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/__init__.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/base.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/clearml.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/comet.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/dvc.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/hub.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/mlflow.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/neptune.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/platform.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/raytune.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/callbacks/wb.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/checks.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/cpu.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/dist.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/downloads.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/errors.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/events.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/export/__init__.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/export/engine.py +0 -0
  278. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/export/imx.py +0 -0
  279. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/export/tensorflow.py +0 -0
  280. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/files.py +0 -0
  281. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/git.py +0 -0
  282. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/instance.py +0 -0
  283. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/logger.py +0 -0
  284. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/loss.py +0 -0
  285. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/metrics.py +0 -0
  286. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/nms.py +0 -0
  287. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/patches.py +0 -0
  288. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/tal.py +0 -0
  289. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/tqdm.py +0 -0
  290. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/triton.py +0 -0
  291. {dgenerate_ultralytics_headless-8.3.228 → dgenerate_ultralytics_headless-8.3.230}/ultralytics/utils/tuner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.228
3
+ Version: 8.3.230
4
4
  Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -42,8 +42,8 @@ Requires-Dist: scipy>=1.4.1
42
42
  Requires-Dist: torch>=1.8.0
43
43
  Requires-Dist: torch!=2.4.0,>=1.8.0; sys_platform == "win32"
44
44
  Requires-Dist: torchvision>=0.9.0
45
- Requires-Dist: psutil
46
- Requires-Dist: polars
45
+ Requires-Dist: psutil>=5.8.0
46
+ Requires-Dist: polars>=0.20.0
47
47
  Requires-Dist: ultralytics-thop>=2.0.18
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: ipython; extra == "dev"
@@ -381,7 +381,7 @@ We look forward to your contributions to help make the Ultralytics ecosystem eve
381
381
 
382
382
  Ultralytics offers two licensing options to suit different needs:
383
383
 
384
- - **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license) open-source license is perfect for students, researchers, and enthusiasts. It encourages open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for full details.
384
+ - **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license/agpl-v3) open-source license is perfect for students, researchers, and enthusiasts. It encourages open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for full details.
385
385
  - **Ultralytics Enterprise License**: Designed for commercial use, this license allows for the seamless integration of Ultralytics software and AI models into commercial products and services, bypassing the open-source requirements of AGPL-3.0. If your use case involves commercial deployment, please contact us via [Ultralytics Licensing](https://www.ultralytics.com/license).
386
386
 
387
387
  ## 📞 Contact
@@ -291,7 +291,7 @@ We look forward to your contributions to help make the Ultralytics ecosystem eve
291
291
 
292
292
  Ultralytics offers two licensing options to suit different needs:
293
293
 
294
- - **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license) open-source license is perfect for students, researchers, and enthusiasts. It encourages open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for full details.
294
+ - **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license/agpl-v3) open-source license is perfect for students, researchers, and enthusiasts. It encourages open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for full details.
295
295
  - **Ultralytics Enterprise License**: Designed for commercial use, this license allows for the seamless integration of Ultralytics software and AI models into commercial products and services, bypassing the open-source requirements of AGPL-3.0. If your use case involves commercial deployment, please contact us via [Ultralytics Licensing](https://www.ultralytics.com/license).
296
296
 
297
297
  ## 📞 Contact
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.228
3
+ Version: 8.3.230
4
4
  Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -42,8 +42,8 @@ Requires-Dist: scipy>=1.4.1
42
42
  Requires-Dist: torch>=1.8.0
43
43
  Requires-Dist: torch!=2.4.0,>=1.8.0; sys_platform == "win32"
44
44
  Requires-Dist: torchvision>=0.9.0
45
- Requires-Dist: psutil
46
- Requires-Dist: polars
45
+ Requires-Dist: psutil>=5.8.0
46
+ Requires-Dist: polars>=0.20.0
47
47
  Requires-Dist: ultralytics-thop>=2.0.18
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: ipython; extra == "dev"
@@ -381,7 +381,7 @@ We look forward to your contributions to help make the Ultralytics ecosystem eve
381
381
 
382
382
  Ultralytics offers two licensing options to suit different needs:
383
383
 
384
- - **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license) open-source license is perfect for students, researchers, and enthusiasts. It encourages open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for full details.
384
+ - **AGPL-3.0 License**: This [OSI-approved](https://opensource.org/license/agpl-v3) open-source license is perfect for students, researchers, and enthusiasts. It encourages open collaboration and knowledge sharing. See the [LICENSE](https://github.com/ultralytics/ultralytics/blob/main/LICENSE) file for full details.
385
385
  - **Ultralytics Enterprise License**: Designed for commercial use, this license allows for the seamless integration of Ultralytics software and AI models into commercial products and services, bypassing the open-source requirements of AGPL-3.0. If your use case involves commercial deployment, please contact us via [Ultralytics Licensing](https://www.ultralytics.com/license).
386
386
 
387
387
  ## 📞 Contact
@@ -7,8 +7,8 @@ requests>=2.23.0
7
7
  scipy>=1.4.1
8
8
  torch>=1.8.0
9
9
  torchvision>=0.9.0
10
- psutil
11
- polars
10
+ psutil>=5.8.0
11
+ polars>=0.20.0
12
12
  ultralytics-thop>=2.0.18
13
13
 
14
14
  [:sys_platform == "win32"]
@@ -71,8 +71,8 @@ dependencies = [
71
71
  "torch>=1.8.0",
72
72
  "torch>=1.8.0,!=2.4.0; sys_platform == 'win32'", # Windows CPU errors w/ 2.4.0 https://github.com/ultralytics/ultralytics/issues/15049
73
73
  "torchvision>=0.9.0",
74
- "psutil", # system utilization
75
- "polars",
74
+ "psutil>=5.8.0", # system utilization
75
+ "polars>=0.20.0",
76
76
  "ultralytics-thop>=2.0.18", # FLOPs computation https://github.com/ultralytics/thop
77
77
  ]
78
78
 
@@ -1,5 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ import os
3
4
  from itertools import product
4
5
  from pathlib import Path
5
6
 
@@ -110,20 +111,15 @@ def test_export_engine_matrix(task, dynamic, int8, half, batch):
110
111
  @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
111
112
  def test_train():
112
113
  """Test model training on a minimal dataset using available CUDA devices."""
113
- import os
114
-
115
114
  device = tuple(DEVICES) if len(DEVICES) > 1 else DEVICES[0]
116
115
  # NVIDIA Jetson only has one GPU and therefore skipping checks
117
116
  if not IS_JETSON:
118
- results = YOLO(MODEL).train(
119
- data="coco8.yaml", imgsz=64, epochs=1, device=device, batch=15
120
- ) # requires imgsz>=64
121
- results = YOLO(MODEL).train(data="coco8.yaml", imgsz=64, epochs=1, device=device, batch=15, val=False)
117
+ results = YOLO(MODEL).train(data="coco8.yaml", imgsz=64, epochs=1, device=device, batch=15)
118
+ results = YOLO(MODEL).train(data="coco128.yaml", imgsz=64, epochs=1, device=device, batch=15, val=False)
122
119
  visible = eval(os.environ["CUDA_VISIBLE_DEVICES"])
123
120
  assert visible == device, f"Passed GPUs '{device}', but used GPUs '{visible}'"
124
- assert (
125
- (results is None) if len(DEVICES) > 1 else (results is not None)
126
- ) # DDP returns None, single-GPU returns metrics
121
+ # Note DDP training returns None, single-GPU returns metrics
122
+ assert (results is None) if len(DEVICES) > 1 else (results is not None)
127
123
 
128
124
 
129
125
  @pytest.mark.slow
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.228"
3
+ __version__ = "8.3.230"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -15,8 +15,7 @@ val: images/val # val images (relative to 'path') 7992 images
15
15
 
16
16
  # Keypoints
17
17
  kpt_shape: [21, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
18
- flip_idx:
19
- [0, 1, 2, 4, 3, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 20]
18
+ flip_idx: [0, 1, 2, 4, 3, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 20]
20
19
 
21
20
  # Classes
22
21
  names:
@@ -161,11 +161,12 @@ class ContiguousDistributedSampler(torch.utils.data.Sampler):
161
161
  batch_size = getattr(dataset, "batch_size", 1)
162
162
 
163
163
  self.num_replicas = num_replicas
164
- self.batch_size = batch_size
165
164
  self.rank = rank
166
165
  self.epoch = 0
167
166
  self.shuffle = shuffle
168
167
  self.total_size = len(dataset)
168
+ # ensure all ranks have a sample if batch size >= total size; degenerates to round-robin sampler
169
+ self.batch_size = 1 if batch_size >= self.total_size else batch_size
169
170
  self.num_batches = math.ceil(self.total_size / self.batch_size)
170
171
 
171
172
  def _get_rank_indices(self) -> tuple[int, int]:
@@ -99,6 +99,7 @@ from ultralytics.utils import (
99
99
  get_default_args,
100
100
  )
101
101
  from ultralytics.utils.checks import (
102
+ IS_PYTHON_3_12,
102
103
  check_imgsz,
103
104
  check_requirements,
104
105
  check_version,
@@ -1175,6 +1176,8 @@ class Exporter:
1175
1176
  "export only supported on Linux. "
1176
1177
  "See https://developer.aitrios.sony-semicon.com/en/raspberrypi-ai-camera/documentation/imx500-converter"
1177
1178
  )
1179
+ assert not IS_PYTHON_3_12, "IMX export requires Python>=3.8;<3.12"
1180
+ assert not TORCH_2_9, f"IMX export requires PyTorch<2.9. Current PyTorch version is {TORCH_VERSION}."
1178
1181
  if getattr(self.model, "end2end", False):
1179
1182
  raise ValueError("IMX export is not supported for end2end models.")
1180
1183
  check_requirements(
@@ -589,7 +589,7 @@ class Results(SimpleClass, DataExportMixin):
589
589
  if save:
590
590
  annotator.save(filename or f"results_{Path(self.path).name}")
591
591
 
592
- return annotator.im if pil else annotator.result()
592
+ return annotator.result(pil)
593
593
 
594
594
  def show(self, *args, **kwargs):
595
595
  """Display the image with annotated inference results.
@@ -226,7 +226,7 @@ class Tuner:
226
226
  try:
227
227
  self.collection.insert_one(
228
228
  {
229
- "fitness": float(fitness),
229
+ "fitness": fitness,
230
230
  "hyperparameters": {k: (v.item() if hasattr(v, "item") else v) for k, v in hyperparameters.items()},
231
231
  "metrics": metrics,
232
232
  "timestamp": datetime.now(),
@@ -55,7 +55,7 @@ class RTDETRPredictor(BasePredictor):
55
55
  bboxes, scores = preds[0].split((4, nd - 4), dim=-1)
56
56
 
57
57
  if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list
58
- orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
58
+ orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]
59
59
 
60
60
  results = []
61
61
  for bbox, score, orig_img, img_path in zip(bboxes, scores, orig_imgs, self.batch[0]): # (300, 4)
@@ -502,7 +502,7 @@ class Predictor(BasePredictor):
502
502
  names = dict(enumerate(str(i) for i in range(pred_masks.shape[0])))
503
503
 
504
504
  if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list
505
- orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
505
+ orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]
506
506
 
507
507
  results = []
508
508
  for masks, orig_img, img_path in zip([pred_masks], orig_imgs, self.batch[0]):
@@ -81,7 +81,7 @@ class ClassificationPredictor(BasePredictor):
81
81
  (list[Results]): List of Results objects containing classification results for each image.
82
82
  """
83
83
  if not isinstance(orig_imgs, list): # Input images are a torch.Tensor, not a list
84
- orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
84
+ orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]
85
85
 
86
86
  preds = preds[0] if isinstance(preds, (list, tuple)) else preds
87
87
  return [
@@ -65,7 +65,7 @@ class DetectionPredictor(BasePredictor):
65
65
  )
66
66
 
67
67
  if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list
68
- orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
68
+ orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)[..., ::-1]
69
69
 
70
70
  if save_feats:
71
71
  obj_feats = self.get_obj_feats(self._feats, preds[1])
@@ -40,7 +40,7 @@ class YOLO(Model):
40
40
  task_map: Map tasks to their corresponding model, trainer, validator, and predictor classes.
41
41
 
42
42
  Examples:
43
- Load a pretrained YOLOv11n detection model
43
+ Load a pretrained YOLO11n detection model
44
44
  >>> model = YOLO("yolo11n.pt")
45
45
 
46
46
  Load a pretrained YOLO11n segmentation model
@@ -64,7 +64,7 @@ class YOLO(Model):
64
64
 
65
65
  Examples:
66
66
  >>> from ultralytics import YOLO
67
- >>> model = YOLO("yolo11n.pt") # load a pretrained YOLOv11n detection model
67
+ >>> model = YOLO("yolo11n.pt") # load a pretrained YOLO11n detection model
68
68
  >>> model = YOLO("yolo11n-seg.pt") # load a pretrained YOLO11n segmentation model
69
69
  """
70
70
  path = Path(model if isinstance(model, (str, Path)) else "")
@@ -2,7 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from multiprocessing.pool import ThreadPool
6
5
  from pathlib import Path
7
6
  from typing import Any
8
7
 
@@ -11,7 +10,7 @@ import torch
11
10
  import torch.nn.functional as F
12
11
 
13
12
  from ultralytics.models.yolo.detect import DetectionValidator
14
- from ultralytics.utils import LOGGER, NUM_THREADS, ops
13
+ from ultralytics.utils import LOGGER, ops
15
14
  from ultralytics.utils.checks import check_requirements
16
15
  from ultralytics.utils.metrics import SegmentMetrics, mask_iou
17
16
 
@@ -212,17 +211,78 @@ class SegmentationValidator(DetectionValidator):
212
211
  predn (dict[str, torch.Tensor]): Predictions containing bboxes, masks, confidence scores, and classes.
213
212
  pbatch (dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
214
213
  """
215
- from faster_coco_eval.core.mask import encode
216
214
 
217
- def single_encode(x):
218
- """Encode predicted masks as RLE and append results to jdict."""
219
- rle = encode(np.asarray(x[:, :, None], order="F", dtype="uint8"))[0]
220
- rle["counts"] = rle["counts"].decode("utf-8")
221
- return rle
222
-
223
- pred_masks = np.transpose(predn["masks"], (2, 0, 1))
224
- with ThreadPool(NUM_THREADS) as pool:
225
- rles = pool.map(single_encode, pred_masks)
215
+ def to_string(counts: list[int]) -> str:
216
+ """Converts the RLE object into a compact string representation. Each count is delta-encoded and
217
+ variable-length encoded as a string.
218
+
219
+ Args:
220
+ counts (list[int]): List of RLE counts.
221
+ """
222
+ result = []
223
+
224
+ for i in range(len(counts)):
225
+ x = int(counts[i])
226
+
227
+ # Apply delta encoding for all counts after the second entry
228
+ if i > 2:
229
+ x -= int(counts[i - 2])
230
+
231
+ # Variable-length encode the value
232
+ while True:
233
+ c = x & 0x1F # Take 5 bits
234
+ x >>= 5
235
+
236
+ # If the sign bit (0x10) is set, continue if x != -1;
237
+ # otherwise, continue if x != 0
238
+ more = (x != -1) if (c & 0x10) else (x != 0)
239
+ if more:
240
+ c |= 0x20 # Set continuation bit
241
+ c += 48 # Shift to ASCII
242
+ result.append(chr(c))
243
+ if not more:
244
+ break
245
+
246
+ return "".join(result)
247
+
248
+ def multi_encode(pixels: torch.Tensor) -> list[int]:
249
+ """Convert multiple binary masks using Run-Length Encoding (RLE).
250
+
251
+ Args:
252
+ pixels (torch.Tensor): A 2D tensor where each row represents a flattened binary mask with shape [N,
253
+ H*W].
254
+
255
+ Returns:
256
+ (list[int]): A list of RLE counts for each mask.
257
+ """
258
+ transitions = pixels[:, 1:] != pixels[:, :-1]
259
+ row_idx, col_idx = torch.where(transitions)
260
+ col_idx = col_idx + 1
261
+
262
+ # Compute run lengths
263
+ counts = []
264
+ for i in range(pixels.shape[0]):
265
+ positions = col_idx[row_idx == i]
266
+ if len(positions):
267
+ count = torch.diff(positions).tolist()
268
+ count.insert(0, positions[0].item())
269
+ count.append(len(pixels[i]) - positions[-1].item())
270
+ else:
271
+ count = [len(pixels[i])]
272
+
273
+ # Ensure starting with background (0) count
274
+ if pixels[i][0].item() == 1:
275
+ count = [0, *count]
276
+ counts.append(count)
277
+
278
+ return counts
279
+
280
+ pred_masks = predn["masks"].transpose(2, 1).contiguous().view(len(predn["masks"]), -1) # N, H*W
281
+ h, w = predn["masks"].shape[1:3]
282
+ counts = multi_encode(pred_masks)
283
+ rles = []
284
+ for c in counts:
285
+ rles.append({"size": [h, w], "counts": to_string(c)})
226
286
  super().pred_to_json(predn, pbatch)
227
287
  for i, r in enumerate(rles):
228
288
  self.jdict[-len(rles) + i]["segmentation"] = r # segmentation
@@ -231,11 +291,9 @@ class SegmentationValidator(DetectionValidator):
231
291
  """Scales predictions to the original image size."""
232
292
  return {
233
293
  **super().scale_preds(predn, pbatch),
234
- "masks": ops.scale_image(
235
- torch.as_tensor(predn["masks"], dtype=torch.uint8).permute(1, 2, 0).contiguous().cpu().numpy(),
236
- pbatch["ori_shape"],
237
- ratio_pad=pbatch["ratio_pad"],
238
- ),
294
+ "masks": ops.scale_masks(predn["masks"][None], pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"])[
295
+ 0
296
+ ].byte(),
239
297
  }
240
298
 
241
299
  def eval_json(self, stats: dict[str, Any]) -> dict[str, Any]:
@@ -377,7 +377,7 @@ class AutoBackend(nn.Module):
377
377
  if is_input:
378
378
  if -1 in tuple(model.get_tensor_shape(name)):
379
379
  dynamic = True
380
- context.set_input_shape(name, tuple(model.get_tensor_profile_shape(name, 0)[1]))
380
+ context.set_input_shape(name, tuple(model.get_tensor_profile_shape(name, 0)[2]))
381
381
  if dtype == np.float16:
382
382
  fp16 = True
383
383
  else:
@@ -7,10 +7,7 @@
7
7
  <meta charset="UTF-8" />
8
8
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
9
9
  <title>Semantic Image Search</title>
10
- <link
11
- href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap"
12
- rel="stylesheet"
13
- />
10
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;600&display=swap" rel="stylesheet" />
14
11
  <style>
15
12
  body {
16
13
  background: linear-gradient(135deg, #f0f4ff, #f9fbff);
@@ -138,19 +135,9 @@
138
135
  <button type="submit">Search</button>
139
136
  {% if results %}
140
137
  <div class="top-k-buttons">
141
- <button type="button" class="topk-btn" onclick="filterResults(5)">
142
- Top 5
143
- </button>
144
- <button
145
- type="button"
146
- class="topk-btn active"
147
- onclick="filterResults(10)"
148
- >
149
- Top 10
150
- </button>
151
- <button type="button" class="topk-btn" onclick="filterResults(30)">
152
- Top 30
153
- </button>
138
+ <button type="button" class="topk-btn" onclick="filterResults(5)">Top 5</button>
139
+ <button type="button" class="topk-btn active" onclick="filterResults(10)">Top 10</button>
140
+ <button type="button" class="topk-btn" onclick="filterResults(30)">Top 30</button>
154
141
  </div>
155
142
  {% endif %}
156
143
  </form>
@@ -152,9 +152,10 @@ class GPUInfo:
152
152
  """
153
153
  assert min_memory_fraction <= 1.0, f"min_memory_fraction must be <= 1.0, got {min_memory_fraction}"
154
154
  assert min_util_fraction <= 1.0, f"min_util_fraction must be <= 1.0, got {min_util_fraction}"
155
- LOGGER.info(
156
- f"Searching for {count} idle GPUs with free memory >= {min_memory_fraction * 100:.1f}% and free utilization >= {min_util_fraction * 100:.1f}%..."
155
+ criteria = (
156
+ f"free memory >= {min_memory_fraction * 100:.1f}% and free utilization >= {min_util_fraction * 100:.1f}%"
157
157
  )
158
+ LOGGER.info(f"Searching for {count} idle GPUs with {criteria}...")
158
159
 
159
160
  if count <= 0:
160
161
  return []
@@ -177,11 +178,11 @@ class GPUInfo:
177
178
  selected = [gpu["index"] for gpu in eligible_gpus[:count]]
178
179
 
179
180
  if selected:
181
+ if len(selected) < count:
182
+ LOGGER.warning(f"Requested {count} GPUs but only {len(selected)} met the idle criteria.")
180
183
  LOGGER.info(f"Selected idle CUDA devices {selected}")
181
184
  else:
182
- LOGGER.warning(
183
- f"No GPUs met criteria (Free Mem >= {min_memory_fraction * 100:.1f}% and Free Util >= {min_util_fraction * 100:.1f}%)."
184
- )
185
+ LOGGER.warning(f"No GPUs met criteria ({criteria}).")
185
186
 
186
187
  return selected
187
188
 
@@ -201,50 +201,6 @@ def clip_coords(coords, shape):
201
201
  return coords
202
202
 
203
203
 
204
- def scale_image(masks, im0_shape, ratio_pad=None):
205
- """Rescale masks to original image size.
206
-
207
- Takes resized and padded masks and rescales them back to the original image dimensions, removing any padding that
208
- was applied during preprocessing.
209
-
210
- Args:
211
- masks (np.ndarray): Resized and padded masks with shape [H, W, N] or [H, W, 3].
212
- im0_shape (tuple): Original image shape as HWC or HW (supports both).
213
- ratio_pad (tuple, optional): Ratio and padding values as ((ratio_h, ratio_w), (pad_h, pad_w)).
214
-
215
- Returns:
216
- (np.ndarray): Rescaled masks with shape [H, W, N] matching original image dimensions.
217
- """
218
- # Rescale coordinates (xyxy) from im1_shape to im0_shape
219
- im0_h, im0_w = im0_shape[:2] # supports both HWC or HW shapes
220
- im1_h, im1_w, _ = masks.shape
221
- if im1_h == im0_h and im1_w == im0_w:
222
- return masks
223
-
224
- if ratio_pad is None: # calculate from im0_shape
225
- gain = min(im1_h / im0_h, im1_w / im0_w) # gain = old / new
226
- pad = (im1_w - im0_w * gain) / 2, (im1_h - im0_h * gain) / 2 # wh padding
227
- else:
228
- pad = ratio_pad[1]
229
-
230
- pad_w, pad_h = pad
231
- top = round(pad_h - 0.1)
232
- left = round(pad_w - 0.1)
233
- bottom = im1_h - round(pad_h + 0.1)
234
- right = im1_w - round(pad_w + 0.1)
235
-
236
- if len(masks.shape) < 2:
237
- raise ValueError(f'"len of masks shape" should be 2 or 3, but got {len(masks.shape)}')
238
- masks = masks[top:bottom, left:right]
239
- # handle the cv2.resize 512 channels limitation: https://github.com/ultralytics/ultralytics/pull/21947
240
- masks = [cv2.resize(array, (im0_w, im0_h)) for array in np.array_split(masks, masks.shape[-1] // 512 + 1, axis=-1)]
241
- masks = np.concatenate(masks, axis=-1) if len(masks) > 1 else masks[0]
242
- if len(masks.shape) == 2:
243
- masks = masks[:, :, None]
244
-
245
- return masks
246
-
247
-
248
204
  def xyxy2xywh(x):
249
205
  """Convert bounding box coordinates from (x1, y1, x2, y2) format to (x, y, width, height) format where (x1, y1) is
250
206
  the top-left corner and (x2, y2) is the bottom-right corner.
@@ -559,28 +515,40 @@ def process_mask_native(protos, masks_in, bboxes, shape):
559
515
  return masks.gt_(0.0).byte()
560
516
 
561
517
 
562
- def scale_masks(masks, shape, padding: bool = True):
518
+ def scale_masks(
519
+ masks: torch.Tensor,
520
+ shape: tuple[int, int],
521
+ ratio_pad: tuple[tuple[int, int], tuple[int, int]] | None = None,
522
+ padding: bool = True,
523
+ ) -> torch.Tensor:
563
524
  """Rescale segment masks to target shape.
564
525
 
565
526
  Args:
566
527
  masks (torch.Tensor): Masks with shape (N, C, H, W).
567
- shape (tuple): Target height and width as (height, width).
528
+ shape (tuple[int, int]): Target height and width as (height, width).
529
+ ratio_pad (tuple, optional): Ratio and padding values as ((ratio_h, ratio_w), (pad_h, pad_w)).
568
530
  padding (bool): Whether masks are based on YOLO-style augmented images with padding.
569
531
 
570
532
  Returns:
571
533
  (torch.Tensor): Rescaled masks.
572
534
  """
573
- mh, mw = masks.shape[2:]
574
- gain = min(mh / shape[0], mw / shape[1]) # gain = old / new
575
- pad_w = mw - shape[1] * gain
576
- pad_h = mh - shape[0] * gain
577
- if padding:
578
- pad_w /= 2
579
- pad_h /= 2
535
+ im1_h, im1_w = masks.shape[2:]
536
+ im0_h, im0_w = shape[:2]
537
+ if im1_h == im0_h and im1_w == im0_w:
538
+ return masks
539
+
540
+ if ratio_pad is None: # calculate from im0_shape
541
+ gain = min(im1_h / im0_h, im1_w / im0_w) # gain = old / new
542
+ pad_w, pad_h = (im1_w - im0_w * gain), (im1_h - im0_h * gain) # wh padding
543
+ if padding:
544
+ pad_w /= 2
545
+ pad_h /= 2
546
+ else:
547
+ pad_w, pad_h = ratio_pad[1]
580
548
  top, left = (round(pad_h - 0.1), round(pad_w - 0.1)) if padding else (0, 0)
581
- bottom = mh - round(pad_h + 0.1)
582
- right = mw - round(pad_w + 0.1)
583
- return F.interpolate(masks[..., top:bottom, left:right], shape, mode="bilinear") # NCHW masks
549
+ bottom = im1_h - round(pad_h + 0.1)
550
+ right = im1_w - round(pad_w + 0.1)
551
+ return F.interpolate(masks[..., top:bottom, left:right].float(), shape, mode="bilinear") # NCHW masks
584
552
 
585
553
 
586
554
  def scale_coords(img1_shape, coords, img0_shape, ratio_pad=None, normalize: bool = False, padding: bool = True):
@@ -207,7 +207,7 @@ class Annotator:
207
207
  elif im.shape[2] > 3: # multispectral
208
208
  im = np.ascontiguousarray(im[..., :3])
209
209
  if self.pil: # use PIL
210
- self.im = im if input_is_pil else Image.fromarray(im)
210
+ self.im = im if input_is_pil else Image.fromarray(im) # stay in BGR since color palette is in BGR
211
211
  if self.im.mode not in {"RGB", "RGBA"}: # multispectral
212
212
  self.im = self.im.convert("RGB")
213
213
  self.draw = ImageDraw.Draw(self.im, "RGBA")
@@ -515,9 +515,10 @@ class Annotator:
515
515
  self.im = im if isinstance(im, Image.Image) else Image.fromarray(im)
516
516
  self.draw = ImageDraw.Draw(self.im)
517
517
 
518
- def result(self):
519
- """Return annotated image as array."""
520
- return np.asarray(self.im)
518
+ def result(self, pil=False):
519
+ """Return annotated image as array or PIL image."""
520
+ im = np.asarray(self.im) # self.im is in BGR
521
+ return Image.fromarray(im[..., ::-1]) if pil else im
521
522
 
522
523
  def show(self, title: str | None = None):
523
524
  """Show the annotated image."""
@@ -179,7 +179,7 @@ def select_device(device="", newline=False, verbose=True):
179
179
  cpu = device == "cpu"
180
180
  mps = device in {"mps", "mps:0"} # Apple Metal Performance Shaders (MPS)
181
181
  if cpu or mps:
182
- os.environ["CUDA_VISIBLE_DEVICES"] = "-1" # force torch.cuda.is_available() = False
182
+ os.environ["CUDA_VISIBLE_DEVICES"] = "" # force torch.cuda.is_available() = False
183
183
  elif device: # non-cpu device requested
184
184
  if device == "cuda":
185
185
  device = "0"