ultralytics 8.2.101__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.101/ultralytics.egg-info → ultralytics-8.2.103}/PKG-INFO +1 -1
  2. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/__init__.py +1 -1
  3. ultralytics-8.2.103/ultralytics/cfg/datasets/hand-keypoints.yaml +25 -0
  4. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/sam.py +1 -3
  5. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/object_counter.py +17 -15
  6. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/parking_management.py +7 -8
  7. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/__init__.py +9 -3
  8. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/benchmarks.py +103 -66
  9. {ultralytics-8.2.101 → ultralytics-8.2.103/ultralytics.egg-info}/PKG-INFO +1 -1
  10. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics.egg-info/SOURCES.txt +1 -0
  11. {ultralytics-8.2.101 → ultralytics-8.2.103}/LICENSE +0 -0
  12. {ultralytics-8.2.101 → ultralytics-8.2.103}/README.md +0 -0
  13. {ultralytics-8.2.101 → ultralytics-8.2.103}/pyproject.toml +0 -0
  14. {ultralytics-8.2.101 → ultralytics-8.2.103}/setup.cfg +0 -0
  15. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/__init__.py +0 -0
  16. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/conftest.py +0 -0
  17. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_cli.py +0 -0
  18. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_cuda.py +0 -0
  19. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_engine.py +0 -0
  20. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_explorer.py +0 -0
  21. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_exports.py +0 -0
  22. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_integrations.py +0 -0
  23. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_python.py +0 -0
  24. {ultralytics-8.2.101 → ultralytics-8.2.103}/tests/test_solutions.py +0 -0
  25. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/assets/bus.jpg +0 -0
  26. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/assets/zidane.jpg +0 -0
  27. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/__init__.py +0 -0
  28. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  29. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  30. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  31. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  32. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  33. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  34. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  35. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  36. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  37. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  38. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  39. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  40. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  41. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco.yaml +0 -0
  42. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  43. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  44. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  45. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  46. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  47. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  48. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  49. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  50. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  51. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  52. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/signature.yaml +0 -0
  53. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  54. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/datasets/xView.yaml +0 -0
  55. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/default.yaml +0 -0
  56. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  57. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  58. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  59. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  60. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  61. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  62. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  63. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  64. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  65. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  66. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  67. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  68. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  69. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  70. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  71. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  72. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  73. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  74. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  75. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  76. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  77. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  78. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  79. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  80. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  81. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  82. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  83. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  84. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  85. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  86. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  87. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  88. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  89. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  90. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  91. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  92. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  93. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  94. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  95. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  96. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  97. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  98. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/__init__.py +0 -0
  99. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/annotator.py +0 -0
  100. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/augment.py +0 -0
  101. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/base.py +0 -0
  102. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/build.py +0 -0
  103. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/converter.py +0 -0
  104. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/dataset.py +0 -0
  105. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/explorer/__init__.py +0 -0
  106. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/explorer/explorer.py +0 -0
  107. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/explorer/gui/__init__.py +0 -0
  108. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/explorer/gui/dash.py +0 -0
  109. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/explorer/utils.py +0 -0
  110. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/loaders.py +0 -0
  111. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/split_dota.py +0 -0
  112. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/data/utils.py +0 -0
  113. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/__init__.py +0 -0
  114. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/exporter.py +0 -0
  115. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/model.py +0 -0
  116. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/predictor.py +0 -0
  117. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/results.py +0 -0
  118. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/trainer.py +0 -0
  119. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/tuner.py +0 -0
  120. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/engine/validator.py +0 -0
  121. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/hub/__init__.py +0 -0
  122. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/hub/auth.py +0 -0
  123. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/hub/google/__init__.py +0 -0
  124. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/hub/session.py +0 -0
  125. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/hub/utils.py +0 -0
  126. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/__init__.py +0 -0
  127. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/fastsam/__init__.py +0 -0
  128. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/fastsam/model.py +0 -0
  129. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/fastsam/predict.py +0 -0
  130. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/fastsam/utils.py +0 -0
  131. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/fastsam/val.py +0 -0
  132. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/nas/__init__.py +0 -0
  133. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/nas/model.py +0 -0
  134. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/nas/predict.py +0 -0
  135. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/nas/val.py +0 -0
  136. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/rtdetr/__init__.py +0 -0
  137. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/rtdetr/model.py +0 -0
  138. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/rtdetr/predict.py +0 -0
  139. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/rtdetr/train.py +0 -0
  140. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/rtdetr/val.py +0 -0
  141. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/__init__.py +0 -0
  142. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/amg.py +0 -0
  143. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/build.py +0 -0
  144. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/model.py +0 -0
  145. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/__init__.py +0 -0
  146. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/blocks.py +0 -0
  147. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/decoders.py +0 -0
  148. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/encoders.py +0 -0
  149. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  150. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  151. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/transformer.py +0 -0
  152. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/modules/utils.py +0 -0
  153. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/sam/predict.py +0 -0
  154. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/utils/__init__.py +0 -0
  155. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/utils/loss.py +0 -0
  156. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/utils/ops.py +0 -0
  157. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/__init__.py +0 -0
  158. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/__init__.py +0 -0
  159. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/predict.py +0 -0
  160. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/train.py +0 -0
  161. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/classify/val.py +0 -0
  162. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/__init__.py +0 -0
  163. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/predict.py +0 -0
  164. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/train.py +0 -0
  165. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/detect/val.py +0 -0
  166. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/model.py +0 -0
  167. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/__init__.py +0 -0
  168. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/predict.py +0 -0
  169. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/train.py +0 -0
  170. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/obb/val.py +0 -0
  171. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/__init__.py +0 -0
  172. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/predict.py +0 -0
  173. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/train.py +0 -0
  174. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/pose/val.py +0 -0
  175. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/__init__.py +0 -0
  176. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/predict.py +0 -0
  177. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/train.py +0 -0
  178. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/segment/val.py +0 -0
  179. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/world/__init__.py +0 -0
  180. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/world/train.py +0 -0
  181. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/models/yolo/world/train_world.py +0 -0
  182. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/__init__.py +0 -0
  183. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/autobackend.py +0 -0
  184. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/__init__.py +0 -0
  185. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/activation.py +0 -0
  186. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/block.py +0 -0
  187. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/conv.py +0 -0
  188. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/head.py +0 -0
  189. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/transformer.py +0 -0
  190. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/modules/utils.py +0 -0
  191. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/nn/tasks.py +0 -0
  192. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/__init__.py +0 -0
  193. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/ai_gym.py +0 -0
  194. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/analytics.py +0 -0
  195. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/distance_calculation.py +0 -0
  196. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/heatmap.py +0 -0
  197. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/queue_management.py +0 -0
  198. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/speed_estimation.py +0 -0
  199. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/solutions/streamlit_inference.py +0 -0
  200. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/__init__.py +0 -0
  201. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/basetrack.py +0 -0
  202. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/bot_sort.py +0 -0
  203. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/byte_tracker.py +0 -0
  204. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/track.py +0 -0
  205. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/utils/__init__.py +0 -0
  206. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/utils/gmc.py +0 -0
  207. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  208. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/trackers/utils/matching.py +0 -0
  209. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/autobatch.py +0 -0
  210. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/__init__.py +0 -0
  211. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/base.py +0 -0
  212. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/clearml.py +0 -0
  213. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/comet.py +0 -0
  214. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/dvc.py +0 -0
  215. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/hub.py +0 -0
  216. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/mlflow.py +0 -0
  217. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/neptune.py +0 -0
  218. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/raytune.py +0 -0
  219. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  220. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/callbacks/wb.py +0 -0
  221. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/checks.py +0 -0
  222. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/dist.py +0 -0
  223. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/downloads.py +0 -0
  224. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/errors.py +0 -0
  225. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/files.py +0 -0
  226. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/instance.py +0 -0
  227. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/loss.py +0 -0
  228. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/metrics.py +0 -0
  229. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/ops.py +0 -0
  230. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/patches.py +0 -0
  231. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/plotting.py +0 -0
  232. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/tal.py +0 -0
  233. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/torch_utils.py +0 -0
  234. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/triton.py +0 -0
  235. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics/utils/tuner.py +0 -0
  236. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics.egg-info/dependency_links.txt +0 -0
  237. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics.egg-info/entry_points.txt +0 -0
  238. {ultralytics-8.2.101 → ultralytics-8.2.103}/ultralytics.egg-info/requires.txt +0 -0
  239. {ultralytics-8.2.101 → 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.101
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.101"
3
+ __version__ = "8.2.103"
4
4
 
5
5
 
6
6
  import os
@@ -0,0 +1,25 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # Hand Keypoints dataset by Ultralytics
3
+ # Documentation: https://docs.ultralytics.com/datasets/pose/hand-keypoints/
4
+ # Example usage: yolo train data=hand-keypoints.yaml
5
+ # parent
6
+ # ├── ultralytics
7
+ # └── datasets
8
+ # └── hand-keypoints ← downloads here (369 MB)
9
+
10
+ # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
11
+ path: ../datasets/hand-keypoints # dataset root dir
12
+ train: train # train images (relative to 'path') 210 images
13
+ val: val # val images (relative to 'path') 53 images
14
+
15
+ # Keypoints
16
+ kpt_shape: [21, 3] # number of keypoints, number of dims (2 for x,y or 3 for x,y,visible)
17
+ flip_idx:
18
+ [0, 1, 2, 4, 3, 10, 11, 12, 13, 14, 5, 6, 7, 8, 9, 15, 16, 17, 18, 19, 20]
19
+
20
+ # Classes
21
+ names:
22
+ 0: hand
23
+
24
+ # Download script/URL (optional)
25
+ download: https://github.com/ultralytics/assets/releases/download/v0.0.0/hand-keypoints.zip
@@ -645,9 +645,7 @@ class SAM2Model(torch.nn.Module):
645
645
  # The case of `self.num_maskmem == 0` below is primarily used for reproducing SAM on images.
646
646
  # In this case, we skip the fusion with any memory.
647
647
  if self.num_maskmem == 0: # Disable memory and skip fusion
648
- pix_feat = current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)
649
- return pix_feat
650
-
648
+ return current_vision_feats[-1].permute(1, 2, 0).view(B, C, H, W)
651
649
  num_obj_ptr_tokens = 0
652
650
  # Step 1: condition the visual features of the current frame on previous memories
653
651
  if not is_init_cond_frame:
@@ -176,22 +176,24 @@ class ObjectCounter:
176
176
 
177
177
  # Count objects using line
178
178
  elif len(self.reg_pts) == 2:
179
- if prev_position is not None and track_id not in self.count_ids:
180
- # Check if the object's movement segment intersects the counting line
181
- if LineString([(prev_position[0], prev_position[1]), (box[0], box[1])]).intersects(
179
+ if (
180
+ prev_position is not None
181
+ and track_id not in self.count_ids
182
+ and LineString([(prev_position[0], prev_position[1]), (box[0], box[1])]).intersects(
182
183
  self.counting_line_segment
183
- ):
184
- self.count_ids.append(track_id)
185
-
186
- # Determine the direction of movement (IN or OUT)
187
- dx = (box[0] - prev_position[0]) * (self.counting_region.centroid.x - prev_position[0])
188
- dy = (box[1] - prev_position[1]) * (self.counting_region.centroid.y - prev_position[1])
189
- if dx > 0 and dy > 0:
190
- self.in_counts += 1
191
- self.class_wise_count[self.names[cls]]["IN"] += 1
192
- else:
193
- self.out_counts += 1
194
- self.class_wise_count[self.names[cls]]["OUT"] += 1
184
+ )
185
+ ):
186
+ self.count_ids.append(track_id)
187
+
188
+ # Determine the direction of movement (IN or OUT)
189
+ dx = (box[0] - prev_position[0]) * (self.counting_region.centroid.x - prev_position[0])
190
+ dy = (box[1] - prev_position[1]) * (self.counting_region.centroid.y - prev_position[1])
191
+ if dx > 0 and dy > 0:
192
+ self.in_counts += 1
193
+ self.class_wise_count[self.names[cls]]["IN"] += 1
194
+ else:
195
+ self.out_counts += 1
196
+ self.class_wise_count[self.names[cls]]["OUT"] += 1
195
197
 
196
198
  labels_dict = {}
197
199
 
@@ -128,14 +128,13 @@ class ParkingPtsSelection:
128
128
 
129
129
  rg_data = [] # regions data
130
130
  for box in self.rg_data:
131
- rs_box = [] # rescaled box list
132
- for x, y in box:
133
- rs_box.append(
134
- (
135
- int(x * self.imgw / self.canvas.winfo_width()), # width scaling
136
- int(y * self.imgh / self.canvas.winfo_height()),
137
- )
138
- ) # height scaling
131
+ rs_box = [
132
+ (
133
+ int(x * self.imgw / self.canvas.winfo_width()), # width scaling
134
+ int(y * self.imgh / self.canvas.winfo_height()), # height scaling
135
+ )
136
+ for x, y in box
137
+ ]
139
138
  rg_data.append({"points": rs_box})
140
139
  with open("bounding_boxes.json", "w") as f:
141
140
  json.dump(rg_data, f, indent=4)
@@ -111,7 +111,6 @@ torch.set_printoptions(linewidth=320, precision=4, profile="default")
111
111
  np.set_printoptions(linewidth=320, formatter={"float_kind": "{:11.5g}".format}) # format short g, %precision=5
112
112
  cv2.setNumThreads(0) # prevent OpenCV from multithreading (incompatible with PyTorch DataLoader)
113
113
  os.environ["NUMEXPR_MAX_THREADS"] = str(NUM_THREADS) # NumExpr max threads
114
- os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":4096:8" # for deterministic training
115
114
  os.environ["TF_CPP_MIN_LOG_LEVEL"] = "3" # suppress verbose TF compiler warnings in Colab
116
115
  os.environ["TORCH_CPP_LOG_LEVEL"] = "ERROR" # suppress "NNPACK.cpp could not initialize NNPACK" warnings
117
116
  os.environ["KINETO_LOG_LEVEL"] = "5" # suppress verbose PyTorch profiler output when computing FLOPs
@@ -1092,10 +1091,17 @@ class JSONDict(dict):
1092
1091
  try:
1093
1092
  self.file_path.parent.mkdir(parents=True, exist_ok=True)
1094
1093
  with open(self.file_path, "w") as f:
1095
- json.dump(dict(self), f, indent=2)
1094
+ json.dump(dict(self), f, indent=2, default=self._json_default)
1096
1095
  except Exception as e:
1097
1096
  print(f"Error writing to {self.file_path}: {e}")
1098
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
+
1099
1105
  def __setitem__(self, key, value):
1100
1106
  """Store a key-value pair and persist to disk."""
1101
1107
  with self.lock:
@@ -1110,7 +1116,7 @@ class JSONDict(dict):
1110
1116
 
1111
1117
  def __str__(self):
1112
1118
  """Return a pretty-printed JSON string representation of the dictionary."""
1113
- 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)}'
1114
1120
 
1115
1121
  def update(self, *args, **kwargs):
1116
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.101
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>
@@ -51,6 +51,7 @@ ultralytics/cfg/datasets/coco8-seg.yaml
51
51
  ultralytics/cfg/datasets/coco8.yaml
52
52
  ultralytics/cfg/datasets/crack-seg.yaml
53
53
  ultralytics/cfg/datasets/dota8.yaml
54
+ ultralytics/cfg/datasets/hand-keypoints.yaml
54
55
  ultralytics/cfg/datasets/lvis.yaml
55
56
  ultralytics/cfg/datasets/open-images-v7.yaml
56
57
  ultralytics/cfg/datasets/package-seg.yaml
File without changes
File without changes
File without changes