ultralytics-opencv-headless 8.3.242__tar.gz → 8.3.245__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.
Files changed (304) hide show
  1. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/PKG-INFO +2 -2
  2. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/pyproject.toml +1 -1
  3. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_engine.py +1 -1
  4. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/__init__.py +1 -1
  5. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +1 -1
  6. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +1 -1
  7. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +1 -1
  8. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +1 -1
  9. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v10/yolov10b.yaml +2 -2
  10. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v10/yolov10l.yaml +2 -2
  11. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v10/yolov10m.yaml +2 -2
  12. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v10/yolov10n.yaml +2 -2
  13. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v10/yolov10s.yaml +2 -2
  14. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v10/yolov10x.yaml +2 -2
  15. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +1 -1
  16. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v6/yolov6.yaml +1 -1
  17. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +1 -1
  18. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9s.yaml +1 -1
  19. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/exporter.py +6 -4
  20. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/model.py +1 -1
  21. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/head.py +2 -2
  22. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/utils.py +1 -1
  23. ultralytics_opencv_headless-8.3.245/ultralytics/utils/callbacks/platform.py +302 -0
  24. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/checks.py +5 -0
  25. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/logger.py +131 -75
  26. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/loss.py +2 -2
  27. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics_opencv_headless.egg-info/PKG-INFO +2 -2
  28. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics_opencv_headless.egg-info/requires.txt +1 -1
  29. ultralytics_opencv_headless-8.3.242/ultralytics/utils/callbacks/platform.py +0 -73
  30. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/LICENSE +0 -0
  31. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/README.md +0 -0
  32. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/setup.cfg +0 -0
  33. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/__init__.py +0 -0
  34. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/conftest.py +0 -0
  35. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_cli.py +0 -0
  36. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_cuda.py +0 -0
  37. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_exports.py +0 -0
  38. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_integrations.py +0 -0
  39. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_python.py +0 -0
  40. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/tests/test_solutions.py +0 -0
  41. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/assets/bus.jpg +0 -0
  42. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/assets/zidane.jpg +0 -0
  43. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/__init__.py +0 -0
  44. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  45. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  46. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  47. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  48. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  49. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  50. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  51. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  52. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  53. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  54. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  55. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  56. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  57. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  58. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco.yaml +0 -0
  59. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  60. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  61. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  62. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  63. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  64. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  65. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  66. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  67. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  68. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  69. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  70. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  71. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  72. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/kitti.yaml +0 -0
  73. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  74. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  75. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  76. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  77. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/signature.yaml +0 -0
  78. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  79. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/datasets/xView.yaml +0 -0
  80. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/default.yaml +0 -0
  81. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  82. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  83. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  84. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  85. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  86. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  87. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  88. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  89. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  90. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  91. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  92. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  93. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  94. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  95. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  96. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  97. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  98. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  99. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  100. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  101. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  102. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  103. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  104. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  105. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  106. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  107. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  108. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  109. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  110. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  111. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  112. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  113. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  114. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  115. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  116. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  117. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  118. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  119. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  120. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  121. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  122. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  123. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  124. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/__init__.py +0 -0
  125. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/annotator.py +0 -0
  126. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/augment.py +0 -0
  127. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/base.py +0 -0
  128. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/build.py +0 -0
  129. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/converter.py +0 -0
  130. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/dataset.py +0 -0
  131. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/loaders.py +0 -0
  132. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/scripts/download_weights.sh +0 -0
  133. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/scripts/get_coco.sh +0 -0
  134. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/scripts/get_coco128.sh +0 -0
  135. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  136. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/split.py +0 -0
  137. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/split_dota.py +0 -0
  138. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/data/utils.py +0 -0
  139. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/__init__.py +0 -0
  140. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/predictor.py +0 -0
  141. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/results.py +0 -0
  142. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/trainer.py +0 -0
  143. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/tuner.py +0 -0
  144. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/engine/validator.py +0 -0
  145. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/hub/__init__.py +0 -0
  146. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/hub/auth.py +0 -0
  147. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/hub/google/__init__.py +0 -0
  148. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/hub/session.py +0 -0
  149. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/hub/utils.py +0 -0
  150. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/__init__.py +0 -0
  151. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/fastsam/__init__.py +0 -0
  152. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/fastsam/model.py +0 -0
  153. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/fastsam/predict.py +0 -0
  154. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/fastsam/utils.py +0 -0
  155. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/fastsam/val.py +0 -0
  156. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/nas/__init__.py +0 -0
  157. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/nas/model.py +0 -0
  158. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/nas/predict.py +0 -0
  159. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/nas/val.py +0 -0
  160. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/rtdetr/__init__.py +0 -0
  161. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/rtdetr/model.py +0 -0
  162. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/rtdetr/predict.py +0 -0
  163. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/rtdetr/train.py +0 -0
  164. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/rtdetr/val.py +0 -0
  165. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/__init__.py +0 -0
  166. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/amg.py +0 -0
  167. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/build.py +0 -0
  168. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/build_sam3.py +0 -0
  169. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/model.py +0 -0
  170. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/__init__.py +0 -0
  171. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/blocks.py +0 -0
  172. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/decoders.py +0 -0
  173. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/encoders.py +0 -0
  174. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  175. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/sam.py +0 -0
  176. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  177. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/transformer.py +0 -0
  178. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/modules/utils.py +0 -0
  179. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/predict.py +0 -0
  180. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/__init__.py +0 -0
  181. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/decoder.py +0 -0
  182. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/encoder.py +0 -0
  183. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/geometry_encoders.py +0 -0
  184. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/maskformer_segmentation.py +0 -0
  185. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/model_misc.py +0 -0
  186. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/necks.py +0 -0
  187. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/sam3_image.py +0 -0
  188. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/text_encoder_ve.py +0 -0
  189. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/vitdet.py +0 -0
  190. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/sam/sam3/vl_combiner.py +0 -0
  191. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/utils/__init__.py +0 -0
  192. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/utils/loss.py +0 -0
  193. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/utils/ops.py +0 -0
  194. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/__init__.py +0 -0
  195. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/classify/__init__.py +0 -0
  196. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/classify/predict.py +0 -0
  197. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/classify/train.py +0 -0
  198. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/classify/val.py +0 -0
  199. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/detect/__init__.py +0 -0
  200. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/detect/predict.py +0 -0
  201. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/detect/train.py +0 -0
  202. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/detect/val.py +0 -0
  203. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/model.py +0 -0
  204. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/obb/__init__.py +0 -0
  205. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/obb/predict.py +0 -0
  206. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/obb/train.py +0 -0
  207. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/obb/val.py +0 -0
  208. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/pose/__init__.py +0 -0
  209. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/pose/predict.py +0 -0
  210. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/pose/train.py +0 -0
  211. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/pose/val.py +0 -0
  212. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/segment/__init__.py +0 -0
  213. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/segment/predict.py +0 -0
  214. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/segment/train.py +0 -0
  215. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/segment/val.py +0 -0
  216. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/world/__init__.py +0 -0
  217. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/world/train.py +0 -0
  218. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/world/train_world.py +0 -0
  219. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  220. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  221. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/yoloe/train.py +0 -0
  222. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  223. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/models/yolo/yoloe/val.py +0 -0
  224. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/__init__.py +0 -0
  225. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/autobackend.py +0 -0
  226. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/__init__.py +0 -0
  227. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/activation.py +0 -0
  228. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/block.py +0 -0
  229. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/conv.py +0 -0
  230. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/modules/transformer.py +0 -0
  231. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/tasks.py +0 -0
  232. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/nn/text_model.py +0 -0
  233. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/py.typed +0 -0
  234. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/__init__.py +0 -0
  235. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/ai_gym.py +0 -0
  236. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/analytics.py +0 -0
  237. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/config.py +0 -0
  238. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/distance_calculation.py +0 -0
  239. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/heatmap.py +0 -0
  240. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/instance_segmentation.py +0 -0
  241. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/object_blurrer.py +0 -0
  242. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/object_counter.py +0 -0
  243. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/object_cropper.py +0 -0
  244. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/parking_management.py +0 -0
  245. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/queue_management.py +0 -0
  246. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/region_counter.py +0 -0
  247. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/security_alarm.py +0 -0
  248. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/similarity_search.py +0 -0
  249. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/solutions.py +0 -0
  250. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/speed_estimation.py +0 -0
  251. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/streamlit_inference.py +0 -0
  252. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/templates/similarity-search.html +0 -0
  253. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/trackzone.py +0 -0
  254. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/solutions/vision_eye.py +0 -0
  255. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/__init__.py +0 -0
  256. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/basetrack.py +0 -0
  257. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/bot_sort.py +0 -0
  258. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/byte_tracker.py +0 -0
  259. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/track.py +0 -0
  260. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/utils/__init__.py +0 -0
  261. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/utils/gmc.py +0 -0
  262. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  263. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/trackers/utils/matching.py +0 -0
  264. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/__init__.py +0 -0
  265. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/autobatch.py +0 -0
  266. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/autodevice.py +0 -0
  267. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/benchmarks.py +0 -0
  268. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/__init__.py +0 -0
  269. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/base.py +0 -0
  270. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/clearml.py +0 -0
  271. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/comet.py +0 -0
  272. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/dvc.py +0 -0
  273. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/hub.py +0 -0
  274. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/mlflow.py +0 -0
  275. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/neptune.py +0 -0
  276. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/raytune.py +0 -0
  277. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  278. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/callbacks/wb.py +0 -0
  279. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/cpu.py +0 -0
  280. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/dist.py +0 -0
  281. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/downloads.py +0 -0
  282. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/errors.py +0 -0
  283. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/events.py +0 -0
  284. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/export/__init__.py +0 -0
  285. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/export/engine.py +0 -0
  286. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/export/imx.py +0 -0
  287. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/export/tensorflow.py +0 -0
  288. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/files.py +0 -0
  289. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/git.py +0 -0
  290. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/instance.py +0 -0
  291. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/metrics.py +0 -0
  292. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/nms.py +0 -0
  293. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/ops.py +0 -0
  294. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/patches.py +0 -0
  295. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/plotting.py +0 -0
  296. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/tal.py +0 -0
  297. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/torch_utils.py +0 -0
  298. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/tqdm.py +0 -0
  299. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/triton.py +0 -0
  300. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics/utils/tuner.py +0 -0
  301. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics_opencv_headless.egg-info/SOURCES.txt +0 -0
  302. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics_opencv_headless.egg-info/dependency_links.txt +0 -0
  303. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics_opencv_headless.egg-info/entry_points.txt +0 -0
  304. {ultralytics_opencv_headless-8.3.242 → ultralytics_opencv_headless-8.3.245}/ultralytics_opencv_headless.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics-opencv-headless
3
- Version: 8.3.242
3
+ Version: 8.3.245
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -50,7 +50,7 @@ Requires-Dist: ipython; extra == "dev"
50
50
  Requires-Dist: pytest; extra == "dev"
51
51
  Requires-Dist: pytest-cov; extra == "dev"
52
52
  Requires-Dist: coverage[toml]; extra == "dev"
53
- Requires-Dist: zensical>=0.0.9; python_version >= "3.10" and extra == "dev"
53
+ Requires-Dist: zensical>=0.0.15; python_version >= "3.10" and extra == "dev"
54
54
  Requires-Dist: mkdocs-ultralytics-plugin>=0.2.4; extra == "dev"
55
55
  Requires-Dist: minijinja>=2.0.0; extra == "dev"
56
56
  Provides-Extra: export
@@ -83,7 +83,7 @@ dev = [
83
83
  "pytest",
84
84
  "pytest-cov",
85
85
  "coverage[toml]",
86
- "zensical>=0.0.9; python_version >= '3.10'",
86
+ "zensical>=0.0.15; python_version >= '3.10'",
87
87
  "mkdocs-ultralytics-plugin>=0.2.4", # for meta descriptions and images, dates and authors
88
88
  "minijinja>=2.0.0", # render docs macros without mkdocs-macros-plugin
89
89
  ]
@@ -13,7 +13,7 @@ from ultralytics.models.yolo import classify, detect, segment
13
13
  from ultralytics.utils import ASSETS, DEFAULT_CFG, WEIGHTS_DIR
14
14
 
15
15
 
16
- def test_func(*args):
16
+ def test_func(*args, **kwargs):
17
17
  """Test function callback for evaluating YOLO model performance metrics."""
18
18
  print("callback test passed")
19
19
 
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.242"
3
+ __version__ = "8.3.245"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=rtdetr-l.yaml' will call rtdetr-l.yaml with scale 'l'
10
10
  # [depth, width, max_channels]
11
11
  l: [1.00, 1.00, 1024]
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=rtdetr-resnet101.yaml' will call rtdetr-resnet101.yaml with scale 'l'
10
10
  # [depth, width, max_channels]
11
11
  l: [1.00, 1.00, 1024]
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=rtdetr-resnet50.yaml' will call rtdetr-resnet50.yaml with scale 'l'
10
10
  # [depth, width, max_channels]
11
11
  l: [1.00, 1.00, 1024]
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov8n-cls.yaml' will call yolov8-cls.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=rtdetr-x.yaml' will call rtdetr-x.yaml with scale 'x'
10
10
  # [depth, width, max_channels]
11
11
  x: [1.00, 1.00, 2048]
12
12
 
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' will call yolov10.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' uses the 'n' scale
10
10
  # [depth, width, max_channels]
11
11
  b: [0.67, 1.00, 512]
12
12
 
@@ -24,7 +24,7 @@ backbone:
24
24
  - [-1, 1, SPPF, [1024, 5]] # 9
25
25
  - [-1, 1, PSA, [1024]] # 10
26
26
 
27
- # YOLOv10.0n head
27
+ # YOLOv10 head
28
28
  head:
29
29
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
30
30
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' will call yolov10.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' uses the 'n' scale
10
10
  # [depth, width, max_channels]
11
11
  l: [1.00, 1.00, 512]
12
12
 
@@ -24,7 +24,7 @@ backbone:
24
24
  - [-1, 1, SPPF, [1024, 5]] # 9
25
25
  - [-1, 1, PSA, [1024]] # 10
26
26
 
27
- # YOLOv10.0n head
27
+ # YOLOv10 head
28
28
  head:
29
29
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
30
30
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' will call yolov10.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' uses the 'n' scale
10
10
  # [depth, width, max_channels]
11
11
  m: [0.67, 0.75, 768]
12
12
 
@@ -24,7 +24,7 @@ backbone:
24
24
  - [-1, 1, SPPF, [1024, 5]] # 9
25
25
  - [-1, 1, PSA, [1024]] # 10
26
26
 
27
- # YOLOv10.0n head
27
+ # YOLOv10 head
28
28
  head:
29
29
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
30
30
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' will call yolov10.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' uses the 'n' scale
10
10
  # [depth, width, max_channels]
11
11
  n: [0.33, 0.25, 1024]
12
12
 
@@ -24,7 +24,7 @@ backbone:
24
24
  - [-1, 1, SPPF, [1024, 5]] # 9
25
25
  - [-1, 1, PSA, [1024]] # 10
26
26
 
27
- # YOLOv10.0n head
27
+ # YOLOv10 head
28
28
  head:
29
29
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
30
30
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' will call yolov10.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' uses the 'n' scale
10
10
  # [depth, width, max_channels]
11
11
  s: [0.33, 0.50, 1024]
12
12
 
@@ -24,7 +24,7 @@ backbone:
24
24
  - [-1, 1, SPPF, [1024, 5]] # 9
25
25
  - [-1, 1, PSA, [1024]] # 10
26
26
 
27
- # YOLOv10.0n head
27
+ # YOLOv10 head
28
28
  head:
29
29
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
30
30
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
@@ -6,7 +6,7 @@
6
6
 
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
- scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' will call yolov10.yaml with scale 'n'
9
+ scales: # model compound scaling constants, i.e. 'model=yolov10n.yaml' uses the 'n' scale
10
10
  # [depth, width, max_channels]
11
11
  x: [1.00, 1.25, 512]
12
12
 
@@ -24,7 +24,7 @@ backbone:
24
24
  - [-1, 1, SPPF, [1024, 5]] # 9
25
25
  - [-1, 1, PSA, [1024]] # 10
26
26
 
27
- # YOLOv10.0n head
27
+ # YOLOv10 head
28
28
  head:
29
29
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
30
30
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- # Ultralytics YOLOv3-tiiny object detection model with P4/16 - P5/32 outputs
3
+ # Ultralytics YOLOv3-tiny object detection model with P4/16 - P5/32 outputs
4
4
  # Model docs: https://docs.ultralytics.com/models/yolov3
5
5
  # Task docs: https://docs.ultralytics.com/tasks/detect
6
6
 
@@ -7,7 +7,7 @@
7
7
  # Parameters
8
8
  nc: 80 # number of classes
9
9
  activation: torch.nn.ReLU() # (optional) model default activation function
10
- scales: # model compound scaling constants, i.e. 'model=yolov6n.yaml' will call yolov8.yaml with scale 'n'
10
+ scales: # model compound scaling constants, i.e. 'model=yolov6n.yaml' will call yolov6.yaml with scale 'n'
11
11
  # [depth, width, max_channels]
12
12
  n: [0.33, 0.25, 1024]
13
13
  s: [0.33, 0.50, 1024]
@@ -56,4 +56,4 @@ head:
56
56
  - [[-1, 11], 1, Concat, [1]] # cat head P6
57
57
  - [-1, 3, C2, [1024, False]] # 29 (P6/64-xlarge)
58
58
 
59
- - [[20, 23, 26, 29], 1, Segment, [nc, 32, 256]] # Pose(P3, P4, P5, P6)
59
+ - [[20, 23, 26, 29], 1, Segment, [nc, 32, 256]] # Segment(P3, P4, P5, P6)
@@ -38,4 +38,4 @@ head:
38
38
  - [[-1, 9], 1, Concat, [1]] # cat head P5
39
39
  - [-1, 1, RepNCSPELAN4, [256, 256, 128, 3]] # 21 (P5/32-large)
40
40
 
41
- - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4 P5)
41
+ - [[15, 18, 21], 1, Detect, [nc]] # Detect(P3, P4, P5)
@@ -87,6 +87,7 @@ from ultralytics.utils import (
87
87
  IS_COLAB,
88
88
  IS_DEBIAN_BOOKWORM,
89
89
  IS_DEBIAN_TRIXIE,
90
+ IS_DOCKER,
90
91
  IS_JETSON,
91
92
  IS_RASPBERRYPI,
92
93
  IS_UBUNTU,
@@ -1187,10 +1188,11 @@ class Exporter:
1187
1188
  """
1188
1189
  LOGGER.info(f"\n{prefix} starting export with ExecuTorch...")
1189
1190
  assert TORCH_2_9, f"ExecuTorch export requires torch>=2.9.0 but torch=={TORCH_VERSION} is installed"
1190
- # TorchAO release compatibility table bug https://github.com/pytorch/ao/issues/2919
1191
- # Setuptools bug: https://github.com/pypa/setuptools/issues/4483
1192
- check_requirements("setuptools<71.0.0") # Setuptools bug: https://github.com/pypa/setuptools/issues/4483
1193
- check_requirements(("executorch==1.0.1", "flatbuffers"))
1191
+
1192
+ # BUG executorch build on arm64 Docker requires packaging>=22.0 https://github.com/pypa/setuptools/issues/4483
1193
+ if LINUX and ARM64 and IS_DOCKER:
1194
+ check_requirements("packaging>=22.0")
1195
+ check_requirements("executorch==1.0.1", "flatbuffers")
1194
1196
  # Pin numpy to avoid coremltools errors with numpy>=2.4.0, must be separate
1195
1197
  check_requirements("numpy<=2.3.5")
1196
1198
 
@@ -523,7 +523,7 @@ class Model(torch.nn.Module):
523
523
  args = {**self.overrides, **custom, **kwargs} # highest priority args on the right
524
524
  prompts = args.pop("prompts", None) # for SAM-type models
525
525
 
526
- if not self.predictor:
526
+ if not self.predictor or self.predictor.args.device != args.get("device", self.predictor.args.device):
527
527
  self.predictor = (predictor or self._smart_load("predictor"))(overrides=args, _callbacks=self.callbacks)
528
528
  self.predictor.setup_model(model=self.model, verbose=is_cli)
529
529
  else: # only update args if predictor is already setup
@@ -1078,9 +1078,9 @@ class RTDETRDecoder(nn.Module):
1078
1078
  enc_outputs_scores = self.enc_score_head(features) # (bs, h*w, nc)
1079
1079
 
1080
1080
  # Query selection
1081
- # (bs, num_queries)
1081
+ # (bs*num_queries,)
1082
1082
  topk_ind = torch.topk(enc_outputs_scores.max(-1).values, self.num_queries, dim=1).indices.view(-1)
1083
- # (bs, num_queries)
1083
+ # (bs*num_queries,)
1084
1084
  batch_ind = torch.arange(end=bs, dtype=topk_ind.dtype).unsqueeze(-1).repeat(1, self.num_queries).view(-1)
1085
1085
 
1086
1086
  # (bs, num_queries, 256)
@@ -147,7 +147,7 @@ def multi_scale_deformable_attn_pytorch(
147
147
  sampling_value_list.append(sampling_value_l_)
148
148
  # (bs, num_queries, num_heads, num_levels, num_points) ->
149
149
  # (bs, num_heads, num_queries, num_levels, num_points) ->
150
- # (bs, num_heads, 1, num_queries, num_levels*num_points)
150
+ # (bs*num_heads, 1, num_queries, num_levels*num_points)
151
151
  attention_weights = attention_weights.transpose(1, 2).reshape(
152
152
  bs * num_heads, 1, num_queries, num_levels * num_points
153
153
  )
@@ -0,0 +1,302 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ import os
4
+ import platform
5
+ import socket
6
+ import sys
7
+ from concurrent.futures import ThreadPoolExecutor
8
+ from pathlib import Path
9
+ from time import time
10
+
11
+ from ultralytics.utils import ENVIRONMENT, GIT, LOGGER, PYTHON_VERSION, RANK, SETTINGS, TESTS_RUNNING
12
+
13
+ _last_upload = 0 # Rate limit model uploads
14
+ _console_logger = None # Global console logger instance
15
+ _system_logger = None # Cached system logger instance
16
+
17
+ try:
18
+ assert not TESTS_RUNNING # do not log pytest
19
+ assert SETTINGS.get("platform", False) is True or os.getenv("ULTRALYTICS_API_KEY") or SETTINGS.get("api_key")
20
+ _api_key = os.getenv("ULTRALYTICS_API_KEY") or SETTINGS.get("api_key")
21
+ assert _api_key # verify API key is present
22
+
23
+ import requests
24
+
25
+ from ultralytics.utils.logger import ConsoleLogger, SystemLogger
26
+ from ultralytics.utils.torch_utils import model_info_for_loggers
27
+
28
+ _executor = ThreadPoolExecutor(max_workers=10) # Bounded thread pool for async operations
29
+
30
+ except (AssertionError, ImportError):
31
+ _api_key = None
32
+
33
+
34
+ def _send(event, data, project, name):
35
+ """Send event to Platform endpoint."""
36
+ try:
37
+ requests.post(
38
+ "https://alpha.ultralytics.com/api/webhooks/training/metrics",
39
+ json={"event": event, "project": project, "name": name, "data": data},
40
+ headers={"Authorization": f"Bearer {_api_key}"},
41
+ timeout=10,
42
+ ).raise_for_status()
43
+ except Exception as e:
44
+ LOGGER.debug(f"Platform: Failed to send {event}: {e}")
45
+
46
+
47
+ def _send_async(event, data, project, name):
48
+ """Send event asynchronously using bounded thread pool."""
49
+ _executor.submit(_send, event, data, project, name)
50
+
51
+
52
+ def _upload_model(model_path, project, name):
53
+ """Upload model checkpoint to Platform via signed URL."""
54
+ try:
55
+ model_path = Path(model_path)
56
+ if not model_path.exists():
57
+ return None
58
+
59
+ # Get signed upload URL
60
+ response = requests.post(
61
+ "https://alpha.ultralytics.com/api/webhooks/models/upload",
62
+ json={"project": project, "name": name, "filename": model_path.name},
63
+ headers={"Authorization": f"Bearer {_api_key}"},
64
+ timeout=10,
65
+ )
66
+ response.raise_for_status()
67
+ data = response.json()
68
+
69
+ # Upload to GCS
70
+ with open(model_path, "rb") as f:
71
+ requests.put(
72
+ data["uploadUrl"],
73
+ data=f,
74
+ headers={"Content-Type": "application/octet-stream"},
75
+ timeout=600, # 10 min timeout for large models
76
+ ).raise_for_status()
77
+
78
+ LOGGER.info(f"Platform: Model uploaded to '{project}'")
79
+ return data.get("gcsPath")
80
+
81
+ except Exception as e:
82
+ LOGGER.debug(f"Platform: Failed to upload model: {e}")
83
+ return None
84
+
85
+
86
+ def _upload_model_async(model_path, project, name):
87
+ """Upload model asynchronously using bounded thread pool."""
88
+ _executor.submit(_upload_model, model_path, project, name)
89
+
90
+
91
+ def _get_environment_info():
92
+ """Collect comprehensive environment info using existing ultralytics utilities."""
93
+ import shutil
94
+
95
+ import psutil
96
+ import torch
97
+
98
+ from ultralytics import __version__
99
+ from ultralytics.utils.torch_utils import get_cpu_info, get_gpu_info
100
+
101
+ # Get RAM and disk totals
102
+ memory = psutil.virtual_memory()
103
+ disk_usage = shutil.disk_usage("/")
104
+
105
+ env = {
106
+ "ultralyticsVersion": __version__,
107
+ "hostname": socket.gethostname(),
108
+ "os": platform.platform(),
109
+ "environment": ENVIRONMENT,
110
+ "pythonVersion": PYTHON_VERSION,
111
+ "pythonExecutable": sys.executable,
112
+ "cpuCount": os.cpu_count() or 0,
113
+ "cpu": get_cpu_info(),
114
+ "command": " ".join(sys.argv),
115
+ "totalRamGb": round(memory.total / (1 << 30), 1), # Total RAM in GB
116
+ "totalDiskGb": round(disk_usage.total / (1 << 30), 1), # Total disk in GB
117
+ }
118
+
119
+ # Git info using cached GIT singleton (no subprocess calls)
120
+ try:
121
+ if GIT.is_repo:
122
+ if GIT.origin:
123
+ env["gitRepository"] = GIT.origin
124
+ if GIT.branch:
125
+ env["gitBranch"] = GIT.branch
126
+ if GIT.commit:
127
+ env["gitCommit"] = GIT.commit[:12] # Short hash
128
+ except Exception:
129
+ pass
130
+
131
+ # GPU info
132
+ try:
133
+ if torch.cuda.is_available():
134
+ env["gpuCount"] = torch.cuda.device_count()
135
+ env["gpuType"] = get_gpu_info(0) if torch.cuda.device_count() > 0 else None
136
+ except Exception:
137
+ pass
138
+
139
+ return env
140
+
141
+
142
+ def on_pretrain_routine_start(trainer):
143
+ """Initialize Platform logging at training start."""
144
+ global _console_logger, _last_upload
145
+
146
+ if RANK not in {-1, 0} or not trainer.args.project:
147
+ return
148
+
149
+ # Initialize upload timer to now so first checkpoint waits 15 min from training start
150
+ _last_upload = time()
151
+
152
+ project, name = str(trainer.args.project), str(trainer.args.name or "train")
153
+ LOGGER.info(f"Platform: Streaming to project '{project}' as '{name}'")
154
+
155
+ # Create callback to send console output to Platform
156
+ def send_console_output(content, line_count, chunk_id):
157
+ """Send batched console output to Platform webhook."""
158
+ _send_async("console_output", {"chunkId": chunk_id, "content": content, "lineCount": line_count}, project, name)
159
+
160
+ # Start console capture with batching (5 lines or 5 seconds)
161
+ _console_logger = ConsoleLogger(batch_size=5, flush_interval=5.0, on_flush=send_console_output)
162
+ _console_logger.start_capture()
163
+
164
+ # Gather model info for richer metadata
165
+ model_info = {}
166
+ try:
167
+ info = model_info_for_loggers(trainer)
168
+ model_info = {
169
+ "parameters": info.get("model/parameters", 0),
170
+ "gflops": info.get("model/GFLOPs", 0),
171
+ "classes": getattr(trainer.model, "yaml", {}).get("nc", 0), # number of classes
172
+ }
173
+ except Exception:
174
+ pass
175
+
176
+ # Collect environment info (W&B-style metadata)
177
+ environment = _get_environment_info()
178
+
179
+ _send_async(
180
+ "training_started",
181
+ {
182
+ "trainArgs": {k: str(v) for k, v in vars(trainer.args).items()},
183
+ "epochs": trainer.epochs,
184
+ "device": str(trainer.device),
185
+ "modelInfo": model_info,
186
+ "environment": environment,
187
+ },
188
+ project,
189
+ name,
190
+ )
191
+
192
+
193
+ def on_fit_epoch_end(trainer):
194
+ """Log training and system metrics at epoch end."""
195
+ global _system_logger
196
+
197
+ if RANK not in {-1, 0} or not trainer.args.project:
198
+ return
199
+
200
+ project, name = str(trainer.args.project), str(trainer.args.name or "train")
201
+ metrics = {**trainer.label_loss_items(trainer.tloss, prefix="train"), **trainer.metrics}
202
+
203
+ if trainer.optimizer and trainer.optimizer.param_groups:
204
+ metrics["lr"] = trainer.optimizer.param_groups[0]["lr"]
205
+ if trainer.epoch == 0:
206
+ try:
207
+ metrics.update(model_info_for_loggers(trainer))
208
+ except Exception:
209
+ pass
210
+
211
+ # Get system metrics (cache SystemLogger for efficiency)
212
+ system = {}
213
+ try:
214
+ if _system_logger is None:
215
+ _system_logger = SystemLogger()
216
+ system = _system_logger.get_metrics(rates=True)
217
+ except Exception:
218
+ pass
219
+
220
+ _send_async(
221
+ "epoch_end",
222
+ {
223
+ "epoch": trainer.epoch,
224
+ "metrics": metrics,
225
+ "system": system,
226
+ "fitness": trainer.fitness,
227
+ "best_fitness": trainer.best_fitness,
228
+ },
229
+ project,
230
+ name,
231
+ )
232
+
233
+
234
+ def on_model_save(trainer):
235
+ """Upload model checkpoint (rate limited to every 15 min)."""
236
+ global _last_upload
237
+
238
+ if RANK not in {-1, 0} or not trainer.args.project:
239
+ return
240
+
241
+ # Rate limit to every 15 minutes (900 seconds)
242
+ if time() - _last_upload < 900:
243
+ return
244
+
245
+ model_path = trainer.best if trainer.best and Path(trainer.best).exists() else trainer.last
246
+ if not model_path:
247
+ return
248
+
249
+ project, name = str(trainer.args.project), str(trainer.args.name or "train")
250
+ _upload_model_async(model_path, project, name)
251
+ _last_upload = time()
252
+
253
+
254
+ def on_train_end(trainer):
255
+ """Log final results and upload best model."""
256
+ global _console_logger
257
+
258
+ if RANK not in {-1, 0} or not trainer.args.project:
259
+ return
260
+
261
+ project, name = str(trainer.args.project), str(trainer.args.name or "train")
262
+
263
+ # Stop console capture and flush remaining output
264
+ if _console_logger:
265
+ _console_logger.stop_capture()
266
+ _console_logger = None
267
+
268
+ # Upload best model (blocking to ensure it completes)
269
+ model_path = None
270
+ model_size = None
271
+ if trainer.best and Path(trainer.best).exists():
272
+ model_size = Path(trainer.best).stat().st_size
273
+ model_path = _upload_model(trainer.best, project, name)
274
+
275
+ # Send training complete
276
+ _send(
277
+ "training_complete",
278
+ {
279
+ "results": {
280
+ "metrics": {**trainer.metrics, "fitness": trainer.fitness},
281
+ "bestEpoch": getattr(trainer, "best_epoch", trainer.epoch),
282
+ "bestFitness": trainer.best_fitness,
283
+ "modelPath": model_path or str(trainer.best) if trainer.best else None,
284
+ "modelSize": model_size,
285
+ }
286
+ },
287
+ project,
288
+ name,
289
+ )
290
+ LOGGER.info(f"Platform: Training complete, results uploaded to '{project}'")
291
+
292
+
293
+ callbacks = (
294
+ {
295
+ "on_pretrain_routine_start": on_pretrain_routine_start,
296
+ "on_fit_epoch_end": on_fit_epoch_end,
297
+ "on_model_save": on_model_save,
298
+ "on_train_end": on_train_end,
299
+ }
300
+ if _api_key
301
+ else {}
302
+ )
@@ -418,6 +418,11 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
418
418
  >>> check_requirements([("onnxruntime", "onnxruntime-gpu"), "numpy"])
419
419
  """
420
420
  prefix = colorstr("red", "bold", "requirements:")
421
+
422
+ if os.environ.get("ULTRALYTICS_SKIP_REQUIREMENTS_CHECKS", "0") == "1":
423
+ LOGGER.info(f"{prefix} ULTRALYTICS_SKIP_REQUIREMENTS_CHECKS=1 detected, skipping requirements check.")
424
+ return True
425
+
421
426
  if isinstance(requirements, Path): # requirements.txt file
422
427
  file = requirements.resolve()
423
428
  assert file.exists(), f"{prefix} {file} not found, check failed."