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

ultralytics/__init__.py CHANGED
@@ -1,6 +1,6 @@
1
1
  # Ultralytics YOLO 🚀, AGPL-3.0 license
2
2
 
3
- __version__ = "8.2.1"
3
+ __version__ = "8.2.3"
4
4
 
5
5
  from ultralytics.data.explorer.explorer import Explorer
6
6
  from ultralytics.models import RTDETR, SAM, YOLO, YOLOWorld
@@ -66,13 +66,13 @@ CLI_HELP_MSG = f"""
66
66
  See all ARGS at https://docs.ultralytics.com/usage/cfg or with 'yolo cfg'
67
67
 
68
68
  1. Train a detection model for 10 epochs with an initial learning_rate of 0.01
69
- yolo train data=coco128.yaml model=yolov8n.pt epochs=10 lr0=0.01
69
+ yolo train data=coco8.yaml model=yolov8n.pt epochs=10 lr0=0.01
70
70
 
71
71
  2. Predict a YouTube video using a pretrained segmentation model at image size 320:
72
72
  yolo predict model=yolov8n-seg.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320
73
73
 
74
74
  3. Val a pretrained detection model at batch-size 1 and image size 640:
75
- yolo val model=yolov8n.pt data=coco128.yaml batch=1 imgsz=640
75
+ yolo val model=yolov8n.pt data=coco8.yaml batch=1 imgsz=640
76
76
 
77
77
  4. Export a YOLOv8n classification model to ONNX format at image size 224 by 128 (no TASK required)
78
78
  yolo export model=yolov8n-cls.pt format=onnx imgsz=224,128
@@ -6,7 +6,7 @@ mode: train # (str) YOLO mode, i.e. train, val, predict, export, track, benchmar
6
6
 
7
7
  # Train settings -------------------------------------------------------------------------------------------------------
8
8
  model: # (str, optional) path to model file, i.e. yolov8n.pt, yolov8n.yaml
9
- data: # (str, optional) path to data file, i.e. coco128.yaml
9
+ data: # (str, optional) path to data file, i.e. coco8.yaml
10
10
  epochs: 100 # (int) number of epochs to train for
11
11
  time: # (float, optional) number of hours to train for, overrides epochs if supplied
12
12
  patience: 100 # (int) epochs to wait for no observable improvement for early stopping of training
@@ -3,7 +3,7 @@
3
3
  Train a model on a dataset.
4
4
 
5
5
  Usage:
6
- $ yolo mode=train model=yolov8n.pt data=coco128.yaml imgsz=640 epochs=100 batch=16
6
+ $ yolo mode=train model=yolov8n.pt data=coco8.yaml imgsz=640 epochs=100 batch=16
7
7
  """
8
8
 
9
9
  import gc
@@ -3,7 +3,7 @@
3
3
  Check a model's accuracy on a test or val split of a dataset.
4
4
 
5
5
  Usage:
6
- $ yolo mode=val model=yolov8n.pt data=coco128.yaml imgsz=640
6
+ $ yolo mode=val model=yolov8n.pt data=coco8.yaml imgsz=640
7
7
 
8
8
  Usage - formats:
9
9
  $ yolo mode=val model=yolov8n.pt # PyTorch
@@ -234,8 +234,11 @@ class AutoBackend(nn.Module):
234
234
  logger = trt.Logger(trt.Logger.INFO)
235
235
  # Read file
236
236
  with open(w, "rb") as f, trt.Runtime(logger) as runtime:
237
- meta_len = int.from_bytes(f.read(4), byteorder="little") # read metadata length
238
- metadata = json.loads(f.read(meta_len).decode("utf-8")) # read metadata
237
+ try:
238
+ meta_len = int.from_bytes(f.read(4), byteorder="little") # read metadata length
239
+ metadata = json.loads(f.read(meta_len).decode("utf-8")) # read metadata
240
+ except UnicodeDecodeError:
241
+ f.seek(0) # engine file may lack embedded Ultralytics metadata
239
242
  model = runtime.deserialize_cuda_engine(f.read()) # read engine
240
243
 
241
244
  # Model context
@@ -61,7 +61,7 @@ HELP_MSG = """
61
61
  model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
62
62
 
63
63
  # Use the model
64
- results = model.train(data="coco128.yaml", epochs=3) # train the model
64
+ results = model.train(data="coco8.yaml", epochs=3) # train the model
65
65
  results = model.val() # evaluate model performance on the validation set
66
66
  results = model('https://ultralytics.com/images/bus.jpg') # predict on an image
67
67
  success = model.export(format='onnx') # export the model to ONNX format
@@ -78,13 +78,13 @@ HELP_MSG = """
78
78
  See all ARGS at https://docs.ultralytics.com/usage/cfg or with 'yolo cfg'
79
79
 
80
80
  - Train a detection model for 10 epochs with an initial learning_rate of 0.01
81
- yolo detect train data=coco128.yaml model=yolov8n.pt epochs=10 lr0=0.01
81
+ yolo detect train data=coco8.yaml model=yolov8n.pt epochs=10 lr0=0.01
82
82
 
83
83
  - Predict a YouTube video using a pretrained segmentation model at image size 320:
84
84
  yolo segment predict model=yolov8n-seg.pt source='https://youtu.be/LNwODJXcvt4' imgsz=320
85
85
 
86
86
  - Val a pretrained detection model at batch-size 1 and image size 640:
87
- yolo detect val model=yolov8n.pt data=coco128.yaml batch=1 imgsz=640
87
+ yolo detect val model=yolov8n.pt data=coco8.yaml batch=1 imgsz=640
88
88
 
89
89
  - Export a YOLOv8n classification model to ONNX format at image size 224 by 128 (no TASK required)
90
90
  yolo export model=yolov8n-cls.pt format=onnx imgsz=224,128
@@ -25,18 +25,23 @@ NCNN | `ncnn` | yolov8n_ncnn_model/
25
25
  """
26
26
 
27
27
  import glob
28
+ import os
28
29
  import platform
30
+ import re
31
+ import shutil
29
32
  import time
30
33
  from pathlib import Path
31
34
 
32
35
  import numpy as np
33
36
  import torch.cuda
37
+ import yaml
34
38
 
35
39
  from ultralytics import YOLO, YOLOWorld
36
40
  from ultralytics.cfg import TASK2DATA, TASK2METRIC
37
41
  from ultralytics.engine.exporter import export_formats
38
42
  from ultralytics.utils import ARM64, ASSETS, IS_JETSON, IS_RASPBERRYPI, LINUX, LOGGER, MACOS, TQDM, WEIGHTS_DIR
39
43
  from ultralytics.utils.checks import IS_PYTHON_3_12, check_requirements, check_yolo
44
+ from ultralytics.utils.downloads import safe_download
40
45
  from ultralytics.utils.files import file_size
41
46
  from ultralytics.utils.torch_utils import select_device
42
47
 
@@ -152,6 +157,133 @@ def benchmark(
152
157
  return df
153
158
 
154
159
 
160
+ class RF100Benchmark:
161
+ def __init__(self):
162
+ """Function for initialization of RF100Benchmark."""
163
+ self.ds_names = []
164
+ self.ds_cfg_list = []
165
+ self.rf = None
166
+ self.val_metrics = ["class", "images", "targets", "precision", "recall", "map50", "map95"]
167
+
168
+ def set_key(self, api_key):
169
+ """
170
+ Set Roboflow API key for processing.
171
+
172
+ Args:
173
+ api_key (str): The API key.
174
+ """
175
+
176
+ check_requirements("roboflow")
177
+ from roboflow import Roboflow
178
+
179
+ self.rf = Roboflow(api_key=api_key)
180
+
181
+ def parse_dataset(self, ds_link_txt="datasets_links.txt"):
182
+ """
183
+ Parse dataset links and downloads datasets.
184
+
185
+ Args:
186
+ ds_link_txt (str): Path to dataset_links file.
187
+ """
188
+
189
+ (shutil.rmtree("rf-100"), os.mkdir("rf-100")) if os.path.exists("rf-100") else os.mkdir("rf-100")
190
+ os.chdir("rf-100")
191
+ os.mkdir("ultralytics-benchmarks")
192
+ safe_download("https://ultralytics.com/assets/datasets_links.txt")
193
+
194
+ with open(ds_link_txt, "r") as file:
195
+ for line in file:
196
+ try:
197
+ _, url, workspace, project, version = re.split("/+", line.strip())
198
+ self.ds_names.append(project)
199
+ proj_version = f"{project}-{version}"
200
+ if not Path(proj_version).exists():
201
+ self.rf.workspace(workspace).project(project).version(version).download("yolov8")
202
+ else:
203
+ print("Dataset already downloaded.")
204
+ self.ds_cfg_list.append(Path.cwd() / proj_version / "data.yaml")
205
+ except Exception:
206
+ continue
207
+
208
+ return self.ds_names, self.ds_cfg_list
209
+
210
+ def fix_yaml(self, path):
211
+ """
212
+ Function to fix yaml train and val path.
213
+
214
+ Args:
215
+ path (str): YAML file path.
216
+ """
217
+
218
+ with open(path, "r") as file:
219
+ yaml_data = yaml.safe_load(file)
220
+ yaml_data["train"] = "train/images"
221
+ yaml_data["val"] = "valid/images"
222
+ with open(path, "w") as file:
223
+ yaml.safe_dump(yaml_data, file)
224
+
225
+ def evaluate(self, yaml_path, val_log_file, eval_log_file, list_ind):
226
+ """
227
+ Model evaluation on validation results.
228
+
229
+ Args:
230
+ yaml_path (str): YAML file path.
231
+ val_log_file (str): val_log_file path.
232
+ eval_log_file (str): eval_log_file path.
233
+ list_ind (int): Index for current dataset.
234
+ """
235
+ skip_symbols = ["🚀", "⚠️", "💡", "❌"]
236
+ with open(yaml_path) as stream:
237
+ class_names = yaml.safe_load(stream)["names"]
238
+ with open(val_log_file, "r", encoding="utf-8") as f:
239
+ lines = f.readlines()
240
+ eval_lines = []
241
+ for line in lines:
242
+ if any(symbol in line for symbol in skip_symbols):
243
+ continue
244
+ entries = line.split(" ")
245
+ entries = list(filter(lambda val: val != "", entries))
246
+ entries = [e.strip("\n") for e in entries]
247
+ start_class = False
248
+ for e in entries:
249
+ if e == "all":
250
+ if "(AP)" not in entries:
251
+ if "(AR)" not in entries:
252
+ # parse all
253
+ eval = {}
254
+ eval["class"] = entries[0]
255
+ eval["images"] = entries[1]
256
+ eval["targets"] = entries[2]
257
+ eval["precision"] = entries[3]
258
+ eval["recall"] = entries[4]
259
+ eval["map50"] = entries[5]
260
+ eval["map95"] = entries[6]
261
+ eval_lines.append(eval)
262
+
263
+ if e in class_names:
264
+ eval = {}
265
+ eval["class"] = entries[0]
266
+ eval["images"] = entries[1]
267
+ eval["targets"] = entries[2]
268
+ eval["precision"] = entries[3]
269
+ eval["recall"] = entries[4]
270
+ eval["map50"] = entries[5]
271
+ eval["map95"] = entries[6]
272
+ eval_lines.append(eval)
273
+ map_val = 0.0
274
+ if len(eval_lines) > 1:
275
+ print("There's more dicts")
276
+ for lst in eval_lines:
277
+ if lst["class"] == "all":
278
+ map_val = lst["map50"]
279
+ else:
280
+ print("There's only one dict res")
281
+ map_val = [res["map50"] for res in eval_lines][0]
282
+
283
+ with open(eval_log_file, "a") as f:
284
+ f.write(f"{self.ds_names[list_ind]}: {map_val}\n")
285
+
286
+
155
287
  class ProfileModels:
156
288
  """
157
289
  ProfileModels class for profiling different models on ONNX and TensorRT.
@@ -440,12 +440,9 @@ class Annotator:
440
440
  text_x = self.im.shape[1] - int(self.im.shape[1] * 0.025 + max_text_width)
441
441
  text_y = int(self.im.shape[0] * 0.025)
442
442
 
443
- # Calculate dynamic gap between each count value based on the width of the image
444
- dynamic_gap = max(1, self.im.shape[1] // 100) * tf
445
-
446
443
  for i, count in enumerate(counts):
447
444
  text_x_pos = text_x
448
- text_y_pos = text_y + i * dynamic_gap # Adjust vertical position with dynamic gap
445
+ text_y_pos = text_y + i * (max_text_height + 25 * tf)
449
446
 
450
447
  # Draw the border
451
448
  cv2.rectangle(
@@ -468,8 +465,6 @@ class Annotator:
468
465
  lineType=cv2.LINE_AA,
469
466
  )
470
467
 
471
- text_y_pos += tf * max_text_height
472
-
473
468
  @staticmethod
474
469
  def estimate_pose_angle(a, b, c):
475
470
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ultralytics
3
- Version: 8.2.1
3
+ Version: 8.2.3
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
@@ -168,7 +168,7 @@ model = YOLO("yolov8n.yaml") # build a new model from scratch
168
168
  model = YOLO("yolov8n.pt") # load a pretrained model (recommended for training)
169
169
 
170
170
  # Use the model
171
- model.train(data="coco128.yaml", epochs=3) # train the model
171
+ model.train(data="coco8.yaml", epochs=3) # train the model
172
172
  metrics = model.val() # evaluate model performance on the validation set
173
173
  results = model("https://ultralytics.com/images/bus.jpg") # predict on an image
174
174
  path = model.export(format="onnx") # export the model to ONNX format
@@ -1,8 +1,8 @@
1
- ultralytics/__init__.py,sha256=pNYOlGS7fr9pTS-rXGOhY8ujU-0g4fg6dJgLSUZhzzc,632
1
+ ultralytics/__init__.py,sha256=a86uFH0GxmTJWMnV4PR4JHXLnDPEsIQuVNsfgFSixnE,632
2
2
  ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
3
3
  ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
4
- ultralytics/cfg/__init__.py,sha256=ugSQqHCg31bAE9rwhVrnLMNzKLShr9JxDFcN6kBTbUk,21316
5
- ultralytics/cfg/default.yaml,sha256=2DFD7eZJiKdnUB3eQPIxo8nV6TG4SiZzdaBJnD5Aw2k,8213
4
+ ultralytics/cfg/__init__.py,sha256=4ZnvY2ULMGofFhjaRIzKQlGC5YVkvWkEAYAhnsKC1Po,21312
5
+ ultralytics/cfg/default.yaml,sha256=KoXq5DHQK-Voge9DbkySd2rRpDizG6Oq-A4Byqz5Exc,8211
6
6
  ultralytics/cfg/datasets/Argoverse.yaml,sha256=FyeuJT5CHq_9d4hlfAf0kpZlnbUMO0S--UJ1yIqcdKk,3134
7
7
  ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=YDsyFPI6F6-OQXLBM3hOXo3vADYREwZzmMQfJNdpWyM,1193
8
8
  ultralytics/cfg/datasets/DOTAv1.yaml,sha256=dxLUliHvJOW4q4vJRu5qIYVvNfjvXWB7GVh_Fhk--dM,1163
@@ -82,9 +82,9 @@ ultralytics/engine/exporter.py,sha256=KW3PwxgzlNBj44oiYAKT4PVS4uexLZT5H8Qevc2Q8q
82
82
  ultralytics/engine/model.py,sha256=4zSVSBP8Ex49bJjnOXm7g3Qr_NgbplHPCjdnVfZwfxM,40019
83
83
  ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
84
84
  ultralytics/engine/results.py,sha256=MvrOBrBlRF7kbL-QwysMf9mIDy_lwQBTTYvy1x1FMME,30667
85
- ultralytics/engine/trainer.py,sha256=SI4R2kHHryPO5BrMWThjSGk_nbnDfKVPKkyIqDm4JWE,34989
85
+ ultralytics/engine/trainer.py,sha256=FK2PkQyUThIU5RYr8Qa38JZDRB3iOl85Sdbi4HrlQ5U,34987
86
86
  ultralytics/engine/tuner.py,sha256=iZrgMmXSDpfuDu4bdFRflmAsscys2-8W8qAGxSyOVJE,11844
87
- ultralytics/engine/validator.py,sha256=p0irfLSZa3-0TtcuGheI8kNbzPUqs_UM3TMK4VRUGK4,14645
87
+ ultralytics/engine/validator.py,sha256=Y21Uo8_Zto4qjk_YqQk6k7tyfpq_Qk9cfjeXeyDRxs8,14643
88
88
  ultralytics/hub/__init__.py,sha256=U4j-2QPdwSDlxw6RgFYnnJXOoIzLtwke4TkY2A8q4ws,5068
89
89
  ultralytics/hub/auth.py,sha256=FID58NE6fh7Op_B45QOpWBw1qoBN0ponL16uvyb2dZ8,5399
90
90
  ultralytics/hub/session.py,sha256=Oly3bKjLkW08iOm3QoSr6Yy57aLZ4AmAmF6Pp9Y_q5g,15197
@@ -145,7 +145,7 @@ ultralytics/models/yolo/world/__init__.py,sha256=3VTH0q4NOt2EWRom15yCymvmvm0Etp2
145
145
  ultralytics/models/yolo/world/train.py,sha256=acYN2-onL69LrL4av6_hY2r5AY0urC0WViDstn7npfI,3686
146
146
  ultralytics/models/yolo/world/train_world.py,sha256=ICPsYNbuPkq_qf3FHl2YJ-q3g7ik0pI-zhMpLmHa5-4,4805
147
147
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
148
- ultralytics/nn/autobackend.py,sha256=T0vOQf_Wb25MpJavEhWQC0eHXQ_B6izp1I4De7t8iP0,30708
148
+ ultralytics/nn/autobackend.py,sha256=6amaXnbDlvh0kTIbeHV3kIM6X7P1r0T3le1GPxIgkOs,30864
149
149
  ultralytics/nn/tasks.py,sha256=a3FSkIUErlE7qI506ye5vGggqzMxqXWDkIbbLD4AGyI,43623
150
150
  ultralytics/nn/modules/__init__.py,sha256=KzLoyn2ldfReiQL8H8xsMC49Xvtb8Kv9ikE5Q3OBoAs,2326
151
151
  ultralytics/nn/modules/block.py,sha256=smIz3oNTDA7UKrAH5FfSMh08C12-avgWTeIkbgZIv18,25251
@@ -169,9 +169,9 @@ ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7J
169
169
  ultralytics/trackers/utils/gmc.py,sha256=vwcPA1n5zjPaBGhCDt8ItN7rq_6Sczsjn4gsXJfRylU,13688
170
170
  ultralytics/trackers/utils/kalman_filter.py,sha256=0oqhk59NKEiwcJ2FXnw6_sT4bIFC6Wu5IY2B-TGxJKU,15168
171
171
  ultralytics/trackers/utils/matching.py,sha256=UxhSGa5pN6WoYwYSBAkkt-O7xMxUR47VuUB6PfVNkb4,5404
172
- ultralytics/utils/__init__.py,sha256=mo1Uo5uMBG1mhurWSwi78DEFU79NbcYuximNVKhjiYI,39292
172
+ ultralytics/utils/__init__.py,sha256=BdmRL2UhbmzmWuhaB1iDUTOyQ3fTwOrB0aUijAgpOUg,39286
173
173
  ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
174
- ultralytics/utils/benchmarks.py,sha256=dVAQ7GjZmgjvGL9JglKA3d9HAnvGoyX2TaEmZJjk0HA,18539
174
+ ultralytics/utils/benchmarks.py,sha256=l9SHatEr4itinf9R77bunBpNqrTI2S_qaPB3K2oAYRg,23470
175
175
  ultralytics/utils/checks.py,sha256=UDrcHiTMjSHSyUZflTRGuyYRj0uz9-RQ-xfDq_lsXZo,27971
176
176
  ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
177
177
  ultralytics/utils/downloads.py,sha256=Rx32imHkKyVltEDMiCtCT2N5aA9Cud_0PyIUoTh4ru0,21496
@@ -182,7 +182,7 @@ ultralytics/utils/loss.py,sha256=ejXnPEIAzNEoNz2UjW0_fcdeUs9Hy-jPzUrJ3FiIIwE,327
182
182
  ultralytics/utils/metrics.py,sha256=XPD-xP0fchR8KgCuTcihV2-n0EK1cWi3-53BWN_pLuA,53518
183
183
  ultralytics/utils/ops.py,sha256=wZCWx7dm5GJNIJHyZaFJRetGcQ7prdv-anplqq9figQ,33309
184
184
  ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
185
- ultralytics/utils/plotting.py,sha256=JS-u6ZSCT7-7P3ySHxT7DZFujpOu3re78FmKkbBeaiw,47558
185
+ ultralytics/utils/plotting.py,sha256=bmuQIlH8wJRp9ASRmVfiXJrr4iDwEPTS_8WniCzyqVc,47332
186
186
  ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
187
187
  ultralytics/utils/torch_utils.py,sha256=y1qJniyii0sJFg8dpP-yjYh8AMOoFok9NEZcRi669Jo,25916
188
188
  ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
@@ -198,9 +198,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
198
198
  ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
199
199
  ultralytics/utils/callbacks/tensorboard.py,sha256=Z1veCVcn9THPhdplWuIzwlsW2yF7y-On9IZIk3khM0Y,4135
200
200
  ultralytics/utils/callbacks/wb.py,sha256=woCQVuZzqtM5KnwxIibcfM3sFBYojeMPnv11jrRaIQA,6674
201
- ultralytics-8.2.1.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
202
- ultralytics-8.2.1.dist-info/METADATA,sha256=ZNeWp7WwbNhSg7OwwYhvr1z7uDNFrN224e_kaRrbqdc,40450
203
- ultralytics-8.2.1.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
204
- ultralytics-8.2.1.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
205
- ultralytics-8.2.1.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
206
- ultralytics-8.2.1.dist-info/RECORD,,
201
+ ultralytics-8.2.3.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
202
+ ultralytics-8.2.3.dist-info/METADATA,sha256=31ugX09M1NRa-j85JRQpd3yMHeabCEyS5cWV7KV9vBY,40448
203
+ ultralytics-8.2.3.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
204
+ ultralytics-8.2.3.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
205
+ ultralytics-8.2.3.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
206
+ ultralytics-8.2.3.dist-info/RECORD,,