ultralytics 8.2.8__tar.gz → 8.2.10__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.8/ultralytics.egg-info → ultralytics-8.2.10}/PKG-INFO +2 -2
  2. {ultralytics-8.2.8 → ultralytics-8.2.10}/pyproject.toml +1 -1
  3. {ultralytics-8.2.8 → ultralytics-8.2.10}/tests/test_cli.py +18 -28
  4. {ultralytics-8.2.8 → ultralytics-8.2.10}/tests/test_cuda.py +10 -15
  5. {ultralytics-8.2.8 → ultralytics-8.2.10}/tests/test_engine.py +19 -20
  6. ultralytics-8.2.10/tests/test_exports.py +187 -0
  7. {ultralytics-8.2.8 → ultralytics-8.2.10}/tests/test_integrations.py +5 -10
  8. {ultralytics-8.2.8 → ultralytics-8.2.10}/tests/test_python.py +27 -130
  9. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/__init__.py +1 -1
  10. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/__init__.py +1 -0
  11. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/augment.py +1 -2
  12. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/base.py +1 -2
  13. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/build.py +2 -4
  14. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/exporter.py +38 -29
  15. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/model.py +2 -2
  16. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/results.py +22 -16
  17. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/parking_management.py +35 -22
  18. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/benchmarks.py +4 -3
  19. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/tuner.py +1 -1
  20. {ultralytics-8.2.8 → ultralytics-8.2.10/ultralytics.egg-info}/PKG-INFO +2 -2
  21. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics.egg-info/SOURCES.txt +1 -0
  22. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics.egg-info/requires.txt +1 -1
  23. {ultralytics-8.2.8 → ultralytics-8.2.10}/LICENSE +0 -0
  24. {ultralytics-8.2.8 → ultralytics-8.2.10}/README.md +0 -0
  25. {ultralytics-8.2.8 → ultralytics-8.2.10}/setup.cfg +0 -0
  26. {ultralytics-8.2.8 → ultralytics-8.2.10}/tests/test_explorer.py +0 -0
  27. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/assets/bus.jpg +0 -0
  28. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/assets/zidane.jpg +0 -0
  29. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  30. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  31. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  32. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  33. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  34. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  35. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  36. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  37. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  38. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  39. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  40. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  41. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  42. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco.yaml +0 -0
  43. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  44. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  45. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  49. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  50. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  52. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  53. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  54. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/datasets/xView.yaml +0 -0
  55. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/default.yaml +0 -0
  56. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  57. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  58. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  59. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  60. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  61. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  62. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  63. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  64. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  65. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  66. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  67. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  68. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  69. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  70. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  71. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  72. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  73. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  74. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  75. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  76. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  77. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  78. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  79. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  80. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  81. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  82. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  83. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  84. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  85. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  86. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  87. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  88. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  89. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/__init__.py +0 -0
  90. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/annotator.py +0 -0
  91. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/converter.py +0 -0
  92. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/dataset.py +0 -0
  93. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/explorer/__init__.py +0 -0
  94. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/explorer/explorer.py +0 -0
  95. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/explorer/gui/__init__.py +0 -0
  96. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/explorer/gui/dash.py +0 -0
  97. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/explorer/utils.py +0 -0
  98. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/loaders.py +0 -0
  99. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/split_dota.py +0 -0
  100. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/data/utils.py +0 -0
  101. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/__init__.py +0 -0
  102. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/predictor.py +0 -0
  103. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/trainer.py +0 -0
  104. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/tuner.py +0 -0
  105. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/engine/validator.py +0 -0
  106. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/hub/__init__.py +0 -0
  107. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/hub/auth.py +0 -0
  108. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/hub/session.py +0 -0
  109. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/hub/utils.py +0 -0
  110. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/__init__.py +0 -0
  111. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/fastsam/__init__.py +0 -0
  112. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/fastsam/model.py +0 -0
  113. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/fastsam/predict.py +0 -0
  114. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/fastsam/prompt.py +0 -0
  115. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/fastsam/utils.py +0 -0
  116. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/fastsam/val.py +0 -0
  117. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/nas/__init__.py +0 -0
  118. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/nas/model.py +0 -0
  119. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/nas/predict.py +0 -0
  120. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/nas/val.py +0 -0
  121. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/rtdetr/__init__.py +0 -0
  122. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/rtdetr/model.py +0 -0
  123. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/rtdetr/predict.py +0 -0
  124. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/rtdetr/train.py +0 -0
  125. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/rtdetr/val.py +0 -0
  126. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/__init__.py +0 -0
  127. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/amg.py +0 -0
  128. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/build.py +0 -0
  129. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/model.py +0 -0
  130. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/modules/__init__.py +0 -0
  131. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/modules/decoders.py +0 -0
  132. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/modules/encoders.py +0 -0
  133. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/modules/sam.py +0 -0
  134. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  135. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/modules/transformer.py +0 -0
  136. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/sam/predict.py +0 -0
  137. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/utils/__init__.py +0 -0
  138. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/utils/loss.py +0 -0
  139. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/utils/ops.py +0 -0
  140. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/__init__.py +0 -0
  141. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/classify/__init__.py +0 -0
  142. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/classify/predict.py +0 -0
  143. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/classify/train.py +0 -0
  144. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/classify/val.py +0 -0
  145. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/detect/__init__.py +0 -0
  146. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/detect/predict.py +0 -0
  147. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/detect/train.py +0 -0
  148. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/detect/val.py +0 -0
  149. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/model.py +0 -0
  150. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/obb/__init__.py +0 -0
  151. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/obb/predict.py +0 -0
  152. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/obb/train.py +0 -0
  153. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/obb/val.py +0 -0
  154. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/pose/__init__.py +0 -0
  155. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/pose/predict.py +0 -0
  156. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/pose/train.py +0 -0
  157. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/pose/val.py +0 -0
  158. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/segment/__init__.py +0 -0
  159. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/segment/predict.py +0 -0
  160. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/segment/train.py +0 -0
  161. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/segment/val.py +0 -0
  162. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/world/__init__.py +0 -0
  163. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/world/train.py +0 -0
  164. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/models/yolo/world/train_world.py +0 -0
  165. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/__init__.py +0 -0
  166. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/autobackend.py +0 -0
  167. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/modules/__init__.py +0 -0
  168. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/modules/block.py +0 -0
  169. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/modules/conv.py +0 -0
  170. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/modules/head.py +0 -0
  171. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/modules/transformer.py +0 -0
  172. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/modules/utils.py +0 -0
  173. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/nn/tasks.py +0 -0
  174. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/__init__.py +0 -0
  175. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/ai_gym.py +0 -0
  176. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/distance_calculation.py +0 -0
  177. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/heatmap.py +0 -0
  178. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/object_counter.py +0 -0
  179. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/queue_management.py +0 -0
  180. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/solutions/speed_estimation.py +0 -0
  181. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/__init__.py +0 -0
  182. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/basetrack.py +0 -0
  183. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/bot_sort.py +0 -0
  184. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/byte_tracker.py +0 -0
  185. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/track.py +0 -0
  186. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/utils/__init__.py +0 -0
  187. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/utils/gmc.py +0 -0
  188. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  189. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/trackers/utils/matching.py +0 -0
  190. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/__init__.py +0 -0
  191. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/autobatch.py +0 -0
  192. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/__init__.py +0 -0
  193. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/base.py +0 -0
  194. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/clearml.py +0 -0
  195. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/comet.py +0 -0
  196. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/dvc.py +0 -0
  197. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/hub.py +0 -0
  198. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/mlflow.py +0 -0
  199. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/neptune.py +0 -0
  200. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/raytune.py +0 -0
  201. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  202. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/callbacks/wb.py +0 -0
  203. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/checks.py +0 -0
  204. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/dist.py +0 -0
  205. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/downloads.py +0 -0
  206. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/errors.py +0 -0
  207. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/files.py +0 -0
  208. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/instance.py +0 -0
  209. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/loss.py +0 -0
  210. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/metrics.py +0 -0
  211. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/ops.py +0 -0
  212. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/patches.py +0 -0
  213. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/plotting.py +0 -0
  214. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/tal.py +0 -0
  215. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/torch_utils.py +0 -0
  216. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics/utils/triton.py +0 -0
  217. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics.egg-info/dependency_links.txt +0 -0
  218. {ultralytics-8.2.8 → ultralytics-8.2.10}/ultralytics.egg-info/entry_points.txt +0 -0
  219. {ultralytics-8.2.8 → ultralytics-8.2.10}/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.8
3
+ Version: 8.2.10
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.4.4,>=1.0.3; extra == "extra"
80
+ Requires-Dist: albumentations>=1.4.6; 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,<=1.4.4", # training augmentations
126
+ "albumentations>=1.4.6", # 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():
@@ -25,14 +20,14 @@ def test_checks():
25
20
  def test_export_engine():
26
21
  """Test exporting the YOLO model to NVIDIA TensorRT format."""
27
22
  f = YOLO(MODEL).export(format="engine", device=0)
28
- YOLO(f)(BUS, device=0)
23
+ YOLO(f)(SOURCE, device=0)
29
24
 
30
25
 
31
26
  @pytest.mark.skipif(not CUDA_IS_AVAILABLE, reason="CUDA is not available")
32
27
  def test_train():
33
28
  """Test model training on a minimal dataset."""
34
29
  device = 0 if CUDA_DEVICE_COUNT == 1 else [0, 1]
35
- 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
36
31
 
37
32
 
38
33
  @pytest.mark.slow
@@ -42,22 +37,22 @@ def test_predict_multiple_devices():
42
37
  model = YOLO("yolov8n.pt")
43
38
  model = model.cpu()
44
39
  assert str(model.device) == "cpu"
45
- _ = model(BUS) # CPU inference
40
+ _ = model(SOURCE) # CPU inference
46
41
  assert str(model.device) == "cpu"
47
42
 
48
43
  model = model.to("cuda:0")
49
44
  assert str(model.device) == "cuda:0"
50
- _ = model(BUS) # CUDA inference
45
+ _ = model(SOURCE) # CUDA inference
51
46
  assert str(model.device) == "cuda:0"
52
47
 
53
48
  model = model.cpu()
54
49
  assert str(model.device) == "cpu"
55
- _ = model(BUS) # CPU inference
50
+ _ = model(SOURCE) # CPU inference
56
51
  assert str(model.device) == "cpu"
57
52
 
58
53
  model = model.cuda()
59
54
  assert str(model.device) == "cuda:0"
60
- _ = model(BUS) # CUDA inference
55
+ _ = model(SOURCE) # CUDA inference
61
56
  assert str(model.device) == "cuda:0"
62
57
 
63
58
 
@@ -93,10 +88,10 @@ def test_predict_sam():
93
88
  model.info()
94
89
 
95
90
  # Run inference
96
- model(BUS, device=0)
91
+ model(SOURCE, device=0)
97
92
 
98
93
  # Run inference with bboxes prompt
99
- model(BUS, bboxes=[439, 437, 524, 709], device=0)
94
+ model(SOURCE, bboxes=[439, 437, 524, 709], device=0)
100
95
 
101
96
  # Run inference with points prompt
102
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,187 @@
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
+
22
+ from . import MODEL, SOURCE
23
+
24
+
25
+ def test_export_torchscript():
26
+ """Test YOLO exports to TorchScript format."""
27
+ f = YOLO(MODEL).export(format="torchscript", optimize=False, imgsz=32)
28
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
29
+
30
+
31
+ def test_export_onnx():
32
+ """Test YOLO exports to ONNX format."""
33
+ f = YOLO(MODEL).export(format="onnx", dynamic=True, imgsz=32)
34
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
35
+
36
+
37
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="OpenVINO not supported in Python 3.12")
38
+ @pytest.mark.skipif(not TORCH_1_13, reason="OpenVINO requires torch>=1.13")
39
+ def test_export_openvino():
40
+ """Test YOLO exports to OpenVINO format."""
41
+ f = YOLO(MODEL).export(format="openvino", imgsz=32)
42
+ YOLO(f)(SOURCE, imgsz=32) # exported model inference
43
+
44
+
45
+ @pytest.mark.slow
46
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="OpenVINO not supported in Python 3.12")
47
+ @pytest.mark.skipif(not TORCH_1_13, reason="OpenVINO requires torch>=1.13")
48
+ @pytest.mark.parametrize(
49
+ "task, dynamic, int8, half, batch",
50
+ [ # generate all combinations but exclude those where both int8 and half are True
51
+ (task, dynamic, int8, half, batch)
52
+ for task, dynamic, int8, half, batch in product(TASKS, [True, False], [True, False], [True, False], [1, 2])
53
+ if not (int8 and half) # exclude cases where both int8 and half are True
54
+ ],
55
+ )
56
+ def test_export_openvino_matrix(task, dynamic, int8, half, batch):
57
+ """Test YOLO exports to OpenVINO format."""
58
+ file = YOLO(TASK2MODEL[task]).export(
59
+ format="openvino",
60
+ imgsz=32,
61
+ dynamic=dynamic,
62
+ int8=int8,
63
+ half=half,
64
+ batch=batch,
65
+ data=TASK2DATA[task],
66
+ )
67
+ if WINDOWS:
68
+ # Use unique filenames due to Windows file permissions bug possibly due to latent threaded use
69
+ # See https://github.com/ultralytics/ultralytics/actions/runs/8957949304/job/24601616830?pr=10423
70
+ file = Path(file)
71
+ file = file.rename(file.with_stem(f"{file.stem}-{uuid.uuid4()}"))
72
+ YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32) # exported model inference
73
+ with Retry(times=3, delay=1): # retry in case of potential lingering multi-threaded file usage errors
74
+ shutil.rmtree(file)
75
+
76
+
77
+ @pytest.mark.slow
78
+ @pytest.mark.parametrize("task, dynamic, int8, half, batch", product(TASKS, [True, False], [False], [False], [1, 2]))
79
+ def test_export_onnx_matrix(task, dynamic, int8, half, batch):
80
+ """Test YOLO exports to ONNX format."""
81
+ file = YOLO(TASK2MODEL[task]).export(
82
+ format="onnx",
83
+ imgsz=32,
84
+ dynamic=dynamic,
85
+ int8=int8,
86
+ half=half,
87
+ batch=batch,
88
+ )
89
+ YOLO(file)([SOURCE] * batch, imgsz=64 if dynamic else 32) # exported model inference
90
+ Path(file).unlink() # cleanup
91
+
92
+
93
+ @pytest.mark.slow
94
+ @pytest.mark.parametrize("task, dynamic, int8, half, batch", product(TASKS, [False], [False], [False], [1, 2]))
95
+ def test_export_torchscript_matrix(task, dynamic, int8, half, batch):
96
+ """Test YOLO exports to TorchScript format."""
97
+ file = YOLO(TASK2MODEL[task]).export(
98
+ format="torchscript",
99
+ imgsz=32,
100
+ dynamic=dynamic,
101
+ int8=int8,
102
+ half=half,
103
+ batch=batch,
104
+ )
105
+ YOLO(file)([SOURCE] * 3, imgsz=64 if dynamic else 32) # exported model inference at batch=3
106
+ Path(file).unlink() # cleanup
107
+
108
+
109
+ @pytest.mark.slow
110
+ @pytest.mark.skipif(not MACOS, reason="CoreML inference only supported on macOS")
111
+ @pytest.mark.skipif(not TORCH_1_9, reason="CoreML>=7.2 not supported with PyTorch<=1.8")
112
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="CoreML not supported in Python 3.12")
113
+ @pytest.mark.parametrize(
114
+ "task, dynamic, int8, half, batch",
115
+ [ # generate all combinations but exclude those where both int8 and half are True
116
+ (task, dynamic, int8, half, batch)
117
+ for task, dynamic, int8, half, batch in product(TASKS, [False], [True, False], [True, False], [1])
118
+ if not (int8 and half) # exclude cases where both int8 and half are True
119
+ ],
120
+ )
121
+ def test_export_coreml_matrix(task, dynamic, int8, half, batch):
122
+ """Test YOLO exports to TorchScript format."""
123
+ file = YOLO(TASK2MODEL[task]).export(
124
+ format="coreml",
125
+ imgsz=32,
126
+ dynamic=dynamic,
127
+ int8=int8,
128
+ half=half,
129
+ batch=batch,
130
+ )
131
+ YOLO(file)([SOURCE] * batch, imgsz=32) # exported model inference at batch=3
132
+ shutil.rmtree(file) # cleanup
133
+
134
+
135
+ @pytest.mark.skipif(not TORCH_1_9, reason="CoreML>=7.2 not supported with PyTorch<=1.8")
136
+ @pytest.mark.skipif(WINDOWS, reason="CoreML not supported on Windows") # RuntimeError: BlobWriter not loaded
137
+ @pytest.mark.skipif(IS_RASPBERRYPI, reason="CoreML not supported on Raspberry Pi")
138
+ @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="CoreML not supported in Python 3.12")
139
+ def test_export_coreml():
140
+ """Test YOLO exports to CoreML format."""
141
+ if MACOS:
142
+ f = YOLO(MODEL).export(format="coreml", imgsz=32)
143
+ YOLO(f)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
144
+ else:
145
+ YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
146
+
147
+
148
+ @pytest.mark.skipif(not LINUX, reason="Test disabled as TF suffers from install conflicts on Windows and macOS")
149
+ def test_export_tflite():
150
+ """
151
+ Test YOLO exports to TFLite format.
152
+
153
+ Note TF suffers from install conflicts on Windows and macOS.
154
+ """
155
+ model = YOLO(MODEL)
156
+ f = model.export(format="tflite", imgsz=32)
157
+ YOLO(f)(SOURCE, imgsz=32)
158
+
159
+
160
+ @pytest.mark.skipif(True, reason="Test disabled")
161
+ @pytest.mark.skipif(not LINUX, reason="TF suffers from install conflicts on Windows and macOS")
162
+ def test_export_pb():
163
+ """
164
+ Test YOLO exports to *.pb format.
165
+
166
+ Note TF suffers from install conflicts on Windows and macOS.
167
+ """
168
+ model = YOLO(MODEL)
169
+ f = model.export(format="pb", imgsz=32)
170
+ YOLO(f)(SOURCE, imgsz=32)
171
+
172
+
173
+ @pytest.mark.skipif(True, reason="Test disabled as Paddle protobuf and ONNX protobuf requirementsk conflict.")
174
+ def test_export_paddle():
175
+ """
176
+ Test YOLO exports to Paddle format.
177
+
178
+ Note Paddle protobuf requirements conflicting with onnx protobuf requirements.
179
+ """
180
+ YOLO(MODEL).export(format="paddle", imgsz=32)
181
+
182
+
183
+ @pytest.mark.slow
184
+ def test_export_ncnn():
185
+ """Test YOLO exports to NCNN format."""
186
+ f = YOLO(MODEL).export(format="ncnn", imgsz=32)
187
+ 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