ultralytics 8.3.78__tar.gz → 8.3.80__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 (251) hide show
  1. {ultralytics-8.3.78/ultralytics.egg-info → ultralytics-8.3.80}/PKG-INFO +2 -2
  2. {ultralytics-8.3.78 → ultralytics-8.3.80}/pyproject.toml +1 -1
  3. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/__init__.py +1 -1
  4. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/annotator.py +5 -7
  5. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/augment.py +22 -13
  6. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/converter.py +3 -3
  7. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/exporter.py +3 -2
  8. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/trainer.py +4 -0
  9. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/model.py +2 -0
  10. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/predict.py +2 -2
  11. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/val.py +1 -1
  12. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/val.py +1 -1
  13. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/autobackend.py +2 -2
  14. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/block.py +2 -2
  15. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/comet.py +12 -4
  16. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/metrics.py +1 -1
  17. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/ops.py +5 -4
  18. {ultralytics-8.3.78 → ultralytics-8.3.80/ultralytics.egg-info}/PKG-INFO +2 -2
  19. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/requires.txt +1 -1
  20. {ultralytics-8.3.78 → ultralytics-8.3.80}/LICENSE +0 -0
  21. {ultralytics-8.3.78 → ultralytics-8.3.80}/README.md +0 -0
  22. {ultralytics-8.3.78 → ultralytics-8.3.80}/setup.cfg +0 -0
  23. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/__init__.py +0 -0
  24. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/conftest.py +0 -0
  25. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_cli.py +0 -0
  26. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_cuda.py +0 -0
  27. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_engine.py +0 -0
  28. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_exports.py +0 -0
  29. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_integrations.py +0 -0
  30. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_python.py +0 -0
  31. {ultralytics-8.3.78 → ultralytics-8.3.80}/tests/test_solutions.py +0 -0
  32. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/assets/bus.jpg +0 -0
  33. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/assets/zidane.jpg +0 -0
  34. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/__init__.py +0 -0
  35. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  36. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  37. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  38. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  39. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  40. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  41. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  42. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  43. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  44. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  45. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  46. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  47. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  48. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco.yaml +0 -0
  49. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  50. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  51. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  52. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  53. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  54. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  55. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  56. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  57. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  58. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  59. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  60. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  61. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  62. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/signature.yaml +0 -0
  63. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  64. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/datasets/xView.yaml +0 -0
  65. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/default.yaml +0 -0
  66. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  67. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  68. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  69. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  70. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  71. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  72. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  73. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  74. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  75. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  76. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  77. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  78. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  79. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  80. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  81. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  82. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  83. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  84. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  85. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  86. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  87. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  88. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  89. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  90. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  91. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  92. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  93. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  94. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  95. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  96. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  97. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  98. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  99. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  100. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  101. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  102. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  103. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  104. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  105. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  106. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  107. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  108. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  109. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  110. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  111. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  112. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  113. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  114. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  115. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  116. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  117. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/solutions/default.yaml +0 -0
  118. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  119. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  120. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/__init__.py +0 -0
  121. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/base.py +0 -0
  122. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/build.py +0 -0
  123. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/dataset.py +0 -0
  124. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/loaders.py +0 -0
  125. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/split_dota.py +0 -0
  126. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/data/utils.py +0 -0
  127. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/__init__.py +0 -0
  128. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/model.py +0 -0
  129. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/predictor.py +0 -0
  130. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/results.py +0 -0
  131. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/tuner.py +0 -0
  132. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/engine/validator.py +0 -0
  133. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/__init__.py +0 -0
  134. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/auth.py +0 -0
  135. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/google/__init__.py +0 -0
  136. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/session.py +0 -0
  137. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/hub/utils.py +0 -0
  138. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/__init__.py +0 -0
  139. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/__init__.py +0 -0
  140. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/model.py +0 -0
  141. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/predict.py +0 -0
  142. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/utils.py +0 -0
  143. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/fastsam/val.py +0 -0
  144. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/__init__.py +0 -0
  145. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/predict.py +0 -0
  146. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/nas/val.py +0 -0
  147. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/__init__.py +0 -0
  148. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/model.py +0 -0
  149. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/rtdetr/train.py +0 -0
  150. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/__init__.py +0 -0
  151. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/amg.py +0 -0
  152. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/build.py +0 -0
  153. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/model.py +0 -0
  154. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/__init__.py +0 -0
  155. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/blocks.py +0 -0
  156. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/decoders.py +0 -0
  157. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/encoders.py +0 -0
  158. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  159. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/sam.py +0 -0
  160. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  161. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/transformer.py +0 -0
  162. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/modules/utils.py +0 -0
  163. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/sam/predict.py +0 -0
  164. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/utils/__init__.py +0 -0
  165. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/utils/loss.py +0 -0
  166. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/utils/ops.py +0 -0
  167. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/__init__.py +0 -0
  168. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/__init__.py +0 -0
  169. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/predict.py +0 -0
  170. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/train.py +0 -0
  171. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/classify/val.py +0 -0
  172. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/__init__.py +0 -0
  173. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/predict.py +0 -0
  174. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/detect/train.py +0 -0
  175. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/model.py +0 -0
  176. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/__init__.py +0 -0
  177. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/predict.py +0 -0
  178. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/train.py +0 -0
  179. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/obb/val.py +0 -0
  180. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/__init__.py +0 -0
  181. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/predict.py +0 -0
  182. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/train.py +0 -0
  183. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/pose/val.py +0 -0
  184. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/__init__.py +0 -0
  185. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/predict.py +0 -0
  186. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/train.py +0 -0
  187. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/segment/val.py +0 -0
  188. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/world/__init__.py +0 -0
  189. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/world/train.py +0 -0
  190. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/models/yolo/world/train_world.py +0 -0
  191. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/__init__.py +0 -0
  192. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/__init__.py +0 -0
  193. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/activation.py +0 -0
  194. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/conv.py +0 -0
  195. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/head.py +0 -0
  196. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/transformer.py +0 -0
  197. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/modules/utils.py +0 -0
  198. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/nn/tasks.py +0 -0
  199. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/__init__.py +0 -0
  200. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/ai_gym.py +0 -0
  201. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/analytics.py +0 -0
  202. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/distance_calculation.py +0 -0
  203. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/heatmap.py +0 -0
  204. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/object_counter.py +0 -0
  205. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/parking_management.py +0 -0
  206. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/queue_management.py +0 -0
  207. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/region_counter.py +0 -0
  208. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/security_alarm.py +0 -0
  209. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/solutions.py +0 -0
  210. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/speed_estimation.py +0 -0
  211. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/streamlit_inference.py +0 -0
  212. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/solutions/trackzone.py +0 -0
  213. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/__init__.py +0 -0
  214. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/basetrack.py +0 -0
  215. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/bot_sort.py +0 -0
  216. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/byte_tracker.py +0 -0
  217. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/track.py +0 -0
  218. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/__init__.py +0 -0
  219. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/gmc.py +0 -0
  220. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  221. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/trackers/utils/matching.py +0 -0
  222. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/__init__.py +0 -0
  223. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/autobatch.py +0 -0
  224. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/benchmarks.py +0 -0
  225. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/__init__.py +0 -0
  226. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/base.py +0 -0
  227. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/clearml.py +0 -0
  228. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/dvc.py +0 -0
  229. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/hub.py +0 -0
  230. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/mlflow.py +0 -0
  231. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/neptune.py +0 -0
  232. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/raytune.py +0 -0
  233. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  234. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/callbacks/wb.py +0 -0
  235. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/checks.py +0 -0
  236. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/dist.py +0 -0
  237. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/downloads.py +0 -0
  238. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/errors.py +0 -0
  239. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/files.py +0 -0
  240. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/instance.py +0 -0
  241. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/loss.py +0 -0
  242. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/patches.py +0 -0
  243. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/plotting.py +0 -0
  244. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/tal.py +0 -0
  245. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/torch_utils.py +0 -0
  246. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/triton.py +0 -0
  247. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics/utils/tuner.py +0 -0
  248. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/SOURCES.txt +0 -0
  249. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/dependency_links.txt +0 -0
  250. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/entry_points.txt +0 -0
  251. {ultralytics-8.3.78 → ultralytics-8.3.80}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ultralytics
3
- Version: 8.3.78
3
+ Version: 8.3.80
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>
@@ -63,7 +63,7 @@ Provides-Extra: export
63
63
  Requires-Dist: onnx>=1.12.0; extra == "export"
64
64
  Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
65
65
  Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
66
- Requires-Dist: openvino>=2024.0.0; extra == "export"
66
+ Requires-Dist: openvino<2025.0.0,>=2024.0.0; extra == "export"
67
67
  Requires-Dist: tensorflow>=2.0.0; extra == "export"
68
68
  Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
69
69
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
@@ -97,7 +97,7 @@ export = [
97
97
  "onnx>=1.12.0", # ONNX export
98
98
  "coremltools>=7.0; platform_system != 'Windows' and python_version <= '3.11'", # CoreML supported on macOS and Linux
99
99
  "scikit-learn>=1.3.2; platform_system != 'Windows' and python_version <= '3.11'", # CoreML k-means quantization
100
- "openvino>=2024.0.0", # OpenVINO export
100
+ "openvino>=2024.0.0,<2025.0.0", # OpenVINO export
101
101
  "tensorflow>=2.0.0", # TF bug https://github.com/ultralytics/ultralytics/issues/5161
102
102
  "tensorflowjs>=3.9.0", # TF.js export, automatically installs tensorflow
103
103
  "tensorstore>=0.1.63; platform_machine == 'aarch64' and python_version >= '3.9'", # for TF Raspberry Pi exports
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.78"
3
+ __version__ = "8.3.80"
4
4
 
5
5
  import os
6
6
 
@@ -58,15 +58,13 @@ def auto_annotate(
58
58
 
59
59
  for result in det_results:
60
60
  class_ids = result.boxes.cls.int().tolist() # noqa
61
- if len(class_ids):
61
+ if class_ids:
62
62
  boxes = result.boxes.xyxy # Boxes object for bbox outputs
63
63
  sam_results = sam_model(result.orig_img, bboxes=boxes, verbose=False, save=False, device=device)
64
64
  segments = sam_results[0].masks.xyn # noqa
65
65
 
66
66
  with open(f"{Path(output_dir) / Path(result.path).stem}.txt", "w") as f:
67
- for i in range(len(segments)):
68
- s = segments[i]
69
- if len(s) == 0:
70
- continue
71
- segment = map(str, segments[i].reshape(-1).tolist())
72
- f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")
67
+ for i, s in enumerate(segments):
68
+ if s.any():
69
+ segment = map(str, s.reshape(-1).tolist())
70
+ f.write(f"{class_ids[i]} " + " ".join(segment) + "\n")
@@ -1364,17 +1364,26 @@ class RandomHSV:
1364
1364
  >>> hsv_augmenter(labels)
1365
1365
  >>> augmented_img = labels["img"]
1366
1366
  """
1367
- img = labels["img"]
1368
1367
  if self.hgain or self.sgain or self.vgain:
1369
- r = np.random.uniform(-1, 1, 3) * [self.hgain, self.sgain, self.vgain] + 1 # random gains
1370
- hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
1368
+ img = labels["img"]
1371
1369
  dtype = img.dtype # uint8
1372
1370
 
1371
+ # Original implementation (bug) from ultralytics<=8.3.78
1372
+ # r = np.random.uniform(-1, 1, 3) * [self.hgain, self.sgain, self.vgain] + 1 # random gains
1373
+ # x = np.arange(0, 256, dtype=r.dtype)
1374
+ # lut_hue = ((x * r[0]) % 180).astype(dtype)
1375
+ # lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
1376
+ # lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
1377
+
1378
+ # Fixed implementation in https://github.com/ultralytics/ultralytics/pull/19311
1379
+ r = np.random.uniform(-1, 1, 3) * (self.hgain, self.sgain, self.vgain) * (180, 255, 255) # random gains
1373
1380
  x = np.arange(0, 256, dtype=r.dtype)
1374
- lut_hue = ((x * r[0]) % 180).astype(dtype)
1375
- lut_sat = np.clip(x * r[1], 0, 255).astype(dtype)
1376
- lut_val = np.clip(x * r[2], 0, 255).astype(dtype)
1381
+ lut_hue = ((x + r[0]) % 180).astype(dtype)
1382
+ lut_sat = np.clip(x + r[1], 0, 255).astype(dtype)
1383
+ lut_val = np.clip(x + r[2], 0, 255).astype(dtype)
1384
+ lut_sat[0] = 0 # prevent pure white changing color
1377
1385
 
1386
+ hue, sat, val = cv2.split(cv2.cvtColor(img, cv2.COLOR_BGR2HSV))
1378
1387
  im_hsv = cv2.merge((cv2.LUT(hue, lut_hue), cv2.LUT(sat, lut_sat), cv2.LUT(val, lut_val)))
1379
1388
  cv2.cvtColor(im_hsv, cv2.COLOR_HSV2BGR, dst=img) # no return needed
1380
1389
  return labels
@@ -1484,7 +1493,7 @@ class LetterBox:
1484
1493
  Attributes:
1485
1494
  new_shape (tuple): Target shape (height, width) for resizing.
1486
1495
  auto (bool): Whether to use minimum rectangle.
1487
- scaleFill (bool): Whether to stretch the image to new_shape.
1496
+ scale_fill (bool): Whether to stretch the image to new_shape.
1488
1497
  scaleup (bool): Whether to allow scaling up. If False, only scale down.
1489
1498
  stride (int): Stride for rounding padding.
1490
1499
  center (bool): Whether to center the image or align to top-left.
@@ -1499,7 +1508,7 @@ class LetterBox:
1499
1508
  >>> updated_instances = result["instances"]
1500
1509
  """
1501
1510
 
1502
- def __init__(self, new_shape=(640, 640), auto=False, scaleFill=False, scaleup=True, center=True, stride=32):
1511
+ def __init__(self, new_shape=(640, 640), auto=False, scale_fill=False, scaleup=True, center=True, stride=32):
1503
1512
  """
1504
1513
  Initialize LetterBox object for resizing and padding images.
1505
1514
 
@@ -1509,7 +1518,7 @@ class LetterBox:
1509
1518
  Args:
1510
1519
  new_shape (Tuple[int, int]): Target size (height, width) for the resized image.
1511
1520
  auto (bool): If True, use minimum rectangle to resize. If False, use new_shape directly.
1512
- scaleFill (bool): If True, stretch the image to new_shape without padding.
1521
+ scale_fill (bool): If True, stretch the image to new_shape without padding.
1513
1522
  scaleup (bool): If True, allow scaling up. If False, only scale down.
1514
1523
  center (bool): If True, center the placed image. If False, place image in top-left corner.
1515
1524
  stride (int): Stride of the model (e.g., 32 for YOLOv5).
@@ -1517,17 +1526,17 @@ class LetterBox:
1517
1526
  Attributes:
1518
1527
  new_shape (Tuple[int, int]): Target size for the resized image.
1519
1528
  auto (bool): Flag for using minimum rectangle resizing.
1520
- scaleFill (bool): Flag for stretching image without padding.
1529
+ scale_fill (bool): Flag for stretching image without padding.
1521
1530
  scaleup (bool): Flag for allowing upscaling.
1522
1531
  stride (int): Stride value for ensuring image size is divisible by stride.
1523
1532
 
1524
1533
  Examples:
1525
- >>> letterbox = LetterBox(new_shape=(640, 640), auto=False, scaleFill=False, scaleup=True, stride=32)
1534
+ >>> letterbox = LetterBox(new_shape=(640, 640), auto=False, scale_fill=False, scaleup=True, stride=32)
1526
1535
  >>> resized_img = letterbox(original_img)
1527
1536
  """
1528
1537
  self.new_shape = new_shape
1529
1538
  self.auto = auto
1530
- self.scaleFill = scaleFill
1539
+ self.scale_fill = scale_fill
1531
1540
  self.scaleup = scaleup
1532
1541
  self.stride = stride
1533
1542
  self.center = center # Put the image in the middle or top-left
@@ -1573,7 +1582,7 @@ class LetterBox:
1573
1582
  dw, dh = new_shape[1] - new_unpad[0], new_shape[0] - new_unpad[1] # wh padding
1574
1583
  if self.auto: # minimum rectangle
1575
1584
  dw, dh = np.mod(dw, self.stride), np.mod(dh, self.stride) # wh padding
1576
- elif self.scaleFill: # stretch
1585
+ elif self.scale_fill: # stretch
1577
1586
  dw, dh = 0.0, 0.0
1578
1587
  new_unpad = (new_shape[1], new_shape[0])
1579
1588
  ratio = new_shape[1] / shape[1], new_shape[0] / shape[0] # width, height ratios
@@ -274,13 +274,13 @@ def convert_coco(
274
274
  # Create image dict
275
275
  images = {f"{x['id']:d}": x for x in data["images"]}
276
276
  # Create image-annotations dict
277
- imgToAnns = defaultdict(list)
277
+ annotations = defaultdict(list)
278
278
  for ann in data["annotations"]:
279
- imgToAnns[ann["image_id"]].append(ann)
279
+ annotations[ann["image_id"]].append(ann)
280
280
 
281
281
  image_txt = []
282
282
  # Write labels file
283
- for img_id, anns in TQDM(imgToAnns.items(), desc=f"Annotations {json_file}"):
283
+ for img_id, anns in TQDM(annotations.items(), desc=f"Annotations {json_file}"):
284
284
  img = images[f"{img_id:d}"]
285
285
  h, w = img["height"], img["width"]
286
286
  f = str(Path(img["coco_url"]).relative_to("http://images.cocodataset.org")) if lvis else img["file_name"]
@@ -170,6 +170,7 @@ def try_export(inner_func):
170
170
  def outer_func(*args, **kwargs):
171
171
  """Export a model."""
172
172
  prefix = inner_args["prefix"]
173
+ dt = 0.0
173
174
  try:
174
175
  with Profile() as dt:
175
176
  f, model = inner_func(*args, **kwargs)
@@ -569,7 +570,7 @@ class Exporter:
569
570
  @try_export
570
571
  def export_openvino(self, prefix=colorstr("OpenVINO:")):
571
572
  """YOLO OpenVINO export."""
572
- check_requirements("openvino>=2024.5.0")
573
+ check_requirements("openvino>=2024.0.0,<2025.0.0")
573
574
  import openvino as ov
574
575
 
575
576
  LOGGER.info(f"\n{prefix} starting export with openvino {ov.__version__}...")
@@ -591,7 +592,7 @@ class Exporter:
591
592
  if self.model.task != "classify":
592
593
  ov_model.set_rt_info("fit_to_window_letterbox", ["model_info", "resize_type"])
593
594
 
594
- ov.runtime.save_model(ov_model, file, compress_to_fp16=self.args.half)
595
+ ov.save_model(ov_model, file, compress_to_fp16=self.args.half)
595
596
  yaml_save(Path(file).parent / "metadata.yaml", self.metadata) # add metadata.yaml
596
597
 
597
598
  if self.args.int8:
@@ -567,6 +567,10 @@ class BaseTrainer:
567
567
  except Exception as e:
568
568
  raise RuntimeError(emojis(f"Dataset '{clean_url(self.args.data)}' error ❌ {e}")) from e
569
569
  self.data = data
570
+ if self.args.single_cls:
571
+ LOGGER.info("Overriding class names with single class.")
572
+ self.data["names"] = {0: "item"}
573
+ self.data["nc"] = 1
570
574
  return data["train"], data.get("val") or data.get("test")
571
575
 
572
576
  def setup_model(self):
@@ -16,6 +16,7 @@ from pathlib import Path
16
16
  import torch
17
17
 
18
18
  from ultralytics.engine.model import Model
19
+ from ultralytics.utils import DEFAULT_CFG_DICT
19
20
  from ultralytics.utils.downloads import attempt_download_asset
20
21
  from ultralytics.utils.torch_utils import model_info
21
22
 
@@ -77,6 +78,7 @@ class NAS(Model):
77
78
  self.model.yaml = {} # for info()
78
79
  self.model.pt_path = weights # for export()
79
80
  self.model.task = "detect" # for export()
81
+ self.model.args = {**DEFAULT_CFG_DICT, **self.overrides} # for export()
80
82
 
81
83
  def info(self, detailed=False, verbose=True):
82
84
  """
@@ -72,7 +72,7 @@ class RTDETRPredictor(BasePredictor):
72
72
  def pre_transform(self, im):
73
73
  """
74
74
  Pre-transforms the input images before feeding them into the model for inference. The input images are
75
- letterboxed to ensure a square aspect ratio and scale-filled. The size must be square(640) and scaleFilled.
75
+ letterboxed to ensure a square aspect ratio and scale-filled. The size must be square(640) and scale_filled.
76
76
 
77
77
  Args:
78
78
  im (list[np.ndarray] |torch.Tensor): Input images of shape (N,3,h,w) for tensor, [(h,w,3) x N] for list.
@@ -80,5 +80,5 @@ class RTDETRPredictor(BasePredictor):
80
80
  Returns:
81
81
  (list): List of pre-transformed images ready for model inference.
82
82
  """
83
- letterbox = LetterBox(self.imgsz, auto=False, scaleFill=True)
83
+ letterbox = LetterBox(self.imgsz, auto=False, scale_fill=True)
84
84
  return [letterbox(image=x) for x in im]
@@ -34,7 +34,7 @@ class RTDETRDataset(YOLODataset):
34
34
  hyp.mixup = hyp.mixup if self.augment and not self.rect else 0.0
35
35
  transforms = v8_transforms(self, self.imgsz, hyp, stretch=True)
36
36
  else:
37
- # transforms = Compose([LetterBox(new_shape=(self.imgsz, self.imgsz), auto=False, scaleFill=True)])
37
+ # transforms = Compose([LetterBox(new_shape=(self.imgsz, self.imgsz), auto=False, scale_fill=True)])
38
38
  transforms = Compose([])
39
39
  transforms.append(
40
40
  Format(
@@ -186,7 +186,7 @@ class DetectionValidator(BaseValidator):
186
186
  self.nt_per_class = np.bincount(stats["target_cls"].astype(int), minlength=self.nc)
187
187
  self.nt_per_image = np.bincount(stats["target_img"].astype(int), minlength=self.nc)
188
188
  stats.pop("target_img", None)
189
- if len(stats) and stats["tp"].any():
189
+ if len(stats):
190
190
  self.metrics.process(**stats)
191
191
  return self.metrics.results_dict
192
192
 
@@ -244,7 +244,7 @@ class AutoBackend(nn.Module):
244
244
  # OpenVINO
245
245
  elif xml:
246
246
  LOGGER.info(f"Loading {w} for OpenVINO inference...")
247
- check_requirements("openvino>=2024.0.0")
247
+ check_requirements("openvino>=2024.0.0,<2025.0.0")
248
248
  import openvino as ov
249
249
 
250
250
  core = ov.Core()
@@ -600,7 +600,7 @@ class AutoBackend(nn.Module):
600
600
  results[userdata] = request.results
601
601
 
602
602
  # Create AsyncInferQueue, set the callback and start asynchronous inference for each input image
603
- async_queue = self.ov.runtime.AsyncInferQueue(self.ov_compiled_model)
603
+ async_queue = self.ov.AsyncInferQueue(self.ov_compiled_model)
604
604
  async_queue.set_callback(callback)
605
605
  for i in range(n):
606
606
  # Start async inference with userdata=i to specify the position in results list
@@ -1227,8 +1227,8 @@ class AAttn(nn.Module):
1227
1227
  v = v.reshape(B // self.area, N * self.area, C)
1228
1228
  B, N, _ = x.shape
1229
1229
 
1230
- x = x.reshape(B, H, W, C).permute(0, 3, 1, 2)
1231
- v = v.reshape(B, H, W, C).permute(0, 3, 1, 2)
1230
+ x = x.reshape(B, H, W, C).permute(0, 3, 1, 2).contiguous()
1231
+ v = v.reshape(B, H, W, C).permute(0, 3, 1, 2).contiguous()
1232
1232
 
1233
1233
  x = x + self.pe(v)
1234
1234
  return self.proj(x)
@@ -177,7 +177,7 @@ def _format_ground_truth_annotations_for_detection(img_idx, image_path, batch, c
177
177
  return {"name": "ground_truth", "data": data}
178
178
 
179
179
 
180
- def _format_prediction_annotations_for_detection(image_path, metadata, class_label_map=None):
180
+ def _format_prediction_annotations_for_detection(image_path, metadata, class_label_map=None, class_map=None):
181
181
  """Format YOLO predictions for object detection visualization."""
182
182
  stem = image_path.stem
183
183
  image_id = int(stem) if stem.isnumeric() else stem
@@ -187,26 +187,32 @@ def _format_prediction_annotations_for_detection(image_path, metadata, class_lab
187
187
  LOGGER.debug(f"COMET WARNING: Image: {image_path} has no bounding boxes predictions")
188
188
  return None
189
189
 
190
+ label_index_offset = 0
191
+ if class_map is not None:
192
+ # offset to align indices of class labels (starting from zero)
193
+ # with prediction's category ID indices (can start from one)
194
+ label_index_offset = sorted(class_map)[0]
195
+
190
196
  data = []
191
197
  for prediction in predictions:
192
198
  boxes = prediction["bbox"]
193
199
  score = _scale_confidence_score(prediction["score"])
194
200
  cls_label = prediction["category_id"]
195
201
  if class_label_map:
196
- cls_label = str(class_label_map[cls_label])
202
+ cls_label = str(class_label_map[cls_label - label_index_offset])
197
203
 
198
204
  data.append({"boxes": [boxes], "label": cls_label, "score": score})
199
205
 
200
206
  return {"name": "prediction", "data": data}
201
207
 
202
208
 
203
- def _fetch_annotations(img_idx, image_path, batch, prediction_metadata_map, class_label_map):
209
+ def _fetch_annotations(img_idx, image_path, batch, prediction_metadata_map, class_label_map, class_map):
204
210
  """Join the ground truth and prediction annotations if they exist."""
205
211
  ground_truth_annotations = _format_ground_truth_annotations_for_detection(
206
212
  img_idx, image_path, batch, class_label_map
207
213
  )
208
214
  prediction_annotations = _format_prediction_annotations_for_detection(
209
- image_path, prediction_metadata_map, class_label_map
215
+ image_path, prediction_metadata_map, class_label_map, class_map
210
216
  )
211
217
 
212
218
  annotations = [
@@ -260,6 +266,7 @@ def _log_image_predictions(experiment, validator, curr_step):
260
266
  predictions_metadata_map = _create_prediction_metadata_map(jdict)
261
267
  dataloader = validator.dataloader
262
268
  class_label_map = validator.names
269
+ class_map = getattr(validator, "class_map", None)
263
270
 
264
271
  batch_logging_interval = _get_eval_batch_logging_interval()
265
272
  max_image_predictions = _get_max_image_predictions_to_log()
@@ -280,6 +287,7 @@ def _log_image_predictions(experiment, validator, curr_step):
280
287
  batch,
281
288
  predictions_metadata_map,
282
289
  class_label_map,
290
+ class_map=class_map,
283
291
  )
284
292
  _log_images(
285
293
  experiment,
@@ -604,7 +604,7 @@ def ap_per_class(
604
604
  if j == 0:
605
605
  prec_values.append(np.interp(x, mrec, mpre)) # precision at mAP@0.5
606
606
 
607
- prec_values = np.array(prec_values) # (nc, 1000)
607
+ prec_values = np.array(prec_values) if prec_values else np.zeros((1, 1000)) # (nc, 1000)
608
608
 
609
609
  # Compute F1 (harmonic mean of precision and recall)
610
610
  f1_curve = 2 * p_curve * r_curve / (p_curve + r_curve + eps)
@@ -799,10 +799,11 @@ def regularize_rboxes(rboxes):
799
799
  (torch.Tensor): The regularized boxes.
800
800
  """
801
801
  x, y, w, h, t = rboxes.unbind(dim=-1)
802
- # Swap edge and angle if h >= w
803
- w_ = torch.where(w > h, w, h)
804
- h_ = torch.where(w > h, h, w)
805
- t = torch.where(w > h, t, t + math.pi / 2) % math.pi
802
+ # Swap edge if t >= pi/2 while not being symmetrically opposite
803
+ swap = t % math.pi >= math.pi / 2
804
+ w_ = torch.where(swap, h, w)
805
+ h_ = torch.where(swap, w, h)
806
+ t = t % (math.pi / 2)
806
807
  return torch.stack([x, y, w_, h_, t], dim=-1) # regularized boxes
807
808
 
808
809
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: ultralytics
3
- Version: 8.3.78
3
+ Version: 8.3.80
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>
@@ -63,7 +63,7 @@ Provides-Extra: export
63
63
  Requires-Dist: onnx>=1.12.0; extra == "export"
64
64
  Requires-Dist: coremltools>=7.0; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
65
65
  Requires-Dist: scikit-learn>=1.3.2; (platform_system != "Windows" and python_version <= "3.11") and extra == "export"
66
- Requires-Dist: openvino>=2024.0.0; extra == "export"
66
+ Requires-Dist: openvino<2025.0.0,>=2024.0.0; extra == "export"
67
67
  Requires-Dist: tensorflow>=2.0.0; extra == "export"
68
68
  Requires-Dist: tensorflowjs>=3.9.0; extra == "export"
69
69
  Requires-Dist: tensorstore>=0.1.63; (platform_machine == "aarch64" and python_version >= "3.9") and extra == "export"
@@ -31,7 +31,7 @@ mkdocs-macros-plugin>=1.0.5
31
31
 
32
32
  [export]
33
33
  onnx>=1.12.0
34
- openvino>=2024.0.0
34
+ openvino<2025.0.0,>=2024.0.0
35
35
  tensorflow>=2.0.0
36
36
  tensorflowjs>=3.9.0
37
37
  keras
File without changes
File without changes
File without changes