dgenerate-ultralytics-headless 8.3.167__tar.gz → 8.3.169__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 (278) hide show
  1. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/PKG-INFO +1 -1
  2. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/PKG-INFO +1 -1
  3. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_cli.py +1 -1
  4. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_python.py +4 -3
  5. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/__init__.py +1 -1
  6. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/default.yaml +1 -1
  7. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/exporter.py +0 -1
  8. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/model.py +3 -2
  9. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/predict.py +1 -0
  10. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/val.py +22 -38
  11. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/val.py +1 -1
  12. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/val.py +28 -20
  13. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/val.py +16 -31
  14. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/val.py +11 -46
  15. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/val.py +12 -40
  16. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/region_counter.py +2 -1
  17. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/similarity_search.py +2 -1
  18. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/solutions.py +30 -63
  19. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/streamlit_inference.py +57 -14
  20. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/metrics.py +103 -17
  21. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/plotting.py +2 -2
  22. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/LICENSE +0 -0
  23. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/README.md +0 -0
  24. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/SOURCES.txt +0 -0
  25. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/dependency_links.txt +0 -0
  26. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/entry_points.txt +0 -0
  27. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/requires.txt +0 -0
  28. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/dgenerate_ultralytics_headless.egg-info/top_level.txt +0 -0
  29. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/pyproject.toml +0 -0
  30. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/setup.cfg +0 -0
  31. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/__init__.py +0 -0
  32. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/conftest.py +0 -0
  33. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_cuda.py +0 -0
  34. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_engine.py +0 -0
  35. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_exports.py +0 -0
  36. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_integrations.py +0 -0
  37. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/tests/test_solutions.py +0 -0
  38. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/assets/bus.jpg +0 -0
  39. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/assets/zidane.jpg +0 -0
  40. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/__init__.py +0 -0
  41. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  42. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  43. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  44. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  45. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  46. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  47. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  48. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  49. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  50. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  51. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  52. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  53. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  54. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  55. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco.yaml +0 -0
  56. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  57. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  58. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  59. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  60. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  61. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  62. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  63. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  64. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  65. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  66. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  67. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  68. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  69. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  70. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  71. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  72. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/signature.yaml +0 -0
  73. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  74. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/datasets/xView.yaml +0 -0
  75. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  76. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  77. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  78. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  79. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  80. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  81. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  82. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  83. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  84. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  85. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  86. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  87. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  88. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  89. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  90. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  91. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  92. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  93. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  94. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  95. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  96. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  97. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  98. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  99. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  100. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  101. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  102. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  103. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  104. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  105. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  106. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  107. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  108. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  109. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  110. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  111. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  112. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  113. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  114. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  115. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  116. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  117. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  118. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  119. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  120. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  121. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  122. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  123. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  124. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  125. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  126. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  127. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  128. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  129. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  130. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  131. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  132. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/__init__.py +0 -0
  133. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/annotator.py +0 -0
  134. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/augment.py +0 -0
  135. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/base.py +0 -0
  136. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/build.py +0 -0
  137. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/converter.py +0 -0
  138. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/dataset.py +0 -0
  139. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/loaders.py +0 -0
  140. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/download_weights.sh +0 -0
  141. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/get_coco.sh +0 -0
  142. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/get_coco128.sh +0 -0
  143. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  144. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/split.py +0 -0
  145. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/split_dota.py +0 -0
  146. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/data/utils.py +0 -0
  147. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/__init__.py +0 -0
  148. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/predictor.py +0 -0
  149. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/results.py +0 -0
  150. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/trainer.py +0 -0
  151. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/tuner.py +0 -0
  152. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/engine/validator.py +0 -0
  153. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/__init__.py +0 -0
  154. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/auth.py +0 -0
  155. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/google/__init__.py +0 -0
  156. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/session.py +0 -0
  157. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/hub/utils.py +0 -0
  158. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/__init__.py +0 -0
  159. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/__init__.py +0 -0
  160. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/model.py +0 -0
  161. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/predict.py +0 -0
  162. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/utils.py +0 -0
  163. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/fastsam/val.py +0 -0
  164. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/__init__.py +0 -0
  165. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/model.py +0 -0
  166. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/predict.py +0 -0
  167. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/nas/val.py +0 -0
  168. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/__init__.py +0 -0
  169. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/model.py +0 -0
  170. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/rtdetr/train.py +0 -0
  171. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/__init__.py +0 -0
  172. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/amg.py +0 -0
  173. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/build.py +0 -0
  174. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/model.py +0 -0
  175. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/__init__.py +0 -0
  176. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/blocks.py +0 -0
  177. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/decoders.py +0 -0
  178. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/encoders.py +0 -0
  179. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  180. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/sam.py +0 -0
  181. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  182. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/transformer.py +0 -0
  183. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/modules/utils.py +0 -0
  184. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/sam/predict.py +0 -0
  185. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/utils/__init__.py +0 -0
  186. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/utils/loss.py +0 -0
  187. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/utils/ops.py +0 -0
  188. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/__init__.py +0 -0
  189. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/__init__.py +0 -0
  190. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/predict.py +0 -0
  191. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/classify/train.py +0 -0
  192. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/__init__.py +0 -0
  193. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/predict.py +0 -0
  194. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/detect/train.py +0 -0
  195. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/model.py +0 -0
  196. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/__init__.py +0 -0
  197. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/predict.py +0 -0
  198. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/obb/train.py +0 -0
  199. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/__init__.py +0 -0
  200. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/predict.py +0 -0
  201. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/pose/train.py +0 -0
  202. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/__init__.py +0 -0
  203. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/predict.py +0 -0
  204. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/segment/train.py +0 -0
  205. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/world/__init__.py +0 -0
  206. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/world/train.py +0 -0
  207. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/world/train_world.py +0 -0
  208. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  209. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  210. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/train.py +0 -0
  211. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  212. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/models/yolo/yoloe/val.py +0 -0
  213. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/__init__.py +0 -0
  214. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/autobackend.py +0 -0
  215. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/__init__.py +0 -0
  216. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/activation.py +0 -0
  217. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/block.py +0 -0
  218. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/conv.py +0 -0
  219. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/head.py +0 -0
  220. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/transformer.py +0 -0
  221. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/modules/utils.py +0 -0
  222. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/tasks.py +0 -0
  223. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/nn/text_model.py +0 -0
  224. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/__init__.py +0 -0
  225. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/ai_gym.py +0 -0
  226. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/analytics.py +0 -0
  227. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/config.py +0 -0
  228. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/distance_calculation.py +0 -0
  229. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/heatmap.py +0 -0
  230. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/instance_segmentation.py +0 -0
  231. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/object_blurrer.py +0 -0
  232. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/object_counter.py +0 -0
  233. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/object_cropper.py +0 -0
  234. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/parking_management.py +0 -0
  235. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/queue_management.py +0 -0
  236. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/security_alarm.py +0 -0
  237. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/speed_estimation.py +0 -0
  238. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/templates/similarity-search.html +0 -0
  239. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/trackzone.py +0 -0
  240. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/solutions/vision_eye.py +0 -0
  241. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/__init__.py +0 -0
  242. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/basetrack.py +0 -0
  243. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/bot_sort.py +0 -0
  244. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/byte_tracker.py +0 -0
  245. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/track.py +0 -0
  246. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/__init__.py +0 -0
  247. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/gmc.py +0 -0
  248. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  249. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/trackers/utils/matching.py +0 -0
  250. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/__init__.py +0 -0
  251. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/autobatch.py +0 -0
  252. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/autodevice.py +0 -0
  253. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/benchmarks.py +0 -0
  254. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/__init__.py +0 -0
  255. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/base.py +0 -0
  256. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/clearml.py +0 -0
  257. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/comet.py +0 -0
  258. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/dvc.py +0 -0
  259. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/hub.py +0 -0
  260. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/mlflow.py +0 -0
  261. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/neptune.py +0 -0
  262. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/raytune.py +0 -0
  263. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  264. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/callbacks/wb.py +0 -0
  265. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/checks.py +0 -0
  266. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/dist.py +0 -0
  267. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/downloads.py +0 -0
  268. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/errors.py +0 -0
  269. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/export.py +0 -0
  270. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/files.py +0 -0
  271. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/instance.py +0 -0
  272. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/loss.py +0 -0
  273. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/ops.py +0 -0
  274. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/patches.py +0 -0
  275. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/tal.py +0 -0
  276. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/torch_utils.py +0 -0
  277. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/triton.py +0 -0
  278. {dgenerate_ultralytics_headless-8.3.167 → dgenerate_ultralytics_headless-8.3.169}/ultralytics/utils/tuner.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.167
3
+ Version: 8.3.169
4
4
  Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dgenerate-ultralytics-headless
3
- Version: 8.3.167
3
+ Version: 8.3.169
4
4
  Summary: Automatically built Ultralytics package with python-opencv-headless dependency instead of python-opencv
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -39,7 +39,7 @@ def test_val(task: str, model: str, data: str) -> None:
39
39
  @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
40
40
  def test_predict(task: str, model: str, data: str) -> None:
41
41
  """Test YOLO prediction on provided sample assets for specified task and model."""
42
- run(f"yolo {task} predict model={model} source={ASSETS} imgsz=32 save save_crop save_txt")
42
+ run(f"yolo {task} predict model={model} source={ASSETS} imgsz=32 save save_crop save_txt visualize")
43
43
 
44
44
 
45
45
  @pytest.mark.parametrize("model", MODELS)
@@ -201,11 +201,12 @@ def test_track_stream(model):
201
201
  model.track(video_url, imgsz=160, tracker=custom_yaml)
202
202
 
203
203
 
204
- @pytest.mark.parametrize("task,model,data", TASK_MODEL_DATA)
205
- def test_val(task: str, model: str, data: str) -> None:
204
+ @pytest.mark.parametrize("task,weight,data", TASK_MODEL_DATA)
205
+ def test_val(task: str, weight: str, data: str) -> None:
206
206
  """Test the validation mode of the YOLO model."""
207
+ model = YOLO(weight)
207
208
  for plots in {True, False}: # Test both cases i.e. plots=True and plots=False
208
- metrics = YOLO(model).val(data=data, imgsz=32, plots=plots)
209
+ metrics = model.val(data=data, imgsz=32, plots=plots)
209
210
  metrics.to_df()
210
211
  metrics.to_csv()
211
212
  metrics.to_xml()
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.167"
3
+ __version__ = "8.3.169"
4
4
 
5
5
  import os
6
6
 
@@ -58,7 +58,7 @@ plots: True # (bool) save plots and images during train/val
58
58
  source: # (str, optional) source directory for images or videos
59
59
  vid_stride: 1 # (int) video frame-rate stride
60
60
  stream_buffer: False # (bool) buffer all streaming frames (True) or return the most recent frame (False)
61
- visualize: False # (bool) visualize model features
61
+ visualize: False # (bool) visualize model features (predict) or visualize TP, FP, FN (val)
62
62
  augment: False # (bool) apply image augmentation to prediction sources
63
63
  agnostic_nms: False # (bool) class-agnostic NMS
64
64
  classes: # (int | list[int], optional) filter results by class, i.e. classes=0, or classes=[0,2,3]
@@ -1014,7 +1014,6 @@ class Exporter:
1014
1014
  enable_batchmatmul_unfold=True, # fix lower no. of detected objects on GPU delegate
1015
1015
  output_signaturedefs=True, # fix error with Attention block group convolution
1016
1016
  disable_group_convolution=self.args.format in {"tfjs", "edgetpu"}, # fix error with group convolution
1017
- optimization_for_gpu_delegate=True,
1018
1017
  )
1019
1018
  YAML.save(f / "metadata.yaml", self.metadata) # add metadata.yaml
1020
1019
 
@@ -907,8 +907,9 @@ class Model(torch.nn.Module):
907
907
  if hasattr(self.model, "names"):
908
908
  return check_class_names(self.model.names)
909
909
  if not self.predictor: # export formats will not have predictor defined until predict() is called
910
- self.predictor = self._smart_load("predictor")(overrides=self.overrides, _callbacks=self.callbacks)
911
- self.predictor.setup_model(model=self.model, verbose=False)
910
+ predictor = self._smart_load("predictor")(overrides=self.overrides, _callbacks=self.callbacks)
911
+ predictor.setup_model(model=self.model, verbose=False) # do not mess with self.predictor.model args
912
+ return predictor.model.names
912
913
  return self.predictor.model.names
913
914
 
914
915
  @property
@@ -67,6 +67,7 @@ class RTDETRPredictor(BasePredictor):
67
67
  if self.args.classes is not None:
68
68
  idx = (cls == torch.tensor(self.args.classes, device=cls.device)).any(1) & idx
69
69
  pred = torch.cat([bbox, max_score, cls], dim=-1)[idx] # filter
70
+ pred = pred[pred[:, 4].argsort(descending=True)][: self.args.max_det]
70
71
  oh, ow = orig_img.shape[:2]
71
72
  pred[..., [0, 2]] *= ow # scale x coordinates to original width
72
73
  pred[..., [1, 3]] *= oh # scale y coordinates to original height
@@ -1,5 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ from pathlib import Path
3
4
  from typing import Any, Dict, List, Tuple, Union
4
5
 
5
6
  import torch
@@ -186,45 +187,28 @@ class RTDETRValidator(DetectionValidator):
186
187
 
187
188
  return [{"bboxes": x[:, :4], "conf": x[:, 4], "cls": x[:, 5]} for x in outputs]
188
189
 
189
- def _prepare_batch(self, si: int, batch: Dict[str, Any]) -> Dict[str, Any]:
190
+ def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
190
191
  """
191
- Prepare a batch for validation by applying necessary transformations.
192
+ Serialize YOLO predictions to COCO json format.
192
193
 
193
194
  Args:
194
- si (int): Batch index.
195
- batch (Dict[str, Any]): Batch data containing images and annotations.
196
-
197
- Returns:
198
- (Dict[str, Any]): Prepared batch with transformed annotations containing cls, bboxes,
199
- ori_shape, imgsz, and ratio_pad.
200
- """
201
- idx = batch["batch_idx"] == si
202
- cls = batch["cls"][idx].squeeze(-1)
203
- bbox = batch["bboxes"][idx]
204
- ori_shape = batch["ori_shape"][si]
205
- imgsz = batch["img"].shape[2:]
206
- ratio_pad = batch["ratio_pad"][si]
207
- if len(cls):
208
- bbox = ops.xywh2xyxy(bbox) # target boxes
209
- bbox[..., [0, 2]] *= ori_shape[1] # native-space pred
210
- bbox[..., [1, 3]] *= ori_shape[0] # native-space pred
211
- return {"cls": cls, "bboxes": bbox, "ori_shape": ori_shape, "imgsz": imgsz, "ratio_pad": ratio_pad}
212
-
213
- def _prepare_pred(self, pred: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
195
+ predn (Dict[str, torch.Tensor]): Predictions dictionary containing 'bboxes', 'conf', and 'cls' keys
196
+ with bounding box coordinates, confidence scores, and class predictions.
197
+ pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
214
198
  """
215
- Prepare predictions by scaling bounding boxes to original image dimensions.
216
-
217
- Args:
218
- pred (Dict[str, torch.Tensor]): Raw predictions containing 'cls', 'bboxes', and 'conf'.
219
- pbatch (Dict[str, torch.Tensor]): Prepared batch information containing 'ori_shape' and other metadata.
220
-
221
- Returns:
222
- (Dict[str, torch.Tensor]): Predictions scaled to original image dimensions.
223
- """
224
- cls = pred["cls"]
225
- if self.args.single_cls:
226
- cls *= 0
227
- bboxes = pred["bboxes"].clone()
228
- bboxes[..., [0, 2]] *= pbatch["ori_shape"][1] / self.args.imgsz # native-space pred
229
- bboxes[..., [1, 3]] *= pbatch["ori_shape"][0] / self.args.imgsz # native-space pred
230
- return {"bboxes": bboxes, "conf": pred["conf"], "cls": cls}
199
+ stem = Path(pbatch["im_file"]).stem
200
+ image_id = int(stem) if stem.isnumeric() else stem
201
+ box = predn["bboxes"].clone()
202
+ box[..., [0, 2]] *= pbatch["ori_shape"][1] / self.args.imgsz # native-space pred
203
+ box[..., [1, 3]] *= pbatch["ori_shape"][0] / self.args.imgsz # native-space pred
204
+ box = ops.xyxy2xywh(box) # xywh
205
+ box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
206
+ for b, s, c in zip(box.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
207
+ self.jdict.append(
208
+ {
209
+ "image_id": image_id,
210
+ "category_id": self.class_map[int(c)],
211
+ "bbox": [round(x, 3) for x in b],
212
+ "score": round(s, 5),
213
+ }
214
+ )
@@ -83,7 +83,7 @@ class ClassificationValidator(BaseValidator):
83
83
  self.nc = len(model.names)
84
84
  self.pred = []
85
85
  self.targets = []
86
- self.confusion_matrix = ConfusionMatrix(names=list(model.names.values()))
86
+ self.confusion_matrix = ConfusionMatrix(names=model.names)
87
87
 
88
88
  def preprocess(self, batch: Dict[str, Any]) -> Dict[str, Any]:
89
89
  """Preprocess input batch by moving data to device and converting to appropriate dtype."""
@@ -97,8 +97,8 @@ class DetectionValidator(BaseValidator):
97
97
  self.end2end = getattr(model, "end2end", False)
98
98
  self.seen = 0
99
99
  self.jdict = []
100
- self.metrics.names = self.names
101
- self.confusion_matrix = ConfusionMatrix(names=list(model.names.values()))
100
+ self.metrics.names = model.names
101
+ self.confusion_matrix = ConfusionMatrix(names=model.names, save_matches=self.args.plots and self.args.visualize)
102
102
 
103
103
  def get_desc(self) -> str:
104
104
  """Return a formatted string summarizing class metrics of YOLO model."""
@@ -147,28 +147,28 @@ class DetectionValidator(BaseValidator):
147
147
  ratio_pad = batch["ratio_pad"][si]
148
148
  if len(cls):
149
149
  bbox = ops.xywh2xyxy(bbox) * torch.tensor(imgsz, device=self.device)[[1, 0, 1, 0]] # target boxes
150
- ops.scale_boxes(imgsz, bbox, ori_shape, ratio_pad=ratio_pad) # native-space labels
151
- return {"cls": cls, "bboxes": bbox, "ori_shape": ori_shape, "imgsz": imgsz, "ratio_pad": ratio_pad}
150
+ return {
151
+ "cls": cls,
152
+ "bboxes": bbox,
153
+ "ori_shape": ori_shape,
154
+ "imgsz": imgsz,
155
+ "ratio_pad": ratio_pad,
156
+ "im_file": batch["im_file"][si],
157
+ }
152
158
 
153
- def _prepare_pred(self, pred: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
159
+ def _prepare_pred(self, pred: Dict[str, torch.Tensor]) -> Dict[str, torch.Tensor]:
154
160
  """
155
161
  Prepare predictions for evaluation against ground truth.
156
162
 
157
163
  Args:
158
164
  pred (Dict[str, torch.Tensor]): Post-processed predictions from the model.
159
- pbatch (Dict[str, Any]): Prepared batch information.
160
165
 
161
166
  Returns:
162
167
  (Dict[str, torch.Tensor]): Prepared predictions in native space.
163
168
  """
164
- cls = pred["cls"]
165
169
  if self.args.single_cls:
166
- cls *= 0
167
- # predn = pred.clone()
168
- bboxes = ops.scale_boxes(
169
- pbatch["imgsz"], pred["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"]
170
- ) # native-space pred
171
- return {"bboxes": bboxes, "conf": pred["conf"], "cls": cls}
170
+ pred["cls"] *= 0
171
+ return pred
172
172
 
173
173
  def update_metrics(self, preds: List[Dict[str, torch.Tensor]], batch: Dict[str, Any]) -> None:
174
174
  """
@@ -181,7 +181,7 @@ class DetectionValidator(BaseValidator):
181
181
  for si, pred in enumerate(preds):
182
182
  self.seen += 1
183
183
  pbatch = self._prepare_batch(si, batch)
184
- predn = self._prepare_pred(pred, pbatch)
184
+ predn = self._prepare_pred(pred)
185
185
 
186
186
  cls = pbatch["cls"].cpu().numpy()
187
187
  no_pred = len(predn["cls"]) == 0
@@ -197,19 +197,21 @@ class DetectionValidator(BaseValidator):
197
197
  # Evaluate
198
198
  if self.args.plots:
199
199
  self.confusion_matrix.process_batch(predn, pbatch, conf=self.args.conf)
200
+ if self.args.visualize:
201
+ self.confusion_matrix.plot_matches(batch["img"][si], pbatch["im_file"], self.save_dir)
200
202
 
201
203
  if no_pred:
202
204
  continue
203
205
 
204
206
  # Save
205
207
  if self.args.save_json:
206
- self.pred_to_json(predn, batch["im_file"][si])
208
+ self.pred_to_json(predn, pbatch)
207
209
  if self.args.save_txt:
208
210
  self.save_one_txt(
209
211
  predn,
210
212
  self.args.save_conf,
211
213
  pbatch["ori_shape"],
212
- self.save_dir / "labels" / f"{Path(batch['im_file'][si]).stem}.txt",
214
+ self.save_dir / "labels" / f"{Path(pbatch['im_file']).stem}.txt",
213
215
  )
214
216
 
215
217
  def finalize_metrics(self) -> None:
@@ -360,18 +362,24 @@ class DetectionValidator(BaseValidator):
360
362
  boxes=torch.cat([predn["bboxes"], predn["conf"].unsqueeze(-1), predn["cls"].unsqueeze(-1)], dim=1),
361
363
  ).save_txt(file, save_conf=save_conf)
362
364
 
363
- def pred_to_json(self, predn: Dict[str, torch.Tensor], filename: str) -> None:
365
+ def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
364
366
  """
365
367
  Serialize YOLO predictions to COCO json format.
366
368
 
367
369
  Args:
368
370
  predn (Dict[str, torch.Tensor]): Predictions dictionary containing 'bboxes', 'conf', and 'cls' keys
369
371
  with bounding box coordinates, confidence scores, and class predictions.
370
- filename (str): Image filename.
372
+ pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
371
373
  """
372
- stem = Path(filename).stem
374
+ stem = Path(pbatch["im_file"]).stem
373
375
  image_id = int(stem) if stem.isnumeric() else stem
374
- box = ops.xyxy2xywh(predn["bboxes"]) # xywh
376
+ box = ops.scale_boxes(
377
+ pbatch["imgsz"],
378
+ predn["bboxes"].clone(),
379
+ pbatch["ori_shape"],
380
+ ratio_pad=pbatch["ratio_pad"],
381
+ )
382
+ box = ops.xyxy2xywh(box) # xywh
375
383
  box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
376
384
  for b, s, c in zip(box.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
377
385
  self.jdict.append(
@@ -1,7 +1,7 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Tuple, Union
4
+ from typing import Any, Dict, List, Tuple
5
5
 
6
6
  import numpy as np
7
7
  import torch
@@ -67,6 +67,7 @@ class OBBValidator(DetectionValidator):
67
67
  super().init_metrics(model)
68
68
  val = self.data.get(self.args.split, "") # validation path
69
69
  self.is_dota = isinstance(val, str) and "DOTA" in val # check if dataset is DOTA format
70
+ self.confusion_matrix.task = "obb" # set confusion matrix task to 'obb'
70
71
 
71
72
  def _process_batch(self, preds: Dict[str, torch.Tensor], batch: Dict[str, torch.Tensor]) -> Dict[str, np.ndarray]:
72
73
  """
@@ -132,33 +133,14 @@ class OBBValidator(DetectionValidator):
132
133
  ratio_pad = batch["ratio_pad"][si]
133
134
  if len(cls):
134
135
  bbox[..., :4].mul_(torch.tensor(imgsz, device=self.device)[[1, 0, 1, 0]]) # target boxes
135
- ops.scale_boxes(imgsz, bbox, ori_shape, ratio_pad=ratio_pad, xywh=True) # native-space labels
136
- return {"cls": cls, "bboxes": bbox, "ori_shape": ori_shape, "imgsz": imgsz, "ratio_pad": ratio_pad}
137
-
138
- def _prepare_pred(self, pred: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
139
- """
140
- Prepare predictions by scaling bounding boxes to original image dimensions.
141
-
142
- This method takes prediction tensors containing bounding box coordinates and scales them from the model's
143
- input dimensions to the original image dimensions using the provided batch information.
144
-
145
- Args:
146
- pred (Dict[str, torch.Tensor]): Prediction dictionary containing bounding box coordinates and other information.
147
- pbatch (Dict[str, Any]): Dictionary containing batch information with keys:
148
- - imgsz (tuple): Model input image size.
149
- - ori_shape (tuple): Original image shape.
150
- - ratio_pad (tuple): Ratio and padding information for scaling.
151
-
152
- Returns:
153
- (Dict[str, torch.Tensor]): Scaled prediction dictionary with bounding boxes in original image dimensions.
154
- """
155
- cls = pred["cls"]
156
- if self.args.single_cls:
157
- cls *= 0
158
- bboxes = ops.scale_boxes(
159
- pbatch["imgsz"], pred["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"], xywh=True
160
- ) # native-space pred
161
- return {"bboxes": bboxes, "conf": pred["conf"], "cls": cls}
136
+ return {
137
+ "cls": cls,
138
+ "bboxes": bbox,
139
+ "ori_shape": ori_shape,
140
+ "imgsz": imgsz,
141
+ "ratio_pad": ratio_pad,
142
+ "im_file": batch["im_file"][si],
143
+ }
162
144
 
163
145
  def plot_predictions(self, batch: Dict[str, Any], preds: List[torch.Tensor], ni: int) -> None:
164
146
  """
@@ -180,23 +162,26 @@ class OBBValidator(DetectionValidator):
180
162
  p["bboxes"][:, :4] = ops.xywh2xyxy(p["bboxes"][:, :4]) # convert to xyxy format for plotting
181
163
  super().plot_predictions(batch, preds, ni) # plot bboxes
182
164
 
183
- def pred_to_json(self, predn: Dict[str, torch.Tensor], filename: Union[str, Path]) -> None:
165
+ def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
184
166
  """
185
167
  Convert YOLO predictions to COCO JSON format with rotated bounding box information.
186
168
 
187
169
  Args:
188
170
  predn (Dict[str, torch.Tensor]): Prediction dictionary containing 'bboxes', 'conf', and 'cls' keys
189
171
  with bounding box coordinates, confidence scores, and class predictions.
190
- filename (str | Path): Path to the image file for which predictions are being processed.
172
+ pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
191
173
 
192
174
  Notes:
193
175
  This method processes rotated bounding box predictions and converts them to both rbox format
194
176
  (x, y, w, h, angle) and polygon format (x1, y1, x2, y2, x3, y3, x4, y4) before adding them
195
177
  to the JSON dictionary.
196
178
  """
197
- stem = Path(filename).stem
179
+ stem = Path(pbatch["im_file"]).stem
198
180
  image_id = int(stem) if stem.isnumeric() else stem
199
181
  rbox = predn["bboxes"]
182
+ rbox = ops.scale_boxes(
183
+ pbatch["imgsz"], predn["bboxes"].clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"], xywh=True
184
+ ) # native-space pred
200
185
  poly = ops.xywhr2xyxyxyxy(rbox).view(-1, 8)
201
186
  for r, b, s, c in zip(rbox.tolist(), poly.tolist(), predn["conf"].tolist(), predn["cls"].tolist()):
202
187
  self.jdict.append(
@@ -167,34 +167,9 @@ class PoseValidator(DetectionValidator):
167
167
  kpts = kpts.clone()
168
168
  kpts[..., 0] *= w
169
169
  kpts[..., 1] *= h
170
- kpts = ops.scale_coords(pbatch["imgsz"], kpts, pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"])
171
170
  pbatch["keypoints"] = kpts
172
171
  return pbatch
173
172
 
174
- def _prepare_pred(self, pred: Dict[str, Any], pbatch: Dict[str, Any]) -> Dict[str, Any]:
175
- """
176
- Prepare and scale keypoints in predictions for pose processing.
177
-
178
- This method extends the parent class's _prepare_pred method to handle keypoint scaling. It first calls
179
- the parent method to get the basic prediction boxes, then extracts and scales the keypoint coordinates
180
- to match the original image dimensions.
181
-
182
- Args:
183
- pred (Dict[str, torch.Tensor]): Post-processed predictions from the model.
184
- pbatch (Dict[str, Any]): Processed batch dictionary containing image information including:
185
- - imgsz: Image size used for inference
186
- - ori_shape: Original image shape
187
- - ratio_pad: Ratio and padding information for coordinate scaling
188
-
189
- Returns:
190
- (Dict[str, Any]): Processed prediction dictionary with keypoints scaled to original image dimensions.
191
- """
192
- predn = super()._prepare_pred(pred, pbatch)
193
- predn["keypoints"] = ops.scale_coords(
194
- pbatch["imgsz"], pred.get("keypoints").clone(), pbatch["ori_shape"], ratio_pad=pbatch["ratio_pad"]
195
- )
196
- return predn
197
-
198
173
  def _process_batch(self, preds: Dict[str, torch.Tensor], batch: Dict[str, Any]) -> Dict[str, np.ndarray]:
199
174
  """
200
175
  Return correct prediction matrix by computing Intersection over Union (IoU) between detections and ground truth.
@@ -249,7 +224,7 @@ class PoseValidator(DetectionValidator):
249
224
  keypoints=predn["keypoints"],
250
225
  ).save_txt(file, save_conf=save_conf)
251
226
 
252
- def pred_to_json(self, predn: Dict[str, torch.Tensor], filename: str) -> None:
227
+ def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
253
228
  """
254
229
  Convert YOLO predictions to COCO JSON format.
255
230
 
@@ -259,32 +234,22 @@ class PoseValidator(DetectionValidator):
259
234
  Args:
260
235
  predn (Dict[str, torch.Tensor]): Prediction dictionary containing 'bboxes', 'conf', 'cls',
261
236
  and 'keypoints' tensors.
262
- filename (str): Path to the image file for which predictions are being processed.
237
+ pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
263
238
 
264
239
  Notes:
265
240
  The method extracts the image ID from the filename stem (either as an integer if numeric, or as a string),
266
241
  converts bounding boxes from xyxy to xywh format, and adjusts coordinates from center to top-left corner
267
242
  before saving to the JSON dictionary.
268
243
  """
269
- stem = Path(filename).stem
270
- image_id = int(stem) if stem.isnumeric() else stem
271
- box = ops.xyxy2xywh(predn["bboxes"]) # xywh
272
- box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
273
- for b, s, c, k in zip(
274
- box.tolist(),
275
- predn["conf"].tolist(),
276
- predn["cls"].tolist(),
277
- predn["keypoints"].flatten(1, 2).tolist(),
278
- ):
279
- self.jdict.append(
280
- {
281
- "image_id": image_id,
282
- "category_id": self.class_map[int(c)],
283
- "bbox": [round(x, 3) for x in b],
284
- "keypoints": k,
285
- "score": round(s, 5),
286
- }
287
- )
244
+ super().pred_to_json(predn, pbatch)
245
+ kpts = ops.scale_coords(
246
+ pbatch["imgsz"],
247
+ predn["keypoints"].clone(),
248
+ pbatch["ori_shape"],
249
+ ratio_pad=pbatch["ratio_pad"],
250
+ )
251
+ for i, k in enumerate(kpts.flatten(1, 2).tolist()):
252
+ self.jdict[-len(kpts) + i]["keypoints"] = k # keypoints
288
253
 
289
254
  def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
290
255
  """Evaluate object detection model using COCO JSON format."""
@@ -135,29 +135,6 @@ class SegmentationValidator(DetectionValidator):
135
135
  prepared_batch["masks"] = batch["masks"][midx]
136
136
  return prepared_batch
137
137
 
138
- def _prepare_pred(self, pred: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> Dict[str, torch.Tensor]:
139
- """
140
- Prepare predictions for evaluation by processing bounding boxes and masks.
141
-
142
- Args:
143
- pred (Dict[str, torch.Tensor]): Post-processed predictions from the model.
144
- pbatch (Dict[str, Any]): Prepared batch information.
145
-
146
- Returns:
147
- Dict[str, torch.Tensor]: Processed bounding box predictions.
148
- """
149
- predn = super()._prepare_pred(pred, pbatch)
150
- predn["masks"] = pred["masks"]
151
- if self.args.save_json and len(predn["masks"]):
152
- coco_masks = torch.as_tensor(pred["masks"], dtype=torch.uint8)
153
- coco_masks = ops.scale_image(
154
- coco_masks.permute(1, 2, 0).contiguous().cpu().numpy(),
155
- pbatch["ori_shape"],
156
- ratio_pad=pbatch["ratio_pad"],
157
- )
158
- predn["coco_masks"] = coco_masks
159
- return predn
160
-
161
138
  def _process_batch(self, preds: Dict[str, torch.Tensor], batch: Dict[str, Any]) -> Dict[str, np.ndarray]:
162
139
  """
163
140
  Compute correct prediction matrix for a batch based on bounding boxes and optional masks.
@@ -233,13 +210,13 @@ class SegmentationValidator(DetectionValidator):
233
210
  masks=torch.as_tensor(predn["masks"], dtype=torch.uint8),
234
211
  ).save_txt(file, save_conf=save_conf)
235
212
 
236
- def pred_to_json(self, predn: torch.Tensor, filename: str) -> None:
213
+ def pred_to_json(self, predn: Dict[str, torch.Tensor], pbatch: Dict[str, Any]) -> None:
237
214
  """
238
215
  Save one JSON result for COCO evaluation.
239
216
 
240
217
  Args:
241
218
  predn (Dict[str, torch.Tensor]): Predictions containing bboxes, masks, confidence scores, and classes.
242
- filename (str): Image filename.
219
+ pbatch (Dict[str, Any]): Batch dictionary containing 'imgsz', 'ori_shape', 'ratio_pad', and 'im_file'.
243
220
 
244
221
  Examples:
245
222
  >>> result = {"image_id": 42, "category_id": 18, "bbox": [258.15, 41.29, 348.26, 243.78], "score": 0.236}
@@ -252,23 +229,18 @@ class SegmentationValidator(DetectionValidator):
252
229
  rle["counts"] = rle["counts"].decode("utf-8")
253
230
  return rle
254
231
 
255
- stem = Path(filename).stem
256
- image_id = int(stem) if stem.isnumeric() else stem
257
- box = ops.xyxy2xywh(predn["bboxes"]) # xywh
258
- box[:, :2] -= box[:, 2:] / 2 # xy center to top-left corner
259
- pred_masks = np.transpose(predn["coco_masks"], (2, 0, 1))
232
+ coco_masks = torch.as_tensor(predn["masks"], dtype=torch.uint8)
233
+ coco_masks = ops.scale_image(
234
+ coco_masks.permute(1, 2, 0).contiguous().cpu().numpy(),
235
+ pbatch["ori_shape"],
236
+ ratio_pad=pbatch["ratio_pad"],
237
+ )
238
+ pred_masks = np.transpose(coco_masks, (2, 0, 1))
260
239
  with ThreadPool(NUM_THREADS) as pool:
261
240
  rles = pool.map(single_encode, pred_masks)
262
- for i, (b, s, c) in enumerate(zip(box.tolist(), predn["conf"].tolist(), predn["cls"].tolist())):
263
- self.jdict.append(
264
- {
265
- "image_id": image_id,
266
- "category_id": self.class_map[int(c)],
267
- "bbox": [round(x, 3) for x in b],
268
- "score": round(s, 5),
269
- "segmentation": rles[i],
270
- }
271
- )
241
+ super().pred_to_json(predn, pbatch)
242
+ for i, r in enumerate(rles):
243
+ self.jdict[-len(rles) + i]["segmentation"] = r # segmentation
272
244
 
273
245
  def eval_json(self, stats: Dict[str, Any]) -> Dict[str, Any]:
274
246
  """Return COCO-style instance segmentation evaluation metrics."""
@@ -118,12 +118,13 @@ class RegionCounter(BaseSolution):
118
118
  x1, y1, x2, y2 = map(int, region["polygon"].bounds)
119
119
  pts = [(x1, y1), (x2, y1), (x2, y2), (x1, y2)]
120
120
  annotator.draw_region(pts, region["region_color"], self.line_width * 2)
121
- annotator.text_label(
121
+ annotator.adaptive_label(
122
122
  [x1, y1, x2, y2],
123
123
  label=str(region["counts"]),
124
124
  color=region["region_color"],
125
125
  txt_color=region["text_color"],
126
126
  margin=self.line_width * 4,
127
+ shape="rect",
127
128
  )
128
129
  region["counts"] = 0 # Reset for next frame
129
130
  plot_im = annotator.result()
@@ -8,7 +8,6 @@ import numpy as np
8
8
  from PIL import Image
9
9
 
10
10
  from ultralytics.data.utils import IMG_FORMATS
11
- from ultralytics.nn.text_model import build_text_model
12
11
  from ultralytics.utils import LOGGER
13
12
  from ultralytics.utils.checks import check_requirements
14
13
  from ultralytics.utils.torch_utils import select_device
@@ -48,6 +47,8 @@ class VisualAISearch:
48
47
 
49
48
  def __init__(self, **kwargs: Any) -> None:
50
49
  """Initialize the VisualAISearch class with FAISS index and CLIP model."""
50
+ from ultralytics.nn.text_model import build_text_model
51
+
51
52
  check_requirements("faiss-cpu")
52
53
 
53
54
  self.faiss = __import__("faiss")