dgenerate-ultralytics-headless 8.3.134.post0__tar.gz → 8.3.137__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 (277) hide show
  1. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/PKG-INFO +1 -2
  2. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -2
  3. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -1
  4. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/pyproject.toml +0 -1
  5. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_cuda.py +2 -7
  6. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_exports.py +1 -6
  7. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/__init__.py +1 -1
  8. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/__init__.py +4 -4
  9. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/exporter.py +5 -5
  10. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/model.py +1 -1
  11. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/world/train.py +65 -19
  12. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/world/train_world.py +1 -0
  13. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/yoloe/train.py +10 -39
  14. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/tasks.py +41 -24
  15. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/text_model.py +1 -0
  16. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/checks.py +5 -0
  17. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/metrics.py +51 -22
  18. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/plotting.py +18 -12
  19. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/LICENSE +0 -0
  20. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/README.md +0 -0
  21. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  22. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  23. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  24. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  25. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/setup.cfg +0 -0
  26. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/__init__.py +0 -0
  27. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/conftest.py +0 -0
  28. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_cli.py +0 -0
  29. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_engine.py +0 -0
  30. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_integrations.py +0 -0
  31. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_python.py +0 -0
  32. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/tests/test_solutions.py +0 -0
  33. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/assets/bus.jpg +0 -0
  34. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/assets/zidane.jpg +0 -0
  35. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  36. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  37. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  38. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  39. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  40. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  41. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  42. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  43. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  44. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  45. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  46. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  47. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  48. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  49. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco.yaml +0 -0
  50. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  51. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  52. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  53. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  54. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  55. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/signature.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/datasets/xView.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/default.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/__init__.py +0 -0
  127. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/annotator.py +0 -0
  128. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/augment.py +0 -0
  129. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/base.py +0 -0
  130. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/build.py +0 -0
  131. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/converter.py +0 -0
  132. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/dataset.py +0 -0
  133. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/loaders.py +0 -0
  134. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/scripts/download_weights.sh +0 -0
  135. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/scripts/get_coco.sh +0 -0
  136. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/scripts/get_coco128.sh +0 -0
  137. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  138. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/split.py +0 -0
  139. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/split_dota.py +0 -0
  140. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/data/utils.py +0 -0
  141. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/__init__.py +0 -0
  142. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/model.py +0 -0
  143. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/predictor.py +0 -0
  144. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/results.py +0 -0
  145. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/trainer.py +0 -0
  146. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/tuner.py +0 -0
  147. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/engine/validator.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/hub/__init__.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/hub/auth.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/hub/google/__init__.py +0 -0
  151. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/hub/session.py +0 -0
  152. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/hub/utils.py +0 -0
  153. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/__init__.py +0 -0
  154. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/fastsam/__init__.py +0 -0
  155. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/fastsam/model.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/fastsam/predict.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/fastsam/utils.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/fastsam/val.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/nas/__init__.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/nas/model.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/nas/predict.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/nas/val.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/rtdetr/__init__.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/rtdetr/model.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/rtdetr/predict.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/rtdetr/train.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/rtdetr/val.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/__init__.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/amg.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/build.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/model.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/__init__.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/blocks.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/decoders.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/encoders.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/sam.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/transformer.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/modules/utils.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/sam/predict.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/utils/__init__.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/utils/loss.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/utils/ops.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/__init__.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/classify/__init__.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/classify/predict.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/classify/train.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/classify/val.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/detect/__init__.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/detect/predict.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/detect/train.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/detect/val.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/obb/__init__.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/obb/predict.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/obb/train.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/obb/val.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/pose/__init__.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/pose/predict.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/pose/train.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/pose/val.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/segment/__init__.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/segment/predict.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/segment/train.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/segment/val.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/world/__init__.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/models/yolo/yoloe/val.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/__init__.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/autobackend.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/__init__.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/activation.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/block.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/conv.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/head.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/transformer.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/nn/modules/utils.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/__init__.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/ai_gym.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/analytics.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/config.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/distance_calculation.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/heatmap.py +0 -0
  226. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/instance_segmentation.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/object_blurrer.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/object_counter.py +0 -0
  229. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/object_cropper.py +0 -0
  230. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/parking_management.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/queue_management.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/region_counter.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/security_alarm.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/similarity_search.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/solutions.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/speed_estimation.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/streamlit_inference.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/templates/similarity-search.html +0 -0
  239. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/trackzone.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/solutions/vision_eye.py +0 -0
  241. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/__init__.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/basetrack.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/bot_sort.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/byte_tracker.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/track.py +0 -0
  246. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/utils/__init__.py +0 -0
  247. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/utils/gmc.py +0 -0
  248. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/trackers/utils/matching.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/__init__.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/autobatch.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/autodevice.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/benchmarks.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/__init__.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/base.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/clearml.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/comet.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/dvc.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/hub.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/mlflow.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/neptune.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/raytune.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/callbacks/wb.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/dist.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/downloads.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/errors.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/export.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/files.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/instance.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/loss.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/ops.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/patches.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/tal.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/torch_utils.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/ultralytics/utils/triton.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.134.post0 → dgenerate_ultralytics_headless-8.3.137}/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.134.post0
3
+ Version: 8.3.137
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>
@@ -46,7 +46,6 @@ Requires-Dist: tqdm>=4.64.0
46
46
  Requires-Dist: psutil
47
47
  Requires-Dist: py-cpuinfo
48
48
  Requires-Dist: pandas>=1.1.4
49
- Requires-Dist: seaborn>=0.11.0
50
49
  Requires-Dist: ultralytics-thop>=2.0.0
51
50
  Provides-Extra: dev
52
51
  Requires-Dist: ipython; extra == "dev"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.134.post0
3
+ Version: 8.3.137
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>
@@ -46,7 +46,6 @@ Requires-Dist: tqdm>=4.64.0
46
46
  Requires-Dist: psutil
47
47
  Requires-Dist: py-cpuinfo
48
48
  Requires-Dist: pandas>=1.1.4
49
- Requires-Dist: seaborn>=0.11.0
50
49
  Requires-Dist: ultralytics-thop>=2.0.0
51
50
  Provides-Extra: dev
52
51
  Requires-Dist: ipython; extra == "dev"
@@ -11,7 +11,6 @@ tqdm>=4.64.0
11
11
  psutil
12
12
  py-cpuinfo
13
13
  pandas>=1.1.4
14
- seaborn>=0.11.0
15
14
  ultralytics-thop>=2.0.0
16
15
 
17
16
  [:sys_platform == "win32"]
@@ -75,7 +75,6 @@ dependencies = [
75
75
  "psutil", # system utilization
76
76
  "py-cpuinfo", # display CPU info
77
77
  "pandas>=1.1.4",
78
- "seaborn>=0.11.0", # plotting
79
78
  "ultralytics-thop>=2.0.0", # FLOPs computation https://github.com/ultralytics/thop
80
79
  ]
81
80
 
@@ -41,7 +41,7 @@ def test_amp():
41
41
 
42
42
 
43
43
  @pytest.mark.slow
44
- # @pytest.mark.skipif(IS_JETSON, reason="Temporary disable ONNX for Jetson")
44
+ @pytest.mark.skipif(IS_JETSON, reason="Temporary disable ONNX for Jetson")
45
45
  @pytest.mark.skipif(not DEVICES, reason="No CUDA devices available")
46
46
  @pytest.mark.parametrize(
47
47
  "task, dynamic, int8, half, batch, simplify, nms",
@@ -50,12 +50,7 @@ def test_amp():
50
50
  for task, dynamic, int8, half, batch, simplify, nms in product(
51
51
  TASKS, [True, False], [False], [False], [1, 2], [True, False], [True, False]
52
52
  )
53
- if not (
54
- (int8 and half)
55
- or (task == "classify" and nms)
56
- or (task == "obb" and nms and (not TORCH_1_13 or IS_JETSON)) # obb nms fails on NVIDIA Jetson
57
- or (simplify and dynamic) # onnxslim is slow when dynamic=True
58
- )
53
+ if not ((int8 and half) or (task == "classify" and nms) or (task == "obb" and nms and not TORCH_1_13))
59
54
  ],
60
55
  )
61
56
  def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
@@ -83,12 +83,7 @@ def test_export_openvino_matrix(task, dynamic, int8, half, batch, nms):
83
83
  for task, dynamic, int8, half, batch, simplify, nms in product(
84
84
  TASKS, [True, False], [False], [False], [1, 2], [True, False], [True, False]
85
85
  )
86
- if not (
87
- (int8 and half)
88
- or (task == "classify" and nms)
89
- or (task == "obb" and nms and not TORCH_1_13)
90
- or (simplify and dynamic) # onnxslim is slow when dynamic=True
91
- )
86
+ if not ((int8 and half) or (task == "classify" and nms) or (task == "obb" and nms and not TORCH_1_13))
92
87
  ],
93
88
  )
94
89
  def test_export_onnx_matrix(task, dynamic, int8, half, batch, simplify, nms):
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.134.post0"
3
+ __version__ = "8.3.137"
4
4
 
5
5
  import os
6
6
 
@@ -7,8 +7,6 @@ from pathlib import Path
7
7
  from types import SimpleNamespace
8
8
  from typing import Any, Dict, List, Union
9
9
 
10
- import cv2
11
-
12
10
  from ultralytics import __version__
13
11
  from ultralytics.utils import (
14
12
  ASSETS,
@@ -707,6 +705,8 @@ def handle_yolo_solutions(args: List[str]) -> None:
707
705
  ]
708
706
  )
709
707
  else:
708
+ import cv2 # Only needed for cap and vw functionality
709
+
710
710
  from ultralytics import solutions
711
711
 
712
712
  solution = getattr(solutions, SOLUTION_MAP[solution_name])(is_cli=True, **overrides) # class i.e ObjectCounter
@@ -732,7 +732,7 @@ def handle_yolo_solutions(args: List[str]) -> None:
732
732
  results = solution(frame, f_n := f_n + 1) if solution_name == "analytics" else solution(frame)
733
733
  if solution_name != "crop":
734
734
  vw.write(results.plot_im)
735
- if cv2.waitKey(1) & 0xFF == ord("q"):
735
+ if solution.CFG["show"] and cv2.waitKey(1) & 0xFF == ord("q"):
736
736
  break
737
737
  finally:
738
738
  cap.release()
@@ -919,7 +919,7 @@ def entrypoint(debug: str = "") -> None:
919
919
  if task not in TASKS:
920
920
  if task == "track":
921
921
  LOGGER.warning(
922
- "invalid 'task=track', setting 'task=detect' and 'mode=track'. Valid tasks are {TASKS}.\n{CLI_HELP_MSG}."
922
+ f"invalid 'task=track', setting 'task=detect' and 'mode=track'. Valid tasks are {TASKS}.\n{CLI_HELP_MSG}."
923
923
  )
924
924
  task, mode = "detect", "track"
925
925
  else:
@@ -557,7 +557,7 @@ class Exporter:
557
557
  """YOLO ONNX export."""
558
558
  requirements = ["onnx>=1.12.0,<1.18.0"]
559
559
  if self.args.simplify:
560
- requirements += ["onnxslim>=0.1.46", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
560
+ requirements += ["onnxslim>=0.1.53", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
561
561
  check_requirements(requirements)
562
562
  import onnx # noqa
563
563
 
@@ -926,9 +926,9 @@ class Exporter:
926
926
  "sng4onnx>=1.0.1", # required by 'onnx2tf' package
927
927
  "onnx_graphsurgeon>=0.3.26", # required by 'onnx2tf' package
928
928
  "ai-edge-litert>=1.2.0", # required by 'onnx2tf' package
929
- "onnx>=1.12.0",
929
+ "onnx>=1.12.0,<1.18.0",
930
930
  "onnx2tf>=1.26.3",
931
- "onnxslim>=0.1.46",
931
+ "onnxslim>=0.1.53",
932
932
  "onnxruntime-gpu" if cuda else "onnxruntime",
933
933
  "protobuf>=5",
934
934
  ),
@@ -943,8 +943,6 @@ class Exporter:
943
943
  verbose=True,
944
944
  msg="https://github.com/ultralytics/ultralytics/issues/5161",
945
945
  )
946
- import onnx2tf
947
-
948
946
  f = Path(str(self.file).replace(self.file.suffix, "_saved_model"))
949
947
  if f.is_dir():
950
948
  shutil.rmtree(f) # delete output folder
@@ -971,6 +969,8 @@ class Exporter:
971
969
  np.save(str(tmp_file), images.numpy().astype(np.float32)) # BHWC
972
970
  np_data = [["images", tmp_file, [[[[0, 0, 0]]]], [[[[255, 255, 255]]]]]]
973
971
 
972
+ import onnx2tf # scoped for after ONNX export for reduced conflict during import
973
+
974
974
  LOGGER.info(f"{prefix} starting TFLite export with onnx2tf {onnx2tf.__version__}...")
975
975
  keras_model = onnx2tf.convert(
976
976
  input_onnx_file_path=f_onnx,
@@ -331,7 +331,7 @@ class YOLOE(Model):
331
331
  if len(visual_prompts):
332
332
  num_cls = (
333
333
  max(len(set(c)) for c in visual_prompts["cls"])
334
- if isinstance(source, list) # means multiple images
334
+ if isinstance(source, list) and refer_image is None # means multiple images
335
335
  else len(set(visual_prompts["cls"]))
336
336
  )
337
337
  self.model.model[-1].nc = num_cls
@@ -1,11 +1,14 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  import itertools
4
+ from pathlib import Path
5
+
6
+ import torch
4
7
 
5
8
  from ultralytics.data import build_yolo_dataset
6
- from ultralytics.models import yolo
9
+ from ultralytics.models.yolo.detect import DetectionTrainer
7
10
  from ultralytics.nn.tasks import WorldModel
8
- from ultralytics.utils import DEFAULT_CFG, RANK, checks
11
+ from ultralytics.utils import DEFAULT_CFG, LOGGER, RANK
9
12
  from ultralytics.utils.torch_utils import de_parallel
10
13
 
11
14
 
@@ -15,13 +18,9 @@ def on_pretrain_routine_end(trainer):
15
18
  # Set class names for evaluation
16
19
  names = [name.split("/")[0] for name in list(trainer.test_loader.dataset.data["names"].values())]
17
20
  de_parallel(trainer.ema.ema).set_classes(names, cache_clip_model=False)
18
- device = next(trainer.model.parameters()).device
19
- trainer.text_model, _ = trainer.clip.load("ViT-B/32", device=device)
20
- for p in trainer.text_model.parameters():
21
- p.requires_grad_(False)
22
21
 
23
22
 
24
- class WorldTrainer(yolo.detect.DetectionTrainer):
23
+ class WorldTrainer(DetectionTrainer):
25
24
  """
26
25
  A class to fine-tune a world model on a close-set dataset.
27
26
 
@@ -54,14 +53,7 @@ class WorldTrainer(yolo.detect.DetectionTrainer):
54
53
  if overrides is None:
55
54
  overrides = {}
56
55
  super().__init__(cfg, overrides, _callbacks)
57
-
58
- # Import and assign clip
59
- try:
60
- import clip
61
- except ImportError:
62
- checks.check_requirements("git+https://github.com/ultralytics/CLIP.git")
63
- import clip
64
- self.clip = clip
56
+ self.text_embeddings = None
65
57
 
66
58
  def get_model(self, cfg=None, weights=None, verbose=True):
67
59
  """
@@ -102,18 +94,72 @@ class WorldTrainer(yolo.detect.DetectionTrainer):
102
94
  (Dataset): YOLO dataset configured for training or validation.
103
95
  """
104
96
  gs = max(int(de_parallel(self.model).stride.max() if self.model else 0), 32)
105
- return build_yolo_dataset(
97
+ dataset = build_yolo_dataset(
106
98
  self.args, img_path, batch, self.data, mode=mode, rect=mode == "val", stride=gs, multi_modal=mode == "train"
107
99
  )
100
+ if mode == "train":
101
+ self.set_text_embeddings([dataset], batch) # cache text embeddings to accelerate training
102
+ return dataset
103
+
104
+ def set_text_embeddings(self, datasets, batch):
105
+ """
106
+ Set text embeddings for datasets to accelerate training by caching category names.
107
+
108
+ This method collects unique category names from all datasets, then generates and caches text embeddings
109
+ for these categories to improve training efficiency.
110
+
111
+ Args:
112
+ datasets (List[Dataset]): List of datasets from which to extract category names.
113
+ batch (int | None): Batch size used for processing.
114
+
115
+ Notes:
116
+ This method collects category names from datasets that have the 'category_names' attribute,
117
+ then uses the first dataset's image path to determine where to cache the generated text embeddings.
118
+ """
119
+ text_embeddings = {}
120
+ for dataset in datasets:
121
+ if not hasattr(dataset, "category_names"):
122
+ continue
123
+ text_embeddings.update(
124
+ self.generate_text_embeddings(
125
+ list(dataset.category_names), batch, cache_dir=Path(dataset.img_path).parent
126
+ )
127
+ )
128
+ self.text_embeddings = text_embeddings
129
+
130
+ def generate_text_embeddings(self, texts, batch, cache_dir):
131
+ """
132
+ Generate text embeddings for a list of text samples.
133
+
134
+ Args:
135
+ texts (List[str]): List of text samples to encode.
136
+ batch (int): Batch size for processing.
137
+ cache_dir (Path): Directory to save/load cached embeddings.
138
+
139
+ Returns:
140
+ (dict): Dictionary mapping text samples to their embeddings.
141
+ """
142
+ model = "clip:ViT-B/32"
143
+ cache_path = cache_dir / f"text_embeddings_{model.replace(':', '_').replace('/', '_')}.pt"
144
+ if cache_path.exists():
145
+ LOGGER.info(f"Reading existed cache from '{cache_path}'")
146
+ txt_map = torch.load(cache_path)
147
+ if sorted(txt_map.keys()) == sorted(texts):
148
+ return txt_map
149
+ LOGGER.info(f"Caching text embeddings to '{cache_path}'")
150
+ assert self.model is not None
151
+ txt_feats = self.model.get_text_pe(texts, batch, cache_clip_model=False)
152
+ txt_map = dict(zip(texts, txt_feats.squeeze(0)))
153
+ torch.save(txt_map, cache_path)
154
+ return txt_map
108
155
 
109
156
  def preprocess_batch(self, batch):
110
157
  """Preprocess a batch of images and text for YOLOWorld training."""
111
- batch = super().preprocess_batch(batch)
158
+ batch = DetectionTrainer.preprocess_batch(self, batch)
112
159
 
113
160
  # Add text features
114
161
  texts = list(itertools.chain(*batch["texts"]))
115
- text_token = self.clip.tokenize(texts).to(batch["img"].device)
116
- txt_feats = self.text_model.encode_text(text_token).to(dtype=batch["img"].dtype) # torch.float32
162
+ txt_feats = torch.stack([self.text_embeddings[text] for text in texts]).to(self.device)
117
163
  txt_feats = txt_feats / txt_feats.norm(p=2, dim=-1, keepdim=True)
118
164
  batch["txt_feats"] = txt_feats.reshape(len(batch["texts"]), -1, txt_feats.shape[-1])
119
165
  return batch
@@ -100,6 +100,7 @@ class WorldTrainerFromScratch(WorldTrainer):
100
100
  else build_grounding(self.args, im_path["img_path"], im_path["json_file"], batch, stride=gs)
101
101
  for im_path in img_path
102
102
  ]
103
+ self.set_text_embeddings(datasets, batch) # cache text embeddings to accelerate training
103
104
  return YOLOConcatDataset(datasets) if len(datasets) > 1 else datasets[0]
104
105
 
105
106
  def get_dataset(self):
@@ -2,7 +2,6 @@
2
2
 
3
3
  import itertools
4
4
  from copy import copy, deepcopy
5
- from pathlib import Path
6
5
 
7
6
  import torch
8
7
 
@@ -157,40 +156,7 @@ class YOLOETrainerFromScratch(YOLOETrainer, WorldTrainerFromScratch):
157
156
  Returns:
158
157
  (YOLOConcatDataset | Dataset): The constructed dataset for training or validation.
159
158
  """
160
- datasets = WorldTrainerFromScratch.build_dataset(self, img_path, mode, batch)
161
- if mode == "train":
162
- self.set_text_embeddings(
163
- datasets.datasets if hasattr(datasets, "datasets") else [datasets], batch
164
- ) # cache text embeddings to accelerate training
165
- return datasets
166
-
167
- def set_text_embeddings(self, datasets, batch):
168
- """
169
- Set text embeddings for datasets to accelerate training by caching category names.
170
-
171
- This method collects unique category names from all datasets, then generates and caches text embeddings
172
- for these categories to improve training efficiency.
173
-
174
- Args:
175
- datasets (List[Dataset]): List of datasets from which to extract category names.
176
- batch (int | None): Batch size used for processing.
177
-
178
- Notes:
179
- This method collects category names from datasets that have the 'category_names' attribute,
180
- then uses the first dataset's image path to determine where to cache the generated text embeddings.
181
- """
182
- # TODO: open up an interface to determine whether to do cache
183
- category_names = set()
184
- for dataset in datasets:
185
- if not hasattr(dataset, "category_names"):
186
- continue
187
- category_names |= dataset.category_names
188
-
189
- # TODO: enable to update the path or use a more general way to get the path
190
- img_path = datasets[0].img_path
191
- self.text_embeddings = self.generate_text_embeddings(
192
- category_names, batch, cache_path=Path(img_path).parent / "text_embeddings.pt"
193
- )
159
+ return WorldTrainerFromScratch.build_dataset(self, img_path, mode, batch)
194
160
 
195
161
  def preprocess_batch(self, batch):
196
162
  """Process batch for training, moving text features to the appropriate device."""
@@ -202,23 +168,28 @@ class YOLOETrainerFromScratch(YOLOETrainer, WorldTrainerFromScratch):
202
168
  batch["txt_feats"] = txt_feats
203
169
  return batch
204
170
 
205
- def generate_text_embeddings(self, texts, batch, cache_path="embeddings.pt"):
171
+ def generate_text_embeddings(self, texts, batch, cache_dir):
206
172
  """
207
173
  Generate text embeddings for a list of text samples.
208
174
 
209
175
  Args:
210
176
  texts (List[str]): List of text samples to encode.
211
177
  batch (int): Batch size for processing.
212
- cache_path (str | Path): Path to save/load cached embeddings.
178
+ cache_dir (Path): Directory to save/load cached embeddings.
213
179
 
214
180
  Returns:
215
181
  (dict): Dictionary mapping text samples to their embeddings.
216
182
  """
183
+ model = "mobileclip:blt"
184
+ cache_path = cache_dir / f"text_embeddings_{model.replace(':', '_').replace('/', '_')}.pt"
217
185
  if cache_path.exists():
218
186
  LOGGER.info(f"Reading existed cache from '{cache_path}'")
219
- return torch.load(cache_path)
187
+ txt_map = torch.load(cache_path)
188
+ if sorted(txt_map.keys()) == sorted(texts):
189
+ return txt_map
190
+ LOGGER.info(f"Caching text embeddings to '{cache_path}'")
220
191
  assert self.model is not None
221
- txt_feats = self.model.get_text_pe(texts, batch, without_reprta=True)
192
+ txt_feats = self.model.get_text_pe(texts, batch, without_reprta=True, cache_clip_model=False)
222
193
  txt_map = dict(zip(texts, txt_feats.squeeze(0)))
223
194
  torch.save(txt_map, cache_path)
224
195
  return txt_map
@@ -146,6 +146,8 @@ class BaseModel(torch.nn.Module):
146
146
  (torch.Tensor): The last output of the model.
147
147
  """
148
148
  y, dt, embeddings = [], [], [] # outputs
149
+ embed = frozenset(embed) if embed is not None else {-1}
150
+ max_idx = max(embed)
149
151
  for m in self.model:
150
152
  if m.f != -1: # if not from previous layer
151
153
  x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers
@@ -155,9 +157,9 @@ class BaseModel(torch.nn.Module):
155
157
  y.append(x if m.i in self.save else None) # save output
156
158
  if visualize:
157
159
  feature_visualization(x, m.type, m.i, save_dir=visualize)
158
- if embed and m.i in embed:
160
+ if m.i in embed:
159
161
  embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
160
- if m.i == max(embed):
162
+ if m.i == max_idx:
161
163
  return torch.unbind(torch.cat(embeddings, 1), dim=0)
162
164
  return x
163
165
 
@@ -677,6 +679,8 @@ class RTDETRDetectionModel(DetectionModel):
677
679
  (torch.Tensor): Model's output tensor.
678
680
  """
679
681
  y, dt, embeddings = [], [], [] # outputs
682
+ embed = frozenset(embed) if embed is not None else {-1}
683
+ max_idx = max(embed)
680
684
  for m in self.model[:-1]: # except the head part
681
685
  if m.f != -1: # if not from previous layer
682
686
  x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers
@@ -686,9 +690,9 @@ class RTDETRDetectionModel(DetectionModel):
686
690
  y.append(x if m.i in self.save else None) # save output
687
691
  if visualize:
688
692
  feature_visualization(x, m.type, m.i, save_dir=visualize)
689
- if embed and m.i in embed:
693
+ if m.i in embed:
690
694
  embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
691
- if m.i == max(embed):
695
+ if m.i == max_idx:
692
696
  return torch.unbind(torch.cat(embeddings, 1), dim=0)
693
697
  head = self.model[-1]
694
698
  x = head([y[j] for j in head.f], batch) # head inference
@@ -721,24 +725,33 @@ class WorldModel(DetectionModel):
721
725
  batch (int): Batch size for processing text tokens.
722
726
  cache_clip_model (bool): Whether to cache the CLIP model.
723
727
  """
724
- try:
725
- import clip
726
- except ImportError:
727
- check_requirements("git+https://github.com/ultralytics/CLIP.git")
728
- import clip
729
-
730
- if (
731
- not getattr(self, "clip_model", None) and cache_clip_model
732
- ): # for backwards compatibility of models lacking clip_model attribute
733
- self.clip_model = clip.load("ViT-B/32")[0]
734
- model = self.clip_model if cache_clip_model else clip.load("ViT-B/32")[0]
735
- device = next(model.parameters()).device
736
- text_token = clip.tokenize(text).to(device)
728
+ self.txt_feats = self.get_text_pe(text, batch=batch, cache_clip_model=cache_clip_model)
729
+ self.model[-1].nc = len(text)
730
+
731
+ @smart_inference_mode()
732
+ def get_text_pe(self, text, batch=80, cache_clip_model=True):
733
+ """
734
+ Set classes in advance so that model could do offline-inference without clip model.
735
+
736
+ Args:
737
+ text (List[str]): List of class names.
738
+ batch (int): Batch size for processing text tokens.
739
+ cache_clip_model (bool): Whether to cache the CLIP model.
740
+
741
+ Returns:
742
+ (torch.Tensor): Text positional embeddings.
743
+ """
744
+ from ultralytics.nn.text_model import build_text_model
745
+
746
+ device = next(self.model.parameters()).device
747
+ if not getattr(self, "clip_model", None) and cache_clip_model:
748
+ # For backwards compatibility of models lacking clip_model attribute
749
+ self.clip_model = build_text_model("clip:ViT-B/32", device=device)
750
+ model = self.clip_model if cache_clip_model else build_text_model("clip:ViT-B/32", device=device)
751
+ text_token = model.tokenize(text)
737
752
  txt_feats = [model.encode_text(token).detach() for token in text_token.split(batch)]
738
753
  txt_feats = txt_feats[0] if len(txt_feats) == 1 else torch.cat(txt_feats, dim=0)
739
- txt_feats = txt_feats / txt_feats.norm(p=2, dim=-1, keepdim=True)
740
- self.txt_feats = txt_feats.reshape(-1, len(text), txt_feats.shape[-1])
741
- self.model[-1].nc = len(text)
754
+ return txt_feats.reshape(-1, len(text), txt_feats.shape[-1])
742
755
 
743
756
  def predict(self, x, profile=False, visualize=False, txt_feats=None, augment=False, embed=None):
744
757
  """
@@ -760,6 +773,8 @@ class WorldModel(DetectionModel):
760
773
  txt_feats = txt_feats.expand(x.shape[0], -1, -1)
761
774
  ori_txt_feats = txt_feats.clone()
762
775
  y, dt, embeddings = [], [], [] # outputs
776
+ embed = frozenset(embed) if embed is not None else {-1}
777
+ max_idx = max(embed)
763
778
  for m in self.model: # except the head part
764
779
  if m.f != -1: # if not from previous layer
765
780
  x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers
@@ -777,9 +792,9 @@ class WorldModel(DetectionModel):
777
792
  y.append(x if m.i in self.save else None) # save output
778
793
  if visualize:
779
794
  feature_visualization(x, m.type, m.i, save_dir=visualize)
780
- if embed and m.i in embed:
795
+ if m.i in embed:
781
796
  embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
782
- if m.i == max(embed):
797
+ if m.i == max_idx:
783
798
  return torch.unbind(torch.cat(embeddings, 1), dim=0)
784
799
  return x
785
800
 
@@ -976,6 +991,8 @@ class YOLOEModel(DetectionModel):
976
991
  """
977
992
  y, dt, embeddings = [], [], [] # outputs
978
993
  b = x.shape[0]
994
+ embed = frozenset(embed) if embed is not None else {-1}
995
+ max_idx = max(embed)
979
996
  for m in self.model: # except the head part
980
997
  if m.f != -1: # if not from previous layer
981
998
  x = y[m.f] if isinstance(m.f, int) else [x if j == -1 else y[j] for j in m.f] # from earlier layers
@@ -997,9 +1014,9 @@ class YOLOEModel(DetectionModel):
997
1014
  y.append(x if m.i in self.save else None) # save output
998
1015
  if visualize:
999
1016
  feature_visualization(x, m.type, m.i, save_dir=visualize)
1000
- if embed and m.i in embed:
1017
+ if m.i in embed:
1001
1018
  embeddings.append(torch.nn.functional.adaptive_avg_pool2d(x, (1, 1)).squeeze(-1).squeeze(-1)) # flatten
1002
- if m.i == max(embed):
1019
+ if m.i == max_idx:
1003
1020
  return torch.unbind(torch.cat(embeddings, 1), dim=0)
1004
1021
  return x
1005
1022
 
@@ -324,6 +324,7 @@ class MobileCLIPTS(TextModel):
324
324
  >>> features.shape
325
325
  torch.Size([2, 512]) # Actual dimension depends on model size
326
326
  """
327
+ # NOTE: no need to do normalization here as it's embedded in the torchscript model
327
328
  return self.encoder(texts)
328
329
 
329
330
 
@@ -1,5 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ import functools
3
4
  import glob
4
5
  import inspect
5
6
  import math
@@ -79,6 +80,7 @@ def parse_requirements(file_path=ROOT.parent / "requirements.txt", package=""):
79
80
  return requirements
80
81
 
81
82
 
83
+ @functools.lru_cache
82
84
  def parse_version(version="0.0.0") -> tuple:
83
85
  """
84
86
  Convert a version string to a tuple of integers, ignoring any extra non-numeric string attached to the version.
@@ -163,6 +165,7 @@ def check_imgsz(imgsz, stride=32, min_dim=1, max_dim=2, floor=0):
163
165
  return sz
164
166
 
165
167
 
168
+ @functools.lru_cache
166
169
  def check_version(
167
170
  current: str = "0.0.0",
168
171
  required: str = "0.0.0",
@@ -296,6 +299,7 @@ def check_pip_update_available():
296
299
 
297
300
 
298
301
  @ThreadingLocked()
302
+ @functools.lru_cache
299
303
  def check_font(font="Arial.ttf"):
300
304
  """
301
305
  Find font locally or download to user's configuration directory if it does not already exist.
@@ -578,6 +582,7 @@ def check_is_path_safe(basedir, path):
578
582
  return path_resolved.exists() and path_resolved.parts[: len(base_dir_resolved.parts)] == base_dir_resolved.parts
579
583
 
580
584
 
585
+ @functools.lru_cache
581
586
  def check_imshow(warn=False):
582
587
  """
583
588
  Check if environment supports image displays.