ultralytics 8.2.94__tar.gz → 8.2.96__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (238) hide show
  1. {ultralytics-8.2.94/ultralytics.egg-info → ultralytics-8.2.96}/PKG-INFO +20 -26
  2. {ultralytics-8.2.94 → ultralytics-8.2.96}/README.md +19 -25
  3. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/__init__.py +3 -2
  4. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_python.py +40 -7
  5. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/__init__.py +1 -1
  6. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/results.py +85 -1
  7. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/trainer.py +6 -5
  8. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/validator.py +2 -1
  9. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/tasks.py +4 -0
  10. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/parking_management.py +81 -111
  11. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/checks.py +3 -2
  12. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/torch_utils.py +8 -5
  13. {ultralytics-8.2.94 → ultralytics-8.2.96/ultralytics.egg-info}/PKG-INFO +20 -26
  14. {ultralytics-8.2.94 → ultralytics-8.2.96}/LICENSE +0 -0
  15. {ultralytics-8.2.94 → ultralytics-8.2.96}/pyproject.toml +0 -0
  16. {ultralytics-8.2.94 → ultralytics-8.2.96}/setup.cfg +0 -0
  17. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/conftest.py +0 -0
  18. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_cli.py +0 -0
  19. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_cuda.py +0 -0
  20. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_engine.py +0 -0
  21. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_explorer.py +0 -0
  22. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_exports.py +0 -0
  23. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_integrations.py +0 -0
  24. {ultralytics-8.2.94 → ultralytics-8.2.96}/tests/test_solutions.py +0 -0
  25. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/assets/bus.jpg +0 -0
  26. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/assets/zidane.jpg +0 -0
  27. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/__init__.py +0 -0
  28. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  29. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  30. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  31. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  32. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  33. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  34. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  35. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  36. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  37. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  38. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  39. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  40. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  41. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco.yaml +0 -0
  42. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  43. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  44. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  45. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  46. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  47. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  48. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  49. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  50. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  51. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  52. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/signature.yaml +0 -0
  53. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  54. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/datasets/xView.yaml +0 -0
  55. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/default.yaml +0 -0
  56. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  57. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  58. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  59. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  60. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  61. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  62. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  63. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  64. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  65. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  66. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  67. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  68. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  69. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  70. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  71. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  72. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  73. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  74. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  75. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  76. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  77. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  78. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  79. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  80. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  81. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  82. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  83. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  84. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  85. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  86. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  87. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  88. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  89. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  90. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  91. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  92. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  93. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  94. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  95. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  96. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  97. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  98. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/__init__.py +0 -0
  99. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/annotator.py +0 -0
  100. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/augment.py +0 -0
  101. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/base.py +0 -0
  102. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/build.py +0 -0
  103. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/converter.py +0 -0
  104. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/dataset.py +0 -0
  105. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/explorer/__init__.py +0 -0
  106. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/explorer/explorer.py +0 -0
  107. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/explorer/gui/__init__.py +0 -0
  108. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/explorer/gui/dash.py +0 -0
  109. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/explorer/utils.py +0 -0
  110. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/loaders.py +0 -0
  111. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/split_dota.py +0 -0
  112. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/data/utils.py +0 -0
  113. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/__init__.py +0 -0
  114. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/exporter.py +0 -0
  115. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/model.py +0 -0
  116. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/predictor.py +0 -0
  117. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/engine/tuner.py +0 -0
  118. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/hub/__init__.py +0 -0
  119. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/hub/auth.py +0 -0
  120. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/hub/google/__init__.py +0 -0
  121. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/hub/session.py +0 -0
  122. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/hub/utils.py +0 -0
  123. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/__init__.py +0 -0
  124. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/fastsam/__init__.py +0 -0
  125. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/fastsam/model.py +0 -0
  126. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/fastsam/predict.py +0 -0
  127. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/fastsam/utils.py +0 -0
  128. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/fastsam/val.py +0 -0
  129. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/nas/__init__.py +0 -0
  130. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/nas/model.py +0 -0
  131. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/nas/predict.py +0 -0
  132. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/nas/val.py +0 -0
  133. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/rtdetr/__init__.py +0 -0
  134. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/rtdetr/model.py +0 -0
  135. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/rtdetr/predict.py +0 -0
  136. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/rtdetr/train.py +0 -0
  137. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/rtdetr/val.py +0 -0
  138. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/__init__.py +0 -0
  139. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/amg.py +0 -0
  140. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/build.py +0 -0
  141. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/model.py +0 -0
  142. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/__init__.py +0 -0
  143. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/blocks.py +0 -0
  144. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/decoders.py +0 -0
  145. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/encoders.py +0 -0
  146. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  147. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/sam.py +0 -0
  148. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  149. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/transformer.py +0 -0
  150. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/modules/utils.py +0 -0
  151. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/sam/predict.py +0 -0
  152. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/utils/__init__.py +0 -0
  153. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/utils/loss.py +0 -0
  154. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/utils/ops.py +0 -0
  155. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/__init__.py +0 -0
  156. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/__init__.py +0 -0
  157. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/predict.py +0 -0
  158. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/train.py +0 -0
  159. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/classify/val.py +0 -0
  160. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/__init__.py +0 -0
  161. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/predict.py +0 -0
  162. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/train.py +0 -0
  163. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/detect/val.py +0 -0
  164. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/model.py +0 -0
  165. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/__init__.py +0 -0
  166. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/predict.py +0 -0
  167. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/train.py +0 -0
  168. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/obb/val.py +0 -0
  169. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/__init__.py +0 -0
  170. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/predict.py +0 -0
  171. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/train.py +0 -0
  172. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/pose/val.py +0 -0
  173. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/__init__.py +0 -0
  174. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/predict.py +0 -0
  175. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/train.py +0 -0
  176. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/segment/val.py +0 -0
  177. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/world/__init__.py +0 -0
  178. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/world/train.py +0 -0
  179. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/models/yolo/world/train_world.py +0 -0
  180. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/__init__.py +0 -0
  181. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/autobackend.py +0 -0
  182. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/__init__.py +0 -0
  183. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/activation.py +0 -0
  184. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/block.py +0 -0
  185. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/conv.py +0 -0
  186. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/head.py +0 -0
  187. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/transformer.py +0 -0
  188. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/nn/modules/utils.py +0 -0
  189. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/__init__.py +0 -0
  190. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/ai_gym.py +0 -0
  191. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/analytics.py +0 -0
  192. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/distance_calculation.py +0 -0
  193. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/heatmap.py +0 -0
  194. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/object_counter.py +0 -0
  195. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/queue_management.py +0 -0
  196. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/speed_estimation.py +0 -0
  197. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/solutions/streamlit_inference.py +0 -0
  198. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/__init__.py +0 -0
  199. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/basetrack.py +0 -0
  200. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/bot_sort.py +0 -0
  201. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/byte_tracker.py +0 -0
  202. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/track.py +0 -0
  203. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/utils/__init__.py +0 -0
  204. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/utils/gmc.py +0 -0
  205. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  206. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/trackers/utils/matching.py +0 -0
  207. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/__init__.py +0 -0
  208. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/autobatch.py +0 -0
  209. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/benchmarks.py +0 -0
  210. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/__init__.py +0 -0
  211. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/base.py +0 -0
  212. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/clearml.py +0 -0
  213. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/comet.py +0 -0
  214. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/dvc.py +0 -0
  215. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/hub.py +0 -0
  216. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/mlflow.py +0 -0
  217. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/neptune.py +0 -0
  218. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/raytune.py +0 -0
  219. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  220. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/callbacks/wb.py +0 -0
  221. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/dist.py +0 -0
  222. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/downloads.py +0 -0
  223. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/errors.py +0 -0
  224. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/files.py +0 -0
  225. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/instance.py +0 -0
  226. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/loss.py +0 -0
  227. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/metrics.py +0 -0
  228. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/ops.py +0 -0
  229. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/patches.py +0 -0
  230. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/plotting.py +0 -0
  231. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/tal.py +0 -0
  232. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/triton.py +0 -0
  233. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics/utils/tuner.py +0 -0
  234. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics.egg-info/SOURCES.txt +0 -0
  235. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics.egg-info/dependency_links.txt +0 -0
  236. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics.egg-info/entry_points.txt +0 -0
  237. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics.egg-info/requires.txt +0 -0
  238. {ultralytics-8.2.94 → ultralytics-8.2.96}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.94
3
+ Version: 8.2.96
4
4
  Summary: Ultralytics YOLO for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -172,14 +172,25 @@ YOLOv8 may also be used directly in a Python environment, and accepts the same [
172
172
  from ultralytics import YOLO
173
173
 
174
174
  # Load a model
175
- model = YOLO("yolov8n.yaml") # build a new model from scratch
176
- model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
177
-
178
- # Use the model
179
- model.train(data="coco8.yaml", epochs=3) # train the model
180
- metrics = model.val() # evaluate model performance on the validation set
181
- results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
182
- path = model.export(format="onnx") # export the model to ONNX format
175
+ model = YOLO("yolov8n.pt")
176
+
177
+ # Train the model
178
+ train_results = model.train(
179
+ data="coco8.yaml", # path to dataset YAML
180
+ epochs=100, # number of training epochs
181
+ imgsz=640, # training image size
182
+ device="cpu", # device to run on, i.e. device=0 or device=0,1,2,3 or device=cpu
183
+ )
184
+
185
+ # Evaluate model performance on the validation set
186
+ metrics = model.val()
187
+
188
+ # Perform object detection on an image
189
+ results = model("path/to/image.jpg")
190
+ results[0].show()
191
+
192
+ # Export the model to ONNX format
193
+ path = model.export(format="onnx") # return path to exported model
183
194
  ```
184
195
 
185
196
  See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples.
@@ -224,23 +235,6 @@ See [Detection Docs](https://docs.ultralytics.com/tasks/detect/) for usage examp
224
235
 
225
236
  </details>
226
237
 
227
- <details><summary>Detection (Open Image V7)</summary>
228
-
229
- See [Detection Docs](https://docs.ultralytics.com/tasks/detect/) for usage examples with these models trained on [Open Image V7](https://docs.ultralytics.com/datasets/detect/open-images-v7/), which include 600 pre-trained classes.
230
-
231
- | Model | size<br><sup>(pixels) | mAP<sup>val<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>A100 TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
232
- | ----------------------------------------------------------------------------------------- | --------------------- | -------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
233
- | [YOLOv8n](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-oiv7.pt) | 640 | 18.4 | 142.4 | 1.21 | 3.5 | 10.5 |
234
- | [YOLOv8s](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-oiv7.pt) | 640 | 27.7 | 183.1 | 1.40 | 11.4 | 29.7 |
235
- | [YOLOv8m](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-oiv7.pt) | 640 | 33.6 | 408.5 | 2.26 | 26.2 | 80.6 |
236
- | [YOLOv8l](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-oiv7.pt) | 640 | 34.9 | 596.9 | 2.43 | 44.1 | 167.4 |
237
- | [YOLOv8x](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-oiv7.pt) | 640 | 36.3 | 860.6 | 3.56 | 68.7 | 260.6 |
238
-
239
- - **mAP<sup>val</sup>** values are for single-model single-scale on [Open Image V7](https://docs.ultralytics.com/datasets/detect/open-images-v7/) dataset. <br>Reproduce by `yolo val detect data=open-images-v7.yaml device=0`
240
- - **Speed** averaged over Open Image V7 val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. <br>Reproduce by `yolo val detect data=open-images-v7.yaml batch=1 device=0|cpu`
241
-
242
- </details>
243
-
244
238
  <details><summary>Segmentation (COCO)</summary>
245
239
 
246
240
  See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage examples with these models trained on [COCO-Seg](https://docs.ultralytics.com/datasets/segment/coco/), which include 80 pre-trained classes.
@@ -87,14 +87,25 @@ YOLOv8 may also be used directly in a Python environment, and accepts the same [
87
87
  from ultralytics import YOLO
88
88
 
89
89
  # Load a model
90
- model = YOLO("yolov8n.yaml") # build a new model from scratch
91
- model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
92
-
93
- # Use the model
94
- model.train(data="coco8.yaml", epochs=3) # train the model
95
- metrics = model.val() # evaluate model performance on the validation set
96
- results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
97
- path = model.export(format="onnx") # export the model to ONNX format
90
+ model = YOLO("yolov8n.pt")
91
+
92
+ # Train the model
93
+ train_results = model.train(
94
+ data="coco8.yaml", # path to dataset YAML
95
+ epochs=100, # number of training epochs
96
+ imgsz=640, # training image size
97
+ device="cpu", # device to run on, i.e. device=0 or device=0,1,2,3 or device=cpu
98
+ )
99
+
100
+ # Evaluate model performance on the validation set
101
+ metrics = model.val()
102
+
103
+ # Perform object detection on an image
104
+ results = model("path/to/image.jpg")
105
+ results[0].show()
106
+
107
+ # Export the model to ONNX format
108
+ path = model.export(format="onnx") # return path to exported model
98
109
  ```
99
110
 
100
111
  See YOLOv8 [Python Docs](https://docs.ultralytics.com/usage/python/) for more examples.
@@ -139,23 +150,6 @@ See [Detection Docs](https://docs.ultralytics.com/tasks/detect/) for usage examp
139
150
 
140
151
  </details>
141
152
 
142
- <details><summary>Detection (Open Image V7)</summary>
143
-
144
- See [Detection Docs](https://docs.ultralytics.com/tasks/detect/) for usage examples with these models trained on [Open Image V7](https://docs.ultralytics.com/datasets/detect/open-images-v7/), which include 600 pre-trained classes.
145
-
146
- | Model | size<br><sup>(pixels) | mAP<sup>val<br>50-95 | Speed<br><sup>CPU ONNX<br>(ms) | Speed<br><sup>A100 TensorRT<br>(ms) | params<br><sup>(M) | FLOPs<br><sup>(B) |
147
- | ----------------------------------------------------------------------------------------- | --------------------- | -------------------- | ------------------------------ | ----------------------------------- | ------------------ | ----------------- |
148
- | [YOLOv8n](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8n-oiv7.pt) | 640 | 18.4 | 142.4 | 1.21 | 3.5 | 10.5 |
149
- | [YOLOv8s](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8s-oiv7.pt) | 640 | 27.7 | 183.1 | 1.40 | 11.4 | 29.7 |
150
- | [YOLOv8m](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8m-oiv7.pt) | 640 | 33.6 | 408.5 | 2.26 | 26.2 | 80.6 |
151
- | [YOLOv8l](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8l-oiv7.pt) | 640 | 34.9 | 596.9 | 2.43 | 44.1 | 167.4 |
152
- | [YOLOv8x](https://github.com/ultralytics/assets/releases/download/v8.2.0/yolov8x-oiv7.pt) | 640 | 36.3 | 860.6 | 3.56 | 68.7 | 260.6 |
153
-
154
- - **mAP<sup>val</sup>** values are for single-model single-scale on [Open Image V7](https://docs.ultralytics.com/datasets/detect/open-images-v7/) dataset. <br>Reproduce by `yolo val detect data=open-images-v7.yaml device=0`
155
- - **Speed** averaged over Open Image V7 val images using an [Amazon EC2 P4d](https://aws.amazon.com/ec2/instance-types/p4/) instance. <br>Reproduce by `yolo val detect data=open-images-v7.yaml batch=1 device=0|cpu`
156
-
157
- </details>
158
-
159
153
  <details><summary>Segmentation (COCO)</summary>
160
154
 
161
155
  See [Segmentation Docs](https://docs.ultralytics.com/tasks/segment/) for usage examples with these models trained on [COCO-Seg](https://docs.ultralytics.com/datasets/segment/coco/), which include 80 pre-trained classes.
@@ -1,13 +1,13 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks, is_dir_writeable
3
+ from ultralytics.utils import ASSETS, ROOT, WEIGHTS_DIR, checks
4
4
 
5
5
  # Constants used in tests
6
6
  MODEL = WEIGHTS_DIR / "path with spaces" / "yolov8n.pt" # test spaces in path
7
7
  CFG = "yolov8n.yaml"
8
8
  SOURCE = ASSETS / "bus.jpg"
9
+ SOURCES_LIST = [ASSETS / "bus.jpg", ASSETS, ASSETS / "*", ASSETS / "**/*.jpg"]
9
10
  TMP = (ROOT / "../tests/tmp").resolve() # temp directory for test files
10
- IS_TMP_WRITEABLE = is_dir_writeable(TMP)
11
11
  CUDA_IS_AVAILABLE = checks.cuda_is_available()
12
12
  CUDA_DEVICE_COUNT = checks.cuda_device_count()
13
13
 
@@ -15,6 +15,7 @@ __all__ = (
15
15
  "MODEL",
16
16
  "CFG",
17
17
  "SOURCE",
18
+ "SOURCES_LIST",
18
19
  "TMP",
19
20
  "IS_TMP_WRITEABLE",
20
21
  "CUDA_IS_AVAILABLE",
@@ -1,6 +1,7 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
3
  import contextlib
4
+ import csv
4
5
  import urllib
5
6
  from copy import copy
6
7
  from pathlib import Path
@@ -12,7 +13,7 @@ import torch
12
13
  import yaml
13
14
  from PIL import Image
14
15
 
15
- from tests import CFG, IS_TMP_WRITEABLE, MODEL, SOURCE, TMP
16
+ from tests import CFG, MODEL, SOURCE, SOURCES_LIST, TMP
16
17
  from ultralytics import RTDETR, YOLO
17
18
  from ultralytics.cfg import MODELS, TASK2DATA, TASKS
18
19
  from ultralytics.data.build import load_inference_source
@@ -26,11 +27,14 @@ from ultralytics.utils import (
26
27
  WEIGHTS_DIR,
27
28
  WINDOWS,
28
29
  checks,
30
+ is_dir_writeable,
29
31
  is_github_action_running,
30
32
  )
31
33
  from ultralytics.utils.downloads import download
32
34
  from ultralytics.utils.torch_utils import TORCH_1_9
33
35
 
36
+ IS_TMP_WRITEABLE = is_dir_writeable(TMP) # WARNING: must be run once tests start as TMP does not exist on tests/init
37
+
34
38
 
35
39
  def test_model_forward():
36
40
  """Test the forward pass of the YOLO model."""
@@ -70,11 +74,37 @@ def test_model_profile():
70
74
  @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
71
75
  def test_predict_txt():
72
76
  """Tests YOLO predictions with file, directory, and pattern sources listed in a text file."""
73
- txt_file = TMP / "sources.txt"
74
- with open(txt_file, "w") as f:
75
- for x in [ASSETS / "bus.jpg", ASSETS, ASSETS / "*", ASSETS / "**/*.jpg"]:
76
- f.write(f"{x}\n")
77
- _ = YOLO(MODEL)(source=txt_file, imgsz=32)
77
+ file = TMP / "sources_multi_row.txt"
78
+ with open(file, "w") as f:
79
+ for src in SOURCES_LIST:
80
+ f.write(f"{src}\n")
81
+ results = YOLO(MODEL)(source=file, imgsz=32)
82
+ assert len(results) == 7 # 1 + 2 + 2 + 2 = 7 images
83
+
84
+
85
+ @pytest.mark.skipif(True, reason="disabled for testing")
86
+ @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
87
+ def test_predict_csv_multi_row():
88
+ """Tests YOLO predictions with sources listed in multiple rows of a CSV file."""
89
+ file = TMP / "sources_multi_row.csv"
90
+ with open(file, "w", newline="") as f:
91
+ writer = csv.writer(f)
92
+ writer.writerow(["source"])
93
+ writer.writerows([[src] for src in SOURCES_LIST])
94
+ results = YOLO(MODEL)(source=file, imgsz=32)
95
+ assert len(results) == 7 # 1 + 2 + 2 + 2 = 7 images
96
+
97
+
98
+ @pytest.mark.skipif(True, reason="disabled for testing")
99
+ @pytest.mark.skipif(not IS_TMP_WRITEABLE, reason="directory is not writeable")
100
+ def test_predict_csv_single_row():
101
+ """Tests YOLO predictions with sources listed in a single row of a CSV file."""
102
+ file = TMP / "sources_single_row.csv"
103
+ with open(file, "w", newline="") as f:
104
+ writer = csv.writer(f)
105
+ writer.writerow(SOURCES_LIST)
106
+ results = YOLO(MODEL)(source=file, imgsz=32)
107
+ assert len(results) == 7 # 1 + 2 + 2 + 2 = 7 images
78
108
 
79
109
 
80
110
  @pytest.mark.parametrize("model_name", MODELS)
@@ -239,7 +269,10 @@ def test_results(model):
239
269
  r = r.to(device="cpu", dtype=torch.float32)
240
270
  r.save_txt(txt_file=TMP / "runs/tests/label.txt", save_conf=True)
241
271
  r.save_crop(save_dir=TMP / "runs/tests/crops/")
242
- r.tojson(normalize=True)
272
+ r.to_json(normalize=True)
273
+ r.to_df(decimals=3)
274
+ r.to_csv()
275
+ r.to_xml()
243
276
  r.plot(pil=True)
244
277
  r.plot(conf=True, boxes=True)
245
278
  print(r, len(r), r.path) # print after methods
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.94"
3
+ __version__ = "8.2.96"
4
4
 
5
5
 
6
6
  import os
@@ -14,6 +14,7 @@ import torch
14
14
 
15
15
  from ultralytics.data.augment import LetterBox
16
16
  from ultralytics.utils import LOGGER, SimpleClass, ops
17
+ from ultralytics.utils.checks import check_requirements
17
18
  from ultralytics.utils.plotting import Annotator, colors, save_one_box
18
19
  from ultralytics.utils.torch_utils import smart_inference_mode
19
20
 
@@ -818,7 +819,90 @@ class Results(SimpleClass):
818
819
 
819
820
  return results
820
821
 
822
+ def to_df(self, normalize=False, decimals=5):
823
+ """
824
+ Converts detection results to a Pandas Dataframe.
825
+
826
+ This method converts the detection results into Pandas Dataframe format. It includes information
827
+ about detected objects such as bounding boxes, class names, confidence scores, and optionally
828
+ segmentation masks and keypoints.
829
+
830
+ Args:
831
+ normalize (bool): Whether to normalize the bounding box coordinates by the image dimensions.
832
+ If True, coordinates will be returned as float values between 0 and 1. Defaults to False.
833
+ decimals (int): Number of decimal places to round the output values to. Defaults to 5.
834
+
835
+ Returns:
836
+ (DataFrame): A Pandas Dataframe containing all the information in results in an organized way.
837
+
838
+ Examples:
839
+ >>> results = model("path/to/image.jpg")
840
+ >>> df_result = results[0].to_df()
841
+ >>> print(df_result)
842
+ """
843
+ import pandas as pd
844
+
845
+ return pd.DataFrame(self.summary(normalize=normalize, decimals=decimals))
846
+
847
+ def to_csv(self, normalize=False, decimals=5, *args, **kwargs):
848
+ """
849
+ Converts detection results to a CSV format.
850
+
851
+ This method serializes the detection results into a CSV format. It includes information
852
+ about detected objects such as bounding boxes, class names, confidence scores, and optionally
853
+ segmentation masks and keypoints.
854
+
855
+ Args:
856
+ normalize (bool): Whether to normalize the bounding box coordinates by the image dimensions.
857
+ If True, coordinates will be returned as float values between 0 and 1. Defaults to False.
858
+ decimals (int): Number of decimal places to round the output values to. Defaults to 5.
859
+ *args (Any): Variable length argument list to be passed to pandas.DataFrame.to_csv().
860
+ **kwargs (Any): Arbitrary keyword arguments to be passed to pandas.DataFrame.to_csv().
861
+
862
+
863
+ Returns:
864
+ (str): CSV containing all the information in results in an organized way.
865
+
866
+ Examples:
867
+ >>> results = model("path/to/image.jpg")
868
+ >>> csv_result = results[0].to_csv()
869
+ >>> print(csv_result)
870
+ """
871
+ return self.to_df(normalize=normalize, decimals=decimals).to_csv(*args, **kwargs)
872
+
873
+ def to_xml(self, normalize=False, decimals=5, *args, **kwargs):
874
+ """
875
+ Converts detection results to XML format.
876
+
877
+ This method serializes the detection results into an XML format. It includes information
878
+ about detected objects such as bounding boxes, class names, confidence scores, and optionally
879
+ segmentation masks and keypoints.
880
+
881
+ Args:
882
+ normalize (bool): Whether to normalize the bounding box coordinates by the image dimensions.
883
+ If True, coordinates will be returned as float values between 0 and 1. Defaults to False.
884
+ decimals (int): Number of decimal places to round the output values to. Defaults to 5.
885
+ *args (Any): Variable length argument list to be passed to pandas.DataFrame.to_xml().
886
+ **kwargs (Any): Arbitrary keyword arguments to be passed to pandas.DataFrame.to_xml().
887
+
888
+ Returns:
889
+ (str): An XML string containing all the information in results in an organized way.
890
+
891
+ Examples:
892
+ >>> results = model("path/to/image.jpg")
893
+ >>> xml_result = results[0].to_xml()
894
+ >>> print(xml_result)
895
+ """
896
+ check_requirements("lxml")
897
+ df = self.to_df(normalize=normalize, decimals=decimals)
898
+ return '<?xml version="1.0" encoding="utf-8"?>\n<root></root>' if df.empty else df.to_xml(*args, **kwargs)
899
+
821
900
  def tojson(self, normalize=False, decimals=5):
901
+ """Deprecated version of to_json()."""
902
+ LOGGER.warning("WARNING ⚠️ 'result.tojson()' is deprecated, replace with 'result.to_json()'.")
903
+ return self.to_json(normalize, decimals)
904
+
905
+ def to_json(self, normalize=False, decimals=5):
822
906
  """
823
907
  Converts detection results to JSON format.
824
908
 
@@ -836,7 +920,7 @@ class Results(SimpleClass):
836
920
 
837
921
  Examples:
838
922
  >>> results = model("path/to/image.jpg")
839
- >>> json_result = results[0].tojson()
923
+ >>> json_result = results[0].to_json()
840
924
  >>> print(json_result)
841
925
 
842
926
  Notes:
@@ -668,13 +668,14 @@ class BaseTrainer:
668
668
 
669
669
  def final_eval(self):
670
670
  """Performs final evaluation and validation for object detection YOLO model."""
671
+ ckpt = {}
671
672
  for f in self.last, self.best:
672
673
  if f.exists():
673
- strip_optimizer(f) # strip optimizers
674
- if f is self.best:
675
- if self.last.is_file(): # update best.pt train_metrics from last.pt
676
- k = "train_results"
677
- torch.save({**torch.load(self.best), **{k: torch.load(self.last)[k]}}, self.best)
674
+ if f is self.last:
675
+ ckpt = strip_optimizer(f)
676
+ elif f is self.best:
677
+ k = "train_results" # update best.pt train_metrics from last.pt
678
+ strip_optimizer(f, updates={k: ckpt[k]} if k in ckpt else None)
678
679
  LOGGER.info(f"\nValidating {f}...")
679
680
  self.validator.args.plots = self.args.plots
680
681
  self.metrics = self.validator(model=f)
@@ -110,7 +110,8 @@ class BaseValidator:
110
110
  if self.training:
111
111
  self.device = trainer.device
112
112
  self.data = trainer.data
113
- self.args.half = self.device.type != "cpu" # force FP16 val during training
113
+ # force FP16 val during training
114
+ self.args.half = self.device.type != "cpu" and trainer.amp
114
115
  model = trainer.ema.ema or trainer.model
115
116
  model = model.half() if self.args.half else model.float()
116
117
  # self.model = model
@@ -759,6 +759,10 @@ class SafeClass:
759
759
  """Initialize SafeClass instance, ignoring all arguments."""
760
760
  pass
761
761
 
762
+ def __call__(self, *args, **kwargs):
763
+ """Run SafeClass instance, ignoring all arguments."""
764
+ pass
765
+
762
766
 
763
767
  class SafeUnpickler(pickle.Unpickler):
764
768
  """Custom Unpickler that replaces unknown classes with SafeClass."""