ultralytics 8.2.20__tar.gz → 8.2.21__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 (223) hide show
  1. {ultralytics-8.2.20 → ultralytics-8.2.21}/PKG-INFO +1 -1
  2. {ultralytics-8.2.20 → ultralytics-8.2.21}/pyproject.toml +1 -1
  3. ultralytics-8.2.21/tests/__init__.py +22 -0
  4. ultralytics-8.2.21/tests/conftest.py +71 -0
  5. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_exports.py +15 -15
  6. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/__init__.py +1 -1
  7. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/exporter.py +14 -19
  8. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/checks.py +4 -3
  9. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics.egg-info/PKG-INFO +1 -1
  10. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics.egg-info/SOURCES.txt +9 -0
  11. {ultralytics-8.2.20 → ultralytics-8.2.21}/LICENSE +0 -0
  12. {ultralytics-8.2.20 → ultralytics-8.2.21}/README.md +0 -0
  13. {ultralytics-8.2.20 → ultralytics-8.2.21}/setup.cfg +0 -0
  14. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_cli.py +0 -0
  15. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_cuda.py +0 -0
  16. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_engine.py +0 -0
  17. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_explorer.py +0 -0
  18. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_integrations.py +0 -0
  19. {ultralytics-8.2.20 → ultralytics-8.2.21}/tests/test_python.py +0 -0
  20. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/assets/bus.jpg +0 -0
  21. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/assets/zidane.jpg +0 -0
  22. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/__init__.py +0 -0
  23. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  24. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  25. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  26. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  27. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  28. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  29. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  30. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  31. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  32. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  33. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  34. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  35. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  36. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco.yaml +0 -0
  37. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  38. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  39. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  40. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  41. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  42. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  43. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  44. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  45. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  46. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  47. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/signature.yaml +0 -0
  48. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  49. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/datasets/xView.yaml +0 -0
  50. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/default.yaml +0 -0
  51. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  52. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  53. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  54. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  55. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  56. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  57. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  58. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  59. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  60. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  61. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  62. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  63. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  64. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  65. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  66. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  67. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  68. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  69. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  70. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  71. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  72. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  73. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  74. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  75. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  76. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  77. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  78. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  79. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  80. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  81. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  82. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  83. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  84. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/__init__.py +0 -0
  85. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/annotator.py +0 -0
  86. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/augment.py +0 -0
  87. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/base.py +0 -0
  88. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/build.py +0 -0
  89. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/converter.py +0 -0
  90. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/dataset.py +0 -0
  91. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/explorer/__init__.py +0 -0
  92. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/explorer/explorer.py +0 -0
  93. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/explorer/gui/__init__.py +0 -0
  94. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/explorer/gui/dash.py +0 -0
  95. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/explorer/utils.py +0 -0
  96. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/loaders.py +0 -0
  97. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/split_dota.py +0 -0
  98. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/data/utils.py +0 -0
  99. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/__init__.py +0 -0
  100. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/model.py +0 -0
  101. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/predictor.py +0 -0
  102. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/results.py +0 -0
  103. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/trainer.py +0 -0
  104. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/tuner.py +0 -0
  105. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/engine/validator.py +0 -0
  106. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/hub/__init__.py +0 -0
  107. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/hub/auth.py +0 -0
  108. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/hub/session.py +0 -0
  109. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/hub/utils.py +0 -0
  110. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/__init__.py +0 -0
  111. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/fastsam/__init__.py +0 -0
  112. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/fastsam/model.py +0 -0
  113. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/fastsam/predict.py +0 -0
  114. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/fastsam/prompt.py +0 -0
  115. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/fastsam/utils.py +0 -0
  116. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/fastsam/val.py +0 -0
  117. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/nas/__init__.py +0 -0
  118. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/nas/model.py +0 -0
  119. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/nas/predict.py +0 -0
  120. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/nas/val.py +0 -0
  121. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/rtdetr/__init__.py +0 -0
  122. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/rtdetr/model.py +0 -0
  123. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/rtdetr/predict.py +0 -0
  124. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/rtdetr/train.py +0 -0
  125. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/rtdetr/val.py +0 -0
  126. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/__init__.py +0 -0
  127. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/amg.py +0 -0
  128. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/build.py +0 -0
  129. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/model.py +0 -0
  130. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/modules/__init__.py +0 -0
  131. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/modules/decoders.py +0 -0
  132. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/modules/encoders.py +0 -0
  133. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/modules/sam.py +0 -0
  134. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  135. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/modules/transformer.py +0 -0
  136. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/sam/predict.py +0 -0
  137. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/utils/__init__.py +0 -0
  138. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/utils/loss.py +0 -0
  139. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/utils/ops.py +0 -0
  140. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/__init__.py +0 -0
  141. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/classify/__init__.py +0 -0
  142. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/classify/predict.py +0 -0
  143. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/classify/train.py +0 -0
  144. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/classify/val.py +0 -0
  145. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/detect/__init__.py +0 -0
  146. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/detect/predict.py +0 -0
  147. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/detect/train.py +0 -0
  148. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/detect/val.py +0 -0
  149. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/model.py +0 -0
  150. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/obb/__init__.py +0 -0
  151. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/obb/predict.py +0 -0
  152. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/obb/train.py +0 -0
  153. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/obb/val.py +0 -0
  154. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/pose/__init__.py +0 -0
  155. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/pose/predict.py +0 -0
  156. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/pose/train.py +0 -0
  157. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/pose/val.py +0 -0
  158. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/segment/__init__.py +0 -0
  159. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/segment/predict.py +0 -0
  160. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/segment/train.py +0 -0
  161. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/segment/val.py +0 -0
  162. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/world/__init__.py +0 -0
  163. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/world/train.py +0 -0
  164. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/models/yolo/world/train_world.py +0 -0
  165. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/__init__.py +0 -0
  166. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/autobackend.py +0 -0
  167. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/modules/__init__.py +0 -0
  168. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/modules/block.py +0 -0
  169. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/modules/conv.py +0 -0
  170. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/modules/head.py +0 -0
  171. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/modules/transformer.py +0 -0
  172. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/modules/utils.py +0 -0
  173. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/nn/tasks.py +0 -0
  174. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/__init__.py +0 -0
  175. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/ai_gym.py +0 -0
  176. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/analytics.py +0 -0
  177. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/distance_calculation.py +0 -0
  178. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/heatmap.py +0 -0
  179. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/object_counter.py +0 -0
  180. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/parking_management.py +0 -0
  181. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/queue_management.py +0 -0
  182. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/solutions/speed_estimation.py +0 -0
  183. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/__init__.py +0 -0
  184. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/basetrack.py +0 -0
  185. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/bot_sort.py +0 -0
  186. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/byte_tracker.py +0 -0
  187. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/track.py +0 -0
  188. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/utils/__init__.py +0 -0
  189. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/utils/gmc.py +0 -0
  190. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  191. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/trackers/utils/matching.py +0 -0
  192. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/__init__.py +0 -0
  193. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/autobatch.py +0 -0
  194. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/benchmarks.py +0 -0
  195. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/__init__.py +0 -0
  196. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/base.py +0 -0
  197. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/clearml.py +0 -0
  198. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/comet.py +0 -0
  199. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/dvc.py +0 -0
  200. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/hub.py +0 -0
  201. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/mlflow.py +0 -0
  202. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/neptune.py +0 -0
  203. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/raytune.py +0 -0
  204. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  205. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/callbacks/wb.py +0 -0
  206. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/dist.py +0 -0
  207. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/downloads.py +0 -0
  208. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/errors.py +0 -0
  209. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/files.py +0 -0
  210. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/instance.py +0 -0
  211. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/loss.py +0 -0
  212. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/metrics.py +0 -0
  213. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/ops.py +0 -0
  214. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/patches.py +0 -0
  215. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/plotting.py +0 -0
  216. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/tal.py +0 -0
  217. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/torch_utils.py +0 -0
  218. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/triton.py +0 -0
  219. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics/utils/tuner.py +0 -0
  220. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics.egg-info/dependency_links.txt +0 -0
  221. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics.egg-info/entry_points.txt +0 -0
  222. {ultralytics-8.2.20 → ultralytics-8.2.21}/ultralytics.egg-info/requires.txt +0 -0
  223. {ultralytics-8.2.20 → ultralytics-8.2.21}/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.20
3
+ Version: 8.2.21
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
@@ -139,7 +139,7 @@ ultralytics = "ultralytics.cfg:entrypoint"
139
139
  # Tools settings -------------------------------------------------------------------------------------------------------
140
140
  [tool.setuptools] # configuration specific to the `setuptools` build backend.
141
141
  packages = { find = { where = ["."], include = ["ultralytics", "ultralytics.*"] } }
142
- package-data = { "ultralytics" = ["**/*.yaml"], "ultralytics.assets" = ["*.jpg"] }
142
+ package-data = { "ultralytics" = ["**/*.yaml", "../tests/*.py"], "ultralytics.assets" = ["*.jpg"] }
143
143
 
144
144
  [tool.setuptools.dynamic]
145
145
  version = { attr = "ultralytics.__version__" }
@@ -0,0 +1,22 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks, is_dir_writeable
4
+
5
+ # Constants used in tests
6
+ MODEL = WEIGHTS_DIR / "path with spaces" / "yolov8n.pt" # test spaces in path
7
+ CFG = "yolov8n.yaml"
8
+ SOURCE = ASSETS / "bus.jpg"
9
+ TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
10
+ IS_TMP_WRITEABLE = is_dir_writeable(TMP)
11
+ CUDA_IS_AVAILABLE = checks.cuda_is_available()
12
+ CUDA_DEVICE_COUNT = checks.cuda_device_count()
13
+
14
+ __all__ = (
15
+ "MODEL",
16
+ "CFG",
17
+ "SOURCE",
18
+ "TMP",
19
+ "IS_TMP_WRITEABLE",
20
+ "CUDA_IS_AVAILABLE",
21
+ "CUDA_DEVICE_COUNT",
22
+ )
@@ -0,0 +1,71 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ import shutil
4
+ from pathlib import Path
5
+
6
+ from tests import TMP
7
+
8
+
9
+ def pytest_addoption(parser):
10
+ """
11
+ Add custom command-line options to pytest.
12
+
13
+ Args:
14
+ parser (pytest.config.Parser): The pytest parser object.
15
+ """
16
+ parser.addoption("--slow", action="store_true", default=False, help="Run slow tests")
17
+
18
+
19
+ def pytest_collection_modifyitems(config, items):
20
+ """
21
+ Modify the list of test items to remove tests marked as slow if the --slow option is not provided.
22
+
23
+ Args:
24
+ config (pytest.config.Config): The pytest config object.
25
+ items (list): List of test items to be executed.
26
+ """
27
+ if not config.getoption("--slow"):
28
+ # Remove the item entirely from the list of test items if it's marked as 'slow'
29
+ items[:] = [item for item in items if "slow" not in item.keywords]
30
+
31
+
32
+ def pytest_sessionstart(session):
33
+ """
34
+ Initialize session configurations for pytest.
35
+
36
+ This function is automatically called by pytest after the 'Session' object has been created but before performing
37
+ test collection. It sets the initial seeds and prepares the temporary directory for the test session.
38
+
39
+ Args:
40
+ session (pytest.Session): The pytest session object.
41
+ """
42
+ from ultralytics.utils.torch_utils import init_seeds
43
+
44
+ init_seeds()
45
+ shutil.rmtree(TMP, ignore_errors=True) # delete any existing tests/tmp directory
46
+ TMP.mkdir(parents=True, exist_ok=True) # create a new empty directory
47
+
48
+
49
+ def pytest_terminal_summary(terminalreporter, exitstatus, config):
50
+ """
51
+ Cleanup operations after pytest session.
52
+
53
+ This function is automatically called by pytest at the end of the entire test session. It removes certain files
54
+ and directories used during testing.
55
+
56
+ Args:
57
+ terminalreporter (pytest.terminal.TerminalReporter): The terminal reporter object.
58
+ exitstatus (int): The exit status of the test run.
59
+ config (pytest.config.Config): The pytest config object.
60
+ """
61
+ from ultralytics.utils import WEIGHTS_DIR
62
+
63
+ # Remove files
64
+ models = [path for x in ["*.onnx", "*.torchscript"] for path in WEIGHTS_DIR.rglob(x)]
65
+ for file in ["bus.jpg", "yolov8n.onnx", "yolov8n.torchscript"] + models:
66
+ Path(file).unlink(missing_ok=True)
67
+
68
+ # Remove directories
69
+ models = [path for x in ["*.mlpackage", "*_openvino_model"] for path in WEIGHTS_DIR.rglob(x)]
70
+ for directory in [TMP.parents[1] / ".pytest_cache", TMP] + models:
71
+ shutil.rmtree(directory, ignore_errors=True)
@@ -23,22 +23,22 @@ from tests import MODEL, SOURCE
23
23
 
24
24
  def test_export_torchscript():
25
25
  """Test YOLO exports to TorchScript format."""
26
- f = YOLO(MODEL).export(format="torchscript", optimize=False, imgsz=32)
27
- YOLO(f)(SOURCE, imgsz=32) # exported model inference
26
+ file = YOLO(MODEL).export(format="torchscript", optimize=False, imgsz=32)
27
+ YOLO(file)(SOURCE, imgsz=32) # exported model inference
28
28
 
29
29
 
30
30
  def test_export_onnx():
31
31
  """Test YOLO exports to ONNX format."""
32
- f = YOLO(MODEL).export(format="onnx", dynamic=True, imgsz=32)
33
- YOLO(f)(SOURCE, imgsz=32) # exported model inference
32
+ file = YOLO(MODEL).export(format="onnx", dynamic=True, imgsz=32)
33
+ YOLO(file)(SOURCE, imgsz=32) # exported model inference
34
34
 
35
35
 
36
36
  @pytest.mark.skipif(checks.IS_PYTHON_3_12, reason="OpenVINO not supported in Python 3.12")
37
37
  @pytest.mark.skipif(not TORCH_1_13, reason="OpenVINO requires torch>=1.13")
38
38
  def test_export_openvino():
39
39
  """Test YOLO exports to OpenVINO format."""
40
- f = YOLO(MODEL).export(format="openvino", imgsz=32)
41
- YOLO(f)(SOURCE, imgsz=32) # exported model inference
40
+ file = YOLO(MODEL).export(format="openvino", imgsz=32)
41
+ YOLO(file)(SOURCE, imgsz=32) # exported model inference
42
42
 
43
43
 
44
44
  @pytest.mark.slow
@@ -118,7 +118,7 @@ def test_export_torchscript_matrix(task, dynamic, int8, half, batch):
118
118
  ],
119
119
  )
120
120
  def test_export_coreml_matrix(task, dynamic, int8, half, batch):
121
- """Test YOLO exports to TorchScript format."""
121
+ """Test YOLO exports to CoreML format."""
122
122
  file = YOLO(TASK2MODEL[task]).export(
123
123
  format="coreml",
124
124
  imgsz=32,
@@ -138,8 +138,8 @@ def test_export_coreml_matrix(task, dynamic, int8, half, batch):
138
138
  def test_export_coreml():
139
139
  """Test YOLO exports to CoreML format."""
140
140
  if MACOS:
141
- f = YOLO(MODEL).export(format="coreml", imgsz=32)
142
- YOLO(f)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
141
+ file = YOLO(MODEL).export(format="coreml", imgsz=32)
142
+ YOLO(file)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
143
143
  else:
144
144
  YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
145
145
 
@@ -152,8 +152,8 @@ def test_export_tflite():
152
152
  Note TF suffers from install conflicts on Windows and macOS.
153
153
  """
154
154
  model = YOLO(MODEL)
155
- f = model.export(format="tflite", imgsz=32)
156
- YOLO(f)(SOURCE, imgsz=32)
155
+ file = model.export(format="tflite", imgsz=32)
156
+ YOLO(file)(SOURCE, imgsz=32)
157
157
 
158
158
 
159
159
  @pytest.mark.skipif(True, reason="Test disabled")
@@ -165,8 +165,8 @@ def test_export_pb():
165
165
  Note TF suffers from install conflicts on Windows and macOS.
166
166
  """
167
167
  model = YOLO(MODEL)
168
- f = model.export(format="pb", imgsz=32)
169
- YOLO(f)(SOURCE, imgsz=32)
168
+ file = model.export(format="pb", imgsz=32)
169
+ YOLO(file)(SOURCE, imgsz=32)
170
170
 
171
171
 
172
172
  @pytest.mark.skipif(True, reason="Test disabled as Paddle protobuf and ONNX protobuf requirementsk conflict.")
@@ -182,5 +182,5 @@ def test_export_paddle():
182
182
  @pytest.mark.slow
183
183
  def test_export_ncnn():
184
184
  """Test YOLO exports to NCNN format."""
185
- f = YOLO(MODEL).export(format="ncnn", imgsz=32)
186
- YOLO(f)(SOURCE, imgsz=32) # exported model inference
185
+ file = YOLO(MODEL).export(format="ncnn", imgsz=32)
186
+ YOLO(file)(SOURCE, imgsz=32) # exported model inference
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.20"
3
+ __version__ = "8.2.21"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -83,6 +83,7 @@ from ultralytics.utils import (
83
83
  WINDOWS,
84
84
  __version__,
85
85
  callbacks,
86
+ checks,
86
87
  colorstr,
87
88
  get_default_args,
88
89
  yaml_save,
@@ -184,6 +185,7 @@ class Exporter:
184
185
  if sum(flags) != 1:
185
186
  raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
186
187
  jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, ncnn = flags # export booleans
188
+ is_tf_format = any((saved_model, pb, tflite, edgetpu, tfjs))
187
189
 
188
190
  # Device
189
191
  if fmt == "engine" and self.args.device is None:
@@ -243,7 +245,7 @@ class Exporter:
243
245
  m.dynamic = self.args.dynamic
244
246
  m.export = True
245
247
  m.format = self.args.format
246
- elif isinstance(m, C2f) and not any((saved_model, pb, tflite, edgetpu, tfjs)):
248
+ elif isinstance(m, C2f) and not is_tf_format:
247
249
  # EdgeTPU does not support FlexSplitV while split provides cleaner ONNX graph
248
250
  m.forward = m.forward_split
249
251
 
@@ -303,7 +305,7 @@ class Exporter:
303
305
  f[3], _ = self.export_openvino()
304
306
  if coreml: # CoreML
305
307
  f[4], _ = self.export_coreml()
306
- if any((saved_model, pb, tflite, edgetpu, tfjs)): # TensorFlow formats
308
+ if is_tf_format: # TensorFlow formats
307
309
  self.args.int8 |= edgetpu
308
310
  f[5], keras_model = self.export_saved_model()
309
311
  if pb or tfjs: # pb prerequisite to tfjs
@@ -777,11 +779,10 @@ class Exporter:
777
779
  _ = self.cache.write_bytes(cache)
778
780
 
779
781
  # Load dataset w/ builder (for batching) and calibrate
780
- dataset = self.get_int8_calibration_dataloader(prefix)
781
782
  config.int8_calibrator = EngineCalibrator(
782
- dataset=dataset,
783
+ dataset=self.get_int8_calibration_dataloader(prefix),
783
784
  batch=2 * self.args.batch,
784
- cache=self.file.with_suffix(".cache"),
785
+ cache=str(self.file.with_suffix(".cache")),
785
786
  )
786
787
 
787
788
  elif half:
@@ -813,7 +814,7 @@ class Exporter:
813
814
  except ImportError:
814
815
  suffix = "-macos" if MACOS else "-aarch64" if ARM64 else "" if cuda else "-cpu"
815
816
  version = "" if ARM64 else "<=2.13.1"
816
- check_requirements(f"tensorflow{suffix}{version}")
817
+ check_requirements((f"tensorflow{suffix}{version}", "keras"))
817
818
  import tensorflow as tf # noqa
818
819
  if ARM64:
819
820
  check_requirements("cmake") # 'cmake' is needed to build onnxsim on aarch64
@@ -828,8 +829,8 @@ class Exporter:
828
829
  "flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
829
830
  "onnxruntime-gpu" if cuda else "onnxruntime",
830
831
  ),
831
- cmds="--extra-index-url https://pypi.ngc.nvidia.com",
832
- ) # onnx_graphsurgeon only on NVIDIA
832
+ cmds="--extra-index-url https://pypi.ngc.nvidia.com", # onnx_graphsurgeon only on NVIDIA
833
+ )
833
834
 
834
835
  LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...")
835
836
  check_version(
@@ -855,24 +856,17 @@ class Exporter:
855
856
  f_onnx, _ = self.export_onnx()
856
857
 
857
858
  # Export to TF
858
- tmp_file = f / "tmp_tflite_int8_calibration_images.npy" # int8 calibration images file
859
859
  np_data = None
860
860
  if self.args.int8:
861
+ tmp_file = f / "tmp_tflite_int8_calibration_images.npy" # int8 calibration images file
861
862
  verbosity = "info"
862
863
  if self.args.data:
863
- # Generate calibration data for integer quantization
864
- dataloader = self.get_int8_calibration_dataloader(prefix)
865
- images = []
866
- for i, batch in enumerate(dataloader):
867
- if i >= 100: # maximum number of calibration images
868
- break
869
- im = batch["img"].permute(1, 2, 0)[None] # list to nparray, CHW to BHWC
870
- images.append(im)
871
864
  f.mkdir()
865
+ images = [batch["img"].permute(0, 2, 3, 1) for batch in self.get_int8_calibration_dataloader(prefix)]
872
866
  images = torch.cat(images, 0).float()
873
867
  # mean = images.view(-1, 3).mean(0) # imagenet mean [123.675, 116.28, 103.53]
874
868
  # std = images.view(-1, 3).std(0) # imagenet std [58.395, 57.12, 57.375]
875
- np.save(str(tmp_file), images.numpy()) # BHWC
869
+ np.save(str(tmp_file), images.numpy().astype(np.float32)) # BHWC
876
870
  np_data = [["images", tmp_file, [[[[0, 0, 0]]]], [[[[255, 255, 255]]]]]]
877
871
  else:
878
872
  verbosity = "error"
@@ -1017,10 +1011,11 @@ class Exporter:
1017
1011
  """Add metadata to *.tflite models per https://www.tensorflow.org/lite/models/convert/metadata."""
1018
1012
  import flatbuffers
1019
1013
 
1020
- if MACOS: # TFLite Support bug https://github.com/tensorflow/tflite-support/issues/954#issuecomment-2108570845
1014
+ if ARM64:
1021
1015
  from tflite_support import metadata # noqa
1022
1016
  from tflite_support import metadata_schema_py_generated as schema # noqa
1023
1017
  else:
1018
+ # TFLite Support bug https://github.com/tensorflow/tflite-support/issues/954#issuecomment-2108570845
1024
1019
  from tensorflow_lite_support.metadata import metadata_schema_py_generated as schema # noqa
1025
1020
  from tensorflow_lite_support.metadata.python import metadata # noqa
1026
1021
 
@@ -23,7 +23,6 @@ from ultralytics.utils import (
23
23
  ASSETS,
24
24
  AUTOINSTALL,
25
25
  IS_COLAB,
26
- IS_DOCKER,
27
26
  IS_JUPYTER,
28
27
  IS_KAGGLE,
29
28
  IS_PIP_PACKAGE,
@@ -322,17 +321,18 @@ def check_font(font="Arial.ttf"):
322
321
  return file
323
322
 
324
323
 
325
- def check_python(minimum: str = "3.8.0") -> bool:
324
+ def check_python(minimum: str = "3.8.0", hard: bool = True) -> bool:
326
325
  """
327
326
  Check current python version against the required minimum version.
328
327
 
329
328
  Args:
330
329
  minimum (str): Required minimum version of python.
330
+ hard (bool, optional): If True, raise an AssertionError if the requirement is not met.
331
331
 
332
332
  Returns:
333
333
  (bool): Whether the installed Python version meets the minimum constraints.
334
334
  """
335
- return check_version(PYTHON_VERSION, minimum, name="Python ", hard=True)
335
+ return check_version(PYTHON_VERSION, minimum, name="Python", hard=hard)
336
336
 
337
337
 
338
338
  @TryExcept()
@@ -735,4 +735,5 @@ def cuda_is_available() -> bool:
735
735
 
736
736
 
737
737
  # Define constants
738
+ IS_PYTHON_MINIMUM_3_10 = check_python("3.10", hard=False)
738
739
  IS_PYTHON_3_12 = PYTHON_VERSION.startswith("3.12")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.20
3
+ Version: 8.2.21
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
@@ -15,6 +15,15 @@ ultralytics.egg-info/dependency_links.txt
15
15
  ultralytics.egg-info/entry_points.txt
16
16
  ultralytics.egg-info/requires.txt
17
17
  ultralytics.egg-info/top_level.txt
18
+ ultralytics/../tests/__init__.py
19
+ ultralytics/../tests/conftest.py
20
+ ultralytics/../tests/test_cli.py
21
+ ultralytics/../tests/test_cuda.py
22
+ ultralytics/../tests/test_engine.py
23
+ ultralytics/../tests/test_explorer.py
24
+ ultralytics/../tests/test_exports.py
25
+ ultralytics/../tests/test_integrations.py
26
+ ultralytics/../tests/test_python.py
18
27
  ultralytics/assets/bus.jpg
19
28
  ultralytics/assets/zidane.jpg
20
29
  ultralytics/cfg/__init__.py
File without changes
File without changes
File without changes