ultralytics 8.1.26__tar.gz → 8.1.27__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 (208) hide show
  1. {ultralytics-8.1.26/ultralytics.egg-info → ultralytics-8.1.27}/PKG-INFO +1 -1
  2. {ultralytics-8.1.26 → ultralytics-8.1.27}/tests/test_python.py +1 -1
  3. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/base.py +3 -1
  5. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/loaders.py +12 -11
  6. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/predictor.py +17 -13
  7. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/validator.py +1 -1
  8. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/autobackend.py +6 -2
  9. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/track.py +9 -6
  10. {ultralytics-8.1.26 → ultralytics-8.1.27/ultralytics.egg-info}/PKG-INFO +1 -1
  11. {ultralytics-8.1.26 → ultralytics-8.1.27}/LICENSE +0 -0
  12. {ultralytics-8.1.26 → ultralytics-8.1.27}/README.md +0 -0
  13. {ultralytics-8.1.26 → ultralytics-8.1.27}/pyproject.toml +0 -0
  14. {ultralytics-8.1.26 → ultralytics-8.1.27}/setup.cfg +0 -0
  15. {ultralytics-8.1.26 → ultralytics-8.1.27}/tests/test_cli.py +0 -0
  16. {ultralytics-8.1.26 → ultralytics-8.1.27}/tests/test_cuda.py +0 -0
  17. {ultralytics-8.1.26 → ultralytics-8.1.27}/tests/test_engine.py +0 -0
  18. {ultralytics-8.1.26 → ultralytics-8.1.27}/tests/test_explorer.py +0 -0
  19. {ultralytics-8.1.26 → ultralytics-8.1.27}/tests/test_integrations.py +0 -0
  20. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/assets/bus.jpg +0 -0
  21. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/assets/zidane.jpg +0 -0
  22. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/__init__.py +0 -0
  23. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  24. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  25. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  26. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  27. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  28. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  29. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  30. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  31. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  32. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  33. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  34. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco.yaml +0 -0
  35. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  36. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  37. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  38. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  39. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  40. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  41. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  42. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  43. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  44. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  45. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/datasets/xView.yaml +0 -0
  46. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/default.yaml +0 -0
  47. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  48. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  49. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  50. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  51. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  52. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  53. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  54. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  55. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  56. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  57. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  58. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  59. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  60. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  61. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  62. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  63. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  64. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  65. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  66. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  67. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  68. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  69. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  70. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  71. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  72. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  73. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  74. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  75. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  76. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  77. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  78. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/__init__.py +0 -0
  79. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/annotator.py +0 -0
  80. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/augment.py +0 -0
  81. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/build.py +0 -0
  82. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/converter.py +0 -0
  83. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/dataset.py +0 -0
  84. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/explorer/__init__.py +0 -0
  85. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/explorer/explorer.py +0 -0
  86. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/explorer/gui/__init__.py +0 -0
  87. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/explorer/gui/dash.py +0 -0
  88. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/explorer/utils.py +0 -0
  89. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/split_dota.py +0 -0
  90. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/data/utils.py +0 -0
  91. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/__init__.py +0 -0
  92. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/exporter.py +0 -0
  93. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/model.py +0 -0
  94. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/results.py +0 -0
  95. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/trainer.py +0 -0
  96. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/engine/tuner.py +0 -0
  97. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/hub/__init__.py +0 -0
  98. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/hub/auth.py +0 -0
  99. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/hub/session.py +0 -0
  100. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/hub/utils.py +0 -0
  101. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/__init__.py +0 -0
  102. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/fastsam/__init__.py +0 -0
  103. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/fastsam/model.py +0 -0
  104. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/fastsam/predict.py +0 -0
  105. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/fastsam/prompt.py +0 -0
  106. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/fastsam/utils.py +0 -0
  107. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/fastsam/val.py +0 -0
  108. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/nas/__init__.py +0 -0
  109. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/nas/model.py +0 -0
  110. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/nas/predict.py +0 -0
  111. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/nas/val.py +0 -0
  112. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/rtdetr/__init__.py +0 -0
  113. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/rtdetr/model.py +0 -0
  114. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/rtdetr/predict.py +0 -0
  115. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/rtdetr/train.py +0 -0
  116. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/rtdetr/val.py +0 -0
  117. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/__init__.py +0 -0
  118. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/amg.py +0 -0
  119. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/build.py +0 -0
  120. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/model.py +0 -0
  121. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/modules/__init__.py +0 -0
  122. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/modules/decoders.py +0 -0
  123. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/modules/encoders.py +0 -0
  124. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/modules/sam.py +0 -0
  125. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  126. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/modules/transformer.py +0 -0
  127. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/sam/predict.py +0 -0
  128. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/utils/__init__.py +0 -0
  129. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/utils/loss.py +0 -0
  130. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/utils/ops.py +0 -0
  131. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/__init__.py +0 -0
  132. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/classify/__init__.py +0 -0
  133. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/classify/predict.py +0 -0
  134. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/classify/train.py +0 -0
  135. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/classify/val.py +0 -0
  136. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/detect/__init__.py +0 -0
  137. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/detect/predict.py +0 -0
  138. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/detect/train.py +0 -0
  139. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/detect/val.py +0 -0
  140. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/model.py +0 -0
  141. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/obb/__init__.py +0 -0
  142. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/obb/predict.py +0 -0
  143. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/obb/train.py +0 -0
  144. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/obb/val.py +0 -0
  145. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/pose/__init__.py +0 -0
  146. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/pose/predict.py +0 -0
  147. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/pose/train.py +0 -0
  148. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/pose/val.py +0 -0
  149. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/segment/__init__.py +0 -0
  150. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/segment/predict.py +0 -0
  151. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/segment/train.py +0 -0
  152. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/models/yolo/segment/val.py +0 -0
  153. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/__init__.py +0 -0
  154. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/modules/__init__.py +0 -0
  155. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/modules/block.py +0 -0
  156. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/modules/conv.py +0 -0
  157. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/modules/head.py +0 -0
  158. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/modules/transformer.py +0 -0
  159. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/modules/utils.py +0 -0
  160. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/nn/tasks.py +0 -0
  161. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/solutions/__init__.py +0 -0
  162. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/solutions/ai_gym.py +0 -0
  163. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/solutions/distance_calculation.py +0 -0
  164. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/solutions/heatmap.py +0 -0
  165. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/solutions/object_counter.py +0 -0
  166. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/solutions/speed_estimation.py +0 -0
  167. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/__init__.py +0 -0
  168. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/basetrack.py +0 -0
  169. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/bot_sort.py +0 -0
  170. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/byte_tracker.py +0 -0
  171. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/utils/__init__.py +0 -0
  172. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/utils/gmc.py +0 -0
  173. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  174. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/trackers/utils/matching.py +0 -0
  175. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/__init__.py +0 -0
  176. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/autobatch.py +0 -0
  177. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/benchmarks.py +0 -0
  178. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/__init__.py +0 -0
  179. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/base.py +0 -0
  180. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/clearml.py +0 -0
  181. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/comet.py +0 -0
  182. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/dvc.py +0 -0
  183. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/hub.py +0 -0
  184. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/mlflow.py +0 -0
  185. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/neptune.py +0 -0
  186. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/raytune.py +0 -0
  187. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  188. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/callbacks/wb.py +0 -0
  189. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/checks.py +0 -0
  190. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/dist.py +0 -0
  191. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/downloads.py +0 -0
  192. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/errors.py +0 -0
  193. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/files.py +0 -0
  194. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/instance.py +0 -0
  195. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/loss.py +0 -0
  196. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/metrics.py +0 -0
  197. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/ops.py +0 -0
  198. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/patches.py +0 -0
  199. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/plotting.py +0 -0
  200. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/tal.py +0 -0
  201. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/torch_utils.py +0 -0
  202. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/triton.py +0 -0
  203. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics/utils/tuner.py +0 -0
  204. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics.egg-info/SOURCES.txt +0 -0
  205. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics.egg-info/dependency_links.txt +0 -0
  206. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics.egg-info/entry_points.txt +0 -0
  207. {ultralytics-8.1.26 → ultralytics-8.1.27}/ultralytics.egg-info/requires.txt +0 -0
  208. {ultralytics-8.1.26 → ultralytics-8.1.27}/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.1.26
3
+ Version: 8.1.27
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
@@ -301,7 +301,7 @@ def test_predict_callback_and_setup():
301
301
 
302
302
  def on_predict_batch_end(predictor):
303
303
  """Callback function that handles operations at the end of a prediction batch."""
304
- path, im0s, _, _ = predictor.batch
304
+ path, im0s, _ = predictor.batch
305
305
  im0s = im0s if isinstance(im0s, list) else [im0s]
306
306
  bs = [predictor.dataset.bs for _ in range(len(path))]
307
307
  predictor.results = zip(predictor.results, im0s, bs) # results is List[batch_size]
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.1.26"
3
+ __version__ = "8.1.27"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -120,7 +120,9 @@ class BaseDataset(Dataset):
120
120
  except Exception as e:
121
121
  raise FileNotFoundError(f"{self.prefix}Error loading data from {img_path}\n{HELP_URL}") from e
122
122
  if self.fraction < 1:
123
- im_files = im_files[: round(len(im_files) * self.fraction)]
123
+ # im_files = im_files[: round(len(im_files) * self.fraction)]
124
+ num_elements_to_select = round(len(im_files) * self.fraction)
125
+ im_files = random.sample(im_files, num_elements_to_select)
124
126
  return im_files
125
127
 
126
128
  def update_labels(self, include_class: Optional[list]):
@@ -80,8 +80,6 @@ class LoadStreams:
80
80
  self.imgs = [[] for _ in range(n)] # images
81
81
  self.shape = [[] for _ in range(n)] # image shapes
82
82
  self.sources = [ops.clean_str(x) for x in sources] # clean source names for later
83
- self.info = [""] * n
84
- self.is_video = [True] * n
85
83
  for i, s in enumerate(sources): # index, source
86
84
  # Start thread to read frames from video stream
87
85
  st = f"{i + 1}/{n}: {s}... "
@@ -178,7 +176,7 @@ class LoadStreams:
178
176
  images.append(x.pop(-1) if x else np.zeros(self.shape[i], dtype=np.uint8))
179
177
  x.clear()
180
178
 
181
- return self.sources, images, self.is_video, self.info
179
+ return self.sources, images, [""] * self.bs
182
180
 
183
181
  def __len__(self):
184
182
  """Return the length of the sources object."""
@@ -227,6 +225,7 @@ class LoadScreenshots:
227
225
  self.frame = 0
228
226
  self.sct = mss.mss()
229
227
  self.bs = 1
228
+ self.fps = 30
230
229
 
231
230
  # Parse monitor shape
232
231
  monitor = self.sct.monitors[self.screen]
@@ -246,7 +245,7 @@ class LoadScreenshots:
246
245
  s = f"screen {self.screen} (LTWH): {self.left},{self.top},{self.width},{self.height}: "
247
246
 
248
247
  self.frame += 1
249
- return [str(self.screen)], [im0], [True], [s] # screen, img, is_video, string
248
+ return [str(self.screen)], [im0], [s] # screen, img, string
250
249
 
251
250
 
252
251
  class LoadImagesAndVideos:
@@ -298,6 +297,7 @@ class LoadImagesAndVideos:
298
297
 
299
298
  self.files = images + videos
300
299
  self.nf = ni + nv # number of files
300
+ self.ni = ni # number of images
301
301
  self.video_flag = [False] * ni + [True] * nv
302
302
  self.mode = "image"
303
303
  self.vid_stride = vid_stride # video frame-rate stride
@@ -319,11 +319,11 @@ class LoadImagesAndVideos:
319
319
 
320
320
  def __next__(self):
321
321
  """Returns the next batch of images or video frames along with their paths and metadata."""
322
- paths, imgs, is_video, info = [], [], [], []
322
+ paths, imgs, info = [], [], []
323
323
  while len(imgs) < self.bs:
324
324
  if self.count >= self.nf: # end of file list
325
325
  if len(imgs) > 0:
326
- return paths, imgs, is_video, info # return last partial batch
326
+ return paths, imgs, info # return last partial batch
327
327
  else:
328
328
  raise StopIteration
329
329
 
@@ -344,7 +344,6 @@ class LoadImagesAndVideos:
344
344
  self.frame += 1
345
345
  paths.append(path)
346
346
  imgs.append(im0)
347
- is_video.append(True)
348
347
  info.append(f"video {self.count + 1}/{self.nf} (frame {self.frame}/{self.frames}) {path}: ")
349
348
  if self.frame == self.frames: # end of video
350
349
  self.count += 1
@@ -363,16 +362,18 @@ class LoadImagesAndVideos:
363
362
  raise FileNotFoundError(f"Image Not Found {path}")
364
363
  paths.append(path)
365
364
  imgs.append(im0)
366
- is_video.append(False) # no capture object for images
367
365
  info.append(f"image {self.count + 1}/{self.nf} {path}: ")
368
366
  self.count += 1 # move to the next file
367
+ if self.count >= self.ni: # end of image list
368
+ break
369
369
 
370
- return paths, imgs, is_video, info
370
+ return paths, imgs, info
371
371
 
372
372
  def _new_video(self, path):
373
373
  """Creates a new video capture object for the given path."""
374
374
  self.frame = 0
375
375
  self.cap = cv2.VideoCapture(path)
376
+ self.fps = int(self.cap.get(cv2.CAP_PROP_FPS))
376
377
  if not self.cap.isOpened():
377
378
  raise FileNotFoundError(f"Failed to open video {path}")
378
379
  self.frames = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT) / self.vid_stride)
@@ -429,7 +430,7 @@ class LoadPilAndNumpy:
429
430
  if self.count == 1: # loop only once as it's batch inference
430
431
  raise StopIteration
431
432
  self.count += 1
432
- return self.paths, self.im0, [False] * self.bs, [""] * self.bs
433
+ return self.paths, self.im0, [""] * self.bs
433
434
 
434
435
  def __iter__(self):
435
436
  """Enables iteration for class LoadPilAndNumpy."""
@@ -494,7 +495,7 @@ class LoadTensor:
494
495
  if self.count == 1:
495
496
  raise StopIteration
496
497
  self.count += 1
497
- return self.paths, self.im0, [False] * self.bs, [""] * self.bs
498
+ return self.paths, self.im0, [""] * self.bs
498
499
 
499
500
  def __len__(self):
500
501
  """Returns the batch size."""
@@ -30,6 +30,7 @@ Usage - formats:
30
30
  """
31
31
 
32
32
  import platform
33
+ import re
33
34
  import threading
34
35
  from pathlib import Path
35
36
 
@@ -236,7 +237,7 @@ class BasePredictor:
236
237
  self.run_callbacks("on_predict_start")
237
238
  for self.batch in self.dataset:
238
239
  self.run_callbacks("on_predict_batch_start")
239
- paths, im0s, is_video, s = self.batch
240
+ paths, im0s, s = self.batch
240
241
 
241
242
  # Preprocess
242
243
  with profilers[0]:
@@ -264,7 +265,7 @@ class BasePredictor:
264
265
  "postprocess": profilers[2].dt * 1e3 / n,
265
266
  }
266
267
  if self.args.verbose or self.args.save or self.args.save_txt or self.args.show:
267
- s[i] += self.write_results(i, Path(paths[i]), im, is_video)
268
+ s[i] += self.write_results(i, Path(paths[i]), im, s)
268
269
 
269
270
  # Print batch results
270
271
  if self.args.verbose:
@@ -294,11 +295,12 @@ class BasePredictor:
294
295
  def setup_model(self, model, verbose=True):
295
296
  """Initialize YOLO model with given parameters and set it to evaluation mode."""
296
297
  self.model = AutoBackend(
297
- model or self.args.model,
298
+ weights=model or self.args.model,
298
299
  device=select_device(self.args.device, verbose=verbose),
299
300
  dnn=self.args.dnn,
300
301
  data=self.args.data,
301
302
  fp16=self.args.half,
303
+ batch=self.args.batch,
302
304
  fuse=True,
303
305
  verbose=verbose,
304
306
  )
@@ -307,7 +309,7 @@ class BasePredictor:
307
309
  self.args.half = self.model.fp16 # update half
308
310
  self.model.eval()
309
311
 
310
- def write_results(self, i, p, im, is_video):
312
+ def write_results(self, i, p, im, s):
311
313
  """Write inference results to a file or directory."""
312
314
  string = "" # print string
313
315
  if len(im.shape) == 3:
@@ -316,9 +318,10 @@ class BasePredictor:
316
318
  string += f"{i}: "
317
319
  frame = self.dataset.count
318
320
  else:
319
- frame = getattr(self.dataset, "frame", 0) - len(self.results) + i
321
+ match = re.search(r"frame (\d+)/", s[i])
322
+ frame = int(match.group(1)) if match else None # 0 if frame undetermined
320
323
 
321
- self.txt_path = self.save_dir / "labels" / (p.stem + f"_{frame}" if is_video[i] else "")
324
+ self.txt_path = self.save_dir / "labels" / (p.stem + ("" if self.dataset.mode == "image" else f"_{frame}"))
322
325
  string += "%gx%g " % im.shape[2:]
323
326
  result = self.results[i]
324
327
  result.save_dir = self.save_dir.__str__() # used in other locations
@@ -340,18 +343,19 @@ class BasePredictor:
340
343
  if self.args.save_crop:
341
344
  result.save_crop(save_dir=self.save_dir / "crops", file_name=self.txt_path.stem)
342
345
  if self.args.show:
343
- self.show(str(p), is_video[i])
346
+ self.show(str(p))
344
347
  if self.args.save:
345
- self.save_predicted_images(str(self.save_dir / p.name), is_video[i], frame)
348
+ self.save_predicted_images(str(self.save_dir / p.name), frame)
346
349
 
347
350
  return string
348
351
 
349
- def save_predicted_images(self, save_path="", is_video=False, frame=0):
352
+ def save_predicted_images(self, save_path="", frame=0):
350
353
  """Save video predictions as mp4 at specified path."""
351
354
  im = self.plotted_img
352
355
 
353
356
  # Save videos and streams
354
- if is_video:
357
+ if self.dataset.mode in {"stream", "video"}:
358
+ fps = self.dataset.fps if self.dataset.mode == "video" else 30
355
359
  frames_path = f'{save_path.split(".", 1)[0]}_frames/'
356
360
  if save_path not in self.vid_writer: # new video
357
361
  if self.args.save_frames:
@@ -360,7 +364,7 @@ class BasePredictor:
360
364
  self.vid_writer[save_path] = cv2.VideoWriter(
361
365
  filename=str(Path(save_path).with_suffix(suffix)),
362
366
  fourcc=cv2.VideoWriter_fourcc(*fourcc),
363
- fps=30, # integer required, floats produce error in MP4 codec
367
+ fps=fps, # integer required, floats produce error in MP4 codec
364
368
  frameSize=(im.shape[1], im.shape[0]), # (width, height)
365
369
  )
366
370
 
@@ -373,7 +377,7 @@ class BasePredictor:
373
377
  else:
374
378
  cv2.imwrite(save_path, im)
375
379
 
376
- def show(self, p="", is_video=False):
380
+ def show(self, p=""):
377
381
  """Display an image in a window using OpenCV imshow()."""
378
382
  im = self.plotted_img
379
383
  if platform.system() == "Linux" and p not in self.windows:
@@ -381,7 +385,7 @@ class BasePredictor:
381
385
  cv2.namedWindow(p, cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux)
382
386
  cv2.resizeWindow(p, im.shape[1], im.shape[0]) # (width, height)
383
387
  cv2.imshow(p, im)
384
- cv2.waitKey(1 if is_video else 500) # 1 millisecond
388
+ cv2.waitKey(300 if self.dataset.mode == "image" else 1) # 1 millisecond
385
389
 
386
390
  def run_callbacks(self, event: str):
387
391
  """Runs all registered callbacks for a specific event."""
@@ -122,7 +122,7 @@ class BaseValidator:
122
122
  else:
123
123
  callbacks.add_integration_callbacks(self)
124
124
  model = AutoBackend(
125
- model or self.args.model,
125
+ weights=model or self.args.model,
126
126
  device=select_device(self.args.device, self.args.batch),
127
127
  dnn=self.args.dnn,
128
128
  data=self.args.data,
@@ -86,6 +86,7 @@ class AutoBackend(nn.Module):
86
86
  dnn=False,
87
87
  data=None,
88
88
  fp16=False,
89
+ batch=1,
89
90
  fuse=True,
90
91
  verbose=True,
91
92
  ):
@@ -98,6 +99,7 @@ class AutoBackend(nn.Module):
98
99
  dnn (bool): Use OpenCV DNN module for ONNX inference. Defaults to False.
99
100
  data (str | Path | optional): Path to the additional data.yaml file containing class names. Optional.
100
101
  fp16 (bool): Enable half-precision inference. Supported only on specific backends. Defaults to False.
102
+ batch (int): Batch-size to assume for inference.
101
103
  fuse (bool): Fuse Conv2D + BatchNorm layers for optimization. Defaults to True.
102
104
  verbose (bool): Enable verbose logging. Defaults to True.
103
105
  """
@@ -204,7 +206,9 @@ class AutoBackend(nn.Module):
204
206
  if batch_dim.is_static:
205
207
  batch_size = batch_dim.get_length()
206
208
 
207
- inference_mode = "LATENCY" # either 'LATENCY', 'THROUGHPUT' (not recommended), or 'CUMULATIVE_THROUGHPUT'
209
+ # OpenVINO inference modes are 'LATENCY', 'THROUGHPUT' (not recommended), or 'CUMULATIVE_THROUGHPUT'
210
+ inference_mode = "CUMULATIVE_THROUGHPUT" if batch > 1 else "LATENCY"
211
+ LOGGER.info(f"Using OpenVINO {inference_mode} mode for batch-size={batch_size} inference...")
208
212
  ov_compiled_model = core.compile_model(
209
213
  ov_model,
210
214
  device_name="AUTO", # AUTO selects best available device, do not modify
@@ -454,7 +458,7 @@ class AutoBackend(nn.Module):
454
458
  # Start async inference with userdata=i to specify the position in results list
455
459
  async_queue.start_async(inputs={self.input_name: im[i : i + 1]}, userdata=i) # keep image as BCHW
456
460
  async_queue.wait_all() # wait for all inference requests to complete
457
- y = [list(r.values()) for r in results][0]
461
+ y = np.concatenate([list(r.values())[0] for r in results])
458
462
 
459
463
  else: # inference_mode = "LATENCY", optimized for fastest first result at batch-size 1
460
464
  y = list(self.ov_compiled_model(im).values())
@@ -38,6 +38,8 @@ def on_predict_start(predictor: object, persist: bool = False) -> None:
38
38
  for _ in range(predictor.dataset.bs):
39
39
  tracker = TRACKER_MAP[cfg.tracker_type](args=cfg, frame_rate=30)
40
40
  trackers.append(tracker)
41
+ if predictor.dataset.mode != "stream": # only need one tracker for other modes.
42
+ break
41
43
  predictor.trackers = trackers
42
44
  predictor.vid_path = [None] * predictor.dataset.bs # for determining when to reset tracker on new video
43
45
 
@@ -50,20 +52,21 @@ def on_predict_postprocess_end(predictor: object, persist: bool = False) -> None
50
52
  predictor (object): The predictor object containing the predictions.
51
53
  persist (bool, optional): Whether to persist the trackers if they already exist. Defaults to False.
52
54
  """
53
- bs = predictor.dataset.bs
54
55
  path, im0s = predictor.batch[:2]
55
56
 
56
57
  is_obb = predictor.args.task == "obb"
57
- for i in range(bs):
58
+ is_stream = predictor.dataset.mode == "stream"
59
+ for i in range(len(im0s)):
60
+ tracker = predictor.trackers[i if is_stream else 0]
58
61
  vid_path = predictor.save_dir / Path(path[i]).name
59
- if not persist and predictor.vid_path[i] != vid_path: # new video
60
- predictor.trackers[i].reset()
61
- predictor.vid_path[i] = vid_path
62
+ if not persist and predictor.vid_path[i if is_stream else 0] != vid_path:
63
+ tracker.reset()
64
+ predictor.vid_path[i if is_stream else 0] = vid_path
62
65
 
63
66
  det = (predictor.results[i].obb if is_obb else predictor.results[i].boxes).cpu().numpy()
64
67
  if len(det) == 0:
65
68
  continue
66
- tracks = predictor.trackers[i].update(det, im0s[i])
69
+ tracks = tracker.update(det, im0s[i])
67
70
  if len(tracks) == 0:
68
71
  continue
69
72
  idx = tracks[:, -1].astype(int)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.1.26
3
+ Version: 8.1.27
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
File without changes
File without changes
File without changes