ultralytics 8.3.113__py3-none-any.whl → 8.3.114__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ultralytics/__init__.py +1 -1
- ultralytics/cfg/datasets/dota8-multispectral.yaml +1 -1
- ultralytics/cfg/trackers/botsort.yaml +4 -3
- ultralytics/engine/exporter.py +1 -1
- ultralytics/models/yolo/detect/predict.py +25 -1
- ultralytics/nn/autobackend.py +1 -1
- ultralytics/trackers/bot_sort.py +32 -8
- ultralytics/trackers/byte_tracker.py +3 -3
- ultralytics/trackers/track.py +20 -1
- ultralytics/utils/ops.py +16 -6
- {ultralytics-8.3.113.dist-info → ultralytics-8.3.114.dist-info}/METADATA +1 -1
- {ultralytics-8.3.113.dist-info → ultralytics-8.3.114.dist-info}/RECORD +16 -16
- {ultralytics-8.3.113.dist-info → ultralytics-8.3.114.dist-info}/WHEEL +0 -0
- {ultralytics-8.3.113.dist-info → ultralytics-8.3.114.dist-info}/entry_points.txt +0 -0
- {ultralytics-8.3.113.dist-info → ultralytics-8.3.114.dist-info}/licenses/LICENSE +0 -0
- {ultralytics-8.3.113.dist-info → ultralytics-8.3.114.dist-info}/top_level.txt +0 -0
ultralytics/__init__.py
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
# parent
|
7
7
|
# ├── ultralytics
|
8
8
|
# └── datasets
|
9
|
-
# └── dota8-multispectral ← downloads here (
|
9
|
+
# └── dota8-multispectral ← downloads here (37.3MB)
|
10
10
|
|
11
11
|
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
|
12
12
|
path: ../datasets/dota8-multispectral # dataset root dir
|
@@ -15,7 +15,8 @@ fuse_score: True # Whether to fuse confidence scores with the iou distances befo
|
|
15
15
|
|
16
16
|
# BoT-SORT settings
|
17
17
|
gmc_method: sparseOptFlow # method of global motion compensation
|
18
|
-
# ReID model related thresh
|
19
|
-
proximity_thresh: 0.5
|
20
|
-
appearance_thresh: 0.25
|
18
|
+
# ReID model related thresh
|
19
|
+
proximity_thresh: 0.5 # minimum IoU for valid match with ReID
|
20
|
+
appearance_thresh: 0.25 # minimum appearance similarity for ReID
|
21
21
|
with_reid: False
|
22
|
+
model: auto # uses native features if detector is YOLO else yolo11n-cls.pt
|
ultralytics/engine/exporter.py
CHANGED
@@ -351,7 +351,7 @@ class Exporter:
|
|
351
351
|
if self.args.int8 and not self.args.data:
|
352
352
|
self.args.data = DEFAULT_CFG.data or TASK2DATA[getattr(model, "task", "detect")] # assign default data
|
353
353
|
LOGGER.warning(
|
354
|
-
"INT8 export requires a missing 'data' arg for calibration. Using default 'data={self.args.data}'."
|
354
|
+
f"INT8 export requires a missing 'data' arg for calibration. Using default 'data={self.args.data}'."
|
355
355
|
)
|
356
356
|
if tfjs and (ARM64 and LINUX):
|
357
357
|
raise SystemError("TF.js exports are not currently supported on ARM64 Linux")
|
@@ -51,6 +51,7 @@ class DetectionPredictor(BasePredictor):
|
|
51
51
|
>>> results = predictor.predict("path/to/image.jpg")
|
52
52
|
>>> processed_results = predictor.postprocess(preds, img, orig_imgs)
|
53
53
|
"""
|
54
|
+
save_feats = getattr(self, "save_feats", False)
|
54
55
|
preds = ops.non_max_suppression(
|
55
56
|
preds,
|
56
57
|
self.args.conf,
|
@@ -61,12 +62,35 @@ class DetectionPredictor(BasePredictor):
|
|
61
62
|
nc=len(self.model.names),
|
62
63
|
end2end=getattr(self.model, "end2end", False),
|
63
64
|
rotated=self.args.task == "obb",
|
65
|
+
return_idxs=save_feats,
|
64
66
|
)
|
65
67
|
|
66
68
|
if not isinstance(orig_imgs, list): # input images are a torch.Tensor, not a list
|
67
69
|
orig_imgs = ops.convert_torch2numpy_batch(orig_imgs)
|
68
70
|
|
69
|
-
|
71
|
+
if save_feats:
|
72
|
+
obj_feats = self.get_obj_feats(self._feats, preds[1])
|
73
|
+
preds = preds[0]
|
74
|
+
|
75
|
+
results = self.construct_results(preds, img, orig_imgs, **kwargs)
|
76
|
+
|
77
|
+
if save_feats:
|
78
|
+
for r, f in zip(results, obj_feats):
|
79
|
+
r.feats = f # add object features to results
|
80
|
+
|
81
|
+
return results
|
82
|
+
|
83
|
+
def get_obj_feats(self, feat_maps, idxs):
|
84
|
+
"""Extract object features from the feature maps."""
|
85
|
+
from math import gcd
|
86
|
+
|
87
|
+
import torch
|
88
|
+
|
89
|
+
s = gcd(*[x.shape[1] for x in feat_maps]) # find smallest vector length
|
90
|
+
obj_feats = torch.cat(
|
91
|
+
[x.permute(0, 2, 3, 1).reshape(x.shape[0], -1, s, x.shape[1] // s).mean(dim=-1) for x in feat_maps], dim=1
|
92
|
+
) # mean reduce all vectors to same length
|
93
|
+
return [feats[idx] for feats, idx in zip(obj_feats, idxs)] # for each image in batch, indexed separately
|
70
94
|
|
71
95
|
def construct_results(self, preds, img, orig_imgs):
|
72
96
|
"""
|
ultralytics/nn/autobackend.py
CHANGED
@@ -538,7 +538,7 @@ class AutoBackend(nn.Module):
|
|
538
538
|
metadata = yaml_load(metadata)
|
539
539
|
if metadata and isinstance(metadata, dict):
|
540
540
|
for k, v in metadata.items():
|
541
|
-
if k in {"stride", "batch"}:
|
541
|
+
if k in {"stride", "batch", "channels"}:
|
542
542
|
metadata[k] = int(v)
|
543
543
|
elif k in {"imgsz", "names", "kpt_shape", "args"} and isinstance(v, str):
|
544
544
|
metadata[k] = eval(v)
|
ultralytics/trackers/bot_sort.py
CHANGED
@@ -3,6 +3,10 @@
|
|
3
3
|
from collections import deque
|
4
4
|
|
5
5
|
import numpy as np
|
6
|
+
import torch
|
7
|
+
|
8
|
+
from ultralytics.utils.ops import xywh2xyxy
|
9
|
+
from ultralytics.utils.plotting import save_one_box
|
6
10
|
|
7
11
|
from .basetrack import TrackState
|
8
12
|
from .byte_tracker import BYTETracker, STrack
|
@@ -186,14 +190,18 @@ class BOTSORT(BYTETracker):
|
|
186
190
|
>>> bot_sort = BOTSORT(args, frame_rate=30)
|
187
191
|
"""
|
188
192
|
super().__init__(args, frame_rate)
|
193
|
+
self.gmc = GMC(method=args.gmc_method)
|
194
|
+
|
189
195
|
# ReID module
|
190
196
|
self.proximity_thresh = args.proximity_thresh
|
191
197
|
self.appearance_thresh = args.appearance_thresh
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
198
|
+
self.encoder = (
|
199
|
+
(lambda feats, s: [f.cpu().numpy() for f in feats]) # native features do not require any model
|
200
|
+
if self.args.model == "auto"
|
201
|
+
else ReID(args.model)
|
202
|
+
if args.with_reid
|
203
|
+
else None
|
204
|
+
)
|
197
205
|
|
198
206
|
def get_kalmanfilter(self):
|
199
207
|
"""Return an instance of KalmanFilterXYWH for predicting and updating object states in the tracking process."""
|
@@ -204,7 +212,7 @@ class BOTSORT(BYTETracker):
|
|
204
212
|
if len(dets) == 0:
|
205
213
|
return []
|
206
214
|
if self.args.with_reid and self.encoder is not None:
|
207
|
-
features_keep = self.encoder
|
215
|
+
features_keep = self.encoder(img, dets)
|
208
216
|
return [BOTrack(xyxy, s, c, f) for (xyxy, s, c, f) in zip(dets, scores, cls, features_keep)] # detections
|
209
217
|
else:
|
210
218
|
return [BOTrack(xyxy, s, c) for (xyxy, s, c) in zip(dets, scores, cls)] # detections
|
@@ -212,14 +220,14 @@ class BOTSORT(BYTETracker):
|
|
212
220
|
def get_dists(self, tracks, detections):
|
213
221
|
"""Calculate distances between tracks and detections using IoU and optionally ReID embeddings."""
|
214
222
|
dists = matching.iou_distance(tracks, detections)
|
215
|
-
dists_mask = dists > self.proximity_thresh
|
223
|
+
dists_mask = dists > (1 - self.proximity_thresh)
|
216
224
|
|
217
225
|
if self.args.fuse_score:
|
218
226
|
dists = matching.fuse_score(dists, detections)
|
219
227
|
|
220
228
|
if self.args.with_reid and self.encoder is not None:
|
221
229
|
emb_dists = matching.embedding_distance(tracks, detections) / 2.0
|
222
|
-
emb_dists[emb_dists > self.appearance_thresh] = 1.0
|
230
|
+
emb_dists[emb_dists > (1 - self.appearance_thresh)] = 1.0
|
223
231
|
emb_dists[dists_mask] = 1.0
|
224
232
|
dists = np.minimum(dists, emb_dists)
|
225
233
|
return dists
|
@@ -232,3 +240,19 @@ class BOTSORT(BYTETracker):
|
|
232
240
|
"""Reset the BOTSORT tracker to its initial state, clearing all tracked objects and internal states."""
|
233
241
|
super().reset()
|
234
242
|
self.gmc.reset_params()
|
243
|
+
|
244
|
+
|
245
|
+
class ReID:
|
246
|
+
"""YOLO model as encoder for re-identification."""
|
247
|
+
|
248
|
+
def __init__(self, model):
|
249
|
+
"""Initialize encoder for re-identification."""
|
250
|
+
from ultralytics import YOLO
|
251
|
+
|
252
|
+
self.model = YOLO(model)
|
253
|
+
self.model(embed=[len(self.model.model.model) - 2 if ".pt" in model else -1], verbose=False) # initialize
|
254
|
+
|
255
|
+
def __call__(self, img, dets):
|
256
|
+
"""Extract embeddings for detected objects."""
|
257
|
+
feats = self.model([save_one_box(det, img, save=False) for det in xywh2xyxy(torch.from_numpy(dets[:, :4]))])
|
258
|
+
return [f.cpu().numpy() for f in feats]
|
@@ -290,7 +290,7 @@ class BYTETracker:
|
|
290
290
|
self.kalman_filter = self.get_kalmanfilter()
|
291
291
|
self.reset_id()
|
292
292
|
|
293
|
-
def update(self, results, img=None):
|
293
|
+
def update(self, results, img=None, feats=None):
|
294
294
|
"""Updates the tracker with new detections and returns the current list of tracked objects."""
|
295
295
|
self.frame_id += 1
|
296
296
|
activated_stracks = []
|
@@ -316,7 +316,7 @@ class BYTETracker:
|
|
316
316
|
cls_keep = cls[remain_inds]
|
317
317
|
cls_second = cls[inds_second]
|
318
318
|
|
319
|
-
detections = self.init_track(dets, scores_keep, cls_keep, img)
|
319
|
+
detections = self.init_track(dets, scores_keep, cls_keep, img if feats is None else feats)
|
320
320
|
# Add newly detected tracklets to tracked_stracks
|
321
321
|
unconfirmed = []
|
322
322
|
tracked_stracks = [] # type: list[STrack]
|
@@ -347,7 +347,7 @@ class BYTETracker:
|
|
347
347
|
track.re_activate(det, self.frame_id, new_id=False)
|
348
348
|
refind_stracks.append(track)
|
349
349
|
# Step 3: Second association, with low score detection boxes association the untrack to the low score detections
|
350
|
-
detections_second = self.init_track(dets_second, scores_second, cls_second, img)
|
350
|
+
detections_second = self.init_track(dets_second, scores_second, cls_second, img if feats is None else feats)
|
351
351
|
r_tracked_stracks = [strack_pool[i] for i in u_track if strack_pool[i].state == TrackState.Tracked]
|
352
352
|
# TODO
|
353
353
|
dists = matching.iou_distance(r_tracked_stracks, detections_second)
|
ultralytics/trackers/track.py
CHANGED
@@ -44,6 +44,25 @@ def on_predict_start(predictor: object, persist: bool = False) -> None:
|
|
44
44
|
if cfg.tracker_type not in {"bytetrack", "botsort"}:
|
45
45
|
raise AssertionError(f"Only 'bytetrack' and 'botsort' are supported for now, but got '{cfg.tracker_type}'")
|
46
46
|
|
47
|
+
if cfg.tracker_type == "botsort" and cfg.with_reid and cfg.model == "auto":
|
48
|
+
from ultralytics.nn.modules.head import Detect
|
49
|
+
|
50
|
+
if not (
|
51
|
+
isinstance(predictor.model.model, torch.nn.Module)
|
52
|
+
and isinstance(predictor.model.model.model[-1], Detect)
|
53
|
+
and not predictor.model.model.model[-1].end2end
|
54
|
+
):
|
55
|
+
cfg.model = "yolo11n-cls.pt"
|
56
|
+
else:
|
57
|
+
predictor.save_feats = True
|
58
|
+
predictor._feats = None
|
59
|
+
|
60
|
+
# Register hook to extract input of Detect layer
|
61
|
+
def capture_io(module, input, output):
|
62
|
+
predictor._feats = input[0]
|
63
|
+
|
64
|
+
predictor.model.model.model[-1].register_forward_hook(capture_io)
|
65
|
+
|
47
66
|
trackers = []
|
48
67
|
for _ in range(predictor.dataset.bs):
|
49
68
|
tracker = TRACKER_MAP[cfg.tracker_type](args=cfg, frame_rate=30)
|
@@ -79,7 +98,7 @@ def on_predict_postprocess_end(predictor: object, persist: bool = False) -> None
|
|
79
98
|
det = (result.obb if is_obb else result.boxes).cpu().numpy()
|
80
99
|
if len(det) == 0:
|
81
100
|
continue
|
82
|
-
tracks = tracker.update(det, result.orig_img)
|
101
|
+
tracks = tracker.update(det, result.orig_img, getattr(result, "feats", None))
|
83
102
|
if len(tracks) == 0:
|
84
103
|
continue
|
85
104
|
idx = tracks[:, -1].astype(int)
|
ultralytics/utils/ops.py
CHANGED
@@ -194,6 +194,7 @@ def non_max_suppression(
|
|
194
194
|
in_place=True,
|
195
195
|
rotated=False,
|
196
196
|
end2end=False,
|
197
|
+
return_idxs=False,
|
197
198
|
):
|
198
199
|
"""
|
199
200
|
Perform non-maximum suppression (NMS) on a set of boxes, with support for masks and multiple labels per box.
|
@@ -221,6 +222,7 @@ def non_max_suppression(
|
|
221
222
|
in_place (bool): If True, the input prediction tensor will be modified in place.
|
222
223
|
rotated (bool): If Oriented Bounding Boxes (OBB) are being passed for NMS.
|
223
224
|
end2end (bool): If the model doesn't require NMS.
|
225
|
+
return_idxs (bool): Return the indices of the detections that were kept.
|
224
226
|
|
225
227
|
Returns:
|
226
228
|
(List[torch.Tensor]): A list of length batch_size, where each element is a tensor of
|
@@ -248,6 +250,7 @@ def non_max_suppression(
|
|
248
250
|
nm = prediction.shape[1] - nc - 4 # number of masks
|
249
251
|
mi = 4 + nc # mask start index
|
250
252
|
xc = prediction[:, 4:mi].amax(1) > conf_thres # candidates
|
253
|
+
xinds = torch.stack([torch.arange(len(i), device=prediction.device) for i in xc])[..., None] # to track idxs
|
251
254
|
|
252
255
|
# Settings
|
253
256
|
# min_wh = 2 # (pixels) minimum box width and height
|
@@ -263,10 +266,12 @@ def non_max_suppression(
|
|
263
266
|
|
264
267
|
t = time.time()
|
265
268
|
output = [torch.zeros((0, 6 + nm), device=prediction.device)] * bs
|
266
|
-
|
269
|
+
keepi = [torch.zeros((0, 1), device=prediction.device)] * bs # to store the kept idxs
|
270
|
+
for xi, (x, xk) in enumerate(zip(prediction, xinds)): # image index, (preds, preds indices)
|
267
271
|
# Apply constraints
|
268
272
|
# x[((x[:, 2:4] < min_wh) | (x[:, 2:4] > max_wh)).any(1), 4] = 0 # width-height
|
269
|
-
|
273
|
+
filt = xc[xi] # confidence
|
274
|
+
x, xk = x[filt], xk[filt]
|
270
275
|
|
271
276
|
# Cat apriori labels if autolabelling
|
272
277
|
if labels and len(labels[xi]) and not rotated:
|
@@ -286,20 +291,25 @@ def non_max_suppression(
|
|
286
291
|
if multi_label:
|
287
292
|
i, j = torch.where(cls > conf_thres)
|
288
293
|
x = torch.cat((box[i], x[i, 4 + j, None], j[:, None].float(), mask[i]), 1)
|
294
|
+
xk = xk[i]
|
289
295
|
else: # best class only
|
290
296
|
conf, j = cls.max(1, keepdim=True)
|
291
|
-
|
297
|
+
filt = conf.view(-1) > conf_thres
|
298
|
+
x = torch.cat((box, conf, j.float(), mask), 1)[filt]
|
299
|
+
xk = xk[filt]
|
292
300
|
|
293
301
|
# Filter by class
|
294
302
|
if classes is not None:
|
295
303
|
x = x[(x[:, 5:6] == classes).any(1)]
|
304
|
+
x, xk = x[filt], xk[filt]
|
296
305
|
|
297
306
|
# Check shape
|
298
307
|
n = x.shape[0] # number of boxes
|
299
308
|
if not n: # no boxes
|
300
309
|
continue
|
301
310
|
if n > max_nms: # excess boxes
|
302
|
-
|
311
|
+
filt = x[:, 4].argsort(descending=True)[:max_nms] # sort by confidence and remove excess boxes
|
312
|
+
x, xk = x[filt], xk[filt]
|
303
313
|
|
304
314
|
# Batched NMS
|
305
315
|
c = x[:, 5:6] * (0 if agnostic else max_wh) # classes
|
@@ -324,12 +334,12 @@ def non_max_suppression(
|
|
324
334
|
# if redundant:
|
325
335
|
# i = i[iou.sum(1) > 1] # require redundancy
|
326
336
|
|
327
|
-
output[xi] = x[i]
|
337
|
+
output[xi], keepi[xi] = x[i], xk[i].reshape(-1)
|
328
338
|
if (time.time() - t) > time_limit:
|
329
339
|
LOGGER.warning(f"NMS time limit {time_limit:.3f}s exceeded")
|
330
340
|
break # time limit exceeded
|
331
341
|
|
332
|
-
return output
|
342
|
+
return (output, keepi) if return_idxs else output
|
333
343
|
|
334
344
|
|
335
345
|
def clip_boxes(boxes, shape):
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: ultralytics
|
3
|
-
Version: 8.3.
|
3
|
+
Version: 8.3.114
|
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>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
ultralytics/__init__.py,sha256=
|
1
|
+
ultralytics/__init__.py,sha256=WBfQJaKm6-2YTizBGkwFR26SwOipY7Xf-o89_L_k6GE,730
|
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=-66Vtli1XqcRUJ9F_gYyEoKTO3gDMmOrDDnUEa5G84s,39646
|
@@ -25,7 +25,7 @@ ultralytics/cfg/datasets/coco8-seg.yaml,sha256=wpfFI-GfL5asbLtFyaHLE6593jdka7waE
|
|
25
25
|
ultralytics/cfg/datasets/coco8.yaml,sha256=qJX2TSM7nMV-PpCMXCX4702yp3a-ZF1ubLatlGN5XOE,1901
|
26
26
|
ultralytics/cfg/datasets/crack-seg.yaml,sha256=QEnxOouOKQ3TM6Cl8pBnX5QLPWdChZEBA28jaLkzxA4,852
|
27
27
|
ultralytics/cfg/datasets/dog-pose.yaml,sha256=Cr-J7dPhHmNfW9TKH48L22WPYmJFtWH-lbOAxLHnjKU,907
|
28
|
-
ultralytics/cfg/datasets/dota8-multispectral.yaml,sha256=
|
28
|
+
ultralytics/cfg/datasets/dota8-multispectral.yaml,sha256=F_GBGsFyuJwaWItCOn27CBDgCdsVyI9e0IcXKbZc7t0,1229
|
29
29
|
ultralytics/cfg/datasets/dota8.yaml,sha256=W43bp_6yUUVjs6vpogNrGI9vU7rLbEsSx6vyfIkDyj8,1073
|
30
30
|
ultralytics/cfg/datasets/hand-keypoints.yaml,sha256=5vue4kvPrAdd6ZyB90rZgtGUUHvSi3s_ht7jBBqX7a4,989
|
31
31
|
ultralytics/cfg/datasets/lvis.yaml,sha256=jD-z6cny0l_Cl7xN6RqiFAc7a7odcVwr3E8_jmH-wzA,29716
|
@@ -91,7 +91,7 @@ ultralytics/cfg/models/v9/yolov9m.yaml,sha256=WcKQ3xRsC1JMgA42Hx4xzr4FZmtE6B3wKv
|
|
91
91
|
ultralytics/cfg/models/v9/yolov9s.yaml,sha256=j_v3JWaPtiuM8aKJt15Z_4HPRCoHWn_G6Z07t8CZyjk,1391
|
92
92
|
ultralytics/cfg/models/v9/yolov9t.yaml,sha256=Q8GpSXE7fumhuJiQg4a2SkuS_UmnXqp-eoZxW_C0vEo,1375
|
93
93
|
ultralytics/cfg/solutions/default.yaml,sha256=c-9thwI7y7VmIoIM6AW70Z0r825SToH2h7gSCsUoAak,1664
|
94
|
-
ultralytics/cfg/trackers/botsort.yaml,sha256=
|
94
|
+
ultralytics/cfg/trackers/botsort.yaml,sha256=8fM3y4TXKKT_5aWsqmQw5JEgwNlBGlRaf8LXpJQSmYs,1216
|
95
95
|
ultralytics/cfg/trackers/bytetrack.yaml,sha256=6u-tiZlk16EqEwkNXaMrza6PAQmWj_ypgv26LGCtPDg,886
|
96
96
|
ultralytics/data/__init__.py,sha256=nAXaL1puCc7z_NjzQNlJnhbVhT9Fla2u7Dsqo7q1dAc,644
|
97
97
|
ultralytics/data/annotator.py,sha256=VEwb11FsEZm75qlEp8XDHFGKW0_rGsEaFDaBVd771Kw,2902
|
@@ -109,7 +109,7 @@ ultralytics/data/scripts/get_coco.sh,sha256=UuJpJeo3qQpTHVINeOpmP0NYmg8PhEFE3A8J
|
|
109
109
|
ultralytics/data/scripts/get_coco128.sh,sha256=qmRQl_hOKrsdHrTrnyQuFIH01oDz3lfaz138OgGfLt8,650
|
110
110
|
ultralytics/data/scripts/get_imagenet.sh,sha256=hr42H16bM47iT27rgS7MpEo-GeOZAYUQXgr0B2cwn48,1705
|
111
111
|
ultralytics/engine/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
112
|
-
ultralytics/engine/exporter.py,sha256=
|
112
|
+
ultralytics/engine/exporter.py,sha256=KeOF8LH0sgQdPd4jSny5ggATMf1AOebcTGdibLvS0AA,73663
|
113
113
|
ultralytics/engine/model.py,sha256=wS1cwgv0iyhsslMAZYMGlYDWitDIRW96d7MxwW-Sw5o,52817
|
114
114
|
ultralytics/engine/predictor.py,sha256=YJ5l-0qIpr6JAJxowswtZ0IqmXBqVTvAA9vR40v0sCM,21752
|
115
115
|
ultralytics/engine/results.py,sha256=C3j-kyjoMxn7bb8tK_kaYrOWB8-7qDYZ-_hSh1LPWMA,79742
|
@@ -160,7 +160,7 @@ ultralytics/models/yolo/classify/predict.py,sha256=JV9szginTQ9Lpob0FozhKMiEIu1vV
|
|
160
160
|
ultralytics/models/yolo/classify/train.py,sha256=rv2CJv9fzvtHf2q4l5g0RsjplWKeLpz637kKqjtrLNY,9737
|
161
161
|
ultralytics/models/yolo/classify/val.py,sha256=xk-YwSQdl_oqyCBV0OOAOcXFL6CchebFOc36AkRSyjE,9992
|
162
162
|
ultralytics/models/yolo/detect/__init__.py,sha256=GIRsLYR-kT4JJx7lh4ZZAFGBZj0aebokuU0A7JbjDVA,257
|
163
|
-
ultralytics/models/yolo/detect/predict.py,sha256=
|
163
|
+
ultralytics/models/yolo/detect/predict.py,sha256=7s9j-JaFNO0ATxlQZCav3PjAGe9qx5jrs2CGJ5_h7aM,5306
|
164
164
|
ultralytics/models/yolo/detect/train.py,sha256=YOEmUZkfJBq6hNbB_P10k-uy4_2fUgdPfVWzO4y8Egs,9538
|
165
165
|
ultralytics/models/yolo/detect/val.py,sha256=_gpsMoMzo_7Rv_vQDyvCeztp6NbuoPNQBNvDWH_R-L4,18434
|
166
166
|
ultralytics/models/yolo/obb/__init__.py,sha256=tQmpG8wVHsajWkZdmD6cjGohJ4ki64iSXQT8JY_dydo,221
|
@@ -184,7 +184,7 @@ ultralytics/models/yolo/yoloe/train.py,sha256=JF_QxJUU3_w8yhmTfKFTpI7rVRJL1g7z7w
|
|
184
184
|
ultralytics/models/yolo/yoloe/train_seg.py,sha256=6nN9DbP-AJKlJ3nIlvNn8VXFwFLQEVjSOgdN5aA817M,5309
|
185
185
|
ultralytics/models/yolo/yoloe/val.py,sha256=utdt8wZvvW9OPxO5rx8KsFlkLG0FXj0YMD7Jhyk54D8,8440
|
186
186
|
ultralytics/nn/__init__.py,sha256=rjociYD9lo_K-d-1s6TbdWklPLjTcEHk7OIlRDJstIE,615
|
187
|
-
ultralytics/nn/autobackend.py,sha256=
|
187
|
+
ultralytics/nn/autobackend.py,sha256=5FAYp7VktiOKxY0ta1BSewaXf_eH-EENvjnvazPotwQ,39214
|
188
188
|
ultralytics/nn/tasks.py,sha256=EwRC70qA3eP8Xp-gGP8OuN-q8LCGDrq1iRue7ncRSV4,62916
|
189
189
|
ultralytics/nn/text_model.py,sha256=H6OiLe0FOyZY4pd7-ixRTxaBgx3lOc2GmGTmrFnoJd0,10136
|
190
190
|
ultralytics/nn/modules/__init__.py,sha256=dXLtIk9rt944WfsTdpgEdWOg3HQEHdwQztuZ6WNJygs,3144
|
@@ -214,9 +214,9 @@ ultralytics/solutions/trackzone.py,sha256=05XVTQVCGHFAuFNPzyv0VXKQSJKiyWkU6zkXVo
|
|
214
214
|
ultralytics/solutions/vision_eye.py,sha256=cFjex7mau20Ww4Cuq9lbaAidVTByXk7nhZ0KVHqUzBY,2924
|
215
215
|
ultralytics/trackers/__init__.py,sha256=Zlu_Ig5osn7hqch_g5Be_e4pwZUkeeTQiesJCi0pFGI,255
|
216
216
|
ultralytics/trackers/basetrack.py,sha256=LYvWB5d7Woyrz_RlxaopjV07RQKH3sff_lZJfMcMxcA,4450
|
217
|
-
ultralytics/trackers/bot_sort.py,sha256=
|
218
|
-
ultralytics/trackers/byte_tracker.py,sha256=
|
219
|
-
ultralytics/trackers/track.py,sha256=
|
217
|
+
ultralytics/trackers/bot_sort.py,sha256=vu3gtJnaVZ3O_Z-YBHypY2IxOZgMf63tucRGPgcf5Es,11296
|
218
|
+
ultralytics/trackers/byte_tracker.py,sha256=D7JQ_6V8OUMQryxTrAr010UXMSaboQnI7T1xppzHXYg,20921
|
219
|
+
ultralytics/trackers/track.py,sha256=mu6L9RWAW8Nq0vJanX-hTTUST-OmLq49d8VV96-J9u8,4817
|
220
220
|
ultralytics/trackers/utils/__init__.py,sha256=lm6MckFYCPTbqIoX7w0s_daxdjNeBeKW6DXppv1-QUM,70
|
221
221
|
ultralytics/trackers/utils/gmc.py,sha256=dz3I5LbIv7h1__Xg7rGHecQFE32VFTe54tUnxb8F0Z8,14466
|
222
222
|
ultralytics/trackers/utils/kalman_filter.py,sha256=A0CqOnnaKH6kr0XwuHzyHmIU6aJAjJYxF9jVlNBKZHo,21326
|
@@ -233,7 +233,7 @@ ultralytics/utils/files.py,sha256=0K4O1cgqRiXaDw7EQK13TqA5SME_RrvfDVQSPetNr5w,80
|
|
233
233
|
ultralytics/utils/instance.py,sha256=UOEsXR9V-bXNRk6BTonASBEgeMqvzzAk4S7VdXZJUAM,18090
|
234
234
|
ultralytics/utils/loss.py,sha256=us3lwmSlIwEzoMztNjpet7Kb1r1-sMGyESykqgYPDVo,36945
|
235
235
|
ultralytics/utils/metrics.py,sha256=uv5O-2Ft8wYfTvDedFxiUqMZ6Nr2CL6I9ybGZiK3e2s,53773
|
236
|
-
ultralytics/utils/ops.py,sha256=
|
236
|
+
ultralytics/utils/ops.py,sha256=Fkbd91djIdf8npXRTLzUQMWsNak3aQKANFTTnOxl77Y,34783
|
237
237
|
ultralytics/utils/patches.py,sha256=qArRoYscf7jph-OwIYJAAkOB5bAM6pcktgXKc76A8HE,4860
|
238
238
|
ultralytics/utils/plotting.py,sha256=5QPK1y-gm4T1mK3sjfRZhIUJAyP05D1cJ7h9wHPTifU,46616
|
239
239
|
ultralytics/utils/tal.py,sha256=P5nPoR9qNnFuDIda0fsn8WP6m1V8r7EbvXUuhNRFFTA,20805
|
@@ -251,9 +251,9 @@ ultralytics/utils/callbacks/neptune.py,sha256=JaI95Cj2kIjUhlEEOiDN0-Drc-fDelLhNI
|
|
251
251
|
ultralytics/utils/callbacks/raytune.py,sha256=A8amUGpux7dYES-L1iSeMoMXBySGWCD1aUqT7vcG-pU,1284
|
252
252
|
ultralytics/utils/callbacks/tensorboard.py,sha256=jgYnym3cUQFAgN1GzTyO7l3jINtfAh8zhrllDvnLuVQ,5339
|
253
253
|
ultralytics/utils/callbacks/wb.py,sha256=iDRFXI4IIDm8R5OI89DMTmjs8aHLo1HRCLkOFKdaMG4,7507
|
254
|
-
ultralytics-8.3.
|
255
|
-
ultralytics-8.3.
|
256
|
-
ultralytics-8.3.
|
257
|
-
ultralytics-8.3.
|
258
|
-
ultralytics-8.3.
|
259
|
-
ultralytics-8.3.
|
254
|
+
ultralytics-8.3.114.dist-info/licenses/LICENSE,sha256=DZak_2itbUtvHzD3E7GNUYSRK6jdOJ-GqncQ2weavLA,34523
|
255
|
+
ultralytics-8.3.114.dist-info/METADATA,sha256=tMAyCuNauy-ZB4hDNUQT3FJ453ZeCRGXTc5G2MddF3Y,37354
|
256
|
+
ultralytics-8.3.114.dist-info/WHEEL,sha256=pxyMxgL8-pra_rKaQ4drOZAegBVuX-G_4nRHjjgWbmo,91
|
257
|
+
ultralytics-8.3.114.dist-info/entry_points.txt,sha256=YM_wiKyTe9yRrsEfqvYolNO5ngwfoL4-NwgKzc8_7sI,93
|
258
|
+
ultralytics-8.3.114.dist-info/top_level.txt,sha256=XP49TwiMw4QGsvTLSYiJhz1xF_k7ev5mQ8jJXaXi45Q,12
|
259
|
+
ultralytics-8.3.114.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|