dgenerate-ultralytics-headless 8.3.135__tar.gz → 8.3.138__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 (278) hide show
  1. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/PKG-INFO +1 -2
  2. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -2
  3. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -1
  4. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/pyproject.toml +0 -1
  5. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/test_cuda.py +2 -7
  6. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/test_exports.py +1 -6
  7. dgenerate_ultralytics_headless-8.3.138/tests/test_solutions.py +360 -0
  8. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/__init__.py +1 -1
  9. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/__init__.py +4 -4
  10. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/base.py +1 -1
  11. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/build.py +4 -3
  12. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/loaders.py +2 -2
  13. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/exporter.py +6 -7
  14. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/model.py +2 -2
  15. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/predictor.py +3 -10
  16. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/trainer.py +1 -1
  17. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/validator.py +1 -1
  18. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/hub/auth.py +2 -2
  19. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/hub/utils.py +8 -3
  20. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/classify/predict.py +11 -0
  21. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/obb/val.py +1 -1
  22. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/world/train.py +66 -20
  23. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/world/train_world.py +1 -0
  24. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/yoloe/train.py +10 -39
  25. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/yoloe/val.py +3 -3
  26. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/tasks.py +41 -24
  27. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/text_model.py +1 -0
  28. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/similarity_search.py +3 -6
  29. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/streamlit_inference.py +1 -1
  30. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/__init__.py +1 -1
  31. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/hub.py +5 -4
  32. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/checks.py +16 -13
  33. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/downloads.py +7 -5
  34. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/export.py +1 -1
  35. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/metrics.py +51 -22
  36. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/plotting.py +19 -13
  37. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/torch_utils.py +3 -0
  38. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/triton.py +1 -1
  39. dgenerate_ultralytics_headless-8.3.135/tests/test_solutions.py +0 -187
  40. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/LICENSE +0 -0
  41. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/README.md +0 -0
  42. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  43. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  44. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  45. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  46. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/setup.cfg +0 -0
  47. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/__init__.py +0 -0
  48. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/conftest.py +0 -0
  49. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/test_cli.py +0 -0
  50. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/test_engine.py +0 -0
  51. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/test_integrations.py +0 -0
  52. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/tests/test_python.py +0 -0
  53. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/assets/bus.jpg +0 -0
  54. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/assets/zidane.jpg +0 -0
  55. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/signature.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/datasets/xView.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/default.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  127. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  128. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  129. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  130. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  131. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  132. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  133. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  134. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  135. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  136. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  137. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  138. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  139. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  140. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  141. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  142. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  143. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  144. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  145. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  146. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/__init__.py +0 -0
  147. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/annotator.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/augment.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/converter.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/dataset.py +0 -0
  151. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/scripts/download_weights.sh +0 -0
  152. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/scripts/get_coco.sh +0 -0
  153. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/scripts/get_coco128.sh +0 -0
  154. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  155. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/split.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/split_dota.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/data/utils.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/__init__.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/results.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/engine/tuner.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/hub/__init__.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/hub/google/__init__.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/hub/session.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/__init__.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/fastsam/__init__.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/fastsam/model.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/fastsam/predict.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/fastsam/utils.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/fastsam/val.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/nas/__init__.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/nas/model.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/nas/predict.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/nas/val.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/rtdetr/__init__.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/rtdetr/model.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/rtdetr/predict.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/rtdetr/train.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/rtdetr/val.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/__init__.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/amg.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/build.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/model.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/__init__.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/blocks.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/decoders.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/encoders.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/sam.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/transformer.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/modules/utils.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/sam/predict.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/utils/__init__.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/utils/loss.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/utils/ops.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/__init__.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/classify/__init__.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/classify/train.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/classify/val.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/detect/__init__.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/detect/predict.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/detect/train.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/detect/val.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/model.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/obb/__init__.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/obb/predict.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/obb/train.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/pose/__init__.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/pose/predict.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/pose/train.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/pose/val.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/segment/__init__.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/segment/predict.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/segment/train.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/segment/val.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/world/__init__.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/__init__.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/autobackend.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/__init__.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/activation.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/block.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/conv.py +0 -0
  226. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/head.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/transformer.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/nn/modules/utils.py +0 -0
  229. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/__init__.py +0 -0
  230. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/ai_gym.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/analytics.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/config.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/distance_calculation.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/heatmap.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/instance_segmentation.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/object_blurrer.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/object_counter.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/object_cropper.py +0 -0
  239. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/parking_management.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/queue_management.py +0 -0
  241. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/region_counter.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/security_alarm.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/solutions.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/speed_estimation.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/templates/similarity-search.html +0 -0
  246. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/trackzone.py +0 -0
  247. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/solutions/vision_eye.py +0 -0
  248. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/__init__.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/basetrack.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/bot_sort.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/byte_tracker.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/track.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/utils/__init__.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/utils/gmc.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/trackers/utils/matching.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/autobatch.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/autodevice.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/benchmarks.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/__init__.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/base.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/clearml.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/comet.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/dvc.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/mlflow.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/neptune.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/raytune.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/callbacks/wb.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/dist.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/errors.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/files.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/instance.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/loss.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/ops.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/patches.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/ultralytics/utils/tal.py +0 -0
  278. {dgenerate_ultralytics_headless-8.3.135 → dgenerate_ultralytics_headless-8.3.138}/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.135
3
+ Version: 8.3.138
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.135
3
+ Version: 8.3.138
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):
@@ -0,0 +1,360 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ # Tests Ultralytics Solutions: https://docs.ultralytics.com/solutions/,
4
+ # including every solution excluding DistanceCalculation and Security Alarm System.
5
+
6
+ import os
7
+ from unittest.mock import patch
8
+
9
+ import cv2
10
+ import numpy as np
11
+ import pytest
12
+
13
+ from tests import MODEL, TMP
14
+ from ultralytics import solutions
15
+ from ultralytics.utils import ASSETS_URL, IS_RASPBERRYPI, LINUX, checks
16
+ from ultralytics.utils.downloads import safe_download
17
+
18
+ # Pre-defined arguments values
19
+ SHOW = False
20
+ DEMO_VIDEO = "solutions_ci_demo.mp4" # for all the solutions, except workout, object cropping and parking management
21
+ CROP_VIDEO = "decelera_landscape_min.mov" # for object cropping solution
22
+ POSE_VIDEO = "solution_ci_pose_demo.mp4" # only for workouts monitoring solution
23
+ PARKING_VIDEO = "solution_ci_parking_demo.mp4" # only for parking management solution
24
+ PARKING_AREAS_JSON = "solution_ci_parking_areas.json" # only for parking management solution
25
+ PARKING_MODEL = "solutions_ci_parking_model.pt" # only for parking management solution
26
+ VERTICAL_VIDEO = "solution_vertical_demo.mp4" # only for vertical line counting
27
+ REGION = [(10, 200), (540, 200), (540, 180), (10, 180)] # for object counting, speed estimation and queue management
28
+ HORIZONTAL_LINE = [(10, 200), (540, 200)] # for object counting
29
+ VERTICAL_LINE = [(320, 0), (320, 400)] # for object counting
30
+
31
+ # Test configs for each solution : (name, class, needs_frame_count, video, kwargs)
32
+ SOLUTIONS = [
33
+ (
34
+ "ObjectCounter",
35
+ solutions.ObjectCounter,
36
+ False,
37
+ DEMO_VIDEO,
38
+ {"region": REGION, "model": MODEL, "show": SHOW},
39
+ ),
40
+ (
41
+ "ObjectCounter",
42
+ solutions.ObjectCounter,
43
+ False,
44
+ DEMO_VIDEO,
45
+ {"region": HORIZONTAL_LINE, "model": MODEL, "show": SHOW},
46
+ ),
47
+ (
48
+ "ObjectCounterVertical",
49
+ solutions.ObjectCounter,
50
+ False,
51
+ DEMO_VIDEO,
52
+ {"region": VERTICAL_LINE, "model": MODEL, "show": SHOW},
53
+ ),
54
+ (
55
+ "ObjectCounterwithOBB",
56
+ solutions.ObjectCounter,
57
+ False,
58
+ DEMO_VIDEO,
59
+ {"region": REGION, "model": "yolo11n-obb.pt", "show": SHOW},
60
+ ),
61
+ (
62
+ "Heatmap",
63
+ solutions.Heatmap,
64
+ False,
65
+ DEMO_VIDEO,
66
+ {"colormap": cv2.COLORMAP_PARULA, "model": MODEL, "show": SHOW, "region": None},
67
+ ),
68
+ (
69
+ "HeatmapWithRegion",
70
+ solutions.Heatmap,
71
+ False,
72
+ DEMO_VIDEO,
73
+ {"colormap": cv2.COLORMAP_PARULA, "region": REGION, "model": MODEL, "show": SHOW},
74
+ ),
75
+ (
76
+ "SpeedEstimator",
77
+ solutions.SpeedEstimator,
78
+ False,
79
+ DEMO_VIDEO,
80
+ {"region": REGION, "model": MODEL, "show": SHOW},
81
+ ),
82
+ (
83
+ "QueueManager",
84
+ solutions.QueueManager,
85
+ False,
86
+ DEMO_VIDEO,
87
+ {"region": REGION, "model": MODEL, "show": SHOW},
88
+ ),
89
+ (
90
+ "LineAnalytics",
91
+ solutions.Analytics,
92
+ True,
93
+ DEMO_VIDEO,
94
+ {"analytics_type": "line", "model": MODEL, "show": SHOW, "figsize": (6.4, 3.2)},
95
+ ),
96
+ (
97
+ "PieAnalytics",
98
+ solutions.Analytics,
99
+ True,
100
+ DEMO_VIDEO,
101
+ {"analytics_type": "pie", "model": MODEL, "show": SHOW, "figsize": (6.4, 3.2)},
102
+ ),
103
+ (
104
+ "BarAnalytics",
105
+ solutions.Analytics,
106
+ True,
107
+ DEMO_VIDEO,
108
+ {"analytics_type": "bar", "model": MODEL, "show": SHOW, "figsize": (6.4, 3.2)},
109
+ ),
110
+ (
111
+ "AreaAnalytics",
112
+ solutions.Analytics,
113
+ True,
114
+ DEMO_VIDEO,
115
+ {"analytics_type": "area", "model": MODEL, "show": SHOW, "figsize": (6.4, 3.2)},
116
+ ),
117
+ ("TrackZone", solutions.TrackZone, False, DEMO_VIDEO, {"region": REGION, "model": MODEL, "show": SHOW}),
118
+ (
119
+ "ObjectCropper",
120
+ solutions.ObjectCropper,
121
+ False,
122
+ CROP_VIDEO,
123
+ {"crop_dir": str(TMP / "cropped-detections"), "model": MODEL, "show": SHOW},
124
+ ),
125
+ (
126
+ "ObjectBlurrer",
127
+ solutions.ObjectBlurrer,
128
+ False,
129
+ DEMO_VIDEO,
130
+ {"blur_ratio": 0.02, "model": MODEL, "show": SHOW},
131
+ ),
132
+ (
133
+ "InstanceSegmentation",
134
+ solutions.InstanceSegmentation,
135
+ False,
136
+ DEMO_VIDEO,
137
+ {"model": "yolo11n-seg.pt", "show": SHOW},
138
+ ),
139
+ ("VisionEye", solutions.VisionEye, False, DEMO_VIDEO, {"model": MODEL, "show": SHOW}),
140
+ (
141
+ "RegionCounter",
142
+ solutions.RegionCounter,
143
+ False,
144
+ DEMO_VIDEO,
145
+ {"region": REGION, "model": MODEL, "show": SHOW},
146
+ ),
147
+ ("AIGym", solutions.AIGym, False, POSE_VIDEO, {"kpts": [6, 8, 10], "show": SHOW}),
148
+ (
149
+ "ParkingManager",
150
+ solutions.ParkingManagement,
151
+ False,
152
+ PARKING_VIDEO,
153
+ {"model": str(TMP / PARKING_MODEL), "show": SHOW, "json_file": str(TMP / PARKING_AREAS_JSON)},
154
+ ),
155
+ (
156
+ "StreamlitInference",
157
+ solutions.Inference,
158
+ False,
159
+ None, # streamlit application don't require video file
160
+ {}, # streamlit application don't accept arguments
161
+ ),
162
+ ]
163
+
164
+
165
+ def process_video(solution, video_path, needs_frame_count=False):
166
+ """Process video with solution, feeding frames and optional frame count."""
167
+ cap = cv2.VideoCapture(video_path)
168
+ assert cap.isOpened(), f"Error reading video file {video_path}"
169
+
170
+ frame_count = 0
171
+ while cap.isOpened():
172
+ success, im0 = cap.read()
173
+ if not success:
174
+ break
175
+ frame_count += 1
176
+ im_copy = im0.copy()
177
+ args = [im_copy, frame_count] if needs_frame_count else [im_copy]
178
+ _ = solution(*args)
179
+
180
+ cap.release()
181
+
182
+
183
+ @pytest.mark.skipif(
184
+ (LINUX and checks.IS_PYTHON_3_11) or IS_RASPBERRYPI,
185
+ reason="Disabled for testing due to --slow test errors after YOLOE PR.",
186
+ )
187
+ @pytest.mark.parametrize("name, solution_class, needs_frame_count, video, kwargs", SOLUTIONS)
188
+ def test_solution(name, solution_class, needs_frame_count, video, kwargs):
189
+ """Test individual Ultralytics solution."""
190
+ if video:
191
+ if name != "ObjectCounterVertical":
192
+ safe_download(url=f"{ASSETS_URL}/{video}", dir=TMP)
193
+ else:
194
+ safe_download(url=f"{ASSETS_URL}/{VERTICAL_VIDEO}", dir=TMP)
195
+ if name == "ParkingManager":
196
+ safe_download(url=f"{ASSETS_URL}/{PARKING_AREAS_JSON}", dir=TMP)
197
+ safe_download(url=f"{ASSETS_URL}/{PARKING_MODEL}", dir=TMP)
198
+ elif name == "StreamlitInference":
199
+ if checks.check_imshow(): # do not merge with elif above
200
+ solution_class(**kwargs).inference() # requires interactive GUI environment
201
+ return
202
+
203
+ video = VERTICAL_VIDEO if name == "ObjectCounterVertical" else video
204
+ process_video(
205
+ solution=solution_class(**kwargs),
206
+ video_path=str(TMP / video),
207
+ needs_frame_count=needs_frame_count,
208
+ )
209
+
210
+
211
+ @pytest.mark.slow
212
+ @pytest.mark.skipif(checks.IS_PYTHON_3_8, reason="Disabled due to unsupported CLIP dependencies.")
213
+ @pytest.mark.skipif(IS_RASPBERRYPI, reason="Disabled due to slow performance on Raspberry Pi.")
214
+ def test_similarity_search():
215
+ """Test similarity search solution."""
216
+ searcher = solutions.VisualAISearch()
217
+ _ = searcher("a dog sitting on a bench") # Returns the results in format "- img name | similarity score"
218
+
219
+
220
+ def test_left_click_selection():
221
+ """Test distance calculation left click."""
222
+ dc = solutions.DistanceCalculation()
223
+ dc.boxes, dc.track_ids = [[10, 10, 50, 50]], [1]
224
+ dc.mouse_event_for_distance(cv2.EVENT_LBUTTONDOWN, 30, 30, None, None)
225
+ assert 1 in dc.selected_boxes
226
+
227
+
228
+ def test_right_click_reset():
229
+ """Test distance calculation right click."""
230
+ dc = solutions.DistanceCalculation()
231
+ dc.selected_boxes, dc.left_mouse_count = {1: [10, 10, 50, 50]}, 1
232
+ dc.mouse_event_for_distance(cv2.EVENT_RBUTTONDOWN, 0, 0, None, None)
233
+ assert dc.selected_boxes == {}
234
+ assert dc.left_mouse_count == 0
235
+
236
+
237
+ def test_parking_json_none():
238
+ """Test that ParkingManagement skips or errors cleanly when no JSON is provided."""
239
+ im0 = np.zeros((640, 480, 3), dtype=np.uint8)
240
+ try:
241
+ parkingmanager = solutions.ParkingManagement(json_path=None)
242
+ parkingmanager(im0)
243
+ except ValueError:
244
+ pytest.skip("Skipping test due to missing JSON.")
245
+
246
+
247
+ def test_analytics_graph_not_supported():
248
+ """Test that unsupported analytics type raises ModuleNotFoundError."""
249
+ try:
250
+ analytics = solutions.Analytics(analytics_type="test") # 'test' is unsupported
251
+ analytics.process(im0=None, frame_number=0)
252
+ assert False, "Expected ModuleNotFoundError for unsupported chart type"
253
+ except ModuleNotFoundError as e:
254
+ assert "test chart is not supported" in str(e)
255
+
256
+
257
+ def test_area_chart_padding():
258
+ """Test area chart graph update with dynamic class padding logic."""
259
+ analytics = solutions.Analytics(analytics_type="area")
260
+ analytics.update_graph(frame_number=1, count_dict={"car": 2}, plot="area")
261
+ plot_im = analytics.update_graph(frame_number=2, count_dict={"car": 3, "person": 1}, plot="area")
262
+ assert plot_im is not None
263
+
264
+
265
+ def test_config_update_method_with_invalid_argument():
266
+ """Test that update() raises ValueError for invalid config keys."""
267
+ obj = solutions.config.SolutionConfig()
268
+ try:
269
+ obj.update(invalid_key=123)
270
+ assert False, "Expected ValueError for invalid update argument"
271
+ except ValueError as e:
272
+ assert "❌ invalid_key is not a valid solution argument" in str(e)
273
+
274
+
275
+ def test_plot_with_no_masks():
276
+ """Test that instance segmentation handles cases with no masks."""
277
+ im0 = np.zeros((640, 480, 3), dtype=np.uint8)
278
+ isegment = solutions.InstanceSegmentation(model="yolo11n-seg.pt")
279
+ results = isegment(im0)
280
+ assert results.plot_im is not None
281
+
282
+
283
+ def test_streamlit_handle_video_upload_creates_file():
284
+ """Test Streamlit video upload logic saves file correctly."""
285
+ import io
286
+
287
+ fake_file = io.BytesIO(b"fake video content")
288
+ fake_file.read = fake_file.getvalue
289
+ if fake_file is not None:
290
+ g = io.BytesIO(fake_file.read())
291
+ with open("ultralytics.mp4", "wb") as out:
292
+ out.write(g.read())
293
+ output_path = "ultralytics.mp4"
294
+ else:
295
+ output_path = None
296
+ assert output_path == "ultralytics.mp4"
297
+ assert os.path.exists("ultralytics.mp4")
298
+ with open("ultralytics.mp4", "rb") as f:
299
+ assert f.read() == b"fake video content"
300
+ os.remove("ultralytics.mp4")
301
+
302
+
303
+ def test_similarity_search_app_init():
304
+ """Test SearchApp initializes with required attributes."""
305
+ app = solutions.SearchApp(device="cpu")
306
+ assert hasattr(app, "searcher")
307
+ assert hasattr(app, "run")
308
+
309
+
310
+ def test_similarity_search_complete(tmp_path):
311
+ """Test VisualAISearch end-to-end with sample image and query."""
312
+ from PIL import Image
313
+
314
+ image_dir = tmp_path / "images"
315
+ os.makedirs(image_dir, exist_ok=True)
316
+ for i in range(2):
317
+ img = Image.fromarray(np.uint8(np.random.rand(224, 224, 3) * 255))
318
+ img.save(image_dir / f"test_image_{i}.jpg")
319
+ searcher = solutions.VisualAISearch(data=str(image_dir))
320
+ results = searcher("a red and white object")
321
+ assert results
322
+
323
+
324
+ def test_distance_calculation_process_method():
325
+ """Test DistanceCalculation.process() computes distance between selected boxes."""
326
+ from ultralytics.solutions.solutions import SolutionResults
327
+
328
+ dc = solutions.DistanceCalculation()
329
+ dc.boxes, dc.track_ids, dc.clss, dc.confs = (
330
+ [[100, 100, 200, 200], [300, 300, 400, 400]],
331
+ [1, 2],
332
+ [0, 0],
333
+ [0.9, 0.95],
334
+ )
335
+ dc.selected_boxes = {1: dc.boxes[0], 2: dc.boxes[1]}
336
+ frame = np.zeros((480, 640, 3), dtype=np.uint8)
337
+ with patch.object(dc, "extract_tracks"), patch.object(dc, "display_output"), patch("cv2.setMouseCallback"):
338
+ result = dc.process(frame)
339
+ assert isinstance(result, SolutionResults)
340
+ assert result.total_tracks == 2
341
+ assert result.pixels_distance > 0
342
+
343
+
344
+ def test_object_crop_with_show_True():
345
+ """Test ObjectCropper init with show=True to cover display warning."""
346
+ solutions.ObjectCropper(show=True)
347
+
348
+
349
+ def test_display_output_method():
350
+ """Test that display_output triggers imshow, waitKey, and destroyAllWindows when enabled."""
351
+ counter = solutions.ObjectCounter(show=True)
352
+ counter.env_check = True
353
+ frame = np.zeros((100, 100, 3), dtype=np.uint8)
354
+ with patch("cv2.imshow") as mock_imshow, patch("cv2.waitKey", return_value=ord("q")) as mock_wait, patch(
355
+ "cv2.destroyAllWindows"
356
+ ) as mock_destroy:
357
+ counter.display_output(frame)
358
+ mock_imshow.assert_called_once()
359
+ mock_wait.assert_called_once()
360
+ mock_destroy.assert_called_once()
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.135"
3
+ __version__ = "8.3.138"
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,
@@ -313,7 +311,7 @@ def get_cfg(cfg: Union[str, Path, Dict, SimpleNamespace] = DEFAULT_CFG_DICT, ove
313
311
  if k in cfg and isinstance(cfg[k], (int, float)):
314
312
  cfg[k] = str(cfg[k])
315
313
  if cfg.get("name") == "model": # assign model to 'name' arg
316
- cfg["name"] = str(cfg.get("model", "")).split(".")[0]
314
+ cfg["name"] = str(cfg.get("model", "")).partition(".")[0]
317
315
  LOGGER.warning(f"'name=model' automatically updated to 'name={cfg['name']}'.")
318
316
 
319
317
  # Type and Value checks
@@ -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
@@ -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:
@@ -170,7 +170,7 @@ class BaseDataset(Dataset):
170
170
  # F += [p.parent / x.lstrip(os.sep) for x in t] # local to global path (pathlib)
171
171
  else:
172
172
  raise FileNotFoundError(f"{self.prefix}{p} does not exist")
173
- im_files = sorted(x.replace("/", os.sep) for x in f if x.split(".")[-1].lower() in IMG_FORMATS)
173
+ im_files = sorted(x.replace("/", os.sep) for x in f if x.rpartition(".")[-1].lower() in IMG_FORMATS)
174
174
  # self.img_files = sorted([x for x in f if x.suffix[1:].lower() in IMG_FORMATS]) # pathlib
175
175
  assert im_files, f"{self.prefix}No images found in {img_path}. {FORMATS_HELP_MSG}"
176
176
  except Exception as e:
@@ -200,10 +200,11 @@ def check_source(source):
200
200
  webcam, screenshot, from_img, in_memory, tensor = False, False, False, False, False
201
201
  if isinstance(source, (str, int, Path)): # int for local usb camera
202
202
  source = str(source)
203
- is_file = Path(source).suffix[1:] in (IMG_FORMATS | VID_FORMATS)
204
- is_url = source.lower().startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://"))
203
+ source_lower = source.lower()
204
+ is_file = source_lower.rpartition(".")[-1] in (IMG_FORMATS | VID_FORMATS)
205
+ is_url = source_lower.startswith(("https://", "http://", "rtsp://", "rtmp://", "tcp://"))
205
206
  webcam = source.isnumeric() or source.endswith(".streams") or (is_url and not is_file)
206
- screenshot = source.lower() == "screen"
207
+ screenshot = source_lower == "screen"
207
208
  if is_url and is_file:
208
209
  source = check_file(source) # download
209
210
  elif isinstance(source, LOADERS):
@@ -353,7 +353,7 @@ class LoadImagesAndVideos:
353
353
  # Define files as images or videos
354
354
  images, videos = [], []
355
355
  for f in files:
356
- suffix = f.split(".")[-1].lower() # Get file extension without the dot and lowercase
356
+ suffix = f.rpartition(".")[-1].lower() # Get file extension without the dot and lowercase
357
357
  if suffix in IMG_FORMATS:
358
358
  images.append(f)
359
359
  elif suffix in VID_FORMATS:
@@ -427,7 +427,7 @@ class LoadImagesAndVideos:
427
427
  else:
428
428
  # Handle image files (including HEIC)
429
429
  self.mode = "image"
430
- if path.split(".")[-1].lower() == "heic":
430
+ if path.rpartition(".")[-1].lower() == "heic":
431
431
  # Load HEIC image using Pillow with pillow-heif
432
432
  check_requirements("pillow-heif")
433
433
 
@@ -244,7 +244,6 @@ class Exporter:
244
244
 
245
245
  def __call__(self, model=None) -> str:
246
246
  """Return list of exported files/dirs after running callbacks."""
247
- self.run_callbacks("on_export_start")
248
247
  t = time.time()
249
248
  fmt = self.args.format.lower() # to lowercase
250
249
  if fmt in {"tensorrt", "trt"}: # 'engine' aliases
@@ -277,7 +276,7 @@ class Exporter:
277
276
  LOGGER.warning("TensorRT requires GPU export, automatically assigning device=0")
278
277
  self.args.device = "0"
279
278
  if fmt == "engine" and "dla" in str(self.args.device): # convert int/list to str first
280
- dla = self.args.device.split(":")[-1]
279
+ dla = self.args.device.rsplit(":", 1)[-1]
281
280
  self.args.device = "0" # update device to "0"
282
281
  assert dla in {"0", "1"}, f"Expected self.args.device='dla:0' or 'dla:1, but got {self.args.device}."
283
282
  if imx and self.args.device is None and torch.cuda.is_available():
@@ -450,7 +449,7 @@ class Exporter:
450
449
  f"\n{colorstr('PyTorch:')} starting from '{file}' with input shape {tuple(im.shape)} BCHW and "
451
450
  f"output shape(s) {self.output_shape} ({file_size(file):.1f} MB)"
452
451
  )
453
-
452
+ self.run_callbacks("on_export_start")
454
453
  # Exports
455
454
  f = [""] * len(fmts) # exported filenames
456
455
  if jit or ncnn: # TorchScript
@@ -557,7 +556,7 @@ class Exporter:
557
556
  """YOLO ONNX export."""
558
557
  requirements = ["onnx>=1.12.0,<1.18.0"]
559
558
  if self.args.simplify:
560
- requirements += ["onnxslim>=0.1.46", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
559
+ requirements += ["onnxslim>=0.1.53", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
561
560
  check_requirements(requirements)
562
561
  import onnx # noqa
563
562
 
@@ -789,7 +788,7 @@ class Exporter:
789
788
  subprocess.run(cmd, check=True)
790
789
 
791
790
  # Remove debug files
792
- pnnx_files = [x.split("=")[-1] for x in pnnx_args]
791
+ pnnx_files = [x.rsplit("=", 1)[-1] for x in pnnx_args]
793
792
  for f_debug in ("debug.bin", "debug.param", "debug2.bin", "debug2.param", *pnnx_files):
794
793
  Path(f_debug).unlink(missing_ok=True)
795
794
 
@@ -928,7 +927,7 @@ class Exporter:
928
927
  "ai-edge-litert>=1.2.0", # required by 'onnx2tf' package
929
928
  "onnx>=1.12.0,<1.18.0",
930
929
  "onnx2tf>=1.26.3",
931
- "onnxslim>=0.1.46",
930
+ "onnxslim>=0.1.53",
932
931
  "onnxruntime-gpu" if cuda else "onnxruntime",
933
932
  "protobuf>=5",
934
933
  ),
@@ -1048,7 +1047,7 @@ class Exporter:
1048
1047
  "sudo apt-get install edgetpu-compiler",
1049
1048
  ):
1050
1049
  subprocess.run(c if is_sudo_available() else c.replace("sudo ", ""), shell=True, check=True)
1051
- ver = subprocess.run(cmd, shell=True, capture_output=True, check=True).stdout.decode().split()[-1]
1050
+ ver = subprocess.run(cmd, shell=True, capture_output=True, check=True).stdout.decode().rsplit(maxsplit=1)[-1]
1052
1051
 
1053
1052
  LOGGER.info(f"\n{prefix} starting export with Edge TPU compiler {ver}...")
1054
1053
  f = str(tflite_model).replace(".tflite", "_edgetpu.tflite") # Edge TPU model
@@ -288,7 +288,7 @@ class Model(torch.nn.Module):
288
288
  weights = checks.check_file(weights, download_dir=SETTINGS["weights_dir"]) # download and return local file
289
289
  weights = checks.check_model_file_from_stem(weights) # add suffix, i.e. yolo11n -> yolo11n.pt
290
290
 
291
- if Path(weights).suffix == ".pt":
291
+ if str(weights).rpartition(".")[-1] == "pt":
292
292
  self.model, self.ckpt = attempt_load_one_weight(weights)
293
293
  self.task = self.model.args["task"]
294
294
  self.overrides = self.model.args = self._reset_ckpt_args(self.model.args)
@@ -319,7 +319,7 @@ class Model(torch.nn.Module):
319
319
  >>> model = Model("yolo11n.onnx")
320
320
  >>> model._check_is_pytorch_model() # Raises TypeError
321
321
  """
322
- pt_str = isinstance(self.model, (str, Path)) and Path(self.model).suffix == ".pt"
322
+ pt_str = isinstance(self.model, (str, Path)) and str(self.model).rpartition(".")[-1] == "pt"
323
323
  pt_module = isinstance(self.model, torch.nn.Module)
324
324
  if not (pt_module or pt_str):
325
325
  raise TypeError(
@@ -43,7 +43,7 @@ import torch
43
43
 
44
44
  from ultralytics.cfg import get_cfg, get_save_dir
45
45
  from ultralytics.data import load_inference_source
46
- from ultralytics.data.augment import LetterBox, classify_transforms
46
+ from ultralytics.data.augment import LetterBox
47
47
  from ultralytics.nn.autobackend import AutoBackend
48
48
  from ultralytics.utils import DEFAULT_CFG, LOGGER, MACOS, WINDOWS, callbacks, colorstr, ops
49
49
  from ultralytics.utils.checks import check_imgsz, check_imshow
@@ -247,15 +247,6 @@ class BasePredictor:
247
247
  Source for inference.
248
248
  """
249
249
  self.imgsz = check_imgsz(self.args.imgsz, stride=self.model.stride, min_dim=2) # check image size
250
- self.transforms = (
251
- getattr(
252
- self.model.model,
253
- "transforms",
254
- classify_transforms(self.imgsz[0]),
255
- )
256
- if self.args.task == "classify"
257
- else None
258
- )
259
250
  self.dataset = load_inference_source(
260
251
  source=source,
261
252
  batch=self.args.batch,
@@ -395,6 +386,8 @@ class BasePredictor:
395
386
 
396
387
  self.device = self.model.device # update device
397
388
  self.args.half = self.model.fp16 # update half
389
+ if hasattr(self.model, "imgsz"):
390
+ self.args.imgsz = self.model.imgsz # reuse imgsz from export metadata
398
391
  self.model.eval()
399
392
 
400
393
  def write_results(self, i, p, im, s):
@@ -578,7 +578,7 @@ class BaseTrainer:
578
578
  try:
579
579
  if self.args.task == "classify":
580
580
  data = check_cls_dataset(self.args.data)
581
- elif self.args.data.split(".")[-1] in {"yaml", "yml"} or self.args.task in {
581
+ elif self.args.data.rsplit(".", 1)[-1] in {"yaml", "yml"} or self.args.task in {
582
582
  "detect",
583
583
  "segment",
584
584
  "pose",