ultralytics 8.3.219__tar.gz → 8.3.220__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 (288) hide show
  1. {ultralytics-8.3.219 → ultralytics-8.3.220}/PKG-INFO +1 -1
  2. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_cli.py +8 -1
  3. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_exports.py +37 -9
  4. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/__init__.py +1 -1
  5. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/default.yaml +1 -1
  6. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/exporter.py +57 -4
  7. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/predictor.py +1 -0
  8. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/autobackend.py +27 -0
  9. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/similarity_search.py +2 -2
  10. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/torch_utils.py +1 -0
  11. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics.egg-info/PKG-INFO +1 -1
  12. {ultralytics-8.3.219 → ultralytics-8.3.220}/LICENSE +0 -0
  13. {ultralytics-8.3.219 → ultralytics-8.3.220}/README.md +0 -0
  14. {ultralytics-8.3.219 → ultralytics-8.3.220}/pyproject.toml +0 -0
  15. {ultralytics-8.3.219 → ultralytics-8.3.220}/setup.cfg +0 -0
  16. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/__init__.py +0 -0
  17. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/conftest.py +0 -0
  18. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_cuda.py +0 -0
  19. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_engine.py +0 -0
  20. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_integrations.py +0 -0
  21. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_python.py +0 -0
  22. {ultralytics-8.3.219 → ultralytics-8.3.220}/tests/test_solutions.py +0 -0
  23. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/assets/bus.jpg +0 -0
  24. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/assets/zidane.jpg +0 -0
  25. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/__init__.py +0 -0
  26. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/Argoverse.yaml +0 -0
  27. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/DOTAv1.5.yaml +0 -0
  28. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/DOTAv1.yaml +0 -0
  29. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/GlobalWheat2020.yaml +0 -0
  30. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/HomeObjects-3K.yaml +0 -0
  31. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/ImageNet.yaml +0 -0
  32. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/Objects365.yaml +0 -0
  33. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/SKU-110K.yaml +0 -0
  34. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/VOC.yaml +0 -0
  35. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/VisDrone.yaml +0 -0
  36. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/african-wildlife.yaml +0 -0
  37. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/brain-tumor.yaml +0 -0
  38. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/carparts-seg.yaml +0 -0
  39. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco-pose.yaml +0 -0
  40. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco.yaml +0 -0
  41. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco128-seg.yaml +0 -0
  42. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco128.yaml +0 -0
  43. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco8-grayscale.yaml +0 -0
  44. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco8-multispectral.yaml +0 -0
  45. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco8-pose.yaml +0 -0
  46. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco8-seg.yaml +0 -0
  47. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/coco8.yaml +0 -0
  48. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/construction-ppe.yaml +0 -0
  49. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/crack-seg.yaml +0 -0
  50. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/dog-pose.yaml +0 -0
  51. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/dota8-multispectral.yaml +0 -0
  52. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/dota8.yaml +0 -0
  53. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/hand-keypoints.yaml +0 -0
  54. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/lvis.yaml +0 -0
  55. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/medical-pills.yaml +0 -0
  56. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/open-images-v7.yaml +0 -0
  57. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/package-seg.yaml +0 -0
  58. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/signature.yaml +0 -0
  59. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/tiger-pose.yaml +0 -0
  60. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/datasets/xView.yaml +0 -0
  61. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml +0 -0
  62. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yolo11-cls.yaml +0 -0
  63. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yolo11-obb.yaml +0 -0
  64. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yolo11-pose.yaml +0 -0
  65. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yolo11-seg.yaml +0 -0
  66. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yolo11.yaml +0 -0
  67. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yoloe-11-seg.yaml +0 -0
  68. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/11/yoloe-11.yaml +0 -0
  69. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/12/yolo12-cls.yaml +0 -0
  70. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/12/yolo12-obb.yaml +0 -0
  71. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/12/yolo12-pose.yaml +0 -0
  72. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/12/yolo12-seg.yaml +0 -0
  73. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/12/yolo12.yaml +0 -0
  74. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/rt-detr/rtdetr-l.yaml +0 -0
  75. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/rt-detr/rtdetr-resnet101.yaml +0 -0
  76. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/rt-detr/rtdetr-resnet50.yaml +0 -0
  77. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/rt-detr/rtdetr-x.yaml +0 -0
  78. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v10/yolov10b.yaml +0 -0
  79. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v10/yolov10l.yaml +0 -0
  80. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v10/yolov10m.yaml +0 -0
  81. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v10/yolov10n.yaml +0 -0
  82. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v10/yolov10s.yaml +0 -0
  83. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v10/yolov10x.yaml +0 -0
  84. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v3/yolov3-spp.yaml +0 -0
  85. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v3/yolov3-tiny.yaml +0 -0
  86. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v3/yolov3.yaml +0 -0
  87. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v5/yolov5-p6.yaml +0 -0
  88. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v5/yolov5.yaml +0 -0
  89. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v6/yolov6.yaml +0 -0
  90. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yoloe-v8-seg.yaml +0 -0
  91. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yoloe-v8.yaml +0 -0
  92. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-cls-resnet101.yaml +0 -0
  93. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-cls-resnet50.yaml +0 -0
  94. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-cls.yaml +0 -0
  95. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-ghost-p2.yaml +0 -0
  96. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-ghost-p6.yaml +0 -0
  97. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-ghost.yaml +0 -0
  98. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-obb.yaml +0 -0
  99. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-p2.yaml +0 -0
  100. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-p6.yaml +0 -0
  101. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-pose-p6.yaml +0 -0
  102. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-pose.yaml +0 -0
  103. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-rtdetr.yaml +0 -0
  104. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-seg-p6.yaml +0 -0
  105. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-seg.yaml +0 -0
  106. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-world.yaml +0 -0
  107. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8-worldv2.yaml +0 -0
  108. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v8/yolov8.yaml +0 -0
  109. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9c-seg.yaml +0 -0
  110. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9c.yaml +0 -0
  111. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9e-seg.yaml +0 -0
  112. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9e.yaml +0 -0
  113. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9m.yaml +0 -0
  114. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9s.yaml +0 -0
  115. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/models/v9/yolov9t.yaml +0 -0
  116. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/trackers/botsort.yaml +0 -0
  117. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/cfg/trackers/bytetrack.yaml +0 -0
  118. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/__init__.py +0 -0
  119. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/annotator.py +0 -0
  120. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/augment.py +0 -0
  121. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/base.py +0 -0
  122. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/build.py +0 -0
  123. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/converter.py +0 -0
  124. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/dataset.py +0 -0
  125. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/loaders.py +0 -0
  126. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/scripts/download_weights.sh +0 -0
  127. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/scripts/get_coco.sh +0 -0
  128. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/scripts/get_coco128.sh +0 -0
  129. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/scripts/get_imagenet.sh +0 -0
  130. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/split.py +0 -0
  131. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/split_dota.py +0 -0
  132. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/data/utils.py +0 -0
  133. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/__init__.py +0 -0
  134. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/model.py +0 -0
  135. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/results.py +0 -0
  136. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/trainer.py +0 -0
  137. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/tuner.py +0 -0
  138. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/engine/validator.py +0 -0
  139. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/hub/__init__.py +0 -0
  140. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/hub/auth.py +0 -0
  141. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/hub/google/__init__.py +0 -0
  142. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/hub/session.py +0 -0
  143. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/hub/utils.py +0 -0
  144. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/__init__.py +0 -0
  145. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/fastsam/__init__.py +0 -0
  146. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/fastsam/model.py +0 -0
  147. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/fastsam/predict.py +0 -0
  148. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/fastsam/utils.py +0 -0
  149. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/fastsam/val.py +0 -0
  150. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/nas/__init__.py +0 -0
  151. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/nas/model.py +0 -0
  152. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/nas/predict.py +0 -0
  153. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/nas/val.py +0 -0
  154. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/rtdetr/__init__.py +0 -0
  155. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/rtdetr/model.py +0 -0
  156. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/rtdetr/predict.py +0 -0
  157. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/rtdetr/train.py +0 -0
  158. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/rtdetr/val.py +0 -0
  159. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/__init__.py +0 -0
  160. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/amg.py +0 -0
  161. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/build.py +0 -0
  162. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/model.py +0 -0
  163. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/__init__.py +0 -0
  164. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/blocks.py +0 -0
  165. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/decoders.py +0 -0
  166. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/encoders.py +0 -0
  167. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/memory_attention.py +0 -0
  168. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/sam.py +0 -0
  169. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/tiny_encoder.py +0 -0
  170. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/transformer.py +0 -0
  171. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/modules/utils.py +0 -0
  172. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/sam/predict.py +0 -0
  173. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/utils/__init__.py +0 -0
  174. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/utils/loss.py +0 -0
  175. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/utils/ops.py +0 -0
  176. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/__init__.py +0 -0
  177. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/classify/__init__.py +0 -0
  178. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/classify/predict.py +0 -0
  179. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/classify/train.py +0 -0
  180. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/classify/val.py +0 -0
  181. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/detect/__init__.py +0 -0
  182. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/detect/predict.py +0 -0
  183. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/detect/train.py +0 -0
  184. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/detect/val.py +0 -0
  185. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/model.py +0 -0
  186. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/obb/__init__.py +0 -0
  187. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/obb/predict.py +0 -0
  188. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/obb/train.py +0 -0
  189. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/obb/val.py +0 -0
  190. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/pose/__init__.py +0 -0
  191. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/pose/predict.py +0 -0
  192. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/pose/train.py +0 -0
  193. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/pose/val.py +0 -0
  194. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/segment/__init__.py +0 -0
  195. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/segment/predict.py +0 -0
  196. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/segment/train.py +0 -0
  197. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/segment/val.py +0 -0
  198. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/world/__init__.py +0 -0
  199. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/world/train.py +0 -0
  200. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/world/train_world.py +0 -0
  201. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/yoloe/__init__.py +0 -0
  202. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/yoloe/predict.py +0 -0
  203. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/yoloe/train.py +0 -0
  204. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/yoloe/train_seg.py +0 -0
  205. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/models/yolo/yoloe/val.py +0 -0
  206. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/__init__.py +0 -0
  207. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/__init__.py +0 -0
  208. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/activation.py +0 -0
  209. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/block.py +0 -0
  210. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/conv.py +0 -0
  211. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/head.py +0 -0
  212. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/transformer.py +0 -0
  213. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/modules/utils.py +0 -0
  214. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/tasks.py +0 -0
  215. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/nn/text_model.py +0 -0
  216. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/py.typed +0 -0
  217. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/__init__.py +0 -0
  218. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/ai_gym.py +0 -0
  219. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/analytics.py +0 -0
  220. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/config.py +0 -0
  221. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/distance_calculation.py +0 -0
  222. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/heatmap.py +0 -0
  223. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/instance_segmentation.py +0 -0
  224. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/object_blurrer.py +0 -0
  225. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/object_counter.py +0 -0
  226. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/object_cropper.py +0 -0
  227. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/parking_management.py +0 -0
  228. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/queue_management.py +0 -0
  229. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/region_counter.py +0 -0
  230. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/security_alarm.py +0 -0
  231. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/solutions.py +0 -0
  232. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/speed_estimation.py +0 -0
  233. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/streamlit_inference.py +0 -0
  234. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/templates/similarity-search.html +0 -0
  235. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/trackzone.py +0 -0
  236. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/solutions/vision_eye.py +0 -0
  237. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/__init__.py +0 -0
  238. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/basetrack.py +0 -0
  239. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/bot_sort.py +0 -0
  240. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/byte_tracker.py +0 -0
  241. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/track.py +0 -0
  242. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/utils/__init__.py +0 -0
  243. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/utils/gmc.py +0 -0
  244. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/utils/kalman_filter.py +0 -0
  245. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/trackers/utils/matching.py +0 -0
  246. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/__init__.py +0 -0
  247. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/autobatch.py +0 -0
  248. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/autodevice.py +0 -0
  249. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/benchmarks.py +0 -0
  250. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/__init__.py +0 -0
  251. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/base.py +0 -0
  252. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/clearml.py +0 -0
  253. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/comet.py +0 -0
  254. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/dvc.py +0 -0
  255. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/hub.py +0 -0
  256. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/mlflow.py +0 -0
  257. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/neptune.py +0 -0
  258. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/platform.py +0 -0
  259. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/raytune.py +0 -0
  260. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/tensorboard.py +0 -0
  261. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/callbacks/wb.py +0 -0
  262. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/checks.py +0 -0
  263. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/cpu.py +0 -0
  264. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/dist.py +0 -0
  265. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/downloads.py +0 -0
  266. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/errors.py +0 -0
  267. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/events.py +0 -0
  268. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/export/__init__.py +0 -0
  269. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/export/imx.py +0 -0
  270. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/files.py +0 -0
  271. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/git.py +0 -0
  272. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/instance.py +0 -0
  273. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/logger.py +0 -0
  274. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/loss.py +0 -0
  275. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/metrics.py +0 -0
  276. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/nms.py +0 -0
  277. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/ops.py +0 -0
  278. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/patches.py +0 -0
  279. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/plotting.py +0 -0
  280. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/tal.py +0 -0
  281. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/tqdm.py +0 -0
  282. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/triton.py +0 -0
  283. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics/utils/tuner.py +0 -0
  284. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics.egg-info/SOURCES.txt +0 -0
  285. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics.egg-info/dependency_links.txt +0 -0
  286. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics.egg-info/entry_points.txt +0 -0
  287. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics.egg-info/requires.txt +0 -0
  288. {ultralytics-8.3.219 → ultralytics-8.3.220}/ultralytics.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.219
3
+ Version: 8.3.220
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -8,7 +8,7 @@ from PIL import Image
8
8
 
9
9
  from tests import CUDA_DEVICE_COUNT, CUDA_IS_AVAILABLE, MODELS, TASK_MODEL_DATA
10
10
  from ultralytics.utils import ARM64, ASSETS, LINUX, WEIGHTS_DIR, checks
11
- from ultralytics.utils.torch_utils import TORCH_1_11
11
+ from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_2_9, WINDOWS
12
12
 
13
13
 
14
14
  def run(cmd: str) -> None:
@@ -129,3 +129,10 @@ def test_train_gpu(task: str, model: str, data: str) -> None:
129
129
  def test_solutions(solution: str) -> None:
130
130
  """Test yolo solutions command-line modes."""
131
131
  run(f"yolo solutions {solution} verbose=False")
132
+
133
+
134
+ @pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10 or not TORCH_2_9, reason="Requires Python>=3.10 and Torch>=2.9.0")
135
+ @pytest.mark.skipif(WINDOWS, reason="Skipping test on Windows")
136
+ def test_export_executorch() -> None:
137
+ """Test exporting a YOLO model to ExecuTorch format via CLI."""
138
+ run("yolo export model=yolo11n.pt format=executorch imgsz=32")
@@ -12,15 +12,8 @@ import pytest
12
12
  from tests import MODEL, SOURCE
13
13
  from ultralytics import YOLO
14
14
  from ultralytics.cfg import TASK2DATA, TASK2MODEL, TASKS
15
- from ultralytics.utils import (
16
- ARM64,
17
- IS_RASPBERRYPI,
18
- LINUX,
19
- MACOS,
20
- WINDOWS,
21
- checks,
22
- )
23
- from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13, TORCH_2_1
15
+ from ultralytics.utils import ARM64, IS_RASPBERRYPI, LINUX, MACOS, WINDOWS, checks
16
+ from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13, TORCH_2_1, TORCH_2_9
24
17
 
25
18
 
26
19
  def test_export_torchscript():
@@ -262,3 +255,38 @@ def test_export_imx():
262
255
  model = YOLO("yolov8n.pt")
263
256
  file = model.export(format="imx", imgsz=32)
264
257
  YOLO(file)(SOURCE, imgsz=32)
258
+
259
+
260
+ @pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10 or not TORCH_2_9, reason="Requires Python>=3.10 and Torch>=2.9.0")
261
+ @pytest.mark.skipif(WINDOWS, reason="Skipping test on Windows")
262
+ def test_export_executorch():
263
+ """Test YOLO model export to ExecuTorch format."""
264
+ file = YOLO(MODEL).export(format="executorch", imgsz=32)
265
+ assert Path(file).exists(), f"ExecuTorch export failed, directory not found: {file}"
266
+ # Check that .pte file exists in the exported directory
267
+ pte_file = Path(file) / Path(MODEL).with_suffix(".pte").name
268
+ assert pte_file.exists(), f"ExecuTorch .pte file not found: {pte_file}"
269
+ # Check that metadata.yaml exists
270
+ metadata_file = Path(file) / "metadata.yaml"
271
+ assert metadata_file.exists(), f"ExecuTorch metadata.yaml not found: {metadata_file}"
272
+ # Note: Inference testing skipped as ExecuTorch requires special runtime setup
273
+ shutil.rmtree(file, ignore_errors=True) # cleanup
274
+
275
+
276
+ @pytest.mark.slow
277
+ @pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10 or not TORCH_2_9, reason="Requires Python>=3.10 and Torch>=2.9.0")
278
+ @pytest.mark.skipif(WINDOWS, reason="Skipping test on Windows")
279
+ @pytest.mark.parametrize("task", TASKS)
280
+ def test_export_executorch_matrix(task):
281
+ """Test YOLO export to ExecuTorch format for various task types."""
282
+ file = YOLO(TASK2MODEL[task]).export(format="executorch", imgsz=32)
283
+ assert Path(file).exists(), f"ExecuTorch export failed for task '{task}', directory not found: {file}"
284
+ # Check that .pte file exists in the exported directory
285
+ model_name = Path(TASK2MODEL[task]).with_suffix(".pte").name
286
+ pte_file = Path(file) / model_name
287
+ assert pte_file.exists(), f"ExecuTorch .pte file not found for task '{task}': {pte_file}"
288
+ # Check that metadata.yaml exists
289
+ metadata_file = Path(file) / "metadata.yaml"
290
+ assert metadata_file.exists(), f"ExecuTorch metadata.yaml not found for task '{task}': {metadata_file}"
291
+ # Note: Inference testing skipped as ExecuTorch requires special runtime setup
292
+ shutil.rmtree(file, ignore_errors=True) # cleanup
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.219"
3
+ __version__ = "8.3.220"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -80,7 +80,7 @@ show_boxes: True # (bool) draw bounding boxes on images
80
80
  line_width: # (int, optional) line width of boxes; auto-scales with image size if not set
81
81
 
82
82
  # Export settings ------------------------------------------------------------------------------------------------------
83
- format: torchscript # (str) target format, e.g. torchscript|onnx|openvino|engine|coreml|saved_model|pb|tflite|edgetpu|tfjs|paddle|mnn|ncnn|imx|rknn
83
+ format: torchscript # (str) target format, e.g. torchscript|onnx|openvino|engine|coreml|saved_model|pb|tflite|edgetpu|tfjs|paddle|mnn|ncnn|imx|rknn|executorch
84
84
  keras: False # (bool) TF SavedModel only (format=saved_model); enable Keras layers during export
85
85
  optimize: False # (bool) TorchScript only; apply mobile optimizations to the scripted model
86
86
  int8: False # (bool) INT8/PTQ where supported (openvino, tflite, tfjs, engine, imx); needs calibration data/fraction
@@ -20,6 +20,7 @@ MNN | `mnn` | yolo11n.mnn
20
20
  NCNN | `ncnn` | yolo11n_ncnn_model/
21
21
  IMX | `imx` | yolo11n_imx_model/
22
22
  RKNN | `rknn` | yolo11n_rknn_model/
23
+ ExecuTorch | `executorch` | yolo11n_executorch_model/
23
24
 
24
25
  Requirements:
25
26
  $ pip install "ultralytics[export]"
@@ -48,6 +49,7 @@ Inference:
48
49
  yolo11n_ncnn_model # NCNN
49
50
  yolo11n_imx_model # IMX
50
51
  yolo11n_rknn_model # RKNN
52
+ yolo11n_executorch_model # ExecuTorch
51
53
 
52
54
  TensorFlow.js:
53
55
  $ cd .. && git clone https://github.com/zldrobit/tfjs-yolov5-example.git && cd tfjs-yolov5-example
@@ -112,7 +114,7 @@ from ultralytics.utils.metrics import batch_probiou
112
114
  from ultralytics.utils.nms import TorchNMS
113
115
  from ultralytics.utils.ops import Profile
114
116
  from ultralytics.utils.patches import arange_patch
115
- from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13, TORCH_2_1, TORCH_2_4, select_device
117
+ from ultralytics.utils.torch_utils import TORCH_1_11, TORCH_1_13, TORCH_2_1, TORCH_2_4, TORCH_2_9, select_device
116
118
 
117
119
 
118
120
  def export_formats():
@@ -148,6 +150,7 @@ def export_formats():
148
150
  ["NCNN", "ncnn", "_ncnn_model", True, True, ["batch", "half"]],
149
151
  ["IMX", "imx", "_imx_model", True, True, ["int8", "fraction", "nms"]],
150
152
  ["RKNN", "rknn", "_rknn_model", False, False, ["batch", "name"]],
153
+ ["ExecuTorch", "executorch", "_executorch_model", False, False, ["batch"]],
151
154
  ]
152
155
  return dict(zip(["Format", "Argument", "Suffix", "CPU", "GPU", "Arguments"], zip(*x)))
153
156
 
@@ -322,9 +325,24 @@ class Exporter:
322
325
  flags = [x == fmt for x in fmts]
323
326
  if sum(flags) != 1:
324
327
  raise ValueError(f"Invalid export format='{fmt}'. Valid formats are {fmts}")
325
- (jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, mnn, ncnn, imx, rknn) = (
326
- flags # export booleans
327
- )
328
+ (
329
+ jit,
330
+ onnx,
331
+ xml,
332
+ engine,
333
+ coreml,
334
+ saved_model,
335
+ pb,
336
+ tflite,
337
+ edgetpu,
338
+ tfjs,
339
+ paddle,
340
+ mnn,
341
+ ncnn,
342
+ imx,
343
+ rknn,
344
+ executorch,
345
+ ) = flags # export booleans
328
346
 
329
347
  is_tf_format = any((saved_model, pb, tflite, edgetpu, tfjs))
330
348
 
@@ -543,6 +561,8 @@ class Exporter:
543
561
  f[13] = self.export_imx()
544
562
  if rknn:
545
563
  f[14] = self.export_rknn()
564
+ if executorch:
565
+ f[15] = self.export_executorch()
546
566
 
547
567
  # Finish
548
568
  f = [str(x) for x in f if x] # filter out '' and None
@@ -1122,6 +1142,39 @@ class Exporter:
1122
1142
  f = saved_model / f"{self.file.stem}_float32.tflite"
1123
1143
  return str(f)
1124
1144
 
1145
+ @try_export
1146
+ def export_executorch(self, prefix=colorstr("ExecuTorch:")):
1147
+ """Exports a model to ExecuTorch (.pte) format into a dedicated directory and saves the required metadata,
1148
+ following Ultralytics conventions.
1149
+ """
1150
+ LOGGER.info(f"\n{prefix} starting export with ExecuTorch...")
1151
+ assert TORCH_2_9, f"ExecuTorch export requires torch>=2.9.0 but torch=={TORCH_VERSION} is installed"
1152
+ # TorchAO release compatibility table bug https://github.com/pytorch/ao/issues/2919
1153
+ # Setuptools bug: https://github.com/pypa/setuptools/issues/4483
1154
+ check_requirements("setuptools<71.0.0") # Setuptools bug: https://github.com/pypa/setuptools/issues/4483
1155
+ check_requirements(("executorch==1.0.0", "flatbuffers"))
1156
+
1157
+ import torch
1158
+ from executorch.backends.xnnpack.partition.xnnpack_partitioner import XnnpackPartitioner
1159
+ from executorch.exir import to_edge_transform_and_lower
1160
+
1161
+ file_directory = Path(str(self.file).replace(self.file.suffix, "_executorch_model"))
1162
+ file_directory.mkdir(parents=True, exist_ok=True)
1163
+
1164
+ file_pte = file_directory / self.file.with_suffix(".pte").name
1165
+ sample_inputs = (self.im,)
1166
+
1167
+ et_program = to_edge_transform_and_lower(
1168
+ torch.export.export(self.model, sample_inputs), partitioner=[XnnpackPartitioner()]
1169
+ ).to_executorch()
1170
+
1171
+ with open(file_pte, "wb") as file:
1172
+ file.write(et_program.buffer)
1173
+
1174
+ YAML.save(file_directory / "metadata.yaml", self.metadata)
1175
+
1176
+ return str(file_directory)
1177
+
1125
1178
  @try_export
1126
1179
  def export_edgetpu(self, tflite_model="", prefix=colorstr("Edge TPU:")):
1127
1180
  """Export YOLO model to Edge TPU format https://coral.ai/docs/edgetpu/models-intro/."""
@@ -30,6 +30,7 @@ Usage - formats:
30
30
  yolo11n_ncnn_model # NCNN
31
31
  yolo11n_imx_model # Sony IMX
32
32
  yolo11n_rknn_model # Rockchip RKNN
33
+ yolo11n.pte # PyTorch Executorch
33
34
  """
34
35
 
35
36
  from __future__ import annotations
@@ -96,6 +96,8 @@ class AutoBackend(nn.Module):
96
96
  | NCNN | *_ncnn_model/ |
97
97
  | IMX | *_imx_model/ |
98
98
  | RKNN | *_rknn_model/ |
99
+ | Triton Inference | triton://model |
100
+ | ExecuTorch | *.pte |
99
101
 
100
102
  Attributes:
101
103
  model (torch.nn.Module): The loaded YOLO model.
@@ -122,6 +124,7 @@ class AutoBackend(nn.Module):
122
124
  imx (bool): Whether the model is an IMX model.
123
125
  rknn (bool): Whether the model is an RKNN model.
124
126
  triton (bool): Whether the model is a Triton Inference Server model.
127
+ pte (bool): Whether the model is a PyTorch ExecuTorch model.
125
128
 
126
129
  Methods:
127
130
  forward: Run inference on an input image.
@@ -176,6 +179,7 @@ class AutoBackend(nn.Module):
176
179
  ncnn,
177
180
  imx,
178
181
  rknn,
182
+ pte,
179
183
  triton,
180
184
  ) = self._model_type("" if nn_module else model)
181
185
  fp16 &= pt or jit or onnx or xml or engine or nn_module or triton # FP16
@@ -570,6 +574,25 @@ class AutoBackend(nn.Module):
570
574
  rknn_model.init_runtime()
571
575
  metadata = w.parent / "metadata.yaml"
572
576
 
577
+ # ExecuTorch
578
+ elif pte:
579
+ LOGGER.info(f"Loading {w} for ExecuTorch inference...")
580
+ # TorchAO release compatibility table bug https://github.com/pytorch/ao/issues/2919
581
+ check_requirements("setuptools<71.0.0") # Setuptools bug: https://github.com/pypa/setuptools/issues/4483
582
+ check_requirements(("executorch==1.0.0", "flatbuffers"))
583
+ from executorch.runtime import Runtime
584
+
585
+ w = Path(w)
586
+ if w.is_dir():
587
+ model_file = next(w.rglob("*.pte"))
588
+ metadata = w / "metadata.yaml"
589
+ else:
590
+ model_file = w
591
+ metadata = w.parent / "metadata.yaml"
592
+
593
+ program = Runtime.get().load_program(str(model_file))
594
+ model = program.load_method("forward")
595
+
573
596
  # Any other format (unsupported)
574
597
  else:
575
598
  from ultralytics.engine.exporter import export_formats
@@ -773,6 +796,10 @@ class AutoBackend(nn.Module):
773
796
  im = im if isinstance(im, (list, tuple)) else [im]
774
797
  y = self.rknn_model.inference(inputs=im)
775
798
 
799
+ # ExecuTorch
800
+ elif self.pte:
801
+ y = self.model.execute([im])
802
+
776
803
  # TensorFlow (SavedModel, GraphDef, Lite, Edge TPU)
777
804
  else:
778
805
  im = im.cpu().numpy()
@@ -78,11 +78,11 @@ class VisualAISearch:
78
78
 
79
79
  def extract_image_feature(self, path: Path) -> np.ndarray:
80
80
  """Extract CLIP image embedding from the given image path."""
81
- return self.model.encode_image(Image.open(path)).cpu().numpy()
81
+ return self.model.encode_image(Image.open(path)).detach().cpu().numpy()
82
82
 
83
83
  def extract_text_feature(self, text: str) -> np.ndarray:
84
84
  """Extract CLIP text embedding from the given text query."""
85
- return self.model.encode_text(self.model.tokenize([text])).cpu().numpy()
85
+ return self.model.encode_text(self.model.tokenize([text])).detach().cpu().numpy()
86
86
 
87
87
  def load_or_build_index(self) -> None:
88
88
  """
@@ -44,6 +44,7 @@ TORCH_1_13 = check_version(TORCH_VERSION, "1.13.0")
44
44
  TORCH_2_0 = check_version(TORCH_VERSION, "2.0.0")
45
45
  TORCH_2_1 = check_version(TORCH_VERSION, "2.1.0")
46
46
  TORCH_2_4 = check_version(TORCH_VERSION, "2.4.0")
47
+ TORCH_2_9 = check_version(TORCH_VERSION, "2.9.0")
47
48
  TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
48
49
  TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
49
50
  TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.219
3
+ Version: 8.3.220
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
File without changes
File without changes
File without changes