ultralytics 8.3.102__py3-none-any.whl → 8.3.103__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.
- tests/test_exports.py +14 -5
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/__init__.py +1 -1
- ultralytics/engine/exporter.py +3 -3
- ultralytics/engine/tuner.py +8 -2
- ultralytics/nn/autobackend.py +9 -8
- ultralytics/nn/tasks.py +3 -0
- ultralytics/solutions/instance_segmentation.py +15 -7
- ultralytics/solutions/solutions.py +2 -47
- ultralytics/utils/metrics.py +1 -1
- ultralytics/utils/torch_utils.py +14 -6
- ultralytics/utils/tuner.py +17 -9
- {ultralytics-8.3.102.dist-info → ultralytics-8.3.103.dist-info}/METADATA +3 -3
- {ultralytics-8.3.102.dist-info → ultralytics-8.3.103.dist-info}/RECORD +18 -18
- {ultralytics-8.3.102.dist-info → ultralytics-8.3.103.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.102.dist-info → ultralytics-8.3.103.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.102.dist-info → ultralytics-8.3.103.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.102.dist-info → ultralytics-8.3.103.dist-info}/top_level.txt +0 -0
tests/test_exports.py
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
2
|
|
3
|
+
import io
|
3
4
|
import shutil
|
4
5
|
import uuid
|
6
|
+
from contextlib import redirect_stderr, redirect_stdout
|
5
7
|
from itertools import product
|
6
8
|
from pathlib import Path
|
7
9
|
|
@@ -167,12 +169,19 @@ def test_export_tflite_matrix(task, dynamic, int8, half, batch, nms):
|
|
167
169
|
@pytest.mark.skipif(LINUX and ARM64, reason="CoreML not supported on aarch64 Linux")
|
168
170
|
@pytest.mark.skipif(checks.IS_PYTHON_3_13, reason="CoreML not supported in Python 3.13")
|
169
171
|
def test_export_coreml():
|
170
|
-
"""Test YOLO exports to CoreML format
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
else:
|
172
|
+
"""Test YOLO exports to CoreML format and check for errors."""
|
173
|
+
# Capture stdout and stderr
|
174
|
+
stdout, stderr = io.StringIO(), io.StringIO()
|
175
|
+
with redirect_stdout(stdout), redirect_stderr(stderr):
|
175
176
|
YOLO(MODEL).export(format="coreml", nms=True, imgsz=32)
|
177
|
+
if MACOS:
|
178
|
+
file = YOLO(MODEL).export(format="coreml", imgsz=32)
|
179
|
+
YOLO(file)(SOURCE, imgsz=32) # model prediction only supported on macOS for nms=False models
|
180
|
+
|
181
|
+
# Check captured output for errors
|
182
|
+
output = stdout.getvalue() + stderr.getvalue()
|
183
|
+
assert "Error" not in output, f"CoreML export produced errors: {output}"
|
184
|
+
assert "You will not be able to run predict()" not in output, "CoreML export has predict() error"
|
176
185
|
|
177
186
|
|
178
187
|
@pytest.mark.skipif(not checks.IS_PYTHON_MINIMUM_3_10, reason="TFLite export requires Python>=3.10")
|
ultralytics/__init__.py
CHANGED
ultralytics/cfg/__init__.py
CHANGED
@@ -700,7 +700,7 @@ def handle_yolo_solutions(args: List[str]) -> None:
|
|
700
700
|
solution_name = "count" # Default for invalid solution
|
701
701
|
|
702
702
|
if solution_name == "inference":
|
703
|
-
checks.check_requirements("streamlit>=1.29.0")
|
703
|
+
checks.check_requirements("streamlit>=1.29.0,<1.44.0")
|
704
704
|
LOGGER.info("💡 Loading Ultralytics live inference app...")
|
705
705
|
subprocess.run(
|
706
706
|
[ # Run subprocess with Streamlit custom argument
|
ultralytics/engine/exporter.py
CHANGED
@@ -818,7 +818,7 @@ class Exporter:
|
|
818
818
|
ts,
|
819
819
|
inputs=[ct.ImageType("image", shape=self.im.shape, scale=scale, bias=bias)], # expects ct.TensorType
|
820
820
|
classifier_config=classifier_config,
|
821
|
-
minimum_deployment_target=ct.target.
|
821
|
+
minimum_deployment_target=ct.target.iOS15, # warning: >=16 causes pipeline errors
|
822
822
|
convert_to="neuralnetwork" if mlmodel else "mlprogram",
|
823
823
|
)
|
824
824
|
bits, mode = (8, "kmeans") if self.args.int8 else (16, "linear") if self.args.half else (32, None)
|
@@ -1464,7 +1464,7 @@ class Exporter:
|
|
1464
1464
|
|
1465
1465
|
# 3. Create NMS protobuf
|
1466
1466
|
nms_spec = ct.proto.Model_pb2.Model()
|
1467
|
-
nms_spec.specificationVersion =
|
1467
|
+
nms_spec.specificationVersion = 9
|
1468
1468
|
for i in range(2):
|
1469
1469
|
decoder_output = model._spec.description.output[i].SerializeToString()
|
1470
1470
|
nms_spec.description.input.add()
|
@@ -1517,7 +1517,7 @@ class Exporter:
|
|
1517
1517
|
pipeline.spec.description.output[1].ParseFromString(nms_model._spec.description.output[1].SerializeToString())
|
1518
1518
|
|
1519
1519
|
# Update metadata
|
1520
|
-
pipeline.spec.specificationVersion =
|
1520
|
+
pipeline.spec.specificationVersion = 9
|
1521
1521
|
pipeline.spec.description.metadata.userDefined.update(
|
1522
1522
|
{"IoU threshold": str(nms.iouThreshold), "Confidence threshold": str(nms.confidenceThreshold)}
|
1523
1523
|
)
|
ultralytics/engine/tuner.py
CHANGED
@@ -93,8 +93,9 @@ class Tuner:
|
|
93
93
|
"copy_paste": (0.0, 1.0), # segment copy-paste (probability)
|
94
94
|
}
|
95
95
|
self.args = get_cfg(overrides=args)
|
96
|
+
self.args.exist_ok = self.args.resume # resume w/ same tune_dir
|
96
97
|
self.tune_dir = get_save_dir(self.args, name=self.args.name or "tune")
|
97
|
-
self.args.name = None # reset to not affect training
|
98
|
+
self.args.name, self.args.exist_ok, self.args.resume = (None, False, False) # reset to not affect training
|
98
99
|
self.tune_csv = self.tune_dir / "tune_results.csv"
|
99
100
|
self.callbacks = _callbacks or callbacks.get_default_callbacks()
|
100
101
|
self.prefix = colorstr("Tuner: ")
|
@@ -173,7 +174,12 @@ class Tuner:
|
|
173
174
|
t0 = time.time()
|
174
175
|
best_save_dir, best_metrics = None, None
|
175
176
|
(self.tune_dir / "weights").mkdir(parents=True, exist_ok=True)
|
176
|
-
|
177
|
+
start = 0
|
178
|
+
if self.tune_csv.exists():
|
179
|
+
x = np.loadtxt(self.tune_csv, ndmin=2, delimiter=",", skiprows=1)
|
180
|
+
start = x.shape[0]
|
181
|
+
LOGGER.info(f"{self.prefix}Resuming tuning run {self.tune_dir} from iteration {start + 1}...")
|
182
|
+
for i in range(start, iterations):
|
177
183
|
# Mutate hyperparameters
|
178
184
|
mutated_hyp = self._mutate()
|
179
185
|
LOGGER.info(f"{self.prefix}Starting iteration {i + 1}/{iterations} with hyperparameters: {mutated_hyp}")
|
ultralytics/nn/autobackend.py
CHANGED
@@ -6,6 +6,7 @@ import platform
|
|
6
6
|
import zipfile
|
7
7
|
from collections import OrderedDict, namedtuple
|
8
8
|
from pathlib import Path
|
9
|
+
from typing import List, Optional, Union
|
9
10
|
|
10
11
|
import cv2
|
11
12
|
import numpy as np
|
@@ -96,14 +97,14 @@ class AutoBackend(nn.Module):
|
|
96
97
|
@torch.no_grad()
|
97
98
|
def __init__(
|
98
99
|
self,
|
99
|
-
weights="yolo11n.pt",
|
100
|
-
device=torch.device("cpu"),
|
101
|
-
dnn=False,
|
102
|
-
data=None,
|
103
|
-
fp16=False,
|
104
|
-
batch=1,
|
105
|
-
fuse=True,
|
106
|
-
verbose=True,
|
100
|
+
weights: Union[str, List[str], torch.nn.Module] = "yolo11n.pt",
|
101
|
+
device: torch.device = torch.device("cpu"),
|
102
|
+
dnn: bool = False,
|
103
|
+
data: Optional[Union[str, Path]] = None,
|
104
|
+
fp16: bool = False,
|
105
|
+
batch: int = 1,
|
106
|
+
fuse: bool = True,
|
107
|
+
verbose: bool = True,
|
107
108
|
):
|
108
109
|
"""
|
109
110
|
Initialize the AutoBackend for inference.
|
ultralytics/nn/tasks.py
CHANGED
@@ -912,6 +912,9 @@ class YOLOEModel(DetectionModel):
|
|
912
912
|
names (List[str]): List of class names.
|
913
913
|
embeddings (torch.Tensor): Embeddings tensor.
|
914
914
|
"""
|
915
|
+
assert not hasattr(self.model[-1], "lrpc"), (
|
916
|
+
"Prompt-free model does not support setting classes. Please try with Text/Visual prompt models."
|
917
|
+
)
|
915
918
|
assert embeddings.ndim == 3
|
916
919
|
self.pe = embeddings
|
917
920
|
self.model[-1].nc = len(names)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
2
|
|
3
|
-
from ultralytics.
|
4
|
-
from ultralytics.
|
3
|
+
from ultralytics.engine.results import Results
|
4
|
+
from ultralytics.solutions.solutions import BaseSolution, SolutionResults
|
5
5
|
|
6
6
|
|
7
7
|
class InstanceSegmentation(BaseSolution):
|
@@ -41,6 +41,10 @@ class InstanceSegmentation(BaseSolution):
|
|
41
41
|
kwargs["model"] = kwargs.get("model", "yolo11n-seg.pt")
|
42
42
|
super().__init__(**kwargs)
|
43
43
|
|
44
|
+
self.show_conf = self.CFG.get("show_conf", True)
|
45
|
+
self.show_labels = self.CFG.get("show_labels", True)
|
46
|
+
self.show_boxes = self.CFG.get("show_boxes", True)
|
47
|
+
|
44
48
|
def process(self, im0):
|
45
49
|
"""
|
46
50
|
Perform instance segmentation on the input image and annotate the results.
|
@@ -58,17 +62,21 @@ class InstanceSegmentation(BaseSolution):
|
|
58
62
|
>>> print(summary)
|
59
63
|
"""
|
60
64
|
self.extract_tracks(im0) # Extract tracks (bounding boxes, classes, and masks)
|
61
|
-
annotator = SolutionAnnotator(im0, self.line_width)
|
62
65
|
|
63
66
|
# Iterate over detected classes, track IDs, and segmentation masks
|
64
67
|
if self.masks is None:
|
65
68
|
self.LOGGER.warning("⚠️ No masks detected! Ensure you're using a supported Ultralytics segmentation model.")
|
69
|
+
plot_im = im0
|
66
70
|
else:
|
67
|
-
|
68
|
-
|
69
|
-
|
71
|
+
results = Results(im0, path=None, names=self.names, boxes=self.track_data.data, masks=self.masks.data)
|
72
|
+
plot_im = results.plot(
|
73
|
+
line_width=self.line_width,
|
74
|
+
boxes=self.show_boxes,
|
75
|
+
conf=self.show_conf,
|
76
|
+
labels=self.show_labels,
|
77
|
+
color_mode="instance",
|
78
|
+
)
|
70
79
|
|
71
|
-
plot_im = annotator.result()
|
72
80
|
self.display_output(plot_im) # Display the annotated output using the base class function
|
73
81
|
|
74
82
|
# Return SolutionResults
|
@@ -52,7 +52,7 @@ class BaseSolution:
|
|
52
52
|
is_cli (bool): Enables CLI mode if set to True.
|
53
53
|
**kwargs (Any): Additional configuration parameters that override defaults.
|
54
54
|
"""
|
55
|
-
check_requirements("shapely>=2.0.0")
|
55
|
+
check_requirements("shapely>=2.0.0,<2.1.0")
|
56
56
|
from shapely.geometry import LineString, Point, Polygon
|
57
57
|
from shapely.prepared import prep
|
58
58
|
|
@@ -122,7 +122,7 @@ class BaseSolution:
|
|
122
122
|
self.track_data = self.tracks[0].obb or self.tracks[0].boxes # Extract tracks for OBB or object detection
|
123
123
|
|
124
124
|
self.masks = (
|
125
|
-
self.tracks[0].masks
|
125
|
+
self.tracks[0].masks if hasattr(self.tracks[0], "masks") and self.tracks[0].masks is not None else None
|
126
126
|
)
|
127
127
|
|
128
128
|
if self.track_data and self.track_data.id is not None:
|
@@ -225,7 +225,6 @@ class SolutionAnnotator(Annotator):
|
|
225
225
|
plot_angle_and_count_and_stage: Visualizes angle, step count, and stage for workout monitoring.
|
226
226
|
plot_distance_and_line: Displays the distance between centroids and connects them with a line.
|
227
227
|
display_objects_labels: Annotates bounding boxes with object class labels.
|
228
|
-
segmentation_mask: Draws mask for segmented objects and optionally labels them.
|
229
228
|
sweep_annotator: Visualizes a vertical sweep line and optional label.
|
230
229
|
visioneye: Maps and connects object centroids to a visual "eye" point.
|
231
230
|
circle_label: Draws a circular label within a bounding box.
|
@@ -519,50 +518,6 @@ class SolutionAnnotator(Annotator):
|
|
519
518
|
lineType=cv2.LINE_AA,
|
520
519
|
)
|
521
520
|
|
522
|
-
def segmentation_mask(self, mask, mask_color=(255, 0, 255), label=None, alpha=0.5):
|
523
|
-
"""
|
524
|
-
Draw an optimized segmentation mask with smooth corners, highlighted edge, and dynamic text box size.
|
525
|
-
|
526
|
-
Args:
|
527
|
-
mask (np.ndarray): A 2D array of shape (N, 2) containing the object mask.
|
528
|
-
mask_color (Tuple[int, int, int]): RGB color for the mask.
|
529
|
-
label (str, optional): Text label for the object.
|
530
|
-
alpha (float): Transparency level (0 = fully transparent, 1 = fully opaque).
|
531
|
-
"""
|
532
|
-
if mask.size == 0:
|
533
|
-
return
|
534
|
-
|
535
|
-
overlay = self.im.copy()
|
536
|
-
mask = np.int32([mask])
|
537
|
-
|
538
|
-
# Approximate polygon for smooth corners with epsilon
|
539
|
-
refined_mask = cv2.approxPolyDP(mask, 0.002 * cv2.arcLength(mask, True), True)
|
540
|
-
|
541
|
-
# Apply a highlighter effect by drawing a thick outer shadow
|
542
|
-
cv2.polylines(overlay, [refined_mask], isClosed=True, color=mask_color, thickness=self.lw * 3)
|
543
|
-
cv2.fillPoly(overlay, [refined_mask], mask_color) # draw mask with primary color
|
544
|
-
|
545
|
-
# Apply an inner glow effect for extra clarity
|
546
|
-
cv2.polylines(overlay, [refined_mask], isClosed=True, color=mask_color, thickness=self.lw)
|
547
|
-
|
548
|
-
self.im = cv2.addWeighted(overlay, alpha, self.im, 1 - alpha, 0) # blend overlay with the original image
|
549
|
-
|
550
|
-
# Draw label if provided
|
551
|
-
if label:
|
552
|
-
text_size, _ = cv2.getTextSize(label, cv2.FONT_HERSHEY_SIMPLEX, self.sf, self.tf)
|
553
|
-
text_x, text_y = refined_mask[0][0][0], refined_mask[0][0][1]
|
554
|
-
rect_start, rect_end = (text_x - 5, text_y - text_size[1] - 5), (text_x + text_size[0] + 5, text_y + 5)
|
555
|
-
cv2.rectangle(self.im, rect_start, rect_end, mask_color, -1)
|
556
|
-
cv2.putText(
|
557
|
-
self.im,
|
558
|
-
label,
|
559
|
-
(text_x, text_y),
|
560
|
-
cv2.FONT_HERSHEY_SIMPLEX,
|
561
|
-
self.sf,
|
562
|
-
self.get_txt_color(mask_color),
|
563
|
-
self.tf,
|
564
|
-
)
|
565
|
-
|
566
521
|
def sweep_annotator(self, line_x=0, line_y=0, label=None, color=(221, 0, 186), txt_color=(255, 255, 255)):
|
567
522
|
"""
|
568
523
|
Draw a sweep annotation line and an optional label.
|
ultralytics/utils/metrics.py
CHANGED
@@ -523,7 +523,7 @@ def plot_mc_curve(px, py, save_dir=Path("mc_curve.png"), names={}, xlabel="Confi
|
|
523
523
|
else:
|
524
524
|
ax.plot(px, py.T, linewidth=1, color="grey") # plot(confidence, metric)
|
525
525
|
|
526
|
-
y = smooth(py.mean(0), 0.
|
526
|
+
y = smooth(py.mean(0), 0.1)
|
527
527
|
ax.plot(px, y, linewidth=3, color="blue", label=f"all classes {y.max():.2f} at {px[y.argmax()]:.3f}")
|
528
528
|
ax.set_xlabel(xlabel)
|
529
529
|
ax.set_ylabel(ylabel)
|
ultralytics/utils/torch_utils.py
CHANGED
@@ -386,14 +386,18 @@ def model_info_for_loggers(trainer):
|
|
386
386
|
|
387
387
|
def get_flops(model, imgsz=640):
|
388
388
|
"""
|
389
|
-
|
389
|
+
Calculate FLOPs (floating point operations) for a model in billions.
|
390
|
+
|
391
|
+
Attempts two calculation methods: first with a stride-based tensor for efficiency,
|
392
|
+
then falls back to full image size if needed (e.g., for RTDETR models). Returns 0.0
|
393
|
+
if thop library is unavailable or calculation fails.
|
390
394
|
|
391
395
|
Args:
|
392
396
|
model (nn.Module): The model to calculate FLOPs for.
|
393
397
|
imgsz (int | List[int], optional): Input image size. Defaults to 640.
|
394
398
|
|
395
399
|
Returns:
|
396
|
-
(float): The model
|
400
|
+
(float): The model FLOPs in billions.
|
397
401
|
"""
|
398
402
|
if not thop:
|
399
403
|
return 0.0 # if not installed return 0.0 GFLOPs
|
@@ -404,13 +408,13 @@ def get_flops(model, imgsz=640):
|
|
404
408
|
if not isinstance(imgsz, list):
|
405
409
|
imgsz = [imgsz, imgsz] # expand if int/float
|
406
410
|
try:
|
407
|
-
# Use stride
|
411
|
+
# Method 1: Use stride-based input tensor
|
408
412
|
stride = max(int(model.stride.max()), 32) if hasattr(model, "stride") else 32 # max stride
|
409
413
|
im = torch.empty((1, p.shape[1], stride, stride), device=p.device) # input image in BCHW format
|
410
414
|
flops = thop.profile(deepcopy(model), inputs=[im], verbose=False)[0] / 1e9 * 2 # stride GFLOPs
|
411
415
|
return flops * imgsz[0] / stride * imgsz[1] / stride # imgsz GFLOPs
|
412
416
|
except Exception:
|
413
|
-
# Use actual image size
|
417
|
+
# Method 2: Use actual image size (required for RTDETR models)
|
414
418
|
im = torch.empty((1, p.shape[1], *imgsz), device=p.device) # input image in BCHW format
|
415
419
|
return thop.profile(deepcopy(model), inputs=[im], verbose=False)[0] / 1e9 * 2 # imgsz GFLOPs
|
416
420
|
except Exception:
|
@@ -611,10 +615,10 @@ def unset_deterministic():
|
|
611
615
|
|
612
616
|
class ModelEMA:
|
613
617
|
"""
|
614
|
-
Updated Exponential Moving Average (EMA)
|
618
|
+
Updated Exponential Moving Average (EMA) implementation.
|
615
619
|
|
616
620
|
Keeps a moving average of everything in the model state_dict (parameters and buffers).
|
617
|
-
For EMA details see
|
621
|
+
For EMA details see References.
|
618
622
|
|
619
623
|
To disable EMA set the `enabled` attribute to `False`.
|
620
624
|
|
@@ -623,6 +627,10 @@ class ModelEMA:
|
|
623
627
|
updates (int): Number of EMA updates.
|
624
628
|
decay (function): Decay function that determines the EMA weight.
|
625
629
|
enabled (bool): Whether EMA is enabled.
|
630
|
+
|
631
|
+
References:
|
632
|
+
- https://github.com/rwightman/pytorch-image-models
|
633
|
+
- https://www.tensorflow.org/api_docs/python/tf/train/ExponentialMovingAverage
|
626
634
|
"""
|
627
635
|
|
628
636
|
def __init__(self, model, decay=0.9999, tau=2000, updates=0):
|
ultralytics/utils/tuner.py
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
|
2
2
|
|
3
3
|
from ultralytics.cfg import TASK2DATA, TASK2METRIC, get_cfg, get_save_dir
|
4
|
-
from ultralytics.utils import DEFAULT_CFG, DEFAULT_CFG_DICT, LOGGER, NUM_THREADS, checks
|
4
|
+
from ultralytics.utils import DEFAULT_CFG, DEFAULT_CFG_DICT, LOGGER, NUM_THREADS, checks, colorstr
|
5
5
|
|
6
6
|
|
7
7
|
def run_ray_tune(
|
@@ -95,7 +95,7 @@ def run_ray_tune(
|
|
95
95
|
return results.results_dict
|
96
96
|
|
97
97
|
# Get search space
|
98
|
-
if not space:
|
98
|
+
if not space and not train_args.get("resume"):
|
99
99
|
space = default_space
|
100
100
|
LOGGER.warning("WARNING ⚠️ search space not provided, using default search space.")
|
101
101
|
|
@@ -123,15 +123,23 @@ def run_ray_tune(
|
|
123
123
|
|
124
124
|
# Create the Ray Tune hyperparameter search tuner
|
125
125
|
tune_dir = get_save_dir(
|
126
|
-
get_cfg(
|
126
|
+
get_cfg(
|
127
|
+
DEFAULT_CFG,
|
128
|
+
{**train_args, **{"exist_ok": train_args.pop("resume", False)}}, # resume w/ same tune_dir
|
129
|
+
),
|
130
|
+
name=train_args.pop("name", "tune"), # runs/{task}/{tune_dir}
|
127
131
|
).resolve() # must be absolute dir
|
128
132
|
tune_dir.mkdir(parents=True, exist_ok=True)
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
133
|
+
if tune.Tuner.can_restore(tune_dir):
|
134
|
+
LOGGER.info(f"{colorstr('Tuner: ')} Resuming tuning run {tune_dir}...")
|
135
|
+
tuner = tune.Tuner.restore(str(tune_dir), trainable=trainable_with_resources, resume_errored=True)
|
136
|
+
else:
|
137
|
+
tuner = tune.Tuner(
|
138
|
+
trainable_with_resources,
|
139
|
+
param_space=space,
|
140
|
+
tune_config=tune.TuneConfig(scheduler=asha_scheduler, num_samples=max_samples),
|
141
|
+
run_config=RunConfig(callbacks=tuner_callbacks, storage_path=tune_dir.parent, name=tune_dir.name),
|
142
|
+
)
|
135
143
|
|
136
144
|
# Run the hyperparameter search
|
137
145
|
tuner.fit()
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.103
|
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>
|
@@ -70,8 +70,8 @@ Requires-Dist: keras; extra == "export"
|
|
70
70
|
Requires-Dist: flatbuffers<100,>=23.5.26; platform_machine == "aarch64" and extra == "export"
|
71
71
|
Requires-Dist: h5py!=3.11.0; platform_machine == "aarch64" and extra == "export"
|
72
72
|
Provides-Extra: solutions
|
73
|
-
Requires-Dist: shapely
|
74
|
-
Requires-Dist: streamlit; extra == "solutions"
|
73
|
+
Requires-Dist: shapely<2.1.0,>=2.0.0; extra == "solutions"
|
74
|
+
Requires-Dist: streamlit<1.44.0,>=1.29.0; extra == "solutions"
|
75
75
|
Provides-Extra: logging
|
76
76
|
Requires-Dist: comet; extra == "logging"
|
77
77
|
Requires-Dist: tensorboard>=2.13.0; extra == "logging"
|
@@ -3,14 +3,14 @@ tests/conftest.py,sha256=rsIAipRKfrVNoTaJ1LdpYue8AbcJ_fr3d3WIlM_6uXY,2982
|
|
3
3
|
tests/test_cli.py,sha256=DPxUjcGAex_cmGMNaRIK7mT7wrILWaPBtlfXuHQpveI,5284
|
4
4
|
tests/test_cuda.py,sha256=0uvTF4bY_Grsd_Xgtp7TdIEgMpUqKv8_kWA82NYDl_g,6260
|
5
5
|
tests/test_engine.py,sha256=aGqZ8P7QO5C_nOa1b4FOyk92Ysdk5WiP-ST310Vyxys,4962
|
6
|
-
tests/test_exports.py,sha256=
|
6
|
+
tests/test_exports.py,sha256=dhZn86LdbapW15RthQF870LGxDjC1MUZhlGdBgPmgIQ,9716
|
7
7
|
tests/test_integrations.py,sha256=ZgpddWHEVqiP4bGhVw8fLc2wdz0rCxuxr0FQ2dTgnIE,6067
|
8
8
|
tests/test_python.py,sha256=Xrxx-Cul4xumA5qDCnduXOA3InfADT3jrtnEh4jpOeY,24638
|
9
9
|
tests/test_solutions.py,sha256=FrQfIjjFeOf3kLU6-1mC7qOhgEkWFuc5Djc2sf2dQHU,5532
|
10
|
-
ultralytics/__init__.py,sha256=
|
10
|
+
ultralytics/__init__.py,sha256=eLvuHAOilZjuxx9JiZennZVVDKbymiy8fSI1S3uu6lE,730
|
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=
|
13
|
+
ultralytics/cfg/__init__.py,sha256=fmoJOyFlUaZFR1dso6I0wS6YXUSMFRh_PmC00_9DOiI,39902
|
14
14
|
ultralytics/cfg/default.yaml,sha256=tHE_VB_tzq5K1BntCCukmFIViwiRv0R-H6ZNucCnYsY,8469
|
15
15
|
ultralytics/cfg/datasets/Argoverse.yaml,sha256=_xlEDIJ9XkUo0v_iNL7FW079BoSeZtKSuLteKTtGbA8,3275
|
16
16
|
ultralytics/cfg/datasets/DOTAv1.5.yaml,sha256=SHND_CFkojxw5iQD5Mcgju2kCZIl0gW2ajuzv1cqoL0,1224
|
@@ -111,12 +111,12 @@ ultralytics/data/loaders.py,sha256=_Gyp_BfGTZwsFdn4UnolXxdU_sAYZLIrv0L2TRI9R5g,2
|
|
111
111
|
ultralytics/data/split_dota.py,sha256=p8eVGht9tABSVbf9vwvxA_AQYEva3IGHePKlMeNrn64,11872
|
112
112
|
ultralytics/data/utils.py,sha256=aRPwIoLrCML_Kcd0dI9B6c5Ct4dvhdF36rDHtuf7Ww4,33217
|
113
113
|
ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
114
|
-
ultralytics/engine/exporter.py,sha256=
|
114
|
+
ultralytics/engine/exporter.py,sha256=Tt6hfbdyytFVlC5y8lIEdg9UXU3HwIYohsC8vJv8jtw,78052
|
115
115
|
ultralytics/engine/model.py,sha256=YgQKYZrPENSTvLENspg-bXI9FinzzWARfb0U-C9vH-M,52916
|
116
116
|
ultralytics/engine/predictor.py,sha256=fRUh82EJlu_6ZlIy8NFovlCcgX53UbRYSXcLljOs7Sc,21669
|
117
117
|
ultralytics/engine/results.py,sha256=H3pFJhUjYKvVyOUqqZjfIn8vnCpl81aYNOnregMrBoQ,79716
|
118
118
|
ultralytics/engine/trainer.py,sha256=KAeiNoH5NIRhQPIfr5AhVwDerk9dy0-QJu-FlxtG4xA,38904
|
119
|
-
ultralytics/engine/tuner.py,sha256=
|
119
|
+
ultralytics/engine/tuner.py,sha256=CW6Ys4NV6SVScXA5GQO5DeSIJWys9e_mqUg26b6NYu4,12598
|
120
120
|
ultralytics/engine/validator.py,sha256=Xijg74RHn43ANjQJaBJ4zZkWd0MMPUH2TzfmydAMbzk,16974
|
121
121
|
ultralytics/hub/__init__.py,sha256=wDtAUKdfqob95tfFHgDJFXcsNSDSdoIQkJTm-CfIUTI,6616
|
122
122
|
ultralytics/hub/auth.py,sha256=QShM9RGDwaNgZlNLfLg9Ui-awj55fTRRK9yFDGlwwZ8,5556
|
@@ -186,8 +186,8 @@ ultralytics/models/yolo/yoloe/train.py,sha256=7JxJkMN9bkUGsO-RojFG2Q3yfdKhb-TXlB
|
|
186
186
|
ultralytics/models/yolo/yoloe/train_seg.py,sha256=JguKB1ez8Rf7XBu_D_mWHMLJto7y7Kr2m0Tq2NwDtwU,5269
|
187
187
|
ultralytics/models/yolo/yoloe/val.py,sha256=n-wDJprRMqqio6Ndsg_OpjNJQCPy_wIMzPMzecESzjs,8244
|
188
188
|
ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
|
189
|
-
ultralytics/nn/autobackend.py,sha256=
|
190
|
-
ultralytics/nn/tasks.py,sha256=
|
189
|
+
ultralytics/nn/autobackend.py,sha256=Y597hrrvhHlRX5SoOiXJZXj_1ND9kHMn94V2m_saRAU,38871
|
190
|
+
ultralytics/nn/tasks.py,sha256=r9CoXW9owNK5UWH2ufM5cyG3DB5TEEIX-JmhTSECCN8,62991
|
191
191
|
ultralytics/nn/text_model.py,sha256=H6OiLe0FOyZY4pd7-ixRTxaBgx3lOc2GmGTmrFnoJd0,10136
|
192
192
|
ultralytics/nn/modules/__init__.py,sha256=dXLtIk9rt944WfsTdpgEdWOg3HQEHdwQztuZ6WNJygs,3144
|
193
193
|
ultralytics/nn/modules/activation.py,sha256=PvXZkA9AzEntR575JkFORdmtcRwATyy0lje-uHA5_8w,2210
|
@@ -201,7 +201,7 @@ ultralytics/solutions/ai_gym.py,sha256=oOexy2cT59u9X6ROCwoaV3Nl2zT2xJ_trShAoSyR8
|
|
201
201
|
ultralytics/solutions/analytics.py,sha256=O8dXdDTpHPRlz2vAGMvef1NfWUXBvoYt2G_TQI_UjoQ,11983
|
202
202
|
ultralytics/solutions/distance_calculation.py,sha256=n6bPNJ7YbPKAaHWsra6CQQtrDR0SEvSC14BRWTITyBU,5711
|
203
203
|
ultralytics/solutions/heatmap.py,sha256=dagbZ0Vn4UdywNyiAypYW5v1uzOWf521QrkzmqyeCEc,5626
|
204
|
-
ultralytics/solutions/instance_segmentation.py,sha256=
|
204
|
+
ultralytics/solutions/instance_segmentation.py,sha256=q8vXQmnoqbiExq3CVYMybkdJ7X2AZWsExUA0--3d_5w,3505
|
205
205
|
ultralytics/solutions/object_blurrer.py,sha256=9Qzs8M3YI--FoWvihMytFdtnhin6gQ0l_uy6CsdoF9U,3896
|
206
206
|
ultralytics/solutions/object_counter.py,sha256=_5XsW6TwIh7_PK1d8Ny-Xd1a-pqTAzIDV02bHysnJmY,9881
|
207
207
|
ultralytics/solutions/object_cropper.py,sha256=AlIM-RnqFRogAY8JilE0KnbzFMulaIYJGPpn1nFRL5w,3386
|
@@ -209,7 +209,7 @@ ultralytics/solutions/parking_management.py,sha256=uojHB17GxzFgzEmCBTEW5XK2h3ONj
|
|
209
209
|
ultralytics/solutions/queue_management.py,sha256=cUzAMMeWijowkdiuaSUZRr0S3I5MTHkCQOLjOqS0JN0,4299
|
210
210
|
ultralytics/solutions/region_counter.py,sha256=LKZuykgmnevKKzYifyeHQwQroF7tJJIPI6HVXi5mb9M,5299
|
211
211
|
ultralytics/solutions/security_alarm.py,sha256=KLP1R5qAFcmMliHfsuYNS_k-E1vGbOccLrzbmcpp4xQ,6254
|
212
|
-
ultralytics/solutions/solutions.py,sha256=
|
212
|
+
ultralytics/solutions/solutions.py,sha256=LROzwtuNnpktuOmVWw82vItT_5mTaQSS_o7ZSi4zwtI,31771
|
213
213
|
ultralytics/solutions/speed_estimation.py,sha256=Ewx389Z8sVL7NTEV7Hc9JbRBR0NMthGiIJk7-gyzD2Q,5149
|
214
214
|
ultralytics/solutions/streamlit_inference.py,sha256=M0ppTFInqSPrdytZBLH8x-XoA7zFc7PaRQ51wHG9ppU,9846
|
215
215
|
ultralytics/solutions/trackzone.py,sha256=05XVTQVCGHFAuFNPzyv0VXKQSJKiyWkU6zkXVo4_dxw,3792
|
@@ -233,14 +233,14 @@ ultralytics/utils/errors.py,sha256=vY9h2evFSrHnZdHJVVrmm8Zzw4qVDLyo9DeYW5g0dFk,1
|
|
233
233
|
ultralytics/utils/files.py,sha256=0K4O1cgqRiXaDw7EQK13TqA5SME_RrvfDVQSPetNr5w,8042
|
234
234
|
ultralytics/utils/instance.py,sha256=UOEsXR9V-bXNRk6BTonASBEgeMqvzzAk4S7VdXZJUAM,18090
|
235
235
|
ultralytics/utils/loss.py,sha256=us3lwmSlIwEzoMztNjpet7Kb1r1-sMGyESykqgYPDVo,36945
|
236
|
-
ultralytics/utils/metrics.py,sha256=
|
236
|
+
ultralytics/utils/metrics.py,sha256=_b9StWmh0QuE4jAeNxhREdUbateJJieM98k1L1BD0Ek,53668
|
237
237
|
ultralytics/utils/ops.py,sha256=Ag69Hvy8HxKLvewrtfQRseveboc_RGzlMYmO1B2U1Lk,34215
|
238
238
|
ultralytics/utils/patches.py,sha256=auTWwYBieowiwH7ww1FgR67JSPkKr_7-PGA1SCYXB4A,4569
|
239
239
|
ultralytics/utils/plotting.py,sha256=wAg_z9ik6Wi3XZCfKO2K6TWV1G0TcLEkjxxz2H42CX8,46703
|
240
240
|
ultralytics/utils/tal.py,sha256=B-NV9qC3WIiKDcRWgJB2RN1r6aA0UUp0lL7RFwYhYK4,20814
|
241
|
-
ultralytics/utils/torch_utils.py,sha256=
|
241
|
+
ultralytics/utils/torch_utils.py,sha256=7O0sJhISx3RzQI6uRtx2ZhJm-qNEYF359qXwQFL99pw,38894
|
242
242
|
ultralytics/utils/triton.py,sha256=xK9Db_ZUVDnIK1u76S2G-6ulIBsLfj9HN_YOaSrnMuU,5304
|
243
|
-
ultralytics/utils/tuner.py,sha256=
|
243
|
+
ultralytics/utils/tuner.py,sha256=JBarTM7E8AC6ZLfRf8XCE5s_nwzEAp-dU4wM9MKDQ5k,6476
|
244
244
|
ultralytics/utils/callbacks/__init__.py,sha256=hzL63Rce6VkZhP4Lcim9LKjadixaQG86nKqPhk7IkS0,242
|
245
245
|
ultralytics/utils/callbacks/base.py,sha256=p8YCeYDp4GLcyHWFZxC2Wxr2IXLw_MfIE5ef1fOQcWk,6848
|
246
246
|
ultralytics/utils/callbacks/clearml.py,sha256=jxTL2QSt8Cjp_BkK2XUDPg5t2XnykMYXJFRp6B66ulA,6005
|
@@ -252,9 +252,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=XXnnKQ-MoLIexl8y2Vb0i-cCLyePE0n5BU
|
|
252
252
|
ultralytics/utils/callbacks/raytune.py,sha256=omVZNNuzYxsZZXrF9xpbFv7R1Wjdx1j-gv0xXuZrQas,1122
|
253
253
|
ultralytics/utils/callbacks/tensorboard.py,sha256=7eUX21_Ym7i6iN4euZzrqglphyl5xak1yl_-wfFshbg,5502
|
254
254
|
ultralytics/utils/callbacks/wb.py,sha256=iDRFXI4IIDm8R5OI89DMTmjs8aHLo1HRCLkOFKdaMG4,7507
|
255
|
-
ultralytics-8.3.
|
256
|
-
ultralytics-8.3.
|
257
|
-
ultralytics-8.3.
|
258
|
-
ultralytics-8.3.
|
259
|
-
ultralytics-8.3.
|
260
|
-
ultralytics-8.3.
|
255
|
+
ultralytics-8.3.103.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
256
|
+
ultralytics-8.3.103.dist-info/METADATA,sha256=x_z2b3rRWJiP_P8y0fEjNHXQHwrcDp04hEPb-rxCL8M,37355
|
257
|
+
ultralytics-8.3.103.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
|
258
|
+
ultralytics-8.3.103.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
259
|
+
ultralytics-8.3.103.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
260
|
+
ultralytics-8.3.103.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|