ultralytics 8.2.48__py3-none-any.whl → 8.2.50__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.

Potentially problematic release.


This version of ultralytics might be problematic. Click here for more details.

Files changed (35) hide show
  1. tests/conftest.py +17 -5
  2. tests/test_cli.py +8 -8
  3. tests/test_cuda.py +5 -5
  4. tests/test_engine.py +5 -5
  5. tests/test_explorer.py +4 -4
  6. tests/test_exports.py +12 -24
  7. tests/test_integrations.py +9 -5
  8. tests/test_python.py +35 -39
  9. ultralytics/__init__.py +1 -1
  10. ultralytics/cfg/__init__.py +156 -39
  11. ultralytics/data/augment.py +3 -3
  12. ultralytics/data/explorer/explorer.py +3 -0
  13. ultralytics/engine/model.py +1 -1
  14. ultralytics/engine/results.py +160 -68
  15. ultralytics/hub/session.py +2 -0
  16. ultralytics/models/fastsam/prompt.py +1 -1
  17. ultralytics/models/sam/amg.py +1 -1
  18. ultralytics/models/sam/modules/tiny_encoder.py +1 -1
  19. ultralytics/models/yolo/classify/train.py +7 -16
  20. ultralytics/models/yolo/world/train_world.py +2 -2
  21. ultralytics/nn/modules/block.py +1 -0
  22. ultralytics/nn/tasks.py +1 -1
  23. ultralytics/solutions/__init__.py +1 -0
  24. ultralytics/solutions/ai_gym.py +3 -3
  25. ultralytics/solutions/streamlit_inference.py +154 -0
  26. ultralytics/utils/__init__.py +0 -1
  27. ultralytics/utils/metrics.py +1 -2
  28. ultralytics/utils/plotting.py +3 -3
  29. ultralytics/utils/torch_utils.py +22 -8
  30. {ultralytics-8.2.48.dist-info → ultralytics-8.2.50.dist-info}/METADATA +3 -3
  31. {ultralytics-8.2.48.dist-info → ultralytics-8.2.50.dist-info}/RECORD +35 -34
  32. {ultralytics-8.2.48.dist-info → ultralytics-8.2.50.dist-info}/WHEEL +1 -1
  33. {ultralytics-8.2.48.dist-info → ultralytics-8.2.50.dist-info}/LICENSE +0 -0
  34. {ultralytics-8.2.48.dist-info → ultralytics-8.2.50.dist-info}/entry_points.txt +0 -0
  35. {ultralytics-8.2.48.dist-info → ultralytics-8.2.50.dist-info}/top_level.txt +0 -0
@@ -5,7 +5,7 @@ import torch
5
5
  from ultralytics.data import ClassificationDataset, build_dataloader
6
6
  from ultralytics.engine.trainer import BaseTrainer
7
7
  from ultralytics.models import yolo
8
- from ultralytics.nn.tasks import ClassificationModel, attempt_load_one_weight
8
+ from ultralytics.nn.tasks import ClassificationModel
9
9
  from ultralytics.utils import DEFAULT_CFG, LOGGER, RANK, colorstr
10
10
  from ultralytics.utils.plotting import plot_images, plot_results
11
11
  from ultralytics.utils.torch_utils import is_parallel, strip_optimizer, torch_distributed_zero_first
@@ -60,23 +60,14 @@ class ClassificationTrainer(BaseTrainer):
60
60
  """Load, create or download model for any task."""
61
61
  import torchvision # scope for faster 'import ultralytics'
62
62
 
63
- if isinstance(self.model, torch.nn.Module): # if model is loaded beforehand. No setup needed
64
- return
65
-
66
- model, ckpt = str(self.model), None
67
- # Load a YOLO model locally, from torchvision, or from Ultralytics assets
68
- if model.endswith(".pt"):
69
- self.model, ckpt = attempt_load_one_weight(model, device="cpu")
70
- for p in self.model.parameters():
71
- p.requires_grad = True # for training
72
- elif model.split(".")[-1] in {"yaml", "yml"}:
73
- self.model = self.get_model(cfg=model)
74
- elif model in torchvision.models.__dict__:
75
- self.model = torchvision.models.__dict__[model](weights="IMAGENET1K_V1" if self.args.pretrained else None)
63
+ if str(self.model) in torchvision.models.__dict__:
64
+ self.model = torchvision.models.__dict__[self.model](
65
+ weights="IMAGENET1K_V1" if self.args.pretrained else None
66
+ )
67
+ ckpt = None
76
68
  else:
77
- raise FileNotFoundError(f"ERROR: model={model} not found locally or online. Please check model name.")
69
+ ckpt = super().setup_model()
78
70
  ClassificationModel.reshape_outputs(self.model, self.data["nc"])
79
-
80
71
  return ckpt
81
72
 
82
73
  def build_dataset(self, img_path, mode="train", batch=None):
@@ -72,8 +72,8 @@ class WorldTrainerFromScratch(WorldTrainer):
72
72
  """
73
73
  final_data = {}
74
74
  data_yaml = self.args.data
75
- assert data_yaml.get("train", False) # object365.yaml
76
- assert data_yaml.get("val", False) # lvis.yaml
75
+ assert data_yaml.get("train", False), "train dataset not found" # object365.yaml
76
+ assert data_yaml.get("val", False), "validation dataset not found" # lvis.yaml
77
77
  data = {k: [check_det_dataset(d) for d in v.get("yolo_data", [])] for k, v in data_yaml.items()}
78
78
  assert len(data["val"]) == 1, f"Only support validating on 1 dataset for now, but got {len(data['val'])}."
79
79
  val_split = "minival" if "lvis" in data["val"][0]["val"] else "val"
@@ -712,6 +712,7 @@ class RepVGGDW(torch.nn.Module):
712
712
  """RepVGGDW is a class that represents a depth wise separable convolutional block in RepVGG architecture."""
713
713
 
714
714
  def __init__(self, ed) -> None:
715
+ """Initializes RepVGGDW with depthwise separable convolutional layers for efficient processing."""
715
716
  super().__init__()
716
717
  self.conv = Conv(ed, ed, 7, 1, 3, g=ed, act=False)
717
718
  self.conv1 = Conv(ed, ed, 3, 1, 1, g=ed, act=False)
ultralytics/nn/tasks.py CHANGED
@@ -276,7 +276,7 @@ class BaseModel(nn.Module):
276
276
  batch (dict): Batch to compute loss on
277
277
  preds (torch.Tensor | List[torch.Tensor]): Predictions.
278
278
  """
279
- if not hasattr(self, "criterion"):
279
+ if getattr(self, "criterion", None) is None:
280
280
  self.criterion = self.init_criterion()
281
281
 
282
282
  preds = self.forward(batch["img"]) if preds is None else preds
@@ -8,6 +8,7 @@ from .object_counter import ObjectCounter
8
8
  from .parking_management import ParkingManagement, ParkingPtsSelection
9
9
  from .queue_management import QueueManager
10
10
  from .speed_estimation import SpeedEstimator
11
+ from .streamlit_inference import inference
11
12
 
12
13
  __all__ = (
13
14
  "AIGym",
@@ -53,9 +53,9 @@ class AIGym:
53
53
 
54
54
  # Check if environment supports imshow
55
55
  self.env_check = check_imshow(warn=True)
56
- self.count = list()
57
- self.angle = list()
58
- self.stage = list()
56
+ self.count = []
57
+ self.angle = []
58
+ self.stage = []
59
59
 
60
60
  def start_counting(self, im0, results):
61
61
  """
@@ -0,0 +1,154 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+
3
+ import io
4
+ import time
5
+
6
+ import cv2
7
+ import torch
8
+
9
+
10
+ def inference():
11
+ """Runs real-time object detection on video input using Ultralytics YOLOv8 in a Streamlit application."""
12
+
13
+ # Scope imports for faster ultralytics package load speeds
14
+ import streamlit as st
15
+
16
+ from ultralytics import YOLO
17
+
18
+ # Hide main menu style
19
+ menu_style_cfg = """<style>MainMenu {visibility: hidden;}</style>"""
20
+
21
+ # Main title of streamlit application
22
+ main_title_cfg = """<div><h1 style="color:#FF64DA; text-align:center; font-size:40px;
23
+ font-family: 'Archivo', sans-serif; margin-top:-50px;margin-bottom:20px;">
24
+ Ultralytics YOLOv8 Streamlit Application
25
+ </h1></div>"""
26
+
27
+ # Subtitle of streamlit application
28
+ sub_title_cfg = """<div><h4 style="color:#042AFF; text-align:center;
29
+ font-family: 'Archivo', sans-serif; margin-top:-15px; margin-bottom:50px;">
30
+ Experience real-time object detection on your webcam with the power of Ultralytics YOLOv8! 🚀</h4>
31
+ </div>"""
32
+
33
+ # Set html page configuration
34
+ st.set_page_config(page_title="Ultralytics Streamlit App", layout="wide", initial_sidebar_state="auto")
35
+
36
+ # Append the custom HTML
37
+ st.markdown(menu_style_cfg, unsafe_allow_html=True)
38
+ st.markdown(main_title_cfg, unsafe_allow_html=True)
39
+ st.markdown(sub_title_cfg, unsafe_allow_html=True)
40
+
41
+ # Add ultralytics logo in sidebar
42
+ with st.sidebar:
43
+ logo = "https://raw.githubusercontent.com/ultralytics/assets/main/logo/Ultralytics_Logotype_Original.svg"
44
+ st.image(logo, width=250)
45
+
46
+ # Add elements to vertical setting menu
47
+ st.sidebar.title("User Configuration")
48
+
49
+ # Add video source selection dropdown
50
+ source = st.sidebar.selectbox(
51
+ "Video",
52
+ ("webcam", "video"),
53
+ )
54
+
55
+ vid_file_name = ""
56
+ if source == "video":
57
+ vid_file = st.sidebar.file_uploader("Upload Video File", type=["mp4", "mov", "avi", "mkv"])
58
+ if vid_file is not None:
59
+ g = io.BytesIO(vid_file.read()) # BytesIO Object
60
+ vid_location = "ultralytics.mp4"
61
+ with open(vid_location, "wb") as out: # Open temporary file as bytes
62
+ out.write(g.read()) # Read bytes into file
63
+ vid_file_name = "ultralytics.mp4"
64
+ elif source == "webcam":
65
+ vid_file_name = 0
66
+
67
+ # Add dropdown menu for model selection
68
+ yolov8_model = st.sidebar.selectbox(
69
+ "Model",
70
+ (
71
+ "YOLOv8n",
72
+ "YOLOv8s",
73
+ "YOLOv8m",
74
+ "YOLOv8l",
75
+ "YOLOv8x",
76
+ "YOLOv8n-Seg",
77
+ "YOLOv8s-Seg",
78
+ "YOLOv8m-Seg",
79
+ "YOLOv8l-Seg",
80
+ "YOLOv8x-Seg",
81
+ "YOLOv8n-Pose",
82
+ "YOLOv8s-Pose",
83
+ "YOLOv8m-Pose",
84
+ "YOLOv8l-Pose",
85
+ "YOLOv8x-Pose",
86
+ ),
87
+ )
88
+ model = YOLO(f"{yolov8_model.lower()}.pt") # Load the yolov8 model
89
+ class_names = list(model.names.values()) # Convert dictionary to list of class names
90
+
91
+ # Multiselect box with class names and get indices of selected classes
92
+ selected_classes = st.sidebar.multiselect("Classes", class_names, default=class_names[:3])
93
+ selected_ind = [class_names.index(option) for option in selected_classes]
94
+
95
+ if not isinstance(selected_ind, list): # Ensure selected_options is a list
96
+ selected_ind = list(selected_ind)
97
+
98
+ conf_thres = st.sidebar.slider("Confidence Threshold", 0.0, 1.0, 0.25, 0.01)
99
+ nms_thres = st.sidebar.slider("NMS Threshold", 0.0, 1.0, 0.45, 0.01)
100
+
101
+ col1, col2 = st.columns(2)
102
+ org_frame = col1.empty()
103
+ ann_frame = col2.empty()
104
+
105
+ fps_display = st.sidebar.empty() # Placeholder for FPS display
106
+
107
+ if st.sidebar.button("Start"):
108
+ videocapture = cv2.VideoCapture(vid_file_name) # Capture the video
109
+
110
+ if not videocapture.isOpened():
111
+ st.error("Could not open webcam.")
112
+
113
+ stop_button = st.button("Stop") # Button to stop the inference
114
+
115
+ prev_time = 0
116
+ while videocapture.isOpened():
117
+ success, frame = videocapture.read()
118
+ if not success:
119
+ st.warning("Failed to read frame from webcam. Please make sure the webcam is connected properly.")
120
+ break
121
+
122
+ curr_time = time.time()
123
+ fps = 1 / (curr_time - prev_time)
124
+ prev_time = curr_time
125
+
126
+ # Store model predictions
127
+ results = model(frame, conf=float(conf_thres), iou=float(nms_thres), classes=selected_ind)
128
+ annotated_frame = results[0].plot() # Add annotations on frame
129
+
130
+ # display frame
131
+ org_frame.image(frame, channels="BGR")
132
+ ann_frame.image(annotated_frame, channels="BGR")
133
+
134
+ if stop_button:
135
+ videocapture.release() # Release the capture
136
+ torch.cuda.empty_cache() # Clear CUDA memory
137
+ st.stop() # Stop streamlit app
138
+
139
+ # Display FPS in sidebar
140
+ fps_display.metric("FPS", f"{fps:.2f}")
141
+
142
+ # Release the capture
143
+ videocapture.release()
144
+
145
+ # Clear CUDA memory
146
+ torch.cuda.empty_cache()
147
+
148
+ # Destroy window
149
+ cv2.destroyAllWindows()
150
+
151
+
152
+ # Main function call
153
+ if __name__ == "__main__":
154
+ inference()
@@ -305,7 +305,6 @@ class ThreadingLocked:
305
305
  @ThreadingLocked()
306
306
  def my_function():
307
307
  # Your code here
308
- pass
309
308
  ```
310
309
  """
311
310
 
@@ -1172,8 +1172,6 @@ class ClassifyMetrics(SimpleClass):
1172
1172
  top1 (float): The top-1 accuracy.
1173
1173
  top5 (float): The top-5 accuracy.
1174
1174
  speed (Dict[str, float]): A dictionary containing the time taken for each step in the pipeline.
1175
-
1176
- Properties:
1177
1175
  fitness (float): The fitness of the model, which is equal to top-5 accuracy.
1178
1176
  results_dict (Dict[str, Union[float, str]]): A dictionary containing the classification metrics and fitness.
1179
1177
  keys (List[str]): A list of keys for the results_dict.
@@ -1224,6 +1222,7 @@ class ClassifyMetrics(SimpleClass):
1224
1222
 
1225
1223
  class OBBMetrics(SimpleClass):
1226
1224
  def __init__(self, save_dir=Path("."), plot=False, on_plot=None, names=()) -> None:
1225
+ """Initialize an OBBMetrics instance with directory, plotting, callback, and class names."""
1227
1226
  self.save_dir = save_dir
1228
1227
  self.plot = plot
1229
1228
  self.on_plot = on_plot
@@ -740,18 +740,18 @@ class Annotator:
740
740
  cv2.polylines(self.im, [np.int32([mask])], isClosed=True, color=mask_color, thickness=2)
741
741
 
742
742
  label = f"Track ID: {track_label}" if track_label else det_label
743
- text_size, _ = cv2.getTextSize(label, 0, 0.7, 1)
743
+ text_size, _ = cv2.getTextSize(label, 0, self.sf, self.tf)
744
744
 
745
745
  cv2.rectangle(
746
746
  self.im,
747
747
  (int(mask[0][0]) - text_size[0] // 2 - 10, int(mask[0][1]) - text_size[1] - 10),
748
- (int(mask[0][0]) + text_size[0] // 2 + 5, int(mask[0][1] + 5)),
748
+ (int(mask[0][0]) + text_size[0] // 2 + 10, int(mask[0][1] + 10)),
749
749
  mask_color,
750
750
  -1,
751
751
  )
752
752
 
753
753
  cv2.putText(
754
- self.im, label, (int(mask[0][0]) - text_size[0] // 2, int(mask[0][1]) - 5), 0, 0.7, (255, 255, 255), 2
754
+ self.im, label, (int(mask[0][0]) - text_size[0] // 2, int(mask[0][1])), 0, self.sf, (255, 255, 255), self.tf
755
755
  )
756
756
 
757
757
  def plot_distance_and_line(self, distance_m, distance_mm, centroids, line_color, centroid_color):
@@ -7,6 +7,7 @@ import random
7
7
  import time
8
8
  from contextlib import contextmanager
9
9
  from copy import deepcopy
10
+ from datetime import datetime
10
11
  from pathlib import Path
11
12
  from typing import Union
12
13
 
@@ -456,14 +457,17 @@ def init_seeds(seed=0, deterministic=False):
456
457
 
457
458
 
458
459
  class ModelEMA:
459
- """Updated Exponential Moving Average (EMA) from https://github.com/rwightman/pytorch-image-models
460
- Keeps a moving average of everything in the model state_dict (parameters and buffers)
460
+ """
461
+ Updated Exponential Moving Average (EMA) from https://github.com/rwightman/pytorch-image-models. Keeps a moving
462
+ average of everything in the model state_dict (parameters and buffers)
463
+
461
464
  For EMA details see https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage
465
+
462
466
  To disable EMA set the `enabled` attribute to `False`.
463
467
  """
464
468
 
465
469
  def __init__(self, model, decay=0.9999, tau=2000, updates=0):
466
- """Create EMA."""
470
+ """Initialize EMA for 'model' with given arguments."""
467
471
  self.ema = deepcopy(de_parallel(model)).eval() # FP32 EMA
468
472
  self.updates = updates # number of EMA updates
469
473
  self.decay = lambda x: decay * (1 - math.exp(-x / tau)) # decay exponential ramp (to help early epochs)
@@ -506,15 +510,25 @@ def strip_optimizer(f: Union[str, Path] = "best.pt", s: str = "") -> None:
506
510
  from pathlib import Path
507
511
  from ultralytics.utils.torch_utils import strip_optimizer
508
512
 
509
- for f in Path('path/to/weights').rglob('*.pt'):
513
+ for f in Path('path/to/model/checkpoints').rglob('*.pt'):
510
514
  strip_optimizer(f)
511
515
  ```
512
516
  """
513
- x = torch.load(f, map_location=torch.device("cpu"))
514
- if not isinstance(x, dict) or "model" not in x:
515
- LOGGER.info(f"Skipping {f}, not a valid Ultralytics model.")
517
+ try:
518
+ x = torch.load(f, map_location=torch.device("cpu"))
519
+ assert isinstance(x, dict), "checkpoint is not a Python dictionary"
520
+ assert "model" in x, "'model' missing from checkpoint"
521
+ except Exception as e:
522
+ LOGGER.warning(f"WARNING ⚠️ Skipping {f}, not a valid Ultralytics model: {e}")
516
523
  return
517
524
 
525
+ updates = {
526
+ "date": datetime.now().isoformat(),
527
+ "version": __version__,
528
+ "license": "AGPL-3.0 License (https://ultralytics.com/license)",
529
+ "docs": "https://docs.ultralytics.com",
530
+ }
531
+
518
532
  # Update model
519
533
  if x.get("ema"):
520
534
  x["model"] = x["ema"] # replace model with EMA
@@ -535,7 +549,7 @@ def strip_optimizer(f: Union[str, Path] = "best.pt", s: str = "") -> None:
535
549
  # x['model'].args = x['train_args']
536
550
 
537
551
  # Save
538
- torch.save(x, s or f)
552
+ torch.save({**updates, **x}, s or f, use_dill=False) # combine dicts (prefer to the right)
539
553
  mb = os.path.getsize(s or f) / 1e6 # file size
540
554
  LOGGER.info(f"Optimizer stripped from {f},{f' saved as {s},' if s else ''} {mb:.1f}MB")
541
555
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.48
3
+ Version: 8.2.50
4
4
  Summary: Ultralytics YOLOv8 for SOTA object detection, multi-object tracking, instance segmentation, pose estimation and image classification.
5
5
  Author: Glenn Jocher, Ayush Chaurasia, Jing Qiu
6
6
  Maintainer: Glenn Jocher, Ayush Chaurasia, Jing Qiu
@@ -55,7 +55,7 @@ Requires-Dist: mkdocs-material >=9.5.9 ; extra == 'dev'
55
55
  Requires-Dist: mkdocstrings[python] ; extra == 'dev'
56
56
  Requires-Dist: mkdocs-jupyter ; extra == 'dev'
57
57
  Requires-Dist: mkdocs-redirects ; extra == 'dev'
58
- Requires-Dist: mkdocs-ultralytics-plugin >=0.0.48 ; extra == 'dev'
58
+ Requires-Dist: mkdocs-ultralytics-plugin >=0.0.49 ; extra == 'dev'
59
59
  Provides-Extra: explorer
60
60
  Requires-Dist: lancedb ; extra == 'explorer'
61
61
  Requires-Dist: duckdb <=0.9.2 ; extra == 'explorer'
@@ -90,10 +90,10 @@ Requires-Dist: dvclive >=2.12.0 ; extra == 'logging'
90
90
 
91
91
  <div>
92
92
  <a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
93
- <a href="https://codecov.io/github/ultralytics/ultralytics"><img src="https://codecov.io/github/ultralytics/ultralytics/branch/main/graph/badge.svg?token=HHW7IIVFVY" alt="Ultralytics Code Coverage"></a>
94
93
  <a href="https://zenodo.org/badge/latestdoi/264818686"><img src="https://zenodo.org/badge/264818686.svg" alt="Ultralytics YOLOv8 Citation"></a>
95
94
  <a href="https://hub.docker.com/r/ultralytics/ultralytics"><img src="https://img.shields.io/docker/pulls/ultralytics/ultralytics?logo=docker" alt="Ultralytics Docker Pulls"></a>
96
95
  <a href="https://ultralytics.com/discord"><img alt="Ultralytics Discord" src="https://img.shields.io/discord/1089800235347353640?logo=discord&logoColor=white&label=Discord&color=blue"></a>
96
+ <a href="https://community.ultralytics.com"><img alt="Ultralytics Forums" src="https://img.shields.io/discourse/users?server=https%3A%2F%2Fcommunity.ultralytics.com&logo=discourse&label=Forums&color=blue"></a>
97
97
  <br>
98
98
  <a href="https://console.paperspace.com/github/ultralytics/ultralytics"><img src="https://assets.paperspace.io/img/gradient-badge.svg" alt="Run Ultralytics on Gradient"></a>
99
99
  <a href="https://colab.research.google.com/github/ultralytics/ultralytics/blob/main/examples/tutorial.ipynb"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open Ultralytics In Colab"></a>
@@ -1,16 +1,16 @@
1
1
  tests/__init__.py,sha256=9evx3lOdKZeY1iWXvH-FkMkgf8jLucWICoabzeD6aYg,626
2
- tests/conftest.py,sha256=WOrMDmrxdYskt1nQmbPPhZ6zo1cJzS4vO7gVcKuEo2k,2545
3
- tests/test_cli.py,sha256=nQs3UUfEq713bgRc082eFAVROce1XkPklWpg0uOJQ6o,4979
4
- tests/test_cuda.py,sha256=ErmZucvQrw6oGGXOM9TRW7vijNELfEVjYXoCnb_m29I,4957
5
- tests/test_engine.py,sha256=fFzcbqZuMkzZHjA5FMddWcqVE703iq8HB_a0Q2lcBKM,4705
6
- tests/test_explorer.py,sha256=r1pWer2y290Y0DqsM-La7egfEY0497YCdC4rwq3URV4,2178
7
- tests/test_exports.py,sha256=qc4YOgsGixqYLO6IRNY16-v6z14R0dp5fdni1v222xw,8034
8
- tests/test_integrations.py,sha256=8Ru7GyKV8j44EEc8X9_E7q7aR4CTOIMPuSagXjSGUxw,5847
9
- tests/test_python.py,sha256=kic6XuQrxKUt7IlIDNoGQRs7-Gs_pis7v5JlzlZcIqQ,20705
10
- ultralytics/__init__.py,sha256=nJ2pGlmY1w4GjyPQK1HcHqNGXbMtF6tbsQOS1x0WHoY,694
2
+ tests/conftest.py,sha256=3ZtD4VlMKK5jVJwIPCrNAcG63vywJzdLq7U2AfYR2VI,2919
3
+ tests/test_cli.py,sha256=KOEdoSwIwyZ_qFn02XdSy2CxtLdJsz7XnXVWmn7oc0s,5129
4
+ tests/test_cuda.py,sha256=uD-ddNEcBMFQmQ9iE4fIGh0EIcGwEoDEUNVCEHicaWE,5133
5
+ tests/test_engine.py,sha256=xW-UT9_9xZp-7-hSnbJgMw_ezTk6NqTOIiA59XZDmxA,4934
6
+ tests/test_explorer.py,sha256=NcxSJeB6FxwkN09hQl7nnQL--HjfHB_WcZk0mEmBNHI,2215
7
+ tests/test_exports.py,sha256=Uezf3OatpPHlo5qoPw-2kqkZxuMCF9L4XF2riD4vmII,8225
8
+ tests/test_integrations.py,sha256=xglcfMPjfVh346PV8WTpk6tBxraCXEFJEQyyJMr5tyU,6064
9
+ tests/test_python.py,sha256=80Iy-sn3qHBJ5Vg_mRbplj5CbCZNUNvikP4e2f2onnM,21728
10
+ ultralytics/__init__.py,sha256=cz3a4wY3FLHMpesIDvftOEzTffv1X5fJlY-ITi7yhpY,694
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=JblkT6Ze9MZ8hSs8gkV8JPcEKNMm-YqRqM4x501Dn9g,21507
13
+ ultralytics/cfg/__init__.py,sha256=MqUsV-Mdk80dO64yY7JmplEO0Awb-25Lfx4YC9QYxhc,26210
14
14
  ultralytics/cfg/default.yaml,sha256=xRKVF-Z9E3imXTU9OCK94kj3jGgYoo67VJQwuYlHiUU,8228
15
15
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=FyeuJT5CHq_9d4hlfAf0kpZlnbUMO0S--UJ1yIqcdKk,3134
16
16
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=YDsyFPI6F6-OQXLBM3hOXo3vADYREwZzmMQfJNdpWyM,1193
@@ -83,7 +83,7 @@ ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q
83
83
  ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
84
84
  ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
85
85
  ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
86
- ultralytics/data/augment.py,sha256=zekY4Lw_dxsbPpm4jDSr7PYtWwj7iBaRqBcAeeDFDS4,59554
86
+ ultralytics/data/augment.py,sha256=GFvkL5s5KmKpDrJbDftUZqSDbRJpgkJVF5SXgz7gBMk,59747
87
87
  ultralytics/data/base.py,sha256=C3teLnw97ZTbpJHT9P7yYWosAKocMzgJjRe1rxgfpls,13524
88
88
  ultralytics/data/build.py,sha256=AfMmz0sHIYmwry_90tEJFRk_kz0S3SolScVXqYHiT08,7261
89
89
  ultralytics/data/converter.py,sha256=7640xKuf7LPeoTwoCvgbIXM5xbzyq72Hu2Rf2lrgjRY,17554
@@ -92,27 +92,27 @@ ultralytics/data/loaders.py,sha256=UUL7yOmuseAG5RBVI-kLrLr42Vm4kL05Qqnc5jAmNW0,2
92
92
  ultralytics/data/split_dota.py,sha256=fWezt1Bo3jiZ6AyUWdBtTUuvLamPv1t7JD-DirM9gQ8,10142
93
93
  ultralytics/data/utils.py,sha256=zqFg4xaWU--fastZmwvZ3DxGyJQ3i4tVNLuYnqS1xxs,31044
94
94
  ultralytics/data/explorer/__init__.py,sha256=-Y3m1ZedepOQUv_KW82zaGxvU_PSHcuwUTFqG9BhAr4,113
95
- ultralytics/data/explorer/explorer.py,sha256=GqQcHkETxlS0w-lYUnTE_RJ9wPReK7c9XG41-k9FoxE,18668
95
+ ultralytics/data/explorer/explorer.py,sha256=YacduFQvYOgTRF0BhCZWpTEaGlhp7oRy9a49VvNysEQ,18998
96
96
  ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yfi8NIA,7085
97
97
  ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
98
98
  ultralytics/data/explorer/gui/dash.py,sha256=CPlFIIhf53j_YVAqealsC3AbcztdPqZxfniQcBnlKK4,10042
99
99
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
100
100
  ultralytics/engine/exporter.py,sha256=csuukmfnqkrcJQx9Z008LrobxhIOYubSj9jkCUHN2do,58557
101
- ultralytics/engine/model.py,sha256=XxV97SX-TWLU3FYY_FImupUJo75NQm7mTw7m5FIYDYM,39046
101
+ ultralytics/engine/model.py,sha256=8qD5irabp8BF7bBZGwztCu8yAVQQp1kksYSea9EhdEo,39078
102
102
  ultralytics/engine/predictor.py,sha256=W58kDCFH2AfoFzpGbos3k8zUEVsLunBuM8sc2B64rPY,17449
103
- ultralytics/engine/results.py,sha256=b9G9Cbf5DESuM8cyXNhKi9zeF--3rgmaq2mB8CVtS3s,30936
103
+ ultralytics/engine/results.py,sha256=APjlY9mG05QbHJb50tLHNG_REBA6pSR4r3bgb2RTHQU,35408
104
104
  ultralytics/engine/trainer.py,sha256=K3I7HWtgt72FH91Wl8La8Wl9zgg4TN-AiYIGGWjKGKw,35447
105
105
  ultralytics/engine/tuner.py,sha256=iZrgMmXSDpfuDu4bdFRflmAsscys2-8W8qAGxSyOVJE,11844
106
106
  ultralytics/engine/validator.py,sha256=Y21Uo8_Zto4qjk_YqQk6k7tyfpq_Qk9cfjeXeyDRxs8,14643
107
107
  ultralytics/hub/__init__.py,sha256=93bqI8x8-MfDYdKkQVduuocUiQj3WGnk1nIk0li08zA,5663
108
108
  ultralytics/hub/auth.py,sha256=FID58NE6fh7Op_B45QOpWBw1qoBN0ponL16uvyb2dZ8,5399
109
- ultralytics/hub/session.py,sha256=VaTpoctiX0I8-diPS8ntUPRpFw4rUEV1jwjPRf9yZT8,16031
109
+ ultralytics/hub/session.py,sha256=uXkP8AayJClLUD9TP8AlJSqxm-OmTgCmTXl1TkO6jQc,16147
110
110
  ultralytics/hub/utils.py,sha256=RpFDFp9biUK70Mswzz2o3uEu4xwQxRaStPS19U2gu0g,9721
111
111
  ultralytics/models/__init__.py,sha256=TT9iLCL_n9Y80dcUq0Fo-p-GRZCSU2vrWXM3CoMwqqE,265
112
112
  ultralytics/models/fastsam/__init__.py,sha256=0dt65jZ_5b7Q-mdXN8MSEkgnFRA0FIwlel_LS2RaOlU,254
113
113
  ultralytics/models/fastsam/model.py,sha256=c7GGwaa9AXssJFwrcuytFHpPOlgSrS3n0utyf4JSL2o,1055
114
114
  ultralytics/models/fastsam/predict.py,sha256=0WHUFrqHUNy1cTNpLKsN0FKqLKCvr7fHU6pp91_QVg0,4121
115
- ultralytics/models/fastsam/prompt.py,sha256=ThrYA1fJiAM2AFdZB7F3j_6p5-QsvphydjowRrIXKOI,15915
115
+ ultralytics/models/fastsam/prompt.py,sha256=_SZumoIYjZA8jML9K2bNY8UX6T5_8MTjw9Hhm_Ozdyo,15967
116
116
  ultralytics/models/fastsam/utils.py,sha256=r-b362Wb7P2ZAlOwWckPJM6HLvg-eFDDz4wkA0ymLd0,2157
117
117
  ultralytics/models/fastsam/val.py,sha256=ILKmw3U8FYmmQsO9wk9-bJ9Pyp_ZthJM36b61L75s3Y,1967
118
118
  ultralytics/models/nas/__init__.py,sha256=d6-WTrYLXvbPs58ebA0-583ODi-VyzXc-t4aGIDQK6M,179
@@ -125,7 +125,7 @@ ultralytics/models/rtdetr/predict.py,sha256=-NFBAv_4VIUcXycO7wA8IH6EHXrVyOir-5PZ
125
125
  ultralytics/models/rtdetr/train.py,sha256=20AFYVW9NPxw0-cp-sRdIovWidFL0IIhJRv2oZjkPlM,3685
126
126
  ultralytics/models/rtdetr/val.py,sha256=4QQArdaGEY8rJsJuvyJ032f8GGVGdV2jURHK2EdMxyk,5566
127
127
  ultralytics/models/sam/__init__.py,sha256=9A1iyfPN_ncqq3TMExe_-uPoARjEX3psoHEI1xMG2VE,144
128
- ultralytics/models/sam/amg.py,sha256=MsKSRS2SieZK_n-m2ICk1QpcYogl5mofcsVa-4FXYvo,7935
128
+ ultralytics/models/sam/amg.py,sha256=He2c4nIoZ__F_pL18rRl278R8iBjWXBM2Z_vxfuVOkk,7971
129
129
  ultralytics/models/sam/build.py,sha256=-i-vj0egQ2idBZUf3Xf-H89QeToM3ky0HTxKP_KEXTs,4944
130
130
  ultralytics/models/sam/model.py,sha256=dkEhqJEZFuSoKubMaAjUx1U9Np49AII3nBScdH8rMBI,4707
131
131
  ultralytics/models/sam/predict.py,sha256=BuSaqMOkpwiM5H5sWOE1CDIwEDkz8uMKV6AMRysCZk4,23614
@@ -133,7 +133,7 @@ ultralytics/models/sam/modules/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz
133
133
  ultralytics/models/sam/modules/decoders.py,sha256=7NWnBNupxGYvH0S1N0R6NBHxdVFRUrrnL9EqAw09J4E,7816
134
134
  ultralytics/models/sam/modules/encoders.py,sha256=pRNZHzt2J2xD_D0Btu8pk4DcItfr6dRr9rcRfxoZZhU,24746
135
135
  ultralytics/models/sam/modules/sam.py,sha256=zC4l4kcrIQD_ekczjl2l6dgaABqqjROZxQ-FDb-itt0,2783
136
- ultralytics/models/sam/modules/tiny_encoder.py,sha256=_fdtgoYcsQKmvit7Ii9iUmL3Zh42IziEswtZZ38JXrk,29181
136
+ ultralytics/models/sam/modules/tiny_encoder.py,sha256=rAY9JuyxUpFivFUUPVjK2aUYlsXEZ0JGKVoEWDGf0Eo,29228
137
137
  ultralytics/models/sam/modules/transformer.py,sha256=VINZMb4xkx4IHAbJdhCq2XLDvaFBMup7RGC16DLS7OY,11164
138
138
  ultralytics/models/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
139
139
  ultralytics/models/utils/loss.py,sha256=PmlKDe4xQTiYkPSCdNUabxJC7bh43zGxiKVIxsXBVGE,15135
@@ -142,7 +142,7 @@ ultralytics/models/yolo/__init__.py,sha256=e1cZr9pbSbf3Ya2OvkTjGRwD_E2YZpe610xsk
142
142
  ultralytics/models/yolo/model.py,sha256=wOrJ6HWU9KhG7pVcgK4HdI8xe2GSShe8V4v4bJDVydM,4041
143
143
  ultralytics/models/yolo/classify/__init__.py,sha256=t-4pUHmgI2gjhc-l3bqNEcEtKD1dO40nD4Vc6Y2xD6o,355
144
144
  ultralytics/models/yolo/classify/predict.py,sha256=wFY4GIlWxe7idMndEw1RnDI63o53MTfiHKz0s2fOjAY,2513
145
- ultralytics/models/yolo/classify/train.py,sha256=9CRqtLkePo4ZkAzMTxDY4ztrNaWE34qnytYymfCEBzs,6888
145
+ ultralytics/models/yolo/classify/train.py,sha256=dNAUROnrS5LAbu6EKw29n6EUEoKYQaNjALoh3mo1Mm0,6291
146
146
  ultralytics/models/yolo/classify/val.py,sha256=MXdtWrBYVpfFuPfFPOTLKa_wBdTIA4dBZguT-EtldZ4,4909
147
147
  ultralytics/models/yolo/detect/__init__.py,sha256=JR8gZJWn7wMBbh-0j_073nxJVZTMFZVWTOG5Wnvk6w0,229
148
148
  ultralytics/models/yolo/detect/predict.py,sha256=_a9vH3DmKFY6eeztFTdj3nkfu_MKG6n7zb5rRKGjs9I,1510
@@ -162,18 +162,18 @@ ultralytics/models/yolo/segment/train.py,sha256=aOQpDIptZfKSl9mFa6B-3W3QccMRlmBI
162
162
  ultralytics/models/yolo/segment/val.py,sha256=DxEpR0FaQePlOXb19-FO4G0Nl9rWf9smtAh9eH__2g0,11806
163
163
  ultralytics/models/yolo/world/__init__.py,sha256=3VTH0q4NOt2EWRom15yCymvmvm0Etp2bmETJUhsVTBI,103
164
164
  ultralytics/models/yolo/world/train.py,sha256=acYN2-onL69LrL4av6_hY2r5AY0urC0WViDstn7npfI,3686
165
- ultralytics/models/yolo/world/train_world.py,sha256=n0XTAHYxufHU5OZ_QjpkHieKik-24z0LrYKzWYbCLvA,4798
165
+ ultralytics/models/yolo/world/train_world.py,sha256=IsnCEVt6DcM9lUskCKmIN-M8MM79xLpwTRqRoAHUnZ4,4857
166
166
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
167
167
  ultralytics/nn/autobackend.py,sha256=stqN66L8iloqKxBBYaAespsj2ZoSossouFiFf_Txi0s,31163
168
- ultralytics/nn/tasks.py,sha256=PmSVVDtjFbIZYe-Tb1pd4uhJzr9syl_xWhhURLXRn4E,45827
168
+ ultralytics/nn/tasks.py,sha256=aoQyGuFQ3GbPj42cfZDfkq5m5Q5Ec_045PW20d_-kv8,45837
169
169
  ultralytics/nn/modules/__init__.py,sha256=mARjWk83WPYF5phXhXfPbAu2ZohtdbHdi5zzoxyMubo,2553
170
- ultralytics/nn/modules/block.py,sha256=JiPwcbLzb7O_O5T1KkW0dIGJSfBwPaS-NNYuVkLBDwg,34384
170
+ ultralytics/nn/modules/block.py,sha256=DIXowCZn_Luc5VgGQEGXi34fqeiz_bhaNT48zEzguDM,34491
171
171
  ultralytics/nn/modules/conv.py,sha256=Ywe87IhuaS22mR2JJ9xjnW8Sb-m7WTjxuqIxV_Dv8lI,12722
172
172
  ultralytics/nn/modules/head.py,sha256=6VV6t2OJ_t9fCdhFxzcMcirp6lonv-xSm0o2yFghZZ0,26747
173
173
  ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
174
174
  ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
175
- ultralytics/solutions/__init__.py,sha256=aO9h0JQDfaQR2PCk7yCRxu2odb3Zxu76RdYSv9JPfm8,588
176
- ultralytics/solutions/ai_gym.py,sha256=h_ZME327T1LoxeRSAaDZg3sWJK3b6t1xJSg1CnBarE8,4733
175
+ ultralytics/solutions/__init__.py,sha256=O_G9jh34NnFsHKSA8zcJH0CHtg1Q01JEiRWGwX3vGJY,631
176
+ ultralytics/solutions/ai_gym.py,sha256=KQdx0RP9t9y1MqYMVlYUSn09SVJSUwKvgxPri_DhczM,4721
177
177
  ultralytics/solutions/analytics.py,sha256=UI8HoegfIJGgvQPOt4-e9A0ss2_ofM7zzxcbKlhe66k,11572
178
178
  ultralytics/solutions/distance_calculation.py,sha256=pSIkyytHGRAaNzIrkkNkiOnSVWU1PYvURlCIV_jRORA,6505
179
179
  ultralytics/solutions/heatmap.py,sha256=AHXnmXhoQ95ph74zsdrvX_Lfy3wF0SsH0MIeTixE7Qg,10386
@@ -181,6 +181,7 @@ ultralytics/solutions/object_counter.py,sha256=IR2kvgjlaHuzfq55gtwBiGFJ7dS5-5OCF
181
181
  ultralytics/solutions/parking_management.py,sha256=Bd7FU3WZ8mRBWq81Z5c8jH5WloF4jPKo8TycqU_AcEI,9786
182
182
  ultralytics/solutions/queue_management.py,sha256=ECm6gLZplmE9Cm-zdOazHBBDcW-vvr8nx2M28fcPbts,6787
183
183
  ultralytics/solutions/speed_estimation.py,sha256=kjqMSHGTHMZaNgTKNKWULxnJQNsvhq4WMUphMVlBjsc,6768
184
+ ultralytics/solutions/streamlit_inference.py,sha256=IsQMrwINV1C3YtUDhf3vXboxNNsSY3Awdnids_Nmd8k,5356
184
185
  ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
185
186
  ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
186
187
  ultralytics/trackers/bot_sort.py,sha256=39AvhYVbT7izF3--rX_e6Lhgb5czTA23gw6AgnNcRds,8601
@@ -190,7 +191,7 @@ ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7J
190
191
  ultralytics/trackers/utils/gmc.py,sha256=-1oBNFRB-9EawJmUOT566AygLCVxJw-jsPSIOl5j_Hk,13683
191
192
  ultralytics/trackers/utils/kalman_filter.py,sha256=0oqhk59NKEiwcJ2FXnw6_sT4bIFC6Wu5IY2B-TGxJKU,15168
192
193
  ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuUB6PfVNkb4,5404
193
- ultralytics/utils/__init__.py,sha256=2nR2EZw9ljk9EIJsVr4gXD_u0kQUyOw4d3oeK4orhuw,38507
194
+ ultralytics/utils/__init__.py,sha256=905ZnRdmTrhXao2nsCP2mV2xAshsEKk0r4aOPP4EVPQ,38490
194
195
  ultralytics/utils/autobatch.py,sha256=gPFcREMsMHRAuTQiBnNZ9Mm1XNqmQW-uMPhveDFEQ_Y,3966
195
196
  ultralytics/utils/benchmarks.py,sha256=tDX7wu0TpMMlEQDOFqfkjxl156ssS7Lh_5tFWIXdJfg,23549
196
197
  ultralytics/utils/checks.py,sha256=PDY1eHlsyDVEIiKRjvb81uz2jniL1MqgP_TmXH_78KM,28379
@@ -200,12 +201,12 @@ ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,8
200
201
  ultralytics/utils/files.py,sha256=TVfY0Wi5IsUc4YdsDzC0dAg-jAP5exYvwqB3VmXhDLY,6761
201
202
  ultralytics/utils/instance.py,sha256=5daM5nkxBv9hr5QzyII8zmuFj24hHuNtcr4EMCHAtpY,15654
202
203
  ultralytics/utils/loss.py,sha256=tAAi_l0SAtbtqT8AQSBSCvEyv342-r04H2KcSF1Yk_w,33795
203
- ultralytics/utils/metrics.py,sha256=3nuFZK_7rnhf6KjhflnRfHVN2i_ZB-LbGvIdbc177N8,53587
204
+ ultralytics/utils/metrics.py,sha256=C7qFuZjwGqbsG4sggm_qfm8gVuBUwHg_Fhxj08b6NfU,53671
204
205
  ultralytics/utils/ops.py,sha256=Jlb0YBkN_SMVT2AjKPEjxgOtgnj7i7HTBh9FEwpoprU,33509
205
206
  ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
206
- ultralytics/utils/plotting.py,sha256=Aiu_J5mYGugvZ0WxHMbXftlR9lQh53iGPemHb2RT87k,55533
207
+ ultralytics/utils/plotting.py,sha256=p9IoGCqlXAs5YV28oI7l0KR_4F2sXxDDnd3EuFsLOHw,55551
207
208
  ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
208
- ultralytics/utils/torch_utils.py,sha256=magdEcuNq7ZBIsM7SZdzLwCdM9LnTePlZp9ZTps8Pks,27189
209
+ ultralytics/utils/torch_utils.py,sha256=uuiXENrjF8a0PydZRfdp3bQ4oQZ9FyERXXfqGyXLCg0,27713
209
210
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
210
211
  ultralytics/utils/tuner.py,sha256=49KAadKZsUeCpwIm5Sn0grb0RPcMNI8vHGLwroDEJNI,6171
211
212
  ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
@@ -219,9 +220,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
219
220
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
220
221
  ultralytics/utils/callbacks/tensorboard.py,sha256=QEgOVhUqY9akOs5TJIwz1Rvn6l32xWLpOxlwEyWF0B8,4136
221
222
  ultralytics/utils/callbacks/wb.py,sha256=9-fjQIdLjr3b73DTE3rHO171KvbH1VweJ-bmbv-rqTw,6747
222
- ultralytics-8.2.48.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
223
- ultralytics-8.2.48.dist-info/METADATA,sha256=VT6LB4RZg55vGtKXhvx2vSMiiz9-2-0VPEHqfUwa6r4,41210
224
- ultralytics-8.2.48.dist-info/WHEEL,sha256=mguMlWGMX-VHnMpKOjjQidIo1ssRlCFu4a4mBpz1s2M,91
225
- ultralytics-8.2.48.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
226
- ultralytics-8.2.48.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
227
- ultralytics-8.2.48.dist-info/RECORD,,
223
+ ultralytics-8.2.50.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
224
+ ultralytics-8.2.50.dist-info/METADATA,sha256=G9owtFJbc_lWfEfdwUDmMu44yOF_y4O6l5r1L4vLu-4,41217
225
+ ultralytics-8.2.50.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
226
+ ultralytics-8.2.50.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
227
+ ultralytics-8.2.50.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
228
+ ultralytics-8.2.50.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (70.1.1)
2
+ Generator: setuptools (70.2.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5