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.
- tests/test_python.py +6 -1
- tests/test_solutions.py +183 -8
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/__init__.py +1 -1
- ultralytics/data/base.py +1 -1
- ultralytics/data/build.py +4 -3
- ultralytics/data/loaders.py +2 -2
- ultralytics/engine/exporter.py +5 -5
- ultralytics/engine/model.py +2 -2
- ultralytics/engine/predictor.py +3 -10
- ultralytics/engine/results.py +2 -209
- ultralytics/engine/trainer.py +1 -1
- ultralytics/engine/validator.py +1 -1
- ultralytics/hub/auth.py +2 -2
- ultralytics/hub/utils.py +8 -3
- ultralytics/models/yolo/classify/predict.py +11 -0
- ultralytics/models/yolo/obb/val.py +1 -1
- ultralytics/models/yolo/world/train.py +1 -1
- ultralytics/models/yolo/yoloe/val.py +3 -3
- ultralytics/solutions/similarity_search.py +3 -6
- ultralytics/solutions/streamlit_inference.py +1 -1
- ultralytics/utils/__init__.py +159 -1
- ultralytics/utils/callbacks/hub.py +5 -4
- ultralytics/utils/checks.py +25 -18
- ultralytics/utils/downloads.py +7 -5
- ultralytics/utils/export.py +1 -1
- ultralytics/utils/metrics.py +90 -5
- ultralytics/utils/plotting.py +1 -1
- ultralytics/utils/torch_utils.py +3 -0
- ultralytics/utils/triton.py +1 -1
- {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/METADATA +1 -1
- {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/RECORD +36 -36
- {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.137.dist-info → ultralytics-8.3.139.dist-info}/top_level.txt +0 -0
ultralytics/utils/checks.py
CHANGED
@@ -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.
|
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.
|
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
|
393
|
-
|
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
|
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
|
465
|
-
|
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
|
-
|
508
|
-
|
509
|
-
|
510
|
-
|
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
|
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):
|
ultralytics/utils/downloads.py
CHANGED
@@ -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
|
-
+ [
|
36
|
-
|
37
|
-
|
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.
|
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
|
|
ultralytics/utils/export.py
CHANGED
@@ -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
|
ultralytics/utils/metrics.py
CHANGED
@@ -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
|
-
|
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
|
+
]
|
ultralytics/utils/plotting.py
CHANGED
@@ -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.
|
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
|
ultralytics/utils/torch_utils.py
CHANGED
@@ -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)
|
ultralytics/utils/triton.py
CHANGED
@@ -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.
|
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=
|
9
|
-
tests/test_solutions.py,sha256=
|
10
|
-
ultralytics/__init__.py,sha256=
|
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=
|
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=
|
109
|
-
ultralytics/data/build.py,sha256=
|
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=
|
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=
|
122
|
-
ultralytics/engine/model.py,sha256=
|
123
|
-
ultralytics/engine/predictor.py,sha256=
|
124
|
-
ultralytics/engine/results.py,sha256=
|
125
|
-
ultralytics/engine/trainer.py,sha256=
|
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=
|
127
|
+
ultralytics/engine/validator.py,sha256=f9UUv3QqQStLrO1nojrHkdS58qYQxKXaoIQQria6WyA,17054
|
128
128
|
ultralytics/hub/__init__.py,sha256=wDtAUKdfqob95tfFHgDJFXcsNSDSdoIQkJTm-CfIUTI,6616
|
129
|
-
ultralytics/hub/auth.py,sha256=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
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=
|
242
|
+
ultralytics/utils/downloads.py,sha256=G1nd7c7Gwjf58nZzDVpXDtoFtzhZYbjKBnwbZVMWRG0,22333
|
243
243
|
ultralytics/utils/errors.py,sha256=vY9h2evFSrHnZdHJVVrmm8Zzw4qVDLyo9DeYW5g0dFk,1573
|
244
|
-
ultralytics/utils/export.py,sha256=
|
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=
|
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=
|
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=
|
254
|
-
ultralytics/utils/triton.py,sha256=
|
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=
|
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.
|
268
|
-
ultralytics-8.3.
|
269
|
-
ultralytics-8.3.
|
270
|
-
ultralytics-8.3.
|
271
|
-
ultralytics-8.3.
|
272
|
-
ultralytics-8.3.
|
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,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|