ultralytics-opencv-headless 8.3.251__py3-none-any.whl → 8.3.253__py3-none-any.whl

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.
ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
- __version__ = "8.3.251"
3
+ __version__ = "8.3.253"
4
4
 
5
5
  import importlib
6
6
  import os
@@ -505,6 +505,7 @@ class Exporter:
505
505
  m.format = self.args.format
506
506
  m.max_det = self.args.max_det
507
507
  m.xyxy = self.args.nms and not coreml
508
+ m.shape = None # reset cached shape for new export input size
508
509
  if hasattr(model, "pe") and hasattr(m, "fuse"): # for YOLOE models
509
510
  m.fuse(model.pe.to(self.device))
510
511
  elif isinstance(m, C2f) and not is_tf_format:
@@ -812,11 +813,11 @@ class Exporter:
812
813
  assert not IS_JETSON, "Jetson Paddle exports not supported yet"
813
814
  check_requirements(
814
815
  (
815
- "paddlepaddle-gpu"
816
+ "paddlepaddle-gpu>=3.0.0,!=3.3.0" # exclude 3.3.0 https://github.com/PaddlePaddle/Paddle/issues/77340
816
817
  if torch.cuda.is_available()
817
818
  else "paddlepaddle==3.0.0" # pin 3.0.0 for ARM64
818
819
  if ARM64
819
- else "paddlepaddle>=3.0.0",
820
+ else "paddlepaddle>=3.0.0,!=3.3.0", # exclude 3.3.0 https://github.com/PaddlePaddle/Paddle/issues/77340
820
821
  "x2paddle",
821
822
  )
822
823
  )
@@ -859,7 +860,8 @@ class Exporter:
859
860
  @try_export
860
861
  def export_ncnn(self, prefix=colorstr("NCNN:")):
861
862
  """Export YOLO model to NCNN format using PNNX https://github.com/pnnx/pnnx."""
862
- check_requirements("ncnn", cmds="--no-deps") # no deps to avoid installing opencv-python
863
+ # use git source for ARM64 due to broken PyPI packages https://github.com/Tencent/ncnn/issues/6509
864
+ check_requirements("git+https://github.com/Tencent/ncnn.git" if ARM64 else "ncnn", cmds="--no-deps")
863
865
  check_requirements("pnnx")
864
866
  import ncnn
865
867
  import pnnx
@@ -497,11 +497,11 @@ class AutoBackend(nn.Module):
497
497
  elif paddle:
498
498
  LOGGER.info(f"Loading {w} for PaddlePaddle inference...")
499
499
  check_requirements(
500
- "paddlepaddle-gpu"
500
+ "paddlepaddle-gpu>=3.0.0,!=3.3.0" # exclude 3.3.0 https://github.com/PaddlePaddle/Paddle/issues/77340
501
501
  if torch.cuda.is_available()
502
502
  else "paddlepaddle==3.0.0" # pin 3.0.0 for ARM64
503
503
  if ARM64
504
- else "paddlepaddle>=3.0.0"
504
+ else "paddlepaddle>=3.0.0,!=3.3.0" # exclude 3.3.0 https://github.com/PaddlePaddle/Paddle/issues/77340
505
505
  )
506
506
  import paddle.inference as pdi
507
507
 
@@ -545,11 +545,17 @@ class AutoBackend(nn.Module):
545
545
  # NCNN
546
546
  elif ncnn:
547
547
  LOGGER.info(f"Loading {w} for NCNN inference...")
548
+ # use git source for ARM64 due to broken PyPI packages https://github.com/Tencent/ncnn/issues/6509
548
549
  check_requirements("git+https://github.com/Tencent/ncnn.git" if ARM64 else "ncnn", cmds="--no-deps")
549
550
  import ncnn as pyncnn
550
551
 
551
552
  net = pyncnn.Net()
552
- net.opt.use_vulkan_compute = cuda
553
+ if isinstance(cuda, torch.device):
554
+ net.opt.use_vulkan_compute = cuda
555
+ elif isinstance(device, str) and device.startswith("vulkan"):
556
+ net.opt.use_vulkan_compute = True
557
+ net.set_vulkan_device(int(device.split(":")[1]))
558
+ device = torch.device("cpu")
553
559
  w = Path(w)
554
560
  if not w.is_file(): # if not *.param
555
561
  w = next(w.glob("*.param")) # get *.param file from *_ncnn_model dir
@@ -2,6 +2,7 @@
2
2
 
3
3
  import os
4
4
  import platform
5
+ import re
5
6
  import socket
6
7
  import sys
7
8
  from concurrent.futures import ThreadPoolExecutor
@@ -12,6 +13,14 @@ from ultralytics.utils import ENVIRONMENT, GIT, LOGGER, PYTHON_VERSION, RANK, SE
12
13
 
13
14
  PREFIX = colorstr("Platform: ")
14
15
 
16
+
17
+ def slugify(text):
18
+ """Convert text to URL-safe slug (e.g., 'My Project 1' -> 'my-project-1')."""
19
+ if not text:
20
+ return text
21
+ return re.sub(r"-+", "-", re.sub(r"[^a-z0-9\s-]", "", str(text).lower()).replace(" ", "-")).strip("-")[:128]
22
+
23
+
15
24
  try:
16
25
  assert not TESTS_RUNNING # do not log pytest
17
26
  assert SETTINGS.get("platform", False) is True or os.getenv("ULTRALYTICS_API_KEY") or SETTINGS.get("api_key")
@@ -249,6 +258,14 @@ def _get_environment_info():
249
258
  return env
250
259
 
251
260
 
261
+ def _get_project_name(trainer):
262
+ """Get slugified project and name from trainer args."""
263
+ raw = str(trainer.args.project)
264
+ parts = raw.split("/", 1)
265
+ project = f"{parts[0]}/{slugify(parts[1])}" if len(parts) == 2 else slugify(raw)
266
+ return project, slugify(str(trainer.args.name or "train"))
267
+
268
+
252
269
  def on_pretrain_routine_start(trainer):
253
270
  """Initialize Platform logging at training start."""
254
271
  if RANK not in {-1, 0} or not trainer.args.project:
@@ -258,7 +275,7 @@ def on_pretrain_routine_start(trainer):
258
275
  trainer._platform_model_id = None
259
276
  trainer._platform_last_upload = time()
260
277
 
261
- project, name = str(trainer.args.project), str(trainer.args.name or "train")
278
+ project, name = _get_project_name(trainer)
262
279
  url = f"https://alpha.ultralytics.com/{project}/{name}"
263
280
  LOGGER.info(f"{PREFIX}Streaming to {url}")
264
281
 
@@ -305,7 +322,7 @@ def on_fit_epoch_end(trainer):
305
322
  if RANK not in {-1, 0} or not trainer.args.project:
306
323
  return
307
324
 
308
- project, name = str(trainer.args.project), str(trainer.args.name or "train")
325
+ project, name = _get_project_name(trainer)
309
326
  metrics = {**trainer.label_loss_items(trainer.tloss, prefix="train"), **trainer.metrics}
310
327
 
311
328
  if trainer.optimizer and trainer.optimizer.param_groups:
@@ -365,7 +382,7 @@ def on_model_save(trainer):
365
382
  if not model_path:
366
383
  return
367
384
 
368
- project, name = str(trainer.args.project), str(trainer.args.name or "train")
385
+ project, name = _get_project_name(trainer)
369
386
  _upload_model_async(model_path, project, name)
370
387
  trainer._platform_last_upload = time()
371
388
 
@@ -375,7 +392,7 @@ def on_train_end(trainer):
375
392
  if RANK not in {-1, 0} or not trainer.args.project:
376
393
  return
377
394
 
378
- project, name = str(trainer.args.project), str(trainer.args.name or "train")
395
+ project, name = _get_project_name(trainer)
379
396
 
380
397
  # Stop console capture
381
398
  if hasattr(trainer, "_platform_console_logger") and trainer._platform_console_logger:
@@ -219,7 +219,7 @@ def torch2imx(
219
219
  Examples:
220
220
  >>> from ultralytics import YOLO
221
221
  >>> model = YOLO("yolo11n.pt")
222
- >>> path, _ = export_imx(model, "model.imx", conf=0.25, iou=0.45, max_det=300)
222
+ >>> path, _ = export_imx(model, "model.imx", conf=0.25, iou=0.7, max_det=300)
223
223
 
224
224
  Notes:
225
225
  - Requires model_compression_toolkit, onnx, edgemdt_tpc, and edge-mdt-cl packages
ultralytics/utils/tal.py CHANGED
@@ -354,7 +354,8 @@ def make_anchors(feats, strides, grid_cell_offset=0.5):
354
354
  anchor_points, stride_tensor = [], []
355
355
  assert feats is not None
356
356
  dtype, device = feats[0].dtype, feats[0].device
357
- for i, stride in enumerate(strides):
357
+ for i in range(len(feats)): # use len(feats) to avoid TracerWarning from iterating over strides tensor
358
+ stride = strides[i]
358
359
  h, w = feats[i].shape[2:] if isinstance(feats, list) else (int(feats[i][0]), int(feats[i][1]))
359
360
  sx = torch.arange(end=w, device=device, dtype=dtype) + grid_cell_offset # shift x
360
361
  sy = torch.arange(end=h, device=device, dtype=dtype) + grid_cell_offset # shift y
@@ -157,7 +157,7 @@ def select_device(device="", newline=False, verbose=True):
157
157
  Notes:
158
158
  Sets the 'CUDA_VISIBLE_DEVICES' environment variable for specifying which GPUs to use.
159
159
  """
160
- if isinstance(device, torch.device) or str(device).startswith(("tpu", "intel")):
160
+ if isinstance(device, torch.device) or str(device).startswith(("tpu", "intel", "vulkan")):
161
161
  return device
162
162
 
163
163
  s = f"Ultralytics {__version__} 🚀 Python-{PYTHON_VERSION} torch-{TORCH_VERSION} "
ultralytics/utils/tqdm.py CHANGED
@@ -317,7 +317,10 @@ class TQDM:
317
317
  # Final display
318
318
  if self.total and self.n >= self.total:
319
319
  self.n = self.total
320
- self._display(final=True)
320
+ if self.n != self.last_print_n: # Skip if 100% already shown
321
+ self._display(final=True)
322
+ else:
323
+ self._display(final=True)
321
324
 
322
325
  # Cleanup
323
326
  if self.leave:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics-opencv-headless
3
- Version: 8.3.251
3
+ Version: 8.3.253
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>
@@ -7,7 +7,7 @@ tests/test_exports.py,sha256=5G5EgDmars6d-N7TVnJdDFWId0IJs-yw03DvdQIjrNU,14246
7
7
  tests/test_integrations.py,sha256=6QgSh9n0J04RdUYz08VeVOnKmf4S5MDEQ0chzS7jo_c,6220
8
8
  tests/test_python.py,sha256=viMvRajIbDZdm64hRRg9i8qZ1sU9frwB69e56mxwEXk,29266
9
9
  tests/test_solutions.py,sha256=CIaphpmOXgz9AE9xcm1RWODKrwGfZLCc84IggGXArNM,14122
10
- ultralytics/__init__.py,sha256=j9-lnGcbIIGF2MHagQOsp9qgxboU8IyawT1JqTp00zI,1302
10
+ ultralytics/__init__.py,sha256=cqnBNS4T-JWe8DwcLEN_GwX_fpL1gxiWwY8LjwC8sEo,1302
11
11
  ultralytics/py.typed,sha256=la67KBlbjXN-_-DfGNcdOcjYumVpKG_Tkw-8n5dnGB4,8
12
12
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
13
13
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
@@ -123,7 +123,7 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
123
123
  ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
124
124
  ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
125
125
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
126
- ultralytics/engine/exporter.py,sha256=Ncf5GK5xAqSu0DH-6z5V53qZB7LstDJFTMF5a-7VQfs,72639
126
+ ultralytics/engine/exporter.py,sha256=Lvs2vHcBP7YeHxYhyD7dvEshnNeYn5IzRHhdA7VRfbY,72997
127
127
  ultralytics/engine/model.py,sha256=1Ex0Q7XOwWWtTsTMk-7O4wWiA2cYGayKJwB3zDC1XTg,53223
128
128
  ultralytics/engine/predictor.py,sha256=neYmNDX27Vv3ggk9xqaKlH6XzB2vlFIghU5o7ZC0zFo,22838
129
129
  ultralytics/engine/results.py,sha256=DomI01voqR_i7v8LhDGb6jWCprWB4H6I436GSO2NMBY,68030
@@ -210,7 +210,7 @@ ultralytics/models/yolo/yoloe/train.py,sha256=giX6zDu5Z3z48PCaBHzu7v9NH3BrpUaGAY
210
210
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=0hRByMXsEJA-J2B1wXDMVhiW9f9MOTj3LlrGTibN6Ww,4919
211
211
  ultralytics/models/yolo/yoloe/val.py,sha256=utUFWeFKRFWZrPr1y3A8ztbTwdoWMYqzlwBN7CQ0tCA,9418
212
212
  ultralytics/nn/__init__.py,sha256=538LZPUKKvc3JCMgiQ4VLGqRN2ZAaVLFcQbeNNHFkEA,545
213
- ultralytics/nn/autobackend.py,sha256=RkHTt8nBZaeupfshPpze8Wy7vw08FiJWctvzU3SEaro,44578
213
+ ultralytics/nn/autobackend.py,sha256=NOp-hhkx1V-I6JgjloNZYek_kMGdPhVyiWHbcU0J2qI,45135
214
214
  ultralytics/nn/tasks.py,sha256=nHhP3R8r17K_pHSfGXwDAPEwUyV0sbqzkSHjeZ2PRkg,70418
215
215
  ultralytics/nn/text_model.py,sha256=novnuosqXnW1NmlOzWOk7dEKuN6Vq40CTksr6hI3Knc,15109
216
216
  ultralytics/nn/modules/__init__.py,sha256=5Sg_28MDfKwdu14Ty_WCaiIXZyjBSQ-xCNCwnoz_w-w,3198
@@ -270,9 +270,9 @@ ultralytics/utils/nms.py,sha256=zv1rOzMF6WU8Kdk41VzNf1H1EMt_vZHcbDFbg3mnN2o,1424
270
270
  ultralytics/utils/ops.py,sha256=nWvTLJSBeW_XrxCy5Ytxl7sZJHp2sRqyCv4mm8QwYnw,25797
271
271
  ultralytics/utils/patches.py,sha256=mD3slAMAhcezzP42_fOWmacNMU6zXB68Br4_EBCyIjs,7117
272
272
  ultralytics/utils/plotting.py,sha256=_iXs4gs8tzMSgiKxCriD4un-MJkOsC3lGSy0wn7qZGk,48433
273
- ultralytics/utils/tal.py,sha256=w7oi6fp0NmL6hHh-yvCCX1cBuuB4JuX7w1wiR4_SMZs,20678
274
- ultralytics/utils/torch_utils.py,sha256=zOPUQlorTiEPSkqlSEPyaQhpmzmgOIKF7f3xJb0UjdQ,40268
275
- ultralytics/utils/tqdm.py,sha256=4kL_nczykHu6VxRzRSbvUSJknrCZydoS_ZegZkFXpsg,16197
273
+ ultralytics/utils/tal.py,sha256=iabLTij-MVyKxrkwhIOC1ouRB5Iy80Zp5H8aoYjvJJY,20773
274
+ ultralytics/utils/torch_utils.py,sha256=dHvLaQopIOr9NcIWkLWPX36f5OAFR4thcqm379Zayfc,40278
275
+ ultralytics/utils/tqdm.py,sha256=f2W608Qpvgu6tFi28qylaZpcRv3IX8wTGY_8lgicaqY,16343
276
276
  ultralytics/utils/triton.py,sha256=BQu3CD3OlT76d1OtmnX5slQU37VC1kzRvEtfI2saIQA,5211
277
277
  ultralytics/utils/tuner.py,sha256=1PM7G89X95Yfmhskk8LBXU8T-Bfiln1Ajbnz2lkgvAI,7303
278
278
  ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
@@ -283,17 +283,17 @@ ultralytics/utils/callbacks/dvc.py,sha256=YT0Sa5P8Huj8Fn9jM2P6MYzUY3PIVxsa5BInVi
283
283
  ultralytics/utils/callbacks/hub.py,sha256=fVLqqr3ZM6hoYFlVMEeejfq1MWDrkWCskPFOG3HGILQ,4159
284
284
  ultralytics/utils/callbacks/mlflow.py,sha256=wCXjQgdufp9LYujqMzLZOmIOur6kvrApHNeo9dA7t_g,5323
285
285
  ultralytics/utils/callbacks/neptune.py,sha256=_vt3cMwDHCR-LyT3KtRikGpj6AG11oQ-skUUUUdZ74o,4391
286
- ultralytics/utils/callbacks/platform.py,sha256=BMsab6x1ARBKQkS8BQoPlSqchQqQpM3onsakrhP03Ws,15541
286
+ ultralytics/utils/callbacks/platform.py,sha256=eFPP5vgwGhGb0lHbJgaU24JDz8l6vEO9qQuzUIYhSsU,15977
287
287
  ultralytics/utils/callbacks/raytune.py,sha256=Y0dFyNZVRuFovSh7nkgUIHTQL3xIXOACElgHuYbg_5I,1278
288
288
  ultralytics/utils/callbacks/tensorboard.py,sha256=PTJYvD2gqRUN8xw5VoTjvKnu2adukLfvhMlDgTnTiFU,4952
289
289
  ultralytics/utils/callbacks/wb.py,sha256=ghmL3gigOa-z_F54-TzMraKw9MAaYX-Wk4H8dLoRvX8,7705
290
290
  ultralytics/utils/export/__init__.py,sha256=Cfh-PwVfTF_lwPp-Ss4wiX4z8Sm1XRPklsqdFfmTZ30,333
291
291
  ultralytics/utils/export/engine.py,sha256=23-lC6dNsmz5vprSJzaN7UGNXrFlVedNcqhlOH_IXes,9956
292
- ultralytics/utils/export/imx.py,sha256=2_mcNzqRIk5LB92JofqNYLN0kkQke1UgKT2jWmEy_l4,13300
292
+ ultralytics/utils/export/imx.py,sha256=0TNooKXzMagOMQxGxj90kEOAHrycQNNSLMdRQH-SJ30,13299
293
293
  ultralytics/utils/export/tensorflow.py,sha256=igYzwbdblb9YgfV4Jgl5lMvynuVRcF51dAzI7j-BBI0,9966
294
- ultralytics_opencv_headless-8.3.251.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
295
- ultralytics_opencv_headless-8.3.251.dist-info/METADATA,sha256=XrZj8u9a5BhVf-u21PYrPhgUOhjrhXhp3HwFNnRMSY4,37728
296
- ultralytics_opencv_headless-8.3.251.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
297
- ultralytics_opencv_headless-8.3.251.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
298
- ultralytics_opencv_headless-8.3.251.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
299
- ultralytics_opencv_headless-8.3.251.dist-info/RECORD,,
294
+ ultralytics_opencv_headless-8.3.253.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
295
+ ultralytics_opencv_headless-8.3.253.dist-info/METADATA,sha256=AGSNDwYCFqjotUhh5jv3QD8wixw3FG_8FRKtw9b4o_k,37728
296
+ ultralytics_opencv_headless-8.3.253.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
297
+ ultralytics_opencv_headless-8.3.253.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
298
+ ultralytics_opencv_headless-8.3.253.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
299
+ ultralytics_opencv_headless-8.3.253.dist-info/RECORD,,