ultralytics 8.3.137__py3-none-any.whl → 8.3.139__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.
Files changed (36) hide show
  1. tests/test_python.py +6 -1
  2. tests/test_solutions.py +183 -8
  3. ultralytics/__init__.py +1 -1
  4. ultralytics/cfg/__init__.py +1 -1
  5. ultralytics/data/base.py +1 -1
  6. ultralytics/data/build.py +4 -3
  7. ultralytics/data/loaders.py +2 -2
  8. ultralytics/engine/exporter.py +5 -5
  9. ultralytics/engine/model.py +2 -2
  10. ultralytics/engine/predictor.py +3 -10
  11. ultralytics/engine/results.py +2 -209
  12. ultralytics/engine/trainer.py +1 -1
  13. ultralytics/engine/validator.py +1 -1
  14. ultralytics/hub/auth.py +2 -2
  15. ultralytics/hub/utils.py +8 -3
  16. ultralytics/models/yolo/classify/predict.py +11 -0
  17. ultralytics/models/yolo/obb/val.py +1 -1
  18. ultralytics/models/yolo/world/train.py +1 -1
  19. ultralytics/models/yolo/yoloe/val.py +3 -3
  20. ultralytics/solutions/similarity_search.py +3 -6
  21. ultralytics/solutions/streamlit_inference.py +1 -1
  22. ultralytics/utils/__init__.py +159 -1
  23. ultralytics/utils/callbacks/hub.py +5 -4
  24. ultralytics/utils/checks.py +25 -18
  25. ultralytics/utils/downloads.py +7 -5
  26. ultralytics/utils/export.py +1 -1
  27. ultralytics/utils/metrics.py +90 -5
  28. ultralytics/utils/plotting.py +1 -1
  29. ultralytics/utils/torch_utils.py +3 -0
  30. ultralytics/utils/triton.py +1 -1
  31. {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/METADATA +1 -1
  32. {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/RECORD +36 -36
  33. {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/WHEEL +0 -0
  34. {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/entry_points.txt +0 -0
  35. {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/licenses/LICENSE +0 -0
  36. {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/top_level.txt +0 -0
@@ -73,7 +73,7 @@ def parse_requirements(file_path=ROOT.parent / "requirements.txt", package=""):
73
73
  for line in requires:
74
74
  line = line.strip()
75
75
  if line and not line.startswith("#"):
76
- line = line.split("#")[0].strip() # ignore inline comments
76
+ line = line.partition("#")[0].strip() # ignore inline comments
77
77
  if match := re.match(r"([a-zA-Z0-9-_]+)\s*([<>!=~]+.*)?", line):
78
78
  requirements.append(SimpleNamespace(name=match[1], specifier=match[2].strip() if match[2] else ""))
79
79
 
@@ -379,7 +379,7 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
379
379
 
380
380
  pkgs = []
381
381
  for r in requirements:
382
- r_stripped = r.split("/")[-1].replace(".git", "") # replace git+https://org/repo.git -> 'repo'
382
+ r_stripped = r.rpartition("/")[-1].replace(".git", "") # replace git+https://org/repo.git -> 'repo'
383
383
  match = re.match(r"([a-zA-Z0-9-_]+)([<>!=~]+.*)?", r_stripped)
384
384
  name, required = match[1], match[2].strip() if match[2] else ""
385
385
  try:
@@ -388,21 +388,28 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
388
388
  pkgs.append(r)
389
389
 
390
390
  @Retry(times=2, delay=1)
391
- def attempt_install(packages, commands):
392
- """Attempt pip install command with retries on failure."""
393
- return subprocess.check_output(f"pip install --no-cache-dir {packages} {commands}", shell=True).decode()
391
+ def attempt_install(packages, commands, use_uv):
392
+ """Attempt package installation with uv if available, falling back to pip."""
393
+ if use_uv:
394
+ # Note requires --break-system-packages on ARM64 dockerfile
395
+ cmd = f"uv pip install --system --no-cache-dir {packages} {commands} --index-strategy=unsafe-best-match --break-system-packages --prerelease=allow"
396
+ else:
397
+ cmd = f"pip install --no-cache-dir {packages} {commands}"
398
+ return subprocess.check_output(cmd, shell=True).decode()
394
399
 
395
400
  s = " ".join(f'"{x}"' for x in pkgs) # console string
396
401
  if s:
397
402
  if install and AUTOINSTALL: # check environment variable
403
+ # Note uv fails on arm64 macOS and Raspberry Pi runners
404
+ uv = not ARM64 and subprocess.run(["command", "-v", "uv"], capture_output=True, shell=True).returncode == 0
398
405
  n = len(pkgs) # number of packages updates
399
406
  LOGGER.info(f"{prefix} Ultralytics requirement{'s' * (n > 1)} {pkgs} not found, attempting AutoUpdate...")
400
407
  try:
401
408
  t = time.time()
402
409
  assert ONLINE, "AutoUpdate skipped (offline)"
403
- LOGGER.info(attempt_install(s, cmds))
410
+ LOGGER.info(attempt_install(s, cmds, use_uv=uv))
404
411
  dt = time.time() - t
405
- LOGGER.info(f"{prefix} AutoUpdate success ✅ {dt:.1f}s, installed {n} package{'s' * (n > 1)}: {pkgs}")
412
+ LOGGER.info(f"{prefix} AutoUpdate success ✅ {dt:.1f}s")
406
413
  LOGGER.warning(
407
414
  f"{prefix} {colorstr('bold', 'Restart runtime or rerun command for updates to take effect')}\n"
408
415
  )
@@ -423,6 +430,7 @@ def check_torchvision():
423
430
  to the compatibility table based on: https://github.com/pytorch/vision#installation.
424
431
  """
425
432
  compatibility_table = {
433
+ "2.7": ["0.22"],
426
434
  "2.6": ["0.21"],
427
435
  "2.5": ["0.20"],
428
436
  "2.4": ["0.19"],
@@ -435,10 +443,10 @@ def check_torchvision():
435
443
  }
436
444
 
437
445
  # Check major and minor versions
438
- v_torch = ".".join(torch.__version__.split("+")[0].split(".")[:2])
446
+ v_torch = ".".join(torch.__version__.split("+", 1)[0].split(".")[:2])
439
447
  if v_torch in compatibility_table:
440
448
  compatible_versions = compatibility_table[v_torch]
441
- v_torchvision = ".".join(TORCHVISION_VERSION.split("+")[0].split(".")[:2])
449
+ v_torchvision = ".".join(TORCHVISION_VERSION.split("+", 1)[0].split(".")[:2])
442
450
  if all(v_torchvision != v for v in compatible_versions):
443
451
  LOGGER.warning(
444
452
  f"torchvision=={v_torchvision} is incompatible with torch=={v_torch}.\n"
@@ -461,9 +469,8 @@ def check_suffix(file="yolo11n.pt", suffix=".pt", msg=""):
461
469
  if isinstance(suffix, str):
462
470
  suffix = {suffix}
463
471
  for f in file if isinstance(file, (list, tuple)) else [file]:
464
- s = Path(f).suffix.lower().strip() # file suffix
465
- if len(s):
466
- assert s in suffix, f"{msg}{f} acceptable suffix is {suffix}, not {s}"
472
+ if s := str(f).rpartition(".")[-1].lower().strip(): # file suffix
473
+ assert f".{s}" in suffix, f"{msg}{f} acceptable suffix is {suffix}, not .{s}"
467
474
 
468
475
 
469
476
  def check_yolov5u_filename(file: str, verbose: bool = True):
@@ -504,10 +511,10 @@ def check_model_file_from_stem(model="yolo11n"):
504
511
  Returns:
505
512
  (str | Path): Model filename with appropriate suffix.
506
513
  """
507
- if model and not Path(model).suffix and Path(model).stem in downloads.GITHUB_ASSETS_STEMS:
508
- return Path(model).with_suffix(".pt") # add suffix, i.e. yolo11n -> yolo11n.pt
509
- else:
510
- return model
514
+ path = Path(model)
515
+ if not path.suffix and path.stem in downloads.GITHUB_ASSETS_STEMS:
516
+ return path.with_suffix(".pt") # add suffix, i.e. yolo11n -> yolo11n.pt
517
+ return model
511
518
 
512
519
 
513
520
  def check_file(file, suffix="", download=True, download_dir=".", hard=True):
@@ -655,7 +662,7 @@ def collect_system_info():
655
662
  from ultralytics.utils.torch_utils import get_cpu_info, get_gpu_info
656
663
 
657
664
  gib = 1 << 30 # bytes per GiB
658
- cuda = torch and torch.cuda.is_available()
665
+ cuda = torch.cuda.is_available()
659
666
  check_yolo()
660
667
  total, used, free = shutil.disk_usage("/")
661
668
 
@@ -837,7 +844,7 @@ def cuda_device_count() -> int:
837
844
  )
838
845
 
839
846
  # Take the first line and strip any leading/trailing white space
840
- first_line = output.strip().split("\n")[0]
847
+ first_line = output.strip().split("\n", 1)[0]
841
848
 
842
849
  return int(first_line)
843
850
  except (subprocess.CalledProcessError, FileNotFoundError, ValueError):
@@ -32,11 +32,13 @@ GITHUB_ASSETS_NAMES = frozenset(
32
32
  + [f"sam2.1_{k}.pt" for k in "blst"]
33
33
  + [f"FastSAM-{k}.pt" for k in "sx"]
34
34
  + [f"rtdetr-{k}.pt" for k in "lx"]
35
- + ["mobile_sam.pt"]
36
- + ["mobileclip_blt.ts"]
37
- + ["calibration_image_sample_data_20x128x128x3_float32.npy.zip"]
35
+ + [
36
+ "mobile_sam.pt",
37
+ "mobileclip_blt.ts",
38
+ "calibration_image_sample_data_20x128x128x3_float32.npy.zip",
39
+ ]
38
40
  )
39
- GITHUB_ASSETS_STEMS = frozenset(k.rsplit(".", 1)[0] for k in GITHUB_ASSETS_NAMES)
41
+ GITHUB_ASSETS_STEMS = frozenset(k.rpartition(".")[0] for k in GITHUB_ASSETS_NAMES)
40
42
 
41
43
 
42
44
  def is_url(url, check=False):
@@ -247,7 +249,7 @@ def get_google_drive_file_info(link):
247
249
  """
248
250
  import requests # slow import
249
251
 
250
- file_id = link.split("/d/")[1].split("/view")[0]
252
+ file_id = link.split("/d/")[1].split("/view", 1)[0]
251
253
  drive_url = f"https://drive.google.com/uc?export=download&id={file_id}"
252
254
  filename = None
253
255
 
@@ -97,7 +97,7 @@ def export_engine(
97
97
  builder = trt.Builder(logger)
98
98
  config = builder.create_builder_config()
99
99
  workspace = int((workspace or 0) * (1 << 30))
100
- is_trt10 = int(trt.__version__.split(".")[0]) >= 10 # is TensorRT >= 10
100
+ is_trt10 = int(trt.__version__.split(".", 1)[0]) >= 10 # is TensorRT >= 10
101
101
  if is_trt10 and workspace > 0:
102
102
  config.set_memory_pool_limit(trt.MemoryPoolType.WORKSPACE, workspace)
103
103
  elif workspace > 0: # TensorRT versions 7, 8
@@ -8,7 +8,7 @@ from pathlib import Path
8
8
  import numpy as np
9
9
  import torch
10
10
 
11
- from ultralytics.utils import LOGGER, SimpleClass, TryExcept, checks, plt_settings
11
+ from ultralytics.utils import LOGGER, DataExportMixin, SimpleClass, TryExcept, checks, plt_settings
12
12
 
13
13
  OKS_SIGMA = (
14
14
  np.array([0.26, 0.25, 0.25, 0.35, 0.35, 0.79, 0.79, 0.72, 0.72, 0.62, 0.62, 1.07, 1.07, 0.87, 0.87, 0.89, 0.89])
@@ -865,7 +865,7 @@ class Metric(SimpleClass):
865
865
  ]
866
866
 
867
867
 
868
- class DetMetrics(SimpleClass):
868
+ class DetMetrics(SimpleClass, DataExportMixin):
869
869
  """
870
870
  Utility class for computing detection metrics such as precision, recall, and mean average precision (mAP).
871
871
 
@@ -961,8 +961,29 @@ class DetMetrics(SimpleClass):
961
961
  """Return dictionary of computed performance metrics and statistics."""
962
962
  return self.box.curves_results
963
963
 
964
+ def summary(self, **kwargs):
965
+ """Returns per-class detection metrics with shared scalar values included."""
966
+ scalars = {
967
+ "box-map": self.box.map,
968
+ "box-map50": self.box.map50,
969
+ "box-map75": self.box.map75,
970
+ }
971
+ per_class = {
972
+ "box-p": self.box.p,
973
+ "box-r": self.box.r,
974
+ "box-f1": self.box.f1,
975
+ }
976
+ return [
977
+ {
978
+ "class_name": self.names[i] if hasattr(self, "names") and i in self.names else str(i),
979
+ **{k: v[i] for k, v in per_class.items()},
980
+ **scalars,
981
+ }
982
+ for i in range(len(next(iter(per_class.values()), [])))
983
+ ]
964
984
 
965
- class SegmentMetrics(SimpleClass):
985
+
986
+ class SegmentMetrics(SimpleClass, DataExportMixin):
966
987
  """
967
988
  Calculates and aggregates detection and segmentation metrics over a given set of classes.
968
989
 
@@ -1097,6 +1118,29 @@ class SegmentMetrics(SimpleClass):
1097
1118
  """Return dictionary of computed performance metrics and statistics."""
1098
1119
  return self.box.curves_results + self.seg.curves_results
1099
1120
 
1121
+ def summary(self, **kwargs):
1122
+ """Returns per-class segmentation metrics with shared scalar values included (box + mask)."""
1123
+ scalars = {
1124
+ "box-map": self.box.map,
1125
+ "box-map50": self.box.map50,
1126
+ "box-map75": self.box.map75,
1127
+ "mask-map": self.seg.map,
1128
+ "mask-map50": self.seg.map50,
1129
+ "mask-map75": self.seg.map75,
1130
+ }
1131
+ per_class = {
1132
+ "box-p": self.box.p,
1133
+ "box-r": self.box.r,
1134
+ "box-f1": self.box.f1,
1135
+ "mask-p": self.seg.p,
1136
+ "mask-r": self.seg.r,
1137
+ "mask-f1": self.seg.f1,
1138
+ }
1139
+ return [
1140
+ {"class_name": self.names[i], **{k: v[i] for k, v in per_class.items()}, **scalars}
1141
+ for i in range(len(next(iter(per_class.values()), [])))
1142
+ ]
1143
+
1100
1144
 
1101
1145
  class PoseMetrics(SegmentMetrics):
1102
1146
  """
@@ -1229,8 +1273,31 @@ class PoseMetrics(SegmentMetrics):
1229
1273
  """Return dictionary of computed performance metrics and statistics."""
1230
1274
  return self.box.curves_results + self.pose.curves_results
1231
1275
 
1276
+ def summary(self, **kwargs):
1277
+ """Returns per-class pose metrics with shared scalar values included (box + pose)."""
1278
+ scalars = {
1279
+ "box-map": self.box.map,
1280
+ "box-map50": self.box.map50,
1281
+ "box-map75": self.box.map75,
1282
+ "pose-map": self.pose.map,
1283
+ "pose-map50": self.pose.map50,
1284
+ "pose-map75": self.pose.map75,
1285
+ }
1286
+ per_class = {
1287
+ "box-p": self.box.p,
1288
+ "box-r": self.box.r,
1289
+ "box-f1": self.box.f1,
1290
+ "pose-p": self.pose.p,
1291
+ "pose-r": self.pose.r,
1292
+ "pose-f1": self.pose.f1,
1293
+ }
1294
+ return [
1295
+ {"class_name": self.names[i], **{k: v[i] for k, v in per_class.items()}, **scalars}
1296
+ for i in range(len(next(iter(per_class.values()), [])))
1297
+ ]
1298
+
1232
1299
 
1233
- class ClassifyMetrics(SimpleClass):
1300
+ class ClassifyMetrics(SimpleClass, DataExportMixin):
1234
1301
  """
1235
1302
  Class for computing classification metrics including top-1 and top-5 accuracy.
1236
1303
 
@@ -1286,8 +1353,12 @@ class ClassifyMetrics(SimpleClass):
1286
1353
  """Return a list of curves for accessing specific metrics curves."""
1287
1354
  return []
1288
1355
 
1356
+ def summary(self, **kwargs):
1357
+ """Returns a single-row summary for classification metrics (top1/top5)."""
1358
+ return [{"classify-top1": self.top1, "classify-top5": self.top5}]
1359
+
1289
1360
 
1290
- class OBBMetrics(SimpleClass):
1361
+ class OBBMetrics(SimpleClass, DataExportMixin):
1291
1362
  """
1292
1363
  Metrics for evaluating oriented bounding box (OBB) detection.
1293
1364
 
@@ -1316,6 +1387,7 @@ class OBBMetrics(SimpleClass):
1316
1387
  self.names = names
1317
1388
  self.box = Metric()
1318
1389
  self.speed = {"preprocess": 0.0, "inference": 0.0, "loss": 0.0, "postprocess": 0.0}
1390
+ self.task = "obb"
1319
1391
 
1320
1392
  def process(self, tp, conf, pred_cls, target_cls, on_plot=None):
1321
1393
  """
@@ -1383,3 +1455,16 @@ class OBBMetrics(SimpleClass):
1383
1455
  def curves_results(self):
1384
1456
  """Return a list of curves for accessing specific metrics curves."""
1385
1457
  return []
1458
+
1459
+ def summary(self, **kwargs):
1460
+ """Returns per-class detection metrics with shared scalar values included."""
1461
+ scalars = {
1462
+ "box-map": self.box.map,
1463
+ "box-map50": self.box.map50,
1464
+ "box-map75": self.box.map75,
1465
+ }
1466
+ per_class = {"box-p": self.box.p, "box-r": self.box.r, "box-f1": self.box.f1}
1467
+ return [
1468
+ {"class_name": self.names[i], **{k: v[i] for k, v in per_class.items()}, **scalars}
1469
+ for i in range(len(next(iter(per_class.values()), [])))
1470
+ ]
@@ -1000,7 +1000,7 @@ def feature_visualization(x, module_type, stage, n=32, save_dir=Path("runs/detec
1000
1000
  if isinstance(x, torch.Tensor):
1001
1001
  _, channels, height, width = x.shape # batch, channels, height, width
1002
1002
  if height > 1 and width > 1:
1003
- f = save_dir / f"stage{stage}_{module_type.split('.')[-1]}_features.png" # filename
1003
+ f = save_dir / f"stage{stage}_{module_type.rsplit('.', 1)[-1]}_features.png" # filename
1004
1004
 
1005
1005
  blocks = torch.chunk(x[0].cpu(), channels, dim=0) # select batch index 0, block by channels
1006
1006
  n = min(n, channels) # number of plots
@@ -1,5 +1,6 @@
1
1
  # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
2
 
3
+ import functools
3
4
  import gc
4
5
  import math
5
6
  import os
@@ -101,6 +102,7 @@ def autocast(enabled: bool, device: str = "cuda"):
101
102
  return torch.cuda.amp.autocast(enabled)
102
103
 
103
104
 
105
+ @functools.lru_cache
104
106
  def get_cpu_info():
105
107
  """Return a string with system CPU information, i.e. 'Apple M2'."""
106
108
  from ultralytics.utils import PERSISTENT_CACHE # avoid circular import error
@@ -118,6 +120,7 @@ def get_cpu_info():
118
120
  return PERSISTENT_CACHE.get("cpu_info", "unknown")
119
121
 
120
122
 
123
+ @functools.lru_cache
121
124
  def get_gpu_info(index):
122
125
  """Return a string with system GPU information, i.e. 'Tesla T4, 15102MiB'."""
123
126
  properties = torch.cuda.get_device_properties(index)
@@ -53,7 +53,7 @@ class TritonRemoteModel:
53
53
  """
54
54
  if not endpoint and not scheme: # Parse all args from URL string
55
55
  splits = urlsplit(url)
56
- endpoint = splits.path.strip("/").split("/")[0]
56
+ endpoint = splits.path.strip("/").split("/", 1)[0]
57
57
  scheme = splits.scheme
58
58
  url = splits.netloc
59
59
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.137
3
+ Version: 8.3.139
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>
@@ -5,12 +5,12 @@ tests/test_cuda.py,sha256=L_2xp2TH-pInsdI8UrbZ5onRtHQGdUVoPXnyX6Ot4_U,7950
5
5
  tests/test_engine.py,sha256=aGqZ8P7QO5C_nOa1b4FOyk92Ysdk5WiP-ST310Vyxys,4962
6
6
  tests/test_exports.py,sha256=dhZn86LdbapW15RthQF870LGxDjC1MUZhlGdBgPmgIQ,9716
7
7
  tests/test_integrations.py,sha256=dQteeRsRVuT_p5-T88-7jqT65Zm9iAXkyKg-KQ1_TQ8,6341
8
- tests/test_python.py,sha256=KWsncKpeDdRmjRftmJpsMl7bBLI3TG_I7Lb4kuemZzQ,25618
9
- tests/test_solutions.py,sha256=IFlqyOUCvGbLe_YZqWmNCe_afg4as0p-SfAv3j7VURI,6205
10
- ultralytics/__init__.py,sha256=8hzZtbr1IMQwOTdqbcNED-RHZiqww--zXivCgQOzujQ,730
8
+ tests/test_python.py,sha256=C1T9nODEyw1AUtpwmpTYO3-yx5ceQj1pfuWX1o7jXpU,25734
9
+ tests/test_solutions.py,sha256=Vscth8_3n9yGPQv2nrcloQYnPjB7V_oDdDKIb1pfUHI,12863
10
+ ultralytics/__init__.py,sha256=evr9ZL63t1w8IbSYB-xf-mDRjQo4ZpAHAtsrfWUghoU,730
11
11
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
12
12
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
13
- ultralytics/cfg/__init__.py,sha256=h0UVCvX6DIpoR4_pthpZD_Ihq7eCaS8HbXsPOm82G0E,39540
13
+ ultralytics/cfg/__init__.py,sha256=mpvLR68Iff4J59zYGhysSl8VwIVVzV_VMOYeVdqnYj4,39544
14
14
  ultralytics/cfg/default.yaml,sha256=oFG6llJO-Py5H-cR9qs-7FieJamroDLwpbrkhmfROOM,8307
15
15
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=_xlEDIJ9XkUo0v_iNL7FW079BoSeZtKSuLteKTtGbA8,3275
16
16
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=SHND_CFkojxw5iQD5Mcgju2kCZIl0gW2ajuzv1cqoL0,1224
@@ -105,11 +105,11 @@ ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypg
105
105
  ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
106
106
  ultralytics/data/annotator.py,sha256=VEwb11FsEZm75qlEp8XDHFGKW0_rGsEaFDaBVd771Kw,2902
107
107
  ultralytics/data/augment.py,sha256=5O02Um483j7VAutLUz13IGpuuEdvyD9mhTMxFCFwCas,129342
108
- ultralytics/data/base.py,sha256=bsASjxdkvojkFjas-JfFNSpBjo0GRAbYKDh64Y2hCH4,19015
109
- ultralytics/data/build.py,sha256=Ez_HSx-ZpL3Z1C4mDnyGPi107saG3TLR4PC7iv2sz_4,9807
108
+ ultralytics/data/base.py,sha256=Yn0pRz1E_yIx2IJtQClA0FuWkYrlpJfuOGPlg3QUGiI,19020
109
+ ultralytics/data/build.py,sha256=J1aP7qYioSiP2xq3QefiRWk3-c7lKzhNCR0hqXLQFos,9850
110
110
  ultralytics/data/converter.py,sha256=znXH2XTdo0Q4NDHMny1ydVBvrxKn2kbbwI-X5bn1MlQ,26890
111
111
  ultralytics/data/dataset.py,sha256=uc5OMkaQtWQHBd_KST_WXO6FEoeF4xUhKDDJBKkQ354,34916
112
- ultralytics/data/loaders.py,sha256=Wn_93-niQZg57VuX-vXF9MmcdHrGs5RlevdyO_V5J0s,29951
112
+ ultralytics/data/loaders.py,sha256=ybkN2q9nFtjl-YQYCy_fvlTBuA19ARDSeoag2Gg7aTU,29961
113
113
  ultralytics/data/split.py,sha256=6UFXcbVrzYVAPmFbl4FeZFJOkdbN3jQFepJxi_pD-I0,4748
114
114
  ultralytics/data/split_dota.py,sha256=ihG56YfNFZJDq1r7Zcgk8fKzde3gn21W0f67ub6nT68,11879
115
115
  ultralytics/data/utils.py,sha256=5vD6Nea2SE14Ap9nFTHkJgzOgVKJy-P8-bcqqxa_UB0,35551
@@ -118,17 +118,17 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
118
118
  ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
119
119
  ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
120
120
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
121
- ultralytics/engine/exporter.py,sha256=JucFVR_RAfzrRWM9kJK6MHALEbdzrf93ReTnAhiRTBo,70823
122
- ultralytics/engine/model.py,sha256=fWhPNWUQzjjWfTEXzTaqSSearV4THRkEa_fl4dDvzWw,52930
123
- ultralytics/engine/predictor.py,sha256=AwKpOGY2G-thNNiRw4Kf_MBLamq5tbRhXLNSMRArqFo,21803
124
- ultralytics/engine/results.py,sha256=MhbyMCwgslmtV53fqii4UJUaLQ4gKTKdkXi7vvmJDAE,79628
125
- ultralytics/engine/trainer.py,sha256=c_iGyt6bwIf4aRUeVcVEuOKG9ZpixJsZUbI2eMqQXto,38951
121
+ ultralytics/engine/exporter.py,sha256=BZWa7Mnl1BPvbPiD-RJs6M5Bca4sm3_MQgjoHesvXEs,70949
122
+ ultralytics/engine/model.py,sha256=BtC5KYNrdfhryrS7b6ZXDIsmtObEeIDTePCv1gO4br4,52952
123
+ ultralytics/engine/predictor.py,sha256=rZ5mIPeejkxUerpTfUf_1rSAklOR3THqoejlil4C04w,21651
124
+ ultralytics/engine/results.py,sha256=2sNNhAc2zaIRaQBXl_36gAKK31V8tgNDcgC4ZPiGqKI,70072
125
+ ultralytics/engine/trainer.py,sha256=xdgNAgq6umJ6915tiCK3U22NeY7w1HnvmAhXlwS_hYI,38955
126
126
  ultralytics/engine/tuner.py,sha256=zEW1UpLlZ6N4xbvS7MxICkshRlaFgLNfuADA0VfRpao,12629
127
- ultralytics/engine/validator.py,sha256=jfV81wuFDgrVVXEcPzgOpxAPrAZn-1LgpKwu9l_1-ts,17050
127
+ ultralytics/engine/validator.py,sha256=f9UUv3QqQStLrO1nojrHkdS58qYQxKXaoIQQria6WyA,17054
128
128
  ultralytics/hub/__init__.py,sha256=wDtAUKdfqob95tfFHgDJFXcsNSDSdoIQkJTm-CfIUTI,6616
129
- ultralytics/hub/auth.py,sha256=_bGQVLTgP-ina4fQxq2M7qkj9zKKfxb99_VWgN3S_4k,5549
129
+ ultralytics/hub/auth.py,sha256=cykVsFR5xjqZdf8_TagHceGc1BzrfkiSHrzQdoa0nOQ,5555
130
130
  ultralytics/hub/session.py,sha256=Hohzn2L2QJTYszIHqwxnsK4V-0MOU-8ldMIfpxMtLSE,18708
131
- ultralytics/hub/utils.py,sha256=luSqI4Ym7A1NRFrDsryPTDrlFL8FJdWQ9Zyrl9d-Abs,9661
131
+ ultralytics/hub/utils.py,sha256=Hh_ND38R7ssflXh9ndG739-8283oej_EZzlOftIDFEU,9936
132
132
  ultralytics/hub/google/__init__.py,sha256=rV9_KoRBwYlwyx3QLaBp1opw5Sjrbgl0YoDHtXoHIMw,8429
133
133
  ultralytics/models/__init__.py,sha256=DqQFFYJ4IQlqIDb61H1HzcnZU7SuHN-43bw94-l-YAQ,309
134
134
  ultralytics/models/fastsam/__init__.py,sha256=HGJ8EKlBAsdF-e2aIwQLjSDAFI_r0yHR0A1gzrp4vqE,231
@@ -165,7 +165,7 @@ ultralytics/models/utils/ops.py,sha256=SuBnwwgUTqByNHpufobGLW72yO2cyfZFi14KAFWSj
165
165
  ultralytics/models/yolo/__init__.py,sha256=or0j5xvcM0usMlsFTYhNAOcQUri7reD0cD9JR5b7zDk,307
166
166
  ultralytics/models/yolo/model.py,sha256=oGPLPkgym0kfFhkLgyriR5KbKTQyJH-1Uggup5wFgw0,14296
167
167
  ultralytics/models/yolo/classify/__init__.py,sha256=9--HVaNOfI1K7rn_rRqclL8FUAnpfeBrRqEQIaQw2xM,383
168
- ultralytics/models/yolo/classify/predict.py,sha256=JV9szginTQ9Lpob0FozhKMiEIu1vVaYg4YItuVK2AFM,4081
168
+ ultralytics/models/yolo/classify/predict.py,sha256=QckEv4qNiCSjIbHFxq9KVKpYHL4TbuLWfT5zXoMQEpU,4576
169
169
  ultralytics/models/yolo/classify/train.py,sha256=rv2CJv9fzvtHf2q4l5g0RsjplWKeLpz637kKqjtrLNY,9737
170
170
  ultralytics/models/yolo/classify/val.py,sha256=xk-YwSQdl_oqyCBV0OOAOcXFL6CchebFOc36AkRSyjE,9992
171
171
  ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
@@ -175,7 +175,7 @@ ultralytics/models/yolo/detect/val.py,sha256=7AB_wZi7aQ9_V1pZQSWk5qiJYS34fuO3P5a
175
175
  ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
176
176
  ultralytics/models/yolo/obb/predict.py,sha256=L40iamQgTY7VDn0WggG2jeJK8cVUo1qsNuFSbK67ry0,2974
177
177
  ultralytics/models/yolo/obb/train.py,sha256=NBSpXCyIn2qxtaG7gvolUzXOB0mf3oEFIpQZHTES1_s,3458
178
- ultralytics/models/yolo/obb/val.py,sha256=dkXUh2JfffILVRkfXycQGImQQssUDgKMtfDRP7jUpV0,13981
178
+ ultralytics/models/yolo/obb/val.py,sha256=Qzer8to_DhPmJ56BNDZh6d9f4o5TY-OgebZpzY8lUxY,13984
179
179
  ultralytics/models/yolo/pose/__init__.py,sha256=63xmuHZLNzV8I76HhVXAq4f2W0KTk8Oi9eL-Y204LyQ,227
180
180
  ultralytics/models/yolo/pose/predict.py,sha256=sY-yMVl-hW8tGVSKt-5Pl1Bhdhj9exnmGIeb4n9wUDc,3836
181
181
  ultralytics/models/yolo/pose/train.py,sha256=dKa1Vzt4GoZ9yqdK6olqLEg-qhYaPUh29Qg62bHAVi8,6502
@@ -185,13 +185,13 @@ ultralytics/models/yolo/segment/predict.py,sha256=mIC3aHI7Jg4dU1k2UZnjVj4unE-5TW
185
185
  ultralytics/models/yolo/segment/train.py,sha256=EIyIAjYp127Mb-DomyjPORaONu57OY_gOTK9p2MwW6E,5359
186
186
  ultralytics/models/yolo/segment/val.py,sha256=cXJM1JNuzDraU0SJQRIdzNxabd0bfcxiRE8wozHZChY,18415
187
187
  ultralytics/models/yolo/world/__init__.py,sha256=nlh8I6t8hMGz_vZg8QSlsUW1R-2eKvn9CGUoPPQEGhA,131
188
- ultralytics/models/yolo/world/train.py,sha256=4e54RghcrpdtpxG3n2Nicwo-tcj-wI4nLcUo8_4cf30,6898
188
+ ultralytics/models/yolo/world/train.py,sha256=2R0h36kggT8ZBpwaACqgg9vd34rNU-tbPsfPuxuBV4g,6901
189
189
  ultralytics/models/yolo/world/train_world.py,sha256=fFhhI-toaEy1_-XcPM1_mF395WRQ26gZ4UxqyUAZmWw,8461
190
190
  ultralytics/models/yolo/yoloe/__init__.py,sha256=6SLytdJtwu37qewf7CobG7C7Wl1m-xtNdvCXEasfPDE,760
191
191
  ultralytics/models/yolo/yoloe/predict.py,sha256=N0oYcr_mdw8wyUAWprAwJhrA0r23BaTeYXEjw2e8_mI,6993
192
192
  ultralytics/models/yolo/yoloe/train.py,sha256=xRPDJ3nUWxtqjESfmUtsZslVhpgzrZRw8z_QU5hV6nc,11710
193
193
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=BYFBd04k5WQaJPcFbCvVIbEf2IOQyW8_sGeoVT_74j0,4632
194
- ultralytics/models/yolo/yoloe/val.py,sha256=oA8cVT3pBXF6aPZy7ITq0mDcktRuIgks8tTtqMRISyY,8431
194
+ ultralytics/models/yolo/yoloe/val.py,sha256=g6GK5NgVEV9bhXzo1zes0NGa4JEZS3UB-5sPN8fGyZw,8440
195
195
  ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
196
196
  ultralytics/nn/autobackend.py,sha256=X2cxCytBu9fmniy8uJ5aZb28IukQ-uxV1INXeS1lclA,39368
197
197
  ultralytics/nn/tasks.py,sha256=iJWpwRr4yZg1dTT-9jXuzIqkdFmbZm1b7hejnO-CiZk,64337
@@ -217,10 +217,10 @@ ultralytics/solutions/parking_management.py,sha256=BV-2lpSfgmK7fib3DnPSZ5rtLdy11
217
217
  ultralytics/solutions/queue_management.py,sha256=p1-cuI_rs4ygtlBryXjE65NYG2bnZXhp3ylggFnWcRs,4344
218
218
  ultralytics/solutions/region_counter.py,sha256=Zn35YRXNzhBk27D9MLOHBYe2L1o6H2ey3mEwCXofB_E,5418
219
219
  ultralytics/solutions/security_alarm.py,sha256=JdkQUjqJl3iCd2MLVYkh1L7askvhi3_gp0RLXG6s390,6247
220
- ultralytics/solutions/similarity_search.py,sha256=WTYmHNHfFrRiJ6mrZhJvGPsjt3szQUiM6VRpw2eBRjA,7332
220
+ ultralytics/solutions/similarity_search.py,sha256=NVjrlxWStXPhSaE_tGW0g1_j8vD0evaT9IjGOHYERFg,7323
221
221
  ultralytics/solutions/solutions.py,sha256=1iZIj3Z5bs14WbVT8MIDXABfW-pBmfvQNdBJ6l21uVY,32696
222
222
  ultralytics/solutions/speed_estimation.py,sha256=r7S5nGIx8PTV-zC4zCI36lQD2DVy5cen5cTXItfQIHo,5318
223
- ultralytics/solutions/streamlit_inference.py,sha256=M0ppTFInqSPrdytZBLH8x-XoA7zFc7PaRQ51wHG9ppU,9846
223
+ ultralytics/solutions/streamlit_inference.py,sha256=p1bBKTtmvB6zStXdOzS0CGYurm4zu82WKii5rJriizA,9849
224
224
  ultralytics/solutions/trackzone.py,sha256=mfklnZcVRqI3bbhPiHF2iSoV6INcd10wwwGP4tlK7L0,3854
225
225
  ultralytics/solutions/vision_eye.py,sha256=LCb-2YPVvEks9e7xqZtNGftpAXNaZhEUb5yb3N0ni_U,2952
226
226
  ultralytics/solutions/templates/similarity-search.html,sha256=DPoAO-1H-KXNt_T8mGtSCsYUEi_5Nrx01p0cZfX-E8Q,3790
@@ -233,40 +233,40 @@ ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6D
233
233
  ultralytics/trackers/utils/gmc.py,sha256=843LlmqWuXdUULBNpxVCZlil-_2QG-UwvscUCFbpGjA,14541
234
234
  ultralytics/trackers/utils/kalman_filter.py,sha256=A0CqOnnaKH6kr0XwuHzyHmIU6aJAjJYxF9jVlNBKZHo,21326
235
235
  ultralytics/trackers/utils/matching.py,sha256=7eIufSdeN7cXuFMjvcfvz0Ldq84m4YKZl5IGxBR8IIo,7169
236
- ultralytics/utils/__init__.py,sha256=vac0M-Hx55QXl6Vod3QPjnLBlt87Hwxu1784RXPmeQA,52879
236
+ ultralytics/utils/__init__.py,sha256=4U7xwGn3zbnmTm_P8pnySaY0l_yovbh6PvXJkD9P6r4,58774
237
237
  ultralytics/utils/autobatch.py,sha256=kg05q2qKg74y_Uq2vvr01i3KhLfpVR7sT0IXBt3_kyI,4921
238
238
  ultralytics/utils/autodevice.py,sha256=OKZfTbswg6SlsYGCGMqROkA-451CXGG47oeyC5Q1kFM,7232
239
239
  ultralytics/utils/benchmarks.py,sha256=lDNNnLeLUzmqKrqrqlCOiau-q7A-gcLooZP2dbxCu-U,30214
240
- ultralytics/utils/checks.py,sha256=TGhnnNVT3NEBhSeckWIe1rGlXUyYI3xhFqK6CR0oBiE,33192
240
+ ultralytics/utils/checks.py,sha256=F02ASeClT_HbYaLQEvddL5ZFRursRWSTNTrSG0EWixQ,33671
241
241
  ultralytics/utils/dist.py,sha256=aytW0JEkcA5ZTZucV92ot7Bn-apiej8aLk3QNWicjAc,4103
242
- ultralytics/utils/downloads.py,sha256=Rn8xDwn2bzgBqiYz3Xn0rm3MWjk4T-QUd2Ajlu1EpQ4,22312
242
+ ultralytics/utils/downloads.py,sha256=G1nd7c7Gwjf58nZzDVpXDtoFtzhZYbjKBnwbZVMWRG0,22333
243
243
  ultralytics/utils/errors.py,sha256=vY9h2evFSrHnZdHJVVrmm8Zzw4qVDLyo9DeYW5g0dFk,1573
244
- ultralytics/utils/export.py,sha256=XInnl9AQeik7EuR1492nzDvgDqaV43FlnM5CLamrgd4,8814
244
+ ultralytics/utils/export.py,sha256=Rr5R3GdJBapJJt1XHkH6VQwYN52-L_7wGiRDCgnb7BY,8817
245
245
  ultralytics/utils/files.py,sha256=0K4O1cgqRiXaDw7EQK13TqA5SME_RrvfDVQSPetNr5w,8042
246
246
  ultralytics/utils/instance.py,sha256=UOEsXR9V-bXNRk6BTonASBEgeMqvzzAk4S7VdXZJUAM,18090
247
247
  ultralytics/utils/loss.py,sha256=Woc_rj7ptCyezHdylEygXMeSEgivYu_B9jJHD4UwxWE,37607
248
- ultralytics/utils/metrics.py,sha256=n8guPEADBMRNpeXNShEX-fxVv9xck8S4QaOIiaW_kl0,56037
248
+ ultralytics/utils/metrics.py,sha256=8x4S7y-rBKRkM47f_o7jfMHA1Bz8SDq3t-R1FXlQNEM,59267
249
249
  ultralytics/utils/ops.py,sha256=YFwPrKlPcgEmgAWqnJVR0Ccx5NQgp5e3P-YYHwVSP0k,34779
250
250
  ultralytics/utils/patches.py,sha256=_dhIU_eDklQE-aWIjpyjPHl_wOwZoGuIUQnXgdSwk_A,5020
251
- ultralytics/utils/plotting.py,sha256=GKic2OMavjJPT3pOPdU0UcvQTrG1LVt0vHJM-Zuy9Bs,47217
251
+ ultralytics/utils/plotting.py,sha256=oFq19c3tRng-dKHEH-j-S_wLG4CZ_mk8wqE_Gab2H8A,47221
252
252
  ultralytics/utils/tal.py,sha256=P5nPoR9qNnFuDIda0fsn8WP6m1V8r7EbvXUuhNRFFTA,20805
253
- ultralytics/utils/torch_utils.py,sha256=2SJxxg8Qr0YqOoQ-8qAYn6VrzZdQMObqiw3CJZ-rAY0,39611
254
- ultralytics/utils/triton.py,sha256=xK9Db_ZUVDnIK1u76S2G-6ulIBsLfj9HN_YOaSrnMuU,5304
253
+ ultralytics/utils/torch_utils.py,sha256=xQgznbCdnuEkCajUpx5q8SfUM8wh9Bb-PcHOMl2g1KI,39670
254
+ ultralytics/utils/triton.py,sha256=9P2rlQcGCTMFVKLA5S5mTYzU9cKbR5HF9ruVkPpVBE8,5307
255
255
  ultralytics/utils/tuner.py,sha256=0Bp7l5dWZe1RzdvAIa11wQoX6eoAaoNRcA-EAnpofbk,6755
256
256
  ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
257
257
  ultralytics/utils/callbacks/base.py,sha256=p8YCeYDp4GLcyHWFZxC2Wxr2IXLw_MfIE5ef1fOQcWk,6848
258
258
  ultralytics/utils/callbacks/clearml.py,sha256=z-MmCALz1FcNSec8CmDiFHkRd_zTzzuPDCidq_xkUXY,5990
259
259
  ultralytics/utils/callbacks/comet.py,sha256=_j8tKKxGlxDcw_Rx4Ow2PjZ3UpBHm9gLJlYSVU0WJ_E,22221
260
260
  ultralytics/utils/callbacks/dvc.py,sha256=NywyiMqJfnK_UfJ_f1IK31puyIXZy0iVJQ4bB9uyu08,7532
261
- ultralytics/utils/callbacks/hub.py,sha256=dPSeSStRE1x-WYyqrUghCp_VtBxNZ5-Bmb4wW2KYV2Y,4073
261
+ ultralytics/utils/callbacks/hub.py,sha256=1RmGiCaog1GoTya9OAyGELbQ2Lk5X3EWh7RYMxns0so,4177
262
262
  ultralytics/utils/callbacks/mlflow.py,sha256=rcjjN_QVg6XoL4Kbw8YqC28RDCQMs0LxfsXRpAc8BgY,5430
263
263
  ultralytics/utils/callbacks/neptune.py,sha256=yYUgEgSv6L39sSev6vjwhAWU3DlPDsbSDVFoR24NYio,4664
264
264
  ultralytics/utils/callbacks/raytune.py,sha256=A8amUGpux7dYES-L1iSeMoMXBySGWCD1aUqT7vcG-pU,1284
265
265
  ultralytics/utils/callbacks/tensorboard.py,sha256=jgYnym3cUQFAgN1GzTyO7l3jINtfAh8zhrllDvnLuVQ,5339
266
266
  ultralytics/utils/callbacks/wb.py,sha256=iDRFXI4IIDm8R5OI89DMTmjs8aHLo1HRCLkOFKdaMG4,7507
267
- ultralytics-8.3.137.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
268
- ultralytics-8.3.137.dist-info/METADATA,sha256=Bz_PCfMcXAGRbHyRMyfMC7bpsCsW-jIfnWBTnymx43k,37200
269
- ultralytics-8.3.137.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
270
- ultralytics-8.3.137.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
271
- ultralytics-8.3.137.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
272
- ultralytics-8.3.137.dist-info/RECORD,,
267
+ ultralytics-8.3.139.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
268
+ ultralytics-8.3.139.dist-info/METADATA,sha256=_4eNuEf0StloC9PrM14n1wzDNDBa_8f-DBC2T43tuZg,37200
269
+ ultralytics-8.3.139.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
270
+ ultralytics-8.3.139.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
271
+ ultralytics-8.3.139.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
272
+ ultralytics-8.3.139.dist-info/RECORD,,