ultralytics 8.1.41__py3-none-any.whl → 8.1.43__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/cfg/models/v9/yolov9c-seg.yaml +38 -0
- ultralytics/cfg/models/v9/yolov9c.yaml +3 -1
- ultralytics/cfg/models/v9/yolov9e-seg.yaml +62 -0
- ultralytics/cfg/models/v9/yolov9e.yaml +3 -1
- ultralytics/data/augment.py +12 -9
- ultralytics/data/dataset.py +147 -142
- ultralytics/data/explorer/explorer.py +4 -6
- ultralytics/data/explorer/gui/dash.py +3 -3
- ultralytics/data/explorer/utils.py +3 -2
- ultralytics/engine/exporter.py +3 -2
- ultralytics/engine/trainer.py +11 -10
- ultralytics/models/fastsam/prompt.py +4 -1
- ultralytics/models/sam/predict.py +4 -1
- ultralytics/models/yolo/classify/train.py +2 -1
- ultralytics/solutions/heatmap.py +14 -27
- ultralytics/solutions/object_counter.py +12 -23
- ultralytics/solutions/queue_management.py +187 -0
- ultralytics/utils/__init__.py +22 -14
- ultralytics/utils/benchmarks.py +1 -2
- ultralytics/utils/callbacks/clearml.py +4 -3
- ultralytics/utils/callbacks/wb.py +5 -5
- ultralytics/utils/checks.py +6 -9
- ultralytics/utils/metrics.py +3 -3
- ultralytics/utils/ops.py +1 -1
- ultralytics/utils/plotting.py +96 -37
- ultralytics/utils/torch_utils.py +15 -7
- {ultralytics-8.1.41.dist-info → ultralytics-8.1.43.dist-info}/METADATA +2 -1
- {ultralytics-8.1.41.dist-info → ultralytics-8.1.43.dist-info}/RECORD +33 -30
- {ultralytics-8.1.41.dist-info → ultralytics-8.1.43.dist-info}/LICENSE +0 -0
- {ultralytics-8.1.41.dist-info → ultralytics-8.1.43.dist-info}/WHEEL +0 -0
- {ultralytics-8.1.41.dist-info → ultralytics-8.1.43.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.1.41.dist-info → ultralytics-8.1.43.dist-info}/top_level.txt +0 -0
ultralytics/utils/checks.py
CHANGED
|
@@ -18,15 +18,16 @@ import cv2
|
|
|
18
18
|
import numpy as np
|
|
19
19
|
import requests
|
|
20
20
|
import torch
|
|
21
|
-
from matplotlib import font_manager
|
|
22
21
|
|
|
23
22
|
from ultralytics.utils import (
|
|
24
23
|
ASSETS,
|
|
25
24
|
AUTOINSTALL,
|
|
26
25
|
LINUX,
|
|
27
26
|
LOGGER,
|
|
27
|
+
PYTHON_VERSION,
|
|
28
28
|
ONLINE,
|
|
29
29
|
ROOT,
|
|
30
|
+
TORCHVISION_VERSION,
|
|
30
31
|
USER_CONFIG_DIR,
|
|
31
32
|
Retry,
|
|
32
33
|
SimpleNamespace,
|
|
@@ -41,13 +42,10 @@ from ultralytics.utils import (
|
|
|
41
42
|
is_github_action_running,
|
|
42
43
|
is_jupyter,
|
|
43
44
|
is_kaggle,
|
|
44
|
-
is_online,
|
|
45
45
|
is_pip_package,
|
|
46
46
|
url2file,
|
|
47
47
|
)
|
|
48
48
|
|
|
49
|
-
PYTHON_VERSION = platform.python_version()
|
|
50
|
-
|
|
51
49
|
|
|
52
50
|
def parse_requirements(file_path=ROOT.parent / "requirements.txt", package=""):
|
|
53
51
|
"""
|
|
@@ -304,9 +302,10 @@ def check_font(font="Arial.ttf"):
|
|
|
304
302
|
Returns:
|
|
305
303
|
file (Path): Resolved font file path.
|
|
306
304
|
"""
|
|
307
|
-
|
|
305
|
+
from matplotlib import font_manager
|
|
308
306
|
|
|
309
307
|
# Check USER_CONFIG_DIR
|
|
308
|
+
name = Path(font).name
|
|
310
309
|
file = USER_CONFIG_DIR / name
|
|
311
310
|
if file.exists():
|
|
312
311
|
return file
|
|
@@ -390,7 +389,7 @@ def check_requirements(requirements=ROOT.parent / "requirements.txt", exclude=()
|
|
|
390
389
|
LOGGER.info(f"{prefix} Ultralytics requirement{'s' * (n > 1)} {pkgs} not found, attempting AutoUpdate...")
|
|
391
390
|
try:
|
|
392
391
|
t = time.time()
|
|
393
|
-
assert
|
|
392
|
+
assert ONLINE, "AutoUpdate skipped (offline)"
|
|
394
393
|
with Retry(times=2, delay=1): # run up to 2 times with 1-second retry delay
|
|
395
394
|
LOGGER.info(subprocess.check_output(f"pip install --no-cache {s} {cmds}", shell=True).decode())
|
|
396
395
|
dt = time.time() - t
|
|
@@ -419,14 +418,12 @@ def check_torchvision():
|
|
|
419
418
|
Torchvision versions.
|
|
420
419
|
"""
|
|
421
420
|
|
|
422
|
-
import torchvision
|
|
423
|
-
|
|
424
421
|
# Compatibility table
|
|
425
422
|
compatibility_table = {"2.0": ["0.15"], "1.13": ["0.14"], "1.12": ["0.13"]}
|
|
426
423
|
|
|
427
424
|
# Extract only the major and minor versions
|
|
428
425
|
v_torch = ".".join(torch.__version__.split("+")[0].split(".")[:2])
|
|
429
|
-
v_torchvision = ".".join(
|
|
426
|
+
v_torchvision = ".".join(TORCHVISION_VERSION.split("+")[0].split(".")[:2])
|
|
430
427
|
|
|
431
428
|
if v_torch in compatibility_table:
|
|
432
429
|
compatible_versions = compatibility_table[v_torch]
|
ultralytics/utils/metrics.py
CHANGED
|
@@ -395,19 +395,19 @@ class ConfusionMatrix:
|
|
|
395
395
|
names (tuple): Names of classes, used as labels on the plot.
|
|
396
396
|
on_plot (func): An optional callback to pass plots path and data when they are rendered.
|
|
397
397
|
"""
|
|
398
|
-
import seaborn
|
|
398
|
+
import seaborn # scope for faster 'import ultralytics'
|
|
399
399
|
|
|
400
400
|
array = self.matrix / ((self.matrix.sum(0).reshape(1, -1) + 1e-9) if normalize else 1) # normalize columns
|
|
401
401
|
array[array < 0.005] = np.nan # don't annotate (would appear as 0.00)
|
|
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
|
-
|
|
405
|
+
seaborn.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():
|
|
409
409
|
warnings.simplefilter("ignore") # suppress empty matrix RuntimeWarning: All-NaN slice encountered
|
|
410
|
-
|
|
410
|
+
seaborn.heatmap(
|
|
411
411
|
array,
|
|
412
412
|
ax=ax,
|
|
413
413
|
annot=nc < 30,
|
ultralytics/utils/ops.py
CHANGED
|
@@ -9,7 +9,6 @@ import cv2
|
|
|
9
9
|
import numpy as np
|
|
10
10
|
import torch
|
|
11
11
|
import torch.nn.functional as F
|
|
12
|
-
import torchvision
|
|
13
12
|
|
|
14
13
|
from ultralytics.utils import LOGGER
|
|
15
14
|
from ultralytics.utils.metrics import batch_probiou
|
|
@@ -206,6 +205,7 @@ def non_max_suppression(
|
|
|
206
205
|
shape (num_boxes, 6 + num_masks) containing the kept boxes, with columns
|
|
207
206
|
(x1, y1, x2, y2, confidence, class, mask1, mask2, ...).
|
|
208
207
|
"""
|
|
208
|
+
import torchvision # scope for faster 'import ultralytics'
|
|
209
209
|
|
|
210
210
|
# Checks
|
|
211
211
|
assert 0 <= conf_thres <= 1, f"Invalid Confidence threshold {conf_thres}, valid values are between 0.0 and 1.0"
|
ultralytics/utils/plotting.py
CHANGED
|
@@ -339,6 +339,21 @@ class Annotator:
|
|
|
339
339
|
"""Save the annotated image to 'filename'."""
|
|
340
340
|
cv2.imwrite(filename, np.asarray(self.im))
|
|
341
341
|
|
|
342
|
+
def get_bbox_dimension(self, bbox=None):
|
|
343
|
+
"""
|
|
344
|
+
Calculate the area of a bounding box.
|
|
345
|
+
|
|
346
|
+
Args:
|
|
347
|
+
bbox (tuple): Bounding box coordinates in the format (x_min, y_min, x_max, y_max).
|
|
348
|
+
|
|
349
|
+
Returns:
|
|
350
|
+
angle (degree): Degree value of angle between three points
|
|
351
|
+
"""
|
|
352
|
+
x_min, y_min, x_max, y_max = bbox
|
|
353
|
+
width = x_max - x_min
|
|
354
|
+
height = y_max - y_min
|
|
355
|
+
return width, height, width * height
|
|
356
|
+
|
|
342
357
|
def draw_region(self, reg_pts=None, color=(0, 255, 0), thickness=5):
|
|
343
358
|
"""
|
|
344
359
|
Draw region line.
|
|
@@ -363,49 +378,97 @@ class Annotator:
|
|
|
363
378
|
cv2.polylines(self.im, [points], isClosed=False, color=color, thickness=track_thickness)
|
|
364
379
|
cv2.circle(self.im, (int(track[-1][0]), int(track[-1][1])), track_thickness * 2, color, -1)
|
|
365
380
|
|
|
366
|
-
def
|
|
367
|
-
|
|
368
|
-
|
|
381
|
+
def queue_counts_display(self, label, points=None, region_color=(255, 255, 255), txt_color=(0, 0, 0), fontsize=0.7):
|
|
382
|
+
"""
|
|
383
|
+
Displays queue counts on an image centered at the points with customizable font size and colors.
|
|
384
|
+
|
|
385
|
+
Args:
|
|
386
|
+
label (str): queue counts label
|
|
387
|
+
points (tuple): region points for center point calculation to display text
|
|
388
|
+
region_color (RGB): queue region color
|
|
389
|
+
txt_color (RGB): text display color
|
|
390
|
+
fontsize (float): text fontsize
|
|
391
|
+
"""
|
|
392
|
+
x_values = [point[0] for point in points]
|
|
393
|
+
y_values = [point[1] for point in points]
|
|
394
|
+
center_x = sum(x_values) // len(points)
|
|
395
|
+
center_y = sum(y_values) // len(points)
|
|
396
|
+
|
|
397
|
+
text_size = cv2.getTextSize(label, 0, fontScale=fontsize, thickness=self.tf)[0]
|
|
398
|
+
text_width = text_size[0]
|
|
399
|
+
text_height = text_size[1]
|
|
400
|
+
|
|
401
|
+
rect_width = text_width + 20
|
|
402
|
+
rect_height = text_height + 20
|
|
403
|
+
rect_top_left = (center_x - rect_width // 2, center_y - rect_height // 2)
|
|
404
|
+
rect_bottom_right = (center_x + rect_width // 2, center_y + rect_height // 2)
|
|
405
|
+
cv2.rectangle(self.im, rect_top_left, rect_bottom_right, region_color, -1)
|
|
406
|
+
|
|
407
|
+
text_x = center_x - text_width // 2
|
|
408
|
+
text_y = center_y + text_height // 2
|
|
409
|
+
|
|
410
|
+
# Draw text
|
|
411
|
+
cv2.putText(
|
|
412
|
+
self.im,
|
|
413
|
+
label,
|
|
414
|
+
(text_x, text_y),
|
|
415
|
+
0,
|
|
416
|
+
fontScale=fontsize,
|
|
417
|
+
color=txt_color,
|
|
418
|
+
thickness=self.tf,
|
|
419
|
+
lineType=cv2.LINE_AA,
|
|
420
|
+
)
|
|
421
|
+
|
|
422
|
+
def display_counts(self, counts=None, count_bg_color=(0, 0, 0), count_txt_color=(255, 255, 255)):
|
|
369
423
|
"""
|
|
370
|
-
Display counts on im0.
|
|
424
|
+
Display counts on im0 with text background and border.
|
|
371
425
|
|
|
372
426
|
Args:
|
|
373
427
|
counts (str): objects count data
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
line_color (RGB Color): counts highlighter color
|
|
377
|
-
txt_color (RGB Color): counts display color
|
|
378
|
-
classwise_txtgap (int): Gap between each class count data
|
|
428
|
+
count_bg_color (RGB Color): counts highlighter color
|
|
429
|
+
count_txt_color (RGB Color): counts display color
|
|
379
430
|
"""
|
|
380
431
|
|
|
381
|
-
tl = tf or round(0.002 * (self.im.shape[0] + self.im.shape[1]) / 2) + 1
|
|
432
|
+
tl = self.tf or round(0.002 * (self.im.shape[0] + self.im.shape[1]) / 2) + 1
|
|
382
433
|
tf = max(tl - 1, 1)
|
|
383
434
|
|
|
384
|
-
t_sizes = [cv2.getTextSize(str(count), 0, fontScale=
|
|
435
|
+
t_sizes = [cv2.getTextSize(str(count), 0, fontScale=self.sf, thickness=self.tf)[0] for count in counts]
|
|
385
436
|
|
|
386
437
|
max_text_width = max([size[0] for size in t_sizes])
|
|
387
438
|
max_text_height = max([size[1] for size in t_sizes])
|
|
388
439
|
|
|
389
|
-
text_x = self.im.shape[1] -
|
|
390
|
-
text_y =
|
|
440
|
+
text_x = self.im.shape[1] - int(self.im.shape[1] * 0.025 + max_text_width)
|
|
441
|
+
text_y = int(self.im.shape[0] * 0.025)
|
|
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
|
|
391
445
|
|
|
392
446
|
for i, count in enumerate(counts):
|
|
393
447
|
text_x_pos = text_x
|
|
394
|
-
text_y_pos = text_y + i *
|
|
448
|
+
text_y_pos = text_y + i * dynamic_gap # Adjust vertical position with dynamic gap
|
|
449
|
+
|
|
450
|
+
# Draw the border
|
|
451
|
+
cv2.rectangle(
|
|
452
|
+
self.im,
|
|
453
|
+
(text_x_pos - (10 * tf), text_y_pos - (10 * tf)),
|
|
454
|
+
(text_x_pos + max_text_width + (10 * tf), text_y_pos + max_text_height + (10 * tf)),
|
|
455
|
+
count_bg_color,
|
|
456
|
+
-1,
|
|
457
|
+
)
|
|
395
458
|
|
|
459
|
+
# Draw the count text
|
|
396
460
|
cv2.putText(
|
|
397
461
|
self.im,
|
|
398
462
|
str(count),
|
|
399
|
-
(text_x_pos, text_y_pos),
|
|
400
|
-
|
|
401
|
-
fontScale=
|
|
402
|
-
color=
|
|
403
|
-
thickness=tf,
|
|
463
|
+
(text_x_pos, text_y_pos + max_text_height),
|
|
464
|
+
0,
|
|
465
|
+
fontScale=self.sf,
|
|
466
|
+
color=count_txt_color,
|
|
467
|
+
thickness=self.tf,
|
|
404
468
|
lineType=cv2.LINE_AA,
|
|
405
469
|
)
|
|
406
470
|
|
|
407
|
-
|
|
408
|
-
cv2.line(self.im, (text_x_pos, line_y_pos), (text_x_pos + max_text_width, line_y_pos), line_color, tf)
|
|
471
|
+
text_y_pos += tf * max_text_height
|
|
409
472
|
|
|
410
473
|
@staticmethod
|
|
411
474
|
def estimate_pose_angle(a, b, c):
|
|
@@ -556,30 +619,26 @@ class Annotator:
|
|
|
556
619
|
line_color (RGB): Distance line color.
|
|
557
620
|
centroid_color (RGB): Bounding box centroid color.
|
|
558
621
|
"""
|
|
559
|
-
(text_width_m, text_height_m), _ = cv2.getTextSize(
|
|
560
|
-
f"Distance M: {distance_m:.2f}m", cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2
|
|
561
|
-
)
|
|
622
|
+
(text_width_m, text_height_m), _ = cv2.getTextSize(f"Distance M: {distance_m:.2f}m", 0, 0.8, 2)
|
|
562
623
|
cv2.rectangle(self.im, (15, 25), (15 + text_width_m + 10, 25 + text_height_m + 20), (255, 255, 255), -1)
|
|
563
624
|
cv2.putText(
|
|
564
625
|
self.im,
|
|
565
626
|
f"Distance M: {distance_m:.2f}m",
|
|
566
627
|
(20, 50),
|
|
567
|
-
|
|
628
|
+
0,
|
|
568
629
|
0.8,
|
|
569
630
|
(0, 0, 0),
|
|
570
631
|
2,
|
|
571
632
|
cv2.LINE_AA,
|
|
572
633
|
)
|
|
573
634
|
|
|
574
|
-
(text_width_mm, text_height_mm), _ = cv2.getTextSize(
|
|
575
|
-
f"Distance MM: {distance_mm:.2f}mm", cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2
|
|
576
|
-
)
|
|
635
|
+
(text_width_mm, text_height_mm), _ = cv2.getTextSize(f"Distance MM: {distance_mm:.2f}mm", 0, 0.8, 2)
|
|
577
636
|
cv2.rectangle(self.im, (15, 75), (15 + text_width_mm + 10, 75 + text_height_mm + 20), (255, 255, 255), -1)
|
|
578
637
|
cv2.putText(
|
|
579
638
|
self.im,
|
|
580
639
|
f"Distance MM: {distance_mm:.2f}mm",
|
|
581
640
|
(20, 100),
|
|
582
|
-
|
|
641
|
+
0,
|
|
583
642
|
0.8,
|
|
584
643
|
(0, 0, 0),
|
|
585
644
|
2,
|
|
@@ -612,8 +671,8 @@ class Annotator:
|
|
|
612
671
|
@plt_settings()
|
|
613
672
|
def plot_labels(boxes, cls, names=(), save_dir=Path(""), on_plot=None):
|
|
614
673
|
"""Plot training labels including class histograms and box statistics."""
|
|
615
|
-
import pandas
|
|
616
|
-
import seaborn
|
|
674
|
+
import pandas # scope for faster 'import ultralytics'
|
|
675
|
+
import seaborn # scope for faster 'import ultralytics'
|
|
617
676
|
|
|
618
677
|
# Filter matplotlib>=3.7.2 warning and Seaborn use_inf and is_categorical FutureWarnings
|
|
619
678
|
warnings.filterwarnings("ignore", category=UserWarning, message="The figure layout has changed to tight")
|
|
@@ -623,10 +682,10 @@ def plot_labels(boxes, cls, names=(), save_dir=Path(""), on_plot=None):
|
|
|
623
682
|
LOGGER.info(f"Plotting labels to {save_dir / 'labels.jpg'}... ")
|
|
624
683
|
nc = int(cls.max() + 1) # number of classes
|
|
625
684
|
boxes = boxes[:1000000] # limit to 1M boxes
|
|
626
|
-
x =
|
|
685
|
+
x = pandas.DataFrame(boxes, columns=["x", "y", "width", "height"])
|
|
627
686
|
|
|
628
687
|
# Seaborn correlogram
|
|
629
|
-
|
|
688
|
+
seaborn.pairplot(x, corner=True, diag_kind="auto", kind="hist", diag_kws=dict(bins=50), plot_kws=dict(pmax=0.9))
|
|
630
689
|
plt.savefig(save_dir / "labels_correlogram.jpg", dpi=200)
|
|
631
690
|
plt.close()
|
|
632
691
|
|
|
@@ -641,8 +700,8 @@ def plot_labels(boxes, cls, names=(), save_dir=Path(""), on_plot=None):
|
|
|
641
700
|
ax[0].set_xticklabels(list(names.values()), rotation=90, fontsize=10)
|
|
642
701
|
else:
|
|
643
702
|
ax[0].set_xlabel("classes")
|
|
644
|
-
|
|
645
|
-
|
|
703
|
+
seaborn.histplot(x, x="x", y="y", ax=ax[2], bins=50, pmax=0.9)
|
|
704
|
+
seaborn.histplot(x, x="width", y="height", ax=ax[3], bins=50, pmax=0.9)
|
|
646
705
|
|
|
647
706
|
# Rectangles
|
|
648
707
|
boxes[:, 0:2] = 0.5 # center
|
|
@@ -874,7 +933,7 @@ def plot_results(file="path/to/results.csv", dir="", segment=False, pose=False,
|
|
|
874
933
|
plot_results('path/to/results.csv', segment=True)
|
|
875
934
|
```
|
|
876
935
|
"""
|
|
877
|
-
import pandas as pd
|
|
936
|
+
import pandas as pd # scope for faster 'import ultralytics'
|
|
878
937
|
from scipy.ndimage import gaussian_filter1d
|
|
879
938
|
|
|
880
939
|
save_dir = Path(file).parent if file else Path(dir)
|
|
@@ -960,7 +1019,7 @@ def plot_tune_results(csv_file="tune_results.csv"):
|
|
|
960
1019
|
>>> plot_tune_results('path/to/tune_results.csv')
|
|
961
1020
|
"""
|
|
962
1021
|
|
|
963
|
-
import pandas as pd
|
|
1022
|
+
import pandas as pd # scope for faster 'import ultralytics'
|
|
964
1023
|
from scipy.ndimage import gaussian_filter1d
|
|
965
1024
|
|
|
966
1025
|
# Scatter plots for each hyperparameter
|
ultralytics/utils/torch_utils.py
CHANGED
|
@@ -14,10 +14,17 @@ import torch
|
|
|
14
14
|
import torch.distributed as dist
|
|
15
15
|
import torch.nn as nn
|
|
16
16
|
import torch.nn.functional as F
|
|
17
|
-
import torchvision
|
|
18
17
|
|
|
19
|
-
from ultralytics.utils import
|
|
20
|
-
|
|
18
|
+
from ultralytics.utils import (
|
|
19
|
+
DEFAULT_CFG_DICT,
|
|
20
|
+
DEFAULT_CFG_KEYS,
|
|
21
|
+
LOGGER,
|
|
22
|
+
PYTHON_VERSION,
|
|
23
|
+
TORCHVISION_VERSION,
|
|
24
|
+
colorstr,
|
|
25
|
+
__version__,
|
|
26
|
+
)
|
|
27
|
+
from ultralytics.utils.checks import check_version
|
|
21
28
|
|
|
22
29
|
try:
|
|
23
30
|
import thop
|
|
@@ -28,9 +35,9 @@ except ImportError:
|
|
|
28
35
|
TORCH_1_9 = check_version(torch.__version__, "1.9.0")
|
|
29
36
|
TORCH_1_13 = check_version(torch.__version__, "1.13.0")
|
|
30
37
|
TORCH_2_0 = check_version(torch.__version__, "2.0.0")
|
|
31
|
-
TORCHVISION_0_10 = check_version(
|
|
32
|
-
TORCHVISION_0_11 = check_version(
|
|
33
|
-
TORCHVISION_0_13 = check_version(
|
|
38
|
+
TORCHVISION_0_10 = check_version(TORCHVISION_VERSION, "0.10.0")
|
|
39
|
+
TORCHVISION_0_11 = check_version(TORCHVISION_VERSION, "0.11.0")
|
|
40
|
+
TORCHVISION_0_13 = check_version(TORCHVISION_VERSION, "0.13.0")
|
|
34
41
|
|
|
35
42
|
|
|
36
43
|
@contextmanager
|
|
@@ -614,8 +621,9 @@ class EarlyStopping:
|
|
|
614
621
|
self.possible_stop = delta >= (self.patience - 1) # possible stop may occur next epoch
|
|
615
622
|
stop = delta >= self.patience # stop training if patience exceeded
|
|
616
623
|
if stop:
|
|
624
|
+
prefix = colorstr("EarlyStopping: ")
|
|
617
625
|
LOGGER.info(
|
|
618
|
-
f"
|
|
626
|
+
f"{prefix}Training stopped early as no improvement observed in last {self.patience} epochs. "
|
|
619
627
|
f"Best results observed at epoch {self.best_epoch}, best model saved as best.pt.\n"
|
|
620
628
|
f"To update EarlyStopping(patience={self.patience}) pass a new patience value, "
|
|
621
629
|
f"i.e. `patience=300` or use `patience=0` to disable EarlyStopping."
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.1.
|
|
3
|
+
Version: 8.1.43
|
|
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
|
|
@@ -63,6 +63,7 @@ Requires-Dist: streamlit ; extra == 'explorer'
|
|
|
63
63
|
Provides-Extra: export
|
|
64
64
|
Requires-Dist: onnx >=1.12.0 ; extra == 'export'
|
|
65
65
|
Requires-Dist: openvino >=2024.0.0 ; extra == 'export'
|
|
66
|
+
Requires-Dist: numpy ==1.23.5 ; (platform_machine == "aarch64") and extra == 'export'
|
|
66
67
|
Requires-Dist: coremltools >=7.0 ; (platform_system != "Windows" and python_version <= "3.11") and extra == 'export'
|
|
67
68
|
Requires-Dist: tensorflow <=2.13.1 ; (python_version <= "3.11") and extra == 'export'
|
|
68
69
|
Requires-Dist: tensorflowjs >=3.9.0 ; (python_version <= "3.11") and extra == 'export'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
ultralytics/__init__.py,sha256=
|
|
1
|
+
ultralytics/__init__.py,sha256=FBbnfpAzM9BX-E4VHPNi41TwzSDIIB8hLVnS2DWnkHk,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=ugSQqHCg31bAE9rwhVrnLMNzKLShr9JxDFcN6kBTbUk,21316
|
|
@@ -56,31 +56,33 @@ ultralytics/cfg/models/v8/yolov8-seg.yaml,sha256=fN85m_aDMCH4oTJ3z-ft98Pdh6dk0pZ
|
|
|
56
56
|
ultralytics/cfg/models/v8/yolov8-world.yaml,sha256=RXTp_tgix8dbnVHprapxiK2aax7M2qIfmuR-aAve4sU,2019
|
|
57
57
|
ultralytics/cfg/models/v8/yolov8-worldv2.yaml,sha256=fvGVUxvlBOjN6LUiiaiGsnjK5ZKjwYGWxgkJ49hGmMg,1956
|
|
58
58
|
ultralytics/cfg/models/v8/yolov8.yaml,sha256=VjSe_V2Gn9ZpJrwTtz0A6_6IMp6UuugNiR7aEShR5rc,1889
|
|
59
|
-
ultralytics/cfg/models/v9/yolov9c.yaml,sha256=
|
|
60
|
-
ultralytics/cfg/models/v9/
|
|
59
|
+
ultralytics/cfg/models/v9/yolov9c-seg.yaml,sha256=Q0FnO3-ff-JepwP9gY51dhXiN8CMiyJLWjeEIWNhiuQ,1270
|
|
60
|
+
ultralytics/cfg/models/v9/yolov9c.yaml,sha256=04C3zUJK56X727s3mKDtZCw4b4hM6Tcq8Qq_2w0pIBg,1257
|
|
61
|
+
ultralytics/cfg/models/v9/yolov9e-seg.yaml,sha256=J137yzM0OWtF0CV39IG7RaIWrlT44MT7KwfdnPKkBcU,2230
|
|
62
|
+
ultralytics/cfg/models/v9/yolov9e.yaml,sha256=glFAVjWU1iz440LjRTXLfoeq9O4mPfT0U6U67HN-KYU,2213
|
|
61
63
|
ultralytics/cfg/trackers/botsort.yaml,sha256=YrPmj18p1UU40kJH5NRdL_4S8f7knggkk_q2KYnVudo,883
|
|
62
64
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=QvHmtuwulK4X6j3T5VEqtCm0sbWWBUVmWPcCcM20qe0,688
|
|
63
65
|
ultralytics/data/__init__.py,sha256=bGJ8oEBheIj8tQ2q3d7JqiVJUT4Ft9lXkDXOvBUj6Q0,637
|
|
64
66
|
ultralytics/data/annotator.py,sha256=evXQzARVerc0hb9ol-n_GrrHf-dlXO4lCMMWEZoJ2UM,2117
|
|
65
|
-
ultralytics/data/augment.py,sha256=
|
|
67
|
+
ultralytics/data/augment.py,sha256=o2hmQS0Y8lustycENbA2lTJcokTDYPM_HIs_4yfbW5M,57476
|
|
66
68
|
ultralytics/data/base.py,sha256=8DwF1_H0GIdTbF6iSm-763TK3ez3El9aZVix0h-X-c0,13470
|
|
67
69
|
ultralytics/data/build.py,sha256=CgUq3g3s5Kc6UXDjCkx-rfmK2biRqhGHZWY21tnJOk0,7265
|
|
68
70
|
ultralytics/data/converter.py,sha256=Y0V4xuCqge55gXbXHhWZij52zx27BFAKCspyxrg_MFs,17527
|
|
69
|
-
ultralytics/data/dataset.py,sha256=
|
|
71
|
+
ultralytics/data/dataset.py,sha256=ttwKxpk6La4t4WoiXEojzYHiRJVCOLUdDB6uND3IsYc,22199
|
|
70
72
|
ultralytics/data/loaders.py,sha256=2GOYHELK9nh7RlIcqUqg3kuRgWUvXT43mI2P_XOtxCA,23146
|
|
71
73
|
ultralytics/data/split_dota.py,sha256=PQdkwwlFtLKhWIrbToshSekXGdgbrbYMN6hM4ujfa7o,10010
|
|
72
74
|
ultralytics/data/utils.py,sha256=7zaL2N9Hp3ki1EI31NuthMVJS9uEcakDjoN-2t7Amw4,30869
|
|
73
75
|
ultralytics/data/explorer/__init__.py,sha256=-Y3m1ZedepOQUv_KW82zaGxvU_PSHcuwUTFqG9BhAr4,113
|
|
74
|
-
ultralytics/data/explorer/explorer.py,sha256=
|
|
75
|
-
ultralytics/data/explorer/utils.py,sha256=
|
|
76
|
+
ultralytics/data/explorer/explorer.py,sha256=71_XkMopa03Lxakc3JdUaeZWQ6HMbLvvPnQoZL1HjV0,18718
|
|
77
|
+
ultralytics/data/explorer/utils.py,sha256=EvvukQiQUTBrsZznmMnyEX2EqTuwZo_Geyc8yfi8NIA,7085
|
|
76
78
|
ultralytics/data/explorer/gui/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
77
|
-
ultralytics/data/explorer/gui/dash.py,sha256=
|
|
79
|
+
ultralytics/data/explorer/gui/dash.py,sha256=2oAbNroR2lfS45v53M1sRqZklLXbbj6qXqNxvplulC0,10087
|
|
78
80
|
ultralytics/engine/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
79
|
-
ultralytics/engine/exporter.py,sha256=
|
|
81
|
+
ultralytics/engine/exporter.py,sha256=NeJEldYo37wMlhMQGQxn8qRhYN1ZYOmuEnbFwCk_LNM,53835
|
|
80
82
|
ultralytics/engine/model.py,sha256=tCU9z_cQhdJTwUUce3a7rSeCWkUgJO4RfHNT29pB41E,39829
|
|
81
83
|
ultralytics/engine/predictor.py,sha256=wQRKdWGDTP5A6CS0gTC6U3RPDMhP3QkEzWSPm6eqCkU,17022
|
|
82
84
|
ultralytics/engine/results.py,sha256=MvrOBrBlRF7kbL-QwysMf9mIDy_lwQBTTYvy1x1FMME,30667
|
|
83
|
-
ultralytics/engine/trainer.py,sha256=
|
|
85
|
+
ultralytics/engine/trainer.py,sha256=CBcFxiNo4opu6RSY_-zYwZiI79TY-l2BZsO5jtuTokw,34932
|
|
84
86
|
ultralytics/engine/tuner.py,sha256=zttHrQkvXuUVTB7jmM4Z85GgIsQ2hjpW9YrMccrQ4wo,11829
|
|
85
87
|
ultralytics/engine/validator.py,sha256=p0irfLSZa3-0TtcuGheI8kNbzPUqs_UM3TMK4VRUGK4,14645
|
|
86
88
|
ultralytics/hub/__init__.py,sha256=U4j-2QPdwSDlxw6RgFYnnJXOoIzLtwke4TkY2A8q4ws,5068
|
|
@@ -91,7 +93,7 @@ ultralytics/models/__init__.py,sha256=xrzn2dcLBG6Ujxll8LtlTIblPar2gjNhAwjAQg7u8s
|
|
|
91
93
|
ultralytics/models/fastsam/__init__.py,sha256=0dt65jZ_5b7Q-mdXN8MSEkgnFRA0FIwlel_LS2RaOlU,254
|
|
92
94
|
ultralytics/models/fastsam/model.py,sha256=yOf-byvFxafXYTEoc9j1dYnE2XFNErRYSnroyGxkW7I,1054
|
|
93
95
|
ultralytics/models/fastsam/predict.py,sha256=0WHUFrqHUNy1cTNpLKsN0FKqLKCvr7fHU6pp91_QVg0,4121
|
|
94
|
-
ultralytics/models/fastsam/prompt.py,sha256=
|
|
96
|
+
ultralytics/models/fastsam/prompt.py,sha256=v_aS-8EAPtK6ug70f_QtsMBoRAZA47_x6I_owA2rJlI,16182
|
|
95
97
|
ultralytics/models/fastsam/utils.py,sha256=r-b362Wb7P2ZAlOwWckPJM6HLvg-eFDDz4wkA0ymLd0,2157
|
|
96
98
|
ultralytics/models/fastsam/val.py,sha256=ILKmw3U8FYmmQsO9wk9-bJ9Pyp_ZthJM36b61L75s3Y,1967
|
|
97
99
|
ultralytics/models/nas/__init__.py,sha256=d6-WTrYLXvbPs58ebA0-583ODi-VyzXc-t4aGIDQK6M,179
|
|
@@ -107,7 +109,7 @@ ultralytics/models/sam/__init__.py,sha256=9A1iyfPN_ncqq3TMExe_-uPoARjEX3psoHEI1x
|
|
|
107
109
|
ultralytics/models/sam/amg.py,sha256=MsKSRS2SieZK_n-m2ICk1QpcYogl5mofcsVa-4FXYvo,7935
|
|
108
110
|
ultralytics/models/sam/build.py,sha256=jJvloRbPwHvSnVWwM3pEdzpM5MdIcEHbRaqQk_S9lG8,4943
|
|
109
111
|
ultralytics/models/sam/model.py,sha256=H87wexHJ84wbtfKVrZe6I-VuLlhI8h6XeNpxe0D-Sgc,4706
|
|
110
|
-
ultralytics/models/sam/predict.py,sha256=
|
|
112
|
+
ultralytics/models/sam/predict.py,sha256=iUvpv7v2bDnWWqqJU0_Up_1bdU2054PV0h72-PmMitk,23751
|
|
111
113
|
ultralytics/models/sam/modules/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
112
114
|
ultralytics/models/sam/modules/decoders.py,sha256=7NWnBNupxGYvH0S1N0R6NBHxdVFRUrrnL9EqAw09J4E,7816
|
|
113
115
|
ultralytics/models/sam/modules/encoders.py,sha256=pRNZHzt2J2xD_D0Btu8pk4DcItfr6dRr9rcRfxoZZhU,24746
|
|
@@ -121,7 +123,7 @@ ultralytics/models/yolo/__init__.py,sha256=e1cZr9pbSbf3Ya2OvkTjGRwD_E2YZpe610xsk
|
|
|
121
123
|
ultralytics/models/yolo/model.py,sha256=PJwBkdDkgyPuQBuIcAx5uDb78JwYg56nFeYMyzBY_nY,3991
|
|
122
124
|
ultralytics/models/yolo/classify/__init__.py,sha256=t-4pUHmgI2gjhc-l3bqNEcEtKD1dO40nD4Vc6Y2xD6o,355
|
|
123
125
|
ultralytics/models/yolo/classify/predict.py,sha256=wFY4GIlWxe7idMndEw1RnDI63o53MTfiHKz0s2fOjAY,2513
|
|
124
|
-
ultralytics/models/yolo/classify/train.py,sha256=
|
|
126
|
+
ultralytics/models/yolo/classify/train.py,sha256=9CRqtLkePo4ZkAzMTxDY4ztrNaWE34qnytYymfCEBzs,6888
|
|
125
127
|
ultralytics/models/yolo/classify/val.py,sha256=EP_hjRExXgdI4xojTKvj_YeNdaz_i2CoUzorl55r0OA,4861
|
|
126
128
|
ultralytics/models/yolo/detect/__init__.py,sha256=JR8gZJWn7wMBbh-0j_073nxJVZTMFZVWTOG5Wnvk6w0,229
|
|
127
129
|
ultralytics/models/yolo/detect/predict.py,sha256=_a9vH3DmKFY6eeztFTdj3nkfu_MKG6n7zb5rRKGjs9I,1510
|
|
@@ -154,8 +156,9 @@ ultralytics/nn/modules/utils.py,sha256=779QnnKp9v8jv251ESduTXJ0ol8HkIOLbGQWwEGQj
|
|
|
154
156
|
ultralytics/solutions/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7JI8grmQDTs,42
|
|
155
157
|
ultralytics/solutions/ai_gym.py,sha256=IZHpvmNyEQT_aqMTrA5sIjCsl3_5Zl2WG31HxGT6KV4,5696
|
|
156
158
|
ultralytics/solutions/distance_calculation.py,sha256=N1QB5uDG_6sp8jD5uSwp_NTPmyP4UCqJm9G2lNrgpr8,6334
|
|
157
|
-
ultralytics/solutions/heatmap.py,sha256=
|
|
158
|
-
ultralytics/solutions/object_counter.py,sha256=
|
|
159
|
+
ultralytics/solutions/heatmap.py,sha256=IeUkGRYbO8I7Sca0I2kvxh8dILy1gehmbIYolFF-ppc,12276
|
|
160
|
+
ultralytics/solutions/object_counter.py,sha256=zi-p3yi3tIH6ydlFF6xuSS_Tw42b7Kc54aGzpXb6iH4,11557
|
|
161
|
+
ultralytics/solutions/queue_management.py,sha256=TBQ2dIKYtymBjhdw0Enxa22KHyH3IdXf2C-1Se21siA,6684
|
|
159
162
|
ultralytics/solutions/speed_estimation.py,sha256=lvaU-F8f3V4KFVKFaNS7isIdYtMSFjh_zF9gl0Mals8,6714
|
|
160
163
|
ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
|
|
161
164
|
ultralytics/trackers/basetrack.py,sha256=-vBDD-Q9lsxfTMK2w9kuqWGrYbRMmaBCCEbGGyR53gE,3675
|
|
@@ -166,27 +169,27 @@ ultralytics/trackers/utils/__init__.py,sha256=mHtJuK4hwF8cuV-VHDc7tp6u6D1gHz2Z7J
|
|
|
166
169
|
ultralytics/trackers/utils/gmc.py,sha256=vwcPA1n5zjPaBGhCDt8ItN7rq_6Sczsjn4gsXJfRylU,13688
|
|
167
170
|
ultralytics/trackers/utils/kalman_filter.py,sha256=JN1sAcfJZy8fTZxc8w3jUJnGQDKtgAL__p4nTR6RM2I,15168
|
|
168
171
|
ultralytics/trackers/utils/matching.py,sha256=c_pthBfu9sWeMVYe-dSecdWcQxUey-mQT2yMVsFH3VQ,5404
|
|
169
|
-
ultralytics/utils/__init__.py,sha256=
|
|
172
|
+
ultralytics/utils/__init__.py,sha256=xezg5RbMpI85AOtwMt1QoHEHCmygHa1FHpytN6TxdKU,38013
|
|
170
173
|
ultralytics/utils/autobatch.py,sha256=ygZ3f2ByIkcujB89ENcTnGWWnAQw5Pbg6nBuShg-5t4,3863
|
|
171
|
-
ultralytics/utils/benchmarks.py,sha256=
|
|
172
|
-
ultralytics/utils/checks.py,sha256=
|
|
174
|
+
ultralytics/utils/benchmarks.py,sha256=BNG0sO34_mu3fIEfMn8j-QzQ9Da6K1KujO-CxDkvsOM,18325
|
|
175
|
+
ultralytics/utils/checks.py,sha256=R902JZALsOonXxqk4z_6so6YEV7vymTdr0ki7zKFDoY,27987
|
|
173
176
|
ultralytics/utils/dist.py,sha256=3HeNbY2gp7vYhcvVhsrvTrQXpQmgT8tpmnzApf3eQRA,2267
|
|
174
177
|
ultralytics/utils/downloads.py,sha256=j1S27awWiLTt1qC9l53WqH_BilM13JHLSVmQ2xFqh-4,21496
|
|
175
178
|
ultralytics/utils/errors.py,sha256=GqP_Jgj_n0paxn8OMhn3DTCgoNkB2WjUcUaqs-M6SQk,816
|
|
176
179
|
ultralytics/utils/files.py,sha256=TVfY0Wi5IsUc4YdsDzC0dAg-jAP5exYvwqB3VmXhDLY,6761
|
|
177
180
|
ultralytics/utils/instance.py,sha256=fPClvPPtTk8VeXWiRv90DrFk1j1lTUKdYJtpZKUDDtA,15575
|
|
178
181
|
ultralytics/utils/loss.py,sha256=lOFBx-lKn-aGHUIPTb1NQefXiNot07egNx7qKErChpU,32716
|
|
179
|
-
ultralytics/utils/metrics.py,sha256=
|
|
180
|
-
ultralytics/utils/ops.py,sha256=
|
|
182
|
+
ultralytics/utils/metrics.py,sha256=XPD-xP0fchR8KgCuTcihV2-n0EK1cWi3-53BWN_pLuA,53518
|
|
183
|
+
ultralytics/utils/ops.py,sha256=wZCWx7dm5GJNIJHyZaFJRetGcQ7prdv-anplqq9figQ,33309
|
|
181
184
|
ultralytics/utils/patches.py,sha256=SgMqeMsq2K6JoBJP1NplXMl9C6rK0JeJUChjBrJOneo,2750
|
|
182
|
-
ultralytics/utils/plotting.py,sha256=
|
|
185
|
+
ultralytics/utils/plotting.py,sha256=hifiLd0mz2EM9Z4qPHkWbzBaIvUgI1w0ynMdD5-eYoY,47441
|
|
183
186
|
ultralytics/utils/tal.py,sha256=xuIyryUjaaYHkHPG9GvBwh1xxN2Hq4y3hXOtuERehwY,16017
|
|
184
|
-
ultralytics/utils/torch_utils.py,sha256=
|
|
187
|
+
ultralytics/utils/torch_utils.py,sha256=LAUu146TOA1x4dW6y3KIJE_5HnAMrJVI9vk6K86z4eM,25848
|
|
185
188
|
ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3936
|
|
186
189
|
ultralytics/utils/tuner.py,sha256=JhvBp6haKA6eqpNPpGJzzjjCmPxBx5phk9kHmt_jppw,6171
|
|
187
190
|
ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
|
|
188
191
|
ultralytics/utils/callbacks/base.py,sha256=sOe3JvyBFmRwVZ8_Q03u7JwTeOOm9CI4s9-UEhnG0xA,5777
|
|
189
|
-
ultralytics/utils/callbacks/clearml.py,sha256=
|
|
192
|
+
ultralytics/utils/callbacks/clearml.py,sha256=M9Fi1OfdWqcm8uVkauuX3zJIYhNh6Tp7Jo4CfA0u0nw,5923
|
|
190
193
|
ultralytics/utils/callbacks/comet.py,sha256=QR3-9f0L_W7nZWWg_OEN7t8La2JotapSS-CnNYVjCdk,13744
|
|
191
194
|
ultralytics/utils/callbacks/dvc.py,sha256=WIClMsuvhiiyrwRv5BsZLxjsxYNJ3Y8Vq7zN0Bthtro,5045
|
|
192
195
|
ultralytics/utils/callbacks/hub.py,sha256=2xebyUL92j3OZwMmL80kdvHrMizqaaqXBe5oSXJRKdA,3621
|
|
@@ -194,10 +197,10 @@ ultralytics/utils/callbacks/mlflow.py,sha256=Wr5Kju9GFdwGJXJKvkPJDCZH6KiPF9EUxKP
|
|
|
194
197
|
ultralytics/utils/callbacks/neptune.py,sha256=5Z3ua5YBTUS56FH8VQKQG1aaIo9fH8GEyzC5q7p4ipQ,3756
|
|
195
198
|
ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
|
|
196
199
|
ultralytics/utils/callbacks/tensorboard.py,sha256=hRmWjbqdA4RNaLuSZznuDcpOBW-_-_Ga0u-B8UU-7ZI,4134
|
|
197
|
-
ultralytics/utils/callbacks/wb.py,sha256=
|
|
198
|
-
ultralytics-8.1.
|
|
199
|
-
ultralytics-8.1.
|
|
200
|
-
ultralytics-8.1.
|
|
201
|
-
ultralytics-8.1.
|
|
202
|
-
ultralytics-8.1.
|
|
203
|
-
ultralytics-8.1.
|
|
200
|
+
ultralytics/utils/callbacks/wb.py,sha256=woCQVuZzqtM5KnwxIibcfM3sFBYojeMPnv11jrRaIQA,6674
|
|
201
|
+
ultralytics-8.1.43.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
202
|
+
ultralytics-8.1.43.dist-info/METADATA,sha256=9iXx3cJblunu8OJbUhO90LxptFAalkG7GjfSCbEuWPk,40416
|
|
203
|
+
ultralytics-8.1.43.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
204
|
+
ultralytics-8.1.43.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
205
|
+
ultralytics-8.1.43.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
206
|
+
ultralytics-8.1.43.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|