ultralytics 8.2.7__tar.gz → 8.2.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (219) hide show
  1. {ultralytics-8.2.7/ultralytics.egg-info → ultralytics-8.2.9}/PKG-INFO +2 -2
  2. {ultralytics-8.2.7 → ultralytics-8.2.9}/pyproject.toml +1 -1
  3. {ultralytics-8.2.7 → ultralytics-8.2.9}/tests/test_cli.py +18 -28
  4. {ultralytics-8.2.7 → ultralytics-8.2.9}/tests/test_cuda.py +11 -15
  5. {ultralytics-8.2.7 → ultralytics-8.2.9}/tests/test_engine.py +19 -20
  6. ultralytics-8.2.9/tests/test_exports.py +128 -0
  7. {ultralytics-8.2.7 → ultralytics-8.2.9}/tests/test_integrations.py +5 -10
  8. {ultralytics-8.2.7 → ultralytics-8.2.9}/tests/test_python.py +11 -99
  9. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/__init__.py +1 -1
  10. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/augment.py +1 -3
  11. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/base.py +1 -2
  12. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/build.py +5 -6
  13. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/exporter.py +37 -29
  14. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/model.py +2 -2
  15. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/trainer.py +1 -1
  16. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/parking_management.py +37 -23
  17. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/benchmarks.py +4 -3
  18. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/instance.py +6 -7
  19. {ultralytics-8.2.7 → ultralytics-8.2.9/ultralytics.egg-info}/PKG-INFO +2 -2
  20. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics.egg-info/SOURCES.txt +1 -0
  21. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics.egg-info/requires.txt +1 -1
  22. {ultralytics-8.2.7 → ultralytics-8.2.9}/LICENSE +0 -0
  23. {ultralytics-8.2.7 → ultralytics-8.2.9}/README.md +0 -0
  24. {ultralytics-8.2.7 → ultralytics-8.2.9}/setup.cfg +0 -0
  25. {ultralytics-8.2.7 → ultralytics-8.2.9}/tests/test_explorer.py +0 -0
  26. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/assets/bus.jpg +0 -0
  27. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/assets/zidane.jpg +0 -0
  28. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/__init__.py +0 -0
  29. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  30. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  31. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  32. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  33. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  34. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  35. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  36. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  37. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  38. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  39. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  40. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  41. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  42. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco.yaml +0 -0
  43. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  44. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  45. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  49. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  50. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  52. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  53. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  54. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/datasets/xView.yaml +0 -0
  55. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/default.yaml +0 -0
  56. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  57. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  58. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  59. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  60. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  61. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  62. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  63. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  64. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  65. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  66. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  67. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  68. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  69. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  70. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  71. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  72. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  73. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  74. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  75. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  76. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  77. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  78. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  79. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  80. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  81. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  82. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  83. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  84. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  85. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  86. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  87. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  88. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  89. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/__init__.py +0 -0
  90. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/annotator.py +0 -0
  91. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/converter.py +0 -0
  92. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/dataset.py +0 -0
  93. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/explorer/__init__.py +0 -0
  94. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/explorer/explorer.py +0 -0
  95. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/explorer/gui/__init__.py +0 -0
  96. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/explorer/gui/dash.py +0 -0
  97. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/explorer/utils.py +0 -0
  98. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/loaders.py +0 -0
  99. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/split_dota.py +0 -0
  100. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/data/utils.py +0 -0
  101. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/__init__.py +0 -0
  102. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/predictor.py +0 -0
  103. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/results.py +0 -0
  104. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/tuner.py +0 -0
  105. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/engine/validator.py +0 -0
  106. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/hub/__init__.py +0 -0
  107. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/hub/auth.py +0 -0
  108. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/hub/session.py +0 -0
  109. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/hub/utils.py +0 -0
  110. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/__init__.py +0 -0
  111. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/fastsam/__init__.py +0 -0
  112. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/fastsam/model.py +0 -0
  113. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/fastsam/predict.py +0 -0
  114. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/fastsam/prompt.py +0 -0
  115. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/fastsam/utils.py +0 -0
  116. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/fastsam/val.py +0 -0
  117. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/nas/__init__.py +0 -0
  118. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/nas/model.py +0 -0
  119. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/nas/predict.py +0 -0
  120. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/nas/val.py +0 -0
  121. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/rtdetr/__init__.py +0 -0
  122. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/rtdetr/model.py +0 -0
  123. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/rtdetr/predict.py +0 -0
  124. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/rtdetr/train.py +0 -0
  125. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/rtdetr/val.py +0 -0
  126. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/__init__.py +0 -0
  127. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/amg.py +0 -0
  128. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/build.py +0 -0
  129. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/model.py +0 -0
  130. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/modules/__init__.py +0 -0
  131. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/modules/decoders.py +0 -0
  132. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/modules/encoders.py +0 -0
  133. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/modules/sam.py +0 -0
  134. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  135. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/modules/transformer.py +0 -0
  136. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/sam/predict.py +0 -0
  137. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/utils/__init__.py +0 -0
  138. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/utils/loss.py +0 -0
  139. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/utils/ops.py +0 -0
  140. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/__init__.py +0 -0
  141. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/classify/__init__.py +0 -0
  142. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/classify/predict.py +0 -0
  143. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/classify/train.py +0 -0
  144. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/classify/val.py +0 -0
  145. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/detect/__init__.py +0 -0
  146. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/detect/predict.py +0 -0
  147. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/detect/train.py +0 -0
  148. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/detect/val.py +0 -0
  149. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/model.py +0 -0
  150. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/obb/__init__.py +0 -0
  151. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/obb/predict.py +0 -0
  152. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/obb/train.py +0 -0
  153. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/obb/val.py +0 -0
  154. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/pose/__init__.py +0 -0
  155. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/pose/predict.py +0 -0
  156. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/pose/train.py +0 -0
  157. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/pose/val.py +0 -0
  158. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/segment/__init__.py +0 -0
  159. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/segment/predict.py +0 -0
  160. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/segment/train.py +0 -0
  161. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/segment/val.py +0 -0
  162. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/world/__init__.py +0 -0
  163. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/world/train.py +0 -0
  164. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/models/yolo/world/train_world.py +0 -0
  165. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/__init__.py +0 -0
  166. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/autobackend.py +0 -0
  167. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/modules/__init__.py +0 -0
  168. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/modules/block.py +0 -0
  169. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/modules/conv.py +0 -0
  170. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/modules/head.py +0 -0
  171. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/modules/transformer.py +0 -0
  172. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/modules/utils.py +0 -0
  173. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/nn/tasks.py +0 -0
  174. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/__init__.py +0 -0
  175. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/ai_gym.py +0 -0
  176. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/distance_calculation.py +0 -0
  177. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/heatmap.py +0 -0
  178. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/object_counter.py +0 -0
  179. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/queue_management.py +0 -0
  180. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/solutions/speed_estimation.py +0 -0
  181. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/__init__.py +0 -0
  182. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/basetrack.py +0 -0
  183. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/bot_sort.py +0 -0
  184. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/byte_tracker.py +0 -0
  185. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/track.py +0 -0
  186. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/utils/__init__.py +0 -0
  187. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/utils/gmc.py +0 -0
  188. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  189. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/trackers/utils/matching.py +0 -0
  190. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/__init__.py +0 -0
  191. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/autobatch.py +0 -0
  192. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/__init__.py +0 -0
  193. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/base.py +0 -0
  194. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/clearml.py +0 -0
  195. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/comet.py +0 -0
  196. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/dvc.py +0 -0
  197. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/hub.py +0 -0
  198. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/mlflow.py +0 -0
  199. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/neptune.py +0 -0
  200. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/raytune.py +0 -0
  201. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  202. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/callbacks/wb.py +0 -0
  203. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/checks.py +0 -0
  204. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/dist.py +0 -0
  205. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/downloads.py +0 -0
  206. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/errors.py +0 -0
  207. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/files.py +0 -0
  208. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/loss.py +0 -0
  209. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/metrics.py +0 -0
  210. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/ops.py +0 -0
  211. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/patches.py +0 -0
  212. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/plotting.py +0 -0
  213. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/tal.py +0 -0
  214. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/torch_utils.py +0 -0
  215. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/triton.py +0 -0
  216. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics/utils/tuner.py +0 -0
  217. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics.egg-info/dependency_links.txt +0 -0
  218. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics.egg-info/entry_points.txt +0 -0
  219. {ultralytics-8.2.7 → ultralytics-8.2.9}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.7
3
+ Version: 8.2.9
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -77,7 +77,7 @@ Requires-Dist: dvclive>=2.12.0; extra == "logging"
77
77
  Provides-Extra: extra
78
78
  Requires-Dist: hub-sdk>=0.0.5; extra == "extra"
79
79
  Requires-Dist: ipython; extra == "extra"
80
- Requires-Dist: albumentations>=1.0.3; extra == "extra"
80
+ Requires-Dist: albumentations<=1.4.4,>=1.0.3; extra == "extra"
81
81
  Requires-Dist: pycocotools>=2.0.7; extra == "extra"
82
82
 
83
83
  <div align="center">
@@ -123,7 +123,7 @@ logging = [
123
123
  extra = [
124
124
  "hub-sdk>=0.0.5", # Ultralytics HUB
125
125
  "ipython", # interactive notebook
126
- "albumentations>=1.0.3", # training augmentations
126
+ "albumentations>=1.0.3,<=1.4.4", # training augmentations
127
127
  "pycocotools>=2.0.7", # COCO mAP
128
128
  ]
129
129
 
@@ -4,24 +4,14 @@ import subprocess
4
4
 
5
5
  import pytest
6
6
 
7
+ from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
7
8
  from ultralytics.utils import ASSETS, WEIGHTS_DIR, checks
8
9
 
9
- CUDA_IS_AVAILABLE = checks.cuda_is_available()
10
- CUDA_DEVICE_COUNT = checks.cuda_device_count()
11
- TASK_ARGS = [
12
- ("detect", "yolov8n", "coco8.yaml"),
13
- ("segment", "yolov8n-seg", "coco8-seg.yaml"),
14
- ("classify", "yolov8n-cls", "imagenet10"),
15
- ("pose", "yolov8n-pose", "coco8-pose.yaml"),
16
- ("obb", "yolov8n-obb", "dota8.yaml"),
17
- ] # (task, model, data)
18
- EXPORT_ARGS = [
19
- ("yolov8n", "torchscript"),
20
- ("yolov8n-seg", "torchscript"),
21
- ("yolov8n-cls", "torchscript"),
22
- ("yolov8n-pose", "torchscript"),
23
- ("yolov8n-obb", "torchscript"),
24
- ] # (model, format)
10
+ from . import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE
11
+
12
+ # Constants
13
+ TASK_MODEL_DATA = [(task, WEIGHTS_DIR / TASK2MODEL[task], TASK2DATA[task]) for task in TASKS]
14
+ MODELS = [WEIGHTS_DIR / TASK2MODEL[task] for task in TASKS]
25
15
 
26
16
 
27
17
  def run(cmd):
@@ -38,28 +28,28 @@ def test_special_modes():
38
28
  run("yolo cfg")
39
29
 
40
30
 
41
- @pytest.mark.parametrize("task,model,data", TASK_ARGS)
31
+ @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
42
32
  def test_train(task, model, data):
43
33
  """Test YOLO training for a given task, model, and data."""
44
- run(f"yolo train {task} model={model}.yaml data={data} imgsz=32 epochs=1 cache=disk")
34
+ run(f"yolo train {task} model={model} data={data} imgsz=32 epochs=1 cache=disk")
45
35
 
46
36
 
47
- @pytest.mark.parametrize("task,model,data", TASK_ARGS)
37
+ @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
48
38
  def test_val(task, model, data):
49
39
  """Test YOLO validation for a given task, model, and data."""
50
- run(f"yolo val {task} model={WEIGHTS_DIR / model}.pt data={data} imgsz=32 save_txt save_json")
40
+ run(f"yolo val {task} model={model} data={data} imgsz=32 save_txt save_json")
51
41
 
52
42
 
53
- @pytest.mark.parametrize("task,model,data", TASK_ARGS)
43
+ @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
54
44
  def test_predict(task, model, data):
55
45
  """Test YOLO prediction on sample assets for a given task and model."""
56
- run(f"yolo predict model={WEIGHTS_DIR / model}.pt source={ASSETS} imgsz=32 save save_crop save_txt")
46
+ run(f"yolo predict model={model} source={ASSETS} imgsz=32 save save_crop save_txt")
57
47
 
58
48
 
59
- @pytest.mark.parametrize("model,format", EXPORT_ARGS)
60
- def test_export(model, format):
49
+ @pytest.mark.parametrize("model", MODELS)
50
+ def test_export(model):
61
51
  """Test exporting a YOLO model to different formats."""
62
- run(f"yolo export model={WEIGHTS_DIR / model}.pt format={format} imgsz=32")
52
+ run(f"yolo export model={model} format=torchscript imgsz=32")
63
53
 
64
54
 
65
55
  def test_rtdetr(task="detect", model="yolov8n-rtdetr.yaml", data="coco8.yaml"):
@@ -129,10 +119,10 @@ def test_mobilesam():
129
119
 
130
120
  # Slow Tests -----------------------------------------------------------------------------------------------------------
131
121
  @pytest.mark.slow
132
- @pytest.mark.parametrize("task,model,data", TASK_ARGS)
122
+ @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
133
123
  @pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason="CUDA is not available")
134
124
  @pytest.mark.skipif(CUDA_DEVICE_COUNT < 2, reason="DDP is not available")
135
125
  def test_train_gpu(task, model, data):
136
126
  """Test YOLO training on GPU(s) for various tasks and models."""
137
- run(f"yolo train {task} model={model}.yaml data={data} imgsz=32 epochs=1 device=0") # single GPU
138
- run(f"yolo train {task} model={model}.pt data={data} imgsz=32 epochs=1 device=0,1") # multi GPU
127
+ run(f"yolo train {task} model={model} data={data} imgsz=32 epochs=1 device=0") # single GPU
128
+ run(f"yolo train {task} model={model} data={data} imgsz=32 epochs=1 device=0,1") # multi GPU
@@ -4,14 +4,9 @@ import pytest
4
4
  import torch
5
5
 
6
6
  from ultralytics import YOLO
7
- from ultralytics.utils import ASSETS, WEIGHTS_DIR, checks
7
+ from ultralytics.utils import ASSETS, WEIGHTS_DIR
8
8
 
9
- CUDA_IS_AVAILABLE = checks.cuda_is_available()
10
- CUDA_DEVICE_COUNT = checks.cuda_device_count()
11
-
12
- MODEL = WEIGHTS_DIR / "path with spaces" / "yolov8n.pt" # test spaces in path
13
- DATA = "coco8.yaml"
14
- BUS = ASSETS / "bus.jpg"
9
+ from . import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODEL, SOURCE
15
10
 
16
11
 
17
12
  def test_checks():
@@ -19,19 +14,20 @@ def test_checks():
19
14
  assert torch.cuda.is_available() == CUDA_IS_AVAILABLE
20
15
  assert torch.cuda.device_count() == CUDA_DEVICE_COUNT
21
16
 
17
+
22
18
  @pytest.mark.slow
23
19
  @pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason="CUDA is not available")
24
20
  def test_export_engine():
25
21
  """Test exporting the YOLO model to NVIDIA TensorRT format."""
26
22
  f = YOLO(MODEL).export(format="engine", device=0)
27
- YOLO(f)(BUS, device=0)
23
+ YOLO(f)(SOURCE, device=0)
28
24
 
29
25
 
30
26
  @pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason="CUDA is not available")
31
27
  def test_train():
32
28
  """Test model training on a minimal dataset."""
33
29
  device = 0 if CUDA_DEVICE_COUNT == 1 else [0, 1]
34
- YOLO(MODEL).train(data=DATA, imgsz=64, epochs=1, device=device) # requires imgsz>=64
30
+ YOLO(MODEL).train(data="coco8.yaml", imgsz=64, epochs=1, device=device) # requires imgsz>=64
35
31
 
36
32
 
37
33
  @pytest.mark.slow
@@ -41,22 +37,22 @@ def test_predict_multiple_devices():
41
37
  model = YOLO("yolov8n.pt")
42
38
  model = model.cpu()
43
39
  assert str(model.device) == "cpu"
44
- _ = model(BUS) # CPU inference
40
+ _ = model(SOURCE) # CPU inference
45
41
  assert str(model.device) == "cpu"
46
42
 
47
43
  model = model.to("cuda:0")
48
44
  assert str(model.device) == "cuda:0"
49
- _ = model(BUS) # CUDA inference
45
+ _ = model(SOURCE) # CUDA inference
50
46
  assert str(model.device) == "cuda:0"
51
47
 
52
48
  model = model.cpu()
53
49
  assert str(model.device) == "cpu"
54
- _ = model(BUS) # CPU inference
50
+ _ = model(SOURCE) # CPU inference
55
51
  assert str(model.device) == "cpu"
56
52
 
57
53
  model = model.cuda()
58
54
  assert str(model.device) == "cuda:0"
59
- _ = model(BUS) # CUDA inference
55
+ _ = model(SOURCE) # CUDA inference
60
56
  assert str(model.device) == "cuda:0"
61
57
 
62
58
 
@@ -92,10 +88,10 @@ def test_predict_sam():
92
88
  model.info()
93
89
 
94
90
  # Run inference
95
- model(BUS, device=0)
91
+ model(SOURCE, device=0)
96
92
 
97
93
  # Run inference with bboxes prompt
98
- model(BUS, bboxes=[439, 437, 524, 709], device=0)
94
+ model(SOURCE, bboxes=[439, 437, 524, 709], device=0)
99
95
 
100
96
  # Run inference with points prompt
101
97
  model(ASSETS / "zidane.jpg", points=[900, 370], labels=[1], device=0)
@@ -9,11 +9,7 @@ from ultralytics.engine.exporter import Exporter
9
9
  from ultralytics.models.yolo import classify, detect, segment
10
10
  from ultralytics.utils import ASSETS, DEFAULT_CFG, WEIGHTS_DIR
11
11
 
12
- CFG_DET = "yolov8n.yaml"
13
- CFG_SEG = "yolov8n-seg.yaml"
14
- CFG_CLS = "yolov8n-cls.yaml" # or 'squeezenet1_0'
15
- CFG = get_cfg(DEFAULT_CFG)
16
- MODEL = WEIGHTS_DIR / "yolov8n"
12
+ from . import MODEL
17
13
 
18
14
 
19
15
  def test_func(*args): # noqa
@@ -26,15 +22,16 @@ def test_export():
26
22
  exporter = Exporter()
27
23
  exporter.add_callback("on_export_start", test_func)
28
24
  assert test_func in exporter.callbacks["on_export_start"], "callback test failed"
29
- f = exporter(model=YOLO(CFG_DET).model)
25
+ f = exporter(model=YOLO("yolov8n.yaml").model)
30
26
  YOLO(f)(ASSETS) # exported model inference
31
27
 
32
28
 
33
29
  def test_detect():
34
30
  """Test object detection functionality."""
35
- overrides = {"data": "coco8.yaml", "model": CFG_DET, "imgsz": 32, "epochs": 1, "save": False}
36
- CFG.data = "coco8.yaml"
37
- CFG.imgsz = 32
31
+ overrides = {"data": "coco8.yaml", "model": "yolov8n.yaml", "imgsz": 32, "epochs": 1, "save": False}
32
+ cfg = get_cfg(DEFAULT_CFG)
33
+ cfg.data = "coco8.yaml"
34
+ cfg.imgsz = 32
38
35
 
39
36
  # Trainer
40
37
  trainer = detect.DetectionTrainer(overrides=overrides)
@@ -43,7 +40,7 @@ def test_detect():
43
40
  trainer.train()
44
41
 
45
42
  # Validator
46
- val = detect.DetectionValidator(args=CFG)
43
+ val = detect.DetectionValidator(args=cfg)
47
44
  val.add_callback("on_val_start", test_func)
48
45
  assert test_func in val.callbacks["on_val_start"], "callback test failed"
49
46
  val(model=trainer.best) # validate best.pt
@@ -54,7 +51,7 @@ def test_detect():
54
51
  assert test_func in pred.callbacks["on_predict_start"], "callback test failed"
55
52
  # Confirm there is no issue with sys.argv being empty.
56
53
  with mock.patch.object(sys, "argv", []):
57
- result = pred(source=ASSETS, model=f"{MODEL}.pt")
54
+ result = pred(source=ASSETS, model=MODEL)
58
55
  assert len(result), "predictor test failed"
59
56
 
60
57
  overrides["resume"] = trainer.last
@@ -70,9 +67,10 @@ def test_detect():
70
67
 
71
68
  def test_segment():
72
69
  """Test image segmentation functionality."""
73
- overrides = {"data": "coco8-seg.yaml", "model": CFG_SEG, "imgsz": 32, "epochs": 1, "save": False}
74
- CFG.data = "coco8-seg.yaml"
75
- CFG.imgsz = 32
70
+ overrides = {"data": "coco8-seg.yaml", "model": "yolov8n-seg.yaml", "imgsz": 32, "epochs": 1, "save": False}
71
+ cfg = get_cfg(DEFAULT_CFG)
72
+ cfg.data = "coco8-seg.yaml"
73
+ cfg.imgsz = 32
76
74
  # YOLO(CFG_SEG).train(**overrides) # works
77
75
 
78
76
  # Trainer
@@ -82,7 +80,7 @@ def test_segment():
82
80
  trainer.train()
83
81
 
84
82
  # Validator
85
- val = segment.SegmentationValidator(args=CFG)
83
+ val = segment.SegmentationValidator(args=cfg)
86
84
  val.add_callback("on_val_start", test_func)
87
85
  assert test_func in val.callbacks["on_val_start"], "callback test failed"
88
86
  val(model=trainer.best) # validate best.pt
@@ -91,7 +89,7 @@ def test_segment():
91
89
  pred = segment.SegmentationPredictor(overrides={"imgsz": [64, 64]})
92
90
  pred.add_callback("on_predict_start", test_func)
93
91
  assert test_func in pred.callbacks["on_predict_start"], "callback test failed"
94
- result = pred(source=ASSETS, model=f"{MODEL}-seg.pt")
92
+ result = pred(source=ASSETS, model=WEIGHTS_DIR / "yolov8n-seg.pt")
95
93
  assert len(result), "predictor test failed"
96
94
 
97
95
  # Test resume
@@ -108,9 +106,10 @@ def test_segment():
108
106
 
109
107
  def test_classify():
110
108
  """Test image classification functionality."""
111
- overrides = {"data": "imagenet10", "model": CFG_CLS, "imgsz": 32, "epochs": 1, "save": False}
112
- CFG.data = "imagenet10"
113
- CFG.imgsz = 32
109
+ overrides = {"data": "imagenet10", "model": "yolov8n-cls.yaml", "imgsz": 32, "epochs": 1, "save": False}
110
+ cfg = get_cfg(DEFAULT_CFG)
111
+ cfg.data = "imagenet10"
112
+ cfg.imgsz = 32
114
113
  # YOLO(CFG_SEG).train(**overrides) # works
115
114
 
116
115
  # Trainer
@@ -120,7 +119,7 @@ def test_classify():
120
119
  trainer.train()
121
120
 
122
121
  # Validator
123
- val = classify.ClassificationValidator(args=CFG)
122
+ val = classify.ClassificationValidator(args=cfg)
124
123
  val.add_callback("on_val_start", test_func)
125
124
  assert test_func in val.callbacks["on_val_start"], "callback test failed"
126
125
  val(model=trainer.best)
@@ -0,0 +1,128 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ import shutil
4
+ import uuid
5
+ from itertools import product
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+
10
+ from ultralytics import YOLO
11
+ from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
12
+ from ultralytics.utils import (
13
+ IS_RASPBERRYPI,
14
+ LINUX,
15
+ MACOS,
16
+ WINDOWS,
17
+ Retry,
18
+ checks,
19
+ )
20
+ from ultralytics.utils.torch_utils import TORCH_1_9, TORCH_1_13
21
+ from . import MODEL, SOURCE
22
+
23
+ # Constants
24
+ EXPORT_PARAMETERS_LIST = [ # generate all combinations but exclude those where both int8 and half are True
25
+ (task, dynamic, int8, half, batch)
26
+ for task, dynamic, int8, half, batch in product(TASKS, [True, False], [True, False], [True, False], [1, 2])
27
+ if not (int8 and half) # exclude cases where both int8 and half are True
28
+ ]
29
+
30
+
31
+ def test_export_torchscript():
32
+ """Test exporting the YOLO model to TorchScript format."""
33
+ f = YOLO(MODEL).export(format="torchscript", optimize=False, imgsz=32)
34
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
35
+
36
+
37
+ def test_export_onnx():
38
+ """Test exporting the YOLO model to ONNX format."""
39
+ f = YOLO(MODEL).export(format="onnx", dynamic=True, imgsz=32)
40
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
41
+
42
+
43
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="OpenVINO not supported in Python 3.12")
44
+ @pytest.mark.skipif(not TORCH_1_13, reason="OpenVINO requires torch>=1.13")
45
+ def test_export_openvino():
46
+ """Test exporting the YOLO model to OpenVINO format."""
47
+ f = YOLO(MODEL).export(format="openvino", imgsz=32)
48
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
49
+
50
+
51
+ @pytest.mark.slow
52
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="OpenVINO not supported in Python 3.12")
53
+ @pytest.mark.skipif(not TORCH_1_13, reason="OpenVINO requires torch>=1.13")
54
+ @pytest.mark.parametrize("task, dynamic, int8, half, batch", EXPORT_PARAMETERS_LIST)
55
+ def test_export_openvino_matrix(task, dynamic, int8, half, batch):
56
+ """Test exporting the YOLO model to OpenVINO format."""
57
+ file = YOLO(TASK2MODEL[task]).export(
58
+ format="openvino",
59
+ imgsz=32,
60
+ dynamic=dynamic,
61
+ int8=int8,
62
+ half=half,
63
+ batch=batch,
64
+ data=TASK2DATA[task],
65
+ )
66
+ if WINDOWS:
67
+ # Use unique filenames due to Windows file permissions bug possibly due to latent threaded use
68
+ # See https://github.com/ultralytics/ultralytics/actions/runs/8957949304/job/24601616830?pr=10423
69
+ file = Path(file)
70
+ file = file.rename(file.with_stem(f"{file.stem}-{uuid.uuid4()}"))
71
+ YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32) # exported model inference
72
+ with Retry(times=3, delay=1): # retry in case of potential lingering multi-threaded file usage errors
73
+ shutil.rmtree(file)
74
+
75
+
76
+ @pytest.mark.skipif(not TORCH_1_9, reason="CoreML>=7.2 not supported with PyTorch<=1.8")
77
+ @pytest.mark.skipif(WINDOWS, reason="CoreML not supported on Windows") # RuntimeError: BlobWriter not loaded
78
+ @pytest.mark.skipif(IS_RASPBERRYPI, reason="CoreML not supported on Raspberry Pi")
79
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="CoreML not supported in Python 3.12")
80
+ def test_export_coreml():
81
+ """Test exporting the YOLO model to CoreML format."""
82
+ if MACOS:
83
+ f = YOLO(MODEL).export(format="coreml", imgsz=32)
84
+ YOLO(f)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
85
+ else:
86
+ YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
87
+
88
+
89
+ @pytest.mark.skipif(not LINUX, reason="Test disabled as TF suffers from install conflicts on Windows and macOS")
90
+ def test_export_tflite():
91
+ """
92
+ Test exporting the YOLO model to TFLite format.
93
+
94
+ Note TF suffers from install conflicts on Windows and macOS.
95
+ """
96
+ model = YOLO(MODEL)
97
+ f = model.export(format="tflite", imgsz=32)
98
+ YOLO(f)(SOURCE, imgsz=32)
99
+
100
+
101
+ @pytest.mark.skipif(True, reason="Test disabled")
102
+ @pytest.mark.skipif(not LINUX, reason="TF suffers from install conflicts on Windows and macOS")
103
+ def test_export_pb():
104
+ """
105
+ Test exporting the YOLO model to *.pb format.
106
+
107
+ Note TF suffers from install conflicts on Windows and macOS.
108
+ """
109
+ model = YOLO(MODEL)
110
+ f = model.export(format="pb", imgsz=32)
111
+ YOLO(f)(SOURCE, imgsz=32)
112
+
113
+
114
+ @pytest.mark.skipif(True, reason="Test disabled as Paddle protobuf and ONNX protobuf requirementsk conflict.")
115
+ def test_export_paddle():
116
+ """
117
+ Test exporting the YOLO model to Paddle format.
118
+
119
+ Note Paddle protobuf requirements conflicting with onnx protobuf requirements.
120
+ """
121
+ YOLO(MODEL).export(format="paddle", imgsz=32)
122
+
123
+
124
+ @pytest.mark.slow
125
+ def test_export_ncnn():
126
+ """Test exporting the YOLO model to NCNN format."""
127
+ f = YOLO(MODEL).export(format="ncnn", imgsz=32)
128
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
@@ -1,18 +1,18 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
3
  import contextlib
4
+ import os
5
+ import subprocess
6
+ import time
4
7
  from pathlib import Path
5
8
 
6
9
  import pytest
7
10
 
8
11
  from ultralytics import YOLO, download
9
- from ultralytics.utils import ASSETS, DATASETS_DIR, ROOT, SETTINGS, WEIGHTS_DIR
12
+ from ultralytics.utils import DATASETS_DIR, SETTINGS
10
13
  from ultralytics.utils.checks import check_requirements
11
14
 
12
- MODEL = WEIGHTS_DIR / "path with spaces" / "yolov8n.pt" # test spaces in path
13
- CFG = "yolov8n.yaml"
14
- SOURCE = ASSETS / "bus.jpg"
15
- TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
15
+ from . import MODEL, SOURCE, TMP
16
16
 
17
17
 
18
18
  @pytest.mark.skipif(not check_requirements("ray", install=False), reason="ray[tune] not installed")
@@ -33,8 +33,6 @@ def test_mlflow():
33
33
  @pytest.mark.skipif(True, reason="Test failing in scheduled CI https://github.com/ultralytics/ultralytics/pull/8868")
34
34
  @pytest.mark.skipif(not check_requirements("mlflow", install=False), reason="mlflow not installed")
35
35
  def test_mlflow_keep_run_active():
36
- import os
37
-
38
36
  import mlflow
39
37
 
40
38
  """Test training with MLflow tracking enabled."""
@@ -67,9 +65,6 @@ def test_mlflow_keep_run_active():
67
65
  def test_triton():
68
66
  """Test NVIDIA Triton Server functionalities."""
69
67
  check_requirements("tritonclient[all]")
70
- import subprocess
71
- import time
72
-
73
68
  from tritonclient.http import InferenceServerClient # noqa
74
69
 
75
70
  # Create variables
@@ -18,25 +18,17 @@ from ultralytics.utils import (
18
18
  ASSETS,
19
19
  DEFAULT_CFG,
20
20
  DEFAULT_CFG_PATH,
21
- LINUX,
22
- MACOS,
23
21
  ONLINE,
24
22
  ROOT,
25
23
  WEIGHTS_DIR,
26
24
  WINDOWS,
27
25
  Retry,
28
26
  checks,
29
- is_dir_writeable,
30
- IS_RASPBERRYPI,
31
27
  )
32
28
  from ultralytics.utils.downloads import download
33
- from ultralytics.utils.torch_utils import TORCH_1_9, TORCH_1_13
29
+ from ultralytics.utils.torch_utils import TORCH_1_9
34
30
 
35
- MODEL = WEIGHTS_DIR / "path with spaces" / "yolov8n.pt" # test spaces in path
36
- CFG = "yolov8n.yaml"
37
- SOURCE = ASSETS / "bus.jpg"
38
- TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
39
- IS_TMP_WRITEABLE = is_dir_writeable(TMP)
31
+ from . import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP
40
32
 
41
33
 
42
34
  def test_model_forward():
@@ -202,80 +194,6 @@ def test_train_pretrained():
202
194
  model(SOURCE)
203
195
 
204
196
 
205
- def test_export_torchscript():
206
- """Test exporting the YOLO model to TorchScript format."""
207
- f = YOLO(MODEL).export(format="torchscript", optimize=False)
208
- YOLO(f)(SOURCE) # exported model inference
209
-
210
-
211
- def test_export_onnx():
212
- """Test exporting the YOLO model to ONNX format."""
213
- f = YOLO(MODEL).export(format="onnx", dynamic=True)
214
- YOLO(f)(SOURCE) # exported model inference
215
-
216
-
217
- @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="OpenVINO not supported in Python 3.12")
218
- @pytest.mark.skipif(not TORCH_1_13, reason="OpenVINO requires torch>=1.13")
219
- def test_export_openvino():
220
- """Test exporting the YOLO model to OpenVINO format."""
221
- f = YOLO(MODEL).export(format="openvino")
222
- YOLO(f)(SOURCE) # exported model inference
223
-
224
-
225
- @pytest.mark.skipif(not TORCH_1_9, reason="CoreML>=7.2 not supported with PyTorch<=1.8")
226
- @pytest.mark.skipif(WINDOWS, reason="CoreML not supported on Windows") # RuntimeError: BlobWriter not loaded
227
- @pytest.mark.skipif(IS_RASPBERRYPI, reason="CoreML not supported on Raspberry Pi")
228
- @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="CoreML not supported in Python 3.12")
229
- def test_export_coreml():
230
- """Test exporting the YOLO model to CoreML format."""
231
- if MACOS:
232
- f = YOLO(MODEL).export(format="coreml")
233
- YOLO(f)(SOURCE) # model prediction only supported on macOS for nms=False models
234
- else:
235
- YOLO(MODEL).export(format="coreml", nms=True)
236
-
237
-
238
- def test_export_tflite(enabled=False):
239
- """
240
- Test exporting the YOLO model to TFLite format.
241
-
242
- Note TF suffers from install conflicts on Windows and macOS.
243
- """
244
- if enabled and LINUX:
245
- model = YOLO(MODEL)
246
- f = model.export(format="tflite")
247
- YOLO(f)(SOURCE)
248
-
249
-
250
- def test_export_pb(enabled=False):
251
- """
252
- Test exporting the YOLO model to *.pb format.
253
-
254
- Note TF suffers from install conflicts on Windows and macOS.
255
- """
256
- if enabled and LINUX:
257
- model = YOLO(MODEL)
258
- f = model.export(format="pb")
259
- YOLO(f)(SOURCE)
260
-
261
-
262
- def test_export_paddle(enabled=False):
263
- """
264
- Test exporting the YOLO model to Paddle format.
265
-
266
- Note Paddle protobuf requirements conflicting with onnx protobuf requirements.
267
- """
268
- if enabled:
269
- YOLO(MODEL).export(format="paddle")
270
-
271
-
272
- @pytest.mark.slow
273
- def test_export_ncnn():
274
- """Test exporting the YOLO model to NCNN format."""
275
- f = YOLO(MODEL).export(format="ncnn")
276
- YOLO(f)(SOURCE) # exported model inference
277
-
278
-
279
197
  def test_all_model_yamls():
280
198
  """Test YOLO model creation for all available YAML configurations."""
281
199
  for m in (ROOT / "cfg" / "models").rglob("*.yaml"):
@@ -292,7 +210,7 @@ def test_workflow():
292
210
  model.train(data="coco8.yaml", epochs=1, imgsz=32, optimizer="SGD")
293
211
  model.val(imgsz=32)
294
212
  model.predict(SOURCE, imgsz=32)
295
- model.export(format="onnx") # export a model to ONNX format
213
+ model.export(format="torchscript")
296
214
 
297
215
 
298
216
  def test_predict_callback_and_setup():
@@ -345,12 +263,12 @@ def test_labels_and_crops():
345
263
  labels = save_path / f"labels/{im_name}.txt"
346
264
  assert labels.exists()
347
265
  # Check detections match label count
348
- assert len(r.boxes.data) == len([l for l in labels.read_text().splitlines() if l])
266
+ assert len(r.boxes.data) == len([line for line in labels.read_text().splitlines() if line])
349
267
  # Check crops path and files
350
- crop_dirs = [p for p in (save_path / "crops").iterdir()]
268
+ crop_dirs = list((save_path / "crops").iterdir())
351
269
  crop_files = [f for p in crop_dirs for f in p.glob("*")]
352
270
  # Crop directories match detections
353
- assert all([r.names.get(c) in {d.name for d in crop_dirs} for c in cls_idxs])
271
+ assert all(r.names.get(c) in {d.name for d in crop_dirs} for c in cls_idxs)
354
272
  # Same number of crops as detections
355
273
  assert len([f for f in crop_files if im_name in f.name]) == len(r.boxes.data)
356
274
 
@@ -436,12 +354,12 @@ def test_utils_checks():
436
354
  checks.git_describe(ROOT)
437
355
  checks.check_requirements() # check requirements.txt
438
356
  checks.check_imgsz([600, 600], max_dim=1)
439
- checks.check_imshow()
357
+ checks.check_imshow(warn=True)
440
358
  checks.check_version("ultralytics", "8.0.0")
441
359
  checks.print_args()
442
- # checks.check_imshow(warn=True)
443
360
 
444
361
 
362
+ @pytest.mark.skipif(WINDOWS, reason="Windows profiling is extremely slow (cause unknown)")
445
363
  def test_utils_benchmarks():
446
364
  """Test model benchmarking."""
447
365
  from ultralytics.utils.benchmarks import ProfileModels
@@ -640,21 +558,17 @@ def test_yolo_world():
640
558
  """Tests YOLO world models with different configurations, including classes, detection, and training scenarios."""
641
559
  model = YOLO("yolov8s-world.pt") # no YOLOv8n-world model yet
642
560
  model.set_classes(["tree", "window"])
643
- model(ASSETS / "bus.jpg", conf=0.01)
561
+ model(SOURCE, conf=0.01)
644
562
 
645
563
  model = YOLO("yolov8s-worldv2.pt") # no YOLOv8n-world model yet
646
- # Training from pretrain, evaluation process is included at the final stage of training.
647
- # Use dota8.yaml which has less categories to reduce the inference time of CLIP model
564
+ # Training from a pretrained model. Eval is included at the final stage of training.
565
+ # Use dota8.yaml which has fewer categories to reduce the inference time of CLIP model
648
566
  model.train(
649
567
  data="dota8.yaml",
650
568
  epochs=1,
651
569
  imgsz=32,
652
570
  cache="disk",
653
- batch=4,
654
571
  close_mosaic=1,
655
- name="yolo-world",
656
- save_txt=True,
657
- save_json=True,
658
572
  )
659
573
 
660
574
  # test WorWorldTrainerFromScratch
@@ -666,8 +580,6 @@ def test_yolo_world():
666
580
  epochs=1,
667
581
  imgsz=32,
668
582
  cache="disk",
669
- batch=4,
670
583
  close_mosaic=1,
671
- name="yolo-world",
672
584
  trainer=WorldTrainerFromScratch,
673
585
  )
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.7"
3
+ __version__ = "8.2.9"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld