ultralytics 8.3.192__py3-none-any.whl → 8.3.194__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.
@@ -3,8 +3,9 @@
3
3
  import json
4
4
  from time import time
5
5
 
6
- from ultralytics.hub import HUB_WEB_ROOT, PREFIX, HUBTrainingSession, events
6
+ from ultralytics.hub import HUB_WEB_ROOT, PREFIX, HUBTrainingSession
7
7
  from ultralytics.utils import LOGGER, RANK, SETTINGS
8
+ from ultralytics.utils.events import events
8
9
 
9
10
 
10
11
  def on_pretrain_routine_start(trainer):
@@ -36,6 +36,7 @@ from ultralytics.utils import (
36
36
  PYTHON_VERSION,
37
37
  RKNN_CHIPS,
38
38
  ROOT,
39
+ TORCH_VERSION,
39
40
  TORCHVISION_VERSION,
40
41
  USER_CONFIG_DIR,
41
42
  WINDOWS,
@@ -464,7 +465,7 @@ def check_torchvision():
464
465
  }
465
466
 
466
467
  # Check major and minor versions
467
- v_torch = ".".join(torch.__version__.split("+", 1)[0].split(".")[:2])
468
+ v_torch = ".".join(TORCH_VERSION.split("+", 1)[0].split(".")[:2])
468
469
  if v_torch in compatibility_table:
469
470
  compatible_versions = compatibility_table[v_torch]
470
471
  v_torchvision = ".".join(TORCHVISION_VERSION.split("+", 1)[0].split(".")[:2])
@@ -0,0 +1,115 @@
1
+ # Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
2
+
3
+ import json
4
+ import random
5
+ import time
6
+ from pathlib import Path
7
+ from threading import Thread
8
+ from urllib.request import Request, urlopen
9
+
10
+ from ultralytics import SETTINGS, __version__
11
+ from ultralytics.utils import ARGV, ENVIRONMENT, GIT, IS_PIP_PACKAGE, ONLINE, PYTHON_VERSION, RANK, TESTS_RUNNING
12
+ from ultralytics.utils.downloads import GITHUB_ASSETS_NAMES
13
+ from ultralytics.utils.torch_utils import get_cpu_info
14
+
15
+
16
+ def _post(url: str, data: dict, timeout: float = 5.0) -> None:
17
+ """Send a one-shot JSON POST request."""
18
+ try:
19
+ body = json.dumps(data, separators=(",", ":")).encode() # compact JSON
20
+ req = Request(url, data=body, headers={"Content-Type": "application/json"})
21
+ urlopen(req, timeout=timeout).close()
22
+ except Exception:
23
+ pass
24
+
25
+
26
+ class Events:
27
+ """
28
+ Collect and send anonymous usage analytics with rate-limiting.
29
+
30
+ Event collection and transmission are enabled when sync is enabled in settings, the current process is rank -1 or 0,
31
+ tests are not running, the environment is online, and the installation source is either pip or the official
32
+ Ultralytics GitHub repository.
33
+
34
+ Attributes:
35
+ url (str): Measurement Protocol endpoint for receiving anonymous events.
36
+ events (list[dict]): In-memory queue of event payloads awaiting transmission.
37
+ rate_limit (float): Minimum time in seconds between POST requests.
38
+ t (float): Timestamp of the last transmission in seconds since the epoch.
39
+ metadata (dict): Static metadata describing runtime, installation source, and environment.
40
+ enabled (bool): Flag indicating whether analytics collection is active.
41
+
42
+ Methods:
43
+ __init__: Initialize the event queue, rate limiter, and runtime metadata.
44
+ __call__: Queue an event and trigger a non-blocking send when the rate limit elapses.
45
+ """
46
+
47
+ url = "https://www.google-analytics.com/mp/collect?measurement_id=G-X8NCJYTQXM&api_secret=QLQrATrNSwGRFRLE-cbHJw"
48
+
49
+ def __init__(self) -> None:
50
+ """Initialize the Events instance with queue, rate limiter, and environment metadata."""
51
+ self.events = [] # pending events
52
+ self.rate_limit = 30.0 # rate limit (seconds)
53
+ self.t = 0.0 # last send timestamp (seconds)
54
+ self.metadata = {
55
+ "cli": Path(ARGV[0]).name == "yolo",
56
+ "install": "git" if GIT.is_repo else "pip" if IS_PIP_PACKAGE else "other",
57
+ "python": PYTHON_VERSION.rsplit(".", 1)[0], # i.e. 3.13
58
+ "CPU": get_cpu_info(),
59
+ # "GPU": get_gpu_info(index=0) if cuda else None,
60
+ "version": __version__,
61
+ "env": ENVIRONMENT,
62
+ "session_id": round(random.random() * 1e15),
63
+ "engagement_time_msec": 1000,
64
+ }
65
+ self.enabled = (
66
+ SETTINGS["sync"]
67
+ and RANK in {-1, 0}
68
+ and not TESTS_RUNNING
69
+ and ONLINE
70
+ and (IS_PIP_PACKAGE or GIT.origin == "https://github.com/ultralytics/ultralytics.git")
71
+ )
72
+
73
+ def __call__(self, cfg, device=None) -> None:
74
+ """
75
+ Queue an event and flush the queue asynchronously when the rate limit elapses.
76
+
77
+ Args:
78
+ cfg (IterableSimpleNamespace): The configuration object containing mode and task information.
79
+ device (torch.device | str, optional): The device type (e.g., 'cpu', 'cuda').
80
+ """
81
+ if not self.enabled:
82
+ # Events disabled, do nothing
83
+ return
84
+
85
+ # Attempt to enqueue a new event
86
+ if len(self.events) < 25: # Queue limited to 25 events to bound memory and traffic
87
+ params = {
88
+ **self.metadata,
89
+ "task": cfg.task,
90
+ "model": cfg.model if cfg.model in GITHUB_ASSETS_NAMES else "custom",
91
+ "device": str(device),
92
+ }
93
+ if cfg.mode == "export":
94
+ params["format"] = cfg.format
95
+ self.events.append({"name": cfg.mode, "params": params})
96
+
97
+ # Check rate limit and return early if under limit
98
+ t = time.time()
99
+ if (t - self.t) < self.rate_limit:
100
+ return
101
+
102
+ # Overrate limit: send a snapshot of queued events in a background thread
103
+ payload_events = list(self.events) # snapshot to avoid race with queue reset
104
+ Thread(
105
+ target=_post,
106
+ args=(self.url, {"client_id": SETTINGS["uuid"], "events": payload_events}), # SHA-256 anonymized
107
+ daemon=True,
108
+ ).start()
109
+
110
+ # Reset queue and rate limit timer
111
+ self.events = []
112
+ self.t = t
113
+
114
+
115
+ events = Events()
ultralytics/utils/ops.py CHANGED
@@ -244,7 +244,9 @@ def scale_image(masks, im0_shape, ratio_pad=None):
244
244
  if len(masks.shape) < 2:
245
245
  raise ValueError(f'"len of masks shape" should be 2 or 3, but got {len(masks.shape)}')
246
246
  masks = masks[top:bottom, left:right]
247
- masks = cv2.resize(masks, (im0_w, im0_h))
247
+ # handle the cv2.resize 512 channels limitation: https://github.com/ultralytics/ultralytics/pull/21947
248
+ masks = [cv2.resize(array, (im0_w, im0_h)) for array in np.array_split(masks, masks.shape[-1] // 512 + 1, axis=-1)]
249
+ masks = np.concatenate(masks, axis=-1) if len(masks) > 1 else masks[0]
248
250
  if len(masks.shape) == 2:
249
251
  masks = masks[:, :, None]
250
252
 
ultralytics/utils/tal.py CHANGED
@@ -3,12 +3,12 @@
3
3
  import torch
4
4
  import torch.nn as nn
5
5
 
6
- from . import LOGGER
6
+ from . import LOGGER, TORCH_VERSION
7
7
  from .checks import check_version
8
8
  from .metrics import bbox_iou, probiou
9
9
  from .ops import xywhr2xyxyxyxy
10
10
 
11
- TORCH_1_10 = check_version(torch.__version__, "1.10.0")
11
+ TORCH_1_10 = check_version(TORCH_VERSION, "1.10.0")
12
12
 
13
13
 
14
14
  class TaskAlignedAssigner(nn.Module):
@@ -27,6 +27,7 @@ from ultralytics.utils import (
27
27
  LOGGER,
28
28
  NUM_THREADS,
29
29
  PYTHON_VERSION,
30
+ TORCH_VERSION,
30
31
  TORCHVISION_VERSION,
31
32
  WINDOWS,
32
33
  colorstr,
@@ -35,15 +36,15 @@ from ultralytics.utils.checks import check_version
35
36
  from ultralytics.utils.patches import torch_load
36
37
 
37
38
  # Version checks (all default to version>=min_version)
38
- TORCH_1_9 = check_version(torch.__version__, "1.9.0")
39
- TORCH_1_13 = check_version(torch.__version__, "1.13.0")
40
- TORCH_2_0 = check_version(torch.__version__, "2.0.0")
41
- TORCH_2_4 = check_version(torch.__version__, "2.4.0")
39
+ TORCH_1_9 = check_version(TORCH_VERSION, "1.9.0")
40
+ TORCH_1_13 = check_version(TORCH_VERSION, "1.13.0")
41
+ TORCH_2_0 = check_version(TORCH_VERSION, "2.0.0")
42
+ TORCH_2_4 = check_version(TORCH_VERSION, "2.4.0")
42
43
  TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
43
44
  TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
44
45
  TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
45
46
  TORCHVISION_0_18 = check_version(TORCHVISION_VERSION, "0.18.0")
46
- if WINDOWS and check_version(torch.__version__, "==2.4.0"): # reject version 2.4.0 on Windows
47
+ if WINDOWS and check_version(TORCH_VERSION, "==2.4.0"): # reject version 2.4.0 on Windows
47
48
  LOGGER.warning(
48
49
  "Known issue with torch==2.4.0 on Windows with CPU, recommend upgrading to torch>=2.4.1 to resolve "
49
50
  "https://github.com/ultralytics/ultralytics/issues/15049"
@@ -165,7 +166,7 @@ def select_device(device="", batch=0, newline=False, verbose=True):
165
166
  if isinstance(device, torch.device) or str(device).startswith(("tpu", "intel")):
166
167
  return device
167
168
 
168
- s = f"Ultralytics {__version__} 🚀 Python-{PYTHON_VERSION} torch-{torch.__version__} "
169
+ s = f"Ultralytics {__version__} 🚀 Python-{PYTHON_VERSION} torch-{TORCH_VERSION} "
169
170
  device = str(device).lower()
170
171
  for remove in "cuda:", "none", "(", ")", "[", "]", "'", " ":
171
172
  device = device.replace(remove, "") # to string, 'cuda:0' -> '0' and '(0, 1)' -> '0,1'
ultralytics/utils/tqdm.py CHANGED
@@ -88,11 +88,11 @@ class TQDM:
88
88
  mininterval: float = 0.1,
89
89
  disable: bool | None = None,
90
90
  unit: str = "it",
91
- unit_scale: bool = False,
91
+ unit_scale: bool = True,
92
92
  unit_divisor: int = 1000,
93
- bar_format: str | None = None,
93
+ bar_format: str | None = None, # kept for API compatibility; not used for formatting
94
94
  initial: int = 0,
95
- **kwargs, # Accept unused args for compatibility
95
+ **kwargs,
96
96
  ) -> None:
97
97
  """
98
98
  Initialize the TQDM progress bar with specified configuration options.
@@ -138,11 +138,8 @@ class TQDM:
138
138
  self.mininterval = max(mininterval, self.NONINTERACTIVE_MIN_INTERVAL) if self.noninteractive else mininterval
139
139
  self.initial = initial
140
140
 
141
- # Set bar format based on whether we have a total
142
- if self.total:
143
- self.bar_format = bar_format or "{desc}: {percent:.0f}% {bar} {n}/{total} {rate} {elapsed}<{remaining}"
144
- else:
145
- self.bar_format = bar_format or "{desc}: {bar} {n} {rate} {elapsed}"
141
+ # Kept for API compatibility (unused for f-string formatting)
142
+ self.bar_format = bar_format
146
143
 
147
144
  self.file = file or sys.stdout
148
145
 
@@ -151,48 +148,31 @@ class TQDM:
151
148
  self.last_print_n = self.initial
152
149
  self.last_print_t = time.time()
153
150
  self.start_t = time.time()
154
- self.last_rate = 0
151
+ self.last_rate = 0.0
155
152
  self.closed = False
153
+ self.is_bytes = unit_scale and unit in ("B", "bytes")
154
+ self.scales = (
155
+ [(1073741824, "GB/s"), (1048576, "MB/s"), (1024, "KB/s")]
156
+ if self.is_bytes
157
+ else [(1e9, f"G{self.unit}/s"), (1e6, f"M{self.unit}/s"), (1e3, f"K{self.unit}/s")]
158
+ )
156
159
 
157
- # Display initial bar if we have total and not disabled
158
160
  if not self.disable and self.total and not self.noninteractive:
159
161
  self._display()
160
162
 
161
163
  def _format_rate(self, rate: float) -> str:
162
- """Format rate with proper units and reasonable precision."""
164
+ """Format rate with units."""
163
165
  if rate <= 0:
164
166
  return ""
167
+ fallback = f"{rate:.1f}B/s" if self.is_bytes else f"{rate:.1f}{self.unit}/s"
168
+ return next((f"{rate / t:.1f}{u}" for t, u in self.scales if rate >= t), fallback)
165
169
 
166
- # For bytes with scaling, use binary units
167
- if self.unit in ("B", "bytes") and self.unit_scale:
168
- return next(
169
- (
170
- f"{rate / threshold:.1f}{unit}"
171
- for threshold, unit in [
172
- (1073741824, "GB/s"),
173
- (1048576, "MB/s"),
174
- (1024, "KB/s"),
175
- ]
176
- if rate >= threshold
177
- ),
178
- f"{rate:.1f}B/s",
179
- )
180
- # For other scalable units, use decimal units
181
- if self.unit_scale and self.unit in ("it", "items", ""):
182
- for threshold, prefix in [(1000000, "M"), (1000, "K")]:
183
- if rate >= threshold:
184
- return f"{rate / threshold:.1f}{prefix}{self.unit}/s"
185
-
186
- # Default formatting
187
- precision = ".1f" if rate >= 1 else ".2f"
188
- return f"{rate:{precision}}{self.unit}/s"
189
-
190
- def _format_num(self, num: int) -> str:
170
+ def _format_num(self, num: int | float) -> str:
191
171
  """Format number with optional unit scaling."""
192
- if not self.unit_scale or self.unit not in ("B", "bytes"):
172
+ if not self.unit_scale or not self.is_bytes:
193
173
  return str(num)
194
174
 
195
- for unit in ["", "K", "M", "G", "T"]:
175
+ for unit in ("", "K", "M", "G", "T"):
196
176
  if abs(num) < self.unit_divisor:
197
177
  return f"{num:3.1f}{unit}B" if unit else f"{num:.0f}B"
198
178
  num /= self.unit_divisor
@@ -224,8 +204,7 @@ class TQDM:
224
204
  """Check if display should update."""
225
205
  if self.noninteractive:
226
206
  return False
227
-
228
- return True if self.total and self.n >= self.total else dt >= self.mininterval
207
+ return (self.total is not None and self.n >= self.total) or (dt >= self.mininterval)
229
208
 
230
209
  def _display(self, final: bool = False) -> None:
231
210
  """Display progress bar."""
@@ -240,8 +219,8 @@ class TQDM:
240
219
  return
241
220
 
242
221
  # Calculate rate (avoid crazy numbers)
243
- if dt > self.MIN_RATE_CALC_INTERVAL: # Only calculate rate if enough time has passed
244
- rate = dn / dt
222
+ if dt > self.MIN_RATE_CALC_INTERVAL:
223
+ rate = dn / dt if dt else 0.0
245
224
  # Smooth rate for reasonable values, use raw rate for very high values
246
225
  if rate < self.MAX_SMOOTHED_RATE:
247
226
  self.last_rate = self.RATE_SMOOTHING_FACTOR * rate + (1 - self.RATE_SMOOTHING_FACTOR) * self.last_rate
@@ -249,8 +228,8 @@ class TQDM:
249
228
  else:
250
229
  rate = self.last_rate
251
230
 
252
- # At completion, use the overall rate for more accurate display
253
- if self.n >= (self.total or float("inf")) and self.total and self.total > 0:
231
+ # At completion, use overall rate
232
+ if self.total and self.n >= self.total:
254
233
  overall_elapsed = current_time - self.start_t
255
234
  if overall_elapsed > 0:
256
235
  rate = self.n / overall_elapsed
@@ -260,45 +239,41 @@ class TQDM:
260
239
  self.last_print_t = current_time
261
240
  elapsed = current_time - self.start_t
262
241
 
263
- # Calculate remaining time
242
+ # Remaining time
264
243
  remaining_str = ""
265
244
  if self.total and 0 < self.n < self.total and elapsed > 0:
266
- est_rate = rate or self.n / elapsed
267
- remaining_str = self._format_time((self.total - self.n) / est_rate)
245
+ est_rate = rate or (self.n / elapsed)
246
+ remaining_str = f"<{self._format_time((self.total - self.n) / est_rate)}"
268
247
 
269
- # Build progress components
248
+ # Numbers and percent
270
249
  if self.total:
271
250
  percent = (self.n / self.total) * 100
272
- # For bytes with unit scaling, avoid repeating units: show "5.4/5.4MB" not "5.4MB/5.4MB"
273
- n = self._format_num(self.n)
274
- total = self._format_num(self.total)
275
- if self.unit_scale and self.unit in ("B", "bytes"):
276
- n = n.rstrip("KMGTPB") # Remove unit suffix from current
251
+ n_str = self._format_num(self.n)
252
+ t_str = self._format_num(self.total)
253
+ if self.is_bytes:
254
+ # Collapse suffix only when identical (e.g. "5.4/5.4MB")
255
+ if n_str[-2] == t_str[-2]:
256
+ n_str = n_str.rstrip("KMGTPB") # Remove unit suffix from current if different than total
277
257
  else:
278
- percent = 0
279
- n = self._format_num(self.n)
280
- total = "?"
258
+ percent = 0.0
259
+ n_str, t_str = self._format_num(self.n), "?"
281
260
 
282
261
  elapsed_str = self._format_time(elapsed)
262
+ rate_str = self._format_rate(rate) or (self._format_rate(self.n / elapsed) if elapsed > 0 else "")
283
263
 
284
- # Use different format for completion
285
- if self.total and self.n >= self.total:
286
- format_str = self.bar_format.replace("<{remaining}", "")
264
+ bar = self._generate_bar()
265
+
266
+ # Compose progress line via f-strings (two shapes: with/without total)
267
+ if self.total:
268
+ if self.is_bytes and self.n >= self.total:
269
+ # Completed bytes: show only final size
270
+ progress_str = f"{self.desc}: {percent:.0f}% {bar} {t_str} {rate_str} {elapsed_str}"
271
+ else:
272
+ progress_str = (
273
+ f"{self.desc}: {percent:.0f}% {bar} {n_str}/{t_str} {rate_str} {elapsed_str}{remaining_str}"
274
+ )
287
275
  else:
288
- format_str = self.bar_format
289
-
290
- # Format progress string
291
- progress_str = format_str.format(
292
- desc=self.desc,
293
- percent=percent,
294
- bar=self._generate_bar(),
295
- n=n,
296
- total=total,
297
- rate=self._format_rate(rate) or (self._format_rate(self.n / elapsed) if elapsed > 0 else ""),
298
- remaining=remaining_str,
299
- elapsed=elapsed_str,
300
- unit=self.unit,
301
- )
276
+ progress_str = f"{self.desc}: {bar} {n_str} {rate_str} {elapsed_str}"
302
277
 
303
278
  # Write to output
304
279
  try:
@@ -336,7 +311,7 @@ class TQDM:
336
311
  if self.closed:
337
312
  return
338
313
 
339
- self.closed = True # Set before final display
314
+ self.closed = True
340
315
 
341
316
  if not self.disable:
342
317
  # Final display
@@ -129,7 +129,7 @@ def run_ray_tune(
129
129
  {**train_args, **{"exist_ok": train_args.pop("resume", False)}}, # resume w/ same tune_dir
130
130
  ),
131
131
  name=train_args.pop("name", "tune"), # runs/{task}/{tune_dir}
132
- ).resolve() # must be absolute dir
132
+ ) # must be absolute dir
133
133
  tune_dir.mkdir(parents=True, exist_ok=True)
134
134
  if tune.Tuner.can_restore(tune_dir):
135
135
  LOGGER.info(f"{colorstr('Tuner: ')} Resuming tuning run {tune_dir}...")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ultralytics
3
- Version: 8.3.192
3
+ Version: 8.3.194
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>
@@ -3,15 +3,15 @@ tests/conftest.py,sha256=LXtQJcFNWPGuzauTGkiXgsvVC3llJKfg22WcmhRzuQc,2593
3
3
  tests/test_cli.py,sha256=EMf5gTAopOnIz8VvzaM-Qb044o7D0flnUHYQ-2ffOM4,5670
4
4
  tests/test_cuda.py,sha256=Z-MX1aIBQyt_fAAgKxBEznE0Mj7caSwrctW9z__NGzU,8240
5
5
  tests/test_engine.py,sha256=Jpt2KVrltrEgh2-3Ykouz-2Z_2fza0eymL5ectRXadM,4922
6
- tests/test_exports.py,sha256=jBMAWADCqBsPaZuhZKU7JgQVA0gfYHHFwOI6kx84bqo,10885
6
+ tests/test_exports.py,sha256=dWuroSyqXnrc0lE-RNTf7pZoXXXEkOs31u7nhOiEHS0,10994
7
7
  tests/test_integrations.py,sha256=kl_AKmE_Qs1GB0_91iVwbzNxofm_hFTt0zzU6JF-pg4,6323
8
- tests/test_python.py,sha256=IpjqS2wKSfZaukSdW7QtXeyijXxZ1uXiJLEdlkK_0jQ,27908
8
+ tests/test_python.py,sha256=FGZ2XabwLmXLcKTmsQHBBbxoVTCmk0B1ACcTWUBIUIo,27911
9
9
  tests/test_solutions.py,sha256=6wJ9-lhyWSAm7zaR4D9L_DrUA3iJU1NgqmbQO6PIuvo,13211
10
- ultralytics/__init__.py,sha256=fv9DpTt7g968y9c4iYJYq0uIRnM0qwT9YwnFXdpxv7o,730
10
+ ultralytics/__init__.py,sha256=UXztbDjWj3KFSfHZL_6SgEbd4QY_ofQJ2YQxENZsaJA,730
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
14
- ultralytics/cfg/__init__.py,sha256=B6lVzv3ISXgZFgKv8cB1YumCvhFUDVr7RNXbHGF3V9Q,39867
14
+ ultralytics/cfg/__init__.py,sha256=oi3unUYklhdf-uF_0v9dSBOj5EyPRKQbgVVKHrztKns,39955
15
15
  ultralytics/cfg/default.yaml,sha256=1SspGAK_K_DT7DBfEScJh4jsJUTOxahehZYj92xmj7o,8347
16
16
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=J4ItoUlE_EiYTmp1DFKYHfbqHkj8j4wUtRJQhaMIlBM,3275
17
17
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=VZ_KKFX0H2YvlFVJ8JHcLWYBZ2xiQ6Z-ROSTiKWpS7c,1211
@@ -46,7 +46,7 @@ ultralytics/cfg/datasets/open-images-v7.yaml,sha256=wK9v3OAGdHORkFdqoBi0hS0fa1b7
46
46
  ultralytics/cfg/datasets/package-seg.yaml,sha256=V4uyTDWWzgft24y9HJWuELKuZ5AndAHXbanxMI6T8GU,849
47
47
  ultralytics/cfg/datasets/signature.yaml,sha256=gBvU3715gVxVAafI_yaYczGX3kfEfA4BttbiMkgOXNk,774
48
48
  ultralytics/cfg/datasets/tiger-pose.yaml,sha256=Y_8htA4--6hmpqHTW-Ix4t9SdaWenSSyl_FUtI2A7n8,926
49
- ultralytics/cfg/datasets/xView.yaml,sha256=P347BJlmb7AG7YC29JyyOtNy52QqZ87Sn7gFP8Dx86s,5353
49
+ ultralytics/cfg/datasets/xView.yaml,sha256=eaQ7bYDRrOMRdaxN_wzlH_fN0wdIlT_GQDtPzrHS2-s,5353
50
50
  ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml,sha256=1Ycp9qMrwpb8rq7cqht3Q-1gMN0R87U35nm2j_isdro,524
51
51
  ultralytics/cfg/models/11/yolo11-cls.yaml,sha256=17l5GdN-Vst4LvafsK2-q6Li9VX9UlUcT5ClCtikweE,1412
52
52
  ultralytics/cfg/models/11/yolo11-obb.yaml,sha256=3M_c06B-y8da4tunHVxQQ-iFUNLKUfofqCZTpnH5FEU,2034
@@ -114,23 +114,23 @@ ultralytics/data/dataset.py,sha256=JC3sHsKva65sSptdAJHfh90yyag8WrqGXcXNpD9C-f0,3
114
114
  ultralytics/data/loaders.py,sha256=Mt6ogS2SUq8SE6oJajX7xSyzIxvwjKUhxFbIynhBlGk,31748
115
115
  ultralytics/data/split.py,sha256=5ubnL_wsEutFQOj4I4K01L9UpZrrO_vO3HrydSLJyIY,5107
116
116
  ultralytics/data/split_dota.py,sha256=gSGHRWZFQOofMkb8GcTtkUb5gV5jtOV7bzVMovTW0ak,12910
117
- ultralytics/data/utils.py,sha256=Y92D9qxVBZ0uOdhYbFctcBZhRTxOiYYwfFQsVYwtS-8,36702
117
+ ultralytics/data/utils.py,sha256=1YF_-v-laBG41WGmnLo4xsfOhCNNN1og8b2yo11FJos,36716
118
118
  ultralytics/data/scripts/download_weights.sh,sha256=0y8XtZxOru7dVThXDFUXLHBuICgOIqZNUwpyL4Rh6lg,595
119
119
  ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J3jKrnPw,1768
120
120
  ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
121
121
  ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
122
122
  ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
123
- ultralytics/engine/exporter.py,sha256=llc7LdSYD1bkwFw3iUs_xHEZZQk6wE64R6a6LNduUzU,75400
124
- ultralytics/engine/model.py,sha256=oxlYx1nMEOcqLFr_clFhWv3Lni-Ykl3-k1NX9JoHiqY,53520
125
- ultralytics/engine/predictor.py,sha256=bPG_YOnrtXr8zM8QGEkgJJWT5zaDJsN9hEhH6sEkYUs,22478
123
+ ultralytics/engine/exporter.py,sha256=c7OXFm9qBliL9zVL5g8_hVp8dVwZd3L-MnwSZDPLVrw,75428
124
+ ultralytics/engine/model.py,sha256=q3rj1QmJoR4uYXb6dvn2dVRheEY8TzJhm9KznD_VDso,53488
125
+ ultralytics/engine/predictor.py,sha256=EzFcRzihNTYgdayviLwEk7pUOotNoEVbQtVFI18jNpM,22625
126
126
  ultralytics/engine/results.py,sha256=115lVbiqzyho1fXm-YpqQBtKiv-Wo2FPNhz6ExYHtCk,71499
127
- ultralytics/engine/trainer.py,sha256=VXgBtW7S7-6XoUQKzQIE6gV4kSo-TPDXHzrT4OAUasg,40505
127
+ ultralytics/engine/trainer.py,sha256=_mTG-z6xnOdFUmB6uOF8HQkFb_uMwP0MrJHlt7X3zVw,40457
128
128
  ultralytics/engine/tuner.py,sha256=XuqcjyGpD79pUVn-PXlJJGKXgH1yblPdYBH_R2kHWSU,20586
129
129
  ultralytics/engine/validator.py,sha256=8ky0lcMCYDY7RGYRUowDAKxEMfsPBLpT7LlgfHA-IsY,16681
130
- ultralytics/hub/__init__.py,sha256=RmrZw24uyFF109SLVba1s-ItjllfzRKlCgQ_U0RVRUo,6720
130
+ ultralytics/hub/__init__.py,sha256=xCF02lzlPKbdmGfO3NxLuXl5Kb0MaBZp_-fAWDHZ8zw,6698
131
131
  ultralytics/hub/auth.py,sha256=RIwZDWfW6vS2yGpZKR0xVl0-38itJYEFtmqY_M70bl8,6304
132
132
  ultralytics/hub/session.py,sha256=iz7HbxU63OHr-7bNm1QIKPVRQc-3lnXMbWH19bgFVfQ,18450
133
- ultralytics/hub/utils.py,sha256=eQRtJ1KzdiWgj_-7cVgEKxeFWaQbxw9sJLtoX7Up8wg,10189
133
+ ultralytics/hub/utils.py,sha256=19ZbwQuIumEb9JwdpUwDxmCZq1Ftm-7whU5yvGABvhY,6384
134
134
  ultralytics/hub/google/__init__.py,sha256=-Hh4rUoQBdUFkPqnj7UeQUMdejVbbL8nFFrKAT5OxhE,8468
135
135
  ultralytics/models/__init__.py,sha256=DqQFFYJ4IQlqIDb61H1HzcnZU7SuHN-43bw94-l-YAQ,309
136
136
  ultralytics/models/fastsam/__init__.py,sha256=HGJ8EKlBAsdF-e2aIwQLjSDAFI_r0yHR0A1gzrp4vqE,231
@@ -151,7 +151,7 @@ ultralytics/models/sam/__init__.py,sha256=4VtjxrbrSsqBvteaD_CwA4Nj3DdSUG1MknymtW
151
151
  ultralytics/models/sam/amg.py,sha256=07UkNkcbOUj3tc9L2H9rAuH5s1WDJLqX81kt2zbzDsw,11821
152
152
  ultralytics/models/sam/build.py,sha256=J6n-_QOYLa63jldEZmhRe9D3Is_AJE8xyZLUjzfRyTY,12629
153
153
  ultralytics/models/sam/model.py,sha256=rTBCWYoYDKvF34FY5RXhdTTSNa_fO4LjkJbIPgYh-L8,7237
154
- ultralytics/models/sam/predict.py,sha256=yplRzYQ3KalzXGh3PD90XaefW6R4iWmWRV_3Hn9UA78,104966
154
+ ultralytics/models/sam/predict.py,sha256=E6BrWPJw26ZS6Cv0IhdMhXllnx6XiNvTHfQlBJGrEr4,104963
155
155
  ultralytics/models/sam/modules/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
156
156
  ultralytics/models/sam/modules/blocks.py,sha256=Wc6ThlZ5G3S8XJrH6WclbyzI3vIqWHKAWYb7n3A6Fdk,46055
157
157
  ultralytics/models/sam/modules/decoders.py,sha256=Vc0nDC1Ex8RBxJX6j-RWRdkYQif0A4-0vtE13aeF8eA,25620
@@ -185,7 +185,7 @@ ultralytics/models/yolo/pose/val.py,sha256=A4Cvzmqyu0oW5UC9mqNL731ngAwqQBic6tdMc
185
185
  ultralytics/models/yolo/segment/__init__.py,sha256=3IThhZ1wlkY9FvmWm9cE-5-ZyE6F1FgzAtQ6jOOFzzw,275
186
186
  ultralytics/models/yolo/segment/predict.py,sha256=qlprQCZn4_bpjpI08U0MU9Q9_1gpHrw_7MXwtXE1l1Y,5377
187
187
  ultralytics/models/yolo/segment/train.py,sha256=bBEnEUHqN3QlbreD5Fy-h1X5Ps-dONH2r9EnoLc72x4,3762
188
- ultralytics/models/yolo/segment/val.py,sha256=8ASdhhSaJ4NjRFHEuL26Uwt4zTKyXmcGvokHVg74ZsE,11345
188
+ ultralytics/models/yolo/segment/val.py,sha256=Xy2T-Y4IjjuR5GqWGJjHmCLGL9FxEWfMXDoCoP_ZBBM,11147
189
189
  ultralytics/models/yolo/world/__init__.py,sha256=nlh8I6t8hMGz_vZg8QSlsUW1R-2eKvn9CGUoPPQEGhA,131
190
190
  ultralytics/models/yolo/world/train.py,sha256=9tSDba3X9VA2y-2oJJUMdXUBi-IdgRmqLW18UqfukvI,7866
191
191
  ultralytics/models/yolo/world/train_world.py,sha256=lk9z_INGPSTP_W7Rjh3qrWSmjHaxOJtGngonh1cj2SM,9551
@@ -193,10 +193,10 @@ ultralytics/models/yolo/yoloe/__init__.py,sha256=6SLytdJtwu37qewf7CobG7C7Wl1m-xt
193
193
  ultralytics/models/yolo/yoloe/predict.py,sha256=GmQxCQe7sLomAujde53jQzquzryNn6fEjS4Oalf3mPs,7124
194
194
  ultralytics/models/yolo/yoloe/train.py,sha256=lAb-5TgYA_Z6rwEYCMdPcfjJmCGYQqXE5I40n25CTRk,14067
195
195
  ultralytics/models/yolo/yoloe/train_seg.py,sha256=aCV7M8oQOvODFnU4piZdJh3tIrBJYAzZfRVRx1vRgxo,4956
196
- ultralytics/models/yolo/yoloe/val.py,sha256=6uLH3znvn4iF_4F9RCbXWtiy9lsSQBUC9KrhU_2rIQs,9787
197
- ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
198
- ultralytics/nn/autobackend.py,sha256=lvotDJeABLcF7Xb0muAoxM6V3MI0EWKq9vAClHbm7tI,41376
199
- ultralytics/nn/tasks.py,sha256=WSEA_odbXC0R_EGlcoOUhvE8ERIj62-7Tt9rWbo54nE,72480
196
+ ultralytics/models/yolo/yoloe/val.py,sha256=MnS2YwhRxdqXPRlExHt-9HRp8KKIHuFdmiNH1z6LedI,9795
197
+ ultralytics/nn/__init__.py,sha256=PJgOn2phQTTBR2P3s_JWvGeGXQpvw1znsumKow4tCuE,545
198
+ ultralytics/nn/autobackend.py,sha256=MJtvfT9tiJtlLQIp88wnSImMGxwCAqS6fNMZtMJe1ZA,41063
199
+ ultralytics/nn/tasks.py,sha256=tvoVVqVoMZuylLmUJNDs9eX4bdFbDibQKd3lJed5fYY,70470
200
200
  ultralytics/nn/text_model.py,sha256=lserJWlXNzP31jB4xA-7gkbhB0VsMBGiE9G8wYpztvE,15275
201
201
  ultralytics/nn/modules/__init__.py,sha256=BPMbEm1daI7Tuds3zph2_afAX7Gq1uAqK8BfiCfKTZs,3198
202
202
  ultralytics/nn/modules/activation.py,sha256=75JcIMH2Cu9GTC2Uf55r_5YLpxcrXQDaVoeGQ0hlUAU,2233
@@ -235,14 +235,15 @@ ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6D
235
235
  ultralytics/trackers/utils/gmc.py,sha256=a4WuIh976_GYogvlQEPKTNE59JNNtSNlT_IPrz4wmrM,14028
236
236
  ultralytics/trackers/utils/kalman_filter.py,sha256=PPmM0lwBMdT_hGojvfLoUsBUFMBBMNRAxKbMcQa3wJ0,21619
237
237
  ultralytics/trackers/utils/matching.py,sha256=uSYtywqi1lE_uNN1FwuBFPyISfDQXHMu8K5KH69nrRI,7160
238
- ultralytics/utils/__init__.py,sha256=AKhyF3aM0jwcgAlA2w6ZwAb6K2AQJAxY4q3GnETOxFY,53065
238
+ ultralytics/utils/__init__.py,sha256=8vYownbjAVDmRc2cafLetRjcq-YsUcy1LPKmSrz5yuM,53204
239
239
  ultralytics/utils/autobatch.py,sha256=i6KYLLSItKP1Q2IUlTPHrZhjcxl7UOjs0Seb8bF8pvM,5124
240
240
  ultralytics/utils/autodevice.py,sha256=Od9SGx6xAQoX-3L62PS7I6xOxbbqjYLR4Wipgn5WoDc,8843
241
241
  ultralytics/utils/benchmarks.py,sha256=zKI-DxEqaVmqlE2pg9p6j1kI7Efo1OyM1NnKubYpDU8,31458
242
- ultralytics/utils/checks.py,sha256=jLM9CuKI6aZGIGG4W2n_CORCApGnUb2a1Z5YH87ngew,34453
242
+ ultralytics/utils/checks.py,sha256=WBuJKFiXGqf-5n0S_QNwRet3ZxVIFMdG0VPZSoOJwYM,34468
243
243
  ultralytics/utils/dist.py,sha256=A9lDGtGefTjSVvVS38w86GOdbtLzNBDZuDGK0MT4PRI,4170
244
244
  ultralytics/utils/downloads.py,sha256=mLOLonKQsePC15sLVZJzGyLmD_TZPkL1T_qd0gUb4lA,23029
245
245
  ultralytics/utils/errors.py,sha256=XT9Ru7ivoBgofK6PlnyigGoa7Fmf5nEhyHtnD-8TRXI,1584
246
+ ultralytics/utils/events.py,sha256=v2RmLlx78_K6xQfOAuUTJMOexAgNdiuiOvvnsH65oDA,4679
246
247
  ultralytics/utils/export.py,sha256=xHBBDyI0hGQ1hbUi-uWnCgnFBES77nXqZFtgSrX0VXA,9838
247
248
  ultralytics/utils/files.py,sha256=kxE2rkBuZL288nSN7jxLljmDnBgc16rekEXeRjhbUoo,8213
248
249
  ultralytics/utils/git.py,sha256=DcaxKNQfCiG3cxdzuw7M6l_VXgaSVqkERQt_vl8UyXM,5512
@@ -251,29 +252,29 @@ ultralytics/utils/logger.py,sha256=o_vH4CCgQat6_Sbmwm1sUAJ4muAgVcsUed-WqpGNQZw,1
251
252
  ultralytics/utils/loss.py,sha256=sC2efov3Uwg2eT5oOzMHRfnQLZvtGXSdMuWBTKxyxPw,39816
252
253
  ultralytics/utils/metrics.py,sha256=9nykBkIy6soJebhc31UpaQghC4kz8e0qUpGpnr4yaGs,68809
253
254
  ultralytics/utils/nms.py,sha256=wCRQ7O7shv5ccEWHgtF9Ky_vUeyumxFLWBFEj1h0U54,14199
254
- ultralytics/utils/ops.py,sha256=z6feVEbs57eN18Nl4IEdhgUiChGAZrq4bQjDkp-0MxA,26630
255
+ ultralytics/utils/ops.py,sha256=_qd_MY6IJQbhdihNvJCRe4Ws22awGrS2QUuRFdkk-EI,26886
255
256
  ultralytics/utils/patches.py,sha256=j0fXwX3YqKrON7yrmSVkXsn__tsvs4qVuysH-hzcxOE,6541
256
257
  ultralytics/utils/plotting.py,sha256=6iPtxQJ7JFTv2vWpSzP90plkksXhvql1EVQaKomkuiQ,47515
257
- ultralytics/utils/tal.py,sha256=K3lPxC3bbduP8ho-toJ9VHnklo5IaGkqogEaQorbrvs,20924
258
- ultralytics/utils/torch_utils.py,sha256=UrFD-R-3XhYSHgFg3rF2HGyk0YojM2jNCyxiIsOb-TY,39493
259
- ultralytics/utils/tqdm.py,sha256=UyCozFXNACO0C_zE2fcqO9IFsbNYVAbJ_zCObyNb8nY,16908
258
+ ultralytics/utils/tal.py,sha256=LrziY_ZHz4wln3oOnqAzgyPaXKoup17Sa103BpuaQFU,20935
259
+ ultralytics/utils/torch_utils.py,sha256=SKgOEaa2_7k7tGI4VfNWcQV4wvjLWVUusJreEc4bPmI,39488
260
+ ultralytics/utils/tqdm.py,sha256=ny5RIg2OTkWQ7gdaXfYaoIgR0Xn2_hNGB6tUpO2Unns,16137
260
261
  ultralytics/utils/triton.py,sha256=-qG-ZP5uotcD8FZyaAcEGHX7Cv9_yBG8UHvmmXpYZkM,5422
261
- ultralytics/utils/tuner.py,sha256=bHr09Fz-0-t0ei55gX5wJh-obyiAQoicP7HUVM2I8qA,6826
262
+ ultralytics/utils/tuner.py,sha256=9D4dSIvwwxcNSJcH2QJ92qiIVi9zu-1L7_PBZ8okDyE,6816
262
263
  ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
263
264
  ultralytics/utils/callbacks/base.py,sha256=dGir0vkJY4jjprW63e23Qy4kHUT5dOINPii6HnwJuPg,6893
264
265
  ultralytics/utils/callbacks/clearml.py,sha256=xr5mZT_cY6AY_drbdCXFt-Dp2fOjRELxLDhDoRhNPg8,6067
265
266
  ultralytics/utils/callbacks/comet.py,sha256=t-O4Kc57wLFFEclyl6XJWAixrNle0mpZK5IEM__WoTY,25393
266
267
  ultralytics/utils/callbacks/dvc.py,sha256=NV0DXMQ1B5Sk5fmh60QFUGkifrAz-vwit5qhdfsyqXc,7511
267
- ultralytics/utils/callbacks/hub.py,sha256=IZ8lldLfxI0SvMnG9aWGWj59JFSks_x11L2is26ajd0,4123
268
+ ultralytics/utils/callbacks/hub.py,sha256=fVLqqr3ZM6hoYFlVMEeejfq1MWDrkWCskPFOG3HGILQ,4159
268
269
  ultralytics/utils/callbacks/mlflow.py,sha256=6K8I5zij1yq3TUW9c5BBQNqdzz3IXugQjwKoBOvV6ag,5344
269
270
  ultralytics/utils/callbacks/neptune.py,sha256=j8pecmlcsM8FGzLKWoBw5xUsi5t8E5HuxY7TR5Um_O8,4612
270
271
  ultralytics/utils/callbacks/platform.py,sha256=a7T_8htoBB0uX1WIc392UJnhDjxkRyQMvhPYKR6wUTU,2008
271
272
  ultralytics/utils/callbacks/raytune.py,sha256=S6Bq16oQDQ8BQgnZzA0zJHGN_BBr8iAM_WtGoLiEcwg,1283
272
273
  ultralytics/utils/callbacks/tensorboard.py,sha256=MDPBW7aDes-66OE6YqKXXvqA_EocjzEMHWGM-8z9vUQ,5281
273
274
  ultralytics/utils/callbacks/wb.py,sha256=ngQO8EJ1kxJDF1YajScVtzBbm26jGuejA0uWeOyvf5A,7685
274
- ultralytics-8.3.192.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
275
- ultralytics-8.3.192.dist-info/METADATA,sha256=zImdmVNC-Rkal6Vl5Y7Hp1ji1rYDd5x0p2Kesp18hZ4,37693
276
- ultralytics-8.3.192.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
277
- ultralytics-8.3.192.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
278
- ultralytics-8.3.192.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
279
- ultralytics-8.3.192.dist-info/RECORD,,
275
+ ultralytics-8.3.194.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
276
+ ultralytics-8.3.194.dist-info/METADATA,sha256=cV5XQUxd31Y4JxnDdpSznTtc6OnYMXIURwy9Fg11emw,37693
277
+ ultralytics-8.3.194.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
278
+ ultralytics-8.3.194.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
279
+ ultralytics-8.3.194.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
280
+ ultralytics-8.3.194.dist-info/RECORD,,