ultralytics 8.3.51__py3-none-any.whl → 8.3.53__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.3.51"
3
+ __version__ = "8.3.53"
4
4
 
5
5
  import os
6
6
 
@@ -1,22 +1,22 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
- # Configuration for Ultralytics Solutions
2
+ # Configuration for Ultralytics Solutions: https://docs.ultralytics.com/solutions/
3
3
 
4
- # Object counting settings
5
- region: # Object counting, queue or speed estimation region points. Default region points are [(20, 400), (1080, 400), (1080, 360), (20, 360)]
6
- show_in: True # Flag to display objects moving *into* the defined region
7
- show_out: True # Flag to display objects moving *out of* the defined region
4
+ # Object counting settings --------------------------------------------------------------------------------------------
5
+ region: # list[tuple[int, int]] object counting, queue or speed estimation region points.
6
+ show_in: True # (bool) flag to display objects moving *into* the defined region
7
+ show_out: True # (bool) flag to display objects moving *out of* the defined region
8
8
 
9
- # Heatmaps settings
10
- colormap: # Colormap for heatmap, Only OPENCV supported colormaps can be used. By default COLORMAP_PARULA will be used for visualization.
9
+ # Heatmaps settings ----------------------------------------------------------------------------------------------------
10
+ colormap: # (int | str) colormap for heatmap, Only OPENCV supported colormaps can be used.
11
11
 
12
- # Workouts monitoring settings
13
- up_angle: 145.0 # Workouts up_angle for counts, 145.0 is default value. You can adjust it for different workouts, based on position of keypoints.
14
- down_angle: 90 # Workouts down_angle for counts, 90 is default value. You can change it for different workouts, based on position of keypoints.
15
- kpts: [6, 8, 10] # Keypoints for workouts monitoring, i.e. If you want to consider keypoints for pushups that have mostly values of [6, 8, 10].
12
+ # Workouts monitoring settings -----------------------------------------------------------------------------------------
13
+ up_angle: 145.0 # (float) Workouts up_angle for counts, 145.0 is default value.
14
+ down_angle: 90 # (float) Workouts down_angle for counts, 90 is default value. Y
15
+ kpts: [6, 8, 10] # (list[int]) keypoints for workouts monitoring, i.e. for pushups kpts have values of [6, 8, 10].
16
16
 
17
- # Analytics settings
18
- analytics_type: "line" # Analytics type i.e "line", "pie", "bar" or "area" charts. By default, "line" analytics will be used for processing.
19
- json_file: # parking system regions file path.
17
+ # Analytics settings ---------------------------------------------------------------------------------------------------
18
+ analytics_type: "line" # (str) analytics type i.e "line", "pie", "bar" or "area" charts.
19
+ json_file: # (str) parking system regions file path.
20
20
 
21
- # Security alarm system
22
- records: 5 # Total detections count to send an email about security
21
+ # Security alarm system settings ---------------------------------------------------------------------------------------
22
+ records: 5 # (int) Total detections count to send an email about security
@@ -101,23 +101,47 @@ from ultralytics.utils.torch_utils import TORCH_1_13, get_latest_opset, select_d
101
101
  def export_formats():
102
102
  """Ultralytics YOLO export formats."""
103
103
  x = [
104
- ["PyTorch", "-", ".pt", True, True],
105
- ["TorchScript", "torchscript", ".torchscript", True, True],
106
- ["ONNX", "onnx", ".onnx", True, True],
107
- ["OpenVINO", "openvino", "_openvino_model", True, False],
108
- ["TensorRT", "engine", ".engine", False, True],
109
- ["CoreML", "coreml", ".mlpackage", True, False],
110
- ["TensorFlow SavedModel", "saved_model", "_saved_model", True, True],
111
- ["TensorFlow GraphDef", "pb", ".pb", True, True],
112
- ["TensorFlow Lite", "tflite", ".tflite", True, False],
113
- ["TensorFlow Edge TPU", "edgetpu", "_edgetpu.tflite", True, False],
114
- ["TensorFlow.js", "tfjs", "_web_model", True, False],
115
- ["PaddlePaddle", "paddle", "_paddle_model", True, True],
116
- ["MNN", "mnn", ".mnn", True, True],
117
- ["NCNN", "ncnn", "_ncnn_model", True, True],
118
- ["IMX", "imx", "_imx_model", True, True],
104
+ ["PyTorch", "-", ".pt", True, True, []],
105
+ ["TorchScript", "torchscript", ".torchscript", True, True, ["optimize", "batch"]],
106
+ ["ONNX", "onnx", ".onnx", True, True, ["half", "dynamic", "simplify", "opset", "batch"]],
107
+ ["OpenVINO", "openvino", "_openvino_model", True, False, ["half", "int8", "batch"]],
108
+ ["TensorRT", "engine", ".engine", False, True, ["half", "dynamic", "simplify", "int8", "batch"]],
109
+ ["CoreML", "coreml", ".mlpackage", True, False, ["half", "int8", "nms", "batch"]],
110
+ ["TensorFlow SavedModel", "saved_model", "_saved_model", True, True, ["keras", "int8", "batch"]],
111
+ ["TensorFlow GraphDef", "pb", ".pb", True, True, ["batch"]],
112
+ ["TensorFlow Lite", "tflite", ".tflite", True, False, ["half", "int8", "batch"]],
113
+ ["TensorFlow Edge TPU", "edgetpu", "_edgetpu.tflite", True, False, []],
114
+ ["TensorFlow.js", "tfjs", "_web_model", True, False, ["half", "int8", "batch"]],
115
+ ["PaddlePaddle", "paddle", "_paddle_model", True, True, ["batch"]],
116
+ ["MNN", "mnn", ".mnn", True, True, ["batch", "int8", "half"]],
117
+ ["NCNN", "ncnn", "_ncnn_model", True, True, ["half", "batch"]],
118
+ ["IMX", "imx", "_imx_model", True, True, ["int8"]],
119
119
  ]
120
- return dict(zip(["Format", "Argument", "Suffix", "CPU", "GPU"], zip(*x)))
120
+ return dict(zip(["Format", "Argument", "Suffix", "CPU", "GPU", "Arguments"], zip(*x)))
121
+
122
+
123
+ def validate_args(format, passed_args, valid_args):
124
+ """
125
+ Validates arguments based on format.
126
+
127
+ Args:
128
+ format (str): The export format.
129
+ passed_args (Namespace): The arguments used during export.
130
+ valid_args (dict): List of valid arguments for the format.
131
+
132
+ Raises:
133
+ AssertionError: If an argument that's not supported by the export format is used, or if format doesn't have the supported arguments listed.
134
+ """
135
+ # Only check valid usage of these args
136
+ export_args = ["half", "int8", "dynamic", "keras", "nms", "batch"]
137
+
138
+ assert valid_args is not None, f"ERROR ❌️ valid arguments for '{format}' not listed."
139
+ custom = {"batch": 1, "data": None, "device": None} # exporter defaults
140
+ default_args = get_cfg(DEFAULT_CFG, custom)
141
+ for arg in export_args:
142
+ not_default = getattr(passed_args, arg, None) != getattr(default_args, arg, None)
143
+ if not_default:
144
+ assert arg in valid_args, f"ERROR ❌️ argument '{arg}' is not supported for format='{format}'"
121
145
 
122
146
 
123
147
  def gd_outputs(gd):
@@ -182,7 +206,8 @@ class Exporter:
182
206
  fmt = "engine"
183
207
  if fmt in {"mlmodel", "mlpackage", "mlprogram", "apple", "ios", "coreml"}: # 'coreml' aliases
184
208
  fmt = "coreml"
185
- fmts = tuple(export_formats()["Argument"][1:]) # available export formats
209
+ fmts_dict = export_formats()
210
+ fmts = tuple(fmts_dict["Argument"][1:]) # available export formats
186
211
  if fmt not in fmts:
187
212
  import difflib
188
213
 
@@ -224,7 +249,8 @@ class Exporter:
224
249
  assert dla in {"0", "1"}, f"Expected self.args.device='dla:0' or 'dla:1, but got {self.args.device}."
225
250
  self.device = select_device("cpu" if self.args.device is None else self.args.device)
226
251
 
227
- # Checks
252
+ # Argument compatibility checks
253
+ validate_args(fmt, self.args, fmts_dict["Arguments"][flags.index(True) + 1])
228
254
  if imx and not self.args.int8:
229
255
  LOGGER.warning("WARNING ⚠️ IMX only supports int8 export, setting int8=True.")
230
256
  self.args.int8 = True
@@ -12,12 +12,12 @@ import subprocess
12
12
  import sys
13
13
  import threading
14
14
  import time
15
- import urllib
16
15
  import uuid
17
16
  from pathlib import Path
18
17
  from threading import Lock
19
18
  from types import SimpleNamespace
20
19
  from typing import Union
20
+ from urllib.parse import unquote
21
21
 
22
22
  import cv2
23
23
  import matplotlib.pyplot as plt
@@ -1130,7 +1130,8 @@ class JSONDict(dict):
1130
1130
 
1131
1131
  def __str__(self):
1132
1132
  """Return a pretty-printed JSON string representation of the dictionary."""
1133
- return f'JSONDict("{self.file_path}"):\n{json.dumps(dict(self), indent=2, ensure_ascii=False, default=self._json_default)}'
1133
+ contents = json.dumps(dict(self), indent=2, ensure_ascii=False, default=self._json_default)
1134
+ return f'JSONDict("{self.file_path}"):\n{contents}'
1134
1135
 
1135
1136
  def update(self, *args, **kwargs):
1136
1137
  """Update the dictionary and persist changes."""
@@ -1238,14 +1239,23 @@ class SettingsManager(JSONDict):
1238
1239
  f"Please change one to avoid possible issues during training. {self.help_msg}"
1239
1240
  )
1240
1241
 
1242
+ def __setitem__(self, key, value):
1243
+ """Updates one key: value pair."""
1244
+ self.update({key: value})
1245
+
1241
1246
  def update(self, *args, **kwargs):
1242
1247
  """Updates settings, validating keys and types."""
1248
+ for arg in args:
1249
+ if isinstance(arg, dict):
1250
+ kwargs.update(arg)
1243
1251
  for k, v in kwargs.items():
1244
1252
  if k not in self.defaults:
1245
1253
  raise KeyError(f"No Ultralytics setting '{k}'. {self.help_msg}")
1246
1254
  t = type(self.defaults[k])
1247
1255
  if not isinstance(v, t):
1248
- raise TypeError(f"Ultralytics setting '{k}' must be of type '{t}', not '{type(v)}'. {self.help_msg}")
1256
+ raise TypeError(
1257
+ f"Ultralytics setting '{k}' must be '{t.__name__}' type, not '{type(v).__name__}'. {self.help_msg}"
1258
+ )
1249
1259
  super().update(*args, **kwargs)
1250
1260
 
1251
1261
  def reset(self):
@@ -1265,7 +1275,7 @@ def deprecation_warn(arg, new_arg=None):
1265
1275
  def clean_url(url):
1266
1276
  """Strip auth from URL, i.e. https://url.com/file.txt?auth -> https://url.com/file.txt."""
1267
1277
  url = Path(url).as_posix().replace(":/", "://") # Pathlib turns :// -> :/, as_posix() for Windows
1268
- return urllib.parse.unquote(url).split("?")[0] # '%2F' to '/', split https://url.com/file.txt?auth
1278
+ return unquote(url).split("?")[0] # '%2F' to '/', split https://url.com/file.txt?auth
1269
1279
 
1270
1280
 
1271
1281
  def url2file(url):
@@ -90,7 +90,7 @@ def benchmark(
90
90
 
91
91
  y = []
92
92
  t0 = time.time()
93
- for i, (name, format, suffix, cpu, gpu) in enumerate(zip(*export_formats().values())):
93
+ for i, (name, format, suffix, cpu, gpu, _) in enumerate(zip(*export_formats().values())):
94
94
  emoji, filename = "❌", None # export defaults
95
95
  try:
96
96
  # Checks
ultralytics/utils/ops.py CHANGED
@@ -75,8 +75,13 @@ def segment2box(segment, width=640, height=640):
75
75
  (np.ndarray): the minimum and maximum x and y values of the segment.
76
76
  """
77
77
  x, y = segment.T # segment xy
78
- x = x.clip(0, width)
79
- y = y.clip(0, height)
78
+ # any 3 out of 4 sides are outside the image, clip coordinates first, https://github.com/ultralytics/ultralytics/pull/18294
79
+ if np.array([x.min() < 0, y.min() < 0, x.max() > width, y.max() > height]).sum() >= 3:
80
+ x = x.clip(0, width)
81
+ y = y.clip(0, height)
82
+ inside = (x >= 0) & (y >= 0) & (x <= width) & (y <= height)
83
+ x = x[inside]
84
+ y = y[inside]
80
85
  return (
81
86
  np.array([x.min(), y.min(), x.max(), y.max()], dtype=segment.dtype)
82
87
  if any(x)
@@ -617,6 +617,32 @@ def convert_optimizer_state_dict_to_fp16(state_dict):
617
617
  return state_dict
618
618
 
619
619
 
620
+ @contextmanager
621
+ def cuda_memory_usage(device=None):
622
+ """
623
+ Monitor and manage CUDA memory usage.
624
+
625
+ This function checks if CUDA is available and, if so, empties the CUDA cache to free up unused memory.
626
+ It then yields a dictionary containing memory usage information, which can be updated by the caller.
627
+ Finally, it updates the dictionary with the amount of memory reserved by CUDA on the specified device.
628
+
629
+ Args:
630
+ device (torch.device, optional): The CUDA device to query memory usage for. Defaults to None.
631
+
632
+ Yields:
633
+ (dict): A dictionary with a key 'memory' initialized to 0, which will be updated with the reserved memory.
634
+ """
635
+ cuda_info = dict(memory=0)
636
+ if torch.cuda.is_available():
637
+ torch.cuda.empty_cache()
638
+ try:
639
+ yield cuda_info
640
+ finally:
641
+ cuda_info["memory"] = torch.cuda.memory_reserved(device)
642
+ else:
643
+ yield cuda_info
644
+
645
+
620
646
  def profile(input, ops, n=10, device=None, max_num_obj=0):
621
647
  """
622
648
  Ultralytics speed, memory and FLOPs profiler.
@@ -653,27 +679,31 @@ def profile(input, ops, n=10, device=None, max_num_obj=0):
653
679
  flops = 0
654
680
 
655
681
  try:
682
+ mem = 0
656
683
  for _ in range(n):
657
- t[0] = time_sync()
658
- y = m(x)
659
- t[1] = time_sync()
660
- try:
661
- (sum(yi.sum() for yi in y) if isinstance(y, list) else y).sum().backward()
662
- t[2] = time_sync()
663
- except Exception: # no backward method
664
- # print(e) # for debug
665
- t[2] = float("nan")
684
+ with cuda_memory_usage(device) as cuda_info:
685
+ t[0] = time_sync()
686
+ y = m(x)
687
+ t[1] = time_sync()
688
+ try:
689
+ (sum(yi.sum() for yi in y) if isinstance(y, list) else y).sum().backward()
690
+ t[2] = time_sync()
691
+ except Exception: # no backward method
692
+ # print(e) # for debug
693
+ t[2] = float("nan")
694
+ mem += cuda_info["memory"] / 1e9 # (GB)
666
695
  tf += (t[1] - t[0]) * 1000 / n # ms per op forward
667
696
  tb += (t[2] - t[1]) * 1000 / n # ms per op backward
668
697
  if max_num_obj: # simulate training with predictions per image grid (for AutoBatch)
669
- torch.randn(
670
- x.shape[0],
671
- max_num_obj,
672
- int(sum((x.shape[-1] / s) * (x.shape[-2] / s) for s in m.stride.tolist())),
673
- device=device,
674
- dtype=torch.float32,
675
- )
676
- mem = torch.cuda.memory_reserved() / 1e9 if torch.cuda.is_available() else 0 # (GB)
698
+ with cuda_memory_usage(device) as cuda_info:
699
+ torch.randn(
700
+ x.shape[0],
701
+ max_num_obj,
702
+ int(sum((x.shape[-1] / s) * (x.shape[-2] / s) for s in m.stride.tolist())),
703
+ device=device,
704
+ dtype=torch.float32,
705
+ )
706
+ mem += cuda_info["memory"] / 1e9 # (GB)
677
707
  s_in, s_out = (tuple(x.shape) if isinstance(x, torch.Tensor) else "list" for x in (x, y)) # shapes
678
708
  p = sum(x.numel() for x in m.parameters()) if isinstance(m, nn.Module) else 0 # parameters
679
709
  LOGGER.info(f"{p:12}{flops:12.4g}{mem:>14.3f}{tf:14.4g}{tb:14.4g}{str(s_in):>24s}{str(s_out):>24s}")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.3.51
3
+ Version: 8.3.53
4
4
  Summary: Ultralytics YOLO 🚀 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author-email: Glenn Jocher <glenn.jocher@ultralytics.com>, Jing Qiu <jing.qiu@ultralytics.com>
6
6
  Maintainer-email: Ultralytics <hello@ultralytics.com>
@@ -7,7 +7,7 @@ tests/test_exports.py,sha256=1MvhcQ2qHdbJImHII-bFarcaIcm-kPlEK-OdFLxnj7o,8769
7
7
  tests/test_integrations.py,sha256=f5-QCUk1SU_-qn4mBCZwS3GN3tXEBIIXo4z2EhExbHw,6126
8
8
  tests/test_python.py,sha256=IfHAXqilpYxWNmIE6rAWWUSeIYS6SBO9AkXGHDGZTvA,23182
9
9
  tests/test_solutions.py,sha256=HlDe-XOgBX0k1cLhRTAhhawMHk6p-5dg5xl2AIRjfdk,3790
10
- ultralytics/__init__.py,sha256=N_1YdKbgbRhGjif32J6eXAFEks3rnGA2wmIqlcWYx84,681
10
+ ultralytics/__init__.py,sha256=kIIMpFWlMtP3bD2_KHobrs6DR7u8pD2YM-ZRZh7XiYw,681
11
11
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
12
12
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
13
13
  ultralytics/cfg/__init__.py,sha256=etGrRb8t9r6R-n-00qFAmOZHXNriXEUe0zvEzCPi5oc,38921
@@ -86,7 +86,7 @@ ultralytics/cfg/models/v9/yolov9e.yaml,sha256=dhaR47WxuLOrZWDCceS4bQG00sQdrMc8FQ
86
86
  ultralytics/cfg/models/v9/yolov9m.yaml,sha256=l6CmivzNu44sRVmkQXk4-tXflbV1nWnk5MSc8su2vhs,1311
87
87
  ultralytics/cfg/models/v9/yolov9s.yaml,sha256=lPWcu-6ub1kCBD6zIDFwthYZ3RvdJfODWKy3vEQWRjo,1291
88
88
  ultralytics/cfg/models/v9/yolov9t.yaml,sha256=qL__kr6GoefpQWP4jV0jdzwTp46bdFUcqtPRnfDbkY8,1275
89
- ultralytics/cfg/solutions/default.yaml,sha256=YaCj0YRRfkwJGf7bRN0idUJrWROq3T6lJE-IR14D5_c,1332
89
+ ultralytics/cfg/solutions/default.yaml,sha256=fPZqt9hYLEmFrjlujsNI3IPKcl5YJk-R2mQPHRkqfyQ,1571
90
90
  ultralytics/cfg/trackers/botsort.yaml,sha256=FDIrZ3hAhRtMfDl654pt1HIexmPqlFQK-3lQ4D0tF84,918
91
91
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=rBWY4RjjX6PTO2o6TUJFYHVgXNZHCN5TuBuzwuPYVjA,723
92
92
  ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
@@ -100,7 +100,7 @@ ultralytics/data/loaders.py,sha256=k1Vq7Rxv6tpsRsYuMdZeI3_f2BciAaZwhDQU8iHhVJM,2
100
100
  ultralytics/data/split_dota.py,sha256=eFafJ7Vg52wj6KDCHFJAf1tKzyPD5YaPB8kM4VX5Aeg,10688
101
101
  ultralytics/data/utils.py,sha256=bmWEIrdogj4kssZQSJdSbIF8QsJU00lo-EY-Mgcqv4M,31073
102
102
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
103
- ultralytics/engine/exporter.py,sha256=EMrdP8Ra5VnmNEUjustWOvgrH1C4vgwz0L0frjZRSJY,67054
103
+ ultralytics/engine/exporter.py,sha256=I7SP_ftvggxca37OioYysOsD1f0c8jAhHTiKVUtlGAA,68602
104
104
  ultralytics/engine/model.py,sha256=l5UiXGBa4ox9BXq0dc6eUsOvd85Q4KHUxGCwY2dfXQE,53113
105
105
  ultralytics/engine/predictor.py,sha256=o1RYMFH3_uVOMCIXXakpRYpNzoD-6Bdsxryt5fuBni0,17712
106
106
  ultralytics/engine/results.py,sha256=a1XFZRPwqgKDBOEAibHuT9nP2xefLiWVsMoBJbcr4iA,75058
@@ -202,9 +202,9 @@ ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7J
202
202
  ultralytics/trackers/utils/gmc.py,sha256=VcURuY041qGCeWUGMxHZBr10T16LtcMqyv7AmTfE1MY,14557
203
203
  ultralytics/trackers/utils/kalman_filter.py,sha256=cH9zD3fwkuezP97H9mw8cSBN7a8hHKx_Sx1j7t3oYGs,21349
204
204
  ultralytics/trackers/utils/matching.py,sha256=Y94cMwo9TLd-IWFqHKp8dHSDyguS1qtOeebBMalWnJQ,7078
205
- ultralytics/utils/__init__.py,sha256=_KUqXbKcFgN11_ZLGrpQuPNOdSbIGhuv_IBGUPw9jX0,49203
205
+ ultralytics/utils/__init__.py,sha256=-Q71hK_mE5ED0PALDW9pOHCygWxF2SAIXwUN-5nhv2o,49505
206
206
  ultralytics/utils/autobatch.py,sha256=yBkojvLhZofwwKnaA8BnEIFXp3UWt7rVmyuh-dl1Ymk,5020
207
- ultralytics/utils/benchmarks.py,sha256=Ub--iTq2hL_oHkG2R3HXmZXQ6qcBC-P9MabUv60bMLE,25625
207
+ ultralytics/utils/benchmarks.py,sha256=xFFFCPd8KISVkeDc32LZWZUBlqz6Sa1IzGUBnc1QZOM,25628
208
208
  ultralytics/utils/checks.py,sha256=1Cu8k2qg_pFaoHvkiE07Ab5ZGLyZHZxFAg1IMM63CBQ,30145
209
209
  ultralytics/utils/dist.py,sha256=NDFga-uKxkBX2zLxFHSene_cCiGQJoyOeCXcN9JIOIk,2358
210
210
  ultralytics/utils/downloads.py,sha256=fh7I5toTSowAOXtmx5zIzCEDREfTFG45cLIHmsDmuYw,21974
@@ -213,11 +213,11 @@ ultralytics/utils/files.py,sha256=uiXQSVABJRoI5ImnM6ndEBIFbECfksmWNEldBg8GnSo,82
213
213
  ultralytics/utils/instance.py,sha256=NuTLa_XoqgmWNhxQ2JuflT22UAmEmv0UWd5BZXCjSNM,16841
214
214
  ultralytics/utils/loss.py,sha256=_d2L4lIemaeAHrGHqf9q-KI7yTgHKCbIcYAF7Y-farI,34185
215
215
  ultralytics/utils/metrics.py,sha256=toJlyA0W-xtChqAtIDiHISolxc_30NP33ezxWQ1rnPc,53804
216
- ultralytics/utils/ops.py,sha256=O_p_GUAtYL31YQIvEl4m3OOgUE34qaIZY9UN5k0ROnU,33219
216
+ ultralytics/utils/ops.py,sha256=d5sLAvgqP36Pq_dMQE1DZFYhmIGUMrlrxh1czcuUfC4,33546
217
217
  ultralytics/utils/patches.py,sha256=J-iOwIRbfUs-inBZerhnXby5tUKjYcOIyvhLTS352JE,3270
218
218
  ultralytics/utils/plotting.py,sha256=GmBkN7e1skJK2cZ2hzKBXQCb1gayWTrA9TLHw0q07UM,62948
219
219
  ultralytics/utils/tal.py,sha256=thD_AEhVmhaZqmS5szZMvpKO-RKOeZwfX1BYAhdnA0o,18470
220
- ultralytics/utils/torch_utils.py,sha256=ddWR82FkxSiFQqr_uzqxQvir-RACvCxsQbqphKSFTok,32084
220
+ ultralytics/utils/torch_utils.py,sha256=7qP0YhF5d8qCUD2XiOwXjCTOw8pje6HvX42J8oL3Ldw,33263
221
221
  ultralytics/utils/triton.py,sha256=HL_gjIwMoi-WD8gJLTmemBehIto8eRz3HdK8fcROLk0,4043
222
222
  ultralytics/utils/tuner.py,sha256=K09-z5k1E4ZriSKoWdwQrJ2PJ2fY1ez3-b2R6aKPTqM,6198
223
223
  ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
@@ -231,9 +231,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=IbGQfEltamUKXJt93uSLQFn8c2rYh3DMTg
231
231
  ultralytics/utils/callbacks/raytune.py,sha256=Ck_yFzg7UZXiDWrLHaltjQybzVWSFDfzpdrx9ZYTRfI,700
232
232
  ultralytics/utils/callbacks/tensorboard.py,sha256=SHlE58Fb-sg-uZKtgy-ybIO3SAIfK55aj8kTYGA0Cyg,4167
233
233
  ultralytics/utils/callbacks/wb.py,sha256=sizfTa-xI9k2pnDSP_Q9pHZEFwcl__gSFM0AcneuRpY,7058
234
- ultralytics-8.3.51.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
235
- ultralytics-8.3.51.dist-info/METADATA,sha256=q5i3qgmMzgn2vLxSqF_NwhKgiOrxSFjfUnuaJvm8inQ,35332
236
- ultralytics-8.3.51.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
237
- ultralytics-8.3.51.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
238
- ultralytics-8.3.51.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
239
- ultralytics-8.3.51.dist-info/RECORD,,
234
+ ultralytics-8.3.53.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
235
+ ultralytics-8.3.53.dist-info/METADATA,sha256=ZyhZIwrXh4Uuvibs25BhIC6ei4X9Kz-qtBBaciS4tZc,35332
236
+ ultralytics-8.3.53.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
237
+ ultralytics-8.3.53.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
238
+ ultralytics-8.3.53.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
239
+ ultralytics-8.3.53.dist-info/RECORD,,