ultralytics 8.3.58__py3-none-any.whl → 8.3.59__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.58"
3
+ __version__ = "8.3.59"
4
4
 
5
5
  import os
6
6
 
@@ -9,8 +9,8 @@
9
9
 
10
10
  # Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
11
11
  path: ../datasets/package-seg # dataset root dir
12
- train: images/train # train images (relative to 'path') 1920 images
13
- val: images/val # val images (relative to 'path') 89 images
12
+ train: train/images # train images (relative to 'path') 1920 images
13
+ val: valid/images # val images (relative to 'path') 89 images
14
14
  test: test/images # test images (relative to 'path') 188 images
15
15
 
16
16
  # Classes
@@ -0,0 +1,21 @@
1
+ # Ultralytics YOLO 🚀, AGPL-3.0 license
2
+ # YOLO11-cls image classification model. For Usage examples see https://docs.ultralytics.com/tasks/classify
3
+
4
+ # Parameters
5
+ nc: 10 # number of classes
6
+ scales: # model compound scaling constants, i.e. 'model=yolo11n-cls.yaml' will call yolo11-cls.yaml with scale 'n'
7
+ # [depth, width, max_channels]
8
+ n: [0.33, 0.25, 1024]
9
+ s: [0.33, 0.50, 1024]
10
+ m: [0.67, 0.75, 1024]
11
+ l: [1.00, 1.00, 1024]
12
+ x: [1.00, 1.25, 1024]
13
+
14
+ # YOLO11n backbone
15
+ backbone:
16
+ # [from, repeats, module, args]
17
+ - [-1, 1, TorchVision, [512, "resnet18", "DEFAULT", True, 2]] # truncate two layers from the end
18
+
19
+ # YOLO11n head
20
+ head:
21
+ - [-1, 1, Classify, [nc]] # Classify
@@ -377,7 +377,7 @@ def convert_segment_masks_to_yolo_seg(masks_dir, output_dir, classes):
377
377
  """
378
378
  pixel_to_class_mapping = {i + 1: i for i in range(classes)}
379
379
  for mask_path in Path(masks_dir).iterdir():
380
- if mask_path.suffix == ".png":
380
+ if mask_path.suffix in {".png", ".jpg"}:
381
381
  mask = cv2.imread(str(mask_path), cv2.IMREAD_GRAYSCALE) # Read the mask image in grayscale
382
382
  img_height, img_width = mask.shape # Get image dimensions
383
383
  LOGGER.info(f"Processing {mask_path} imgsz = {img_height} x {img_width}")
@@ -452,7 +452,11 @@ class Exporter:
452
452
  batch_size=batch,
453
453
  )
454
454
  n = len(dataset)
455
- if n < 300:
455
+ if n < self.args.batch:
456
+ raise ValueError(
457
+ f"The calibration dataset ({n} images) must have at least as many images as the batch size ('batch={self.args.batch}')."
458
+ )
459
+ elif n < 300:
456
460
  LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
457
461
  return build_dataloader(dataset, batch=batch, workers=0) # required for batch loading
458
462
 
@@ -56,6 +56,7 @@ from .block import (
56
56
  RepVGGDW,
57
57
  ResNetLayer,
58
58
  SCDown,
59
+ TorchVision,
59
60
  )
60
61
  from .conv import (
61
62
  CBAM,
@@ -68,6 +69,7 @@ from .conv import (
68
69
  DWConvTranspose2d,
69
70
  Focus,
70
71
  GhostConv,
72
+ Index,
71
73
  LightConv,
72
74
  RepConv,
73
75
  SpatialAttention,
@@ -156,4 +158,6 @@ __all__ = (
156
158
  "C2fCIB",
157
159
  "Attention",
158
160
  "PSA",
161
+ "TorchVision",
162
+ "Index",
159
163
  )
@@ -49,6 +49,7 @@ __all__ = (
49
49
  "Attention",
50
50
  "PSA",
51
51
  "SCDown",
52
+ "TorchVision",
52
53
  )
53
54
 
54
55
 
@@ -1107,3 +1108,51 @@ class SCDown(nn.Module):
1107
1108
  def forward(self, x):
1108
1109
  """Applies convolution and downsampling to the input tensor in the SCDown module."""
1109
1110
  return self.cv2(self.cv1(x))
1111
+
1112
+
1113
+ class TorchVision(nn.Module):
1114
+ """
1115
+ TorchVision module to allow loading any torchvision model.
1116
+
1117
+ This class provides a way to load a model from the torchvision library, optionally load pre-trained weights, and customize the model by truncating or unwrapping layers.
1118
+
1119
+ Attributes:
1120
+ m (nn.Module): The loaded torchvision model, possibly truncated and unwrapped.
1121
+
1122
+ Args:
1123
+ c1 (int): Input channels.
1124
+ c2 (): Output channels.
1125
+ model (str): Name of the torchvision model to load.
1126
+ weights (str, optional): Pre-trained weights to load. Default is "DEFAULT".
1127
+ unwrap (bool, optional): If True, unwraps the model to a sequential containing all but the last `truncate` layers. Default is True.
1128
+ truncate (int, optional): Number of layers to truncate from the end if `unwrap` is True. Default is 2.
1129
+ split (bool, optional): Returns output from intermediate child modules as list. Default is False.
1130
+ """
1131
+
1132
+ def __init__(self, c1, c2, model, weights="DEFAULT", unwrap=True, truncate=2, split=False):
1133
+ """Load the model and weights from torchvision."""
1134
+ import torchvision
1135
+
1136
+ super().__init__()
1137
+ if hasattr(torchvision.models, "get_model"):
1138
+ self.m = torchvision.models.get_model(model, weights=weights)
1139
+ else:
1140
+ self.m = torchvision.models.__dict__[model](pretrained=bool(weights))
1141
+ if unwrap:
1142
+ layers = list(self.m.children())[:-truncate]
1143
+ if isinstance(layers[0], nn.Sequential): # Second-level for some models like EfficientNet, Swin
1144
+ layers = [*list(layers[0].children()), *layers[1:]]
1145
+ self.m = nn.Sequential(*layers)
1146
+ self.split = split
1147
+ else:
1148
+ self.split = False
1149
+ self.m.head = self.m.heads = nn.Identity()
1150
+
1151
+ def forward(self, x):
1152
+ """Forward pass through the model."""
1153
+ if self.split:
1154
+ y = [x]
1155
+ y.extend(m(y[-1]) for m in self.m)
1156
+ else:
1157
+ y = self.m(x)
1158
+ return y
@@ -21,6 +21,7 @@ __all__ = (
21
21
  "CBAM",
22
22
  "Concat",
23
23
  "RepConv",
24
+ "Index",
24
25
  )
25
26
 
26
27
 
@@ -330,3 +331,20 @@ class Concat(nn.Module):
330
331
  def forward(self, x):
331
332
  """Forward pass for the YOLOv8 mask Proto module."""
332
333
  return torch.cat(x, self.d)
334
+
335
+
336
+ class Index(nn.Module):
337
+ """Returns a particular index of the input."""
338
+
339
+ def __init__(self, c1, c2, index=0):
340
+ """Returns a particular index of the input."""
341
+ super().__init__()
342
+ self.index = index
343
+
344
+ def forward(self, x):
345
+ """
346
+ Forward pass.
347
+
348
+ Expects a list of tensors as input.
349
+ """
350
+ return x[self.index]
ultralytics/nn/tasks.py CHANGED
@@ -50,6 +50,7 @@ from ultralytics.nn.modules import (
50
50
  HGBlock,
51
51
  HGStem,
52
52
  ImagePoolingAttn,
53
+ Index,
53
54
  Pose,
54
55
  RepC3,
55
56
  RepConv,
@@ -59,6 +60,7 @@ from ultralytics.nn.modules import (
59
60
  RTDETRDecoder,
60
61
  SCDown,
61
62
  Segment,
63
+ TorchVision,
62
64
  WorldDetect,
63
65
  v10Detect,
64
66
  )
@@ -1052,7 +1054,7 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
1052
1054
  m.legacy = legacy
1053
1055
  elif m is RTDETRDecoder: # special case, channels arg must be passed in index 1
1054
1056
  args.insert(1, [ch[x] for x in f])
1055
- elif m is CBLinear:
1057
+ elif m in {CBLinear, TorchVision, Index}:
1056
1058
  c2 = args[0]
1057
1059
  c1 = ch[f]
1058
1060
  args = [c1, c2, *args[1:]]
@@ -184,12 +184,8 @@ class Inference:
184
184
  if __name__ == "__main__":
185
185
  import sys # Import the sys module for accessing command-line arguments
186
186
 
187
- model = None # Initialize the model variable as None
188
-
189
187
  # Check if a model name is provided as a command-line argument
190
188
  args = len(sys.argv)
191
- if args > 1:
192
- model = sys.argv[1] # Assign the first argument as the model name
193
-
189
+ model = sys.argv[1] if args > 1 else None # assign first argument as the model name
194
190
  # Create an instance of the Inference class and run inference
195
191
  Inference(model=model).inference()
@@ -73,11 +73,16 @@ def box_iou(box1, box2, eps=1e-7):
73
73
 
74
74
  def bbox_iou(box1, box2, xywh=True, GIoU=False, DIoU=False, CIoU=False, eps=1e-7):
75
75
  """
76
- Calculate Intersection over Union (IoU) of box1(1, 4) to box2(n, 4).
76
+ Calculates the Intersection over Union (IoU) between bounding boxes.
77
+
78
+ This function supports various shapes for `box1` and `box2` as long as the last dimension is 4.
79
+ For instance, you may pass tensors shaped like (4,), (N, 4), (B, N, 4), or (B, N, 1, 4).
80
+ Internally, the code will split the last dimension into (x, y, w, h) if `xywh=True`,
81
+ or (x1, y1, x2, y2) if `xywh=False`.
77
82
 
78
83
  Args:
79
- box1 (torch.Tensor): A tensor representing a single bounding box with shape (1, 4).
80
- box2 (torch.Tensor): A tensor representing n bounding boxes with shape (n, 4).
84
+ box1 (torch.Tensor): A tensor representing one or more bounding boxes, with the last dimension being 4.
85
+ box2 (torch.Tensor): A tensor representing one or more bounding boxes, with the last dimension being 4.
81
86
  xywh (bool, optional): If True, input boxes are in (x, y, w, h) format. If False, input boxes are in
82
87
  (x1, y1, x2, y2) format. Defaults to True.
83
88
  GIoU (bool, optional): If True, calculate Generalized IoU. Defaults to False.
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: ultralytics
3
- Version: 8.3.58
3
+ Version: 8.3.59
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=S399TdcZcymRJIYrKlXPiROWg_izHL3TGhHgW15kcrA,23210
9
9
  tests/test_solutions.py,sha256=O-GM6qBdew8BQmkpt8XLbyQJTcTdElz1yTBL1WOJsWw,4177
10
- ultralytics/__init__.py,sha256=ZhJx3IHkP37yabKPtuJYUZ3iqH6YnxsXi1_QQsaz1AQ,681
10
+ ultralytics/__init__.py,sha256=zoSKMR-l3pqiUG0erI17Tq0ch0AR6Q4y8hGTsiWGycU,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=MJ52wv8-rQHvD8ZBJ4RA31npqgCtUtFYEG4sQ2kciFc,39031
@@ -38,10 +38,11 @@ ultralytics/cfg/datasets/hand-keypoints.yaml,sha256=ux5UM32rh_QkjG_KpjY39Sud7KGo
38
38
  ultralytics/cfg/datasets/lvis.yaml,sha256=qA0_ELIbR7ECxIxBX1K4vGqBA6RAagCxs02ehx5SmaE,29692
39
39
  ultralytics/cfg/datasets/medical-pills.yaml,sha256=YCKnOXSfD-TdVv6QZ2lhRijMZ_OkTy2ExPxOuaYg_jM,819
40
40
  ultralytics/cfg/datasets/open-images-v7.yaml,sha256=gsN0JXLSdQglio024p6NEegNbX06kJUNuj0bh9oEi-U,12493
41
- ultralytics/cfg/datasets/package-seg.yaml,sha256=6iPpZOP0xgrTcO8DAZNPGFlJwrYn5bDgx-FpEnv2Ut8,833
41
+ ultralytics/cfg/datasets/package-seg.yaml,sha256=6RxepIhPPiV5Yt5_8_bT5ABpEeLYgFukUxTDVvTGfVg,835
42
42
  ultralytics/cfg/datasets/signature.yaml,sha256=qTOULZf0J9hS7ZXVd_sPJ8uoNVmbKnqZ6Kgm_EjmXpY,760
43
43
  ultralytics/cfg/datasets/tiger-pose.yaml,sha256=tU88xdKAoN2DFXDk2NMHV7y9bC2HGJCF0LvTVvCaCNE,896
44
44
  ultralytics/cfg/datasets/xView.yaml,sha256=rjQPRNk--jlYN9wcVTu1KbopgZIkWXhr_s1UkSdcERs,5217
45
+ ultralytics/cfg/models/11/yolo11-cls-resnet18.yaml,sha256=4f4HadNfSdGJh0jZSR8sIxUOiKhEH5ImzowE4aAUtKU,683
45
46
  ultralytics/cfg/models/11/yolo11-cls.yaml,sha256=2oBmesYUBsnatpvEhmIWJ1Ari96few1U9NkV6ZsP0Cs,1329
46
47
  ultralytics/cfg/models/11/yolo11-obb.yaml,sha256=N5ozTYay-L_F4ryRDFjX-v6mMZ9onCE1uHDEDWOZVLc,1936
47
48
  ultralytics/cfg/models/11/yolo11-pose.yaml,sha256=h5fsUXoxNqSfBMhtHyMDE0DqFZ5-DuRr-6SXhS2dEV4,2015
@@ -95,13 +96,13 @@ ultralytics/data/annotator.py,sha256=JNmS6uELlEABrU5ViVJiPnjt44v-Us7j39Bwoug_73Y
95
96
  ultralytics/data/augment.py,sha256=xE3fyPSCsgzz1vo1758HQA3YQhO4QZ2TqM0So0tE434,120479
96
97
  ultralytics/data/base.py,sha256=ZCIhAyFfxXVp5fVnYD8mwbksNALJTayBKIR5FKGV7ZM,15168
97
98
  ultralytics/data/build.py,sha256=AfMmz0sHIYmwry_90tEJFRk_kz0S3SolScVXqYHiT08,7261
98
- ultralytics/data/converter.py,sha256=rWTg5cLF7uTB9vaUOmNSUxRRkZldCsAZ21wOFAGMqzQ,24407
99
+ ultralytics/data/converter.py,sha256=Vsk5XPtpYnyrbmXcl2wmDCf56R8YSWHtBzLwgQcxDcA,24417
99
100
  ultralytics/data/dataset.py,sha256=6_6sHSjJYX7lVUzqBqVW_q_REXbjeoh6dHqAqH9krfA,23216
100
101
  ultralytics/data/loaders.py,sha256=k1Vq7Rxv6tpsRsYuMdZeI3_f2BciAaZwhDQU8iHhVJM,28506
101
102
  ultralytics/data/split_dota.py,sha256=FxsuBhClSZN4XHu8ETTiA2oP6yrjp49T5lbZaiI0fw4,10692
102
103
  ultralytics/data/utils.py,sha256=xCobqNksarqQsGqQZ-g5N9nSwaQwiaMAVB92s903RQA,33807
103
104
  ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
104
- ultralytics/engine/exporter.py,sha256=cBJ0pYNlL4BS913Pkq_M6jccPys1qeHleQgkrufWwQI,68866
105
+ ultralytics/engine/exporter.py,sha256=SpaBR3Ee3HgIfjfNijuwm9Btzl6D7ivGZliFA2pCo5Q,69081
105
106
  ultralytics/engine/model.py,sha256=3csd_Ml9M6CKxUKU7vRZadanNnJw96sNIx71qHVGdGQ,53082
106
107
  ultralytics/engine/predictor.py,sha256=o1RYMFH3_uVOMCIXXakpRYpNzoD-6Bdsxryt5fuBni0,17712
107
108
  ultralytics/engine/results.py,sha256=a1XFZRPwqgKDBOEAibHuT9nP2xefLiWVsMoBJbcr4iA,75058
@@ -172,11 +173,11 @@ ultralytics/models/yolo/world/train.py,sha256=gaDrAmLJpg9qDtmL5evA5HsV2yb4RTRSfk
172
173
  ultralytics/models/yolo/world/train_world.py,sha256=IsnCEVt6DcM9lUskCKmIN-M8MM79xLpwTRqRoAHUnZ4,4857
173
174
  ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
174
175
  ultralytics/nn/autobackend.py,sha256=7WyyipeaAqKCFUAA7_y2jIOz2e90GxHrD7c7ARe4ZJI,35556
175
- ultralytics/nn/tasks.py,sha256=pqRe1F1HOH8AjLZpFaZCGb5gSYsXH0eVnHITKDTFFhI,48527
176
- ultralytics/nn/modules/__init__.py,sha256=xhW2BennT9U_VaMXVpRu-bdLgp1BXt9L8mkIUBE3idU,2625
176
+ ultralytics/nn/tasks.py,sha256=O2yrgDZ8DzP9qv7FLSnW8LGTdfA4Lzrrb5LHHblx_pk,48577
177
+ ultralytics/nn/modules/__init__.py,sha256=F_QN7eWGBMiWSpmYpZ0Dk44MFW02UvDEEgR7FxjCHgA,2685
177
178
  ultralytics/nn/modules/activation.py,sha256=chhn469wnRHEs5BMGNBYXwPYZc_7-urspTT8fnBd-xA,895
178
- ultralytics/nn/modules/block.py,sha256=Rk9CT23Bpqpo3LYRuQePYML6HAvsM20p2QlFTCaYFH4,41851
179
- ultralytics/nn/modules/conv.py,sha256=DPLZCRno_ZOjsuajAXIq-GbJdOh2jp1WayRXfDEd8z8,12724
179
+ ultralytics/nn/modules/block.py,sha256=PJTortaTCAtIHR6magx3phL7fEoNfK5BLC7xICJRdQg,43919
180
+ ultralytics/nn/modules/conv.py,sha256=LH9P99whUUfa3O4O19enF0vfzTmPTnmlMnkf9JsurPE,13112
180
181
  ultralytics/nn/modules/head.py,sha256=yZdDr71pWm-vB18XrNkbX35o3q4o4mhzrfJz6yVh9m4,27934
181
182
  ultralytics/nn/modules/transformer.py,sha256=tGiK8NmPfswwW1rbF21r5ILUkkZQ6Nk4s8j16vFBmps,18069
182
183
  ultralytics/nn/modules/utils.py,sha256=a88cKl2wz1nMVSEBiajtvaCbDBQIkESWOKTZ_WAJy90,3195
@@ -192,7 +193,7 @@ ultralytics/solutions/region_counter.py,sha256=a-6VDi-Mw1hZrkhQy9OeZw_hXq0pvB4Oy
192
193
  ultralytics/solutions/security_alarm.py,sha256=OIOyQEaj8X7r4YGiuCVmWpBiq37h9zbQ5Mf4CB1G2DA,5671
193
194
  ultralytics/solutions/solutions.py,sha256=SOR4-K1S5LqoY2226oEJzeiJzGZUSSO0niF9PdEXPi4,7744
194
195
  ultralytics/solutions/speed_estimation.py,sha256=A10DmuZlGkoZUyfHhZWcDRjj1-9GXiDhEjyBbAzfaDs,4936
195
- ultralytics/solutions/streamlit_inference.py,sha256=UQFJ3NCOrqvx-didvux1HiD5EU1_PCdZhOazKxtsC-Q,9543
196
+ ultralytics/solutions/streamlit_inference.py,sha256=oHlrcQtEuP4WBJBeN7PST5RD8tB1T0lBbgLBVYF8S2w,9480
196
197
  ultralytics/solutions/trackzone.py,sha256=jsSuvW3ExoQl5JyUF-5ZLQMou8h4qbkCGGGP831cHSY,2952
197
198
  ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
198
199
  ultralytics/trackers/basetrack.py,sha256=kPOeAX2ihvANtQJk-zUsN0C7JjhlJbx0UhjaCFk_ovQ,4423
@@ -213,7 +214,7 @@ ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,8
213
214
  ultralytics/utils/files.py,sha256=uiXQSVABJRoI5ImnM6ndEBIFbECfksmWNEldBg8GnSo,8224
214
215
  ultralytics/utils/instance.py,sha256=FXL1Ihlbn2fNZG_IaJpXul9Sd4QDLwotCo2U84moSlA,16853
215
216
  ultralytics/utils/loss.py,sha256=_d2L4lIemaeAHrGHqf9q-KI7yTgHKCbIcYAF7Y-farI,34185
216
- ultralytics/utils/metrics.py,sha256=acnxUxseiyYfb1uAq2gcMOTslYEJOMOrpbbpPU_JhSA,53778
217
+ ultralytics/utils/metrics.py,sha256=5VV0D7Rw5Cq1dBqMTpn7kTP3kTD-QHo54lmgnrqe5C8,54147
217
218
  ultralytics/utils/ops.py,sha256=d5sLAvgqP36Pq_dMQE1DZFYhmIGUMrlrxh1czcuUfC4,33546
218
219
  ultralytics/utils/patches.py,sha256=J-iOwIRbfUs-inBZerhnXby5tUKjYcOIyvhLTS352JE,3270
219
220
  ultralytics/utils/plotting.py,sha256=SudFfq9KOfprtpXsurfWEOeQqVsU0K3aVvcOGFcNB4A,62959
@@ -232,9 +233,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=IbGQfEltamUKXJt93uSLQFn8c2rYh3DMTg
232
233
  ultralytics/utils/callbacks/raytune.py,sha256=Ck_yFzg7UZXiDWrLHaltjQybzVWSFDfzpdrx9ZYTRfI,700
233
234
  ultralytics/utils/callbacks/tensorboard.py,sha256=SHlE58Fb-sg-uZKtgy-ybIO3SAIfK55aj8kTYGA0Cyg,4167
234
235
  ultralytics/utils/callbacks/wb.py,sha256=sizfTa-xI9k2pnDSP_Q9pHZEFwcl__gSFM0AcneuRpY,7058
235
- ultralytics-8.3.58.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
236
- ultralytics-8.3.58.dist-info/METADATA,sha256=2qq-5M3VXiTJDob3uiOhMqNVqqJ9xxvpOy2Obo6oxxc,35286
237
- ultralytics-8.3.58.dist-info/WHEEL,sha256=A3WOREP4zgxI0fKrHUG8DC8013e3dK3n7a6HDbcEIwE,91
238
- ultralytics-8.3.58.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
239
- ultralytics-8.3.58.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
240
- ultralytics-8.3.58.dist-info/RECORD,,
236
+ ultralytics-8.3.59.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
237
+ ultralytics-8.3.59.dist-info/METADATA,sha256=Ijk0atnRbGX7jWs1qEgvPdo9h_zrS6hsoleSpGRm2HA,35286
238
+ ultralytics-8.3.59.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
239
+ ultralytics-8.3.59.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
240
+ ultralytics-8.3.59.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
241
+ ultralytics-8.3.59.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.7.0)
2
+ Generator: setuptools (75.8.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5