ultralytics 8.2.102__tar.gz → 8.2.103__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 (239) hide show
  1. {ultralytics-8.2.102/ultralytics.egg-info → ultralytics-8.2.103}/PKG-INFO +1 -1
  2. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/__init__.py +1 -1
  3. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/__init__.py +9 -2
  4. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/benchmarks.py +103 -66
  5. {ultralytics-8.2.102 → ultralytics-8.2.103/ultralytics.egg-info}/PKG-INFO +1 -1
  6. {ultralytics-8.2.102 → ultralytics-8.2.103}/LICENSE +0 -0
  7. {ultralytics-8.2.102 → ultralytics-8.2.103}/README.md +0 -0
  8. {ultralytics-8.2.102 → ultralytics-8.2.103}/pyproject.toml +0 -0
  9. {ultralytics-8.2.102 → ultralytics-8.2.103}/setup.cfg +0 -0
  10. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/__init__.py +0 -0
  11. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/conftest.py +0 -0
  12. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_cli.py +0 -0
  13. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_cuda.py +0 -0
  14. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_engine.py +0 -0
  15. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_explorer.py +0 -0
  16. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_exports.py +0 -0
  17. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_integrations.py +0 -0
  18. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_python.py +0 -0
  19. {ultralytics-8.2.102 → ultralytics-8.2.103}/tests/test_solutions.py +0 -0
  20. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/assets/bus.jpg +0 -0
  21. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/assets/zidane.jpg +0 -0
  22. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/__init__.py +0 -0
  23. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  24. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  25. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  26. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  27. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  28. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  29. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  30. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  31. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  32. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  33. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  34. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  35. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  36. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco.yaml +0 -0
  37. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  38. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  39. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  40. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  41. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  42. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  43. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  44. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  45. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  46. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  47. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  48. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/signature.yaml +0 -0
  49. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  50. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/datasets/xView.yaml +0 -0
  51. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/default.yaml +0 -0
  52. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  53. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  54. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  55. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  56. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  57. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  58. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  59. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  60. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  61. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  62. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  63. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  64. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  65. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  66. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  67. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  68. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  69. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  70. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  71. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  72. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  73. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  74. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  75. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  76. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  77. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  78. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  79. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  80. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  81. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  82. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  83. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  84. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  85. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  86. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  87. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  88. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  89. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  90. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  91. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  92. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  93. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  94. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/__init__.py +0 -0
  95. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/annotator.py +0 -0
  96. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/augment.py +0 -0
  97. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/base.py +0 -0
  98. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/build.py +0 -0
  99. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/converter.py +0 -0
  100. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/dataset.py +0 -0
  101. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/explorer/__init__.py +0 -0
  102. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/explorer/explorer.py +0 -0
  103. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/explorer/gui/__init__.py +0 -0
  104. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/explorer/gui/dash.py +0 -0
  105. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/explorer/utils.py +0 -0
  106. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/loaders.py +0 -0
  107. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/split_dota.py +0 -0
  108. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/data/utils.py +0 -0
  109. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/__init__.py +0 -0
  110. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/exporter.py +0 -0
  111. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/model.py +0 -0
  112. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/predictor.py +0 -0
  113. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/results.py +0 -0
  114. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/trainer.py +0 -0
  115. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/tuner.py +0 -0
  116. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/engine/validator.py +0 -0
  117. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/hub/__init__.py +0 -0
  118. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/hub/auth.py +0 -0
  119. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/hub/google/__init__.py +0 -0
  120. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/hub/session.py +0 -0
  121. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/hub/utils.py +0 -0
  122. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/__init__.py +0 -0
  123. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/fastsam/__init__.py +0 -0
  124. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/fastsam/model.py +0 -0
  125. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/fastsam/predict.py +0 -0
  126. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/fastsam/utils.py +0 -0
  127. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/fastsam/val.py +0 -0
  128. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/nas/__init__.py +0 -0
  129. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/nas/model.py +0 -0
  130. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/nas/predict.py +0 -0
  131. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/nas/val.py +0 -0
  132. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/rtdetr/__init__.py +0 -0
  133. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/rtdetr/model.py +0 -0
  134. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/rtdetr/predict.py +0 -0
  135. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/rtdetr/train.py +0 -0
  136. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/rtdetr/val.py +0 -0
  137. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/__init__.py +0 -0
  138. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/amg.py +0 -0
  139. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/build.py +0 -0
  140. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/model.py +0 -0
  141. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/__init__.py +0 -0
  142. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/blocks.py +0 -0
  143. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/decoders.py +0 -0
  144. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/encoders.py +0 -0
  145. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  146. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/sam.py +0 -0
  147. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  148. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/transformer.py +0 -0
  149. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/modules/utils.py +0 -0
  150. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/sam/predict.py +0 -0
  151. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/utils/__init__.py +0 -0
  152. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/utils/loss.py +0 -0
  153. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/utils/ops.py +0 -0
  154. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/__init__.py +0 -0
  155. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/__init__.py +0 -0
  156. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/predict.py +0 -0
  157. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/train.py +0 -0
  158. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/val.py +0 -0
  159. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/__init__.py +0 -0
  160. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/predict.py +0 -0
  161. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/train.py +0 -0
  162. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/val.py +0 -0
  163. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/model.py +0 -0
  164. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/__init__.py +0 -0
  165. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/predict.py +0 -0
  166. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/train.py +0 -0
  167. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/val.py +0 -0
  168. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/__init__.py +0 -0
  169. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/predict.py +0 -0
  170. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/train.py +0 -0
  171. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/val.py +0 -0
  172. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/__init__.py +0 -0
  173. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/predict.py +0 -0
  174. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/train.py +0 -0
  175. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/val.py +0 -0
  176. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/world/__init__.py +0 -0
  177. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/world/train.py +0 -0
  178. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/models/yolo/world/train_world.py +0 -0
  179. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/__init__.py +0 -0
  180. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/autobackend.py +0 -0
  181. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/__init__.py +0 -0
  182. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/activation.py +0 -0
  183. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/block.py +0 -0
  184. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/conv.py +0 -0
  185. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/head.py +0 -0
  186. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/transformer.py +0 -0
  187. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/modules/utils.py +0 -0
  188. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/nn/tasks.py +0 -0
  189. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/__init__.py +0 -0
  190. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/ai_gym.py +0 -0
  191. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/analytics.py +0 -0
  192. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/distance_calculation.py +0 -0
  193. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/heatmap.py +0 -0
  194. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/object_counter.py +0 -0
  195. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/parking_management.py +0 -0
  196. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/queue_management.py +0 -0
  197. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/speed_estimation.py +0 -0
  198. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/solutions/streamlit_inference.py +0 -0
  199. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/__init__.py +0 -0
  200. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/basetrack.py +0 -0
  201. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/bot_sort.py +0 -0
  202. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/byte_tracker.py +0 -0
  203. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/track.py +0 -0
  204. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/utils/__init__.py +0 -0
  205. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/utils/gmc.py +0 -0
  206. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  207. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/trackers/utils/matching.py +0 -0
  208. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/autobatch.py +0 -0
  209. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/__init__.py +0 -0
  210. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/base.py +0 -0
  211. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/clearml.py +0 -0
  212. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/comet.py +0 -0
  213. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/dvc.py +0 -0
  214. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/hub.py +0 -0
  215. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/mlflow.py +0 -0
  216. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/neptune.py +0 -0
  217. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/raytune.py +0 -0
  218. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  219. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/callbacks/wb.py +0 -0
  220. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/checks.py +0 -0
  221. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/dist.py +0 -0
  222. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/downloads.py +0 -0
  223. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/errors.py +0 -0
  224. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/files.py +0 -0
  225. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/instance.py +0 -0
  226. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/loss.py +0 -0
  227. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/metrics.py +0 -0
  228. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/ops.py +0 -0
  229. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/patches.py +0 -0
  230. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/plotting.py +0 -0
  231. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/tal.py +0 -0
  232. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/torch_utils.py +0 -0
  233. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/triton.py +0 -0
  234. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics/utils/tuner.py +0 -0
  235. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics.egg-info/SOURCES.txt +0 -0
  236. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics.egg-info/dependency_links.txt +0 -0
  237. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics.egg-info/entry_points.txt +0 -0
  238. {ultralytics-8.2.102 → ultralytics-8.2.103}/ultralytics.egg-info/requires.txt +0 -0
  239. {ultralytics-8.2.102 → ultralytics-8.2.103}/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.102
3
+ Version: 8.2.103
4
4
  Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Ayush Chaurasia
6
6
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.102"
3
+ __version__ = "8.2.103"
4
4
 
5
5
 
6
6
  import os
@@ -1091,10 +1091,17 @@ class JSONDict(dict):
1091
1091
  try:
1092
1092
  self.file_path.parent.mkdir(parents=True, exist_ok=True)
1093
1093
  with open(self.file_path, "w") as f:
1094
- json.dump(dict(self), f, indent=2)
1094
+ json.dump(dict(self), f, indent=2, default=self._json_default)
1095
1095
  except Exception as e:
1096
1096
  print(f"Error writing to {self.file_path}: {e}")
1097
1097
 
1098
+ @staticmethod
1099
+ def _json_default(obj):
1100
+ """Handle JSON serialization of Path objects."""
1101
+ if isinstance(obj, Path):
1102
+ return str(obj)
1103
+ raise TypeError(f"Object of type {type(obj).__name__} is not JSON serializable")
1104
+
1098
1105
  def __setitem__(self, key, value):
1099
1106
  """Store a key-value pair and persist to disk."""
1100
1107
  with self.lock:
@@ -1109,7 +1116,7 @@ class JSONDict(dict):
1109
1116
 
1110
1117
  def __str__(self):
1111
1118
  """Return a pretty-printed JSON string representation of the dictionary."""
1112
- return f'JSONDict("{self.file_path}"):\n{json.dumps(dict(self), indent=2, ensure_ascii=False)}'
1119
+ return f'JSONDict("{self.file_path}"):\n{json.dumps(dict(self), indent=2, ensure_ascii=False, default=self._json_default)}'
1113
1120
 
1114
1121
  def update(self, *args, **kwargs):
1115
1122
  """Update the dictionary and persist changes."""
@@ -43,36 +43,40 @@ from ultralytics.utils import ARM64, ASSETS, IS_JETSON, IS_RASPBERRYPI, LINUX, L
43
43
  from ultralytics.utils.checks import IS_PYTHON_3_12, check_requirements, check_yolo
44
44
  from ultralytics.utils.downloads import safe_download
45
45
  from ultralytics.utils.files import file_size
46
- from ultralytics.utils.torch_utils import select_device
46
+ from ultralytics.utils.torch_utils import get_cpu_info, select_device
47
47
 
48
48
 
49
49
  def benchmark(
50
- model=WEIGHTS_DIR / "yolov8n.pt", data=None, imgsz=160, half=False, int8=False, device="cpu", verbose=False
50
+ model=WEIGHTS_DIR / "yolov8n.pt",
51
+ data=None,
52
+ imgsz=160,
53
+ half=False,
54
+ int8=False,
55
+ device="cpu",
56
+ verbose=False,
57
+ eps=1e-3,
51
58
  ):
52
59
  """
53
60
  Benchmark a YOLO model across different formats for speed and accuracy.
54
61
 
55
62
  Args:
56
- model (str | Path | optional): Path to the model file or directory. Default is
57
- Path(SETTINGS['weights_dir']) / 'yolov8n.pt'.
58
- data (str, optional): Dataset to evaluate on, inherited from TASK2DATA if not passed. Default is None.
59
- imgsz (int, optional): Image size for the benchmark. Default is 160.
60
- half (bool, optional): Use half-precision for the model if True. Default is False.
61
- int8 (bool, optional): Use int8-precision for the model if True. Default is False.
62
- device (str, optional): Device to run the benchmark on, either 'cpu' or 'cuda'. Default is 'cpu'.
63
- verbose (bool | float | optional): If True or a float, assert benchmarks pass with given metric.
64
- Default is False.
63
+ model (str | Path): Path to the model file or directory.
64
+ data (str | None): Dataset to evaluate on, inherited from TASK2DATA if not passed.
65
+ imgsz (int): Image size for the benchmark.
66
+ half (bool): Use half-precision for the model if True.
67
+ int8 (bool): Use int8-precision for the model if True.
68
+ device (str): Device to run the benchmark on, either 'cpu' or 'cuda'.
69
+ verbose (bool | float): If True or a float, assert benchmarks pass with given metric.
70
+ eps (float): Epsilon value for divide by zero prevention.
65
71
 
66
72
  Returns:
67
- df (pandas.DataFrame): A pandas DataFrame with benchmark results for each format, including file size,
68
- metric, and inference time.
73
+ (pandas.DataFrame): A pandas DataFrame with benchmark results for each format, including file size, metric,
74
+ and inference time.
69
75
 
70
- Example:
71
- ```python
72
- from ultralytics.utils.benchmarks import benchmark
73
-
74
- benchmark(model="yolov8n.pt", imgsz=640)
75
- ```
76
+ Examples:
77
+ Benchmark a YOLO model with default settings:
78
+ >>> from ultralytics.utils.benchmarks import benchmark
79
+ >>> benchmark(model="yolov8n.pt", imgsz=640)
76
80
  """
77
81
  import pandas as pd # scope for faster 'import ultralytics'
78
82
 
@@ -106,6 +110,7 @@ def benchmark(
106
110
  if i in {11}: # Paddle
107
111
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 Paddle exports not supported yet"
108
112
  assert not is_end2end, "End-to-end models not supported by PaddlePaddle yet"
113
+ assert LINUX or MACOS, "Windows Paddle exports not supported yet"
109
114
  if i in {12}: # NCNN
110
115
  assert not isinstance(model, YOLOWorld), "YOLOWorldv2 NCNN exports not supported yet"
111
116
  if "cpu" in device.type:
@@ -138,7 +143,7 @@ def benchmark(
138
143
  data=data, batch=1, imgsz=imgsz, plots=False, device=device, half=half, int8=int8, verbose=False
139
144
  )
140
145
  metric, speed = results.results_dict[key], results.speed["inference"]
141
- fps = round((1000 / speed), 2) # frames per second
146
+ fps = round(1000 / (speed + eps), 2) # frames per second
142
147
  y.append([name, "✅", round(file_size(filename), 1), round(metric, 4), round(speed, 2), fps])
143
148
  except Exception as e:
144
149
  if verbose:
@@ -165,10 +170,10 @@ def benchmark(
165
170
 
166
171
 
167
172
  class RF100Benchmark:
168
- """Benchmark YOLO model performance across formats for speed and accuracy."""
173
+ """Benchmark YOLO model performance across various formats for speed and accuracy."""
169
174
 
170
175
  def __init__(self):
171
- """Function for initialization of RF100Benchmark."""
176
+ """Initialize the RF100Benchmark class for benchmarking YOLO model performance across various formats."""
172
177
  self.ds_names = []
173
178
  self.ds_cfg_list = []
174
179
  self.rf = None
@@ -180,6 +185,11 @@ class RF100Benchmark:
180
185
 
181
186
  Args:
182
187
  api_key (str): The API key.
188
+
189
+ Examples:
190
+ Set the Roboflow API key for accessing datasets:
191
+ >>> benchmark = RF100Benchmark()
192
+ >>> benchmark.set_key("your_roboflow_api_key")
183
193
  """
184
194
  check_requirements("roboflow")
185
195
  from roboflow import Roboflow
@@ -188,10 +198,15 @@ class RF100Benchmark:
188
198
 
189
199
  def parse_dataset(self, ds_link_txt="datasets_links.txt"):
190
200
  """
191
- Parse dataset links and downloads datasets.
201
+ Parse dataset links and download datasets.
192
202
 
193
203
  Args:
194
- ds_link_txt (str): Path to dataset_links file.
204
+ ds_link_txt (str): Path to the file containing dataset links.
205
+
206
+ Examples:
207
+ >>> benchmark = RF100Benchmark()
208
+ >>> benchmark.set_key("api_key")
209
+ >>> benchmark.parse_dataset("datasets_links.txt")
195
210
  """
196
211
  (shutil.rmtree("rf-100"), os.mkdir("rf-100")) if os.path.exists("rf-100") else os.mkdir("rf-100")
197
212
  os.chdir("rf-100")
@@ -217,10 +232,13 @@ class RF100Benchmark:
217
232
  @staticmethod
218
233
  def fix_yaml(path):
219
234
  """
220
- Function to fix YAML train and val path.
235
+ Fixes the train and validation paths in a given YAML file.
221
236
 
222
237
  Args:
223
- path (str): YAML file path.
238
+ path (str): Path to the YAML file to be fixed.
239
+
240
+ Examples:
241
+ >>> RF100Benchmark.fix_yaml("path/to/data.yaml")
224
242
  """
225
243
  with open(path) as file:
226
244
  yaml_data = yaml.safe_load(file)
@@ -231,13 +249,21 @@ class RF100Benchmark:
231
249
 
232
250
  def evaluate(self, yaml_path, val_log_file, eval_log_file, list_ind):
233
251
  """
234
- Model evaluation on validation results.
252
+ Evaluate model performance on validation results.
235
253
 
236
254
  Args:
237
- yaml_path (str): YAML file path.
238
- val_log_file (str): val_log_file path.
239
- eval_log_file (str): eval_log_file path.
240
- list_ind (int): Index for current dataset.
255
+ yaml_path (str): Path to the YAML configuration file.
256
+ val_log_file (str): Path to the validation log file.
257
+ eval_log_file (str): Path to the evaluation log file.
258
+ list_ind (int): Index of the current dataset in the list.
259
+
260
+ Returns:
261
+ (float): The mean average precision (mAP) value for the evaluated model.
262
+
263
+ Examples:
264
+ Evaluate a model on a specific dataset
265
+ >>> benchmark = RF100Benchmark()
266
+ >>> benchmark.evaluate("path/to/data.yaml", "path/to/val_log.txt", "path/to/eval_log.txt", 0)
241
267
  """
242
268
  skip_symbols = ["🚀", "⚠️", "💡", "❌"]
243
269
  with open(yaml_path) as stream:
@@ -285,21 +311,23 @@ class ProfileModels:
285
311
  This class profiles the performance of different models, returning results such as model speed and FLOPs.
286
312
 
287
313
  Attributes:
288
- paths (list): Paths of the models to profile.
289
- num_timed_runs (int): Number of timed runs for the profiling. Default is 100.
290
- num_warmup_runs (int): Number of warmup runs before profiling. Default is 10.
291
- min_time (float): Minimum number of seconds to profile for. Default is 60.
292
- imgsz (int): Image size used in the models. Default is 640.
314
+ paths (List[str]): Paths of the models to profile.
315
+ num_timed_runs (int): Number of timed runs for the profiling.
316
+ num_warmup_runs (int): Number of warmup runs before profiling.
317
+ min_time (float): Minimum number of seconds to profile for.
318
+ imgsz (int): Image size used in the models.
319
+ half (bool): Flag to indicate whether to use FP16 half-precision for TensorRT profiling.
320
+ trt (bool): Flag to indicate whether to profile using TensorRT.
321
+ device (torch.device): Device used for profiling.
293
322
 
294
323
  Methods:
295
- profile(): Profiles the models and prints the result.
324
+ profile: Profiles the models and prints the result.
296
325
 
297
- Example:
298
- ```python
299
- from ultralytics.utils.benchmarks import ProfileModels
300
-
301
- ProfileModels(["yolov8n.yaml", "yolov8s.yaml"], imgsz=640).profile()
302
- ```
326
+ Examples:
327
+ Profile models and print results
328
+ >>> from ultralytics.utils.benchmarks import ProfileModels
329
+ >>> profiler = ProfileModels(["yolov8n.yaml", "yolov8s.yaml"], imgsz=640)
330
+ >>> profiler.profile()
303
331
  """
304
332
 
305
333
  def __init__(
@@ -317,17 +345,23 @@ class ProfileModels:
317
345
  Initialize the ProfileModels class for profiling models.
318
346
 
319
347
  Args:
320
- paths (list): List of paths of the models to be profiled.
321
- num_timed_runs (int, optional): Number of timed runs for the profiling. Default is 100.
322
- num_warmup_runs (int, optional): Number of warmup runs before the actual profiling starts. Default is 10.
323
- min_time (float, optional): Minimum time in seconds for profiling a model. Default is 60.
324
- imgsz (int, optional): Size of the image used during profiling. Default is 640.
325
- half (bool, optional): Flag to indicate whether to use FP16 half-precision for TensorRT profiling.
326
- trt (bool, optional): Flag to indicate whether to profile using TensorRT. Default is True.
327
- device (torch.device, optional): Device used for profiling. If None, it is determined automatically.
348
+ paths (List[str]): List of paths of the models to be profiled.
349
+ num_timed_runs (int): Number of timed runs for the profiling.
350
+ num_warmup_runs (int): Number of warmup runs before the actual profiling starts.
351
+ min_time (float): Minimum time in seconds for profiling a model.
352
+ imgsz (int): Size of the image used during profiling.
353
+ half (bool): Flag to indicate whether to use FP16 half-precision for TensorRT profiling.
354
+ trt (bool): Flag to indicate whether to profile using TensorRT.
355
+ device (torch.device | None): Device used for profiling. If None, it is determined automatically.
328
356
 
329
357
  Notes:
330
- FP16 'half' argument option removed for ONNX as slower on CPU than FP32
358
+ FP16 'half' argument option removed for ONNX as slower on CPU than FP32.
359
+
360
+ Examples:
361
+ Initialize and profile models
362
+ >>> from ultralytics.utils.benchmarks import ProfileModels
363
+ >>> profiler = ProfileModels(["yolov8n.yaml", "yolov8s.yaml"], imgsz=640)
364
+ >>> profiler.profile()
331
365
  """
332
366
  self.paths = paths
333
367
  self.num_timed_runs = num_timed_runs
@@ -339,7 +373,7 @@ class ProfileModels:
339
373
  self.device = device or torch.device(0 if torch.cuda.is_available() else "cpu")
340
374
 
341
375
  def profile(self):
342
- """Logs the benchmarking results of a model, checks metrics against floor and returns the results."""
376
+ """Profiles YOLO models for speed and accuracy across various formats including ONNX and TensorRT."""
343
377
  files = self.get_files()
344
378
 
345
379
  if not files:
@@ -404,7 +438,7 @@ class ProfileModels:
404
438
 
405
439
  @staticmethod
406
440
  def iterative_sigma_clipping(data, sigma=2, max_iters=3):
407
- """Applies an iterative sigma clipping algorithm to the given data times number of iterations."""
441
+ """Applies iterative sigma clipping to data to remove outliers based on specified sigma and iteration count."""
408
442
  data = np.array(data)
409
443
  for _ in range(max_iters):
410
444
  mean, std = np.mean(data), np.std(data)
@@ -415,7 +449,7 @@ class ProfileModels:
415
449
  return data
416
450
 
417
451
  def profile_tensorrt_model(self, engine_file: str, eps: float = 1e-3):
418
- """Profiles the TensorRT model, measuring average run time and standard deviation among runs."""
452
+ """Profiles YOLO model performance with TensorRT, measuring average run time and standard deviation."""
419
453
  if not self.trt or not Path(engine_file).is_file():
420
454
  return 0.0, 0.0
421
455
 
@@ -499,7 +533,7 @@ class ProfileModels:
499
533
  return np.mean(run_times), np.std(run_times)
500
534
 
501
535
  def generate_table_row(self, model_name, t_onnx, t_engine, model_info):
502
- """Generates a formatted string for a table row that includes model performance and metric details."""
536
+ """Generates a table row string with model performance metrics including inference times and model details."""
503
537
  layers, params, gradients, flops = model_info
504
538
  return (
505
539
  f"| {model_name:18s} | {self.imgsz} | - | {t_onnx[0]:.2f} ± {t_onnx[1]:.2f} ms | {t_engine[0]:.2f} ± "
@@ -508,7 +542,7 @@ class ProfileModels:
508
542
 
509
543
  @staticmethod
510
544
  def generate_results_dict(model_name, t_onnx, t_engine, model_info):
511
- """Generates a dictionary of model details including name, parameters, GFLOPS and speed metrics."""
545
+ """Generates a dictionary of profiling results including model name, parameters, GFLOPs, and speed metrics."""
512
546
  layers, params, gradients, flops = model_info
513
547
  return {
514
548
  "model/name": model_name,
@@ -520,16 +554,19 @@ class ProfileModels:
520
554
 
521
555
  @staticmethod
522
556
  def print_table(table_rows):
523
- """Formats and prints a comparison table for different models with given statistics and performance data."""
557
+ """Prints a formatted table of model profiling results, including speed and accuracy metrics."""
524
558
  gpu = torch.cuda.get_device_name(0) if torch.cuda.is_available() else "GPU"
525
- header = (
526
- f"| Model | size<br><sup>(pixels) | mAP<sup>val<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | "
527
- f"Speed<br><sup>{gpu} TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |"
528
- )
529
- separator = (
530
- "|-------------|---------------------|--------------------|------------------------------|"
531
- "-----------------------------------|------------------|-----------------|"
532
- )
559
+ headers = [
560
+ "Model",
561
+ "size<br><sup>(pixels)",
562
+ "mAP<sup>val<br>50-95",
563
+ f"Speed<br><sup>CPU ({get_cpu_info()}) ONNX<br>(ms)",
564
+ f"Speed<br><sup>{gpu} TensorRT<br>(ms)",
565
+ "params<br><sup>(M)",
566
+ "FLOPs<br><sup>(B)",
567
+ ]
568
+ header = "|" + "|".join(f" {h} " for h in headers) + "|"
569
+ separator = "|" + "|".join("-" * (len(h) + 2) for h in headers) + "|"
533
570
 
534
571
  print(f"\n\n{header}")
535
572
  print(separator)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.102
3
+ Version: 8.2.103
4
4
  Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Ayush Chaurasia
6
6
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
File without changes
File without changes
File without changes