ultralytics 8.2.38__tar.gz → 8.2.40__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.38 → ultralytics-8.2.40}/PKG-INFO +6 -6
  2. {ultralytics-8.2.38 → ultralytics-8.2.40}/README.md +5 -5
  3. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-p6.yaml +5 -5
  5. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/augment.py +13 -16
  6. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/converter.py +10 -11
  7. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/split_dota.py +4 -4
  8. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/exporter.py +2 -2
  9. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/model.py +2 -26
  10. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/hub/__init__.py +16 -1
  11. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/hub/session.py +39 -26
  12. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/modules/tiny_encoder.py +6 -7
  13. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/modules/__init__.py +1 -0
  14. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/modules/block.py +1 -2
  15. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/modules/head.py +1 -2
  16. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/tasks.py +5 -1
  17. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/__init__.py +1 -0
  18. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/__init__.py +1 -1
  19. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/hub.py +9 -2
  20. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics.egg-info/PKG-INFO +6 -6
  21. {ultralytics-8.2.38 → ultralytics-8.2.40}/LICENSE +0 -0
  22. {ultralytics-8.2.38 → ultralytics-8.2.40}/pyproject.toml +0 -0
  23. {ultralytics-8.2.38 → ultralytics-8.2.40}/setup.cfg +0 -0
  24. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/__init__.py +0 -0
  25. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/conftest.py +0 -0
  26. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_cli.py +0 -0
  27. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_cuda.py +0 -0
  28. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_engine.py +0 -0
  29. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_explorer.py +0 -0
  30. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_exports.py +0 -0
  31. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_integrations.py +0 -0
  32. {ultralytics-8.2.38 → ultralytics-8.2.40}/tests/test_python.py +0 -0
  33. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/assets/bus.jpg +0 -0
  34. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/assets/zidane.jpg +0 -0
  35. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/__init__.py +0 -0
  36. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  37. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  38. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  39. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  40. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  41. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  42. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  43. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  44. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  45. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  46. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  47. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  48. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  49. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco.yaml +0 -0
  50. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  51. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  52. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  53. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  54. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  55. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  56. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  57. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  58. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  59. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  60. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/signature.yaml +0 -0
  61. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  62. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/datasets/xView.yaml +0 -0
  63. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/default.yaml +0 -0
  64. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  65. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  66. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  67. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  68. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  69. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  70. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  71. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  72. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  73. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  74. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  75. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  76. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  77. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  78. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  79. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  80. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  81. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  82. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  83. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  84. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  85. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  86. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  87. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  88. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  89. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  90. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  91. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  92. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  93. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  94. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  95. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  96. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  97. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  98. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  99. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  100. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  101. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  102. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  103. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  104. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  105. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/__init__.py +0 -0
  106. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/annotator.py +0 -0
  107. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/base.py +0 -0
  108. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/build.py +0 -0
  109. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/dataset.py +0 -0
  110. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/explorer/__init__.py +0 -0
  111. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/explorer/explorer.py +0 -0
  112. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/explorer/gui/__init__.py +0 -0
  113. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/explorer/gui/dash.py +0 -0
  114. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/explorer/utils.py +0 -0
  115. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/loaders.py +0 -0
  116. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/data/utils.py +0 -0
  117. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/__init__.py +0 -0
  118. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/predictor.py +0 -0
  119. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/results.py +0 -0
  120. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/trainer.py +0 -0
  121. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/tuner.py +0 -0
  122. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/engine/validator.py +0 -0
  123. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/hub/auth.py +0 -0
  124. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/hub/utils.py +0 -0
  125. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/__init__.py +0 -0
  126. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/fastsam/__init__.py +0 -0
  127. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/fastsam/model.py +0 -0
  128. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/fastsam/predict.py +0 -0
  129. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/fastsam/prompt.py +0 -0
  130. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/fastsam/utils.py +0 -0
  131. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/fastsam/val.py +0 -0
  132. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/nas/__init__.py +0 -0
  133. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/nas/model.py +0 -0
  134. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/nas/predict.py +0 -0
  135. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/nas/val.py +0 -0
  136. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/rtdetr/__init__.py +0 -0
  137. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/rtdetr/model.py +0 -0
  138. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/rtdetr/predict.py +0 -0
  139. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/rtdetr/train.py +0 -0
  140. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/rtdetr/val.py +0 -0
  141. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/__init__.py +0 -0
  142. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/amg.py +0 -0
  143. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/build.py +0 -0
  144. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/model.py +0 -0
  145. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/modules/__init__.py +0 -0
  146. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/modules/decoders.py +0 -0
  147. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/modules/encoders.py +0 -0
  148. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/modules/sam.py +0 -0
  149. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/modules/transformer.py +0 -0
  150. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/sam/predict.py +0 -0
  151. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/utils/__init__.py +0 -0
  152. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/utils/loss.py +0 -0
  153. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/utils/ops.py +0 -0
  154. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/__init__.py +0 -0
  155. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/classify/__init__.py +0 -0
  156. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/classify/predict.py +0 -0
  157. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/classify/train.py +0 -0
  158. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/classify/val.py +0 -0
  159. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/detect/__init__.py +0 -0
  160. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/detect/predict.py +0 -0
  161. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/detect/train.py +0 -0
  162. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/detect/val.py +0 -0
  163. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/model.py +0 -0
  164. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/obb/__init__.py +0 -0
  165. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/obb/predict.py +0 -0
  166. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/obb/train.py +0 -0
  167. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/obb/val.py +0 -0
  168. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/pose/__init__.py +0 -0
  169. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/pose/predict.py +0 -0
  170. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/pose/train.py +0 -0
  171. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/pose/val.py +0 -0
  172. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/segment/__init__.py +0 -0
  173. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/segment/predict.py +0 -0
  174. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/segment/train.py +0 -0
  175. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/segment/val.py +0 -0
  176. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/world/__init__.py +0 -0
  177. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/world/train.py +0 -0
  178. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/models/yolo/world/train_world.py +0 -0
  179. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/__init__.py +0 -0
  180. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/autobackend.py +0 -0
  181. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/modules/conv.py +0 -0
  182. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/modules/transformer.py +0 -0
  183. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/nn/modules/utils.py +0 -0
  184. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/ai_gym.py +0 -0
  185. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/analytics.py +0 -0
  186. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/distance_calculation.py +0 -0
  187. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/heatmap.py +0 -0
  188. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/object_counter.py +0 -0
  189. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/parking_management.py +0 -0
  190. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/queue_management.py +0 -0
  191. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/solutions/speed_estimation.py +0 -0
  192. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/__init__.py +0 -0
  193. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/basetrack.py +0 -0
  194. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/bot_sort.py +0 -0
  195. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/byte_tracker.py +0 -0
  196. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/track.py +0 -0
  197. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/utils/__init__.py +0 -0
  198. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/utils/gmc.py +0 -0
  199. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  200. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/trackers/utils/matching.py +0 -0
  201. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/autobatch.py +0 -0
  202. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/benchmarks.py +0 -0
  203. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/__init__.py +0 -0
  204. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/base.py +0 -0
  205. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/clearml.py +0 -0
  206. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/comet.py +0 -0
  207. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/dvc.py +0 -0
  208. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/mlflow.py +0 -0
  209. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/neptune.py +0 -0
  210. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/raytune.py +0 -0
  211. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  212. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/callbacks/wb.py +0 -0
  213. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/checks.py +0 -0
  214. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/dist.py +0 -0
  215. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/downloads.py +0 -0
  216. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/errors.py +0 -0
  217. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/files.py +0 -0
  218. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/instance.py +0 -0
  219. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/loss.py +0 -0
  220. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/metrics.py +0 -0
  221. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/ops.py +0 -0
  222. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/patches.py +0 -0
  223. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/plotting.py +0 -0
  224. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/tal.py +0 -0
  225. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/torch_utils.py +0 -0
  226. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/triton.py +0 -0
  227. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics/utils/tuner.py +0 -0
  228. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics.egg-info/SOURCES.txt +0 -0
  229. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics.egg-info/dependency_links.txt +0 -0
  230. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics.egg-info/entry_points.txt +0 -0
  231. {ultralytics-8.2.38 → ultralytics-8.2.40}/ultralytics.egg-info/requires.txt +0 -0
  232. {ultralytics-8.2.38 → ultralytics-8.2.40}/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.38
3
+ Version: 8.2.40
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
@@ -122,7 +122,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
122
122
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
123
123
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
124
124
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
125
- <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="2%" alt="Ultralytics Instagram"></a>
125
+ <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="2%" alt="Ultralytics BiliBili"></a>
126
126
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
127
127
  <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
128
128
  </div>
@@ -313,7 +313,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
313
313
  Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
314
314
 
315
315
  <br>
316
- <a href="https://bit.ly/ultralytics_hub" target="_blank">
316
+ <a href="https://ultralytics.com/hub" target="_blank">
317
317
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/yolov8/banner-integrations.png" alt="Ultralytics active learning integrations"></a>
318
318
  <br>
319
319
  <br>
@@ -338,9 +338,9 @@ Our key integrations with leading AI platforms extend the functionality of Ultra
338
338
 
339
339
  ## <div align="center">Ultralytics HUB</div>
340
340
 
341
- Experience seamless AI with [Ultralytics HUB](https://bit.ly/ultralytics_hub) ⭐, the all-in-one solution for data visualization, YOLOv5 and YOLOv8 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://ultralytics.com/app_install). Start your journey for **Free** now!
341
+ Experience seamless AI with [Ultralytics HUB](https://ultralytics.com/hub) ⭐, the all-in-one solution for data visualization, YOLOv5 and YOLOv8 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://ultralytics.com/app_install). Start your journey for **Free** now!
342
342
 
343
- <a href="https://bit.ly/ultralytics_hub" target="_blank">
343
+ <a href="https://ultralytics.com/hub" target="_blank">
344
344
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/im/ultralytics-hub.png" alt="Ultralytics HUB preview image"></a>
345
345
 
346
346
  ## <div align="center">Contribute</div>
@@ -375,7 +375,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
375
375
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
376
376
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
377
377
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
378
- <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="3%" alt="Ultralytics Instagram"></a>
378
+ <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="3%" alt="Ultralytics BiliBili"></a>
379
379
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
380
380
  <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
381
381
  </div>
@@ -38,7 +38,7 @@ To request an Enterprise License please complete the form at [Ultralytics Licens
38
38
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
39
39
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="2%" alt="Ultralytics TikTok"></a>
40
40
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
41
- <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="2%" alt="Ultralytics Instagram"></a>
41
+ <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="2%" alt="Ultralytics BiliBili"></a>
42
42
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="2%" alt="space">
43
43
  <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="2%" alt="Ultralytics Discord"></a>
44
44
  </div>
@@ -229,7 +229,7 @@ See [Classification Docs](https://docs.ultralytics.com/tasks/classify/) for usag
229
229
  Our key integrations with leading AI platforms extend the functionality of Ultralytics' offerings, enhancing tasks like dataset labeling, training, visualization, and model management. Discover how Ultralytics, in collaboration with [Roboflow](https://roboflow.com/?ref=ultralytics), ClearML, [Comet](https://bit.ly/yolov8-readme-comet), Neural Magic and [OpenVINO](https://docs.ultralytics.com/integrations/openvino), can optimize your AI workflow.
230
230
 
231
231
  <br>
232
- <a href="https://bit.ly/ultralytics_hub" target="_blank">
232
+ <a href="https://ultralytics.com/hub" target="_blank">
233
233
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/yolov8/banner-integrations.png" alt="Ultralytics active learning integrations"></a>
234
234
  <br>
235
235
  <br>
@@ -254,9 +254,9 @@ Our key integrations with leading AI platforms extend the functionality of Ultra
254
254
 
255
255
  ## <div align="center">Ultralytics HUB</div>
256
256
 
257
- Experience seamless AI with [Ultralytics HUB](https://bit.ly/ultralytics_hub) ⭐, the all-in-one solution for data visualization, YOLOv5 and YOLOv8 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://ultralytics.com/app_install). Start your journey for **Free** now!
257
+ Experience seamless AI with [Ultralytics HUB](https://ultralytics.com/hub) ⭐, the all-in-one solution for data visualization, YOLOv5 and YOLOv8 🚀 model training and deployment, without any coding. Transform images into actionable insights and bring your AI visions to life with ease using our cutting-edge platform and user-friendly [Ultralytics App](https://ultralytics.com/app_install). Start your journey for **Free** now!
258
258
 
259
- <a href="https://bit.ly/ultralytics_hub" target="_blank">
259
+ <a href="https://ultralytics.com/hub" target="_blank">
260
260
  <img width="100%" src="https://github.com/ultralytics/assets/raw/main/im/ultralytics-hub.png" alt="Ultralytics HUB preview image"></a>
261
261
 
262
262
  ## <div align="center">Contribute</div>
@@ -291,7 +291,7 @@ For Ultralytics bug reports and feature requests please visit [GitHub Issues](ht
291
291
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
292
292
  <a href="https://www.tiktok.com/@ultralytics"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-tiktok.png" width="3%" alt="Ultralytics TikTok"></a>
293
293
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
294
- <a href="https://www.instagram.com/ultralytics/"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-instagram.png" width="3%" alt="Ultralytics Instagram"></a>
294
+ <a href="https://ultralytics.com/bilibili"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-bilibili.png" width="3%" alt="Ultralytics BiliBili"></a>
295
295
  <img src="https://github.com/ultralytics/assets/raw/main/social/logo-transparent.png" width="3%" alt="space">
296
296
  <a href="https://ultralytics.com/discord"><img src="https://github.com/ultralytics/assets/raw/main/social/logo-social-discord.png" width="3%" alt="Ultralytics Discord"></a>
297
297
  </div>
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.38"
3
+ __version__ = "8.2.40"
4
4
 
5
5
  import os
6
6
 
@@ -5,11 +5,11 @@
5
5
  nc: 80 # number of classes
6
6
  scales: # model compound scaling constants, i.e. 'model=yolov8n-p6.yaml' will call yolov8-p6.yaml with scale 'n'
7
7
  # [depth, width, max_channels]
8
- n: [0.33, 0.25, 1024]
9
- s: [0.33, 0.50, 1024]
10
- m: [0.67, 0.75, 768]
11
- l: [1.00, 1.00, 512]
12
- x: [1.00, 1.25, 512]
8
+ n: [0.33, 0.25, 1024] # YOLOv8n-p6 summary (fused): 220 layers, 4976656 parameters, 42560 gradients, 8.7 GFLOPs
9
+ s: [0.33, 0.50, 1024] # YOLOv8s-p6 summary (fused): 220 layers, 17897168 parameters, 57920 gradients, 28.5 GFLOPs
10
+ m: [0.67, 0.75, 768] # YOLOv8m-p6 summary (fused): 285 layers, 44862352 parameters, 78400 gradients, 83.1 GFLOPs
11
+ l: [1.00, 1.00, 512] # YOLOv8l-p6 summary (fused): 350 layers, 62351440 parameters, 98880 gradients, 167.3 GFLOPs
12
+ x: [1.00, 1.25, 512] # YOLOv8x-p6 summary (fused): 350 layers, 97382352 parameters, 123456 gradients, 261.1 GFLOPs
13
13
 
14
14
  # YOLOv8.0x6 backbone
15
15
  backbone:
@@ -1223,16 +1223,13 @@ def classify_transforms(
1223
1223
  else:
1224
1224
  # Resize the shortest edge to matching target dim for non-square target
1225
1225
  tfl = [T.Resize(scale_size)]
1226
- tfl += [T.CenterCrop(size)]
1227
-
1228
- tfl += [
1229
- T.ToTensor(),
1230
- T.Normalize(
1231
- mean=torch.tensor(mean),
1232
- std=torch.tensor(std),
1233
- ),
1234
- ]
1235
-
1226
+ tfl.extend(
1227
+ [
1228
+ T.CenterCrop(size),
1229
+ T.ToTensor(),
1230
+ T.Normalize(mean=torch.tensor(mean), std=torch.tensor(std)),
1231
+ ]
1232
+ )
1236
1233
  return T.Compose(tfl)
1237
1234
 
1238
1235
 
@@ -1284,9 +1281,9 @@ def classify_augmentations(
1284
1281
  ratio = tuple(ratio or (3.0 / 4.0, 4.0 / 3.0)) # default imagenet ratio range
1285
1282
  primary_tfl = [T.RandomResizedCrop(size, scale=scale, ratio=ratio, interpolation=interpolation)]
1286
1283
  if hflip > 0.0:
1287
- primary_tfl += [T.RandomHorizontalFlip(p=hflip)]
1284
+ primary_tfl.append(T.RandomHorizontalFlip(p=hflip))
1288
1285
  if vflip > 0.0:
1289
- primary_tfl += [T.RandomVerticalFlip(p=vflip)]
1286
+ primary_tfl.append(T.RandomVerticalFlip(p=vflip))
1290
1287
 
1291
1288
  secondary_tfl = []
1292
1289
  disable_color_jitter = False
@@ -1298,19 +1295,19 @@ def classify_augmentations(
1298
1295
 
1299
1296
  if auto_augment == "randaugment":
1300
1297
  if TORCHVISION_0_11:
1301
- secondary_tfl += [T.RandAugment(interpolation=interpolation)]
1298
+ secondary_tfl.append(T.RandAugment(interpolation=interpolation))
1302
1299
  else:
1303
1300
  LOGGER.warning('"auto_augment=randaugment" requires torchvision >= 0.11.0. Disabling it.')
1304
1301
 
1305
1302
  elif auto_augment == "augmix":
1306
1303
  if TORCHVISION_0_13:
1307
- secondary_tfl += [T.AugMix(interpolation=interpolation)]
1304
+ secondary_tfl.append(T.AugMix(interpolation=interpolation))
1308
1305
  else:
1309
1306
  LOGGER.warning('"auto_augment=augmix" requires torchvision >= 0.13.0. Disabling it.')
1310
1307
 
1311
1308
  elif auto_augment == "autoaugment":
1312
1309
  if TORCHVISION_0_10:
1313
- secondary_tfl += [T.AutoAugment(interpolation=interpolation)]
1310
+ secondary_tfl.append(T.AutoAugment(interpolation=interpolation))
1314
1311
  else:
1315
1312
  LOGGER.warning('"auto_augment=autoaugment" requires torchvision >= 0.10.0. Disabling it.')
1316
1313
 
@@ -1321,7 +1318,7 @@ def classify_augmentations(
1321
1318
  )
1322
1319
 
1323
1320
  if not disable_color_jitter:
1324
- secondary_tfl += [T.ColorJitter(brightness=hsv_v, contrast=hsv_v, saturation=hsv_s, hue=hsv_h)]
1321
+ secondary_tfl.append(T.ColorJitter(brightness=hsv_v, contrast=hsv_v, saturation=hsv_s, hue=hsv_h))
1325
1322
 
1326
1323
  final_tfl = [
1327
1324
  T.ToTensor(),
@@ -329,8 +329,7 @@ def convert_coco(
329
329
 
330
330
  if lvis:
331
331
  with open((Path(save_dir) / json_file.name.replace("lvis_v1_", "").replace(".json", ".txt")), "a") as f:
332
- for l in image_txt:
333
- f.write(f"{l}\n")
332
+ f.writelines(f"{line}\n" for line in image_txt)
334
333
 
335
334
  LOGGER.info(f"{'LVIS' if lvis else 'COCO'} data converted successfully.\nResults saved to {save_dir.resolve()}")
336
335
 
@@ -534,25 +533,25 @@ def yolo_bbox2segment(im_dir, save_dir=None, sam_model="sam_b.pt"):
534
533
 
535
534
  LOGGER.info("Detection labels detected, generating segment labels by SAM model!")
536
535
  sam_model = SAM(sam_model)
537
- for l in tqdm(dataset.labels, total=len(dataset.labels), desc="Generating segment labels"):
538
- h, w = l["shape"]
539
- boxes = l["bboxes"]
536
+ for label in tqdm(dataset.labels, total=len(dataset.labels), desc="Generating segment labels"):
537
+ h, w = label["shape"]
538
+ boxes = label["bboxes"]
540
539
  if len(boxes) == 0: # skip empty labels
541
540
  continue
542
541
  boxes[:, [0, 2]] *= w
543
542
  boxes[:, [1, 3]] *= h
544
- im = cv2.imread(l["im_file"])
543
+ im = cv2.imread(label["im_file"])
545
544
  sam_results = sam_model(im, bboxes=xywh2xyxy(boxes), verbose=False, save=False)
546
- l["segments"] = sam_results[0].masks.xyn
545
+ label["segments"] = sam_results[0].masks.xyn
547
546
 
548
547
  save_dir = Path(save_dir) if save_dir else Path(im_dir).parent / "labels-segment"
549
548
  save_dir.mkdir(parents=True, exist_ok=True)
550
- for l in dataset.labels:
549
+ for label in dataset.labels:
551
550
  texts = []
552
- lb_name = Path(l["im_file"]).with_suffix(".txt").name
551
+ lb_name = Path(label["im_file"]).with_suffix(".txt").name
553
552
  txt_file = save_dir / lb_name
554
- cls = l["cls"]
555
- for i, s in enumerate(l["segments"]):
553
+ cls = label["cls"]
554
+ for i, s in enumerate(label["segments"]):
556
555
  line = (int(cls[i]), *s.reshape(-1))
557
556
  texts.append(("%g " * len(line)).rstrip() % line)
558
557
  if texts:
@@ -26,8 +26,8 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
26
26
  bbox2 (np.ndarray): Bounding boxes, (n ,4).
27
27
  """
28
28
  polygon1 = polygon1.reshape(-1, 4, 2)
29
- lt_point = np.min(polygon1, axis=-2)
30
- rb_point = np.max(polygon1, axis=-2)
29
+ lt_point = np.min(polygon1, axis=-2) # left-top
30
+ rb_point = np.max(polygon1, axis=-2) # right-bottom
31
31
  bbox1 = np.concatenate([lt_point, rb_point], axis=-1)
32
32
 
33
33
  lt = np.maximum(bbox1[:, None, :2], bbox2[..., :2])
@@ -35,8 +35,8 @@ def bbox_iof(polygon1, bbox2, eps=1e-6):
35
35
  wh = np.clip(rb - lt, 0, np.inf)
36
36
  h_overlaps = wh[..., 0] * wh[..., 1]
37
37
 
38
- l, t, r, b = (bbox2[..., i] for i in range(4))
39
- polygon2 = np.stack([l, t, r, t, r, b, l, b], axis=-1).reshape(-1, 4, 2)
38
+ left, top, right, bottom = (bbox2[..., i] for i in range(4))
39
+ polygon2 = np.stack([left, top, right, top, right, bottom, left, bottom], axis=-1).reshape(-1, 4, 2)
40
40
 
41
41
  sg_polys1 = [Polygon(p) for p in polygon1]
42
42
  sg_polys2 = [Polygon(p) for p in polygon2]
@@ -388,7 +388,7 @@ class Exporter:
388
388
  """YOLOv8 ONNX export."""
389
389
  requirements = ["onnx>=1.12.0"]
390
390
  if self.args.simplify:
391
- requirements += ["onnxslim==0.1.28", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
391
+ requirements += ["onnxslim>=0.1.31", "onnxruntime" + ("-gpu" if torch.cuda.is_available() else "")]
392
392
  check_requirements(requirements)
393
393
  import onnx # noqa
394
394
 
@@ -827,7 +827,7 @@ class Exporter:
827
827
  "onnx>=1.12.0",
828
828
  "onnx2tf>1.17.5,<=1.22.3",
829
829
  "sng4onnx>=1.0.1",
830
- "onnxslim==0.1.28",
830
+ "onnxslim>=0.1.31",
831
831
  "onnx_graphsurgeon>=0.3.26",
832
832
  "tflite_support<=0.4.3" if IS_JETSON else "tflite_support", # fix ImportError 'GLIBCXX_3.4.29'
833
833
  "flatbuffers>=23.5.26,<100", # update old 'flatbuffers' included inside tensorflow package
@@ -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.
@@ -136,13 +134,12 @@ class Model(nn.Module):
136
134
  if self.is_hub_model(model):
137
135
  # Fetch model from HUB
138
136
  checks.check_requirements("hub-sdk>=0.0.6")
139
- self.session = self._get_hub_session(model)
137
+ self.session = HUBTrainingSession.create_session(model)
140
138
  model = self.session.model_file
141
139
 
142
140
  # Check if Triton Server model
143
141
  elif self.is_triton_model(model):
144
142
  self.model_name = self.model = model
145
- self.task = task
146
143
  return
147
144
 
148
145
  # Load or create new YOLO model
@@ -176,14 +173,6 @@ class Model(nn.Module):
176
173
  """
177
174
  return self.predict(source, stream, **kwargs)
178
175
 
179
- @staticmethod
180
- def _get_hub_session(model: str):
181
- """Creates a session for Hub Training."""
182
- from ultralytics.hub.session import HUBTrainingSession
183
-
184
- session = HUBTrainingSession(model)
185
- return session if session.client.authenticated else None
186
-
187
176
  @staticmethod
188
177
  def is_triton_model(model: str) -> bool:
189
178
  """Is model a Triton Server URL string, i.e. <scheme>://<netloc>/<endpoint>/<task_name>"""
@@ -657,19 +646,6 @@ class Model(nn.Module):
657
646
  self.trainer.model = self.trainer.get_model(weights=self.model if self.ckpt else None, cfg=self.model.yaml)
658
647
  self.model = self.trainer.model
659
648
 
660
- if SETTINGS["hub"] is True and not self.session:
661
- # Create a model in HUB
662
- try:
663
- self.session = self._get_hub_session(self.model_name)
664
- if self.session:
665
- self.session.create_model(args)
666
- # Check model was created
667
- if not getattr(self.session.model, "id", None):
668
- self.session = None
669
- except (PermissionError, ModuleNotFoundError):
670
- # Ignore PermissionError and ModuleNotFoundError which indicates hub-sdk not installed
671
- pass
672
-
673
649
  self.trainer.hub_session = self.session # attach optional HUB session
674
650
  self.trainer.train()
675
651
  # Update model and cfg after training
@@ -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
  """
@@ -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,26 @@ 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
+ assert session.client.authenticated, "HUB not authenticated"
75
+ if args:
76
+ session.create_model(args)
77
+ assert session.model.id, "HUB model not loaded correctly"
78
+ return session
79
+ # PermissionError and ModuleNotFoundError indicate hub-sdk not installed
80
+ except (PermissionError, ModuleNotFoundError, AssertionError):
81
+ return None
72
82
 
73
83
  def load_model(self, model_id):
74
84
  """Loads an existing model from Ultralytics HUB using the provided model identifier."""
@@ -92,14 +102,12 @@ class HUBTrainingSession:
92
102
  "epochs": model_args.get("epochs", 300),
93
103
  "imageSize": model_args.get("imgsz", 640),
94
104
  "patience": model_args.get("patience", 100),
95
- "device": model_args.get("device", ""),
96
- "cache": model_args.get("cache", "ram"),
105
+ "device": str(model_args.get("device", "")), # convert None to string
106
+ "cache": str(model_args.get("cache", "ram")), # convert True, False, None to string
97
107
  },
98
108
  "dataset": {"name": model_args.get("data")},
99
109
  "lineage": {
100
- "architecture": {
101
- "name": self.filename.replace(".pt", "").replace(".yaml", ""),
102
- },
110
+ "architecture": {"name": self.filename.replace(".pt", "").replace(".yaml", "")},
103
111
  "parent": {},
104
112
  },
105
113
  "meta": {"name": self.filename},
@@ -113,7 +121,7 @@ class HUBTrainingSession:
113
121
  # Model could not be created
114
122
  # TODO: improve error handling
115
123
  if not self.model.id:
116
- return
124
+ return None
117
125
 
118
126
  self.model_url = f"{HUB_WEB_ROOT}/models/{self.model.id}"
119
127
 
@@ -122,7 +130,8 @@ class HUBTrainingSession:
122
130
 
123
131
  LOGGER.info(f"{PREFIX}View model at {self.model_url} 🚀")
124
132
 
125
- def _parse_identifier(self, identifier):
133
+ @staticmethod
134
+ def _parse_identifier(identifier):
126
135
  """
127
136
  Parses the given identifier to determine the type of identifier and extract relevant components.
128
137
 
@@ -213,13 +222,14 @@ class HUBTrainingSession:
213
222
  thread=True,
214
223
  verbose=True,
215
224
  progress_total=None,
216
- stream_reponse=None,
225
+ stream_response=None,
217
226
  *args,
218
227
  **kwargs,
219
228
  ):
220
229
  def retry_request():
221
230
  """Attempts to call `request_func` with retries, timeout, and optional threading."""
222
231
  t0 = time.time() # Record the start time for the timeout
232
+ response = None
223
233
  for i in range(retry + 1):
224
234
  if (time.time() - t0) > timeout:
225
235
  LOGGER.warning(f"{PREFIX}Timeout for request reached. {HELP_MSG}")
@@ -233,7 +243,7 @@ class HUBTrainingSession:
233
243
 
234
244
  if progress_total:
235
245
  self._show_upload_progress(progress_total, response)
236
- elif stream_reponse:
246
+ elif stream_response:
237
247
  self._iterate_content(response)
238
248
 
239
249
  if HTTPStatus.OK <= response.status_code < HTTPStatus.MULTIPLE_CHOICES:
@@ -268,7 +278,8 @@ class HUBTrainingSession:
268
278
  # If running in the main thread, call retry_request directly
269
279
  return retry_request()
270
280
 
271
- def _should_retry(self, status_code):
281
+ @staticmethod
282
+ def _should_retry(status_code):
272
283
  """Determines if a request should be retried based on the HTTP status code."""
273
284
  retry_codes = {
274
285
  HTTPStatus.REQUEST_TIMEOUT,
@@ -338,12 +349,13 @@ class HUBTrainingSession:
338
349
  timeout=3600,
339
350
  thread=not final,
340
351
  progress_total=progress_total,
341
- stream_reponse=True,
352
+ stream_response=True,
342
353
  )
343
354
  else:
344
355
  LOGGER.warning(f"{PREFIX}WARNING ⚠️ Model upload issue. Missing model {weights}.")
345
356
 
346
- def _show_upload_progress(self, content_length: int, response: requests.Response) -> None:
357
+ @staticmethod
358
+ def _show_upload_progress(content_length: int, response: requests.Response) -> None:
347
359
  """
348
360
  Display a progress bar to track the upload progress of a file download.
349
361
 
@@ -358,7 +370,8 @@ class HUBTrainingSession:
358
370
  for data in response.iter_content(chunk_size=1024):
359
371
  pbar.update(len(data))
360
372
 
361
- def _iterate_content(self, response: requests.Response) -> None:
373
+ @staticmethod
374
+ def _iterate_content(response: requests.Response) -> None:
362
375
  """
363
376
  Process the streamed HTTP response data.
364
377
 
@@ -384,8 +384,8 @@ class TinyViTBlock(nn.Module):
384
384
  convolution.
385
385
  """
386
386
  h, w = self.input_resolution
387
- b, l, c = x.shape
388
- assert l == h * w, "input feature has wrong size"
387
+ b, hw, c = x.shape # batch, height*width, channels
388
+ assert hw == h * w, "input feature has wrong size"
389
389
  res_x = x
390
390
  if h == self.window_size and w == self.window_size:
391
391
  x = self.attn(x)
@@ -394,13 +394,13 @@ class TinyViTBlock(nn.Module):
394
394
  pad_b = (self.window_size - h % self.window_size) % self.window_size
395
395
  pad_r = (self.window_size - w % self.window_size) % self.window_size
396
396
  padding = pad_b > 0 or pad_r > 0
397
-
398
397
  if padding:
399
398
  x = F.pad(x, (0, 0, 0, pad_r, 0, pad_b))
400
399
 
401
400
  pH, pW = h + pad_b, w + pad_r
402
401
  nH = pH // self.window_size
403
402
  nW = pW // self.window_size
403
+
404
404
  # Window partition
405
405
  x = (
406
406
  x.view(b, nH, self.window_size, nW, self.window_size, c)
@@ -408,19 +408,18 @@ class TinyViTBlock(nn.Module):
408
408
  .reshape(b * nH * nW, self.window_size * self.window_size, c)
409
409
  )
410
410
  x = self.attn(x)
411
+
411
412
  # Window reverse
412
413
  x = x.view(b, nH, nW, self.window_size, self.window_size, c).transpose(2, 3).reshape(b, pH, pW, c)
413
-
414
414
  if padding:
415
415
  x = x[:, :h, :w].contiguous()
416
416
 
417
- x = x.view(b, l, c)
417
+ x = x.view(b, hw, c)
418
418
 
419
419
  x = res_x + self.drop_path(x)
420
-
421
420
  x = x.transpose(1, 2).reshape(b, c, h, w)
422
421
  x = self.local_conv(x)
423
- x = x.view(b, c, l).transpose(1, 2)
422
+ x = x.view(b, c, hw).transpose(1, 2)
424
423
 
425
424
  return x + self.drop_path(self.mlp(x))
426
425
 
@@ -133,6 +133,7 @@ __all__ = (
133
133
  "ResNetLayer",
134
134
  "OBB",
135
135
  "WorldDetect",
136
+ "v10Detect",
136
137
  "ImagePoolingAttn",
137
138
  "ContrastiveHead",
138
139
  "BNContrastiveHead",
@@ -40,7 +40,6 @@ __all__ = (
40
40
  "SPPELAN",
41
41
  "CBFuse",
42
42
  "CBLinear",
43
- "Silence",
44
43
  "RepVGGDW",
45
44
  "CIB",
46
45
  "C2fCIB",
@@ -789,7 +788,7 @@ class CIB(nn.Module):
789
788
  self.cv1 = nn.Sequential(
790
789
  Conv(c1, c1, 3, g=c1),
791
790
  Conv(c1, 2 * c_, 1),
792
- Conv(2 * c_, 2 * c_, 3, g=2 * c_) if not lk else RepVGGDW(2 * c_),
791
+ RepVGGDW(2 * c_) if lk else Conv(2 * c_, 2 * c_, 3, g=2 * c_),
793
792
  Conv(2 * c_, c2, 1),
794
793
  Conv(c2, c2, 3, g=c2),
795
794
  )
@@ -110,8 +110,7 @@ class Detect(nn.Module):
110
110
  else:
111
111
  dbox = self.decode_bboxes(self.dfl(box), self.anchors.unsqueeze(0)) * self.strides
112
112
 
113
- y = torch.cat((dbox, cls.sigmoid()), 1)
114
- return y
113
+ return torch.cat((dbox, cls.sigmoid()), 1)
115
114
 
116
115
  def bias_init(self):
117
116
  """Initialize Detect() biases, WARNING: requires stride availability."""
@@ -693,7 +693,7 @@ class Ensemble(nn.ModuleList):
693
693
 
694
694
 
695
695
  @contextlib.contextmanager
696
- def temporary_modules(modules={}, attributes={}):
696
+ def temporary_modules(modules=None, attributes=None):
697
697
  """
698
698
  Context manager for temporarily adding or modifying modules in Python's module cache (`sys.modules`).
699
699
 
@@ -718,6 +718,10 @@ def temporary_modules(modules={}, attributes={}):
718
718
  applications or libraries. Use this function with caution.
719
719
  """
720
720
 
721
+ if modules is None:
722
+ modules = {}
723
+ if attributes is None:
724
+ attributes = {}
721
725
  import sys
722
726
  from importlib import import_module
723
727