ultralytics 8.1.33__py3-none-any.whl → 8.1.35__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 +1 -1
- ultralytics/engine/exporter.py +1 -1
- ultralytics/engine/results.py +21 -11
- ultralytics/nn/modules/block.py +7 -21
- ultralytics/solutions/ai_gym.py +0 -8
- ultralytics/solutions/object_counter.py +1 -1
- ultralytics/utils/checks.py +2 -0
- ultralytics/utils/metrics.py +2 -2
- {ultralytics-8.1.33.dist-info → ultralytics-8.1.35.dist-info}/METADATA +1 -1
- {ultralytics-8.1.33.dist-info → ultralytics-8.1.35.dist-info}/RECORD +14 -14
- {ultralytics-8.1.33.dist-info → ultralytics-8.1.35.dist-info}/LICENSE +0 -0
- {ultralytics-8.1.33.dist-info → ultralytics-8.1.35.dist-info}/WHEEL +0 -0
- {ultralytics-8.1.33.dist-info → ultralytics-8.1.35.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.1.33.dist-info → ultralytics-8.1.35.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
ultralytics/engine/exporter.py
CHANGED
|
@@ -459,7 +459,7 @@ class Exporter:
|
|
|
459
459
|
# Generate calibration data for integer quantization
|
|
460
460
|
LOGGER.info(f"{prefix} collecting INT8 calibration images from 'data={self.args.data}'")
|
|
461
461
|
data = check_det_dataset(self.args.data)
|
|
462
|
-
dataset = YOLODataset(data["val"], data=data, imgsz=self.imgsz[0], augment=False)
|
|
462
|
+
dataset = YOLODataset(data["val"], data=data, task=self.model.task, imgsz=self.imgsz[0], augment=False)
|
|
463
463
|
n = len(dataset)
|
|
464
464
|
if n < 300:
|
|
465
465
|
LOGGER.warning(f"{prefix} WARNING ⚠️ >300 images recommended for INT8 calibration, found {n} images.")
|
ultralytics/engine/results.py
CHANGED
|
@@ -385,10 +385,10 @@ class Results(SimpleClass):
|
|
|
385
385
|
BGR=True,
|
|
386
386
|
)
|
|
387
387
|
|
|
388
|
-
def summary(self, normalize=False):
|
|
388
|
+
def summary(self, normalize=False, decimals=5):
|
|
389
389
|
"""Convert the results to a summarized format."""
|
|
390
390
|
if self.probs is not None:
|
|
391
|
-
LOGGER.warning("Warning: Classify
|
|
391
|
+
LOGGER.warning("Warning: Classify results do not support the `summary()` method yet.")
|
|
392
392
|
return
|
|
393
393
|
|
|
394
394
|
# Create list of detection dictionaries
|
|
@@ -396,28 +396,38 @@ class Results(SimpleClass):
|
|
|
396
396
|
data = self.boxes.data.cpu().tolist()
|
|
397
397
|
h, w = self.orig_shape if normalize else (1, 1)
|
|
398
398
|
for i, row in enumerate(data): # xyxy, track_id if tracking, conf, class_id
|
|
399
|
-
box = {
|
|
400
|
-
|
|
399
|
+
box = {
|
|
400
|
+
"x1": round(row[0] / w, decimals),
|
|
401
|
+
"y1": round(row[1] / h, decimals),
|
|
402
|
+
"x2": round(row[2] / w, decimals),
|
|
403
|
+
"y2": round(row[3] / h, decimals),
|
|
404
|
+
}
|
|
405
|
+
conf = round(row[-2], decimals)
|
|
401
406
|
class_id = int(row[-1])
|
|
402
|
-
|
|
403
|
-
result = {"name": name, "class": class_id, "confidence": conf, "box": box}
|
|
407
|
+
result = {"name": self.names[class_id], "class": class_id, "confidence": conf, "box": box}
|
|
404
408
|
if self.boxes.is_track:
|
|
405
409
|
result["track_id"] = int(row[-3]) # track ID
|
|
406
410
|
if self.masks:
|
|
407
|
-
|
|
408
|
-
|
|
411
|
+
result["segments"] = {
|
|
412
|
+
"x": (self.masks.xy[i][:, 0] / w).round(decimals).tolist(),
|
|
413
|
+
"y": (self.masks.xy[i][:, 1] / h).round(decimals).tolist(),
|
|
414
|
+
}
|
|
409
415
|
if self.keypoints is not None:
|
|
410
416
|
x, y, visible = self.keypoints[i].data[0].cpu().unbind(dim=1) # torch Tensor
|
|
411
|
-
result["keypoints"] = {
|
|
417
|
+
result["keypoints"] = {
|
|
418
|
+
"x": (x / w).numpy().round(decimals).tolist(), # decimals named argument required
|
|
419
|
+
"y": (y / h).numpy().round(decimals).tolist(),
|
|
420
|
+
"visible": visible.numpy().round(decimals).tolist(),
|
|
421
|
+
}
|
|
412
422
|
results.append(result)
|
|
413
423
|
|
|
414
424
|
return results
|
|
415
425
|
|
|
416
|
-
def tojson(self, normalize=False):
|
|
426
|
+
def tojson(self, normalize=False, decimals=5):
|
|
417
427
|
"""Convert the results to JSON format."""
|
|
418
428
|
import json
|
|
419
429
|
|
|
420
|
-
return json.dumps(self.summary(normalize=normalize), indent=2)
|
|
430
|
+
return json.dumps(self.summary(normalize=normalize, decimals=decimals), indent=2)
|
|
421
431
|
|
|
422
432
|
|
|
423
433
|
class Boxes(BaseTensor):
|
ultralytics/nn/modules/block.py
CHANGED
|
@@ -171,10 +171,9 @@ class SPPF(nn.Module):
|
|
|
171
171
|
|
|
172
172
|
def forward(self, x):
|
|
173
173
|
"""Forward pass through Ghost Convolution block."""
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
return self.cv2(torch.cat((x, y1, y2, self.m(y2)), 1))
|
|
174
|
+
y = [self.cv1(x)]
|
|
175
|
+
y.extend(self.m(y[-1]) for _ in range(3))
|
|
176
|
+
return self.cv2(torch.cat(y, 1))
|
|
178
177
|
|
|
179
178
|
|
|
180
179
|
class C1(nn.Module):
|
|
@@ -555,40 +554,27 @@ class BNContrastiveHead(nn.Module):
|
|
|
555
554
|
return x * self.logit_scale.exp() + self.bias
|
|
556
555
|
|
|
557
556
|
|
|
558
|
-
class RepBottleneck(
|
|
557
|
+
class RepBottleneck(Bottleneck):
|
|
559
558
|
"""Rep bottleneck."""
|
|
560
559
|
|
|
561
560
|
def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5):
|
|
562
561
|
"""Initializes a RepBottleneck module with customizable in/out channels, shortcut option, groups and expansion
|
|
563
562
|
ratio.
|
|
564
563
|
"""
|
|
565
|
-
super().__init__()
|
|
564
|
+
super().__init__(c1, c2, shortcut, g, k, e)
|
|
566
565
|
c_ = int(c2 * e) # hidden channels
|
|
567
566
|
self.cv1 = RepConv(c1, c_, k[0], 1)
|
|
568
|
-
self.cv2 = Conv(c_, c2, k[1], 1, g=g)
|
|
569
|
-
self.add = shortcut and c1 == c2
|
|
570
|
-
|
|
571
|
-
def forward(self, x):
|
|
572
|
-
"""Forward pass through RepBottleneck layer."""
|
|
573
|
-
return x + self.cv2(self.cv1(x)) if self.add else self.cv2(self.cv1(x))
|
|
574
567
|
|
|
575
568
|
|
|
576
|
-
class RepCSP(
|
|
569
|
+
class RepCSP(C3):
|
|
577
570
|
"""Rep CSP Bottleneck with 3 convolutions."""
|
|
578
571
|
|
|
579
572
|
def __init__(self, c1, c2, n=1, shortcut=True, g=1, e=0.5):
|
|
580
573
|
"""Initializes RepCSP layer with given channels, repetitions, shortcut, groups and expansion ratio."""
|
|
581
|
-
super().__init__()
|
|
574
|
+
super().__init__(c1, c2, n, shortcut, g, e)
|
|
582
575
|
c_ = int(c2 * e) # hidden channels
|
|
583
|
-
self.cv1 = Conv(c1, c_, 1, 1)
|
|
584
|
-
self.cv2 = Conv(c1, c_, 1, 1)
|
|
585
|
-
self.cv3 = Conv(2 * c_, c2, 1) # optional act=FReLU(c2)
|
|
586
576
|
self.m = nn.Sequential(*(RepBottleneck(c_, c_, shortcut, g, e=1.0) for _ in range(n)))
|
|
587
577
|
|
|
588
|
-
def forward(self, x):
|
|
589
|
-
"""Forward pass through RepCSP layer."""
|
|
590
|
-
return self.cv3(torch.cat((self.m(self.cv1(x)), self.cv2(x)), 1))
|
|
591
|
-
|
|
592
578
|
|
|
593
579
|
class RepNCSPELAN4(nn.Module):
|
|
594
580
|
"""CSP-ELAN."""
|
ultralytics/solutions/ai_gym.py
CHANGED
|
@@ -80,14 +80,6 @@ class AIGym:
|
|
|
80
80
|
self.keypoints = results[0].keypoints.data
|
|
81
81
|
self.annotator = Annotator(im0, line_width=2)
|
|
82
82
|
|
|
83
|
-
num_keypoints = len(results[0])
|
|
84
|
-
|
|
85
|
-
# Resize self.angle, self.count, and self.stage if the number of keypoints has changed
|
|
86
|
-
if len(self.angle) != num_keypoints:
|
|
87
|
-
self.angle = [0] * num_keypoints
|
|
88
|
-
self.count = [0] * num_keypoints
|
|
89
|
-
self.stage = ["-" for _ in range(num_keypoints)]
|
|
90
|
-
|
|
91
83
|
for ind, k in enumerate(reversed(self.keypoints)):
|
|
92
84
|
if self.pose_type in ["pushup", "pullup"]:
|
|
93
85
|
self.angle[ind] = self.annotator.estimate_pose_angle(
|
|
@@ -171,7 +171,7 @@ class ObjectCounter:
|
|
|
171
171
|
# Extract tracks
|
|
172
172
|
for box, track_id, cls in zip(boxes, track_ids, clss):
|
|
173
173
|
# Draw bounding box
|
|
174
|
-
self.annotator.box_label(box, label=f"{track_id}:{self.names[cls]}", color=colors(int(
|
|
174
|
+
self.annotator.box_label(box, label=f"{track_id}:{self.names[cls]}", color=colors(int(track_id), True))
|
|
175
175
|
|
|
176
176
|
# Draw Tracks
|
|
177
177
|
track_line = self.track_history[track_id]
|
ultralytics/utils/checks.py
CHANGED
|
@@ -142,6 +142,8 @@ def check_imgsz(imgsz, stride=32, min_dim=1, max_dim=2, floor=0):
|
|
|
142
142
|
imgsz = [imgsz]
|
|
143
143
|
elif isinstance(imgsz, (list, tuple)):
|
|
144
144
|
imgsz = list(imgsz)
|
|
145
|
+
elif isinstance(imgsz, str): # i.e. '640' or '[640,640]'
|
|
146
|
+
imgsz = [int(imgsz)] if imgsz.isnumeric() else eval(imgsz)
|
|
145
147
|
else:
|
|
146
148
|
raise TypeError(
|
|
147
149
|
f"'imgsz={imgsz}' is of invalid type {type(imgsz).__name__}. "
|
ultralytics/utils/metrics.py
CHANGED
|
@@ -167,7 +167,7 @@ def kpt_iou(kpt1, kpt2, area, sigma, eps=1e-7):
|
|
|
167
167
|
d = (kpt1[:, None, :, 0] - kpt2[..., 0]).pow(2) + (kpt1[:, None, :, 1] - kpt2[..., 1]).pow(2) # (N, M, 17)
|
|
168
168
|
sigma = torch.tensor(sigma, device=kpt1.device, dtype=kpt1.dtype) # (17, )
|
|
169
169
|
kpt_mask = kpt1[..., 2] != 0 # (N, 17)
|
|
170
|
-
e = d / (2 * sigma).pow(2)
|
|
170
|
+
e = d / ((2 * sigma).pow(2) * (area[:, None, None] + eps) * 2) # from cocoeval
|
|
171
171
|
# e = d / ((area[None, :, None] + eps) * sigma) ** 2 / 2 # from formula
|
|
172
172
|
return ((-e).exp() * kpt_mask[:, None]).sum(-1) / (kpt_mask.sum(-1)[:, None] + eps)
|
|
173
173
|
|
|
@@ -402,7 +402,7 @@ class ConfusionMatrix:
|
|
|
402
402
|
|
|
403
403
|
fig, ax = plt.subplots(1, 1, figsize=(12, 9), tight_layout=True)
|
|
404
404
|
nc, nn = self.nc, len(names) # number of classes, names
|
|
405
|
-
sn.
|
|
405
|
+
sn.set_theme(font_scale=1.0 if nc < 50 else 0.8) # for label size
|
|
406
406
|
labels = (0 < nn < 99) and (nn == nc) # apply names to ticklabels
|
|
407
407
|
ticklabels = (list(names) + ["background"]) if labels else "auto"
|
|
408
408
|
with warnings.catch_warnings():
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.1.
|
|
3
|
+
Version: 8.1.35
|
|
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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ultralytics/__init__.py,sha256
|
|
1
|
+
ultralytics/__init__.py,sha256=-tV3T5buzggdIE9J0ptwDT85T4ju4s8OZPWMs622CdY,625
|
|
2
2
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
|
3
3
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
|
4
4
|
ultralytics/cfg/__init__.py,sha256=4DFeQcRmsOUUJtP49MezHhWKlE52mUSHI7bKFglOq4k,21273
|
|
@@ -75,10 +75,10 @@ ultralytics/data/explorer/utils.py,sha256=a6ugY8rKpFM8dIRcUwRyjRkRJ-zXEwe-NiJr6C
|
|
|
75
75
|
ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
76
76
|
ultralytics/data/explorer/gui/dash.py,sha256=a2s8oJKI8kqnWEcIyqCCzvIyvM_uZmfMaxrOdwmiq7k,10044
|
|
77
77
|
ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
78
|
-
ultralytics/engine/exporter.py,sha256=
|
|
78
|
+
ultralytics/engine/exporter.py,sha256=l7CJdjLDPbAhAXPO7VLHQ9J0DZDxB1b-EYF_wfsbPXo,53904
|
|
79
79
|
ultralytics/engine/model.py,sha256=uemH3-CTwKTMbbiJnIqtReCNy-5TEK9VD737v3VIqxg,39435
|
|
80
80
|
ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
|
|
81
|
-
ultralytics/engine/results.py,sha256=
|
|
81
|
+
ultralytics/engine/results.py,sha256=D4wZ9OsmBrEQWCkfOeUn_oagXLqu3SxRZYlpYkDDLH8,30667
|
|
82
82
|
ultralytics/engine/trainer.py,sha256=C04cEN9v-kvR2dIIjgAN8dBAx8XSTChlQkDxAxfwTlU,34527
|
|
83
83
|
ultralytics/engine/tuner.py,sha256=zttHrQkvXuUVTB7jmM4Z85GgIsQ2hjpW9YrMccrQ4wo,11829
|
|
84
84
|
ultralytics/engine/validator.py,sha256=rcmJSGrsAfj-ryQktv6-fe0hAT7Z8CLNhUUUf0VsPYI,14645
|
|
@@ -142,16 +142,16 @@ ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,58
|
|
|
142
142
|
ultralytics/nn/autobackend.py,sha256=Z9sDchChAqJ-sSQlUNwoGHTFxFRay1-i76MNUz0qZU8,28678
|
|
143
143
|
ultralytics/nn/tasks.py,sha256=k6cl1H1hWtQXLxO_s5D6fa_DYyFzIekAMigh3lD36_A,42894
|
|
144
144
|
ultralytics/nn/modules/__init__.py,sha256=Ga3MDpwX6DeI7VSH8joti5uleP4mgkQGolbe8RLZ2T8,2326
|
|
145
|
-
ultralytics/nn/modules/block.py,sha256=
|
|
145
|
+
ultralytics/nn/modules/block.py,sha256=KTv0HG4mTqnwVxfnu4aKBcGpS5c_gLP-wlz3iAIfIrk,25075
|
|
146
146
|
ultralytics/nn/modules/conv.py,sha256=ndUYNL2f9DK41y1vVbtEusMByXy-LMMsBKlcWjRQ9Z8,12722
|
|
147
147
|
ultralytics/nn/modules/head.py,sha256=LonV2b7TrLx-zKhHQ2fCpKg7BfC-tUBtPlS5NNcfT_w,21728
|
|
148
148
|
ultralytics/nn/modules/transformer.py,sha256=AxD9uURpCl-EqvXe3DiG6JW-pBzB16G-AahLdZ7yayo,17909
|
|
149
149
|
ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQjhU,3196
|
|
150
150
|
ultralytics/solutions/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
151
|
-
ultralytics/solutions/ai_gym.py,sha256=
|
|
151
|
+
ultralytics/solutions/ai_gym.py,sha256=LqOg7XKxuDlBAXFhSLQAIVTMxsQxoj7BumiHeVrjLMc,5696
|
|
152
152
|
ultralytics/solutions/distance_calculation.py,sha256=N1QB5uDG_6sp8jD5uSwp_NTPmyP4UCqJm9G2lNrgpr8,6334
|
|
153
153
|
ultralytics/solutions/heatmap.py,sha256=nOoAcXkJd1bhw8SNbqVTweVwIKrgdrZeUhMrvkNPhes,10928
|
|
154
|
-
ultralytics/solutions/object_counter.py,sha256=
|
|
154
|
+
ultralytics/solutions/object_counter.py,sha256=GGerPvjZ3Bzd53rUTWKwZ-GB8UX9DlW_Rki1PMUwVEc,11267
|
|
155
155
|
ultralytics/solutions/speed_estimation.py,sha256=lvaU-F8f3V4KFVKFaNS7isIdYtMSFjh_zF9gl0Mals8,6714
|
|
156
156
|
ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
|
|
157
157
|
ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
|
|
@@ -165,14 +165,14 @@ ultralytics/trackers/utils/matching.py,sha256=c_pthBfu9sWeMVYe-dSecdWcQxUey-mQT2
|
|
|
165
165
|
ultralytics/utils/__init__.py,sha256=SN7wyoJP8zaDzqUoDIHTyV3tqprIgCTfT738kge0EPI,37500
|
|
166
166
|
ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
|
|
167
167
|
ultralytics/utils/benchmarks.py,sha256=cj_sztcI-hzfvRX8vzfXo4wmQe2CuQUcDHBO9THBbco,18285
|
|
168
|
-
ultralytics/utils/checks.py,sha256=
|
|
168
|
+
ultralytics/utils/checks.py,sha256=nzWNEfNci6rKC9x9ZYXRPJtK2vvvI7YKKZHROMUSsb0,27940
|
|
169
169
|
ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
|
|
170
170
|
ultralytics/utils/downloads.py,sha256=IVuwBodagj7GOGnzy868TBq4TC8O2d9TlV94_Uzi_KA,21496
|
|
171
171
|
ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
|
|
172
172
|
ultralytics/utils/files.py,sha256=TVfY0Wi5IsUc4YdsDzC0dAg-jAP5exYvwqB3VmXhDLY,6761
|
|
173
173
|
ultralytics/utils/instance.py,sha256=fPClvPPtTk8VeXWiRv90DrFk1j1lTUKdYJtpZKUDDtA,15575
|
|
174
174
|
ultralytics/utils/loss.py,sha256=po6fmQzz1JxfGpte6hHkwOC7ECynsceqtgbUWLXVfxw,32700
|
|
175
|
-
ultralytics/utils/metrics.py,sha256=
|
|
175
|
+
ultralytics/utils/metrics.py,sha256=eb_3cTHyTk65nJRIb30Mr-9Q1RZ2OdKDusFPpPr4sHM,53473
|
|
176
176
|
ultralytics/utils/ops.py,sha256=GFe_tx8MVKT56xelbAuQjiJ28ohpzARpD6BzGyJ1yMk,33264
|
|
177
177
|
ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
|
|
178
178
|
ultralytics/utils/plotting.py,sha256=YVJvEDozm1vm_Yf39jLPQ24Qst_f_lzEm-NeDjMElfQ,44705
|
|
@@ -191,9 +191,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyz
|
|
|
191
191
|
ultralytics/utils/callbacks/raytune.py,sha256=6OgGNuC35F29lw8Dl_d0lue4-iBR6dqrBVQnIRQDx4E,632
|
|
192
192
|
ultralytics/utils/callbacks/tensorboard.py,sha256=hRmWjbqdA4RNaLuSZznuDcpOBW-_-_Ga0u-B8UU-7ZI,4134
|
|
193
193
|
ultralytics/utils/callbacks/wb.py,sha256=4QI81nHdzgwhXHlmTiRxLqunvkKakLXYUhHTUY1ZeHA,6635
|
|
194
|
-
ultralytics-8.1.
|
|
195
|
-
ultralytics-8.1.
|
|
196
|
-
ultralytics-8.1.
|
|
197
|
-
ultralytics-8.1.
|
|
198
|
-
ultralytics-8.1.
|
|
199
|
-
ultralytics-8.1.
|
|
194
|
+
ultralytics-8.1.35.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
195
|
+
ultralytics-8.1.35.dist-info/METADATA,sha256=mmB9YldpAODA-Z-djJN22odastPBfiRw-d-GNuYQ2oU,40330
|
|
196
|
+
ultralytics-8.1.35.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
197
|
+
ultralytics-8.1.35.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
198
|
+
ultralytics-8.1.35.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
199
|
+
ultralytics-8.1.35.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|