ultralytics 8.2.24__tar.gz → 8.2.26__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.24 → ultralytics-8.2.26}/PKG-INFO +7 -6
  2. {ultralytics-8.2.24 → ultralytics-8.2.26}/README.md +3 -3
  3. {ultralytics-8.2.24 → ultralytics-8.2.26}/pyproject.toml +3 -6
  4. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_exports.py +26 -0
  5. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/exporter.py +8 -10
  7. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/val.py +9 -5
  8. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/val.py +2 -1
  9. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/val.py +2 -1
  10. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/tasks.py +2 -2
  11. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/analytics.py +51 -2
  12. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/benchmarks.py +6 -6
  13. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/checks.py +7 -1
  14. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/PKG-INFO +7 -6
  15. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/requires.txt +3 -4
  16. {ultralytics-8.2.24 → ultralytics-8.2.26}/LICENSE +0 -0
  17. {ultralytics-8.2.24 → ultralytics-8.2.26}/setup.cfg +0 -0
  18. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/__init__.py +0 -0
  19. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/conftest.py +0 -0
  20. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_cli.py +0 -0
  21. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_cuda.py +0 -0
  22. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_engine.py +0 -0
  23. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_explorer.py +0 -0
  24. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_integrations.py +0 -0
  25. {ultralytics-8.2.24 → ultralytics-8.2.26}/tests/test_python.py +0 -0
  26. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/assets/bus.jpg +0 -0
  27. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/assets/zidane.jpg +0 -0
  28. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/__init__.py +0 -0
  29. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  30. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  31. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  32. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  33. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  34. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  35. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  36. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  37. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  38. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  39. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  40. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  41. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  42. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco.yaml +0 -0
  43. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  44. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  45. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  49. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  50. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  52. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  53. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/signature.yaml +0 -0
  54. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  55. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/datasets/xView.yaml +0 -0
  56. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/default.yaml +0 -0
  57. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  58. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  59. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  60. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  61. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  62. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  63. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  64. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  65. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  66. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  67. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  68. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  69. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  70. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  71. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  72. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  73. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  74. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  75. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  76. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  77. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  78. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  79. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  80. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  81. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  82. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  83. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  84. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  85. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  86. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  87. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  88. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  89. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  90. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/__init__.py +0 -0
  91. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/annotator.py +0 -0
  92. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/augment.py +0 -0
  93. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/base.py +0 -0
  94. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/build.py +0 -0
  95. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/converter.py +0 -0
  96. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/dataset.py +0 -0
  97. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/__init__.py +0 -0
  98. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/explorer.py +0 -0
  99. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/gui/__init__.py +0 -0
  100. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/gui/dash.py +0 -0
  101. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/explorer/utils.py +0 -0
  102. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/loaders.py +0 -0
  103. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/split_dota.py +0 -0
  104. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/data/utils.py +0 -0
  105. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/__init__.py +0 -0
  106. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/model.py +0 -0
  107. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/predictor.py +0 -0
  108. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/results.py +0 -0
  109. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/trainer.py +0 -0
  110. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/tuner.py +0 -0
  111. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/engine/validator.py +0 -0
  112. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/__init__.py +0 -0
  113. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/auth.py +0 -0
  114. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/session.py +0 -0
  115. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/hub/utils.py +0 -0
  116. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/__init__.py +0 -0
  117. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/__init__.py +0 -0
  118. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/model.py +0 -0
  119. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/predict.py +0 -0
  120. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/prompt.py +0 -0
  121. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/utils.py +0 -0
  122. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/fastsam/val.py +0 -0
  123. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/__init__.py +0 -0
  124. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/model.py +0 -0
  125. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/predict.py +0 -0
  126. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/nas/val.py +0 -0
  127. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/__init__.py +0 -0
  128. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/model.py +0 -0
  129. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/predict.py +0 -0
  130. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/train.py +0 -0
  131. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/rtdetr/val.py +0 -0
  132. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/__init__.py +0 -0
  133. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/amg.py +0 -0
  134. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/build.py +0 -0
  135. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/model.py +0 -0
  136. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/__init__.py +0 -0
  137. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/decoders.py +0 -0
  138. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/encoders.py +0 -0
  139. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/sam.py +0 -0
  140. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  141. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/modules/transformer.py +0 -0
  142. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/sam/predict.py +0 -0
  143. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/utils/__init__.py +0 -0
  144. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/utils/loss.py +0 -0
  145. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/utils/ops.py +0 -0
  146. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/__init__.py +0 -0
  147. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/__init__.py +0 -0
  148. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/predict.py +0 -0
  149. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/train.py +0 -0
  150. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/classify/val.py +0 -0
  151. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/__init__.py +0 -0
  152. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/predict.py +0 -0
  153. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/detect/train.py +0 -0
  154. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/model.py +0 -0
  155. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/__init__.py +0 -0
  156. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/predict.py +0 -0
  157. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/train.py +0 -0
  158. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/obb/val.py +0 -0
  159. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/__init__.py +0 -0
  160. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/predict.py +0 -0
  161. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/pose/train.py +0 -0
  162. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/__init__.py +0 -0
  163. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/predict.py +0 -0
  164. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/segment/train.py +0 -0
  165. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/world/__init__.py +0 -0
  166. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/world/train.py +0 -0
  167. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/models/yolo/world/train_world.py +0 -0
  168. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/__init__.py +0 -0
  169. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/autobackend.py +0 -0
  170. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/__init__.py +0 -0
  171. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/block.py +0 -0
  172. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/conv.py +0 -0
  173. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/head.py +0 -0
  174. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/transformer.py +0 -0
  175. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/nn/modules/utils.py +0 -0
  176. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/__init__.py +0 -0
  177. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/ai_gym.py +0 -0
  178. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/distance_calculation.py +0 -0
  179. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/heatmap.py +0 -0
  180. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/object_counter.py +0 -0
  181. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/parking_management.py +0 -0
  182. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/queue_management.py +0 -0
  183. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/solutions/speed_estimation.py +0 -0
  184. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/__init__.py +0 -0
  185. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/basetrack.py +0 -0
  186. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/bot_sort.py +0 -0
  187. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/byte_tracker.py +0 -0
  188. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/track.py +0 -0
  189. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/__init__.py +0 -0
  190. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/gmc.py +0 -0
  191. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  192. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/trackers/utils/matching.py +0 -0
  193. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/__init__.py +0 -0
  194. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/autobatch.py +0 -0
  195. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/__init__.py +0 -0
  196. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/base.py +0 -0
  197. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/clearml.py +0 -0
  198. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/comet.py +0 -0
  199. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/dvc.py +0 -0
  200. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/hub.py +0 -0
  201. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/mlflow.py +0 -0
  202. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/neptune.py +0 -0
  203. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/raytune.py +0 -0
  204. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  205. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/callbacks/wb.py +0 -0
  206. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/dist.py +0 -0
  207. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/downloads.py +0 -0
  208. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/errors.py +0 -0
  209. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/files.py +0 -0
  210. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/instance.py +0 -0
  211. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/loss.py +0 -0
  212. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/metrics.py +0 -0
  213. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/ops.py +0 -0
  214. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/patches.py +0 -0
  215. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/plotting.py +0 -0
  216. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/tal.py +0 -0
  217. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/torch_utils.py +0 -0
  218. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/triton.py +0 -0
  219. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics/utils/tuner.py +0 -0
  220. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/SOURCES.txt +0 -0
  221. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/dependency_links.txt +0 -0
  222. {ultralytics-8.2.24 → ultralytics-8.2.26}/ultralytics.egg-info/entry_points.txt +0 -0
  223. {ultralytics-8.2.24 → ultralytics-8.2.26}/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.24
3
+ Version: 8.2.26
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
@@ -61,8 +61,9 @@ Provides-Extra: export
61
61
  Requires-Dist: onnx>=1.12.0; extra == "export"
62
62
  Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
63
63
  Requires-Dist: openvino>=2024.0.0; extra == "export"
64
- Requires-Dist: tensorflow<=2.13.1; python_version <= "3.11" and extra == "export"
65
- Requires-Dist: tensorflowjs>=3.9.0; python_version <= "3.11" and extra == "export"
64
+ Requires-Dist: tensorflow>=2.0.0; extra == "export"
65
+ Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
66
+ Requires-Dist: keras; extra == "export"
66
67
  Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
67
68
  Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
68
69
  Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
@@ -116,7 +117,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
116
117
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
117
118
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
118
119
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
119
- <a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
120
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
120
121
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
121
122
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
122
123
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
@@ -184,7 +185,7 @@ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more exa
184
185
 
185
186
  ### Notebooks
186
187
 
187
- Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics) tutorial, making it easy to learn and implement advanced YOLOv8 features.
188
+ Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics?sub_confirmation=1) tutorial, making it easy to learn and implement advanced YOLOv8 features.
188
189
 
189
190
  | Docs | Notebook | YouTube |
190
191
  | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
@@ -369,7 +370,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
369
370
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
370
371
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
371
372
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
372
- <a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
373
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
373
374
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
374
375
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
375
376
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
@@ -34,7 +34,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
34
34
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
35
35
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
36
36
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
37
- <a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
37
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
38
38
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
39
39
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
40
40
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
@@ -102,7 +102,7 @@ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more exa
102
102
 
103
103
  ### Notebooks
104
104
 
105
- Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics) tutorial, making it easy to learn and implement advanced YOLOv8 features.
105
+ Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics?sub_confirmation=1) tutorial, making it easy to learn and implement advanced YOLOv8 features.
106
106
 
107
107
  | Docs | Notebook | YouTube |
108
108
  | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
@@ -287,7 +287,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
287
287
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
288
288
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
289
289
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
290
- <a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
290
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
291
291
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
292
292
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
293
293
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
@@ -100,8 +100,9 @@ export = [
100
100
  "onnx>=1.12.0", # ONNX export
101
101
  "coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux
102
102
  "openvino>=2024.0.0", # OpenVINO export
103
- "tensorflow<=2.13.1; python_version <= '3.11'", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
104
- "tensorflowjs>=3.9.0; python_version <= '3.11'", # TF.js export, automatically installs tensorflow
103
+ "tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
104
+ "tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
105
+ "keras", # not installed automatically by tensorflow>=2.16
105
106
  "flatbuffers>=23.5.26,<100; platform_machine == 'aarch64'", # update old 'flatbuffers' included inside tensorflow package
106
107
  "numpy==1.23.5; platform_machine == 'aarch64'", # fix error: `np.bool` was a deprecated alias for the builtin `bool` when using TensorRT models on NVIDIA Jetson
107
108
  "h5py!=3.11.0; platform_machine == 'aarch64'", # fix h5py build issues due to missing aarch64 wheels in 3.11 release
@@ -111,10 +112,6 @@ explorer = [
111
112
  "duckdb<=0.9.2", # SQL queries, duckdb==0.10.0 bug https://github.com/ultralytics/ultralytics/pull/8181
112
113
  "streamlit", # visualizing with GUI
113
114
  ]
114
- # tensorflow>=2.4.1,<=2.13.1 # TF exports (-cpu, -aarch64, -macos)
115
- # tflite-support # for TFLite model metadata
116
- # nvidia-pyindex # TensorRT export
117
- # nvidia-tensorrt # TensorRT export
118
115
  logging = [
119
116
  "comet", # https://docs.ultralytics.com/integrations/comet/
120
117
  "tensorboard>=2.13.0",
@@ -129,6 +129,31 @@ def test_export_coreml_matrix(task, dynamic, int8, half, batch):
129
129
  shutil.rmtree(file) # cleanup
130
130
 
131
131
 
132
+ @pytest.mark.slow
133
+ @pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10, reason="TFLite export requires Python>=3.10")
134
+ @pytest.mark.skipif(not LINUX, reason="Test disabled as TF suffers from install conflicts on Windows and macOS")
135
+ @pytest.mark.parametrize(
136
+ "task, dynamic, int8, half, batch",
137
+ [ # generate all combinations but exclude those where both int8 and half are True
138
+ (task, dynamic, int8, half, batch)
139
+ for task, dynamic, int8, half, batch in product(TASKS, [False], [True, False], [True, False], [1])
140
+ if not (int8 and half) # exclude cases where both int8 and half are True
141
+ ],
142
+ )
143
+ def test_export_tflite_matrix(task, dynamic, int8, half, batch):
144
+ """Test YOLO exports to TFLite format."""
145
+ file = YOLO(TASK2MODEL[task]).export(
146
+ format="tflite",
147
+ imgsz=32,
148
+ dynamic=dynamic,
149
+ int8=int8,
150
+ half=half,
151
+ batch=batch,
152
+ )
153
+ YOLO(file)([SOURCE] * batch, imgsz=32) # exported model inference at batch=3
154
+ Path(file).unlink() # cleanup
155
+
156
+
132
157
  @pytest.mark.skipif(not TORCH_1_9, reason="CoreML>=7.2 not supported with PyTorch<=1.8")
133
158
  @pytest.mark.skipif(WINDOWS, reason="CoreML not supported on Windows") # RuntimeError: BlobWriter not loaded
134
159
  @pytest.mark.skipif(IS_RASPBERRYPI, reason="CoreML not supported on Raspberry Pi")
@@ -142,6 +167,7 @@ def test_export_coreml():
142
167
  YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
143
168
 
144
169
 
170
+ @pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10, reason="TFLite export requires Python>=3.10")
145
171
  @pytest.mark.skipif(not LINUX, reason="Test disabled as TF suffers from install conflicts on Windows and macOS")
146
172
  def test_export_tflite():
147
173
  """
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.24"
3
+ __version__ = "8.2.26"
4
4
 
5
5
  import os
6
6
 
@@ -83,7 +83,6 @@ from ultralytics.utils import (
83
83
  WINDOWS,
84
84
  __version__,
85
85
  callbacks,
86
- checks,
87
86
  colorstr,
88
87
  get_default_args,
89
88
  yaml_save,
@@ -385,9 +384,7 @@ class Exporter:
385
384
  """YOLOv8 ONNX export."""
386
385
  requirements = ["onnx>=1.12.0"]
387
386
  if self.args.simplify:
388
- requirements += ["onnxsim>=0.4.33", "onnxruntime-gpu" if torch.cuda.is_available() else "onnxruntime"]
389
- if ARM64:
390
- check_requirements("cmake") # 'cmake' is needed to build onnxsim on aarch64
387
+ requirements += ["cmake", "onnxsim>=0.4.33", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
391
388
  check_requirements(requirements)
392
389
  import onnx # noqa
393
390
 
@@ -813,15 +810,16 @@ class Exporter:
813
810
  import tensorflow as tf # noqa
814
811
  except ImportError:
815
812
  suffix = "-macos" if MACOS else "-aarch64" if ARM64 else "" if cuda else "-cpu"
816
- version = "" if ARM64 else "<=2.13.1"
817
- check_requirements((f"tensorflow{suffix}{version}", "keras"))
813
+ version = ">=2.0.0"
814
+ check_requirements(f"tensorflow{suffix}{version}")
818
815
  import tensorflow as tf # noqa
819
- if ARM64:
820
- check_requirements("cmake") # 'cmake' is needed to build onnxsim on aarch64
821
816
  check_requirements(
822
817
  (
818
+ "cmake", # 'cmake' is needed to build onnxsim on aarch64 and Conda runners
819
+ "keras", # required by onnx2tf package
820
+ "tf_keras", # required by onnx2tf package
823
821
  "onnx>=1.12.0",
824
- "onnx2tf>=1.15.4,<=1.17.5",
822
+ "onnx2tf>1.17.5,<=1.22.3",
825
823
  "sng4onnx>=1.0.1",
826
824
  "onnxsim>=0.4.33",
827
825
  "onnx_graphsurgeon>=0.3.26",
@@ -835,7 +833,7 @@ class Exporter:
835
833
  LOGGER.info(f"\n{prefix} starting export with tensorflow {tf.__version__}...")
836
834
  check_version(
837
835
  tf.__version__,
838
- "<=2.13.1",
836
+ ">=2.0.0",
839
837
  name="tensorflow",
840
838
  verbose=True,
841
839
  msg="https://github.com/ultralytics/ultralytics/issues/5161",
@@ -32,6 +32,7 @@ class DetectionValidator(BaseValidator):
32
32
  """Initialize detection model with necessary variables and settings."""
33
33
  super().__init__(dataloader, save_dir, pbar, args, _callbacks)
34
34
  self.nt_per_class = None
35
+ self.nt_per_image = None
35
36
  self.is_coco = False
36
37
  self.is_lvis = False
37
38
  self.class_map = None
@@ -77,7 +78,7 @@ class DetectionValidator(BaseValidator):
77
78
  self.confusion_matrix = ConfusionMatrix(nc=self.nc, conf=self.args.conf)
78
79
  self.seen = 0
79
80
  self.jdict = []
80
- self.stats = dict(tp=[], conf=[], pred_cls=[], target_cls=[])
81
+ self.stats = dict(tp=[], conf=[], pred_cls=[], target_cls=[], target_img=[])
81
82
 
82
83
  def get_desc(self):
83
84
  """Return a formatted string summarizing class metrics of YOLO model."""
@@ -130,6 +131,7 @@ class DetectionValidator(BaseValidator):
130
131
  cls, bbox = pbatch.pop("cls"), pbatch.pop("bbox")
131
132
  nl = len(cls)
132
133
  stat["target_cls"] = cls
134
+ stat["target_img"] = cls.unique()
133
135
  if npr == 0:
134
136
  if nl:
135
137
  for k in self.stats.keys():
@@ -168,11 +170,11 @@ class DetectionValidator(BaseValidator):
168
170
  def get_stats(self):
169
171
  """Returns metrics statistics and results dictionary."""
170
172
  stats = {k: torch.cat(v, 0).cpu().numpy() for k, v in self.stats.items()} # to numpy
173
+ self.nt_per_class = np.bincount(stats["target_cls"].astype(int), minlength=self.nc)
174
+ self.nt_per_image = np.bincount(stats["target_img"].astype(int), minlength=self.nc)
175
+ stats.pop("target_img", None)
171
176
  if len(stats) and stats["tp"].any():
172
177
  self.metrics.process(**stats)
173
- self.nt_per_class = np.bincount(
174
- stats["target_cls"].astype(int), minlength=self.nc
175
- ) # number of targets per class
176
178
  return self.metrics.results_dict
177
179
 
178
180
  def print_results(self):
@@ -185,7 +187,9 @@ class DetectionValidator(BaseValidator):
185
187
  # Print results per class
186
188
  if self.args.verbose and not self.training and self.nc > 1 and len(self.stats):
187
189
  for i, c in enumerate(self.metrics.ap_class_index):
188
- LOGGER.info(pf % (self.names[c], self.seen, self.nt_per_class[c], *self.metrics.class_result(i)))
190
+ LOGGER.info(
191
+ pf % (self.names[c], self.nt_per_image[c], self.nt_per_class[c], *self.metrics.class_result(i))
192
+ )
189
193
 
190
194
  if self.args.plots:
191
195
  for normalize in True, False:
@@ -81,7 +81,7 @@ class PoseValidator(DetectionValidator):
81
81
  is_pose = self.kpt_shape == [17, 3]
82
82
  nkpt = self.kpt_shape[0]
83
83
  self.sigma = OKS_SIGMA if is_pose else np.ones(nkpt) / nkpt
84
- self.stats = dict(tp_p=[], tp=[], conf=[], pred_cls=[], target_cls=[])
84
+ self.stats = dict(tp_p=[], tp=[], conf=[], pred_cls=[], target_cls=[], target_img=[])
85
85
 
86
86
  def _prepare_batch(self, si, batch):
87
87
  """Prepares a batch for processing by converting keypoints to float and moving to device."""
@@ -118,6 +118,7 @@ class PoseValidator(DetectionValidator):
118
118
  cls, bbox = pbatch.pop("cls"), pbatch.pop("bbox")
119
119
  nl = len(cls)
120
120
  stat["target_cls"] = cls
121
+ stat["target_img"] = cls.unique()
121
122
  if npr == 0:
122
123
  if nl:
123
124
  for k in self.stats.keys():
@@ -51,7 +51,7 @@ class SegmentationValidator(DetectionValidator):
51
51
  self.process = ops.process_mask_upsample # more accurate
52
52
  else:
53
53
  self.process = ops.process_mask # faster
54
- self.stats = dict(tp_m=[], tp=[], conf=[], pred_cls=[], target_cls=[])
54
+ self.stats = dict(tp_m=[], tp=[], conf=[], pred_cls=[], target_cls=[], target_img=[])
55
55
 
56
56
  def get_desc(self):
57
57
  """Return a formatted description of evaluation metrics."""
@@ -112,6 +112,7 @@ class SegmentationValidator(DetectionValidator):
112
112
  cls, bbox = pbatch.pop("cls"), pbatch.pop("bbox")
113
113
  nl = len(cls)
114
114
  stat["target_cls"] = cls
115
+ stat["target_img"] = cls.unique()
115
116
  if npr == 0:
116
117
  if nl:
117
118
  for k in self.stats.keys():
@@ -425,11 +425,11 @@ class ClassificationModel(BaseModel):
425
425
  elif isinstance(m, nn.Sequential):
426
426
  types = [type(x) for x in m]
427
427
  if nn.Linear in types:
428
- i = types.index(nn.Linear) # nn.Linear index
428
+ i = len(types) - 1 - types[::-1].index(nn.Linear) # last nn.Linear index
429
429
  if m[i].out_features != nc:
430
430
  m[i] = nn.Linear(m[i].in_features, nc)
431
431
  elif nn.Conv2d in types:
432
- i = types.index(nn.Conv2d) # nn.Conv2d index
432
+ i = len(types) - 1 - types[::-1].index(nn.Conv2d) # last nn.Conv2d index
433
433
  if m[i].out_channels != nc:
434
434
  m[i] = nn.Conv2d(m[i].in_channels, nc, m[i].kernel_size, m[i].stride, bias=m[i].bias is not None)
435
435
 
@@ -1,5 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
+ import warnings
3
4
  from itertools import cycle
4
5
 
5
6
  import cv2
@@ -27,6 +28,7 @@ class Analytics:
27
28
  fontsize=13,
28
29
  view_img=False,
29
30
  save_img=True,
31
+ max_points=50,
30
32
  ):
31
33
  """
32
34
  Initialize the Analytics class with various chart types.
@@ -45,6 +47,7 @@ class Analytics:
45
47
  fontsize (int): Font size for chart text.
46
48
  view_img (bool): Whether to display the image.
47
49
  save_img (bool): Whether to save the image.
50
+ max_points (int): Specifies when to remove the oldest points in a graph for multiple lines.
48
51
  """
49
52
 
50
53
  self.bg_color = bg_color
@@ -53,12 +56,14 @@ class Analytics:
53
56
  self.save_img = save_img
54
57
  self.title = title
55
58
  self.writer = writer
59
+ self.max_points = max_points
56
60
 
57
61
  # Set figure size based on image shape
58
62
  figsize = (im0_shape[0] / 100, im0_shape[1] / 100)
59
63
 
60
64
  if type == "line":
61
65
  # Initialize line plot
66
+ self.lines = {}
62
67
  fig = Figure(facecolor=self.bg_color, figsize=figsize)
63
68
  self.canvas = FigureCanvas(fig)
64
69
  self.ax = fig.add_subplot(111, facecolor=self.bg_color)
@@ -112,9 +117,53 @@ class Analytics:
112
117
  self.ax.autoscale_view()
113
118
  self.canvas.draw()
114
119
  im0 = np.array(self.canvas.renderer.buffer_rgba())
115
- im0 = cv2.cvtColor(im0[:, :, :3], cv2.COLOR_RGBA2BGR)
120
+ self.write_and_display_line(im0)
116
121
 
117
- # Display and save the updated graph
122
+ def update_multiple_lines(self, counts_dict, labels_list, frame_number):
123
+ """
124
+ Update the line graph with multiple classes.
125
+
126
+ Args:
127
+ counts_dict (int): Dictionary include each class counts.
128
+ labels_list (int): list include each classes names.
129
+ frame_number (int): The current frame number.
130
+ """
131
+ warnings.warn("Display is not supported for multiple lines, output will be stored normally!")
132
+ for obj in labels_list:
133
+ if obj not in self.lines:
134
+ (line,) = self.ax.plot([], [], label=obj, marker="o", markersize=15)
135
+ self.lines[obj] = line
136
+
137
+ x_data = self.lines[obj].get_xdata()
138
+ y_data = self.lines[obj].get_ydata()
139
+
140
+ # Remove the initial point if the number of points exceeds max_points
141
+ if len(x_data) >= self.max_points:
142
+ x_data = np.delete(x_data, 0)
143
+ y_data = np.delete(y_data, 0)
144
+
145
+ x_data = np.append(x_data, float(frame_number)) # Ensure frame_number is converted to float
146
+ y_data = np.append(y_data, float(counts_dict.get(obj, 0))) # Ensure total_count is converted to float
147
+ self.lines[obj].set_data(x_data, y_data)
148
+
149
+ self.ax.relim()
150
+ self.ax.autoscale_view()
151
+ self.ax.legend()
152
+ self.canvas.draw()
153
+
154
+ im0 = np.array(self.canvas.renderer.buffer_rgba())
155
+ self.view_img = False # for multiple line view_img not supported yet, coming soon!
156
+ self.write_and_display_line(im0)
157
+
158
+ def write_and_display_line(self, im0):
159
+ """
160
+ Write and display the line graph
161
+ Args:
162
+ im0 (ndarray): Image for processing
163
+ """
164
+
165
+ # convert image to BGR format
166
+ im0 = cv2.cvtColor(im0[:, :, :3], cv2.COLOR_RGBA2BGR)
118
167
  cv2.imshow(self.title, im0) if self.view_img else None
119
168
  self.writer.write(im0) if self.save_img else None
120
169
 
@@ -88,14 +88,14 @@ def benchmark(
88
88
  emoji, filename = "❌", None # export defaults
89
89
  try:
90
90
  # Checks
91
- if i == 5: # CoreML
92
- assert not (IS_RASPBERRYPI or IS_JETSON), "CoreML export not supported on Raspberry Pi or NVIDIA Jetson"
93
- if i == 9: # Edge TPU
94
- assert LINUX and not ARM64, "Edge TPU export only supported on non-aarch64 Linux"
95
- elif i == 7: # TF GraphDef
91
+ if i == 7: # TF GraphDef
96
92
  assert model.task != "obb", "TensorFlow GraphDef not supported for OBB task"
93
+ elif i == 9: # Edge TPU
94
+ assert LINUX and not ARM64, "Edge TPU export only supported on non-aarch64 Linux"
97
95
  elif i in {5, 10}: # CoreML and TF.js
98
- assert MACOS or LINUX, "export only supported on macOS and Linux"
96
+ assert MACOS or LINUX, "CoreML and TF.js export only supported on macOS and Linux"
97
+ assert not IS_RASPBERRYPI, "CoreML and TF.js export not supported on Raspberry Pi"
98
+ assert not IS_JETSON, "CoreML and TF.js export not supported on NVIDIA Jetson"
99
99
  if i in {3, 5}: # CoreML and OpenVINO
100
100
  assert not IS_PYTHON_3_12, "CoreML and OpenVINO not supported on Python 3.12"
101
101
  if i in {6, 7, 8, 9, 10}: # All TF formats
@@ -33,6 +33,7 @@ from ultralytics.utils import (
33
33
  ROOT,
34
34
  TORCHVISION_VERSION,
35
35
  USER_CONFIG_DIR,
36
+ Retry,
36
37
  SimpleNamespace,
37
38
  ThreadingLocked,
38
39
  TryExcept,
@@ -381,6 +382,11 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
381
382
  except (AssertionError, metadata.PackageNotFoundError):
382
383
  pkgs.append(r)
383
384
 
385
+ @Retry(times=2, delay=1)
386
+ def attempt_install(packages, commands):
387
+ """Attempt pip install command with retries on failure."""
388
+ return subprocess.check_output(f"pip install --no-cache-dir {packages} {commands}", shell=True).decode()
389
+
384
390
  s = " ".join(f'"{x}"' for x in pkgs) # console string
385
391
  if s:
386
392
  if install and AUTOINSTALL: # check environment variable
@@ -389,7 +395,7 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
389
395
  try:
390
396
  t = time.time()
391
397
  assert ONLINE, "AutoUpdate skipped (offline)"
392
- LOGGER.info(subprocess.check_output(f"pip install --no-cache-dir {s} {cmds}", shell=True).decode())
398
+ LOGGER.info(attempt_install(s, cmds))
393
399
  dt = time.time() - t
394
400
  LOGGER.info(
395
401
  f"{prefix} AutoUpdate success ✅ {dt:.1f}s, installed {n} package{'s' * (n > 1)}: {pkgs}\n"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.24
3
+ Version: 8.2.26
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
@@ -61,8 +61,9 @@ Provides-Extra: export
61
61
  Requires-Dist: onnx>=1.12.0; extra == "export"
62
62
  Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
63
63
  Requires-Dist: openvino>=2024.0.0; extra == "export"
64
- Requires-Dist: tensorflow<=2.13.1; python_version <= "3.11" and extra == "export"
65
- Requires-Dist: tensorflowjs>=3.9.0; python_version <= "3.11" and extra == "export"
64
+ Requires-Dist: tensorflow>=2.0.0; extra == "export"
65
+ Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
66
+ Requires-Dist: keras; extra == "export"
66
67
  Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
67
68
  Requires-Dist: numpy==1.23.5; platform_machine == "aarch64" and extra == "export"
68
69
  Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
@@ -116,7 +117,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
116
117
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
117
118
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="2%" alt="Ultralytics Twitter"></a>
118
119
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
119
- <a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
120
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="2%" alt="Ultralytics YouTube"></a>
120
121
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
121
122
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
122
123
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
@@ -184,7 +185,7 @@ See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python) for more exa
184
185
 
185
186
  ### Notebooks
186
187
 
187
- Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics) tutorial, making it easy to learn and implement advanced YOLOv8 features.
188
+ Ultralytics provides interactive notebooks for YOLOv8, covering training, validation, tracking, and more. Each notebook is paired with a [YouTube](https://youtube.com/ultralytics?sub_confirmation=1) tutorial, making it easy to learn and implement advanced YOLOv8 features.
188
189
 
189
190
  | Docs | Notebook | YouTube |
190
191
  | --------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
@@ -369,7 +370,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
369
370
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
370
371
  <a href="https://twitter.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-twitter.png" width="3%" alt="Ultralytics Twitter"></a>
371
372
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
372
- <a href="https://youtube.com/ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
373
+ <a href="https://youtube.com/ultralytics?sub_confirmation=1"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-youtube.png" width="3%" alt="Ultralytics YouTube"></a>
373
374
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
374
375
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
375
376
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
@@ -35,6 +35,9 @@ streamlit
35
35
  [export]
36
36
  onnx>=1.12.0
37
37
  openvino>=2024.0.0
38
+ tensorflow>=2.0.0
39
+ tensorflowjs>=3.9.0
40
+ keras
38
41
 
39
42
  [export:platform_machine == "aarch64"]
40
43
  flatbuffers<100,>=23.5.26
@@ -44,10 +47,6 @@ h5py!=3.11.0
44
47
  [export:platform_system != "Windows" and python_version <= "3.11"]
45
48
  coremltools>=7.0
46
49
 
47
- [export:python_version <= "3.11"]
48
- tensorflow<=2.13.1
49
- tensorflowjs>=3.9.0
50
-
51
50
  [extra]
52
51
  hub-sdk>=0.0.5
53
52
  ipython
File without changes
File without changes