ultralytics 8.2.39__tar.gz → 8.2.41__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 (232) hide show
  1. {ultralytics-8.2.39 → ultralytics-8.2.41}/PKG-INFO +3 -5
  2. {ultralytics-8.2.39 → ultralytics-8.2.41}/pyproject.toml +2 -4
  3. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/model.py +3 -26
  5. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/trainer.py +6 -1
  6. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/__init__.py +17 -2
  7. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/session.py +43 -26
  8. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/hub.py +9 -2
  9. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/dist.py +1 -0
  10. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/downloads.py +7 -5
  11. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/torch_utils.py +2 -2
  12. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/PKG-INFO +3 -5
  13. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/requires.txt +2 -4
  14. {ultralytics-8.2.39 → ultralytics-8.2.41}/LICENSE +0 -0
  15. {ultralytics-8.2.39 → ultralytics-8.2.41}/README.md +0 -0
  16. {ultralytics-8.2.39 → ultralytics-8.2.41}/setup.cfg +0 -0
  17. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/__init__.py +0 -0
  18. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/conftest.py +0 -0
  19. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_cli.py +0 -0
  20. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_cuda.py +0 -0
  21. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_engine.py +0 -0
  22. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_explorer.py +0 -0
  23. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_exports.py +0 -0
  24. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_integrations.py +0 -0
  25. {ultralytics-8.2.39 → ultralytics-8.2.41}/tests/test_python.py +0 -0
  26. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/assets/bus.jpg +0 -0
  27. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/assets/zidane.jpg +0 -0
  28. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/__init__.py +0 -0
  29. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  30. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  31. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  32. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  33. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  34. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  35. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  36. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  37. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  38. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  39. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  40. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  41. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  42. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco.yaml +0 -0
  43. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  44. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  45. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  49. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  50. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  51. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  52. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  53. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/signature.yaml +0 -0
  54. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  55. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/datasets/xView.yaml +0 -0
  56. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/default.yaml +0 -0
  57. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  58. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  59. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  60. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  61. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  62. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  63. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  64. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  65. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  66. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  67. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  68. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  69. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  70. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  71. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  72. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  73. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  74. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  75. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  76. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  77. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  78. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  79. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  80. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  81. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  82. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  83. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  84. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  85. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  86. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  87. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  88. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  89. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  90. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  91. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  92. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  93. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  94. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  95. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  96. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  97. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  98. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  99. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/__init__.py +0 -0
  100. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/annotator.py +0 -0
  101. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/augment.py +0 -0
  102. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/base.py +0 -0
  103. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/build.py +0 -0
  104. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/converter.py +0 -0
  105. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/dataset.py +0 -0
  106. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/__init__.py +0 -0
  107. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/explorer.py +0 -0
  108. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/gui/__init__.py +0 -0
  109. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/gui/dash.py +0 -0
  110. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/explorer/utils.py +0 -0
  111. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/loaders.py +0 -0
  112. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/split_dota.py +0 -0
  113. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/data/utils.py +0 -0
  114. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/__init__.py +0 -0
  115. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/exporter.py +0 -0
  116. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/predictor.py +0 -0
  117. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/results.py +0 -0
  118. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/tuner.py +0 -0
  119. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/engine/validator.py +0 -0
  120. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/auth.py +0 -0
  121. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/hub/utils.py +0 -0
  122. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/__init__.py +0 -0
  123. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/__init__.py +0 -0
  124. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/model.py +0 -0
  125. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/predict.py +0 -0
  126. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/prompt.py +0 -0
  127. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/utils.py +0 -0
  128. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/fastsam/val.py +0 -0
  129. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/__init__.py +0 -0
  130. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/model.py +0 -0
  131. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/predict.py +0 -0
  132. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/nas/val.py +0 -0
  133. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/__init__.py +0 -0
  134. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/model.py +0 -0
  135. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/predict.py +0 -0
  136. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/train.py +0 -0
  137. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/rtdetr/val.py +0 -0
  138. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/__init__.py +0 -0
  139. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/amg.py +0 -0
  140. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/build.py +0 -0
  141. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/model.py +0 -0
  142. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/__init__.py +0 -0
  143. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/decoders.py +0 -0
  144. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/encoders.py +0 -0
  145. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/sam.py +0 -0
  146. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  147. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/modules/transformer.py +0 -0
  148. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/sam/predict.py +0 -0
  149. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/utils/__init__.py +0 -0
  150. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/utils/loss.py +0 -0
  151. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/utils/ops.py +0 -0
  152. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/__init__.py +0 -0
  153. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/__init__.py +0 -0
  154. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/predict.py +0 -0
  155. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/train.py +0 -0
  156. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/classify/val.py +0 -0
  157. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/__init__.py +0 -0
  158. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/predict.py +0 -0
  159. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/train.py +0 -0
  160. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/detect/val.py +0 -0
  161. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/model.py +0 -0
  162. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/__init__.py +0 -0
  163. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/predict.py +0 -0
  164. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/train.py +0 -0
  165. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/obb/val.py +0 -0
  166. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/__init__.py +0 -0
  167. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/predict.py +0 -0
  168. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/train.py +0 -0
  169. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/pose/val.py +0 -0
  170. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/__init__.py +0 -0
  171. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/predict.py +0 -0
  172. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/train.py +0 -0
  173. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/segment/val.py +0 -0
  174. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/world/__init__.py +0 -0
  175. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/world/train.py +0 -0
  176. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/models/yolo/world/train_world.py +0 -0
  177. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/__init__.py +0 -0
  178. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/autobackend.py +0 -0
  179. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/__init__.py +0 -0
  180. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/block.py +0 -0
  181. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/conv.py +0 -0
  182. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/head.py +0 -0
  183. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/transformer.py +0 -0
  184. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/modules/utils.py +0 -0
  185. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/nn/tasks.py +0 -0
  186. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/__init__.py +0 -0
  187. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/ai_gym.py +0 -0
  188. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/analytics.py +0 -0
  189. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/distance_calculation.py +0 -0
  190. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/heatmap.py +0 -0
  191. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/object_counter.py +0 -0
  192. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/parking_management.py +0 -0
  193. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/queue_management.py +0 -0
  194. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/solutions/speed_estimation.py +0 -0
  195. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/__init__.py +0 -0
  196. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/basetrack.py +0 -0
  197. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/bot_sort.py +0 -0
  198. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/byte_tracker.py +0 -0
  199. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/track.py +0 -0
  200. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/__init__.py +0 -0
  201. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/gmc.py +0 -0
  202. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  203. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/trackers/utils/matching.py +0 -0
  204. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/__init__.py +0 -0
  205. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/autobatch.py +0 -0
  206. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/benchmarks.py +0 -0
  207. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/__init__.py +0 -0
  208. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/base.py +0 -0
  209. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/clearml.py +0 -0
  210. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/comet.py +0 -0
  211. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/dvc.py +0 -0
  212. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/mlflow.py +0 -0
  213. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/neptune.py +0 -0
  214. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/raytune.py +0 -0
  215. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  216. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/callbacks/wb.py +0 -0
  217. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/checks.py +0 -0
  218. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/errors.py +0 -0
  219. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/files.py +0 -0
  220. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/instance.py +0 -0
  221. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/loss.py +0 -0
  222. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/metrics.py +0 -0
  223. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/ops.py +0 -0
  224. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/patches.py +0 -0
  225. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/plotting.py +0 -0
  226. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/tal.py +0 -0
  227. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/triton.py +0 -0
  228. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics/utils/tuner.py +0 -0
  229. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/SOURCES.txt +0 -0
  230. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/dependency_links.txt +0 -0
  231. {ultralytics-8.2.39 → ultralytics-8.2.41}/ultralytics.egg-info/entry_points.txt +0 -0
  232. {ultralytics-8.2.39 → ultralytics-8.2.41}/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.39
3
+ Version: 8.2.41
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
@@ -30,7 +30,7 @@ Classifier: Operating System :: Microsoft :: Windows
30
30
  Requires-Python: >=3.8
31
31
  Description-Content-Type: text/markdown
32
32
  License-File: LICENSE
33
- Requires-Dist: numpy<2.0.0
33
+ Requires-Dist: numpy<2.0.0,>=1.23.5
34
34
  Requires-Dist: matplotlib>=3.3.0
35
35
  Requires-Dist: opencv-python>=4.6.0
36
36
  Requires-Dist: pillow>=7.1.2
@@ -47,8 +47,6 @@ Requires-Dist: seaborn>=0.11.0
47
47
  Requires-Dist: ultralytics-thop>=2.0.0
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: ipython; extra == "dev"
50
- Requires-Dist: check-manifest; extra == "dev"
51
- Requires-Dist: pre-commit; extra == "dev"
52
50
  Requires-Dist: pytest; extra == "dev"
53
51
  Requires-Dist: pytest-cov; extra == "dev"
54
52
  Requires-Dist: coverage[toml]; extra == "dev"
@@ -77,7 +75,7 @@ Requires-Dist: comet; extra == "logging"
77
75
  Requires-Dist: tensorboard>=2.13.0; extra == "logging"
78
76
  Requires-Dist: dvclive>=2.12.0; extra == "logging"
79
77
  Provides-Extra: extra
80
- Requires-Dist: hub-sdk>=0.0.5; extra == "extra"
78
+ Requires-Dist: hub-sdk>=0.0.8; extra == "extra"
81
79
  Requires-Dist: ipython; extra == "extra"
82
80
  Requires-Dist: albumentations>=1.4.6; extra == "extra"
83
81
  Requires-Dist: pycocotools>=2.0.7; extra == "extra"
@@ -64,7 +64,7 @@ classifiers = [
64
64
 
65
65
  # Required dependencies ------------------------------------------------------------------------------------------------
66
66
  dependencies = [
67
- "numpy<2.0.0", # temporary patch for compat errors https://github.com/ultralytics/yolov5/actions/runs/9538130424/job/26286956354
67
+ "numpy>=1.23.5,<2.0.0", # temporary patch for compat errors https://github.com/ultralytics/yolov5/actions/runs/9538130424/job/26286956354
68
68
  "matplotlib>=3.3.0",
69
69
  "opencv-python>=4.6.0",
70
70
  "pillow>=7.1.2",
@@ -85,8 +85,6 @@ dependencies = [
85
85
  [project.optional-dependencies]
86
86
  dev = [
87
87
  "ipython",
88
- "check-manifest",
89
- "pre-commit",
90
88
  "pytest",
91
89
  "pytest-cov",
92
90
  "coverage[toml]",
@@ -119,7 +117,7 @@ logging = [
119
117
  "dvclive>=2.12.0",
120
118
  ]
121
119
  extra = [
122
- "hub-sdk>=0.0.5", # Ultralytics HUB
120
+ "hub-sdk>=0.0.8", # Ultralytics HUB
123
121
  "ipython", # interactive notebook
124
122
  "albumentations>=1.4.6", # training augmentations
125
123
  "pycocotools>=2.0.7", # COCO mAP
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.39"
3
+ __version__ = "8.2.41"
4
4
 
5
5
  import os
6
6
 
@@ -9,7 +9,7 @@ import torch
9
9
 
10
10
  from ultralytics.cfg import TASK2DATA, get_cfg, get_save_dir
11
11
  from ultralytics.engine.results import Results
12
- from ultralytics.hub.utils import HUB_WEB_ROOT
12
+ from ultralytics.hub import HUB_WEB_ROOT, HUBTrainingSession
13
13
  from ultralytics.nn.tasks import attempt_load_one_weight, guess_model_task, nn, yaml_model_load
14
14
  from ultralytics.utils import (
15
15
  ARGV,
@@ -17,7 +17,6 @@ from ultralytics.utils import (
17
17
  DEFAULT_CFG_DICT,
18
18
  LOGGER,
19
19
  RANK,
20
- SETTINGS,
21
20
  callbacks,
22
21
  checks,
23
22
  emojis,
@@ -76,7 +75,6 @@ class Model(nn.Module):
76
75
  add_callback: Adds a callback function for an event.
77
76
  clear_callback: Clears all callbacks for an event.
78
77
  reset_callbacks: Resets all callbacks to their default functions.
79
- _get_hub_session: Retrieves or creates an Ultralytics HUB session.
80
78
  is_triton_model: Checks if a model is a Triton Server model.
81
79
  is_hub_model: Checks if a model is an Ultralytics HUB model.
82
80
  _reset_ckpt_args: Resets checkpoint arguments when loading a PyTorch model.
@@ -135,8 +133,8 @@ class Model(nn.Module):
135
133
  # Check if Ultralytics HUB model from https://hub.ultralytics.com
136
134
  if self.is_hub_model(model):
137
135
  # Fetch model from HUB
138
- checks.check_requirements("hub-sdk>=0.0.6")
139
- self.session = self._get_hub_session(model)
136
+ checks.check_requirements("hub-sdk>=0.0.8")
137
+ self.session = HUBTrainingSession.create_session(model)
140
138
  model = self.session.model_file
141
139
 
142
140
  # Check if Triton Server model
@@ -175,14 +173,6 @@ class Model(nn.Module):
175
173
  """
176
174
  return self.predict(source, stream, **kwargs)
177
175
 
178
- @staticmethod
179
- def _get_hub_session(model: str):
180
- """Creates a session for Hub Training."""
181
- from ultralytics.hub.session import HUBTrainingSession
182
-
183
- session = HUBTrainingSession(model)
184
- return session if session.client.authenticated else None
185
-
186
176
  @staticmethod
187
177
  def is_triton_model(model: str) -> bool:
188
178
  """Is model a Triton Server URL string, i.e. <scheme>://<netloc>/<endpoint>/<task_name>"""
@@ -656,19 +646,6 @@ class Model(nn.Module):
656
646
  self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
657
647
  self.model = self.trainer.model
658
648
 
659
- if SETTINGS["hub"] is True and not self.session:
660
- # Create a model in HUB
661
- try:
662
- self.session = self._get_hub_session(self.model_name)
663
- if self.session:
664
- self.session.create_model(args)
665
- # Check model was created
666
- if not getattr(self.session.model, "id", None):
667
- self.session = None
668
- except (PermissionError, ModuleNotFoundError):
669
- # Ignore PermissionError and ModuleNotFoundError which indicates hub-sdk not installed
670
- pass
671
-
672
649
  self.trainer.hub_session = self.session # attach optional HUB session
673
650
  self.trainer.train()
674
651
  # Update model and cfg after training
@@ -48,6 +48,7 @@ from ultralytics.utils.torch_utils import (
48
48
  one_cycle,
49
49
  select_device,
50
50
  strip_optimizer,
51
+ torch_distributed_zero_first,
51
52
  )
52
53
 
53
54
 
@@ -127,7 +128,8 @@ class BaseTrainer:
127
128
 
128
129
  # Model and Dataset
129
130
  self.model = check_model_file_from_stem(self.args.model) # add suffix, i.e. yolov8n -> yolov8n.pt
130
- self.trainset, self.testset = self.get_dataset()
131
+ with torch_distributed_zero_first(RANK): # avoid auto-downloading dataset multiple times
132
+ self.trainset, self.testset = self.get_dataset()
131
133
  self.ema = None
132
134
 
133
135
  # Optimization utils init
@@ -143,6 +145,9 @@ class BaseTrainer:
143
145
  self.csv = self.save_dir / "results.csv"
144
146
  self.plot_idx = [0, 1, 2]
145
147
 
148
+ # HUB
149
+ self.hub_session = None
150
+
146
151
  # Callbacks
147
152
  self.callbacks = _callbacks or callbacks.get_default_callbacks()
148
153
  if RANK in {-1, 0}:
@@ -4,9 +4,24 @@ import requests
4
4
 
5
5
  from ultralytics.data.utils import HUBDatasetStats
6
6
  from ultralytics.hub.auth import Auth
7
- from ultralytics.hub.utils import HUB_API_ROOT, HUB_WEB_ROOT, PREFIX
7
+ from ultralytics.hub.session import HUBTrainingSession
8
+ from ultralytics.hub.utils import HUB_API_ROOT, HUB_WEB_ROOT, PREFIX, events
8
9
  from ultralytics.utils import LOGGER, SETTINGS, checks
9
10
 
11
+ __all__ = (
12
+ "PREFIX",
13
+ "HUB_WEB_ROOT",
14
+ "HUBTrainingSession",
15
+ "login",
16
+ "logout",
17
+ "reset_model",
18
+ "export_fmts_hub",
19
+ "export_model",
20
+ "get_export",
21
+ "check_dataset",
22
+ "events",
23
+ )
24
+
10
25
 
11
26
  def login(api_key: str = None, save=True) -> bool:
12
27
  """
@@ -23,7 +38,7 @@ def login(api_key: str = None, save=True) -> bool:
23
38
  Returns:
24
39
  (bool): True if authentication is successful, False otherwise.
25
40
  """
26
- checks.check_requirements("hub-sdk>=0.0.6")
41
+ checks.check_requirements("hub-sdk>=0.0.8")
27
42
  from hub_sdk import HUBClient
28
43
 
29
44
  api_key_url = f"{HUB_WEB_ROOT}/settings?tab=api+keys" # set the redirect URL
@@ -19,16 +19,12 @@ class HUBTrainingSession:
19
19
  HUB training session for Ultralytics HUB YOLO models. Handles model initialization, heartbeats, and checkpointing.
20
20
 
21
21
  Attributes:
22
- agent_id (str): Identifier for the instance communicating with the server.
23
22
  model_id (str): Identifier for the YOLO model being trained.
24
23
  model_url (str): URL for the model in Ultralytics HUB.
25
- api_url (str): API URL for the model in Ultralytics HUB.
26
- auth_header (dict): Authentication header for the Ultralytics HUB API requests.
27
24
  rate_limits (dict): Rate limits for different API calls (in seconds).
28
25
  timers (dict): Timers for rate limiting.
29
26
  metrics_queue (dict): Queue for the model's metrics.
30
27
  model (dict): Model data fetched from Ultralytics HUB.
31
- alive (bool): Indicates if the heartbeat loop is active.
32
28
  """
33
29
 
34
30
  def __init__(self, identifier):
@@ -46,14 +42,12 @@ class HUBTrainingSession:
46
42
  """
47
43
  from hub_sdk import HUBClient
48
44
 
49
- self.rate_limits = {
50
- "metrics": 3.0,
51
- "ckpt": 900.0,
52
- "heartbeat": 300.0,
53
- } # rate limits (seconds)
45
+ self.rate_limits = {"metrics": 3, "ckpt": 900, "heartbeat": 300} # rate limits (seconds)
54
46
  self.metrics_queue = {} # holds metrics for each epoch until upload
55
47
  self.metrics_upload_failed_queue = {} # holds metrics for each epoch if upload failed
56
48
  self.timers = {} # holds timers in ultralytics/utils/callbacks/hub.py
49
+ self.model = None
50
+ self.model_url = None
57
51
 
58
52
  # Parse input
59
53
  api_key, model_id, self.filename = self._parse_identifier(identifier)
@@ -65,10 +59,30 @@ class HUBTrainingSession:
65
59
  # Initialize client
66
60
  self.client = HUBClient(credentials)
67
61
 
68
- if model_id:
69
- self.load_model(model_id) # load existing model
70
- else:
71
- self.model = self.client.model() # load empty model
62
+ # Load models if authenticated
63
+ if self.client.authenticated:
64
+ if model_id:
65
+ self.load_model(model_id) # load existing model
66
+ else:
67
+ self.model = self.client.model() # load empty model
68
+
69
+ @classmethod
70
+ def create_session(cls, identifier, args=None):
71
+ """Class method to create an authenticated HUBTrainingSession or return None."""
72
+ try:
73
+ session = cls(identifier)
74
+ if not session.client.authenticated:
75
+ if identifier.startswith(f"{HUB_WEB_ROOT}/models/"):
76
+ LOGGER.warning(f"{PREFIX}WARNING ⚠️ Login to Ultralytics HUB with 'yolo hub login API_KEY'.")
77
+ exit()
78
+ return None
79
+ if args and not identifier.startswith(f"{HUB_WEB_ROOT}/models/"): # not a HUB model URL
80
+ session.create_model(args)
81
+ assert session.model.id, "HUB model not loaded correctly"
82
+ return session
83
+ # PermissionError and ModuleNotFoundError indicate hub-sdk not installed
84
+ except (PermissionError, ModuleNotFoundError, AssertionError):
85
+ return None
72
86
 
73
87
  def load_model(self, model_id):
74
88
  """Loads an existing model from Ultralytics HUB using the provided model identifier."""
@@ -92,14 +106,12 @@ class HUBTrainingSession:
92
106
  "epochs": model_args.get("epochs", 300),
93
107
  "imageSize": model_args.get("imgsz", 640),
94
108
  "patience": model_args.get("patience", 100),
95
- "device": model_args.get("device", ""),
96
- "cache": model_args.get("cache", "ram"),
109
+ "device": str(model_args.get("device", "")), # convert None to string
110
+ "cache": str(model_args.get("cache", "ram")), # convert True, False, None to string
97
111
  },
98
112
  "dataset": {"name": model_args.get("data")},
99
113
  "lineage": {
100
- "architecture": {
101
- "name": self.filename.replace(".pt", "").replace(".yaml", ""),
102
- },
114
+ "architecture": {"name": self.filename.replace(".pt", "").replace(".yaml", "")},
103
115
  "parent": {},
104
116
  },
105
117
  "meta": {"name": self.filename},
@@ -113,7 +125,7 @@ class HUBTrainingSession:
113
125
  # Model could not be created
114
126
  # TODO: improve error handling
115
127
  if not self.model.id:
116
- return
128
+ return None
117
129
 
118
130
  self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
119
131
 
@@ -122,7 +134,8 @@ class HUBTrainingSession:
122
134
 
123
135
  LOGGER.info(f"{PREFIX}View model at {self.model_url} 🚀")
124
136
 
125
- def _parse_identifier(self, identifier):
137
+ @staticmethod
138
+ def _parse_identifier(identifier):
126
139
  """
127
140
  Parses the given identifier to determine the type of identifier and extract relevant components.
128
141
 
@@ -213,13 +226,14 @@ class HUBTrainingSession:
213
226
  thread=True,
214
227
  verbose=True,
215
228
  progress_total=None,
216
- stream_reponse=None,
229
+ stream_response=None,
217
230
  *args,
218
231
  **kwargs,
219
232
  ):
220
233
  def retry_request():
221
234
  """Attempts to call `request_func` with retries, timeout, and optional threading."""
222
235
  t0 = time.time() # Record the start time for the timeout
236
+ response = None
223
237
  for i in range(retry + 1):
224
238
  if (time.time() - t0) > timeout:
225
239
  LOGGER.warning(f"{PREFIX}Timeout for request reached. {HELP_MSG}")
@@ -233,7 +247,7 @@ class HUBTrainingSession:
233
247
 
234
248
  if progress_total:
235
249
  self._show_upload_progress(progress_total, response)
236
- elif stream_reponse:
250
+ elif stream_response:
237
251
  self._iterate_content(response)
238
252
 
239
253
  if HTTPStatus.OK <= response.status_code < HTTPStatus.MULTIPLE_CHOICES:
@@ -268,7 +282,8 @@ class HUBTrainingSession:
268
282
  # If running in the main thread, call retry_request directly
269
283
  return retry_request()
270
284
 
271
- def _should_retry(self, status_code):
285
+ @staticmethod
286
+ def _should_retry(status_code):
272
287
  """Determines if a request should be retried based on the HTTP status code."""
273
288
  retry_codes = {
274
289
  HTTPStatus.REQUEST_TIMEOUT,
@@ -338,12 +353,13 @@ class HUBTrainingSession:
338
353
  timeout=3600,
339
354
  thread=not final,
340
355
  progress_total=progress_total,
341
- stream_reponse=True,
356
+ stream_response=True,
342
357
  )
343
358
  else:
344
359
  LOGGER.warning(f"{PREFIX}WARNING ⚠️ Model upload issue. Missing model {weights}.")
345
360
 
346
- def _show_upload_progress(self, content_length: int, response: requests.Response) -> None:
361
+ @staticmethod
362
+ def _show_upload_progress(content_length: int, response: requests.Response) -> None:
347
363
  """
348
364
  Display a progress bar to track the upload progress of a file download.
349
365
 
@@ -358,7 +374,8 @@ class HUBTrainingSession:
358
374
  for data in response.iter_content(chunk_size=1024):
359
375
  pbar.update(len(data))
360
376
 
361
- def _iterate_content(self, response: requests.Response) -> None:
377
+ @staticmethod
378
+ def _iterate_content(response: requests.Response) -> None:
362
379
  """
363
380
  Process the streamed HTTP response data.
364
381
 
@@ -3,8 +3,14 @@
3
3
  import json
4
4
  from time import time
5
5
 
6
- from ultralytics.hub.utils import HUB_WEB_ROOT, PREFIX, events
7
- from ultralytics.utils import LOGGER, SETTINGS
6
+ from ultralytics.hub import HUB_WEB_ROOT, PREFIX, HUBTrainingSession, events
7
+ from ultralytics.utils import LOGGER, RANK, SETTINGS
8
+
9
+
10
+ def on_pretrain_routine_start(trainer):
11
+ """Create a remote Ultralytics HUB session to log local model training."""
12
+ if RANK in {-1, 0} and SETTINGS["hub"] is True and SETTINGS["api_key"] and trainer.hub_session is None:
13
+ trainer.hub_session = HUBTrainingSession.create_session(trainer.args.model, trainer.args)
8
14
 
9
15
 
10
16
  def on_pretrain_routine_end(trainer):
@@ -91,6 +97,7 @@ def on_export_start(exporter):
91
97
 
92
98
  callbacks = (
93
99
  {
100
+ "on_pretrain_routine_start": on_pretrain_routine_start,
94
101
  "on_pretrain_routine_end": on_pretrain_routine_end,
95
102
  "on_fit_epoch_end": on_fit_epoch_end,
96
103
  "on_model_save": on_model_save,
@@ -37,6 +37,7 @@ if __name__ == "__main__":
37
37
  cfg = DEFAULT_CFG_DICT.copy()
38
38
  cfg.update(save_dir='') # handle the extra key 'save_dir'
39
39
  trainer = {name}(cfg=cfg, overrides=overrides)
40
+ trainer.args.model = "{getattr(trainer.hub_session, 'model_url', trainer.args.model)}"
40
41
  results = trainer.train()
41
42
  """
42
43
  (USER_CONFIG_DIR / "DDP").mkdir(exist_ok=True)
@@ -168,13 +168,15 @@ def unzip_file(file, path=None, exclude=(".DS_Store", "__MACOSX"), exist_ok=Fals
168
168
  files = [f for f in zipObj.namelist() if all(x not in f for x in exclude)]
169
169
  top_level_dirs = {Path(f).parts[0] for f in files}
170
170
 
171
- if len(top_level_dirs) > 1 or (len(files) > 1 and not files[0].endswith("/")):
172
- # Zip has multiple files at top level
173
- path = extract_path = Path(path) / Path(file).stem # i.e. ../datasets/coco8
174
- else:
171
+ # Decide to unzip directly or unzip into a directory
172
+ unzip_as_dir = len(top_level_dirs) == 1 # (len(files) > 1 and not files[0].endswith("/"))
173
+ if unzip_as_dir:
175
174
  # Zip has 1 top-level directory
176
175
  extract_path = path # i.e. ../datasets
177
- path = Path(path) / list(top_level_dirs)[0] # i.e. ../datasets/coco8
176
+ path = Path(path) / list(top_level_dirs)[0] # i.e. extract coco8/ dir to ../datasets/
177
+ else:
178
+ # Zip has multiple files at top level
179
+ path = extract_path = Path(path) / Path(file).stem # i.e. extract multiple files to ../datasets/coco8/
178
180
 
179
181
  # Check if destination directory already exists and contains files
180
182
  if path.exists() and any(path.iterdir()) and not exist_ok:
@@ -43,8 +43,8 @@ TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
43
43
 
44
44
  @contextmanager
45
45
  def torch_distributed_zero_first(local_rank: int):
46
- """Decorator to make all processes in distributed training wait for each local_master to do something."""
47
- initialized = torch.distributed.is_available() and torch.distributed.is_initialized()
46
+ """Ensures all processes in distributed training wait for the local master (rank 0) to complete a task first."""
47
+ initialized = dist.is_available() and dist.is_initialized()
48
48
  if initialized and local_rank not in {-1, 0}:
49
49
  dist.barrier(device_ids=[local_rank])
50
50
  yield
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.39
3
+ Version: 8.2.41
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
@@ -30,7 +30,7 @@ Classifier: Operating System :: Microsoft :: Windows
30
30
  Requires-Python: >=3.8
31
31
  Description-Content-Type: text/markdown
32
32
  License-File: LICENSE
33
- Requires-Dist: numpy<2.0.0
33
+ Requires-Dist: numpy<2.0.0,>=1.23.5
34
34
  Requires-Dist: matplotlib>=3.3.0
35
35
  Requires-Dist: opencv-python>=4.6.0
36
36
  Requires-Dist: pillow>=7.1.2
@@ -47,8 +47,6 @@ Requires-Dist: seaborn>=0.11.0
47
47
  Requires-Dist: ultralytics-thop>=2.0.0
48
48
  Provides-Extra: dev
49
49
  Requires-Dist: ipython; extra == "dev"
50
- Requires-Dist: check-manifest; extra == "dev"
51
- Requires-Dist: pre-commit; extra == "dev"
52
50
  Requires-Dist: pytest; extra == "dev"
53
51
  Requires-Dist: pytest-cov; extra == "dev"
54
52
  Requires-Dist: coverage[toml]; extra == "dev"
@@ -77,7 +75,7 @@ Requires-Dist: comet; extra == "logging"
77
75
  Requires-Dist: tensorboard>=2.13.0; extra == "logging"
78
76
  Requires-Dist: dvclive>=2.12.0; extra == "logging"
79
77
  Provides-Extra: extra
80
- Requires-Dist: hub-sdk>=0.0.5; extra == "extra"
78
+ Requires-Dist: hub-sdk>=0.0.8; extra == "extra"
81
79
  Requires-Dist: ipython; extra == "extra"
82
80
  Requires-Dist: albumentations>=1.4.6; extra == "extra"
83
81
  Requires-Dist: pycocotools>=2.0.7; extra == "extra"
@@ -1,4 +1,4 @@
1
- numpy<2.0.0
1
+ numpy<2.0.0,>=1.23.5
2
2
  matplotlib>=3.3.0
3
3
  opencv-python>=4.6.0
4
4
  pillow>=7.1.2
@@ -16,8 +16,6 @@ ultralytics-thop>=2.0.0
16
16
 
17
17
  [dev]
18
18
  ipython
19
- check-manifest
20
- pre-commit
21
19
  pytest
22
20
  pytest-cov
23
21
  coverage[toml]
@@ -49,7 +47,7 @@ h5py!=3.11.0
49
47
  coremltools>=7.0
50
48
 
51
49
  [extra]
52
- hub-sdk>=0.0.5
50
+ hub-sdk>=0.0.8
53
51
  ipython
54
52
  albumentations>=1.4.6
55
53
  pycocotools>=2.0.7
File without changes
File without changes
File without changes