ultralytics 8.2.13__tar.gz → 8.2.15__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.13 → ultralytics-8.2.15}/PKG-INFO +1 -1
  2. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_python.py +8 -2
  3. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/utils.py +3 -2
  5. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/results.py +3 -3
  6. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/hub/__init__.py +7 -3
  7. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/__init__.py +3 -1
  8. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/plotting.py +19 -18
  9. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/torch_utils.py +24 -10
  10. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics.egg-info/PKG-INFO +1 -1
  11. {ultralytics-8.2.13 → ultralytics-8.2.15}/LICENSE +0 -0
  12. {ultralytics-8.2.13 → ultralytics-8.2.15}/README.md +0 -0
  13. {ultralytics-8.2.13 → ultralytics-8.2.15}/pyproject.toml +0 -0
  14. {ultralytics-8.2.13 → ultralytics-8.2.15}/setup.cfg +0 -0
  15. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_cli.py +0 -0
  16. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_cuda.py +0 -0
  17. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_engine.py +0 -0
  18. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_explorer.py +0 -0
  19. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_exports.py +0 -0
  20. {ultralytics-8.2.13 → ultralytics-8.2.15}/tests/test_integrations.py +0 -0
  21. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/assets/bus.jpg +0 -0
  22. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/assets/zidane.jpg +0 -0
  23. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/__init__.py +0 -0
  24. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  25. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  26. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  27. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  28. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  29. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  30. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  31. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  32. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  33. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  34. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  35. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  36. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  37. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco.yaml +0 -0
  38. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  39. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  40. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  41. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  42. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  43. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  44. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  45. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  46. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  47. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  48. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  49. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/datasets/xView.yaml +0 -0
  50. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/default.yaml +0 -0
  51. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  52. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  53. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  54. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  55. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  56. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  57. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  58. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  59. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  60. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  61. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  62. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  63. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  64. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  65. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  66. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  67. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  68. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  69. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  70. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  71. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  72. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  73. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  74. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  75. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  76. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  77. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  78. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  79. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  80. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  81. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  82. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  83. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  84. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/__init__.py +0 -0
  85. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/annotator.py +0 -0
  86. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/augment.py +0 -0
  87. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/base.py +0 -0
  88. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/build.py +0 -0
  89. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/converter.py +0 -0
  90. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/dataset.py +0 -0
  91. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/explorer/__init__.py +0 -0
  92. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/explorer/explorer.py +0 -0
  93. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/explorer/gui/__init__.py +0 -0
  94. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/explorer/gui/dash.py +0 -0
  95. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/explorer/utils.py +0 -0
  96. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/loaders.py +0 -0
  97. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/data/split_dota.py +0 -0
  98. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/__init__.py +0 -0
  99. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/exporter.py +0 -0
  100. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/model.py +0 -0
  101. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/predictor.py +0 -0
  102. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/trainer.py +0 -0
  103. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/tuner.py +0 -0
  104. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/engine/validator.py +0 -0
  105. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/hub/auth.py +0 -0
  106. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/hub/session.py +0 -0
  107. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/hub/utils.py +0 -0
  108. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/__init__.py +0 -0
  109. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/fastsam/__init__.py +0 -0
  110. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/fastsam/model.py +0 -0
  111. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/fastsam/predict.py +0 -0
  112. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/fastsam/prompt.py +0 -0
  113. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/fastsam/utils.py +0 -0
  114. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/fastsam/val.py +0 -0
  115. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/nas/__init__.py +0 -0
  116. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/nas/model.py +0 -0
  117. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/nas/predict.py +0 -0
  118. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/nas/val.py +0 -0
  119. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/rtdetr/__init__.py +0 -0
  120. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/rtdetr/model.py +0 -0
  121. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/rtdetr/predict.py +0 -0
  122. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/rtdetr/train.py +0 -0
  123. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/rtdetr/val.py +0 -0
  124. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/__init__.py +0 -0
  125. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/amg.py +0 -0
  126. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/build.py +0 -0
  127. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/model.py +0 -0
  128. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/modules/__init__.py +0 -0
  129. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/modules/decoders.py +0 -0
  130. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/modules/encoders.py +0 -0
  131. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/modules/sam.py +0 -0
  132. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  133. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/modules/transformer.py +0 -0
  134. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/sam/predict.py +0 -0
  135. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/utils/__init__.py +0 -0
  136. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/utils/loss.py +0 -0
  137. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/utils/ops.py +0 -0
  138. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/__init__.py +0 -0
  139. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/classify/__init__.py +0 -0
  140. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/classify/predict.py +0 -0
  141. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/classify/train.py +0 -0
  142. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/classify/val.py +0 -0
  143. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/detect/__init__.py +0 -0
  144. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/detect/predict.py +0 -0
  145. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/detect/train.py +0 -0
  146. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/detect/val.py +0 -0
  147. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/model.py +0 -0
  148. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/obb/__init__.py +0 -0
  149. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/obb/predict.py +0 -0
  150. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/obb/train.py +0 -0
  151. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/obb/val.py +0 -0
  152. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/pose/__init__.py +0 -0
  153. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/pose/predict.py +0 -0
  154. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/pose/train.py +0 -0
  155. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/pose/val.py +0 -0
  156. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/segment/__init__.py +0 -0
  157. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/segment/predict.py +0 -0
  158. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/segment/train.py +0 -0
  159. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/segment/val.py +0 -0
  160. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/world/__init__.py +0 -0
  161. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/world/train.py +0 -0
  162. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/models/yolo/world/train_world.py +0 -0
  163. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/__init__.py +0 -0
  164. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/autobackend.py +0 -0
  165. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/modules/__init__.py +0 -0
  166. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/modules/block.py +0 -0
  167. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/modules/conv.py +0 -0
  168. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/modules/head.py +0 -0
  169. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/modules/transformer.py +0 -0
  170. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/modules/utils.py +0 -0
  171. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/nn/tasks.py +0 -0
  172. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/__init__.py +0 -0
  173. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/ai_gym.py +0 -0
  174. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/distance_calculation.py +0 -0
  175. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/heatmap.py +0 -0
  176. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/object_counter.py +0 -0
  177. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/parking_management.py +0 -0
  178. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/queue_management.py +0 -0
  179. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/solutions/speed_estimation.py +0 -0
  180. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/__init__.py +0 -0
  181. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/basetrack.py +0 -0
  182. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/bot_sort.py +0 -0
  183. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/byte_tracker.py +0 -0
  184. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/track.py +0 -0
  185. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/utils/__init__.py +0 -0
  186. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/utils/gmc.py +0 -0
  187. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  188. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/trackers/utils/matching.py +0 -0
  189. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/autobatch.py +0 -0
  190. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/benchmarks.py +0 -0
  191. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/__init__.py +0 -0
  192. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/base.py +0 -0
  193. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/clearml.py +0 -0
  194. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/comet.py +0 -0
  195. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/dvc.py +0 -0
  196. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/hub.py +0 -0
  197. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/mlflow.py +0 -0
  198. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/neptune.py +0 -0
  199. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/raytune.py +0 -0
  200. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  201. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/callbacks/wb.py +0 -0
  202. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/checks.py +0 -0
  203. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/dist.py +0 -0
  204. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/downloads.py +0 -0
  205. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/errors.py +0 -0
  206. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/files.py +0 -0
  207. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/instance.py +0 -0
  208. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/loss.py +0 -0
  209. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/metrics.py +0 -0
  210. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/ops.py +0 -0
  211. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/patches.py +0 -0
  212. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/tal.py +0 -0
  213. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/triton.py +0 -0
  214. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics/utils/tuner.py +0 -0
  215. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics.egg-info/SOURCES.txt +0 -0
  216. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics.egg-info/dependency_links.txt +0 -0
  217. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics.egg-info/entry_points.txt +0 -0
  218. {ultralytics-8.2.13 → ultralytics-8.2.15}/ultralytics.egg-info/requires.txt +0 -0
  219. {ultralytics-8.2.13 → ultralytics-8.2.15}/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.13
3
+ Version: 8.2.15
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
@@ -12,7 +12,7 @@ import yaml
12
12
  from PIL import Image
13
13
 
14
14
  from ultralytics import RTDETR, YOLO
15
- from ultralytics.cfg import MODELS, TASK2DATA
15
+ from ultralytics.cfg import MODELS, TASKS, TASK2DATA
16
16
  from ultralytics.data.build import load_inference_source
17
17
  from ultralytics.utils import (
18
18
  ASSETS,
@@ -98,6 +98,12 @@ def test_predict_img(model_name):
98
98
  assert len(model(batch, imgsz=32)) == len(batch) # multiple sources in a batch
99
99
 
100
100
 
101
+ @pytest.mark.parametrize("model", MODELS)
102
+ def test_predict_visualize(model):
103
+ """Test model predict methods with 'visualize=True' arguments."""
104
+ YOLO(WEIGHTS_DIR / model)(SOURCE, imgsz=32, visualize=True)
105
+
106
+
101
107
  def test_predict_grey_and_4ch():
102
108
  """Test YOLO prediction on SOURCE converted to greyscale and 4-channel images."""
103
109
  im = Image.open(SOURCE)
@@ -267,7 +273,7 @@ def test_data_utils():
267
273
  # from ultralytics.utils.files import WorkingDirectory
268
274
  # with WorkingDirectory(ROOT.parent / 'tests'):
269
275
 
270
- for task in "detect", "segment", "pose", "classify":
276
+ for task in TASKS:
271
277
  file = Path(TASK2DATA[task]).with_suffix(".zip") # i.e. coco8.zip
272
278
  download(f"https://github.com/ultralytics/hub/raw/main/example_datasets/{file}", unzip=False, dir=TMP)
273
279
  stats = HUBDatasetStats(TMP / file, task=task)
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.13"
3
+ __version__ = "8.2.15"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -441,6 +441,7 @@ class HUBDatasetStats:
441
441
  stats = HUBDatasetStats('path/to/coco8.zip', task='detect') # detect dataset
442
442
  stats = HUBDatasetStats('path/to/coco8-seg.zip', task='segment') # segment dataset
443
443
  stats = HUBDatasetStats('path/to/coco8-pose.zip', task='pose') # pose dataset
444
+ stats = HUBDatasetStats('path/to/dota8.zip', task='obb') # OBB dataset
444
445
  stats = HUBDatasetStats('path/to/imagenet10.zip', task='classify') # classification dataset
445
446
 
446
447
  stats.get_json(save=True)
@@ -497,13 +498,13 @@ class HUBDatasetStats:
497
498
  """Update labels to integer class and 4 decimal place floats."""
498
499
  if self.task == "detect":
499
500
  coordinates = labels["bboxes"]
500
- elif self.task == "segment":
501
+ elif self.task in {"segment", "obb"}: # Segment and OBB use segments. OBB segments are normalized xyxyxyxy
501
502
  coordinates = [x.flatten() for x in labels["segments"]]
502
503
  elif self.task == "pose":
503
504
  n, nk, nd = labels["keypoints"].shape
504
505
  coordinates = np.concatenate((labels["bboxes"], labels["keypoints"].reshape(n, nk * nd)), 1)
505
506
  else:
506
- raise ValueError("Undefined dataset task.")
507
+ raise ValueError(f"Undefined dataset task={self.task}.")
507
508
  zipped = zip(labels["cls"], coordinates)
508
509
  return [[int(c[0]), *(round(float(x), 4) for x in points)] for c, points in zipped]
509
510
 
@@ -407,9 +407,9 @@ class Results(SimpleClass):
407
407
  class_id, conf = int(row.cls), round(row.conf.item(), decimals)
408
408
  box = (row.xyxyxyxy if is_obb else row.xyxy).squeeze().reshape(-1, 2).tolist()
409
409
  xy = {}
410
- for i, b in enumerate(box):
411
- xy[f"x{i + 1}"] = round(b[0] / w, decimals)
412
- xy[f"y{i + 1}"] = round(b[1] / h, decimals)
410
+ for j, b in enumerate(box):
411
+ xy[f"x{j + 1}"] = round(b[0] / w, decimals)
412
+ xy[f"y{j + 1}"] = round(b[1] / h, decimals)
413
413
  result = {"name": self.names[class_id], "class": class_id, "confidence": conf, "box": xy}
414
414
  if data.is_track:
415
415
  result["track_id"] = int(row.id.item()) # track ID
@@ -106,22 +106,26 @@ def get_export(model_id="", format="torchscript"):
106
106
  return r.json()
107
107
 
108
108
 
109
- def check_dataset(path="", task="detect"):
109
+ def check_dataset(path: str, task: str) -> None:
110
110
  """
111
111
  Function for error-checking HUB dataset Zip file before upload. It checks a dataset for errors before it is uploaded
112
112
  to the HUB. Usage examples are given below.
113
113
 
114
114
  Args:
115
- path (str, optional): Path to data.zip (with data.yaml inside data.zip). Defaults to ''.
116
- task (str, optional): Dataset task. Options are 'detect', 'segment', 'pose', 'classify'. Defaults to 'detect'.
115
+ path (str): Path to data.zip (with data.yaml inside data.zip).
116
+ task (str): Dataset task. Options are 'detect', 'segment', 'pose', 'classify', 'obb'.
117
117
 
118
118
  Example:
119
+ Download *.zip files from https://github.com/ultralytics/hub/tree/main/example_datasets
120
+ i.e. https://github.com/ultralytics/hub/raw/main/example_datasets/coco8.zip for coco8.zip.
119
121
  ```python
120
122
  from ultralytics.hub import check_dataset
121
123
 
122
124
  check_dataset('path/to/coco8.zip', task='detect') # detect dataset
123
125
  check_dataset('path/to/coco8-seg.zip', task='segment') # segment dataset
124
126
  check_dataset('path/to/coco8-pose.zip', task='pose') # pose dataset
127
+ check_dataset('path/to/dota8.zip', task='obb') # OBB dataset
128
+ check_dataset('path/to/imagenet10.zip', task='classify') # classification dataset
125
129
  ```
126
130
  """
127
131
  HUBDatasetStats(path=path, task=task).get_json()
@@ -102,13 +102,15 @@ HELP_MSG = """
102
102
  GitHub: https://github.com/ultralytics/ultralytics
103
103
  """
104
104
 
105
- # Settings
105
+ # Settings and Environment Variables
106
106
  torch.set_printoptions(linewidth=320, precision=4, profile="default")
107
107
  np.set_printoptions(linewidth=320, formatter={"float_kind": "{:11.5g}".format}) # format short g, %precision=5
108
108
  cv2.setNumThreads(0) # prevent OpenCV from multithreading (incompatible with PyTorch DataLoader)
109
109
  os.environ["NUMEXPR_MAX_THREADS"] = str(NUM_THREADS) # NumExpr max threads
110
110
  os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":4096:8" # for deterministic training
111
111
  os.environ["TF_CPP_MIN_LOG_LEVEL"] = "2" # suppress verbose TF compiler warnings in Colab
112
+ os.environ["TORCH_CPP_LOG_LEVEL"] = "ERROR" # suppress "NNPACK.cpp could not initialize NNPACK" warnings
113
+ os.environ["KINETO_LOG_LEVEL"] = "5" # suppress verbose PyTorch profiler output when computing FLOPs
112
114
 
113
115
 
114
116
  class TQDM(tqdm_original):
@@ -1105,23 +1105,24 @@ def feature_visualization(x, module_type, stage, n=32, save_dir=Path("runs/detec
1105
1105
  n (int, optional): Maximum number of feature maps to plot. Defaults to 32.
1106
1106
  save_dir (Path, optional): Directory to save results. Defaults to Path('runs/detect/exp').
1107
1107
  """
1108
- for m in ["Detect", "Pose", "Segment"]:
1108
+ for m in {"Detect", "Segment", "Pose", "Classify", "OBB", "RTDETRDecoder"}: # all model heads
1109
1109
  if m in module_type:
1110
1110
  return
1111
- _, channels, height, width = x.shape # batch, channels, height, width
1112
- if height > 1 and width > 1:
1113
- f = save_dir / f"stage{stage}_{module_type.split('.')[-1]}_features.png" # filename
1114
-
1115
- blocks = torch.chunk(x[0].cpu(), channels, dim=0) # select batch index 0, block by channels
1116
- n = min(n, channels) # number of plots
1117
- _, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True) # 8 rows x n/8 cols
1118
- ax = ax.ravel()
1119
- plt.subplots_adjust(wspace=0.05, hspace=0.05)
1120
- for i in range(n):
1121
- ax[i].imshow(blocks[i].squeeze()) # cmap='gray'
1122
- ax[i].axis("off")
1123
-
1124
- LOGGER.info(f"Saving {f}... ({n}/{channels})")
1125
- plt.savefig(f, dpi=300, bbox_inches="tight")
1126
- plt.close()
1127
- np.save(str(f.with_suffix(".npy")), x[0].cpu().numpy()) # npy save
1111
+ if isinstance(x, torch.Tensor):
1112
+ _, channels, height, width = x.shape # batch, channels, height, width
1113
+ if height > 1 and width > 1:
1114
+ f = save_dir / f"stage{stage}_{module_type.split('.')[-1]}_features.png" # filename
1115
+
1116
+ blocks = torch.chunk(x[0].cpu(), channels, dim=0) # select batch index 0, block by channels
1117
+ n = min(n, channels) # number of plots
1118
+ _, ax = plt.subplots(math.ceil(n / 8), 8, tight_layout=True) # 8 rows x n/8 cols
1119
+ ax = ax.ravel()
1120
+ plt.subplots_adjust(wspace=0.05, hspace=0.05)
1121
+ for i in range(n):
1122
+ ax[i].imshow(blocks[i].squeeze()) # cmap='gray'
1123
+ ax[i].axis("off")
1124
+
1125
+ LOGGER.info(f"Saving {f}... ({n}/{channels})")
1126
+ plt.savefig(f, dpi=300, bbox_inches="tight")
1127
+ plt.close()
1128
+ np.save(str(f.with_suffix(".npy")), x[0].cpu().numpy()) # npy save
@@ -331,19 +331,28 @@ def get_flops(model, imgsz=640):
331
331
 
332
332
 
333
333
  def get_flops_with_torch_profiler(model, imgsz=640):
334
- """Compute model FLOPs (thop alternative)."""
335
- if TORCH_2_0:
336
- model = de_parallel(model)
337
- p = next(model.parameters())
334
+ """Compute model FLOPs (thop package alternative, but 2-10x slower unfortunately)."""
335
+ if not TORCH_2_0: # torch profiler implemented in torch>=2.0
336
+ return 0.0
337
+ model = de_parallel(model)
338
+ p = next(model.parameters())
339
+ if not isinstance(imgsz, list):
340
+ imgsz = [imgsz, imgsz] # expand if int/float
341
+ try:
342
+ # Use stride size for input tensor
338
343
  stride = (max(int(model.stride.max()), 32) if hasattr(model, "stride") else 32) * 2 # max stride
339
- im = torch.zeros((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format
344
+ im = torch.empty((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format
340
345
  with torch.profiler.profile(with_flops=True) as prof:
341
346
  model(im)
342
347
  flops = sum(x.flops for x in prof.key_averages()) / 1e9
343
- imgsz = imgsz if isinstance(imgsz, list) else [imgsz, imgsz] # expand if int/float
344
348
  flops = flops * imgsz[0] / stride * imgsz[1] / stride # 640x640 GFLOPs
345
- return flops
346
- return 0
349
+ except Exception:
350
+ # Use actual image size for input tensor (i.e. required for RTDETR models)
351
+ im = torch.empty((1, p.shape[1], *imgsz), device=p.device) # input image in BCHW format
352
+ with torch.profiler.profile(with_flops=True) as prof:
353
+ model(im)
354
+ flops = sum(x.flops for x in prof.key_averages()) / 1e9
355
+ return flops
347
356
 
348
357
 
349
358
  def initialize_weights(model):
@@ -390,8 +399,13 @@ def copy_attr(a, b, include=(), exclude=()):
390
399
 
391
400
 
392
401
  def get_latest_opset():
393
- """Return second-most (for maturity) recently supported ONNX opset by this version of torch."""
394
- return max(int(k[14:]) for k in vars(torch.onnx) if "symbolic_opset" in k) - 1 # opset
402
+ """Return the second-most recent ONNX opset version supported by this version of PyTorch, adjusted for maturity."""
403
+ if TORCH_1_13:
404
+ # If the PyTorch>=1.13, dynamically compute the latest opset minus one using 'symbolic_opset'
405
+ return max(int(k[14:]) for k in vars(torch.onnx) if "symbolic_opset" in k) - 1
406
+ # Otherwise for PyTorch<=1.12 return the corresponding predefined opset
407
+ version = torch.onnx.producer_version.rsplit(".", 1)[0] # i.e. '2.3'
408
+ return {"1.12": 15, "1.11": 14, "1.10": 13, "1.9": 12, "1.8": 12}.get(version, 12)
395
409
 
396
410
 
397
411
  def intersect_dicts(da, db, exclude=()):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.13
3
+ Version: 8.2.15
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
File without changes
File without changes
File without changes