ultralytics 8.3.8__py3-none-any.whl → 8.3.9__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.
- tests/test_solutions.py +2 -5
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/solutions/default.yaml +9 -9
- ultralytics/engine/trainer.py +7 -8
- ultralytics/nn/autobackend.py +2 -2
- ultralytics/nn/tasks.py +2 -2
- ultralytics/solutions/speed_estimation.py +39 -79
- ultralytics/utils/autobatch.py +1 -1
- ultralytics/utils/callbacks/clearml.py +2 -2
- ultralytics/utils/callbacks/comet.py +4 -4
- ultralytics/utils/callbacks/mlflow.py +1 -1
- ultralytics/utils/callbacks/neptune.py +5 -1
- ultralytics/utils/callbacks/wb.py +1 -1
- {ultralytics-8.3.8.dist-info → ultralytics-8.3.9.dist-info}/METADATA +1 -1
- {ultralytics-8.3.8.dist-info → ultralytics-8.3.9.dist-info}/RECORD +19 -19
- {ultralytics-8.3.8.dist-info → ultralytics-8.3.9.dist-info}/LICENSE +0 -0
- {ultralytics-8.3.8.dist-info → ultralytics-8.3.9.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.8.dist-info → ultralytics-8.3.9.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.8.dist-info → ultralytics-8.3.9.dist-info}/top_level.txt +0 -0
tests/test_solutions.py
CHANGED
|
@@ -14,24 +14,21 @@ WORKOUTS_SOLUTION_DEMO = "https://github.com/ultralytics/assets/releases/downloa
|
|
|
14
14
|
def test_major_solutions():
|
|
15
15
|
"""Test the object counting, heatmap, speed estimation and queue management solution."""
|
|
16
16
|
safe_download(url=MAJOR_SOLUTIONS_DEMO)
|
|
17
|
-
model = YOLO("yolo11n.pt")
|
|
18
|
-
names = model.names
|
|
19
17
|
cap = cv2.VideoCapture("solutions_ci_demo.mp4")
|
|
20
18
|
assert cap.isOpened(), "Error reading video file"
|
|
21
19
|
region_points = [(20, 400), (1080, 404), (1080, 360), (20, 360)]
|
|
22
20
|
counter = solutions.ObjectCounter(region=region_points, model="yolo11n.pt", show=False)
|
|
23
21
|
heatmap = solutions.Heatmap(colormap=cv2.COLORMAP_PARULA, model="yolo11n.pt", show=False)
|
|
24
|
-
speed = solutions.SpeedEstimator(
|
|
22
|
+
speed = solutions.SpeedEstimator(region=region_points, model="yolo11n.pt", show=False)
|
|
25
23
|
queue = solutions.QueueManager(region=region_points, model="yolo11n.pt", show=False)
|
|
26
24
|
while cap.isOpened():
|
|
27
25
|
success, im0 = cap.read()
|
|
28
26
|
if not success:
|
|
29
27
|
break
|
|
30
28
|
original_im0 = im0.copy()
|
|
31
|
-
tracks = model.track(im0, persist=True, show=False)
|
|
32
29
|
_ = counter.count(original_im0.copy())
|
|
33
30
|
_ = heatmap.generate_heatmap(original_im0.copy())
|
|
34
|
-
_ = speed.estimate_speed(original_im0.copy()
|
|
31
|
+
_ = speed.estimate_speed(original_im0.copy())
|
|
35
32
|
_ = queue.process_queue(original_im0.copy())
|
|
36
33
|
cap.release()
|
|
37
34
|
cv2.destroyAllWindows()
|
ultralytics/__init__.py
CHANGED
|
@@ -2,15 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
# Configuration for Ultralytics Solutions
|
|
4
4
|
|
|
5
|
-
model: "yolo11n.pt" # The Ultralytics YOLO11 model to be used (e.g., yolo11n.pt for YOLO11 nano version)
|
|
5
|
+
model: "yolo11n.pt" # The Ultralytics YOLO11 model to be used (e.g., yolo11n.pt for YOLO11 nano version and yolov8n.pt for YOLOv8 nano version)
|
|
6
6
|
|
|
7
|
-
region: # Object counting, queue or speed estimation region points
|
|
8
|
-
line_width: 2 #
|
|
9
|
-
show: True # Flag to control whether to display output image or not
|
|
7
|
+
region: # Object counting, queue or speed estimation region points. Default region points are [(20, 400), (1080, 404), (1080, 360), (20, 360)]
|
|
8
|
+
line_width: 2 # Width of the annotator used to draw regions on the image/video frames + bounding boxes and tracks drawing. Default value is 2.
|
|
9
|
+
show: True # Flag to control whether to display output image or not, you can set this as False i.e. when deploying it on some embedded devices.
|
|
10
10
|
show_in: True # Flag to display objects moving *into* the defined region
|
|
11
11
|
show_out: True # Flag to display objects moving *out of* the defined region
|
|
12
|
-
classes: # To count specific classes
|
|
13
|
-
up_angle: 145.0 # Workouts up_angle for counts, 145.0 is default value
|
|
14
|
-
down_angle: 90 # Workouts down_angle for counts, 90 is default value
|
|
15
|
-
kpts: [6, 8, 10] # Keypoints for workouts monitoring
|
|
16
|
-
colormap: # Colormap for heatmap
|
|
12
|
+
classes: # To count specific classes. i.e, if you want to detect, track and count the person with COCO model, you can use classes=0, Default its None
|
|
13
|
+
up_angle: 145.0 # Workouts up_angle for counts, 145.0 is default value. You can adjust it for different workouts, based on position of keypoints.
|
|
14
|
+
down_angle: 90 # Workouts down_angle for counts, 90 is default value. You can change it for different workouts, based on position of keypoints.
|
|
15
|
+
kpts: [6, 8, 10] # Keypoints for workouts monitoring, i.e. If you want to consider keypoints for pushups that have mostly values of [6, 8, 10].
|
|
16
|
+
colormap: # Colormap for heatmap, Only OPENCV supported colormaps can be used. By default COLORMAP_PARULA will be used for visualization.
|
ultralytics/engine/trainer.py
CHANGED
|
@@ -469,11 +469,9 @@ class BaseTrainer:
|
|
|
469
469
|
|
|
470
470
|
if RANK in {-1, 0}:
|
|
471
471
|
# Do final val with best.pt
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
LOGGER.info(f"\n{epochs} epochs completed in {seconds / 3600:.3f} hours.")
|
|
472
|
+
seconds = time.time() - self.train_time_start
|
|
473
|
+
LOGGER.info(f"\n{epoch - self.start_epoch + 1} epochs completed in {seconds / 3600:.3f} hours.")
|
|
475
474
|
self.final_eval()
|
|
476
|
-
self.validator.metrics.training = {"epochs": epochs, "seconds": seconds} # add training speed
|
|
477
475
|
if self.args.plots:
|
|
478
476
|
self.plot_metrics()
|
|
479
477
|
self.run_callbacks("on_train_end")
|
|
@@ -504,7 +502,7 @@ class BaseTrainer:
|
|
|
504
502
|
"""Read results.csv into a dict using pandas."""
|
|
505
503
|
import pandas as pd # scope for faster 'import ultralytics'
|
|
506
504
|
|
|
507
|
-
return
|
|
505
|
+
return pd.read_csv(self.csv).to_dict(orient="list")
|
|
508
506
|
|
|
509
507
|
def save_model(self):
|
|
510
508
|
"""Save model training checkpoints with additional metadata."""
|
|
@@ -654,10 +652,11 @@ class BaseTrainer:
|
|
|
654
652
|
def save_metrics(self, metrics):
|
|
655
653
|
"""Saves training metrics to a CSV file."""
|
|
656
654
|
keys, vals = list(metrics.keys()), list(metrics.values())
|
|
657
|
-
n = len(metrics) +
|
|
658
|
-
s = "" if self.csv.exists() else (("%
|
|
655
|
+
n = len(metrics) + 2 # number of cols
|
|
656
|
+
s = "" if self.csv.exists() else (("%s," * n % tuple(["epoch", "time"] + keys)).rstrip(",") + "\n") # header
|
|
657
|
+
t = time.time() - self.train_time_start
|
|
659
658
|
with open(self.csv, "a") as f:
|
|
660
|
-
f.write(s + ("
|
|
659
|
+
f.write(s + ("%.6g," * n % tuple([self.epoch + 1, t] + vals)).rstrip(",") + "\n")
|
|
661
660
|
|
|
662
661
|
def plot_metrics(self):
|
|
663
662
|
"""Plot and display metrics visually."""
|
ultralytics/nn/autobackend.py
CHANGED
|
@@ -265,8 +265,8 @@ class AutoBackend(nn.Module):
|
|
|
265
265
|
if -1 in tuple(model.get_tensor_shape(name)):
|
|
266
266
|
dynamic = True
|
|
267
267
|
context.set_input_shape(name, tuple(model.get_tensor_profile_shape(name, 0)[1]))
|
|
268
|
-
|
|
269
|
-
|
|
268
|
+
if dtype == np.float16:
|
|
269
|
+
fp16 = True
|
|
270
270
|
else:
|
|
271
271
|
output_names.append(name)
|
|
272
272
|
shape = tuple(context.get_tensor_shape(name))
|
ultralytics/nn/tasks.py
CHANGED
|
@@ -1061,10 +1061,10 @@ def parse_model(d, ch, verbose=True): # model_dict, input_channels(3)
|
|
|
1061
1061
|
|
|
1062
1062
|
m_ = nn.Sequential(*(m(*args) for _ in range(n))) if n > 1 else m(*args) # module
|
|
1063
1063
|
t = str(m)[8:-2].replace("__main__.", "") # module type
|
|
1064
|
-
|
|
1064
|
+
m_.np = sum(x.numel() for x in m_.parameters()) # number params
|
|
1065
1065
|
m_.i, m_.f, m_.type = i, f, t # attach index, 'from' index, type
|
|
1066
1066
|
if verbose:
|
|
1067
|
-
LOGGER.info(f"{i:>3}{str(f):>20}{n_:>3}{
|
|
1067
|
+
LOGGER.info(f"{i:>3}{str(f):>20}{n_:>3}{m_.np:10.0f} {t:<45}{str(args):<30}") # print
|
|
1068
1068
|
save.extend(x % i for x in ([f] if isinstance(f, int) else f) if x != -1) # append to savelist
|
|
1069
1069
|
layers.append(m_)
|
|
1070
1070
|
if i == 0:
|
|
@@ -1,116 +1,76 @@
|
|
|
1
1
|
# Ultralytics YOLO 🚀, AGPL-3.0 license
|
|
2
2
|
|
|
3
|
-
from collections import defaultdict
|
|
4
3
|
from time import time
|
|
5
4
|
|
|
6
|
-
import cv2
|
|
7
5
|
import numpy as np
|
|
8
6
|
|
|
9
|
-
from ultralytics.
|
|
7
|
+
from ultralytics.solutions.solutions import BaseSolution, LineString
|
|
10
8
|
from ultralytics.utils.plotting import Annotator, colors
|
|
11
9
|
|
|
12
10
|
|
|
13
|
-
class SpeedEstimator:
|
|
11
|
+
class SpeedEstimator(BaseSolution):
|
|
14
12
|
"""A class to estimate the speed of objects in a real-time video stream based on their tracks."""
|
|
15
13
|
|
|
16
|
-
def __init__(self,
|
|
17
|
-
"""
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
Args:
|
|
21
|
-
names (dict): Dictionary of class names.
|
|
22
|
-
reg_pts (list, optional): List of region points for speed estimation. Defaults to [(20, 400), (1260, 400)].
|
|
23
|
-
view_img (bool, optional): Whether to display the image with annotations. Defaults to False.
|
|
24
|
-
line_thickness (int, optional): Thickness of the lines for drawing boxes and tracks. Defaults to 2.
|
|
25
|
-
spdl_dist_thresh (int, optional): Distance threshold for speed calculation. Defaults to 10.
|
|
26
|
-
"""
|
|
27
|
-
# Region information
|
|
28
|
-
self.reg_pts = reg_pts if reg_pts is not None else [(20, 400), (1260, 400)]
|
|
14
|
+
def __init__(self, **kwargs):
|
|
15
|
+
"""Initializes the SpeedEstimator with the given parameters."""
|
|
16
|
+
super().__init__(**kwargs)
|
|
29
17
|
|
|
30
|
-
self.
|
|
18
|
+
self.initialize_region() # Initialize speed region
|
|
31
19
|
|
|
32
|
-
# Tracking information
|
|
33
|
-
self.trk_history = defaultdict(list)
|
|
34
|
-
|
|
35
|
-
self.view_img = view_img # bool for displaying inference
|
|
36
|
-
self.tf = line_thickness # line thickness for annotator
|
|
37
20
|
self.spd = {} # set for speed data
|
|
38
21
|
self.trkd_ids = [] # list for already speed_estimated and tracked ID's
|
|
39
|
-
self.spdl = spdl_dist_thresh # Speed line distance threshold
|
|
40
22
|
self.trk_pt = {} # set for tracks previous time
|
|
41
23
|
self.trk_pp = {} # set for tracks previous point
|
|
42
24
|
|
|
43
|
-
|
|
44
|
-
self.env_check = check_imshow(warn=True)
|
|
45
|
-
|
|
46
|
-
def estimate_speed(self, im0, tracks):
|
|
25
|
+
def estimate_speed(self, im0):
|
|
47
26
|
"""
|
|
48
27
|
Estimates the speed of objects based on tracking data.
|
|
49
28
|
|
|
50
29
|
Args:
|
|
51
|
-
im0 (ndarray):
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
Returns:
|
|
55
|
-
(ndarray): The image with annotated boxes and tracks.
|
|
30
|
+
im0 (ndarray): The input image that will be used for processing
|
|
31
|
+
Returns
|
|
32
|
+
im0 (ndarray): The processed image for more usage
|
|
56
33
|
"""
|
|
57
|
-
|
|
58
|
-
|
|
34
|
+
self.annotator = Annotator(im0, line_width=self.line_width) # Initialize annotator
|
|
35
|
+
self.extract_tracks(im0) # Extract tracks
|
|
59
36
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
annotator = Annotator(im0, line_width=self.tf)
|
|
64
|
-
annotator.draw_region(reg_pts=self.reg_pts, color=(255, 0, 255), thickness=self.tf * 2)
|
|
37
|
+
self.annotator.draw_region(
|
|
38
|
+
reg_pts=self.region, color=(104, 0, 123), thickness=self.line_width * 2
|
|
39
|
+
) # Draw region
|
|
65
40
|
|
|
66
|
-
for box,
|
|
67
|
-
track
|
|
68
|
-
bbox_center = (float((box[0] + box[2]) / 2), float((box[1] + box[3]) / 2))
|
|
69
|
-
track.append(bbox_center)
|
|
41
|
+
for box, track_id, cls in zip(self.boxes, self.track_ids, self.clss):
|
|
42
|
+
self.store_tracking_history(track_id, box) # Store track history
|
|
70
43
|
|
|
71
|
-
if
|
|
72
|
-
|
|
44
|
+
# Check if track_id is already in self.trk_pp or trk_pt initialize if not
|
|
45
|
+
if track_id not in self.trk_pt:
|
|
46
|
+
self.trk_pt[track_id] = 0
|
|
47
|
+
if track_id not in self.trk_pp:
|
|
48
|
+
self.trk_pp[track_id] = self.track_line[-1]
|
|
73
49
|
|
|
74
|
-
|
|
50
|
+
speed_label = f"{int(self.spd[track_id])} km/h" if track_id in self.spd else self.names[int(cls)]
|
|
51
|
+
self.annotator.box_label(box, label=speed_label, color=colors(track_id, True)) # Draw bounding box
|
|
75
52
|
|
|
76
|
-
|
|
77
|
-
|
|
53
|
+
# Draw tracks of objects
|
|
54
|
+
self.annotator.draw_centroid_and_tracks(
|
|
55
|
+
self.track_line, color=colors(int(track_id), True), track_thickness=self.line_width
|
|
56
|
+
)
|
|
78
57
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
annotator.box_label(box, speed_label, bbox_color)
|
|
83
|
-
cv2.polylines(im0, [trk_pts], isClosed=False, color=bbox_color, thickness=self.tf)
|
|
84
|
-
cv2.circle(im0, (int(track[-1][0]), int(track[-1][1])), self.tf * 2, bbox_color, -1)
|
|
85
|
-
|
|
86
|
-
# Calculation of object speed
|
|
87
|
-
if not self.reg_pts[0][0] < track[-1][0] < self.reg_pts[1][0]:
|
|
88
|
-
return
|
|
89
|
-
if self.reg_pts[1][1] - self.spdl < track[-1][1] < self.reg_pts[1][1] + self.spdl:
|
|
90
|
-
direction = "known"
|
|
91
|
-
elif self.reg_pts[0][1] - self.spdl < track[-1][1] < self.reg_pts[0][1] + self.spdl:
|
|
58
|
+
# Calculate object speed and direction based on region intersection
|
|
59
|
+
if LineString([self.trk_pp[track_id], self.track_line[-1]]).intersects(self.l_s):
|
|
92
60
|
direction = "known"
|
|
93
61
|
else:
|
|
94
62
|
direction = "unknown"
|
|
95
63
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
time_difference = time() - self.trk_pt[
|
|
64
|
+
# Perform speed calculation and tracking updates if direction is valid
|
|
65
|
+
if direction == "known" and track_id not in self.trkd_ids:
|
|
66
|
+
self.trkd_ids.append(track_id)
|
|
67
|
+
time_difference = time() - self.trk_pt[track_id]
|
|
100
68
|
if time_difference > 0:
|
|
101
|
-
self.spd[
|
|
102
|
-
|
|
103
|
-
self.trk_pt[t_id] = time()
|
|
104
|
-
self.trk_pp[t_id] = track[-1]
|
|
105
|
-
|
|
106
|
-
if self.view_img and self.env_check:
|
|
107
|
-
cv2.imshow("Ultralytics Speed Estimation", im0)
|
|
108
|
-
if cv2.waitKey(1) & 0xFF == ord("q"):
|
|
109
|
-
return
|
|
69
|
+
self.spd[track_id] = np.abs(self.track_line[-1][1] - self.trk_pp[track_id][1]) / time_difference
|
|
110
70
|
|
|
111
|
-
|
|
71
|
+
self.trk_pt[track_id] = time()
|
|
72
|
+
self.trk_pp[track_id] = self.track_line[-1]
|
|
112
73
|
|
|
74
|
+
self.display_output(im0) # display output with base class function
|
|
113
75
|
|
|
114
|
-
|
|
115
|
-
names = {0: "person", 1: "car"} # example class names
|
|
116
|
-
speed_estimator = SpeedEstimator(names)
|
|
76
|
+
return im0 # return output image for more usage
|
ultralytics/utils/autobatch.py
CHANGED
|
@@ -67,7 +67,7 @@ def autobatch(model, imgsz=640, fraction=0.60, batch_size=DEFAULT_CFG.batch):
|
|
|
67
67
|
LOGGER.info(f"{prefix}{d} ({properties.name}) {t:.2f}G total, {r:.2f}G reserved, {a:.2f}G allocated, {f:.2f}G free")
|
|
68
68
|
|
|
69
69
|
# Profile batch sizes
|
|
70
|
-
batch_sizes = [1, 2, 4, 8, 16]
|
|
70
|
+
batch_sizes = [1, 2, 4, 8, 16] if t < 16 else [1, 2, 4, 8, 16, 32, 64]
|
|
71
71
|
try:
|
|
72
72
|
img = [torch.empty(b, 3, imgsz, imgsz) for b in batch_sizes]
|
|
73
73
|
results = profile(img, model, n=1, device=device)
|
|
@@ -68,9 +68,9 @@ def on_pretrain_routine_start(trainer):
|
|
|
68
68
|
PatchedMatplotlib.update_current_task(None)
|
|
69
69
|
else:
|
|
70
70
|
task = Task.init(
|
|
71
|
-
project_name=trainer.args.project or "
|
|
71
|
+
project_name=trainer.args.project or "Ultralytics",
|
|
72
72
|
task_name=trainer.args.name,
|
|
73
|
-
tags=["
|
|
73
|
+
tags=["Ultralytics"],
|
|
74
74
|
output_uri=True,
|
|
75
75
|
reuse_last_task_id=False,
|
|
76
76
|
auto_connect_frameworks={"pytorch": False, "matplotlib": False},
|
|
@@ -15,7 +15,7 @@ try:
|
|
|
15
15
|
# Ensures certain logging functions only run for supported tasks
|
|
16
16
|
COMET_SUPPORTED_TASKS = ["detect"]
|
|
17
17
|
|
|
18
|
-
# Names of plots created by
|
|
18
|
+
# Names of plots created by Ultralytics that are logged to Comet
|
|
19
19
|
EVALUATION_PLOT_NAMES = "F1_curve", "P_curve", "R_curve", "PR_curve", "confusion_matrix"
|
|
20
20
|
LABEL_PLOT_NAMES = "labels", "labels_correlogram"
|
|
21
21
|
|
|
@@ -31,8 +31,8 @@ def _get_comet_mode():
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
def _get_comet_model_name():
|
|
34
|
-
"""Returns the model name for Comet from the environment variable
|
|
35
|
-
return os.getenv("COMET_MODEL_NAME", "
|
|
34
|
+
"""Returns the model name for Comet from the environment variable COMET_MODEL_NAME or defaults to 'Ultralytics'."""
|
|
35
|
+
return os.getenv("COMET_MODEL_NAME", "Ultralytics")
|
|
36
36
|
|
|
37
37
|
|
|
38
38
|
def _get_eval_batch_logging_interval():
|
|
@@ -110,7 +110,7 @@ def _fetch_trainer_metadata(trainer):
|
|
|
110
110
|
|
|
111
111
|
def _scale_bounding_box_to_original_image_shape(box, resized_image_shape, original_image_shape, ratio_pad):
|
|
112
112
|
"""
|
|
113
|
-
|
|
113
|
+
YOLO resizes images during training and the label values are normalized based on this resized shape.
|
|
114
114
|
|
|
115
115
|
This function rescales the bounding box labels to the original image shape.
|
|
116
116
|
"""
|
|
@@ -71,7 +71,7 @@ def on_pretrain_routine_end(trainer):
|
|
|
71
71
|
mlflow.set_tracking_uri(uri)
|
|
72
72
|
|
|
73
73
|
# Set experiment and run names
|
|
74
|
-
experiment_name = os.environ.get("MLFLOW_EXPERIMENT_NAME") or trainer.args.project or "/Shared/
|
|
74
|
+
experiment_name = os.environ.get("MLFLOW_EXPERIMENT_NAME") or trainer.args.project or "/Shared/Ultralytics"
|
|
75
75
|
run_name = os.environ.get("MLFLOW_RUN") or trainer.args.name
|
|
76
76
|
mlflow.set_experiment(experiment_name)
|
|
77
77
|
|
|
@@ -52,7 +52,11 @@ def on_pretrain_routine_start(trainer):
|
|
|
52
52
|
"""Callback function called before the training routine starts."""
|
|
53
53
|
try:
|
|
54
54
|
global run
|
|
55
|
-
run = neptune.init_run(
|
|
55
|
+
run = neptune.init_run(
|
|
56
|
+
project=trainer.args.project or "Ultralytics",
|
|
57
|
+
name=trainer.args.name,
|
|
58
|
+
tags=["Ultralytics"],
|
|
59
|
+
)
|
|
56
60
|
run["Configuration/Hyperparameters"] = {k: "" if v is None else v for k, v in vars(trainer.args).items()}
|
|
57
61
|
except Exception as e:
|
|
58
62
|
LOGGER.warning(f"WARNING ⚠️ NeptuneAI installed but not initialized correctly, not logging this run. {e}")
|
|
@@ -109,7 +109,7 @@ def _log_plots(plots, step):
|
|
|
109
109
|
|
|
110
110
|
def on_pretrain_routine_start(trainer):
|
|
111
111
|
"""Initiate and start project if module is present."""
|
|
112
|
-
wb.run or wb.init(project=trainer.args.project or "
|
|
112
|
+
wb.run or wb.init(project=trainer.args.project or "Ultralytics", name=trainer.args.name, config=vars(trainer.args))
|
|
113
113
|
|
|
114
114
|
|
|
115
115
|
def on_fit_epoch_end(trainer):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: ultralytics
|
|
3
|
-
Version: 8.3.
|
|
3
|
+
Version: 8.3.9
|
|
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,8 +7,8 @@ tests/test_explorer.py,sha256=9EeMtt4-K3-MeGnAc7NemTg3uTo-Xr6AYJlTJZJJeF8,2572
|
|
|
7
7
|
tests/test_exports.py,sha256=fpTKEVBUGLF3WiZPNKRs-IEcIY4cfxgvgKjUNfodjww,8042
|
|
8
8
|
tests/test_integrations.py,sha256=f5-QCUk1SU_-qn4mBCZwS3GN3tXEBIIXo4z2EhExbHw,6126
|
|
9
9
|
tests/test_python.py,sha256=I1RRdCwLdrc3jX06huVxct8HX8ccQOmQgVpuEflRl0U,23560
|
|
10
|
-
tests/test_solutions.py,sha256=
|
|
11
|
-
ultralytics/__init__.py,sha256=
|
|
10
|
+
tests/test_solutions.py,sha256=dpxWGKO-aJ3Yff4KR7BQGajX9VyFdGTWEtcbmFC3WwE,3005
|
|
11
|
+
ultralytics/__init__.py,sha256=kKW4tliZreJmH3V6DWiiMAz_zr3td0m2oDNptee7Y5U,752
|
|
12
12
|
ultralytics/assets/bus.jpg,sha256=wCAZxJecGR63Od3ZRERe9Aja1Weayrb9Ug751DS_vGM,137419
|
|
13
13
|
ultralytics/assets/zidane.jpg,sha256=Ftc4aeMmen1O0A3o6GCDO9FlfBslLpTAw0gnetx7bts,50427
|
|
14
14
|
ultralytics/cfg/__init__.py,sha256=N-XONBXwmD3vzoE4icBXznkV8LOLmf6ak6mRdGPucvw,33146
|
|
@@ -86,7 +86,7 @@ ultralytics/cfg/models/v9/yolov9e.yaml,sha256=dhaR47WxuLOrZWDCceS4bQG00sQdrMc8FQ
|
|
|
86
86
|
ultralytics/cfg/models/v9/yolov9m.yaml,sha256=l6CmivzNu44sRVmkQXk4-tXflbV1nWnk5MSc8su2vhs,1311
|
|
87
87
|
ultralytics/cfg/models/v9/yolov9s.yaml,sha256=lPWcu-6ub1kCBD6zIDFwthYZ3RvdJfODWKy3vEQWRjo,1291
|
|
88
88
|
ultralytics/cfg/models/v9/yolov9t.yaml,sha256=qL__kr6GoefpQWP4jV0jdzwTp46bdFUcqtPRnfDbkY8,1275
|
|
89
|
-
ultralytics/cfg/solutions/default.yaml,sha256=
|
|
89
|
+
ultralytics/cfg/solutions/default.yaml,sha256=CByxINYMyoGzGKdurDk2GhYc8XOa8Z6H7CZx7uZSPpc,1532
|
|
90
90
|
ultralytics/cfg/trackers/botsort.yaml,sha256=8B0xNbnG_E-9DCUpap72PWkUgBb1AjuApEn7gHiVngE,916
|
|
91
91
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=8vpTZ2x9mhRXJymoJvs1G8kTXo_HxbSwHup2FQALT3A,721
|
|
92
92
|
ultralytics/data/__init__.py,sha256=VGe-ATG7j35F4A4r8Jmzffjlhve4JAJPgRa5ahKTU18,616
|
|
@@ -109,7 +109,7 @@ ultralytics/engine/exporter.py,sha256=DeHW_T_Zd3A21BLQYV1-FnS5EcmepMOy9nrussYNie
|
|
|
109
109
|
ultralytics/engine/model.py,sha256=Vtkza7cQrxvowb0PqGFhp7eC3cXRIKj6OUaR5d9w1-U,51464
|
|
110
110
|
ultralytics/engine/predictor.py,sha256=MgMWHUJdRcVCaVmOyvdy2Gjk_EyRHv-ar0SSGxQe8F4,17471
|
|
111
111
|
ultralytics/engine/results.py,sha256=8RJlN8J-_9w-mrDZm9wC-DZJTPBS7v1c_r_R173QyRM,75043
|
|
112
|
-
ultralytics/engine/trainer.py,sha256=
|
|
112
|
+
ultralytics/engine/trainer.py,sha256=6dGOEZvMo3o97SLpKlcR5XmhWhUHh05uLYpj3jNn0jU,36981
|
|
113
113
|
ultralytics/engine/tuner.py,sha256=gPqDTHH7vRB2O3YyH26m1BjVKbXxuA2XAlPRzTKFZsc,11838
|
|
114
114
|
ultralytics/engine/validator.py,sha256=2C_qXI36Z9rLOpmS0YR8Qe3ka4p23YiH2w5ai7-XBwE,14811
|
|
115
115
|
ultralytics/hub/__init__.py,sha256=3SKvZ5aRina3h94xMPQIB3D4maF62qFcyIqPPHRHNAc,5644
|
|
@@ -175,8 +175,8 @@ ultralytics/models/yolo/world/__init__.py,sha256=3VTH0q4NOt2EWRom15yCymvmvm0Etp2
|
|
|
175
175
|
ultralytics/models/yolo/world/train.py,sha256=gaDrAmLJpg9qDtmL5evA5HsV2yb4RTRSfk2EDYrHdRg,3686
|
|
176
176
|
ultralytics/models/yolo/world/train_world.py,sha256=IsnCEVt6DcM9lUskCKmIN-M8MM79xLpwTRqRoAHUnZ4,4857
|
|
177
177
|
ultralytics/nn/__init__.py,sha256=4BPLHY89xEM_al5uK0aOmFgiML6CMGEZbezxOvTjOEs,587
|
|
178
|
-
ultralytics/nn/autobackend.py,sha256=
|
|
179
|
-
ultralytics/nn/tasks.py,sha256=
|
|
178
|
+
ultralytics/nn/autobackend.py,sha256=aBW_Z8XnSsD-vW7Ek873dyKX9h55XHIYwTG22M3eOIk,31599
|
|
179
|
+
ultralytics/nn/tasks.py,sha256=ssBZR4LY4rvaxYawXq5-yWSBAZ9oCz6BgxWYXB2YD68,48399
|
|
180
180
|
ultralytics/nn/modules/__init__.py,sha256=xhW2BennT9U_VaMXVpRu-bdLgp1BXt9L8mkIUBE3idU,2625
|
|
181
181
|
ultralytics/nn/modules/activation.py,sha256=chhn469wnRHEs5BMGNBYXwPYZc_7-urspTT8fnBd-xA,895
|
|
182
182
|
ultralytics/nn/modules/block.py,sha256=thcIPcnGRRxDDDswywJsfzbewr9XfTrzl_UvSl-bJ3c,41832
|
|
@@ -193,7 +193,7 @@ ultralytics/solutions/object_counter.py,sha256=1Nsivk-cyGBM1G6eWe11_vdDWTdbJwaUF
|
|
|
193
193
|
ultralytics/solutions/parking_management.py,sha256=VgYyhoSEo7fnPegIhNUqnFL0jlMEevALx0QQbzJ3vGI,9049
|
|
194
194
|
ultralytics/solutions/queue_management.py,sha256=5d1RURQiqffAoET8S66gHimK0l3gKNAfuPO5U6_08jc,2716
|
|
195
195
|
ultralytics/solutions/solutions.py,sha256=qWKGlwlH9858GfAdZkcu_QXbrzjTFStDvg16Eky0oyo,3541
|
|
196
|
-
ultralytics/solutions/speed_estimation.py,sha256=
|
|
196
|
+
ultralytics/solutions/speed_estimation.py,sha256=2jLTEdnSF3Mm3Z7QJVPCUq84-7L6ELIJIR_sPFBW_cU,3164
|
|
197
197
|
ultralytics/solutions/streamlit_inference.py,sha256=qA2EtwUC7ADOQ8P-zs3VPyrIoRArhcZz9CxkFbH63bw,5699
|
|
198
198
|
ultralytics/trackers/__init__.py,sha256=j72IgH2dZHQArMPK4YwcV5ieIw94fYvlGdQjB9cOQKw,227
|
|
199
199
|
ultralytics/trackers/basetrack.py,sha256=dXnXW3cxxd7lPm20JJCNO2voCIrQ4vhbNI1g4YEgn-Y,4423
|
|
@@ -205,7 +205,7 @@ ultralytics/trackers/utils/gmc.py,sha256=VcURuY041qGCeWUGMxHZBr10T16LtcMqyv7AmTf
|
|
|
205
205
|
ultralytics/trackers/utils/kalman_filter.py,sha256=cH9zD3fwkuezP97H9mw8cSBN7a8hHKx_Sx1j7t3oYGs,21349
|
|
206
206
|
ultralytics/trackers/utils/matching.py,sha256=3Ie1WNNRZ4_q3365F03XD7Nr9juZB_08mw4yUKC3w74,7162
|
|
207
207
|
ultralytics/utils/__init__.py,sha256=du1Y1LMU0jQn_zWWnAIx9U8wn6Vh7ce-k7qMwi6y0po,48698
|
|
208
|
-
ultralytics/utils/autobatch.py,sha256=
|
|
208
|
+
ultralytics/utils/autobatch.py,sha256=BO9MCRtrLDtrDQaxqV0BdjaYsgXf-q07Y3_VdGp4URY,4330
|
|
209
209
|
ultralytics/utils/benchmarks.py,sha256=8FYp5WPzcxcDaeg8ol2sgzRBHVGYatEO7f3MrmPF6nI,25097
|
|
210
210
|
ultralytics/utils/checks.py,sha256=7oWc91HqQdH9EHuHysxk_ZltiRrGt6eq-pUf0TkA3gU,29579
|
|
211
211
|
ultralytics/utils/dist.py,sha256=NDFga-uKxkBX2zLxFHSene_cCiGQJoyOeCXcN9JIOIk,2358
|
|
@@ -224,18 +224,18 @@ ultralytics/utils/triton.py,sha256=gg1finxno_tY2Ge9PMhmu7PI9wvoFZoiicdT4Bhqv3w,3
|
|
|
224
224
|
ultralytics/utils/tuner.py,sha256=AtEtK6pOt9xVTyx864OpNRVxNdAxz5aKHzveiXwkD1A,6250
|
|
225
225
|
ultralytics/utils/callbacks/__init__.py,sha256=YrWqC3BVVaTLob4iCPR6I36mUxIUOpPJW7B_LjT78Qw,214
|
|
226
226
|
ultralytics/utils/callbacks/base.py,sha256=PHjQ6RITwC2dylCQTB0bdPgAsHjxVeuDb5N1NPTbHGc,5775
|
|
227
|
-
ultralytics/utils/callbacks/clearml.py,sha256=
|
|
228
|
-
ultralytics/utils/callbacks/comet.py,sha256=
|
|
227
|
+
ultralytics/utils/callbacks/clearml.py,sha256=qbLbqzMVWAnjqg5YUM-Ue6CmGueFCvqKpHFKlw-MyVc,5933
|
|
228
|
+
ultralytics/utils/callbacks/comet.py,sha256=DS5w9fgo0eWfjRuIywTlKEv2LY4eOKklEq-DyoIQn7U,13754
|
|
229
229
|
ultralytics/utils/callbacks/dvc.py,sha256=WIClMsuvhiiyrwRv5BsZLxjsxYNJ3Y8Vq7zN0Bthtro,5045
|
|
230
230
|
ultralytics/utils/callbacks/hub.py,sha256=EPewsLigFQc9ucTX2exKSlKBiaBNhYYyGC_nR2ragJo,3997
|
|
231
|
-
ultralytics/utils/callbacks/mlflow.py,sha256=
|
|
232
|
-
ultralytics/utils/callbacks/neptune.py,sha256=
|
|
231
|
+
ultralytics/utils/callbacks/mlflow.py,sha256=mkl_rK0Gy02cXnQUYmzmLE5W97fMgfEb7IlgOAdnjHg,5396
|
|
232
|
+
ultralytics/utils/callbacks/neptune.py,sha256=IbGQfEltamUKXJt93uSLQFn8c2rYh3DMTgVE1xsnmUI,3813
|
|
233
233
|
ultralytics/utils/callbacks/raytune.py,sha256=ODVYzy-CoM4Uge0zjkh3Hnh9nF2M0vhDrSenXnvcizw,705
|
|
234
234
|
ultralytics/utils/callbacks/tensorboard.py,sha256=bv4fkkesdgmZv_E2MU6wuaMBwEV5iI2G53RHPyD9quw,4170
|
|
235
|
-
ultralytics/utils/callbacks/wb.py,sha256=
|
|
236
|
-
ultralytics-8.3.
|
|
237
|
-
ultralytics-8.3.
|
|
238
|
-
ultralytics-8.3.
|
|
239
|
-
ultralytics-8.3.
|
|
240
|
-
ultralytics-8.3.
|
|
241
|
-
ultralytics-8.3.
|
|
235
|
+
ultralytics/utils/callbacks/wb.py,sha256=upfbF8-LLXueUvulLaMDmKDhKCl_PWbNa_87PQ0L0Rc,6752
|
|
236
|
+
ultralytics-8.3.9.dist-info/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
|
237
|
+
ultralytics-8.3.9.dist-info/METADATA,sha256=zlSN3Ydf1s9RX4F0F_V0apmc-8fAwWBctBKsKeej9Tg,34699
|
|
238
|
+
ultralytics-8.3.9.dist-info/WHEEL,sha256=GV9aMThwP_4oNCtvEC2ec3qUYutgWeAzklro_0m4WJQ,91
|
|
239
|
+
ultralytics-8.3.9.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
|
240
|
+
ultralytics-8.3.9.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
|
241
|
+
ultralytics-8.3.9.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|